{"version":3,"file":"index.cjs","sources":["../../src/datetime/moment_wrapper.ts","../../src/types/dataFrame.ts","../../src/field/fieldComparers.ts","../../src/types/plugin.ts","../../src/utils/Registry.ts","../../src/transformations/matchers/ids.ts","../../src/transformations/matchers/fieldTypeMatcher.ts","../../src/types/data.ts","../../src/transformations/fieldReducer.ts","../../src/transformations/matchers/compareValues.ts","../../src/transformations/matchers/fieldValueMatcher.ts","../../src/text/string.ts","../../src/transformations/matchers/nameMatcher.ts","../../src/transformations/matchers/predicates.ts","../../src/transformations/matchers/refIdMatcher.ts","../../src/transformations/matchers/simpleFieldMatcher.ts","../../src/transformations/matchers/valueMatchers/equalMatchers.ts","../../src/transformations/matchers/valueMatchers/nullMatchers.ts","../../src/transformations/matchers/valueMatchers/numericMatchers.ts","../../src/transformations/matchers/valueMatchers/rangeMatchers.ts","../../src/transformations/matchers/valueMatchers/regexMatchers.ts","../../src/transformations/matchers/valueMatchers/substringMatchers.ts","../../src/transformations/matchers.ts","../../src/utils/labels.ts","../../src/field/fieldState.ts","../../src/dataframe/ArrayDataFrame.ts","../../src/dataframe/DataFrameJSON.ts","../../src/dataframe/processDataFrame.ts","../../src/transformations/transformers/ids.ts","../../src/transformations/transformers/joinByField.ts","../../src/transformations/transformers/joinDataFrames.ts","../../src/utils/legend.ts","../../src/dataframe/StreamingDataFrame.ts","../../src/table/amendTimeSeries.ts","../../src/vector/FunctionalVector.ts","../../src/dataframe/DataFrameView.ts","../../src/dataframe/FieldCache.ts","../../src/utils/fieldParser.ts","../../src/dataframe/MutableDataFrame.ts","../../src/dataframe/dimensions.ts","../../src/dataframe/utils.ts","../../src/dataframe/frameComparisons.ts","../../src/query/refId.ts","../../src/text/text.ts","../../src/text/sanitize.ts","../../src/text/markdown.ts","../../src/events/eventFactory.ts","../../src/events/types.ts","../../src/events/EventBus.ts","../../src/events/common.ts","../../src/themes/colorManipulator.ts","../../src/types/fieldColor.ts","../../src/types/thresholds.ts","../../src/field/thresholds.ts","../../src/field/scale.ts","../../src/field/fieldColor.ts","../../src/field/FieldConfigOptionsRegistry.tsx","../../src/utils/url.ts","../../src/utils/location.ts","../../src/utils/dataLinks.ts","../../src/types/time.ts","../../src/datetime/common.ts","../../src/datetime/datemath.ts","../../src/datetime/formats.ts","../../src/datetime/parser.ts","../../src/utils/anyToNumber.ts","../../src/types/valueMapping.ts","../../src/utils/valueMappings.ts","../../src/valueFormats/arithmeticFormatters.ts","../../src/datetime/formatter.ts","../../src/valueFormats/dateTimeFormatters.ts","../../src/valueFormats/symbolFormatters.ts","../../src/valueFormats/categories.ts","../../src/valueFormats/valueFormats.ts","../../src/field/displayProcessor.ts","../../src/field/standardFieldConfigEditorRegistry.ts","../../src/field/fieldOverrides.ts","../../src/field/getFieldDisplayValuesProxy.ts","../../src/field/fieldDisplay.ts","../../src/field/overrides/processors.ts","../../src/types/OptionsUIRegistryBuilder.ts","../../src/utils/OptionsUIBuilders.ts","../../src/utils/flotPairs.ts","../../src/utils/docs.ts","../../src/utils/makeClassES5Compatible.ts","../../src/utils/withLoadingIndicator.ts","../../src/utils/variables.ts","../../src/utils/matchPluginId.ts","../../src/utils/datasource.ts","../../src/utils/deprecationWarning.ts","../../src/utils/csv.ts","../../src/utils/numbers.ts","../../src/utils/object.ts","../../src/utils/namedColorsPalette.ts","../../src/utils/series.ts","../../src/utils/binaryOperators.ts","../../src/utils/unaryOperators.ts","../../src/utils/nodeGraph.ts","../../src/utils/selectUtils.ts","../../src/utils/arrayUtils.ts","../../src/utils/store.ts","../../src/utils/LocalStorageValueProvider.tsx","../../src/utils/throwIfAngular.ts","../../src/transformations/transformers/ensureColumns.ts","../../src/transformations/transformers/noop.ts","../../src/transformations/transformers/calculateField.ts","../../src/transformations/transformers/concat.ts","../../src/transformations/transformers/convertFieldType.ts","../../src/transformations/transformers/filter.ts","../../src/transformations/transformers/filterByName.ts","../../src/transformations/transformers/filterByRefId.ts","../../src/transformations/transformers/filterByValue.ts","../../src/types/transformations.ts","../../src/transformations/transformers/formatString.ts","../../src/transformations/transformers/formatTime.ts","../../src/transformations/transformers/utils.ts","../../src/transformations/transformers/groupBy.ts","../../src/transformations/transformers/groupToNestedTable.ts","../../src/transformations/transformers/groupingToMatrix.ts","../../src/themes/breakpoints.ts","../../src/themes/palette.ts","../../src/themes/createColors.ts","../../src/themes/createComponents.ts","../../src/themes/createShadows.ts","../../src/themes/createShape.ts","../../src/themes/createSpacing.ts","../../src/themes/createTransitions.ts","../../src/themes/createTypography.ts","../../src/types/theme.ts","../../src/themes/createV1Theme.ts","../../src/themes/createVisualizationColors.ts","../../src/themes/zIndex.ts","../../src/themes/createTheme.ts","../../src/types/dataFrameTypes.ts","../../src/transformations/transformers/nulls/nullToValue.ts","../../src/transformations/transformers/histogram.ts","../../src/transformations/transformers/labelsToFields.ts","../../src/transformations/transformers/limit.ts","../../src/transformations/transformers/merge.ts","../../src/transformations/transformers/order.ts","../../src/transformations/transformers/rename.ts","../../src/transformations/transformers/organize.ts","../../src/transformations/transformers/reduce.ts","../../src/transformations/transformers/renameByRegex.ts","../../src/transformations/transformers/seriesToRows.ts","../../src/transformations/transformers/sortBy.ts","../../src/transformations/transformers/transpose.ts","../../src/transformations/transformers.ts","../../src/transformations/standardTransformersRegistry.ts","../../src/transformations/transformDataFrame.ts","../../src/transformations/transformers/nulls/nullInsertThreshold.ts","../../src/monaco/languageRegistry.ts","../../src/themes/themeDefinitions/aubergine.ts","../../src/themes/themeDefinitions/debug.ts","../../src/themes/themeDefinitions/desertbloom.ts","../../src/themes/themeDefinitions/gildedgrove.ts","../../src/themes/themeDefinitions/mars.ts","../../src/themes/themeDefinitions/matrix.ts","../../src/themes/themeDefinitions/sapphiredusk.ts","../../src/themes/themeDefinitions/synthwave.ts","../../src/themes/themeDefinitions/tron.ts","../../src/themes/themeDefinitions/victorian.ts","../../src/themes/themeDefinitions/zen.ts","../../src/themes/themeDefinitions/gloom.ts","../../src/themes/registry.ts","../../src/themes/context.tsx","../../src/datetime/rangeutil.ts","../../src/datetime/timezones.ts","../../src/datetime/durationutil.ts","../../src/types/layout.ts","../../src/panel/registryFactories.ts","../../src/panel/PanelPlugin.ts","../../src/types/fieldOverrides.ts","../../src/panel/getPanelOptionsWithDefaults.ts","../../src/context/plugins/PluginContext.tsx","../../src/context/plugins/PluginContextProvider.tsx","../../src/context/plugins/DataSourcePluginContextProvider.tsx","../../src/context/plugins/usePluginContext.tsx","../../src/context/plugins/guards.ts","../../src/types/pluginSignature.ts","../../src/types/icon.ts","../../src/types/alerts.ts","../../src/types/variables.ts","../../src/types/legacyEvents.ts","../../src/types/orgs.ts","../../src/types/templateVars.ts","../../src/types/live.ts","../../src/types/pluginExtensions.ts","../../src/types/scopes.ts","../../src/types/panel.ts","../../src/types/datasource.ts","../../src/types/app.ts","../../src/types/vector.ts","../../src/types/navModel.ts","../../src/types/logs.ts","../../src/types/annotations.ts","../../src/types/query.ts","../../src/types/dashboard.ts","../../src/types/dataLink.ts","../../src/types/action.ts","../../src/types/constants.ts","../../src/vector/CircularVector.ts","../../src/vector/ArrayVector.ts","../../src/dataframe/CircularDataFrame.ts","../../src/rbac/rbac.ts"],"sourcesContent":["import moment, { Moment, MomentInput, DurationInputArg1, DurationInputArg2 } from 'moment';\n\nimport { TimeZone } from '../types/time';\n/* eslint-disable id-blacklist, no-restricted-imports */\nexport interface DateTimeBuiltinFormat {\n  __momentBuiltinFormatBrand: any;\n}\nexport const ISO_8601: DateTimeBuiltinFormat = moment.ISO_8601;\nexport type DateTimeInput = Date | string | number | Array<string | number> | DateTime | null; // | undefined;\nexport type FormatInput = string | DateTimeBuiltinFormat | undefined;\nexport type DurationInput = string | number | DateTimeDuration;\nexport type DurationUnit =\n  | 'year'\n  | 'years'\n  | 'y'\n  | 'month'\n  | 'months'\n  | 'M'\n  | 'week'\n  | 'weeks'\n  | 'isoWeek'\n  | 'w'\n  | 'day'\n  | 'days'\n  | 'd'\n  | 'hour'\n  | 'hours'\n  | 'h'\n  | 'minute'\n  | 'minutes'\n  | 'm'\n  | 'second'\n  | 'seconds'\n  | 's'\n  | 'millisecond'\n  | 'milliseconds'\n  | 'ms'\n  | 'quarter'\n  | 'quarters'\n  | 'Q';\n\nexport interface DateTimeLocale {\n  firstDayOfWeek: () => number;\n}\n\nexport interface DateTimeDuration {\n  asHours: () => number;\n  hours: () => number;\n  minutes: () => number;\n  seconds: () => number;\n  asSeconds: () => number;\n}\n\nexport interface DateTime extends Object {\n  add: (amount?: DateTimeInput, unit?: DurationUnit) => DateTime;\n  set: (unit: DurationUnit | 'date', amount: DateTimeInput) => void;\n  diff: (amount: DateTimeInput, unit?: DurationUnit, truncate?: boolean) => number;\n  endOf: (unitOfTime: DurationUnit) => DateTime;\n  format: (formatInput?: FormatInput) => string;\n  fromNow: (withoutSuffix?: boolean) => string;\n  from: (formaInput: DateTimeInput) => string;\n  isSame: (input?: DateTimeInput, granularity?: DurationUnit) => boolean;\n  isBefore: (input?: DateTimeInput) => boolean;\n  isValid: () => boolean;\n  local: () => DateTime;\n  locale: (locale: string) => DateTime;\n  startOf: (unitOfTime: DurationUnit) => DateTime;\n  subtract: (amount?: DateTimeInput, unit?: DurationUnit) => DateTime;\n  toDate: () => Date;\n  toISOString: (keepOffset?: boolean) => string;\n  isoWeekday: (day?: number | string) => number | string;\n  valueOf: () => number;\n  unix: () => number;\n  utc: () => DateTime;\n  utcOffset: () => number;\n  hour?: () => number;\n  minute?: () => number;\n}\n\nexport const setLocale = (language: string) => {\n  moment.locale(language);\n};\n\nexport const getLocale = () => {\n  return moment.locale();\n};\n\nexport const getLocaleData = (): DateTimeLocale => {\n  return moment.localeData();\n};\n\nexport const isDateTimeInput = (value: unknown): value is DateTimeInput => {\n  return (\n    value === null ||\n    typeof value === 'string' ||\n    typeof value === 'number' ||\n    value instanceof Date ||\n    (Array.isArray(value) && value.every((v) => typeof v === 'string' || typeof v === 'number')) ||\n    isDateTime(value)\n  );\n};\n\nexport const isDateTime = (value: unknown): value is DateTime => {\n  return moment.isMoment(value);\n};\n\nexport const toUtc = (input?: DateTimeInput, formatInput?: FormatInput): DateTime => {\n  return moment.utc(input as MomentInput, formatInput) as DateTime;\n};\n\nexport const toDuration = (input?: DurationInput, unit?: DurationUnit): DateTimeDuration => {\n  // moment built-in types are a bit flaky, for example `isoWeek` is not in the type definition but it's present in the js source.\n  return moment.duration(input as DurationInputArg1, unit as DurationInputArg2) as DateTimeDuration;\n};\n\nexport const dateTime = (input?: DateTimeInput, formatInput?: FormatInput): DateTime => {\n  return moment(input as MomentInput, formatInput) as DateTime;\n};\n\nexport const dateTimeAsMoment = (input?: DateTimeInput) => {\n  return dateTime(input) as Moment;\n};\n\nexport const dateTimeForTimeZone = (\n  timezone?: TimeZone,\n  input?: DateTimeInput,\n  formatInput?: FormatInput\n): DateTime => {\n  if (timezone && timezone !== 'browser') {\n    let result: moment.Moment;\n\n    if (typeof input === 'string' && formatInput) {\n      result = moment.tz(input, formatInput, timezone);\n    } else {\n      result = moment.tz(input, timezone);\n    }\n\n    if (isDateTime(result)) {\n      return result;\n    }\n  }\n\n  return dateTime(input, formatInput);\n};\n\nexport const getWeekdayIndex = (day: string) => {\n  return moment.weekdays().findIndex((wd) => wd.toLowerCase() === day.toLowerCase());\n};\n\nexport const getWeekdayIndexByEnglishName = (day: string) =>\n  ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'].findIndex(\n    (wd) => wd.toLowerCase() === day.toLowerCase()\n  );\n\nexport const setWeekStart = (weekStart?: string) => {\n  const suffix = '-weekStart';\n  const language = getLocale().replace(suffix, '');\n  const dow = weekStart ? getWeekdayIndexByEnglishName(weekStart) : -1;\n  if (dow !== -1) {\n    moment.updateLocale(language + suffix, {\n      parentLocale: language,\n      week: {\n        dow,\n      },\n    });\n  } else {\n    setLocale(language);\n  }\n};\n","import { HideSeriesConfig } from '@grafana/schema';\n\nimport { ScopedVars } from './ScopedVars';\nimport { Action } from './action';\nimport { QueryResultBase, Labels, NullValueMode } from './data';\nimport { DataLink, LinkModel } from './dataLink';\nimport { DecimalCount, DisplayProcessor, DisplayValue, DisplayValueAlignmentFactors } from './displayValue';\nimport { FieldColor } from './fieldColor';\nimport { ThresholdsConfig } from './thresholds';\nimport { ValueMapping } from './valueMapping';\n\n/** @public */\nexport enum FieldType {\n  time = 'time', // or date\n  number = 'number',\n  string = 'string',\n  boolean = 'boolean',\n\n  // Used to detect that the value is some kind of trace data to help with the visualisation and processing.\n  trace = 'trace',\n  geo = 'geo',\n  enum = 'enum',\n  other = 'other', // Object, Array, etc\n  frame = 'frame', // DataFrame\n\n  // @alpha Nested DataFrames. This is for example used with tables where expanding a row will show a nested table.\n  // The value should be DataFrame[] even if it is a single frame.\n  nestedFrames = 'nestedFrames',\n}\n\n/**\n * @public\n * Every property is optional\n *\n * Plugins may extend this with additional properties. Something like series overrides\n */\nexport interface FieldConfig<TOptions = any> {\n  /**\n   * The display value for this field.  This supports template variables blank is auto.\n   * If you are a datasource plugin, do not set this. Use `field.value` and if that\n   * is not enough, use `field.config.displayNameFromDS`.\n   */\n  displayName?: string;\n\n  /**\n   * This can be used by data sources that need to customize how values are named.\n   * When this property is configured, this value is used rather than the default naming strategy.\n   */\n  displayNameFromDS?: string;\n\n  /**\n   * Human readable field metadata\n   */\n  description?: string;\n\n  /**\n   * An explict path to the field in the datasource.  When the frame meta includes a path,\n   * This will default to `${frame.meta.path}/${field.name}\n   *\n   * When defined, this value can be used as an identifier within the datasource scope, and\n   * may be used to update the results\n   */\n  path?: string;\n\n  /**\n   * True if data source can write a value to the path.  Auth/authz are supported separately\n   */\n  writeable?: boolean;\n\n  /**\n   * True if data source field supports ad-hoc filters\n   */\n  filterable?: boolean;\n\n  // Numeric Options\n  unit?: string;\n  decimals?: DecimalCount; // Significant digits (for display)\n  min?: number | null;\n  max?: number | null;\n\n  // Interval indicates the expected regular step between values in the series.\n  // When an interval exists, consumers can identify \"missing\" values when the expected value is not present.\n  // The grafana timeseries visualization will render disconnected values when missing values are found it the time field.\n  // The interval uses the same units as the values.  For time.Time, this is defined in milliseconds.\n  interval?: number | null;\n\n  // Convert input values into a display string\n  mappings?: ValueMapping[];\n\n  // Map numeric values to states\n  thresholds?: ThresholdsConfig;\n\n  // Map values to a display color\n  color?: FieldColor;\n\n  // Used when reducing field values\n  nullValueMode?: NullValueMode;\n\n  // The behavior when clicking on a result\n  links?: DataLink[];\n\n  actions?: Action[];\n\n  // Alternative to empty string\n  noValue?: string;\n\n  // The field type may map to specific config\n  type?: FieldTypeConfig;\n\n  // Panel Specific Values\n  custom?: TOptions;\n\n  // Calculate min max per field\n  fieldMinMax?: boolean;\n}\n\nexport interface FieldTypeConfig {\n  enum?: EnumFieldConfig;\n}\n\nexport interface EnumFieldConfig {\n  text?: string[];\n  color?: string[];\n  icon?: string[];\n  description?: string[];\n}\n\n/** @public */\nexport interface ValueLinkConfig {\n  /**\n   * Result of field reduction\n   */\n  calculatedValue?: DisplayValue;\n  /**\n   * Index of the value row within Field. Should be provided only when value is not a result of a reduction\n   */\n  valueRowIndex?: number;\n}\n\nexport interface Field<T = any> {\n  /**\n   * Name of the field (column)\n   */\n  name: string;\n  /**\n   *  Field value type (string, number, etc)\n   */\n  type: FieldType;\n  /**\n   *  Meta info about how field and how to display it\n   */\n  config: FieldConfig;\n\n  /**\n   * The raw field values\n   */\n  values: T[];\n\n  /**\n   * When type === FieldType.Time, this can optionally store\n   * the nanosecond-precison fractions as integers between\n   * 0 and 999999.\n   */\n  nanos?: number[];\n\n  labels?: Labels;\n\n  /**\n   * Cached values with appropriate display and id values\n   */\n  state?: FieldState | null;\n\n  /**\n   * Convert a value for display\n   */\n  display?: DisplayProcessor;\n\n  /**\n   * Get value data links with variables interpolated\n   */\n  getLinks?: (config: ValueLinkConfig) => Array<LinkModel<Field>>;\n}\n\n/** @alpha */\nexport interface FieldState {\n  /**\n   * An appropriate name for the field (does not include frame info)\n   */\n  displayName?: string | null;\n\n  /**\n   * Cache of reduced values\n   */\n  calcs?: FieldCalcs;\n\n  /**\n   * The numeric range for values in this field.  This value will respect the min/max\n   * set in field config, or when set to `auto` this will have the min/max for all data\n   * in the response\n   */\n  range?: NumericRange;\n\n  /**\n   * Appropriate values for templating\n   */\n  scopedVars?: ScopedVars;\n\n  /**\n   * Series index is index for this field in a larger data set that can span multiple DataFrames\n   * Useful for assigning color to series by looking up a color in a palette using this index\n   */\n  seriesIndex?: number;\n\n  /**\n   * Location of this field within the context frames results\n   *\n   * @internal -- we will try to make this unnecessary\n   */\n  origin?: DataFrameFieldIndex;\n\n  /**\n   * Boolean value is true if field is in a larger data set with multiple frames.\n   * This is only related to the cached displayName property above.\n   */\n  multipleFrames?: boolean;\n\n  /**\n   * Boolean value is true if a null filling threshold has been applied\n   * against the frame of the field. This is used to avoid cases in which\n   * this would applied more than one time.\n   */\n  nullThresholdApplied?: boolean;\n\n  /**\n   * Can be used by visualizations to cache max display value lengths to aid alignment.\n   * It's up to each visualization to calculate and set this.\n   */\n  alignmentFactors?: DisplayValueAlignmentFactors;\n\n  /**\n   * This is the current ad-hoc state of whether this series is hidden in viz, tooltip, and legend.\n   *\n   * Currently this will match field.config.custom.hideFrom because fieldOverrides applies the special __system\n   * override to the actual config during toggle via legend. This should go away once we have a unified system\n   * for layering ad hoc field overrides and options but still being able to get the stateless fieldConfig and panel options\n   */\n  hideFrom?: HideSeriesConfig;\n}\n\n/** @public */\nexport interface NumericRange {\n  min?: number | null;\n  max?: number | null;\n  delta: number;\n}\n\nexport interface DataFrame extends QueryResultBase {\n  name?: string;\n  fields: Field[]; // All fields of equal length\n\n  // The number of rows\n  length: number;\n}\n\n// Data frame that include aggregate value, for use by timeSeriesTableTransformer / chart cell type\nexport interface DataFrameWithValue extends DataFrame {\n  value: number | null;\n}\n\n/**\n * @public\n * Like a field, but properties are optional and values may be a simple array\n */\nexport interface FieldDTO<T = any> {\n  name: string; // The column name\n  type?: FieldType;\n  config?: FieldConfig;\n  values?: T[];\n  labels?: Labels;\n}\n\n/**\n * @public\n * Like a DataFrame, but fields may be a FieldDTO\n */\nexport interface DataFrameDTO extends QueryResultBase {\n  name?: string;\n  fields: Array<FieldDTO | Field>;\n}\n\nexport interface FieldCalcs extends Record<string, any> {}\n\n/** @deprecated check data plane docs: https://grafana.com/developers/dataplane/heatmap **/\nexport const TIME_SERIES_VALUE_FIELD_NAME = 'Value';\nexport const TIME_SERIES_TIME_FIELD_NAME = 'Time';\nexport const TIME_SERIES_METRIC_FIELD_NAME = 'Metric';\n\n/**\n * Describes where a specific data frame field is located within a\n * dataset of type DataFrame[]\n *\n * @internal -- we will try to make this unnecessary\n */\nexport interface DataFrameFieldIndex {\n  frameIndex: number;\n  fieldIndex: number;\n}\n","import { isNumber } from 'lodash';\n\nimport { isDateTimeInput, dateTime } from '../datetime/moment_wrapper';\nimport { Field, FieldType } from '../types/dataFrame';\n\ntype IndexComparer = (a: number, b: number) => number;\n\nexport const fieldIndexComparer = (field: Field, reverse = false): IndexComparer => {\n  const values = field.values;\n\n  switch (field.type) {\n    case FieldType.number:\n      return numericIndexComparer(values, reverse);\n    case FieldType.string:\n      return stringIndexComparer(values, reverse);\n    case FieldType.boolean:\n      return booleanIndexComparer(values, reverse);\n    case FieldType.time:\n      if (typeof field.values[0] === 'number') {\n        return timestampIndexComparer(values, reverse);\n      }\n      return timeIndexComparer(values, reverse);\n    default:\n      return naturalIndexComparer(reverse);\n  }\n};\n\nconst timeComparer = (a: unknown, b: unknown): number => {\n  if (!a || !b) {\n    return falsyComparer(a, b);\n  }\n\n  if (isNumber(a) && isNumber(b)) {\n    return numericComparer(a, b);\n  }\n\n  if (isDateTimeInput(a) && isDateTimeInput(b)) {\n    if (dateTime(a).isBefore(b)) {\n      return -1;\n    }\n\n    if (dateTime(b).isBefore(a)) {\n      return 1;\n    }\n  }\n\n  return 0;\n};\n\nconst numericComparer = (a: number, b: number): number => {\n  return a - b;\n};\n\n// Using the Intl.Collator object compare method results in much faster\n// string sorting than .localeCompare\nconst compare = new Intl.Collator('en', { sensitivity: 'base' }).compare;\n\nconst stringComparer = (a: string, b: string): number => {\n  if (!a || !b) {\n    return falsyComparer(a, b);\n  }\n\n  return compare(String(a), String(b));\n};\n\nconst booleanComparer = (a: boolean, b: boolean): number => {\n  return falsyComparer(a, b);\n};\n\nconst falsyComparer = (a: unknown, b: unknown): number => {\n  if (!a && b) {\n    return 1;\n  }\n\n  if (a && !b) {\n    return -1;\n  }\n\n  return 0;\n};\n\nconst timestampIndexComparer = (values: number[], reverse: boolean): IndexComparer => {\n  let mult = reverse ? -1 : 1;\n  return (a: number, b: number): number => mult * (values[a] - values[b]);\n};\n\nconst timeIndexComparer = (values: unknown[], reverse: boolean): IndexComparer => {\n  return (a: number, b: number): number => {\n    const vA = values[a];\n    const vB = values[b];\n    return reverse ? timeComparer(vB, vA) : timeComparer(vA, vB);\n  };\n};\n\nconst booleanIndexComparer = (values: boolean[], reverse: boolean): IndexComparer => {\n  return (a: number, b: number): number => {\n    const vA = values[a];\n    const vB = values[b];\n    return reverse ? booleanComparer(vB, vA) : booleanComparer(vA, vB);\n  };\n};\n\nconst numericIndexComparer = (values: number[], reverse: boolean): IndexComparer => {\n  return (a: number, b: number): number => {\n    const vA = values[a];\n    const vB = values[b];\n    return reverse ? numericComparer(vB, vA) : numericComparer(vA, vB);\n  };\n};\n\nconst stringIndexComparer = (values: string[], reverse: boolean): IndexComparer => {\n  return (a: number, b: number): number => {\n    const vA = values[a];\n    const vB = values[b];\n    return reverse ? stringComparer(vB, vA) : stringComparer(vA, vB);\n  };\n};\n\nconst naturalIndexComparer = (reverse: boolean): IndexComparer => {\n  return (a: number, b: number): number => {\n    return reverse ? numericComparer(b, a) : numericComparer(a, b);\n  };\n};\n","import { ComponentType } from 'react';\n\nimport { KeyValue } from './data';\nimport { IconName } from './icon';\n\n/** Describes plugins life cycle status */\nexport enum PluginState {\n  alpha = 'alpha', // Only included if `enable_alpha` config option is true\n  beta = 'beta', // Will show a warning banner\n  stable = 'stable', // Will not show anything\n  deprecated = 'deprecated', // Will continue to work -- but not show up in the options to add\n}\n\n/** Describes {@link https://grafana.com/docs/grafana/latest/plugins | type of plugin} */\nexport enum PluginType {\n  panel = 'panel',\n  datasource = 'datasource',\n  app = 'app',\n  renderer = 'renderer',\n}\n\n/** Describes status of {@link https://grafana.com/docs/grafana/latest/plugins/plugin-signatures/ | plugin signature} */\nexport enum PluginSignatureStatus {\n  internal = 'internal', // core plugin, no signature\n  valid = 'valid', // signed and accurate MANIFEST\n  invalid = 'invalid', // invalid signature\n  modified = 'modified', // valid signature, but content mismatch\n  missing = 'missing', // missing signature file\n}\n\n/** Describes level of {@link https://grafana.com/docs/grafana/latest/plugins/plugin-signatures/#plugin-signature-levels/ | plugin signature level} */\nexport enum PluginSignatureType {\n  grafana = 'grafana',\n  commercial = 'commercial',\n  community = 'community',\n  private = 'private',\n  core = 'core',\n}\n\n/** Describes error code returned from Grafana plugins API call */\nexport enum PluginErrorCode {\n  missingSignature = 'signatureMissing',\n  invalidSignature = 'signatureInvalid',\n  modifiedSignature = 'signatureModified',\n  failedBackendStart = 'failedBackendStart',\n  angular = 'angular',\n}\n\n/** Describes error returned from Grafana plugins API call */\nexport interface PluginError {\n  errorCode: PluginErrorCode;\n  pluginId: string;\n  pluginType?: PluginType;\n}\n\nexport interface AngularMeta {\n  detected: boolean;\n  hideDeprecation: boolean;\n}\n\n// Signals to SystemJS how to load frontend js assets.\nexport enum PluginLoadingStrategy {\n  fetch = 'fetch',\n  script = 'script',\n}\n\nexport interface PluginMeta<T extends KeyValue = {}> {\n  id: string;\n  name: string;\n  type: PluginType;\n  info: PluginMetaInfo;\n  includes?: PluginInclude[];\n  state?: PluginState;\n  aliasIDs?: string[];\n\n  // System.load & relative URLS\n  module: string;\n  baseUrl: string;\n\n  // Define plugin requirements\n  dependencies?: PluginDependencies;\n\n  // Filled in by the backend\n  jsonData?: T;\n  secureJsonData?: KeyValue;\n  secureJsonFields?: KeyValue<boolean>;\n  enabled?: boolean;\n  autoEnabled?: boolean;\n  defaultNavUrl?: string;\n  hasUpdate?: boolean;\n  enterprise?: boolean;\n  latestVersion?: string;\n  pinned?: boolean;\n  signature?: PluginSignatureStatus;\n  signatureType?: PluginSignatureType;\n  signatureOrg?: string;\n  live?: boolean;\n  angular?: AngularMeta;\n  angularDetected?: boolean;\n  loadingStrategy?: PluginLoadingStrategy;\n  extensions?: PluginExtensions;\n  moduleHash?: string;\n\n  // Paths to the translations for the plugin\n  translations?: Record<string, string>;\n}\n\ninterface PluginDependencyInfo {\n  id: string;\n  name: string;\n  version: string;\n  type: PluginType;\n}\n\nexport interface PluginDependencies {\n  grafanaDependency?: string;\n  grafanaVersion: string;\n  plugins: PluginDependencyInfo[];\n  extensions: {\n    // A list of exposed component IDs\n    exposedComponents: string[];\n  };\n}\n\nexport type ExtensionInfo = {\n  targets: string | string[];\n  title: string;\n  description?: string;\n};\n\nexport interface PluginExtensions {\n  // The component extensions that the plugin registers\n  addedComponents: ExtensionInfo[];\n\n  addedFunctions: ExtensionInfo[];\n\n  // The link extensions that the plugin registers\n  addedLinks: ExtensionInfo[];\n\n  // The React components that the plugin exposes\n  exposedComponents: Array<{\n    id: string;\n    title: string;\n    description?: string;\n  }>;\n\n  // The extension points that the plugin provides\n  extensionPoints: Array<{\n    id: string;\n    title: string;\n    description?: string;\n  }>;\n}\n\nexport enum PluginIncludeType {\n  dashboard = 'dashboard',\n  page = 'page',\n\n  // Only valid for apps\n  panel = 'panel',\n  datasource = 'datasource',\n}\n\nexport interface PluginInclude {\n  type: PluginIncludeType;\n  name: string;\n  path?: string;\n  icon?: string;\n\n  // \"Admin\", \"Editor\" or \"Viewer\". If set then the include will only show up in the navigation if the user has the required roles.\n  role?: string;\n\n  // if action is set then the include will only show up in the navigation if the user has the required permission.\n  // The action will take precedence over the role.\n  action?: string;\n\n  // Adds the \"page\" or \"dashboard\" type includes to the navigation if set to `true`.\n  addToNav?: boolean;\n\n  // Angular app pages\n  component?: string;\n}\n\ninterface PluginMetaInfoLink {\n  name: string;\n  url: string;\n  target?: '_blank' | '_self' | '_parent' | '_top';\n}\n\nexport interface PluginBuildInfo {\n  time?: number;\n  repo?: string;\n  branch?: string;\n  hash?: string;\n  number?: number;\n  pr?: number;\n}\n\nexport interface ScreenshotInfo {\n  name: string;\n  path: string;\n}\n\nexport interface PluginMetaInfo {\n  author: {\n    name: string;\n    url?: string;\n  };\n  description: string;\n  links: PluginMetaInfoLink[];\n  logos: {\n    large: string;\n    small: string;\n  };\n  build?: PluginBuildInfo;\n  screenshots: ScreenshotInfo[];\n  updated: string;\n  version: string;\n}\n\nexport interface PluginConfigPageProps<T extends PluginMeta> {\n  plugin: GrafanaPlugin<T>;\n  query: KeyValue; // The URL query parameters\n}\n\nexport interface PluginConfigPage<T extends PluginMeta> {\n  title: string; // Display\n  icon?: IconName;\n  id: string; // Unique, in URL\n\n  body: ComponentType<PluginConfigPageProps<T>>;\n}\n\nexport class GrafanaPlugin<T extends PluginMeta = PluginMeta> {\n  // Meta is filled in by the plugin loading system\n  meta: T;\n\n  // This is set if the plugin system had errors loading the plugin\n  loadError?: boolean;\n\n  // Config control (app/datasource)\n  /** @deprecated it will be removed in a future release */\n  angularConfigCtrl?: any;\n\n  // Show configuration tabs on the plugin page\n  configPages?: Array<PluginConfigPage<T>>;\n\n  // Tabs on the plugin page\n  addConfigPage(tab: PluginConfigPage<T>) {\n    if (!this.configPages) {\n      this.configPages = [];\n    }\n    this.configPages.push(tab);\n    return this;\n  }\n\n  /**\n   * @deprecated -- this is no longer necessary and will be removed\n   */\n  setChannelSupport() {\n    console.warn('[deprecation] plugin is using ignored option: setChannelSupport', this.meta);\n    return this;\n  }\n\n  constructor() {\n    this.meta = {} as T;\n  }\n}\n","import { PluginState } from '../types/plugin';\nimport { SelectableValue } from '../types/select';\n\nexport interface RegistryItem {\n  id: string; // Unique Key -- saved in configs\n  name: string; // Display Name, can change without breaking configs\n  description?: string;\n  aliasIds?: string[]; // when the ID changes, we may want backwards compatibility ('current' => 'last')\n\n  /**\n   * Some extensions should not be user selectable\n   *  like: 'all' and 'any' matchers;\n   */\n  excludeFromPicker?: boolean;\n\n  /**\n   * Optional feature state\n   */\n  state?: PluginState;\n}\n\nexport interface RegistryItemWithOptions<TOptions = any> extends RegistryItem {\n  /**\n   * Convert the options to a string\n   */\n  getOptionsDisplayText?: (options: TOptions) => string;\n\n  /**\n   * Default options used if nothing else is specified\n   */\n  defaultOptions?: TOptions;\n}\n\ninterface RegistrySelectInfo {\n  options: Array<SelectableValue<string>>;\n  current: Array<SelectableValue<string>>;\n}\n\nexport class Registry<T extends RegistryItem> {\n  private ordered: T[] = [];\n  private byId = new Map<string, T>();\n  private initialized = false;\n\n  constructor(private init?: () => T[]) {\n    this.init = init;\n  }\n\n  setInit = (init: () => T[]) => {\n    if (this.initialized) {\n      throw new Error('Registry already initialized');\n    }\n    this.init = init;\n  };\n\n  getIfExists(id: string | undefined): T | undefined {\n    if (!this.initialized) {\n      this.initialize();\n    }\n\n    if (id) {\n      return this.byId.get(id);\n    }\n\n    return undefined;\n  }\n\n  private initialize() {\n    if (this.init) {\n      for (const ext of this.init()) {\n        this.register(ext);\n      }\n    }\n    this.sort();\n    this.initialized = true;\n  }\n\n  get(id: string): T {\n    const v = this.getIfExists(id);\n    if (!v) {\n      throw new Error(`\"${id}\" not found in: ${this.list().map((v) => v.id)}`);\n    }\n    return v;\n  }\n\n  selectOptions(current?: string[], filter?: (ext: T) => boolean): RegistrySelectInfo {\n    if (!this.initialized) {\n      this.initialize();\n    }\n\n    const select: RegistrySelectInfo = {\n      options: [],\n      current: [],\n    };\n\n    const currentOptions: Record<string, SelectableValue<string>> = {};\n    if (current) {\n      for (const id of current) {\n        currentOptions[id] = {};\n      }\n    }\n\n    for (const ext of this.ordered) {\n      if (ext.excludeFromPicker) {\n        continue;\n      }\n      if (filter && !filter(ext)) {\n        continue;\n      }\n\n      const option = {\n        value: ext.id,\n        label: ext.name,\n        description: ext.description,\n      };\n\n      if (ext.state === PluginState.alpha) {\n        option.label += ' (alpha)';\n      }\n\n      select.options.push(option);\n      if (currentOptions[ext.id]) {\n        currentOptions[ext.id] = option;\n      }\n    }\n\n    if (current) {\n      // this makes sure we preserve the order of ids\n      select.current = Object.values(currentOptions);\n    }\n\n    return select;\n  }\n\n  /**\n   * Return a list of values by ID, or all values if not specified\n   */\n  list(ids?: string[]): T[] {\n    if (!this.initialized) {\n      this.initialize();\n    }\n\n    if (ids) {\n      const found: T[] = [];\n      for (const id of ids) {\n        const v = this.getIfExists(id);\n        if (v) {\n          found.push(v);\n        }\n      }\n      return found;\n    }\n\n    return this.ordered;\n  }\n\n  isEmpty(): boolean {\n    if (!this.initialized) {\n      this.initialize();\n    }\n\n    return this.ordered.length === 0;\n  }\n\n  register(ext: T) {\n    if (this.byId.has(ext.id)) {\n      throw new Error('Duplicate Key:' + ext.id);\n    }\n\n    this.byId.set(ext.id, ext);\n    this.ordered.push(ext);\n\n    if (ext.aliasIds) {\n      for (const alias of ext.aliasIds) {\n        if (!this.byId.has(alias)) {\n          this.byId.set(alias, ext);\n        }\n      }\n    }\n\n    if (this.initialized) {\n      this.sort();\n    }\n  }\n\n  private sort() {\n    // TODO sort the list\n  }\n}\n","// This needs to be in its own file to avoid circular references\n\n// Builtin Predicates\n// not using 'any' and 'never' since they are reserved keywords\nexport enum MatcherID {\n  anyMatch = 'anyMatch', // checks children\n  allMatch = 'allMatch', // checks children\n  invertMatch = 'invertMatch', // checks child\n  alwaysMatch = 'alwaysMatch',\n  neverMatch = 'neverMatch',\n}\n\nexport enum FieldMatcherID {\n  // Specific Types\n  numeric = 'numeric',\n  time = 'time', // Can be multiple times\n  first = 'first',\n  firstTimeField = 'firstTimeField', // Only the first time field\n\n  // With arguments\n  byType = 'byType',\n  byTypes = 'byTypes',\n  byName = 'byName',\n  byNames = 'byNames',\n  byRegexp = 'byRegexp',\n  byRegexpOrNames = 'byRegexpOrNames',\n  byFrameRefID = 'byFrameRefID',\n  byValue = 'byValue',\n  // byIndex = 'byIndex',\n  // byLabel = 'byLabel',\n}\n\n/**\n * Field name matchers\n */\nexport enum FrameMatcherID {\n  byName = 'byName',\n  byRefId = 'byRefId',\n  byIndex = 'byIndex',\n}\n\n/**\n * @public\n */\nexport enum ValueMatcherID {\n  regex = 'regex',\n  isNull = 'isNull',\n  isNotNull = 'isNotNull',\n  greater = 'greater',\n  greaterOrEqual = 'greaterOrEqual',\n  lower = 'lower',\n  lowerOrEqual = 'lowerOrEqual',\n  equal = 'equal',\n  notEqual = 'notEqual',\n  substring = 'substring',\n  notSubstring = 'notSubstring',\n  between = 'between',\n}\n","import { Field, FieldType, DataFrame } from '../../types/dataFrame';\nimport { FieldMatcherInfo } from '../../types/transformations';\n\nimport { FieldMatcherID } from './ids';\n\n// General Field matcher\nconst fieldTypeMatcher: FieldMatcherInfo<FieldType> = {\n  id: FieldMatcherID.byType,\n  name: 'Field Type',\n  description: 'match based on the field type',\n  defaultOptions: FieldType.number,\n\n  get: (type: FieldType) => {\n    return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n      return type === field.type;\n    };\n  },\n\n  getOptionsDisplayText: (type: FieldType) => {\n    return `Field type: ${type}`;\n  },\n};\n\n// General Field matcher (multiple types)\nconst fieldTypesMatcher: FieldMatcherInfo<Set<FieldType>> = {\n  id: FieldMatcherID.byTypes,\n  name: 'Field Type',\n  description: 'match based on the field types',\n  defaultOptions: new Set(),\n\n  get: (types) => {\n    return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n      return types.has(field.type);\n    };\n  },\n\n  getOptionsDisplayText: (types) => {\n    return `Field types: ${[...types].join(' | ')}`;\n  },\n};\n\n// Numeric Field matcher\n// This gets its own entry so it shows up in the dropdown\nconst numericMatcher: FieldMatcherInfo = {\n  id: FieldMatcherID.numeric,\n  name: 'Numeric Fields',\n  description: 'Fields with type number',\n\n  get: () => {\n    return fieldTypeMatcher.get(FieldType.number);\n  },\n\n  getOptionsDisplayText: () => {\n    return 'Numeric Fields';\n  },\n};\n\n// Time Field matcher\nconst timeMatcher: FieldMatcherInfo = {\n  id: FieldMatcherID.time,\n  name: 'Time Fields',\n  description: 'Fields with type time',\n\n  get: () => {\n    return fieldTypeMatcher.get(FieldType.time);\n  },\n\n  getOptionsDisplayText: () => {\n    return 'Time Fields';\n  },\n};\n\n/**\n * Registry Initialization\n */\nexport function getFieldTypeMatchers(): FieldMatcherInfo[] {\n  return [fieldTypeMatcher, fieldTypesMatcher, numericMatcher, timeMatcher];\n}\n","import { DataFrameDTO, FieldConfig } from './dataFrame';\nimport { DataFrameType } from './dataFrameTypes';\nimport { ApplyFieldOverrideOptions } from './fieldOverrides';\nimport { PanelPluginDataSupport } from './panel';\nimport { DataTopic } from './query';\nimport { DataTransformerConfig } from './transformations';\n\nexport type KeyValue<T = any> = Record<string, T>;\n\n/**\n * Represent panel data loading state.\n * @public\n */\nexport enum LoadingState {\n  NotStarted = 'NotStarted',\n  Loading = 'Loading',\n  Streaming = 'Streaming',\n  Done = 'Done',\n  Error = 'Error',\n}\n\n// Should be kept in sync with grafana-plugin-sdk-go/data/frame_meta.go\nexport const preferredVisualizationTypes = [\n  'graph',\n  'table',\n  'logs',\n  'trace',\n  'nodeGraph',\n  'flamegraph',\n  'rawPrometheus',\n] as const;\nexport type PreferredVisualisationType = (typeof preferredVisualizationTypes)[number];\n\n/**\n * Should be kept in sync with https://github.com/grafana/grafana-plugin-sdk-go/blob/main/data/frame_meta.go\n * @public\n */\nexport interface QueryResultMeta {\n  type?: DataFrameType;\n\n  /**\n   * TypeVersion is the version of the Type property. Versions greater than 0.0 correspond to the dataplane\n   * contract documentation https://github.com/grafana/grafana-plugin-sdk-go/tree/main/data/contract_docs.\n   */\n  typeVersion?: [number, number];\n\n  /** DatasSource Specific Values */\n  custom?: Record<string, any>;\n\n  /** Stats */\n  stats?: QueryResultMetaStat[];\n\n  /** Meta Notices */\n  notices?: QueryResultMetaNotice[];\n\n  /** Currently used to show results in Explore only in preferred visualisation option */\n  preferredVisualisationType?: PreferredVisualisationType;\n\n  /** Set the panel plugin id to use to render the data when using Explore. If the plugin cannot be found\n   * will fall back to {@link preferredVisualisationType}.\n   *\n   * @alpha\n   */\n  preferredVisualisationPluginId?: string;\n\n  /** The path for live stream updates for this frame */\n  channel?: string;\n\n  /** Did the query response come from the cache */\n  isCachedResponse?: boolean;\n\n  /**\n   * Optionally identify which topic the frame should be assigned to.\n   * A value specified in the response will override what the request asked for.\n   */\n  dataTopic?: DataTopic;\n\n  /**\n   * This is the raw query sent to the underlying system.  All macros and templating\n   * as been applied.  When metadata contains this value, it will be shown in the query inspector\n   */\n  executedQueryString?: string;\n\n  /**\n   * A browsable path on the datasource\n   */\n  path?: string;\n\n  /**\n   * defaults to '/'\n   */\n  pathSeparator?: string;\n\n  /** A time shift metadata indicating a result of comparison */\n  timeCompare?: {\n    diffMs: number;\n    isTimeShiftQuery: boolean;\n  };\n\n  /**\n   * Legacy data source specific, should be moved to custom\n   * */\n  searchWords?: string[]; // used by log models and loki\n  limit?: number; // used by log models and loki\n  json?: boolean; // used to keep track of old json doc values\n  instant?: boolean;\n\n  /**\n   * Array of field indices which values create a unique id for each row. Ideally this should be globally unique ID\n   * but that isn't guarantied. Should help with keeping track and deduplicating rows in visualizations, especially\n   * with streaming data with frequent updates.\n   * Example: TraceID in Tempo, table name + primary key in SQL\n   */\n  uniqueRowIdFields?: number[];\n}\n\nexport interface QueryResultMetaStat extends FieldConfig {\n  displayName: string;\n  value: number;\n}\n\n/**\n * QueryResultMetaNotice is a structure that provides user notices for query result data\n * @public\n */\nexport interface QueryResultMetaNotice {\n  /**\n   * Specify the notice severity\n   */\n  severity: 'info' | 'warning' | 'error';\n\n  /**\n   * Notice descriptive text\n   */\n  text: string;\n\n  /**\n   * An optional link that may be displayed in the UI.\n   * This value may be an absolute URL or relative to grafana root\n   */\n  link?: string;\n\n  /**\n   * Optionally suggest an appropriate tab for the panel inspector\n   */\n  inspect?: 'meta' | 'error' | 'data' | 'stats';\n}\n\n/**\n * @public\n */\nexport interface QueryResultBase {\n  /**\n   * Matches the query target refId\n   */\n  refId?: string;\n\n  /**\n   * Used by some backend data sources to communicate back info about the execution (generated sql, timing)\n   */\n  meta?: QueryResultMeta;\n}\n\nexport interface Labels {\n  [key: string]: string;\n}\n\n/** @deprecated this is a very old (pre Grafana 7 + DataFrame) representation for tabular data  */\nexport interface Column {\n  text: string; // For a Column, the 'text' is the field name\n  filterable?: boolean;\n  unit?: string;\n  custom?: Record<string, any>;\n}\n\n/** @deprecated this is a very old (pre Grafana 7 + DataFrame) representation for tabular data  */\nexport interface TableData extends QueryResultBase {\n  name?: string;\n  columns: Column[];\n  rows: any[][];\n  type?: string;\n}\n\n/** @deprecated this is a very old (pre Grafana 7 + DataFrame) representation for tabular data  */\nexport type TimeSeriesValue = number | null;\n\n/** @deprecated this is a very old (pre Grafana 7 + DataFrame) representation for tabular data  */\nexport type TimeSeriesPoints = TimeSeriesValue[][];\n\n/** @deprecated this is a very old (pre Grafana 7 + DataFrame) representation for tabular data  */\nexport interface TimeSeries extends QueryResultBase {\n  target: string;\n  /**\n   * If name is manually configured via an alias / legend pattern\n   */\n  title?: string;\n  datapoints: TimeSeriesPoints;\n  unit?: string;\n  tags?: Labels;\n}\n\nexport enum NullValueMode {\n  Null = 'null',\n  Ignore = 'connected',\n  AsZero = 'null as zero',\n}\n\n/**\n * Describes and API for exposing panel specific data configurations.\n */\nexport interface DataConfigSource {\n  configRev?: number;\n  getDataSupport: () => PanelPluginDataSupport;\n  getTransformations: () => DataTransformerConfig[] | undefined;\n  getFieldOverrideOptions: () => ApplyFieldOverrideOptions | undefined;\n  snapshotData?: DataFrameDTO[];\n}\n\ntype Truthy<T> = T extends false | '' | 0 | null | undefined ? never : T;\nexport const isTruthy = <T>(value: T): value is Truthy<T> => Boolean(value);\n\n/**\n * Serves no runtime purpose - only used to make typescript check a value has been correctly\n * narrowed to an object\n */\nfunction identityObject(value: object): object {\n  return value;\n}\n\n/**\n * Utility type predicate to check if a value is typeof object, but excludes \"null\".\n *\n * We normally discourage the use of type predicates in favor of just inline typescript narrowing,\n * but this is a special case to handle null annoyingly being typeof object\n */\nexport function isObject(value: unknown): value is object {\n  if (typeof value === 'object' && value !== null) {\n    identityObject(value);\n\n    return true;\n  }\n\n  return false;\n}\n","// Libraries\nimport { isNumber } from 'lodash';\n\nimport { NullValueMode } from '../types/data';\nimport { Field, FieldCalcs, FieldType } from '../types/dataFrame';\nimport { Registry, RegistryItem } from '../utils/Registry';\n\nexport enum ReducerID {\n  sum = 'sum',\n  max = 'max',\n  min = 'min',\n  logmin = 'logmin',\n  mean = 'mean',\n  variance = 'variance',\n  stdDev = 'stdDev',\n  last = 'last',\n  median = 'median',\n  first = 'first',\n  count = 'count',\n  range = 'range',\n  diff = 'diff',\n  diffperc = 'diffperc',\n  delta = 'delta',\n  step = 'step',\n  firstNotNull = 'firstNotNull',\n  lastNotNull = 'lastNotNull',\n  changeCount = 'changeCount',\n  distinctCount = 'distinctCount',\n  allIsZero = 'allIsZero',\n  allIsNull = 'allIsNull',\n  allValues = 'allValues',\n  uniqueValues = 'uniqueValues',\n  p1 = 'p1',\n  p2 = 'p2',\n  p3 = 'p3',\n  p4 = 'p4',\n  p5 = 'p5',\n  p6 = 'p6',\n  p7 = 'p7',\n  p8 = 'p8',\n  p9 = 'p9',\n  p10 = 'p10',\n  p11 = 'p11',\n  p12 = 'p12',\n  p13 = 'p13',\n  p14 = 'p14',\n  p15 = 'p15',\n  p16 = 'p16',\n  p17 = 'p17',\n  p18 = 'p18',\n  p19 = 'p19',\n  p20 = 'p20',\n  p21 = 'p21',\n  p22 = 'p22',\n  p23 = 'p23',\n  p24 = 'p24',\n  p25 = 'p25',\n  p26 = 'p26',\n  p27 = 'p27',\n  p28 = 'p28',\n  p29 = 'p29',\n  p30 = 'p30',\n  p31 = 'p31',\n  p32 = 'p32',\n  p33 = 'p33',\n  p34 = 'p34',\n  p35 = 'p35',\n  p36 = 'p36',\n  p37 = 'p37',\n  p38 = 'p38',\n  p39 = 'p39',\n  p40 = 'p40',\n  p41 = 'p41',\n  p42 = 'p42',\n  p43 = 'p43',\n  p44 = 'p44',\n  p45 = 'p45',\n  p46 = 'p46',\n  p47 = 'p47',\n  p48 = 'p48',\n  p49 = 'p49',\n  p50 = 'p50',\n  p51 = 'p51',\n  p52 = 'p52',\n  p53 = 'p53',\n  p54 = 'p54',\n  p55 = 'p55',\n  p56 = 'p56',\n  p57 = 'p57',\n  p58 = 'p58',\n  p59 = 'p59',\n  p60 = 'p60',\n  p61 = 'p61',\n  p62 = 'p62',\n  p63 = 'p63',\n  p64 = 'p64',\n  p65 = 'p65',\n  p66 = 'p66',\n  p67 = 'p67',\n  p68 = 'p68',\n  p69 = 'p69',\n  p70 = 'p70',\n  p71 = 'p71',\n  p72 = 'p72',\n  p73 = 'p73',\n  p74 = 'p74',\n  p75 = 'p75',\n  p76 = 'p76',\n  p77 = 'p77',\n  p78 = 'p78',\n  p79 = 'p79',\n  p80 = 'p80',\n  p81 = 'p81',\n  p82 = 'p82',\n  p83 = 'p83',\n  p84 = 'p84',\n  p85 = 'p85',\n  p86 = 'p86',\n  p87 = 'p87',\n  p88 = 'p88',\n  p89 = 'p89',\n  p90 = 'p90',\n  p91 = 'p91',\n  p92 = 'p92',\n  p93 = 'p93',\n  p94 = 'p94',\n  p95 = 'p95',\n  p96 = 'p96',\n  p97 = 'p97',\n  p98 = 'p98',\n  p99 = 'p99',\n}\n\nexport function getFieldTypeForReducer(id: ReducerID, fallback: FieldType): FieldType {\n  return id === ReducerID.count || id === ReducerID.distinctCount || id === ReducerID.changeCount\n    ? FieldType.number\n    : id === ReducerID.allIsNull || id === ReducerID.allIsZero\n      ? FieldType.boolean\n      : fallback;\n}\n\nexport function isReducerID(id: string): id is ReducerID {\n  return Object.keys(ReducerID).includes(id);\n}\n\n// Internal function\ntype FieldReducer = (field: Field, ignoreNulls: boolean, nullAsZero: boolean) => FieldCalcs;\n\nexport interface FieldReducerInfo extends RegistryItem {\n  // Internal details\n  emptyInputResult?: unknown; // typically null, but some things like 'count' & 'sum' should be zero\n  standard: boolean; // The most common stats can all be calculated in a single pass\n  preservesUnits: boolean; // Whether this reducer preserves units, certain ones don't e.g. count, distinct count, etc,\n  reduce?: FieldReducer;\n}\n\ninterface ReduceFieldOptions {\n  field: Field;\n  reducers: string[]; // The stats to calculate\n}\n\n/**\n * @returns an object with a key for each selected stat\n * NOTE: This will also modify the 'field.state' object,\n * leaving values in a cache until cleared.\n */\nexport function reduceField(options: ReduceFieldOptions): FieldCalcs {\n  const { field, reducers } = options;\n\n  if (!field || !reducers || reducers.length < 1) {\n    return {};\n  }\n\n  if (field.state?.calcs) {\n    // Find the values we need to calculate\n    const missing: string[] = [];\n    for (const s of reducers) {\n      if (!field.state.calcs.hasOwnProperty(s)) {\n        missing.push(s);\n      }\n    }\n    if (missing.length < 1) {\n      return {\n        ...field.state.calcs,\n      };\n    }\n  }\n  if (!field.state) {\n    field.state = {};\n  }\n\n  const queue = fieldReducers.list(reducers);\n\n  // Return early for empty series\n  // This lets the concrete implementations assume at least one row\n  const data = field.values;\n  if (data && data.length < 1) {\n    const calcs: FieldCalcs = { ...field.state.calcs };\n    for (const reducer of queue) {\n      calcs[reducer.id] = reducer.emptyInputResult !== null ? reducer.emptyInputResult : null;\n    }\n    return (field.state.calcs = calcs);\n  }\n\n  // Default to Ignore for nullValueMode.\n  const { nullValueMode = NullValueMode.Ignore } = field.config;\n\n  const ignoreNulls = nullValueMode === NullValueMode.Ignore;\n  const nullAsZero = nullValueMode === NullValueMode.AsZero;\n\n  // Avoid calculating all the standard stats if possible\n  if (queue.length === 1 && queue[0].reduce) {\n    const values = queue[0].reduce(field, ignoreNulls, nullAsZero);\n    field.state.calcs = {\n      ...field.state.calcs,\n      ...values,\n    };\n    return values;\n  }\n\n  // For now everything can use the standard stats\n  let values = doStandardCalcs(field, ignoreNulls, nullAsZero);\n\n  for (const reducer of queue) {\n    if (!values.hasOwnProperty(reducer.id) && reducer.reduce) {\n      values = {\n        ...values,\n        ...reducer.reduce(field, ignoreNulls, nullAsZero),\n      };\n    }\n  }\n\n  field.state.calcs = {\n    ...field.state.calcs,\n    ...values,\n  };\n  return values;\n}\n\n// ------------------------------------------------------------------------------\n//\n//  No Exported symbols below here.\n//\n// ------------------------------------------------------------------------------\n\nexport const fieldReducers = new Registry<FieldReducerInfo>(() => [\n  {\n    id: ReducerID.lastNotNull,\n    name: 'Last *',\n    description: 'Last non-null value (also excludes NaNs)',\n    standard: true,\n    aliasIds: ['current'],\n    reduce: calculateLastNotNull,\n    preservesUnits: true,\n  },\n  {\n    id: ReducerID.last,\n    name: 'Last',\n    description: 'Last value',\n    standard: true,\n    reduce: calculateLast,\n    preservesUnits: true,\n  },\n  {\n    id: ReducerID.firstNotNull,\n    name: 'First *',\n    description: 'First non-null value (also excludes NaNs)',\n    standard: true,\n    reduce: calculateFirstNotNull,\n    preservesUnits: true,\n  },\n  {\n    id: ReducerID.first,\n    name: 'First',\n    description: 'First Value',\n    standard: true,\n    reduce: calculateFirst,\n    preservesUnits: true,\n  },\n  { id: ReducerID.min, name: 'Min', description: 'Minimum Value', standard: true, preservesUnits: true },\n  { id: ReducerID.max, name: 'Max', description: 'Maximum Value', standard: true, preservesUnits: true },\n  {\n    id: ReducerID.mean,\n    name: 'Mean',\n    description: 'Average Value',\n    standard: true,\n    aliasIds: ['avg'],\n    preservesUnits: true,\n  },\n  {\n    id: ReducerID.median,\n    name: 'Median',\n    description: 'Median Value',\n    standard: false,\n    reduce: calculateMedian,\n    aliasIds: ['median'],\n    preservesUnits: true,\n  },\n  {\n    id: ReducerID.variance,\n    name: 'Variance',\n    description: 'Variance of all values in a field',\n    standard: false,\n    reduce: calculateStdDev,\n    preservesUnits: true,\n  },\n  {\n    id: ReducerID.stdDev,\n    name: 'StdDev',\n    description: 'Standard deviation of all values in a field',\n    standard: false,\n    reduce: calculateStdDev,\n    preservesUnits: true,\n  },\n  {\n    id: ReducerID.sum,\n    name: 'Total',\n    description: 'The sum of all values',\n    emptyInputResult: 0,\n    standard: true,\n    aliasIds: ['total'],\n    preservesUnits: true,\n  },\n  {\n    id: ReducerID.count,\n    name: 'Count',\n    description: 'Number of values in response',\n    emptyInputResult: 0,\n    standard: true,\n    preservesUnits: false,\n  },\n  {\n    id: ReducerID.range,\n    name: 'Range',\n    description: 'Difference between minimum and maximum values',\n    standard: true,\n    preservesUnits: true,\n  },\n  {\n    id: ReducerID.delta,\n    name: 'Delta',\n    description: 'Cumulative change in value',\n    standard: true,\n    preservesUnits: true,\n  },\n  {\n    id: ReducerID.step,\n    name: 'Step',\n    description: 'Minimum interval between values',\n    standard: true,\n    preservesUnits: true,\n  },\n  {\n    id: ReducerID.diff,\n    name: 'Difference',\n    description: 'Difference between first and last values',\n    standard: true,\n    preservesUnits: true,\n  },\n  {\n    id: ReducerID.logmin,\n    name: 'Min (above zero)',\n    description: 'Used for log min scale',\n    standard: true,\n    preservesUnits: true,\n  },\n  {\n    id: ReducerID.allIsZero,\n    name: 'All Zeros',\n    description: 'All values are zero',\n    emptyInputResult: false,\n    standard: true,\n    preservesUnits: true,\n  },\n  {\n    id: ReducerID.allIsNull,\n    name: 'All Nulls',\n    description: 'All values are null',\n    emptyInputResult: true,\n    standard: true,\n    preservesUnits: false,\n  },\n  {\n    id: ReducerID.changeCount,\n    name: 'Change Count',\n    description: 'Number of times the value changes',\n    standard: false,\n    reduce: calculateChangeCount,\n    preservesUnits: false,\n  },\n  {\n    id: ReducerID.distinctCount,\n    name: 'Distinct Count',\n    description: 'Number of distinct values',\n    standard: false,\n    reduce: calculateDistinctCount,\n    preservesUnits: false,\n  },\n  {\n    id: ReducerID.diffperc,\n    name: 'Difference percent',\n    description: 'Percentage difference between first and last values',\n    standard: true,\n    preservesUnits: false,\n  },\n  {\n    id: ReducerID.allValues,\n    name: 'All values',\n    description: 'Returns an array with all values',\n    standard: false,\n    reduce: (field: Field) => ({ allValues: [...field.values] }),\n    preservesUnits: false,\n  },\n  {\n    id: ReducerID.uniqueValues,\n    name: 'All unique values',\n    description: 'Returns an array with all unique values',\n    standard: false,\n    reduce: (field: Field) => ({\n      uniqueValues: [...new Set(field.values)],\n    }),\n    preservesUnits: false,\n  },\n  ...buildPercentileReducers(),\n]);\n\n// This `Array.from` will build an array of elements from 1 to 99\nconst buildPercentileReducers = (percentiles = [...Array.from({ length: 99 }, (_, i) => i + 1)]) => {\n  const percentileReducers: FieldReducerInfo[] = [];\n  const nth = (n: number) =>\n    n > 3 && n < 21 ? 'th' : n % 10 === 1 ? 'st' : n % 10 === 2 ? 'nd' : n % 10 === 3 ? 'rd' : 'th';\n\n  percentiles.forEach((p) => {\n    const percentile = p / 100;\n    const id = `p${p}`;\n    const name = `${p}${nth(p)} %`;\n    const description = `${p}${nth(p)} percentile value`;\n\n    percentileReducers.push({\n      id: id,\n      name: name,\n      description: description,\n      standard: false,\n      reduce: (field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs => {\n        return { [id]: calculatePercentile(field, percentile, ignoreNulls, nullAsZero) };\n      },\n      preservesUnits: true,\n    });\n  });\n  return percentileReducers;\n};\n\n// Used for test cases\nexport const defaultCalcs: FieldCalcs = {\n  sum: 0,\n  max: -Number.MAX_VALUE,\n  min: Number.MAX_VALUE,\n  logmin: Number.MAX_VALUE,\n  mean: null,\n  last: null,\n  first: null,\n  lastNotNull: null,\n  firstNotNull: null,\n  count: 0,\n  nonNullCount: 0,\n  allIsNull: true,\n  allIsZero: true,\n  range: null,\n  diff: null,\n  delta: 0,\n  step: Number.MAX_VALUE,\n  diffperc: 0,\n  // Just used for calculations -- not exposed as a stat\n  previousDeltaUp: true,\n};\n\nexport function doStandardCalcs(field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n  const calcs: FieldCalcs = { ...defaultCalcs };\n\n  const data = field.values;\n\n  // early return for undefined / empty series\n  if (!data) {\n    return calcs;\n  }\n\n  const isNumberField = field.type === FieldType.number || field.type === FieldType.time;\n\n  for (let i = 0; i < data.length; i++) {\n    let currentValue = data[i];\n\n    if (i === 0) {\n      calcs.first = currentValue;\n    }\n\n    calcs.last = currentValue;\n\n    if (currentValue == null) {\n      if (ignoreNulls) {\n        continue;\n      }\n      if (nullAsZero) {\n        currentValue = 0;\n      }\n    }\n\n    calcs.count++;\n\n    if (currentValue != null && !Number.isNaN(currentValue)) {\n      // null || undefined || NaN\n      const isFirst = calcs.firstNotNull === null;\n      if (isFirst) {\n        calcs.firstNotNull = currentValue;\n      }\n\n      if (isNumberField) {\n        calcs.sum += currentValue;\n        calcs.allIsNull = false;\n        calcs.nonNullCount++;\n\n        if (!isFirst) {\n          const step = currentValue - calcs.lastNotNull!;\n          if (calcs.step > step) {\n            calcs.step = step; // the minimum interval\n          }\n\n          if (calcs.lastNotNull! > currentValue) {\n            // counter reset\n            calcs.previousDeltaUp = false;\n          } else {\n            if (calcs.previousDeltaUp) {\n              calcs.delta += step; // normal increment\n            }\n            calcs.previousDeltaUp = true;\n          }\n        }\n\n        if (currentValue > calcs.max) {\n          calcs.max = currentValue;\n        }\n\n        if (currentValue < calcs.min) {\n          calcs.min = currentValue;\n        }\n\n        if (currentValue < calcs.logmin && currentValue > 0) {\n          calcs.logmin = currentValue;\n        }\n      }\n\n      if (currentValue !== 0) {\n        calcs.allIsZero = false;\n      }\n\n      calcs.lastNotNull = currentValue;\n    }\n  }\n\n  if (calcs.max === -Number.MAX_VALUE) {\n    calcs.max = null;\n  }\n\n  if (calcs.min === Number.MAX_VALUE) {\n    calcs.min = null;\n  }\n\n  if (calcs.step === Number.MAX_VALUE) {\n    calcs.step = null;\n  }\n\n  if (calcs.nonNullCount > 0) {\n    calcs.mean = calcs.sum! / calcs.nonNullCount;\n  }\n\n  if (calcs.allIsNull) {\n    calcs.allIsZero = false;\n  }\n\n  if (calcs.max !== null && calcs.min !== null) {\n    calcs.range = calcs.max - calcs.min;\n  }\n\n  if (isNumber(calcs.firstNotNull) && isNumber(calcs.lastNotNull)) {\n    calcs.diff = calcs.lastNotNull - calcs.firstNotNull;\n  }\n\n  if (isNumber(calcs.firstNotNull) && isNumber(calcs.diff)) {\n    calcs.diffperc = (calcs.diff / calcs.firstNotNull) * 100;\n  }\n\n  return calcs;\n}\n\nfunction calculateFirst(field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n  return { first: field.values[0] };\n}\n\nfunction calculateFirstNotNull(field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n  const data = field.values;\n  for (let idx = 0; idx < data.length; idx++) {\n    const v = data[idx];\n    if (v != null && !Number.isNaN(v)) {\n      return { firstNotNull: v };\n    }\n  }\n  return { firstNotNull: null };\n}\n\nfunction calculateLast(field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n  const data = field.values;\n  return { last: data[data.length - 1] };\n}\n\nfunction calculateLastNotNull(field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n  const data = field.values;\n  let idx = data.length - 1;\n  while (idx >= 0) {\n    const v = data[idx--];\n    if (v != null && !Number.isNaN(v)) {\n      return { lastNotNull: v };\n    }\n  }\n  return { lastNotNull: null };\n}\n\n/** Calculates standard deviation and variance */\nfunction calculateStdDev(field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n  // Only support number fields\n  if (!(field.type === FieldType.number || field.type === FieldType.time)) {\n    return { variance: 0, stdDev: 0 };\n  }\n\n  let squareSum = 0;\n  let runningMean = 0;\n  let runningNonNullCount = 0;\n  const data = field.values;\n  for (let i = 0; i < data.length; i++) {\n    const currentValue = data[i];\n    if (currentValue != null) {\n      runningNonNullCount++;\n      let _oldMean = runningMean;\n      runningMean += (currentValue - _oldMean) / runningNonNullCount;\n      squareSum += (currentValue - _oldMean) * (currentValue - runningMean);\n    }\n  }\n  if (runningNonNullCount > 0) {\n    const variance = squareSum / runningNonNullCount;\n    return { variance, stdDev: Math.sqrt(variance) };\n  }\n  return { variance: 0, stdDev: 0 };\n}\n\nfunction calculateChangeCount(field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n  const data = field.values;\n  let count = 0;\n  let first = true;\n  let last = null;\n  for (let i = 0; i < data.length; i++) {\n    let currentValue = data[i];\n    if (currentValue === null) {\n      if (ignoreNulls) {\n        continue;\n      }\n      if (nullAsZero) {\n        currentValue = 0;\n      }\n    }\n    if (!first && last !== currentValue) {\n      count++;\n    }\n    first = false;\n    last = currentValue;\n  }\n\n  return { changeCount: count };\n}\n\nfunction calculateDistinctCount(field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n  const data = field.values;\n  const distinct = new Set();\n  for (let i = 0; i < data.length; i++) {\n    let currentValue = data[i];\n    if (currentValue === null) {\n      if (ignoreNulls) {\n        continue;\n      }\n      if (nullAsZero) {\n        currentValue = 0;\n      }\n    }\n    distinct.add(currentValue);\n  }\n  return { distinctCount: distinct.size };\n}\n\nfunction calculatePercentile(field: Field, percentile: number, ignoreNulls: boolean, nullAsZero: boolean): number {\n  let data = field.values;\n\n  if (ignoreNulls) {\n    data = data.filter((value) => value !== null);\n  }\n  if (nullAsZero) {\n    data = data.map((value) => (value === null ? 0 : value));\n  }\n\n  const sorted = data.slice().sort((a, b) => a - b);\n  const index = Math.round((sorted.length - 1) * percentile);\n  return sorted[index];\n}\n\nfunction calculateMedian(field: Field<number>, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {\n  const numbers: number[] = [];\n\n  for (let i = 0; i < field.values.length; i++) {\n    let currentValue = field.values[i];\n\n    if (currentValue == null) {\n      if (ignoreNulls) {\n        continue;\n      }\n      if (nullAsZero) {\n        currentValue = 0;\n      }\n    }\n\n    numbers.push(currentValue);\n  }\n\n  numbers.sort((a, b) => a - b);\n\n  const mid = Math.floor(numbers.length / 2);\n\n  if (numbers.length % 2 === 0) {\n    return { median: (numbers[mid - 1] + numbers[mid]) / 2 };\n  } else {\n    return { median: numbers[mid] };\n  }\n}\n","import { ComparisonOperation } from '@grafana/schema';\n\n/**\n * Compare two values\n *\n * @internal -- not yet exported in `@grafana/data`\n */\nexport function compareValues(\n  left: string | number | boolean | null | undefined,\n  op: ComparisonOperation,\n  right: string | number | boolean | null | undefined\n) {\n  // Normalize null|undefined values\n  if (left == null || right == null) {\n    if (left == null) {\n      left = 'null';\n    }\n    if (right == null) {\n      right = 'null';\n    }\n    if (op === ComparisonOperation.GTE || op === ComparisonOperation.LTE) {\n      op = ComparisonOperation.EQ; // check for equality\n    }\n  }\n\n  switch (op) {\n    case ComparisonOperation.EQ:\n      return `${left}` === `${right}`;\n    case ComparisonOperation.NEQ:\n      return `${left}` !== `${right}`;\n    case ComparisonOperation.GT:\n      return left > right;\n    case ComparisonOperation.GTE:\n      return left >= right;\n    case ComparisonOperation.LT:\n      return left < right;\n    case ComparisonOperation.LTE:\n      return left <= right;\n    default:\n      return false;\n  }\n}\n","import { ComparisonOperation } from '@grafana/schema';\n\nimport { Field, DataFrame } from '../../types/dataFrame';\nimport { FieldMatcherInfo } from '../../types/transformations';\nimport { reduceField, ReducerID } from '../fieldReducer';\n\nimport { compareValues } from './compareValues';\nimport { FieldMatcherID } from './ids';\n\nexport interface FieldValueMatcherConfig {\n  reducer: ReducerID;\n  op?: ComparisonOperation;\n  value?: number; // or string?\n}\n\n// This should move to a utility function on the reducer registry\nfunction isBooleanReducer(r: ReducerID) {\n  return r === ReducerID.allIsNull || r === ReducerID.allIsZero;\n}\n\nexport const fieldValueMatcherInfo: FieldMatcherInfo<FieldValueMatcherConfig> = {\n  id: FieldMatcherID.byValue,\n  name: 'By value (reducer)',\n  description: 'Reduce a field to a single value and test for inclusion',\n\n  // This is added to overrides by default\n  defaultOptions: {\n    reducer: ReducerID.allIsZero,\n    op: ComparisonOperation.GTE,\n    value: 0,\n  },\n\n  get: (props) => {\n    if (!props || !props.reducer) {\n      return () => false;\n    }\n    let { reducer, op, value } = props;\n    const isBoolean = isBooleanReducer(reducer);\n    if (!op) {\n      op = ComparisonOperation.EQ;\n    }\n    return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n      const left = reduceField({\n        field,\n        reducers: [reducer],\n      })[reducer];\n\n      if (isBoolean) {\n        return Boolean(left); // boolean\n      }\n      return compareValues(left, op!, value);\n    };\n  },\n\n  getOptionsDisplayText: (props) => {\n    return `By value (${props.reducer})`;\n  },\n};\n","import { camelCase } from 'lodash';\n\nconst specialChars = ['(', '[', '{', '}', ']', ')', '\\\\', '|', '*', '+', '-', '.', '?', '<', '>', '#', '&', '^', '$'];\nconst specialMatcher = '([\\\\' + specialChars.join('\\\\') + '])';\nconst specialCharEscape = new RegExp(specialMatcher, 'g');\nconst specialCharUnescape = new RegExp('(\\\\\\\\)' + specialMatcher, 'g');\n\nexport function escapeStringForRegex(value: string) {\n  if (!value) {\n    return value;\n  }\n\n  return value.replace(specialCharEscape, '\\\\$1');\n}\n\nexport function unEscapeStringFromRegex(value: string) {\n  if (!value) {\n    return value;\n  }\n\n  return value.replace(specialCharUnescape, '$2');\n}\n\nexport function stringStartsAsRegEx(str: string): boolean {\n  if (!str) {\n    return false;\n  }\n\n  return str[0] === '/';\n}\n\nexport function stringToJsRegex(str: string): RegExp {\n  if (!stringStartsAsRegEx(str)) {\n    return new RegExp(`^${str}$`);\n  }\n\n  const match = str.match(new RegExp('^/(.*?)/(g?i?m?y?s?)$'));\n\n  if (!match) {\n    throw new Error(`'${str}' is not a valid regular expression.`);\n  }\n\n  return new RegExp(match[1], match[2]);\n}\n\nexport function stringToMs(str: string): number {\n  if (!str) {\n    return 0;\n  }\n\n  const nr = parseInt(str, 10);\n  const unit = str.slice(String(nr).length);\n  const s = 1000;\n  const m = s * 60;\n  const h = m * 60;\n  const d = h * 24;\n\n  switch (unit) {\n    case 's':\n      return nr * s;\n    case 'm':\n      return nr * m;\n    case 'h':\n      return nr * h;\n    case 'd':\n      return nr * d;\n    default:\n      if (!unit) {\n        return isNaN(nr) ? 0 : nr;\n      }\n      throw new Error('Not supported unit: ' + unit);\n  }\n}\n\nexport function toNumberString(value: number | undefined | null): string {\n  if (value !== null && value !== undefined && Number.isFinite(value)) {\n    return value.toString();\n  }\n  return '';\n}\n\nexport function toIntegerOrUndefined(value: string): number | undefined {\n  if (!value) {\n    return undefined;\n  }\n  const v = parseInt(value, 10);\n  return isNaN(v) ? undefined : v;\n}\n\nexport function toFloatOrUndefined(value: string): number | undefined {\n  if (!value) {\n    return undefined;\n  }\n  const v = parseFloat(value);\n  return isNaN(v) ? undefined : v;\n}\n\nexport function toPascalCase(string: string) {\n  const str = camelCase(string);\n  return str.charAt(0).toUpperCase() + str.substring(1);\n}\n\nexport function escapeRegex(value: string): string {\n  return value.replace(/[\\\\^$*+?.()|[\\]{}\\/]/g, '\\\\$&');\n}\n","import { getFieldDisplayName } from '../../field/fieldState';\nimport { stringToJsRegex } from '../../text/string';\nimport { DataFrame, Field, FieldType, TIME_SERIES_VALUE_FIELD_NAME } from '../../types/dataFrame';\nimport { FieldMatcher, FieldMatcherInfo, FrameMatcherInfo } from '../../types/transformations';\n\nimport { FieldMatcherID, FrameMatcherID } from './ids';\n\nexport interface RegexpOrNamesMatcherOptions {\n  pattern?: string;\n  names?: string[];\n  variable?: string;\n}\n\n/**\n * Mode to be able to toggle if the names matcher should match fields in provided\n * list or all except provided names.\n * @public\n */\nexport enum ByNamesMatcherMode {\n  exclude = 'exclude',\n  include = 'include',\n}\n\n/**\n * Options to instruct the by names matcher to either match all fields in given list\n * or all except the fields in the list.\n * @public\n */\nexport interface ByNamesMatcherOptions {\n  mode?: ByNamesMatcherMode;\n  names?: string[];\n  readOnly?: boolean;\n  prefix?: string;\n}\n\n// General Field matcher\nconst fieldNameMatcher: FieldMatcherInfo<string> = {\n  id: FieldMatcherID.byName,\n  name: 'Field Name',\n  description: 'match the field name',\n  defaultOptions: '',\n\n  get: (name: string): FieldMatcher => {\n    const uniqueNames = new Set<string>([name]);\n\n    const fallback = fieldNameFallback(uniqueNames);\n\n    return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n      return (\n        name === field.name ||\n        name === getFieldDisplayName(field, frame, allFrames) ||\n        Boolean(fallback && fallback(field, frame, allFrames))\n      );\n    };\n  },\n\n  getOptionsDisplayText: (name: string) => {\n    return `Field name: ${name}`;\n  },\n};\n\nconst multipleFieldNamesMatcher: FieldMatcherInfo<ByNamesMatcherOptions> = {\n  id: FieldMatcherID.byNames,\n  name: 'Field Names',\n  description: 'match any of the given the field names',\n  defaultOptions: {\n    mode: ByNamesMatcherMode.include,\n    names: [],\n  },\n\n  get: (options: ByNamesMatcherOptions): FieldMatcher => {\n    const { names, mode = ByNamesMatcherMode.include } = options;\n    const uniqueNames = new Set<string>(names ?? []);\n\n    const fallback = fieldNameFallback(uniqueNames);\n\n    const matcher = (field: Field, frame: DataFrame, frames: DataFrame[]) => {\n      return (\n        uniqueNames.has(field.name) ||\n        uniqueNames.has(getFieldDisplayName(field, frame, frames)) ||\n        Boolean(fallback && fallback(field, frame, frames))\n      );\n    };\n\n    if (mode === ByNamesMatcherMode.exclude) {\n      return (field: Field, frame: DataFrame, frames: DataFrame[]) => {\n        return !matcher(field, frame, frames);\n      };\n    }\n    return matcher;\n  },\n\n  getOptionsDisplayText: (options: ByNamesMatcherOptions): string => {\n    const { names, mode } = options;\n    const displayText = (names ?? []).join(', ');\n    if (mode === ByNamesMatcherMode.exclude) {\n      return `All except: ${displayText}`;\n    }\n    return `All of: ${displayText}`;\n  },\n};\n\n// In an effort to support migrating to a consistent data contract, the\n// naming conventions need to get normalized. However, many existing setups\n// exist that would no longer match names if that changes.  This injects\n// fallback logic when the data frame has not type version specified\nexport function fieldNameFallback(fields: Set<string>) {\n  let fallback: FieldMatcher | undefined = undefined;\n\n  // grafana-data does not have access to runtime so we are accessing the window object\n  // to get access to the feature toggle\n  // eslint-disable-next-line\n  const useMatcherFallback = (window as any)?.grafanaBootData?.settings?.featureToggles?.dataplaneFrontendFallback;\n  if (useMatcherFallback) {\n    if (fields.has(TIME_SERIES_VALUE_FIELD_NAME)) {\n      fallback = (field: Field, frame: DataFrame) => {\n        return (\n          Boolean(field.labels) && // Value was reasonable when the name was set in labels or on the frame\n          field.labels?.__name__ === field.name\n        );\n      };\n    } else if (fields.has('Time') || fields.has('time')) {\n      fallback = (field: Field, frame: DataFrame) => {\n        return frame.meta?.typeVersion == null && field.type === FieldType.time;\n      };\n    }\n  }\n\n  return fallback;\n}\n\nconst regexpFieldNameMatcher: FieldMatcherInfo<string> = {\n  id: FieldMatcherID.byRegexp,\n  name: 'Field Name by Regexp',\n  description: 'match the field name by a given regexp pattern',\n  defaultOptions: '/.*/',\n\n  get: (pattern: string): FieldMatcher => {\n    const regexp = patternToRegex(pattern);\n\n    return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n      const displayName = getFieldDisplayName(field, frame, allFrames);\n      return !!regexp && regexp.test(displayName);\n    };\n  },\n\n  getOptionsDisplayText: (pattern: string): string => {\n    return `Field name by pattern: ${pattern}`;\n  },\n};\n\n/**\n * Field matcher that will match all fields that exists in a\n * data frame with configured refId.\n * @public\n */\nconst fieldsInFrameMatcher: FieldMatcherInfo<string> = {\n  id: FieldMatcherID.byFrameRefID,\n  name: 'Fields by frame refId',\n  description: 'match all fields returned in data frame with refId.',\n  defaultOptions: '',\n\n  get: (refId: string): FieldMatcher => {\n    return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n      return frame.refId === refId;\n    };\n  },\n\n  getOptionsDisplayText: (refId: string): string => {\n    return `Math all fields returned by query with reference ID: ${refId}`;\n  },\n};\n\nconst regexpOrMultipleNamesMatcher: FieldMatcherInfo<RegexpOrNamesMatcherOptions> = {\n  id: FieldMatcherID.byRegexpOrNames,\n  name: 'Field Name by Regexp or Names',\n  description: 'match the field name by a given regexp pattern or given names',\n  defaultOptions: {\n    pattern: '/.*/',\n    names: [],\n  },\n\n  get: (options: RegexpOrNamesMatcherOptions): FieldMatcher => {\n    const regexpMatcher = regexpFieldNameMatcher.get(options?.pattern || '');\n    const namesMatcher = multipleFieldNamesMatcher.get({\n      mode: ByNamesMatcherMode.include,\n      names: options?.names ?? [],\n    });\n\n    return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n      return namesMatcher(field, frame, allFrames) || regexpMatcher(field, frame, allFrames);\n    };\n  },\n\n  getOptionsDisplayText: (options: RegexpOrNamesMatcherOptions): string => {\n    const pattern = options?.pattern ?? '';\n    const names = options?.names?.join(',') ?? '';\n    return `Field name by pattern: ${pattern} or names: ${names}`;\n  },\n};\n\nconst patternToRegex = (pattern?: string): RegExp | undefined => {\n  if (!pattern) {\n    return undefined;\n  }\n\n  try {\n    return stringToJsRegex(pattern);\n  } catch (error) {\n    console.error(error);\n    return undefined;\n  }\n};\n\n// General Frame matcher\nconst frameNameMatcher: FrameMatcherInfo<string> = {\n  id: FrameMatcherID.byName,\n  name: 'Frame Name',\n  description: 'match the frame name',\n  defaultOptions: '/.*/',\n\n  get: (pattern: string) => {\n    const regex = stringToJsRegex(pattern);\n    return (frame: DataFrame) => {\n      return regex.test(frame.name || '');\n    };\n  },\n\n  getOptionsDisplayText: (pattern: string) => {\n    return `Frame name: ${pattern}`;\n  },\n};\n\n/**\n * Registry Initialization\n */\nexport function getFieldNameMatchers(): FieldMatcherInfo[] {\n  return [\n    fieldNameMatcher,\n    regexpFieldNameMatcher,\n    multipleFieldNamesMatcher,\n    regexpOrMultipleNamesMatcher,\n    fieldsInFrameMatcher,\n  ];\n}\n\nexport function getFrameNameMatchers(): FrameMatcherInfo[] {\n  return [frameNameMatcher];\n}\n","import { Field, DataFrame, FieldType } from '../../types/dataFrame';\nimport { FieldMatcherInfo, MatcherConfig, FrameMatcherInfo } from '../../types/transformations';\nimport { getFieldMatcher, fieldMatchers, getFrameMatchers, frameMatchers } from '../matchers';\n\nimport { MatcherID } from './ids';\n\nconst anyFieldMatcher: FieldMatcherInfo<MatcherConfig[]> = {\n  id: MatcherID.anyMatch,\n  name: 'Any',\n  description: 'Any child matches (OR)',\n  excludeFromPicker: true,\n  defaultOptions: [], // empty array\n\n  get: (options: MatcherConfig[]) => {\n    const children = options.map((option) => {\n      return getFieldMatcher(option);\n    });\n    return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n      for (const child of children) {\n        if (child(field, frame, allFrames)) {\n          return true;\n        }\n      }\n      return false;\n    };\n  },\n\n  getOptionsDisplayText: (options: MatcherConfig[]) => {\n    let text = '';\n    for (const sub of options) {\n      if (text.length > 0) {\n        text += ' OR ';\n      }\n      const matcher = fieldMatchers.get(sub.id);\n      text += matcher.getOptionsDisplayText ? matcher.getOptionsDisplayText(sub) : matcher.name;\n    }\n    return text;\n  },\n};\n\nconst anyFrameMatcher: FrameMatcherInfo<MatcherConfig[]> = {\n  id: MatcherID.anyMatch,\n  name: 'Any',\n  description: 'Any child matches (OR)',\n  excludeFromPicker: true,\n  defaultOptions: [], // empty array\n\n  get: (options: MatcherConfig[]) => {\n    const children = options.map((option) => {\n      return getFrameMatchers(option);\n    });\n    return (frame: DataFrame) => {\n      for (const child of children) {\n        if (child(frame)) {\n          return true;\n        }\n      }\n      return false;\n    };\n  },\n\n  getOptionsDisplayText: (options: MatcherConfig[]) => {\n    let text = '';\n    for (const sub of options) {\n      if (text.length > 0) {\n        text += ' OR ';\n      }\n      const matcher = frameMatchers.get(sub.id);\n      text += matcher.getOptionsDisplayText ? matcher.getOptionsDisplayText(sub) : matcher.name;\n    }\n    return text;\n  },\n};\n\nconst allFieldsMatcher: FieldMatcherInfo<MatcherConfig[]> = {\n  id: MatcherID.allMatch,\n  name: 'All',\n  description: 'Everything matches (AND)',\n  excludeFromPicker: true,\n  defaultOptions: [], // empty array\n\n  get: (options: MatcherConfig[]) => {\n    const children = options.map((option) => {\n      return getFieldMatcher(option);\n    });\n    return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n      for (const child of children) {\n        if (!child(field, frame, allFrames)) {\n          return false;\n        }\n      }\n      return true;\n    };\n  },\n\n  getOptionsDisplayText: (options: MatcherConfig[]) => {\n    let text = '';\n    for (const sub of options) {\n      if (text.length > 0) {\n        text += ' AND ';\n      }\n      const matcher = fieldMatchers.get(sub.id); // Ugho what about frame\n      text += matcher.getOptionsDisplayText ? matcher.getOptionsDisplayText(sub) : matcher.name;\n    }\n    return text;\n  },\n};\n\nconst allFramesMatcher: FrameMatcherInfo<MatcherConfig[]> = {\n  id: MatcherID.allMatch,\n  name: 'All',\n  description: 'Everything matches (AND)',\n  excludeFromPicker: true,\n  defaultOptions: [], // empty array\n\n  get: (options: MatcherConfig[]) => {\n    const children = options.map((option) => {\n      return getFrameMatchers(option);\n    });\n    return (frame: DataFrame) => {\n      for (const child of children) {\n        if (!child(frame)) {\n          return false;\n        }\n      }\n      return true;\n    };\n  },\n\n  getOptionsDisplayText: (options: MatcherConfig[]) => {\n    let text = '';\n    for (const sub of options) {\n      if (text.length > 0) {\n        text += ' AND ';\n      }\n      const matcher = frameMatchers.get(sub.id);\n      text += matcher.getOptionsDisplayText ? matcher.getOptionsDisplayText(sub) : matcher.name;\n    }\n    return text;\n  },\n};\n\nconst notFieldMatcher: FieldMatcherInfo<MatcherConfig> = {\n  id: MatcherID.invertMatch,\n  name: 'NOT',\n  description: 'Inverts other matchers',\n  excludeFromPicker: true,\n\n  get: (option: MatcherConfig) => {\n    const check = getFieldMatcher(option);\n    return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n      return !check(field, frame, allFrames);\n    };\n  },\n\n  getOptionsDisplayText: (options: MatcherConfig) => {\n    const matcher = fieldMatchers.get(options.id);\n    const text = matcher.getOptionsDisplayText ? matcher.getOptionsDisplayText(options.options) : matcher.name;\n    return 'NOT ' + text;\n  },\n};\n\nconst notFrameMatcher: FrameMatcherInfo<MatcherConfig> = {\n  id: MatcherID.invertMatch,\n  name: 'NOT',\n  description: 'Inverts other matchers',\n  excludeFromPicker: true,\n\n  get: (option: MatcherConfig) => {\n    const check = getFrameMatchers(option);\n    return (frame: DataFrame) => {\n      return !check(frame);\n    };\n  },\n\n  getOptionsDisplayText: (options: MatcherConfig) => {\n    const matcher = frameMatchers.get(options.id);\n    const text = matcher.getOptionsDisplayText ? matcher.getOptionsDisplayText(options.options) : matcher.name;\n    return 'NOT ' + text;\n  },\n};\n\nexport const alwaysFieldMatcher = (field: Field) => {\n  return true;\n};\n\nconst alwaysFrameMatcher = (frame: DataFrame) => {\n  return true;\n};\n\nconst neverFieldMatcher = (field: Field) => {\n  return false;\n};\n\nexport const notTimeFieldMatcher = (field: Field) => {\n  return field.type !== FieldType.time;\n};\n\nconst neverFrameMatcher = (frame: DataFrame) => {\n  return false;\n};\n\nconst alwaysFieldMatcherInfo: FieldMatcherInfo = {\n  id: MatcherID.alwaysMatch,\n  name: 'All Fields',\n  description: 'Always Match',\n\n  get: (_option) => {\n    return alwaysFieldMatcher;\n  },\n\n  getOptionsDisplayText: (_options) => {\n    return 'Always';\n  },\n};\n\nconst alwaysFrameMatcherInfo: FrameMatcherInfo = {\n  id: MatcherID.alwaysMatch,\n  name: 'All Frames',\n  description: 'Always Match',\n\n  get: (_option) => {\n    return alwaysFrameMatcher;\n  },\n\n  getOptionsDisplayText: (_options) => {\n    return 'Always';\n  },\n};\n\nconst neverFieldMatcherInfo: FieldMatcherInfo = {\n  id: MatcherID.neverMatch,\n  name: 'No Fields',\n  description: 'Never Match',\n  excludeFromPicker: true,\n\n  get: (_option) => {\n    return neverFieldMatcher;\n  },\n\n  getOptionsDisplayText: (_options) => {\n    return 'Never';\n  },\n};\n\nconst neverFrameMatcherInfo: FrameMatcherInfo = {\n  id: MatcherID.neverMatch,\n  name: 'No Frames',\n  description: 'Never Match',\n\n  get: (_option) => {\n    return neverFrameMatcher;\n  },\n\n  getOptionsDisplayText: (_options) => {\n    return 'Never';\n  },\n};\n\nexport function getFieldPredicateMatchers(): FieldMatcherInfo[] {\n  return [anyFieldMatcher, allFieldsMatcher, notFieldMatcher, alwaysFieldMatcherInfo, neverFieldMatcherInfo];\n}\n\nexport function getFramePredicateMatchers(): FrameMatcherInfo[] {\n  return [anyFrameMatcher, allFramesMatcher, notFrameMatcher, alwaysFrameMatcherInfo, neverFrameMatcherInfo];\n}\n","import { escapeStringForRegex, stringStartsAsRegEx, stringToJsRegex } from '../../text/string';\nimport { DataFrame } from '../../types/dataFrame';\nimport { FrameMatcherInfo } from '../../types/transformations';\n\nimport { FrameMatcherID } from './ids';\n\n// General Field matcher\nconst refIdMatcher: FrameMatcherInfo<string> = {\n  id: FrameMatcherID.byRefId,\n  name: 'Query refId',\n  description: 'match the refId',\n  defaultOptions: 'A',\n\n  get: (pattern: string) => {\n    let regex: RegExp | null = null;\n\n    if (stringStartsAsRegEx(pattern)) {\n      try {\n        regex = stringToJsRegex(pattern);\n      } catch (error) {\n        if (error instanceof Error) {\n          console.warn(error.message);\n        }\n      }\n    }\n    // old format that was simply unescaped pipe-joined strings -> regexp\n    else if (pattern.includes('|')) {\n      // convert A|B -> /^(?:A|B)$/, regexp-escaping all chars between pipes\n      const escapedUnion = pattern.split('|').map(escapeStringForRegex).join('|');\n      regex = new RegExp(`^(?:${escapedUnion})$`);\n    }\n\n    return (frame: DataFrame) => {\n      return regex?.test(frame.refId || '') ?? frame.refId === pattern;\n    };\n  },\n\n  getOptionsDisplayText: (pattern: string) => {\n    return `RefID: ${pattern}`;\n  },\n};\n\nexport function getRefIdMatchers(): FrameMatcherInfo[] {\n  return [refIdMatcher];\n}\n","import { Field, FieldType, DataFrame } from '../../types/dataFrame';\nimport { FieldMatcherInfo } from '../../types/transformations';\n\nimport { FieldMatcherID } from './ids';\n\nconst firstFieldMatcher: FieldMatcherInfo = {\n  id: FieldMatcherID.first,\n  name: 'First Field',\n  description: 'The first field in the frame',\n\n  get: (type: FieldType) => {\n    return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n      return field === frame.fields[0];\n    };\n  },\n\n  getOptionsDisplayText: () => {\n    return `First field`;\n  },\n};\n\nconst firstTimeFieldMatcher: FieldMatcherInfo = {\n  id: FieldMatcherID.firstTimeField,\n  name: 'First time field',\n  description: 'The first field of type time in a frame',\n\n  get: (type: FieldType) => {\n    return (field: Field, frame: DataFrame, allFrames: DataFrame[]) => {\n      return field.type === FieldType.time && field === frame.fields.find((f) => f.type === FieldType.time);\n    };\n  },\n\n  getOptionsDisplayText: () => {\n    return `First time field`;\n  },\n};\n\n/**\n * Registry Initialization\n */\nexport function getSimpleFieldMatchers(): FieldMatcherInfo[] {\n  return [firstFieldMatcher, firstTimeFieldMatcher];\n}\n","import { Field } from '../../../types/dataFrame';\nimport { ValueMatcherInfo } from '../../../types/transformations';\nimport { ValueMatcherID } from '../ids';\n\nimport { BasicValueMatcherOptions } from './types';\n\nconst isEqualValueMatcher: ValueMatcherInfo<BasicValueMatcherOptions> = {\n  id: ValueMatcherID.equal,\n  name: 'Is equal',\n  description: 'Match where value for given field is equal to options value.',\n  get: (options) => {\n    return (valueIndex: number, field: Field) => {\n      const value = field.values[valueIndex];\n      // eslint-disable-next-line eqeqeq\n      return value == options.value;\n    };\n  },\n  getOptionsDisplayText: () => {\n    return `Matches all rows where field is null.`;\n  },\n  isApplicable: () => true,\n  getDefaultOptions: () => ({ value: '' }),\n};\n\nconst isNotEqualValueMatcher: ValueMatcherInfo<BasicValueMatcherOptions> = {\n  id: ValueMatcherID.notEqual,\n  name: 'Is not equal',\n  description: 'Match where value for given field is not equal to options value.',\n  get: (options) => {\n    return (valueIndex: number, field: Field) => {\n      const value = field.values[valueIndex];\n      // eslint-disable-next-line eqeqeq\n      return value != options.value;\n    };\n  },\n  getOptionsDisplayText: () => {\n    return `Matches all rows where field is not null.`;\n  },\n  isApplicable: () => true,\n  getDefaultOptions: () => ({ value: '' }),\n};\n\nexport const getEqualValueMatchers = (): ValueMatcherInfo[] => [isEqualValueMatcher, isNotEqualValueMatcher];\n","import { Field } from '../../../types/dataFrame';\nimport { ValueMatcherInfo } from '../../../types/transformations';\nimport { ValueMatcherID } from '../ids';\n\nimport { ValueMatcherOptions } from './types';\n\nconst isNullValueMatcher: ValueMatcherInfo<ValueMatcherOptions> = {\n  id: ValueMatcherID.isNull,\n  name: 'Is null',\n  description: 'Match where value for given field is null.',\n  get: () => {\n    return (valueIndex: number, field: Field) => {\n      const value = field.values[valueIndex];\n      return value == null;\n    };\n  },\n  getOptionsDisplayText: () => {\n    return `Matches all rows where field is null.`;\n  },\n  isApplicable: () => true,\n  getDefaultOptions: () => ({}),\n};\n\nconst isNotNullValueMatcher: ValueMatcherInfo<ValueMatcherOptions> = {\n  id: ValueMatcherID.isNotNull,\n  name: 'Is not null',\n  description: 'Match where value for given field is not null.',\n  get: () => {\n    return (valueIndex: number, field: Field) => {\n      const value = field.values[valueIndex];\n      return value != null;\n    };\n  },\n  getOptionsDisplayText: () => {\n    return `Matches all rows where field is not null.`;\n  },\n  isApplicable: () => true,\n  getDefaultOptions: () => ({}),\n};\n\nexport const getNullValueMatchers = (): ValueMatcherInfo[] => [isNullValueMatcher, isNotNullValueMatcher];\n","import { Field, FieldType } from '../../../types/dataFrame';\nimport { ValueMatcherInfo } from '../../../types/transformations';\nimport { ValueMatcherID } from '../ids';\n\nimport { BasicValueMatcherOptions } from './types';\n\nconst isGreaterValueMatcher: ValueMatcherInfo<BasicValueMatcherOptions> = {\n  id: ValueMatcherID.greater,\n  name: 'Is greater',\n  description: 'Match when field value is greater than option.',\n  get: (options) => {\n    return (valueIndex: number, field: Field) => {\n      const value = field.values[valueIndex];\n      if (isNaN(value)) {\n        return false;\n      }\n      return value > options.value;\n    };\n  },\n  getOptionsDisplayText: (options) => {\n    return `Matches all rows where field value is greater than: ${options.value}.`;\n  },\n  isApplicable: (field) => field.type === FieldType.number,\n  getDefaultOptions: () => ({ value: 0 }),\n};\n\nconst isGreaterOrEqualValueMatcher: ValueMatcherInfo<BasicValueMatcherOptions> = {\n  id: ValueMatcherID.greaterOrEqual,\n  name: 'Is greater or equal',\n  description: 'Match when field value is greater than or equal to option.',\n  get: (options) => {\n    return (valueIndex: number, field: Field) => {\n      const value = field.values[valueIndex];\n      if (isNaN(value)) {\n        return false;\n      }\n      return value >= options.value;\n    };\n  },\n  getOptionsDisplayText: (options) => {\n    return `Matches all rows where field value is greater than or equal to: ${options.value}.`;\n  },\n  isApplicable: (field) => field.type === FieldType.number,\n  getDefaultOptions: () => ({ value: 0 }),\n};\n\nconst isLowerValueMatcher: ValueMatcherInfo<BasicValueMatcherOptions> = {\n  id: ValueMatcherID.lower,\n  name: 'Is lower',\n  description: 'Match when field value is lower than option.',\n  get: (options) => {\n    return (valueIndex: number, field: Field) => {\n      const value = field.values[valueIndex];\n      if (isNaN(value)) {\n        return false;\n      }\n      return value < options.value;\n    };\n  },\n  getOptionsDisplayText: (options) => {\n    return `Matches all rows where field value is lower than: ${options.value}.`;\n  },\n  isApplicable: (field) => field.type === FieldType.number,\n  getDefaultOptions: () => ({ value: 0 }),\n};\n\nconst isLowerOrEqualValueMatcher: ValueMatcherInfo<BasicValueMatcherOptions> = {\n  id: ValueMatcherID.lowerOrEqual,\n  name: 'Is lower or equal',\n  description: 'Match when field value is lower or equal than option.',\n  get: (options) => {\n    return (valueIndex: number, field: Field) => {\n      const value = field.values[valueIndex];\n      if (isNaN(value)) {\n        return false;\n      }\n      return value <= options.value;\n    };\n  },\n  getOptionsDisplayText: (options) => {\n    return `Matches all rows where field value is lower or equal than: ${options.value}.`;\n  },\n  isApplicable: (field) => field.type === FieldType.number,\n  getDefaultOptions: () => ({ value: 0 }),\n};\n\nexport const getNumericValueMatchers = (): ValueMatcherInfo[] => [\n  isGreaterValueMatcher,\n  isGreaterOrEqualValueMatcher,\n  isLowerValueMatcher,\n  isLowerOrEqualValueMatcher,\n];\n","import { Field, FieldType } from '../../../types/dataFrame';\nimport { ValueMatcherInfo } from '../../../types/transformations';\nimport { ValueMatcherID } from '../ids';\n\nimport { RangeValueMatcherOptions } from './types';\n\nconst isBetweenValueMatcher: ValueMatcherInfo<RangeValueMatcherOptions> = {\n  id: ValueMatcherID.between,\n  name: 'Is between',\n  description: 'Match when field value is between given option values.',\n  get: (options) => {\n    return (valueIndex: number, field: Field) => {\n      const value = field.values[valueIndex];\n      if (isNaN(value)) {\n        return false;\n      }\n      return value > options.from && value < options.to;\n    };\n  },\n  getOptionsDisplayText: (options) => {\n    return `Matches all rows where field value is between ${options.from} and ${options.to}.`;\n  },\n  isApplicable: (field) => field.type === FieldType.number,\n  getDefaultOptions: () => ({ from: 0, to: 100 }),\n};\n\nexport const getRangeValueMatchers = (): ValueMatcherInfo[] => [isBetweenValueMatcher];\n","import { Field } from '../../../types/dataFrame';\nimport { ValueMatcherInfo } from '../../../types/transformations';\nimport { ValueMatcherID } from '../ids';\n\nimport { BasicValueMatcherOptions } from './types';\n\nconst regexValueMatcher: ValueMatcherInfo<BasicValueMatcherOptions<string>> = {\n  id: ValueMatcherID.regex,\n  name: 'Regex',\n  description: 'Match when field value is matching regex.',\n  get: (options) => {\n    const regex = new RegExp(options.value);\n\n    return (valueIndex: number, field: Field) => {\n      const value = field.values[valueIndex];\n      return regex.test(value);\n    };\n  },\n  getOptionsDisplayText: (options) => {\n    return `Matches all rows where field value is matching regex: ${options.value}`;\n  },\n  isApplicable: () => true,\n  getDefaultOptions: () => ({ value: '.*' }),\n};\n\nexport const getRegexValueMatcher = (): ValueMatcherInfo[] => [regexValueMatcher];\n","import { Field, FieldType } from '../../../types/dataFrame';\nimport { ValueMatcherInfo } from '../../../types/transformations';\nimport { ValueMatcherID } from '../ids';\n\nimport { BasicValueMatcherOptions } from './types';\n\nconst isSubstringMatcher: ValueMatcherInfo<BasicValueMatcherOptions> = {\n  id: ValueMatcherID.substring,\n  name: 'Contains substring',\n  description: 'Match where value for given field is a substring to options value.',\n  get: (options) => {\n    return (valueIndex: number, field: Field) => {\n      const value = field.values[valueIndex];\n      return (\n        (value &&\n          options.value &&\n          typeof value === 'string' &&\n          value.toLowerCase().includes(options.value.toLowerCase())) ||\n        options.value === ''\n      );\n    };\n  },\n  getOptionsDisplayText: () => {\n    return `Matches all rows where field is similar to the value.`;\n  },\n  isApplicable: (field) => field.type === FieldType.string,\n  getDefaultOptions: () => ({ value: '' }),\n};\n\nconst isNotSubstringValueMatcher: ValueMatcherInfo<BasicValueMatcherOptions> = {\n  id: ValueMatcherID.notSubstring,\n  name: 'Does not contain substring',\n  description: 'Match where value for given field is not a substring to options value.',\n  get: (options) => {\n    return (valueIndex: number, field: Field) => {\n      const value = field.values[valueIndex];\n      return (\n        typeof value === 'string' &&\n        options.value &&\n        value &&\n        options.value !== '' &&\n        !value.toLowerCase().includes(options.value.toLowerCase())\n      );\n    };\n  },\n  getOptionsDisplayText: () => {\n    return `Matches all rows where field is not similar to the value.`;\n  },\n  isApplicable: (field) => field.type === FieldType.string,\n  getDefaultOptions: () => ({ value: '' }),\n};\n\nexport const getSubstringValueMatchers = (): ValueMatcherInfo[] => [isSubstringMatcher, isNotSubstringValueMatcher];\n","// Load the Builtin matchers\nimport {\n  FieldMatcherInfo,\n  MatcherConfig,\n  FrameMatcherInfo,\n  FieldMatcher,\n  FrameMatcher,\n  ValueMatcherInfo,\n  ValueMatcher,\n} from '../types/transformations';\nimport { Registry } from '../utils/Registry';\n\nimport { getFieldTypeMatchers } from './matchers/fieldTypeMatcher';\nimport { fieldValueMatcherInfo } from './matchers/fieldValueMatcher';\nimport { getFieldNameMatchers, getFrameNameMatchers } from './matchers/nameMatcher';\nimport { getFieldPredicateMatchers, getFramePredicateMatchers } from './matchers/predicates';\nimport { getRefIdMatchers } from './matchers/refIdMatcher';\nimport { getSimpleFieldMatchers } from './matchers/simpleFieldMatcher';\nimport { getEqualValueMatchers } from './matchers/valueMatchers/equalMatchers';\nimport { getNullValueMatchers } from './matchers/valueMatchers/nullMatchers';\nimport { getNumericValueMatchers } from './matchers/valueMatchers/numericMatchers';\nimport { getRangeValueMatchers } from './matchers/valueMatchers/rangeMatchers';\nimport { getRegexValueMatcher } from './matchers/valueMatchers/regexMatchers';\nimport { getSubstringValueMatchers } from './matchers/valueMatchers/substringMatchers';\n\n/**\n * Registry that contains all of the built in field matchers.\n * @public\n */\nexport const fieldMatchers = new Registry<FieldMatcherInfo>(() => {\n  return [\n    ...getFieldPredicateMatchers(), // Predicates\n    ...getFieldTypeMatchers(), // by type\n    ...getFieldNameMatchers(), // by name\n    ...getSimpleFieldMatchers(), // first\n    fieldValueMatcherInfo, // reduce field (all null/zero)\n  ];\n});\n\n/**\n * Registry that contains all of the built in frame matchers.\n * @public\n */\nexport const frameMatchers = new Registry<FrameMatcherInfo>(() => {\n  return [\n    ...getFramePredicateMatchers(), // Predicates\n    ...getFrameNameMatchers(), // by name\n    ...getRefIdMatchers(), // by query refId\n  ];\n});\n\n/**\n * Registry that contains all of the built in value matchers.\n * @public\n */\nexport const valueMatchers = new Registry<ValueMatcherInfo>(() => {\n  return [\n    ...getNullValueMatchers(),\n    ...getNumericValueMatchers(),\n    ...getEqualValueMatchers(),\n    ...getSubstringValueMatchers(),\n    ...getRangeValueMatchers(),\n    ...getRegexValueMatcher(),\n  ];\n});\n\n/**\n * Resolves a field matcher from the registry for given config.\n * Will throw an error if matcher can not be resolved.\n * @public\n */\nexport function getFieldMatcher(config: MatcherConfig): FieldMatcher {\n  const info = fieldMatchers.get(config.id);\n  if (!info) {\n    throw new Error('Unknown field matcher: ' + config.id);\n  }\n  return info.get(config.options);\n}\n\n/**\n * Resolves a frame matcher from the registry for given config.\n * Will throw an error if matcher can not be resolved.\n * @public\n */\nexport function getFrameMatchers(config: MatcherConfig): FrameMatcher {\n  const info = frameMatchers.get(config.id);\n  if (!info) {\n    throw new Error('Unknown frame matcher: ' + config.id);\n  }\n  return info.get(config.options);\n}\n\n/**\n * Resolves a value matcher from the registry for given config.\n * Will throw an error if matcher can not be resolved.\n * @public\n */\nexport function getValueMatcher(config: MatcherConfig): ValueMatcher {\n  const info = valueMatchers.get(config.id);\n  if (!info) {\n    throw new Error('Unknown value matcher: ' + config.id);\n  }\n  return info.get(config.options);\n}\n","import { Labels } from '../types/data';\n\n/**\n * Regexp to extract Prometheus-style labels\n */\nconst labelRegexp = /\\b(\\w+)(!?=~?)\"([^\"\\n]*?)\"/g;\n\n/**\n * Returns a map of label keys to value from an input selector string.\n *\n * Example: `parseLabels('{job=\"foo\", instance=\"bar\"}) // {job: \"foo\", instance: \"bar\"}`\n */\nexport function parseLabels(labels: string): Labels {\n  const labelsByKey: Labels = {};\n  labels.replace(labelRegexp, (_, key, operator, value) => {\n    labelsByKey[key] = value;\n    return '';\n  });\n  return labelsByKey;\n}\n\n/**\n * Returns a map labels that are common to the given label sets.\n */\nexport function findCommonLabels(labelsSets: Labels[]): Labels {\n  return labelsSets.reduce(\n    (acc, labels) => {\n      if (!labels) {\n        throw new Error('Need parsed labels to find common labels.');\n      }\n      // Remove incoming labels that are missing or not matching in value\n      Object.keys(labels).forEach((key) => {\n        if (acc[key] === undefined || acc[key] !== labels[key]) {\n          delete acc[key];\n        }\n      });\n      // Remove common labels that are missing from incoming label set\n      Object.keys(acc).forEach((key) => {\n        if (labels[key] === undefined) {\n          delete acc[key];\n        }\n      });\n      return acc;\n    },\n    { ...labelsSets[0] }\n  );\n}\n\n/**\n * Returns a map of labels that are in `labels`, but not in `commonLabels`.\n */\nexport function findUniqueLabels(labels: Labels | undefined, commonLabels: Labels): Labels {\n  const uncommonLabels: Labels = { ...labels };\n  Object.keys(commonLabels).forEach((key) => {\n    delete uncommonLabels[key];\n  });\n  return uncommonLabels;\n}\n\n/**\n * Check that all labels exist in another set of labels\n */\nexport function matchAllLabels(expect: Labels, against?: Labels): boolean {\n  if (!expect) {\n    return true; // nothing to match\n  }\n  for (const [key, value] of Object.entries(expect)) {\n    if (!against || against[key] !== value) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Serializes the given labels to a string.\n */\nexport function formatLabels(labels: Labels, defaultValue = '', withoutBraces?: boolean): string {\n  if (!labels || Object.keys(labels).length === 0) {\n    return defaultValue;\n  }\n  const labelKeys = Object.keys(labels).sort();\n  const cleanSelector = labelKeys.map((key) => `${key}=\"${labels[key]}\"`).join(', ');\n  if (withoutBraces) {\n    return cleanSelector;\n  }\n  return ['{', cleanSelector, '}'].join('');\n}\n","import { getFieldMatcher } from '../transformations/matchers';\nimport {\n  DataFrame,\n  FieldType,\n  Field,\n  TIME_SERIES_TIME_FIELD_NAME,\n  TIME_SERIES_VALUE_FIELD_NAME,\n} from '../types/dataFrame';\nimport { FieldConfigSource } from '../types/fieldOverrides';\nimport { formatLabels } from '../utils/labels';\n\n/**\n * Get an appropriate display title\n */\nexport function getFrameDisplayName(frame: DataFrame, index?: number) {\n  if (frame.name) {\n    return frame.name;\n  }\n\n  const valueFieldNames: string[] = [];\n  for (const field of frame.fields) {\n    if (field.type === FieldType.time) {\n      continue;\n    }\n\n    // No point in doing more\n    if (valueFieldNames.length > 1) {\n      break;\n    }\n\n    valueFieldNames.push(getFieldDisplayName(field, frame));\n  }\n\n  // If the frame has a single value field then use the name of that field as the frame name\n  if (valueFieldNames.length === 1) {\n    return valueFieldNames[0];\n  }\n\n  // list all the\n  if (index === undefined && frame.fields.length > 0) {\n    return frame.fields\n      .filter((f) => f.type !== FieldType.time)\n      .map((f) => getFieldDisplayName(f, frame))\n      .join(', ');\n  }\n\n  if (frame.refId) {\n    return `Series (${frame.refId})`;\n  }\n\n  return `Series (${index})`;\n}\n\nexport function cacheFieldDisplayNames(frames: DataFrame[]) {\n  frames.forEach((frame) => {\n    frame.fields.forEach((field) => {\n      getFieldDisplayName(field, frame, frames);\n    });\n  });\n}\n\n/**\n *\n * moves each field's config.custom.hideFrom to field.state.hideFrom\n * and mutates orgiginal field.config.custom.hideFrom to one with explicit overrides only, (without the ad-hoc stateful __system override from legend toggle)\n */\nexport function decoupleHideFromState(frames: DataFrame[], fieldConfig: FieldConfigSource) {\n  frames.forEach((frame) => {\n    frame.fields.forEach((field) => {\n      const hideFrom = {\n        legend: false,\n        tooltip: false,\n        viz: false,\n        ...fieldConfig.defaults.custom?.hideFrom,\n      };\n\n      // with ad hoc __system override applied\n      const hideFromState = field.config.custom?.hideFrom;\n\n      fieldConfig.overrides.forEach((o) => {\n        if ('__systemRef' in o) {\n          return;\n        }\n\n        const m = getFieldMatcher(o.matcher);\n\n        if (m(field, frame, frames)) {\n          for (const p of o.properties) {\n            if (p.id === 'custom.hideFrom') {\n              Object.assign(hideFrom, p.value);\n            }\n          }\n        }\n      });\n\n      field.state = {\n        ...field.state,\n        hideFrom: {\n          ...hideFromState,\n        },\n      };\n\n      // original with perm overrides\n      field.config.custom.hideFrom = hideFrom;\n    });\n  });\n}\n\nexport function getFieldDisplayName(field: Field, frame?: DataFrame, allFrames?: DataFrame[]): string {\n  const existingTitle = field.state?.displayName;\n  const multipleFrames = Boolean(allFrames && allFrames.length > 1);\n\n  if (existingTitle && multipleFrames === field.state?.multipleFrames) {\n    return existingTitle;\n  }\n\n  const displayName = calculateFieldDisplayName(field, frame, allFrames);\n  field.state = field.state || {};\n  field.state.displayName = displayName;\n  field.state.multipleFrames = multipleFrames;\n\n  return displayName;\n}\n\n/**\n * Get an appropriate display name. If the 'displayName' field config is set, use that.\n */\nexport function calculateFieldDisplayName(field: Field, frame?: DataFrame, allFrames?: DataFrame[]): string {\n  const hasConfigTitle = field.config?.displayName && field.config?.displayName.length;\n  const isComparisonSeries = Boolean(frame?.meta?.timeCompare?.isTimeShiftQuery);\n  let displayName = hasConfigTitle ? field.config!.displayName! : field.name;\n\n  if (hasConfigTitle) {\n    return isComparisonSeries ? `${displayName} (comparison)` : displayName;\n  }\n\n  if (frame && field.config?.displayNameFromDS) {\n    return isComparisonSeries ? `${field.config.displayNameFromDS} (comparison)` : field.config.displayNameFromDS;\n  }\n\n  // This is an ugly exception for time field\n  // For time series we should normally treat time field with same name\n  // But in case it has a join source we should handle it as normal field\n  if (field.type === FieldType.time && !field.labels) {\n    return displayName ?? TIME_SERIES_TIME_FIELD_NAME;\n  }\n\n  let parts: string[] = [];\n  let frameNamesDiffer = false;\n\n  if (allFrames && allFrames.length > 1) {\n    for (let i = 1; i < allFrames.length; i++) {\n      const frame = allFrames[i];\n      if (frame.name !== allFrames[i - 1].name) {\n        frameNamesDiffer = true;\n        break;\n      }\n    }\n  }\n\n  let frameNameAdded = false;\n  let labelsAdded = false;\n\n  if (frameNamesDiffer && frame?.name) {\n    parts.push(frame.name);\n    frameNameAdded = true;\n  }\n\n  if (field.name && field.name !== TIME_SERIES_VALUE_FIELD_NAME) {\n    parts.push(field.name);\n  }\n\n  if (field.labels && frame) {\n    let singleLabelName = getSingleLabelName(allFrames ?? [frame]);\n\n    if (!singleLabelName) {\n      let allLabels = formatLabels(field.labels);\n      if (allLabels) {\n        parts.push(allLabels);\n        labelsAdded = true;\n      }\n    } else if (field.labels[singleLabelName]) {\n      parts.push(field.labels[singleLabelName]);\n      labelsAdded = true;\n    }\n  }\n\n  // if we have not added frame name and no labels, and field name = Value, we should add frame name\n  if (frame && !frameNameAdded && !labelsAdded && field.name === TIME_SERIES_VALUE_FIELD_NAME) {\n    if (frame.name && frame.name.length > 0) {\n      parts.push(frame.name);\n      frameNameAdded = true;\n    }\n  }\n\n  if (parts.length) {\n    displayName = parts.join(' ');\n  } else if (field.name) {\n    displayName = field.name;\n  } else {\n    displayName = TIME_SERIES_VALUE_FIELD_NAME;\n  }\n\n  // Ensure unique field name\n  if (displayName === field.name) {\n    displayName = getUniqueFieldName(field, frame);\n  }\n\n  if (isComparisonSeries) {\n    displayName = `${displayName} (comparison)`;\n  }\n  return displayName;\n}\n\nexport function getUniqueFieldName(field: Field, frame?: DataFrame) {\n  let dupeCount = 0;\n  let foundSelf = false;\n\n  if (frame) {\n    for (let i = 0; i < frame.fields.length; i++) {\n      const otherField = frame.fields[i];\n\n      if (field === otherField) {\n        foundSelf = true;\n\n        if (dupeCount > 0) {\n          dupeCount++;\n          break;\n        }\n      } else if (field.name === otherField.name) {\n        dupeCount++;\n\n        if (foundSelf) {\n          break;\n        }\n      }\n    }\n  }\n\n  if (dupeCount) {\n    return `${field.name} ${dupeCount}`;\n  }\n\n  return field.name;\n}\n\n/**\n * Checks all data frames and return name of label if there is only one label name in all frames\n */\nfunction getSingleLabelName(frames: DataFrame[]): string | null {\n  let singleName: string | null = null;\n\n  for (let i = 0; i < frames.length; i++) {\n    const frame = frames[i];\n\n    for (const field of frame.fields) {\n      if (!field.labels) {\n        continue;\n      }\n\n      // yes this should be in!\n      for (const labelKey in field.labels) {\n        if (singleName === null) {\n          singleName = labelKey;\n        } else if (labelKey !== singleName) {\n          return null;\n        }\n      }\n    }\n  }\n\n  return singleName;\n}\n","import { QueryResultMeta } from '../types/data';\nimport { Field, FieldType, DataFrame, TIME_SERIES_VALUE_FIELD_NAME } from '../types/dataFrame';\n\nimport { guessFieldTypeForField } from './processDataFrame';\n\n/**\n * The ArrayDataFrame takes an array of objects and presents it as a DataFrame\n *\n * @deprecated use arrayToDataFrame\n */\nexport class ArrayDataFrame<T = any> implements DataFrame {\n  fields: Field[] = [];\n  length = 0;\n  name?: string;\n  refId?: string;\n  meta?: QueryResultMeta;\n\n  constructor(source: T[], names?: string[]) {\n    return arrayToDataFrame(source, names); // returns a standard DataFrame\n  }\n}\n\n/**\n * arrayToDataFrame will convert any array into a DataFrame.\n * @param source - can be an array of objects or an array of simple values.\n * @param names - will be used for ordering of fields. Source needs to be array of objects if names are provided.\n *\n * @public\n */\nexport function arrayToDataFrame(source: Array<Record<string, unknown>> | unknown[], names?: string[]): DataFrame {\n  const df: DataFrame = {\n    fields: [],\n    length: source.length,\n  };\n  if (!source?.length) {\n    return df;\n  }\n\n  // If names are provided then we assume the source is an array of objects with the names as keys (field names). This\n  // makes ordering of the fields predictable.\n  if (names) {\n    if (!isObjectArray(source)) {\n      throw new Error('source is not an array of objects');\n    }\n\n    for (const name of names) {\n      df.fields.push(\n        makeFieldFromValues(\n          name,\n          source.map((v) => (v ? v[name] : v))\n        )\n      );\n    }\n    return df;\n  }\n\n  const firstDefined = source.find((v) => v); // first not null|undefined\n  // This means if the source is lots of null/undefined values we throw that away and return empty dataFrame. This is\n  // different to how we preserve null/undefined values if there is some defined rows. Not sure this inconsistency\n  // is by design or not.\n  if (firstDefined === null) {\n    return df;\n  }\n\n  // If is an array of objects we use the keys as field names.\n  if (isObjectArray(source)) {\n    // We need to do this to please TS. We know source is array of objects and that there is some object in there but\n    // TS still thinks it can all be undefined|nulls.\n    const first = source.find((v) => v);\n    df.fields = Object.keys(first || {}).map((name) => {\n      return makeFieldFromValues(\n        name,\n        source.map((v) => (v ? v[name] : v))\n      );\n    });\n  } else {\n    // Otherwise source should be an array of simple values, so we create single field data frame.\n    df.fields.push(makeFieldFromValues(TIME_SERIES_VALUE_FIELD_NAME, source));\n  }\n  return df;\n}\n\nfunction makeFieldFromValues(name: string, values: unknown[]): Field {\n  const f = { name, config: {}, values, type: FieldType.other };\n  f.type = guessFieldTypeForField(f) ?? FieldType.other;\n  return f;\n}\n\nfunction isObjectArray(arr: unknown[]): arr is Array<Record<string, unknown> | null | undefined> {\n  const first = arr.find((v) => v); // first not null|undefined\n  return arr.length > 0 && typeof first === 'object';\n}\n","import { Labels, QueryResultMeta } from '../types/data';\nimport { FieldType, DataFrame, Field, FieldConfig } from '../types/dataFrame';\n\nimport { guessFieldTypeFromNameAndValue } from './processDataFrame';\n\n/**\n * The JSON transfer object for DataFrames.  Values are stored in simple JSON\n *\n * @alpha\n */\nexport interface DataFrameJSON {\n  /**\n   * The schema defines the field type and configuration.\n   */\n  schema?: DataFrameSchema;\n\n  /**\n   * The field data\n   */\n  data?: DataFrameData;\n}\n\ntype FieldValues = unknown[];\n\n/**\n * @alpha\n */\nexport interface DataFrameData {\n  /**\n   * A columnar store that matches fields defined by schema.\n   */\n  values: FieldValues[];\n\n  /**\n   * Since JSON cannot encode NaN, Inf, -Inf, and undefined, these entities\n   * are decoded after JSON.parse() using this struct\n   */\n  entities?: Array<FieldValueEntityLookup | null>;\n\n  /**\n   * Holds value bases per field so we can encode numbers from fixed points\n   * e.g. [1612900958, 1612900959, 1612900960] -> 1612900958 + [0, 1, 2]\n   */\n  bases?: number[];\n\n  /**\n   * Holds value multipliers per field so we can encode large numbers concisely\n   * e.g. [4900000000, 35000000000] -> 1e9 + [4.9, 35]\n   */\n  factors?: number[];\n\n  /**\n   * Holds enums per field so we can encode recurring string values as ints\n   * e.g. [\"foo\", \"foo\", \"baz\", \"foo\"] -> [\"foo\", \"baz\"] + [0,0,1,0]\n   *\n   * NOTE: currently only decoding is implemented\n   */\n  enums?: Array<string[] | null>;\n\n  /**\n   * Holds integers between 0 and 999999, used by time-fields\n   * to store the nanosecond-precision that cannot be represented\n   * by the millisecond-based base value.\n   */\n  nanos?: Array<number[] | null>;\n}\n\n/**\n * The JSON transfer object for DataFrames.  Values are stored in simple JSON\n *\n * @alpha\n */\nexport interface DataFrameSchema {\n  /**\n   * Matches the query target refId\n   */\n  refId?: string;\n\n  /**\n   * Initial response global metadata\n   */\n  meta?: QueryResultMeta;\n\n  /**\n   * Frame name\n   */\n  name?: string;\n\n  /**\n   * Field definition without any metadata\n   */\n  fields: FieldSchema[];\n}\n\n/**\n * Field object passed over JSON\n *\n * @alpha\n */\nexport interface FieldSchema {\n  name: string; // The column name\n  type?: FieldType;\n  config?: FieldConfig;\n  labels?: Labels;\n}\n\n/**\n * Since JSON cannot encode NaN, Inf, -Inf, and undefined, the locations\n * of these entities in field value arrays are stored here for restoration\n * after JSON.parse()\n *\n * @alpha\n */\nexport interface FieldValueEntityLookup {\n  NaN?: number[];\n  Undef?: number[]; // Missing because of absence or join\n  Inf?: number[];\n  NegInf?: number[];\n}\n\nconst ENTITY_MAP: Record<keyof FieldValueEntityLookup, number | undefined> = {\n  Inf: Infinity,\n  NegInf: -Infinity,\n  Undef: undefined,\n  NaN: NaN,\n};\n\n/**\n * @internal use locally\n */\nexport function decodeFieldValueEntities(lookup: FieldValueEntityLookup, values: FieldValues) {\n  let key: keyof typeof lookup;\n  for (key in lookup) {\n    const repl = ENTITY_MAP[key];\n    for (const idx of lookup[key]!) {\n      if (idx < values.length) {\n        values[idx] = repl;\n      }\n    }\n  }\n}\n\n/**\n * @internal use locally\n */\nexport function decodeFieldValueEnums(lookup: string[], values: FieldValues) {\n  for (let i = 0; i < values.length; i++) {\n    values[i] = lookup[Number(values[i])];\n  }\n}\n\nfunction guessFieldType(name: string, values: FieldValues): FieldType {\n  for (const v of values) {\n    if (v != null) {\n      return guessFieldTypeFromNameAndValue(name, v);\n    }\n  }\n  return FieldType.other;\n}\n\n/**\n * NOTE: dto.data.values will be mutated and decoded/inflated using entities,bases,factors,enums\n *\n * @alpha\n */\nexport function dataFrameFromJSON(dto: DataFrameJSON): DataFrame {\n  const { schema, data } = dto;\n\n  if (!schema || !schema.fields) {\n    throw new Error('JSON needs a fields definition');\n  }\n\n  // Find the longest field length\n  const length = data ? data.values.reduce((max, vals) => Math.max(max, vals.length), 0) : 0;\n  const fields = schema.fields.map((f, index) => {\n    let buffer = data ? data.values[index] : [];\n    let origLen = buffer.length;\n    let type = f.type;\n\n    if (origLen !== length) {\n      buffer.length = length;\n      // avoid sparse arrays\n      buffer.fill(undefined, origLen);\n    }\n\n    let entities = data?.entities?.[index];\n\n    if (entities) {\n      decodeFieldValueEntities(entities, buffer);\n    }\n\n    let enums = data?.enums?.[index];\n\n    if (enums) {\n      decodeFieldValueEnums(enums, buffer);\n      type = FieldType.string;\n    }\n\n    const nanos = data?.nanos?.[index];\n\n    // TODO: expand arrays further using bases,factors\n\n    const dataFrameField: Field & { entities: FieldValueEntityLookup } = {\n      ...f,\n      type: type ?? guessFieldType(f.name, buffer),\n      config: f.config ?? {},\n      values: buffer,\n      // the presence of this prop is an optimization signal & lookup for consumers\n      entities: entities ?? {},\n    };\n\n    if (nanos != null) {\n      dataFrameField.nanos = nanos;\n    }\n\n    return dataFrameField;\n  });\n\n  return {\n    ...schema,\n    fields,\n    length,\n  };\n}\n\n/**\n * This converts DataFrame to a json representation with distinct schema+data\n *\n * @alpha\n */\nexport function dataFrameToJSON(frame: DataFrame): DataFrameJSON {\n  const data: DataFrameData = {\n    values: [],\n  };\n\n  const allNanos: Array<number[] | null> = [];\n  let hasNanos = false;\n\n  const schema: DataFrameSchema = {\n    refId: frame.refId,\n    meta: frame.meta,\n    name: frame.name,\n    fields: frame.fields.map((f) => {\n      const { values, nanos, state, display, ...sfield } = f;\n      if ('entities' in sfield) {\n        delete sfield.entities;\n      }\n      data.values.push(values);\n\n      if (nanos != null) {\n        allNanos.push(nanos);\n        hasNanos = true;\n      } else {\n        allNanos.push(null);\n      }\n\n      return sfield;\n    }),\n  };\n\n  if (hasNanos) {\n    data.nanos = allNanos;\n  }\n\n  return {\n    schema,\n    data,\n  };\n}\n","// Libraries\nimport { isArray, isBoolean, isNumber, isString } from 'lodash';\n\nimport { isDateTime } from '../datetime/moment_wrapper';\nimport { fieldIndexComparer } from '../field/fieldComparers';\nimport { getFieldDisplayName } from '../field/fieldState';\nimport { Column, LoadingState, TableData, TimeSeries, TimeSeriesValue } from '../types/data';\nimport {\n  DataFrame,\n  FieldType,\n  TIME_SERIES_TIME_FIELD_NAME,\n  TIME_SERIES_VALUE_FIELD_NAME,\n  Field,\n  DataFrameWithValue,\n  DataFrameDTO,\n  FieldDTO,\n  FieldConfig,\n} from '../types/dataFrame';\nimport { DataQueryResponseData } from '../types/datasource';\nimport { GraphSeriesXY, GraphSeriesValue } from '../types/graph';\nimport { PanelData } from '../types/panel';\n\nimport { arrayToDataFrame } from './ArrayDataFrame';\nimport { dataFrameFromJSON } from './DataFrameJSON';\n\nfunction convertTableToDataFrame(table: TableData): DataFrame {\n  const fields = table.columns.map((c) => {\n    // TODO: should be Column but type does not exists there so not sure whats up here.\n    const { text, type, ...disp } = c as any;\n    const values: unknown[] = [];\n    return {\n      name: text?.length ? text : c, // rename 'text' to the 'name' field\n      config: (disp || {}) as FieldConfig,\n      values,\n      type: type && Object.values(FieldType).includes(type as FieldType) ? (type as FieldType) : FieldType.other,\n    };\n  });\n\n  if (!isArray(table.rows)) {\n    throw new Error(`Expected table rows to be array, got ${typeof table.rows}.`);\n  }\n\n  for (const row of table.rows) {\n    for (let i = 0; i < fields.length; i++) {\n      fields[i].values.push(row[i]);\n    }\n  }\n\n  for (const f of fields) {\n    if (f.type === FieldType.other) {\n      const t = guessFieldTypeForField(f);\n      if (t) {\n        f.type = t;\n      }\n    }\n  }\n\n  return {\n    fields,\n    refId: table.refId,\n    meta: table.meta,\n    name: table.name,\n    length: table.rows.length,\n  };\n}\n\nfunction convertTimeSeriesToDataFrame(timeSeries: TimeSeries): DataFrame {\n  const times: number[] = [];\n  const values: TimeSeriesValue[] = [];\n\n  // Sometimes the points are sent as datapoints\n  const points = timeSeries.datapoints || (timeSeries as any).points;\n  for (const point of points) {\n    values.push(point[0]);\n    times.push(point[1] as number);\n  }\n\n  const fields = [\n    {\n      name: TIME_SERIES_TIME_FIELD_NAME,\n      type: FieldType.time,\n      config: {},\n      values: times,\n    },\n    {\n      name: TIME_SERIES_VALUE_FIELD_NAME,\n      type: FieldType.number,\n      config: {\n        unit: timeSeries.unit,\n      },\n      values: values,\n      labels: timeSeries.tags,\n    },\n  ];\n\n  if (timeSeries.title) {\n    (fields[1].config as FieldConfig).displayNameFromDS = timeSeries.title;\n  }\n\n  return {\n    name: timeSeries.target || (timeSeries as any).name,\n    refId: timeSeries.refId,\n    meta: timeSeries.meta,\n    fields,\n    length: values.length,\n  };\n}\n\n/**\n * This is added temporarily while we convert the LogsModel\n * to DataFrame.  See: https://github.com/grafana/grafana/issues/18528\n */\nfunction convertGraphSeriesToDataFrame(graphSeries: GraphSeriesXY): DataFrame {\n  const x: GraphSeriesValue[] = [];\n  const y: GraphSeriesValue[] = [];\n\n  for (let i = 0; i < graphSeries.data.length; i++) {\n    const row = graphSeries.data[i];\n    x.push(row[1]);\n    y.push(row[0]);\n  }\n\n  return {\n    name: graphSeries.label,\n    fields: [\n      {\n        name: graphSeries.label || TIME_SERIES_VALUE_FIELD_NAME,\n        type: FieldType.number,\n        config: {},\n        values: x,\n      },\n      {\n        name: TIME_SERIES_TIME_FIELD_NAME,\n        type: FieldType.time,\n        config: {\n          unit: 'dateTimeAsIso',\n        },\n        values: y,\n      },\n    ],\n    length: x.length,\n  };\n}\n\nfunction convertJSONDocumentDataToDataFrame(timeSeries: TimeSeries): DataFrame {\n  const fields: Field[] = [\n    {\n      name: timeSeries.target,\n      type: FieldType.other,\n      labels: timeSeries.tags,\n      config: {\n        unit: timeSeries.unit,\n        filterable: (timeSeries as any).filterable,\n      },\n      values: [],\n    },\n  ];\n\n  for (const point of timeSeries.datapoints) {\n    fields[0].values.push(point);\n  }\n\n  return {\n    name: timeSeries.target,\n    refId: timeSeries.target,\n    meta: { json: true },\n    fields,\n    length: timeSeries.datapoints.length,\n  };\n}\n\n// PapaParse Dynamic Typing regex:\n// https://github.com/mholt/PapaParse/blob/master/papaparse.js#L998\nconst NUMBER = /^\\s*(-?(\\d*\\.?\\d+|\\d+\\.?\\d*)(e[-+]?\\d+)?|NAN)\\s*$/i;\n\n/**\n * Given a name and value, this will pick a reasonable field type\n */\nexport function guessFieldTypeFromNameAndValue(name: string, v: unknown): FieldType {\n  if (name) {\n    name = name.toLowerCase();\n    if (name === 'date' || name === 'time') {\n      return FieldType.time;\n    }\n  }\n  return guessFieldTypeFromValue(v);\n}\n\n/**\n * Check the field type to see what the contents are\n */\nexport function getFieldTypeFromValue(v: unknown): FieldType {\n  if (v instanceof Date || isDateTime(v)) {\n    return FieldType.time;\n  }\n\n  if (isNumber(v)) {\n    return FieldType.number;\n  }\n\n  if (isString(v)) {\n    return FieldType.string;\n  }\n\n  if (isBoolean(v)) {\n    return FieldType.boolean;\n  }\n\n  return FieldType.other;\n}\n\n/**\n * Given a value this will guess the best column type\n *\n * NOTE: this is will try to see if string values can be mapped to other types (like number)\n */\nexport function guessFieldTypeFromValue(v: unknown): FieldType {\n  if (v instanceof Date || isDateTime(v)) {\n    return FieldType.time;\n  }\n\n  if (isNumber(v)) {\n    return FieldType.number;\n  }\n\n  if (isString(v)) {\n    if (NUMBER.test(v)) {\n      return FieldType.number;\n    }\n\n    if (v === 'true' || v === 'TRUE' || v === 'True' || v === 'false' || v === 'FALSE' || v === 'False') {\n      return FieldType.boolean;\n    }\n\n    return FieldType.string;\n  }\n\n  if (isBoolean(v)) {\n    return FieldType.boolean;\n  }\n\n  return FieldType.other;\n}\n\n/**\n * Looks at the data to guess the column type.  This ignores any existing setting\n */\nexport function guessFieldTypeForField(field: Field): FieldType | undefined {\n  // 1. Use the column name to guess\n  if (field.name) {\n    const name = field.name.toLowerCase();\n    if (name === 'date' || name === 'time') {\n      return FieldType.time;\n    }\n  }\n\n  // 2. Check the first non-null value\n  for (let i = 0; i < field.values.length; i++) {\n    const v = field.values[i];\n    if (v != null) {\n      return guessFieldTypeFromValue(v);\n    }\n  }\n\n  // Could not find anything\n  return undefined;\n}\n\n/**\n * @returns A copy of the series with the best guess for each field type.\n * If the series already has field types defined, they will be used, unless `guessDefined` is true.\n * @param series The DataFrame whose field's types should be guessed\n * @param guessDefined Whether to guess types of fields with already defined types\n */\nexport const guessFieldTypes = (series: DataFrame, guessDefined = false): DataFrame => {\n  for (const field of series.fields) {\n    if (!field.type || field.type === FieldType.other || guessDefined) {\n      // Something is missing a type, return a modified copy\n      return {\n        ...series,\n        fields: series.fields.map((field) => {\n          if (field.type && field.type !== FieldType.other && !guessDefined) {\n            return field;\n          }\n          // Calculate a reasonable schema value\n          return {\n            ...field,\n            type: guessFieldTypeForField(field) || FieldType.other,\n          };\n        }),\n      };\n    }\n  }\n  // No changes necessary\n  return series;\n};\n\nexport const isTableData = (data: unknown): data is DataFrame => Boolean(data && data.hasOwnProperty('columns'));\n\nexport const isDataFrame = (data: unknown): data is DataFrame => Boolean(data && data.hasOwnProperty('fields'));\n\nexport const isDataFrameWithValue = (data: unknown): data is DataFrameWithValue =>\n  Boolean(isDataFrame(data) && data.hasOwnProperty('value'));\n\n/**\n * Inspect any object and return the results as a DataFrame\n */\nexport function toDataFrame(data: any): DataFrame {\n  if ('fields' in data) {\n    // DataFrameDTO does not have length\n    if ('length' in data && data.fields[0]?.values?.get) {\n      return data;\n    }\n\n    // This will convert the array values into Vectors\n    return createDataFrame(data);\n  }\n\n  // Handle legacy docs/json type\n  if (data.hasOwnProperty('type') && data.type === 'docs') {\n    return convertJSONDocumentDataToDataFrame(data);\n  }\n\n  if (data.hasOwnProperty('datapoints') || data.hasOwnProperty('points')) {\n    return convertTimeSeriesToDataFrame(data);\n  }\n\n  if (data.hasOwnProperty('data')) {\n    if (data.hasOwnProperty('schema')) {\n      return dataFrameFromJSON(data);\n    }\n    return convertGraphSeriesToDataFrame(data);\n  }\n\n  if (data.hasOwnProperty('columns')) {\n    return convertTableToDataFrame(data);\n  }\n\n  if (Array.isArray(data)) {\n    return arrayToDataFrame(data);\n  }\n\n  console.warn('Can not convert', data);\n  throw new Error('Unsupported data format');\n}\n\nexport const toLegacyResponseData = (frame: DataFrame): TimeSeries | TableData => {\n  const { fields } = frame;\n\n  const rowCount = frame.length;\n  const rows: unknown[][] = [];\n\n  if (fields.length === 2) {\n    const { timeField, timeIndex } = getTimeField(frame);\n    if (timeField) {\n      const valueIndex = timeIndex === 0 ? 1 : 0;\n      const valueField = fields[valueIndex];\n      const timeField = fields[timeIndex!];\n\n      // Make sure it is [value,time]\n      for (let i = 0; i < rowCount; i++) {\n        rows.push([\n          valueField.values[i], // value\n          timeField.values[i], // time\n        ]);\n      }\n\n      return {\n        alias: frame.name,\n        target: getFieldDisplayName(valueField, frame),\n        datapoints: rows,\n        unit: fields[0].config ? fields[0].config.unit : undefined,\n        refId: frame.refId,\n        meta: frame.meta,\n      } as TimeSeries;\n    }\n  }\n\n  for (let i = 0; i < rowCount; i++) {\n    const row: unknown[] = [];\n    for (let j = 0; j < fields.length; j++) {\n      row.push(fields[j].values[i]);\n    }\n    rows.push(row);\n  }\n\n  if (frame.meta && frame.meta.json) {\n    return {\n      alias: fields[0].name || frame.name,\n      target: fields[0].name || frame.name,\n      datapoints: fields[0].values,\n      filterable: fields[0].config ? fields[0].config.filterable : undefined,\n      type: 'docs',\n    } as TimeSeries;\n  }\n\n  return {\n    columns: fields.map((f) => {\n      const { name, config } = f;\n      if (config) {\n        // keep unit etc\n        const { ...column } = config;\n        (column as Column).text = name;\n        return column as Column;\n      }\n      return { text: name };\n    }),\n    type: 'table',\n    refId: frame.refId,\n    meta: frame.meta,\n    rows,\n  };\n};\n\nexport function sortDataFrame(data: DataFrame, sortIndex?: number, reverse = false): DataFrame {\n  const field = data.fields[sortIndex!];\n  if (!field) {\n    return data;\n  }\n\n  // Natural order\n  const index: number[] = [];\n  for (let i = 0; i < data.length; i++) {\n    index.push(i);\n  }\n\n  const fieldComparer = fieldIndexComparer(field, reverse);\n  index.sort(fieldComparer);\n\n  return {\n    ...data,\n    fields: data.fields.map((f) => {\n      const newF = {\n        ...f,\n        values: f.values.map((v, i) => f.values[index[i]]),\n      };\n\n      // only add .nanos if it exists\n      const { nanos } = f;\n      if (nanos !== undefined) {\n        newF.nanos = nanos.map((n, i) => nanos[index[i]]);\n      }\n      return newF;\n    }),\n  };\n}\n\n/**\n * Returns a copy with all values reversed\n */\nexport function reverseDataFrame(data: DataFrame): DataFrame {\n  return {\n    ...data,\n    fields: data.fields.map((f) => {\n      const values = [...f.values];\n      values.reverse();\n\n      const newF = {\n        ...f,\n        values,\n      };\n\n      // only add .nanos if it exists\n      const { nanos } = f;\n      if (nanos !== undefined) {\n        const revNanos = [...nanos];\n        revNanos.reverse();\n        newF.nanos = revNanos;\n      }\n      return newF;\n    }),\n  };\n}\n\n/**\n * Wrapper to get an array from each field value\n */\nexport function getDataFrameRow(data: DataFrame, row: number): unknown[] {\n  const values: unknown[] = [];\n  for (const field of data.fields) {\n    values.push(field.values[row]);\n  }\n  return values;\n}\n\n/**\n * Returns a copy that does not include functions\n */\nexport function toDataFrameDTO(data: DataFrame): DataFrameDTO {\n  return toFilteredDataFrameDTO(data);\n}\n\nexport function toFilteredDataFrameDTO(data: DataFrame, fieldPredicate?: (f: Field) => boolean): DataFrameDTO {\n  const filteredFields = fieldPredicate ? data.fields.filter(fieldPredicate) : data.fields;\n  const fields: FieldDTO[] = filteredFields.map((f) => {\n    let values = f.values;\n    return {\n      name: f.name,\n      type: f.type,\n      config: f.config,\n      values,\n      labels: f.labels,\n    };\n  });\n\n  return {\n    fields,\n    refId: data.refId,\n    meta: data.meta,\n    name: data.name,\n  };\n}\n\nexport const getTimeField = (series: DataFrame): { timeField?: Field; timeIndex?: number } => {\n  for (let i = 0; i < series.fields.length; i++) {\n    if (series.fields[i].type === FieldType.time) {\n      return {\n        timeField: series.fields[i],\n        timeIndex: i,\n      };\n    }\n  }\n  return {};\n};\n\nfunction getProcessedDataFrame(data: DataQueryResponseData): DataFrame {\n  const dataFrame = guessFieldTypes(toDataFrame(data));\n\n  if (dataFrame.fields && dataFrame.fields.length) {\n    // clear out the cached info\n    for (const field of dataFrame.fields) {\n      field.state = null;\n    }\n  }\n\n  return dataFrame;\n}\n\n/**\n * Given data request results, will return data frames with field types set\n *\n * This is also used by PanelChrome for snapshot support\n */\nexport function getProcessedDataFrames(results?: DataQueryResponseData[]): DataFrame[] {\n  if (!results || !isArray(results)) {\n    return [];\n  }\n\n  return results.map((data) => getProcessedDataFrame(data));\n}\n\n/**\n * Will process the panel data frames and in case of loading state with no data, will return the last result data but with loading state\n * This is to have panels not flicker temporarily with \"no data\" while loading\n */\nexport function preProcessPanelData(data: PanelData, lastResult?: PanelData): PanelData {\n  const { series, annotations } = data;\n\n  //  for loading states with no data, use last result\n  if (data.state === LoadingState.Loading && series.length === 0) {\n    if (!lastResult) {\n      lastResult = data;\n    }\n\n    return {\n      ...lastResult,\n      state: LoadingState.Loading,\n      request: data.request,\n    };\n  }\n\n  // Make sure the data frames are properly formatted\n  const STARTTIME = performance.now();\n  const processedDataFrames = series.map((data) => getProcessedDataFrame(data));\n  const annotationsProcessed = getProcessedDataFrames(annotations);\n  const STOPTIME = performance.now();\n\n  return {\n    ...data,\n    series: processedDataFrames,\n    annotations: annotationsProcessed,\n    timings: { dataProcessingTime: STOPTIME - STARTTIME },\n  };\n}\n\nexport interface PartialDataFrame extends Omit<DataFrame, 'fields' | 'length'> {\n  fields: Array<Partial<Field>>;\n}\n\nexport function createDataFrame(input: PartialDataFrame): DataFrame {\n  let length = 0;\n  const fields = input.fields.map((p, idx) => {\n    const { state, ...field } = p;\n    if (!field.name) {\n      field.name = `Field ${idx + 1}`;\n    }\n    if (!field.config) {\n      field.config = {};\n    }\n    if (!field.values) {\n      field.values = new Array(length);\n    } else if (field.values.length > length) {\n      length = field.values.length;\n    }\n    if (!field.type) {\n      field.type = guessFieldTypeForField(field as Field) ?? FieldType.other;\n    }\n    return field as Field;\n  });\n\n  return {\n    ...input,\n    fields,\n    length,\n  };\n}\n","export enum DataTransformerID {\n  append = 'append',\n  //  rotate = 'rotate', // Columns to rows\n  reduce = 'reduce',\n  order = 'order',\n  organize = 'organize',\n  rename = 'rename',\n  calculateField = 'calculateField',\n  /** @deprecated use joinByField */\n  seriesToColumns = 'seriesToColumns',\n  seriesToRows = 'seriesToRows',\n  merge = 'merge',\n  concatenate = 'concatenate',\n  labelsToFields = 'labelsToFields',\n  filterFields = 'filterFields',\n  filterFieldsByName = 'filterFieldsByName',\n  filterFrames = 'filterFrames',\n  filterByRefId = 'filterByRefId',\n  renameByRegex = 'renameByRegex',\n  filterByValue = 'filterByValue',\n  noop = 'noop',\n  ensureColumns = 'ensureColumns',\n  groupBy = 'groupBy',\n  sortBy = 'sortBy',\n  histogram = 'histogram',\n  configFromData = 'configFromData',\n  rowsToFields = 'rowsToFields',\n  prepareTimeSeries = 'prepareTimeSeries',\n  convertFieldType = 'convertFieldType',\n  fieldLookup = 'fieldLookup',\n  heatmap = 'heatmap',\n  spatial = 'spatial',\n  joinByField = 'joinByField',\n  joinByLabels = 'joinByLabels',\n  extractFields = 'extractFields',\n  groupingToMatrix = 'groupingToMatrix',\n  limit = 'limit',\n  partitionByValues = 'partitionByValues',\n  timeSeriesTable = 'timeSeriesTable',\n  transpose = 'transpose',\n  formatTime = 'formatTime',\n  formatString = 'formatString',\n  regression = 'regression',\n  groupToNestedTable = 'groupToNestedTable',\n}\n","import { map } from 'rxjs/operators';\n\nimport { DataFrame } from '../../types/dataFrame';\nimport { DataTransformContext, FieldMatcher, SynchronousDataTransformerInfo } from '../../types/transformations';\nimport { fieldMatchers } from '../matchers';\nimport { FieldMatcherID } from '../matchers/ids';\n\nimport { DataTransformerID } from './ids';\nimport { joinDataFrames } from './joinDataFrames';\n\nexport enum JoinMode {\n  outer = 'outer', // best for time series, non duplicated join on values\n  inner = 'inner',\n  outerTabular = 'outerTabular', // best for tabular data where the join on value can be duplicated\n}\n\nexport interface JoinByFieldOptions {\n  byField?: string; // empty will pick the field automatically\n  mode?: JoinMode;\n}\n\nexport const joinByFieldTransformer: SynchronousDataTransformerInfo<JoinByFieldOptions> = {\n  id: DataTransformerID.joinByField,\n  aliasIds: [DataTransformerID.seriesToColumns],\n  name: 'Join by field',\n  description:\n    'Combine rows from two or more tables, based on a related field between them.  This can be used to outer join multiple time series on the _time_ field to show many time series in one table.',\n  defaultOptions: {\n    byField: undefined, // DEFAULT_KEY_FIELD,\n    mode: JoinMode.outer,\n  },\n\n  operator: (options, ctx) => (source) =>\n    source.pipe(map((data) => joinByFieldTransformer.transformer(options, ctx)(data))),\n\n  transformer: (options: JoinByFieldOptions, ctx: DataTransformContext) => {\n    let joinBy: FieldMatcher | undefined = undefined;\n    return (data: DataFrame[]) => {\n      if (data.length > 1) {\n        if (options.byField && !joinBy) {\n          joinBy = fieldMatchers.get(FieldMatcherID.byName).get(options.byField);\n        }\n        const joined = joinDataFrames({ frames: data, joinBy, mode: options.mode });\n        if (joined) {\n          joined.refId = `${DataTransformerID.joinByField}-${data.map((frame) => frame.refId).join('-')}`;\n          return [joined];\n        }\n      }\n      return data;\n    };\n  },\n};\n","import { getTimeField, sortDataFrame } from '../../dataframe/processDataFrame';\nimport { DataFrame, Field, FieldType, TIME_SERIES_VALUE_FIELD_NAME } from '../../types/dataFrame';\nimport { FieldMatcher } from '../../types/transformations';\nimport { fieldMatchers } from '../matchers';\nimport { FieldMatcherID } from '../matchers/ids';\n\nimport { JoinMode } from './joinByField';\n\nexport function pickBestJoinField(data: DataFrame[]): FieldMatcher {\n  const { timeField } = getTimeField(data[0]);\n  if (timeField) {\n    return fieldMatchers.get(FieldMatcherID.firstTimeField).get({});\n  }\n  let common: string[] = [];\n  for (const f of data[0].fields) {\n    if (f.type === FieldType.number) {\n      common.push(f.name);\n    }\n  }\n\n  for (let i = 1; i < data.length; i++) {\n    const names: string[] = [];\n    for (const f of data[0].fields) {\n      if (f.type === FieldType.number) {\n        names.push(f.name);\n      }\n    }\n    common = common.filter((v) => !names.includes(v));\n  }\n\n  return fieldMatchers.get(FieldMatcherID.byName).get(common[0]);\n}\n\n/**\n * @internal\n */\nexport interface JoinOptions {\n  /**\n   * The input fields\n   */\n  frames: DataFrame[];\n\n  /**\n   * The field to join -- frames that do not have this field will be dropped\n   */\n  joinBy?: FieldMatcher;\n\n  /**\n   * Optionally filter the non-join fields\n   */\n  keep?: FieldMatcher;\n\n  /**\n   * @internal -- used when we need to keep a reference to the original frame/field index\n   */\n  keepOriginIndices?: boolean;\n\n  /**\n   * @internal -- keep any pre-cached state.displayName\n   */\n  keepDisplayNames?: boolean;\n\n  /**\n   * @internal -- Optionally specify how to treat null values\n   */\n  nullMode?: (field: Field) => JoinNullMode;\n\n  /**\n   * @internal -- Optionally specify a join mode (outer or inner)\n   */\n  mode?: JoinMode;\n}\n\nfunction getJoinMatcher(options: JoinOptions): FieldMatcher {\n  return options.joinBy ?? pickBestJoinField(options.frames);\n}\n\n/**\n * @internal\n */\nexport function maybeSortFrame(frame: DataFrame, fieldIdx: number) {\n  if (fieldIdx >= 0) {\n    let sortByField = frame.fields[fieldIdx];\n\n    if (sortByField.type !== FieldType.string && !isLikelyAscendingVector(sortByField.values)) {\n      frame = sortDataFrame(frame, fieldIdx);\n    }\n  }\n\n  return frame;\n}\n\n/**\n * This will return a single frame joined by the first matching field.  When a join field is not specified,\n * the default will use the first time field\n */\nexport function joinDataFrames(options: JoinOptions): DataFrame | undefined {\n  if (!options.frames?.length) {\n    return;\n  }\n\n  const nullMode =\n    options.nullMode ??\n    ((field: Field) => {\n      let spanNulls = field.config.custom?.spanNulls;\n      return spanNulls === true ? NULL_REMOVE : spanNulls === -1 ? NULL_RETAIN : NULL_EXPAND;\n    });\n\n  if (options.frames.length === 1) {\n    let frame = options.frames[0];\n    let frameCopy = frame;\n\n    const joinFieldMatcher = getJoinMatcher(options);\n    let joinIndex = frameCopy.fields.findIndex((f) => joinFieldMatcher(f, frameCopy, options.frames));\n\n    if (options.keepOriginIndices) {\n      frameCopy = {\n        ...frame,\n        fields: frame.fields.map((f, fieldIndex) => {\n          const copy = { ...f };\n          const origin = {\n            frameIndex: 0,\n            fieldIndex,\n          };\n          if (copy.state) {\n            copy.state.origin = origin;\n          } else {\n            copy.state = { origin };\n          }\n          return copy;\n        }),\n      };\n\n      // Make sure the join field is first\n      if (joinIndex > 0) {\n        const joinField = frameCopy.fields[joinIndex];\n        const fields = frameCopy.fields.filter((f, idx) => idx !== joinIndex);\n        fields.unshift(joinField);\n        frameCopy.fields = fields;\n        joinIndex = 0;\n      }\n    }\n\n    if (joinIndex >= 0) {\n      frameCopy = maybeSortFrame(frameCopy, joinIndex);\n    }\n\n    if (options.keep) {\n      let fields = frameCopy.fields.filter(\n        (f, fieldIdx) => fieldIdx === joinIndex || options.keep!(f, frameCopy, options.frames)\n      );\n\n      // mutate already copied frame\n      if (frame !== frameCopy) {\n        frameCopy.fields = fields;\n      } else {\n        frameCopy = {\n          ...frame,\n          fields,\n        };\n      }\n    }\n\n    return frameCopy;\n  }\n\n  const nullModes: JoinNullMode[][] = [];\n  const allData: AlignedData[] = [];\n  const originalFields: Field[] = [];\n  // store frame field order for tabular data join\n  const originalFieldsOrderByFrame: number[][] = [];\n  // all other fields that are not the join on are in the 1+ position (join is always the 0)\n  let fieldsOrder = 1;\n  const joinFieldMatcher = getJoinMatcher(options);\n\n  for (let frameIndex = 0; frameIndex < options.frames.length; frameIndex++) {\n    const frame = options.frames[frameIndex];\n\n    if (!frame || !frame.fields?.length) {\n      continue; // skip the frame\n    }\n\n    const nullModesFrame: JoinNullMode[] = [NULL_REMOVE];\n    let join: Field | undefined = undefined;\n    let fields: Field[] = [];\n    let frameFieldsOrder = [];\n\n    for (let fieldIndex = 0; fieldIndex < frame.fields.length; fieldIndex++) {\n      const field = frame.fields[fieldIndex];\n      field.state = field.state || {};\n\n      if (!join && joinFieldMatcher(field, frame, options.frames)) {\n        join = field;\n      } else {\n        if (options.keep && !options.keep(field, frame, options.frames)) {\n          continue; // skip field\n        }\n\n        // Support the standard graph span nulls field config\n        nullModesFrame.push(nullMode(field));\n\n        let labels = field.labels ?? {};\n        let name = field.name;\n        if (frame.name) {\n          if (field.name === TIME_SERIES_VALUE_FIELD_NAME) {\n            name = frame.name;\n          } else if (labels.name == null) {\n            // add the name label from frame\n            labels = { ...labels, name: frame.name };\n          }\n        }\n\n        fields.push({\n          ...field,\n          name,\n          labels,\n        });\n      }\n\n      if (options.keepOriginIndices) {\n        field.state.origin = {\n          frameIndex,\n          fieldIndex,\n        };\n      }\n    }\n\n    if (!join) {\n      continue; // skip the frame\n    }\n\n    if (originalFields.length === 0) {\n      originalFields.push(join); // first join field\n    }\n\n    nullModes.push(nullModesFrame);\n    const a: AlignedData = [join.values]; //\n\n    for (const field of fields) {\n      a.push(field.values);\n      originalFields.push(field);\n      if (!options.keepDisplayNames) {\n        // clear field displayName state\n        delete field.state?.displayName;\n      }\n      // store frame field order for tabular data join\n      frameFieldsOrder.push(fieldsOrder);\n      fieldsOrder++;\n    }\n    // store frame field order for tabular data join\n    originalFieldsOrderByFrame.push(frameFieldsOrder);\n    allData.push(a);\n  }\n\n  let joined: Array<Array<number | string | null | undefined>> = [];\n\n  if (options.mode === JoinMode.outerTabular) {\n    joined = joinOuterTabular(allData, originalFieldsOrderByFrame, originalFields.length, nullModes);\n  } else if (options.mode === JoinMode.inner) {\n    joined = joinInner(allData);\n  } else {\n    joined = join(allData, nullModes, options.mode);\n  }\n\n  return {\n    // ...options.data[0], // keep name, meta?\n    length: joined[0] ? joined[0].length : 0,\n    fields: originalFields.map((f, index) => ({\n      ...f,\n      values: joined[index],\n    })),\n  };\n}\n\n// The following full outer join allows for multiple/duplicated joined fields values where as the performant join from uplot creates a unique set of field values to be joined on\n// http://www.silota.com/docs/recipes/sql-join-tutorial-javascript-examples.html\n// The frame field value which is used join on is sorted to the 0 position of each table data in both tables and nullModes\n// (not sure if we need nullModes) for nullModes, the field to join on is given NULL_REMOVE and all other fields are given NULL_EXPAND\nfunction joinOuterTabular(\n  tables: AlignedData[],\n  originalFieldsOrderByFrame: number[][],\n  numberOfFields: number,\n  nullModes?: number[][]\n) {\n  // we will iterate through all frames and check frames for matches preventing duplicates.\n  // we will store each matched frame \"row\" or field values at the same index in the following hash.\n  let duplicateHash: { [key: string]: Array<number | string | null | undefined> } = {};\n\n  // iterate through the tables (frames)\n  // for each frame we get the field data where the data in the 0 pos is the value to join on\n  for (let tableIdx = 0; tableIdx < tables.length; tableIdx++) {\n    // the table (frame) to check for matches in other tables\n    let table = tables[tableIdx];\n    // the field value to join on (the join value is always in the 0 position)\n    let joinOnTableField = table[0];\n\n    // now we iterate through the other table (frame) data to look for matches\n    for (let otherTablesIdx = 0; otherTablesIdx < tables.length; otherTablesIdx++) {\n      // do not match on the same table\n      if (otherTablesIdx === tableIdx) {\n        continue;\n      }\n\n      let otherTable = tables[otherTablesIdx];\n      let otherTableJoinOnField = otherTable[0];\n\n      // iterate through the field to join on from the first table\n      for (\n        let joinTableFieldValuesIdx = 0;\n        joinTableFieldValuesIdx < joinOnTableField.length;\n        joinTableFieldValuesIdx++\n      ) {\n        // create the joined data\n        // this has the orignalFields length and should start out undefined\n        // joined row + number of other fields in each frame\n        // the order of each field is important in how we\n        // 1 check for duplicates\n        // 2 transform the row back into fields for the joined frame\n        // 3 when there is no match for the row we keep the vals undefined\n        const tableJoinOnValue = joinOnTableField[joinTableFieldValuesIdx];\n        const allOtherFields = numberOfFields - 1;\n        let joinedRow: Array<number | string | null | undefined> = [tableJoinOnValue].concat(new Array(allOtherFields));\n\n        let tableFieldValIdx = 0;\n        for (let fieldsIdx = 1; fieldsIdx < table.length; fieldsIdx++) {\n          const joinRowIdx = originalFieldsOrderByFrame[tableIdx][tableFieldValIdx];\n          joinedRow[joinRowIdx] = table[fieldsIdx][joinTableFieldValuesIdx];\n          tableFieldValIdx++;\n        }\n\n        for (let otherTableValuesIdx = 0; otherTableValuesIdx < otherTableJoinOnField.length; otherTableValuesIdx++) {\n          if (joinOnTableField[joinTableFieldValuesIdx] === otherTableJoinOnField[otherTableValuesIdx]) {\n            let tableFieldValIdx = 0;\n            for (let fieldsIdx = 1; fieldsIdx < otherTable.length; fieldsIdx++) {\n              const joinRowIdx = originalFieldsOrderByFrame[otherTablesIdx][tableFieldValIdx];\n              joinedRow[joinRowIdx] = otherTable[fieldsIdx][otherTableValuesIdx];\n              tableFieldValIdx++;\n            }\n\n            break;\n          }\n        }\n\n        // prevent duplicates by entering rows in a hash where keys are the rows\n        duplicateHash[JSON.stringify(joinedRow)] = joinedRow;\n      }\n    }\n  }\n\n  // transform the joined rows into data for a dataframe\n  let data: Array<Array<number | string | null | undefined>> = [];\n  for (let field = 0; field < numberOfFields; field++) {\n    data.push(new Array(0));\n  }\n\n  for (let key in duplicateHash) {\n    const row = duplicateHash[key];\n\n    for (let valIdx = 0; valIdx < row.length; valIdx++) {\n      data[valIdx].push(row[valIdx]);\n    }\n  }\n\n  return data;\n}\n\n/**\n * This function performs a sql-style inner join on tabular data;\n * it will combine records from two tables whenever there are matching\n * values in a field common to both tables.\n *\n * NOTE: This function implicitly assumes that the first array in each AlignedData\n * contains the values to join on. It doesn't explicitly specify a column field to join on,\n * but rather uses the 0th position of the arrays (AlignedData[0]) to determine the joining keys.\n * Then, when processing the tables, the function iterates over the values in the `xValues`\n * (the joining keys) array and checks if the current row `currentRow` already includes the value.\n * If a matching value is found, it joins the corresponding values from the remaining arrays `yValues`\n * (all other non-joining key arrays) to create a new row in the joined table.\n *\n * @param {AlignedData[]} tables - The tables to join.\n *\n * @returns {Array<Array<string | number | null | undefined>>} The joined tables as an array of arrays, where each array represents a row in the joined table.\n */\nfunction joinInner(tables: AlignedData[]): Array<Array<string | number | null | undefined>> {\n  const joinedTables: Array<Array<string | number | null | undefined>> = [];\n\n  // Recursive function to perform the inner join.\n  const joinTables = (\n    currentTables: AlignedData[],\n    currentIndex: number,\n    currentRow: Array<string | number | null | undefined>\n  ) => {\n    if (currentIndex === currentTables.length) {\n      // Base case: all tables have been joined, add the current row to the final result.\n      joinedTables.push(currentRow);\n      return;\n    }\n\n    const currentTable = currentTables[currentIndex];\n    const [xValues, ...yValues] = currentTable;\n\n    for (let i = 0; i < xValues.length; i++) {\n      const value = xValues[i];\n\n      if (currentIndex === 0 || currentRow.includes(value)) {\n        const newRow = [...currentRow];\n\n        if (currentIndex === 0) {\n          newRow.push(value);\n        }\n\n        for (let j = 0; j < yValues.length; j++) {\n          newRow.push(yValues[j][i]);\n        }\n\n        // Recursive call for the next table\n        joinTables(currentTables, currentIndex + 1, newRow);\n      }\n    }\n  };\n\n  // Start the recursive join process.\n  joinTables(tables, 0, []);\n\n  // Check if joinedTables is empty before transposing. No need to transpose if there are no joined tables.\n  if (joinedTables.length === 0) {\n    const fieldCount = tables.reduce((count, table) => count + (table.length - 1), 1);\n    return Array.from({ length: fieldCount }, () => []);\n  }\n\n  // Transpose the joined tables to get the desired output format.\n  // This essentially flips the rows and columns back to the stucture of the original `tables`.\n  return joinedTables[0].map((_, colIndex) => joinedTables.map((row) => row[colIndex]));\n}\n\n//--------------------------------------------------------------------------------\n// Below here is copied from uplot (MIT License)\n// https://github.com/leeoniya/uPlot/blob/master/src/utils.js#L325\n// This avoids needing to import uplot into the data package\n//--------------------------------------------------------------------------------\n\n// Copied from uplot\nexport type TypedArray =\n  | Int8Array\n  | Uint8Array\n  | Int16Array\n  | Uint16Array\n  | Int32Array\n  | Uint32Array\n  | Uint8ClampedArray\n  | Float32Array\n  | Float64Array;\n\nexport type AlignedData =\n  | TypedArray[]\n  | [xValues: number[] | TypedArray, ...yValues: Array<Array<number | null | undefined> | TypedArray>];\n\n// nullModes\nexport const NULL_REMOVE = 0; // nulls are converted to undefined (e.g. for spanGaps: true)\nexport const NULL_RETAIN = 1; // nulls are retained, with alignment artifacts set to undefined (default)\nexport const NULL_EXPAND = 2; // nulls are expanded to include any adjacent alignment artifacts\n\ntype JoinNullMode = number; // NULL_IGNORE | NULL_RETAIN | NULL_EXPAND;\n\n// sets undefined values to nulls when adjacent to existing nulls (minesweeper)\nfunction nullExpand(yVals: Array<number | null>, nullIdxs: number[], alignedLen: number) {\n  for (let i = 0, xi, lastNullIdx = -1; i < nullIdxs.length; i++) {\n    let nullIdx = nullIdxs[i];\n\n    if (nullIdx > lastNullIdx) {\n      xi = nullIdx - 1;\n      while (xi >= 0 && yVals[xi] == null) {\n        yVals[xi--] = null;\n      }\n\n      xi = nullIdx + 1;\n      while (xi < alignedLen && yVals[xi] == null) {\n        yVals[(lastNullIdx = xi++)] = null;\n      }\n    }\n  }\n}\n\n// nullModes is a tables-matched array indicating how to treat nulls in each series\nexport function join(tables: AlignedData[], nullModes?: number[][], mode: JoinMode = JoinMode.outer) {\n  let xVals: Set<number> = new Set();\n\n  for (let ti = 0; ti < tables.length; ti++) {\n    let t = tables[ti];\n    let xs = t[0];\n    let len = xs.length;\n\n    for (let i = 0; i < len; i++) {\n      xVals.add(xs[i]);\n    }\n  }\n\n  let data = [Array.from(xVals).sort((a, b) => a - b)];\n\n  let alignedLen = data[0].length;\n\n  let xIdxs = new Map();\n\n  for (let i = 0; i < alignedLen; i++) {\n    xIdxs.set(data[0][i], i);\n  }\n\n  for (let ti = 0; ti < tables.length; ti++) {\n    let t = tables[ti];\n    let xs = t[0];\n\n    for (let si = 1; si < t.length; si++) {\n      let ys = t[si];\n\n      let yVals = Array(alignedLen).fill(undefined);\n\n      let nullMode = nullModes ? nullModes[ti][si] : NULL_RETAIN;\n\n      let nullIdxs = [];\n\n      for (let i = 0; i < ys.length; i++) {\n        let yVal = ys[i];\n        let alignedIdx = xIdxs.get(xs[i]);\n\n        if (yVal === null) {\n          if (nullMode !== NULL_REMOVE) {\n            yVals[alignedIdx] = yVal;\n\n            if (nullMode === NULL_EXPAND) {\n              nullIdxs.push(alignedIdx);\n            }\n          }\n        } else {\n          yVals[alignedIdx] = yVal;\n        }\n      }\n\n      nullExpand(yVals, nullIdxs, alignedLen);\n\n      data.push(yVals);\n    }\n  }\n\n  return data;\n}\n\n// Test a few samples to see if the values are ascending\n// Only exported for tests\nexport function isLikelyAscendingVector(data: unknown[], samples = 50) {\n  const len = data.length;\n\n  // empty or single value\n  if (len <= 1) {\n    return true;\n  }\n\n  // skip leading & trailing nullish\n  let firstIdx = 0;\n  let lastIdx = len - 1;\n\n  while (firstIdx <= lastIdx && data[firstIdx] == null) {\n    firstIdx++;\n  }\n\n  while (lastIdx >= firstIdx && data[lastIdx] == null) {\n    lastIdx--;\n  }\n\n  // all nullish or one value surrounded by nullish\n  if (lastIdx <= firstIdx) {\n    return true;\n  }\n\n  const stride = Math.max(1, Math.floor((lastIdx - firstIdx + 1) / samples));\n\n  for (let prevVal = data[firstIdx], i = firstIdx + stride; i <= lastIdx; i += stride) {\n    const v = data[i];\n\n    if (v != null && prevVal != null) {\n      if (v <= prevVal) {\n        return false;\n      }\n\n      prevVal = v;\n    }\n  }\n\n  return true;\n}\n","import { Labels } from '../types/data';\n\n/** replace labels in a string.  Used for loki+prometheus legend formats */\nexport function renderLegendFormat(aliasPattern: string, aliasData: Labels): string {\n  const aliasRegex = /\\{\\{\\s*(.+?)\\s*\\}\\}/g;\n  return aliasPattern.replace(aliasRegex, (_, g1) => (aliasData[g1] ? aliasData[g1] : g1));\n}\n","import { AlignedData } from 'uplot';\n\nimport { join } from '../transformations/transformers/joinDataFrames';\nimport { Labels, QueryResultMeta } from '../types/data';\nimport { FieldDTO, DataFrame, Field, FieldType } from '../types/dataFrame';\nimport { parseLabels } from '../utils/labels';\nimport { renderLegendFormat } from '../utils/legend';\n\nimport { DataFrameJSON, decodeFieldValueEntities, FieldSchema } from './DataFrameJSON';\nimport { guessFieldTypeFromValue, toFilteredDataFrameDTO } from './processDataFrame';\n\n/**\n * Indicate if the frame is appened or replace\n *\n * @alpha\n */\nexport enum StreamingFrameAction {\n  Append = 'append',\n  Replace = 'replace',\n}\n\n/**\n * @alpha\n * */\nexport interface StreamingFrameOptions {\n  maxLength: number; // 1000\n  maxDelta: number; // how long to keep things\n  action: StreamingFrameAction; // default will append\n\n  /** optionally format field names based on labels */\n  displayNameFormat?: string;\n}\n\n/**\n * Stream packet info is attached to StreamingDataFrames and indicate how many\n * rows were added to the end of the frame.  The number of discarded rows can be\n * calculated from previous state\n */\nexport interface StreamPacketInfo {\n  number: number;\n  action: StreamingFrameAction;\n  length: number;\n  schemaChanged: boolean;\n}\n\nconst PROM_STYLE_METRIC_LABEL = '__name__';\n\nenum PushMode {\n  wide,\n  labels,\n  // long\n}\n\nexport type SerializedStreamingDataFrame = {\n  name?: string;\n  fields: FieldDTO[];\n  refId?: string;\n  meta: QueryResultMeta;\n  schemaFields: FieldSchema[];\n  timeFieldIndex: number;\n  pushMode: PushMode;\n  length: number;\n  packetInfo: StreamPacketInfo;\n  options: StreamingFrameOptions;\n  labels: Set<string>;\n};\n\n/**\n * Unlike a circular buffer, this will append and periodically slice the front\n */\nexport class StreamingDataFrame implements DataFrame {\n  name?: string;\n  refId?: string;\n  meta: QueryResultMeta = {};\n\n  fields: Field[] = [];\n  length = 0;\n\n  private schemaFields: FieldSchema[] = [];\n  private timeFieldIndex = -1;\n  private pushMode = PushMode.wide;\n\n  // current labels\n  private labels: Set<string> = new Set();\n  readonly packetInfo: StreamPacketInfo = {\n    schemaChanged: true,\n    number: 0,\n    action: StreamingFrameAction.Replace,\n    length: 0,\n  };\n\n  private constructor(public options: StreamingFrameOptions) {\n    // Get Length to show up if you use spread\n    Object.defineProperty(this, 'length', {\n      enumerable: true,\n    });\n\n    // Get fields to show up if you use spread\n    Object.defineProperty(this, 'fields', {\n      enumerable: true,\n    });\n  }\n\n  serialize = (\n    fieldPredicate?: (f: Field) => boolean,\n    optionsOverride?: Partial<StreamingFrameOptions>,\n    trimValues?: {\n      maxLength?: number;\n    }\n  ): SerializedStreamingDataFrame => {\n    const options = optionsOverride ? Object.assign({}, { ...this.options, ...optionsOverride }) : this.options;\n    const dataFrameDTO = toFilteredDataFrameDTO(this, fieldPredicate);\n\n    const numberOfItemsToRemove = getNumberOfItemsToRemove(\n      dataFrameDTO.fields.map((f) => f.values ?? []),\n      typeof trimValues?.maxLength === 'number' ? Math.min(trimValues.maxLength, options.maxLength) : options.maxLength,\n      this.timeFieldIndex,\n      options.maxDelta\n    );\n\n    dataFrameDTO.fields = dataFrameDTO.fields.map((f) => ({\n      ...f,\n      values: f.values?.slice(numberOfItemsToRemove),\n    }));\n\n    const length = dataFrameDTO.fields[0]?.values?.length ?? 0;\n\n    return {\n      ...dataFrameDTO,\n      // TODO: Labels and schema are not filtered by field\n      labels: this.labels,\n      schemaFields: this.schemaFields,\n\n      name: this.name,\n      refId: this.refId,\n      meta: this.meta,\n      length,\n      timeFieldIndex: this.timeFieldIndex,\n      pushMode: this.pushMode,\n      packetInfo: this.packetInfo,\n      options,\n    };\n  };\n\n  private initFromSerialized = (serialized: Omit<SerializedStreamingDataFrame, 'options'>) => {\n    this.name = serialized.name;\n    this.refId = serialized.refId;\n    this.meta = serialized.meta;\n    this.length = serialized.length;\n    this.labels = serialized.labels;\n    this.schemaFields = serialized.schemaFields;\n    this.timeFieldIndex = serialized.timeFieldIndex;\n    this.pushMode = serialized.pushMode;\n    this.packetInfo.length = serialized.packetInfo.length;\n    this.packetInfo.number = serialized.packetInfo.number;\n    this.packetInfo.action = StreamingFrameAction.Replace;\n    this.packetInfo.schemaChanged = true;\n    this.fields = serialized.fields.map((f) => ({\n      ...f,\n      type: f.type ?? FieldType.other,\n      config: f.config ?? {},\n      values: f.values ?? [],\n    }));\n\n    assureValuesAreWithinLengthLimit(\n      this.fields.map((f) => f.values),\n      this.options.maxLength,\n      this.timeFieldIndex,\n      this.options.maxDelta\n    );\n  };\n\n  static deserialize = (serialized: SerializedStreamingDataFrame) => {\n    const frame = new StreamingDataFrame(serialized.options);\n    frame.initFromSerialized(serialized);\n    return frame;\n  };\n\n  static empty = (opts?: Partial<StreamingFrameOptions>): StreamingDataFrame =>\n    new StreamingDataFrame(getStreamingFrameOptions(opts));\n\n  static fromDataFrameJSON = (frame: DataFrameJSON, opts?: Partial<StreamingFrameOptions>): StreamingDataFrame => {\n    const streamingDataFrame = new StreamingDataFrame(getStreamingFrameOptions(opts));\n    streamingDataFrame.push(frame);\n    return streamingDataFrame;\n  };\n\n  private get alwaysReplace() {\n    return this.options.action === StreamingFrameAction.Replace;\n  }\n\n  needsResizing = ({ maxLength, maxDelta }: StreamingFrameOptions) => {\n    const needsMoreLength = maxLength && this.options.maxLength < maxLength;\n    const needsBiggerDelta = maxDelta && this.options.maxDelta < maxDelta;\n    const needsToOverrideDefaultInfinityDelta = maxDelta && this.options.maxDelta === Infinity;\n    return Boolean(needsMoreLength || needsBiggerDelta || needsToOverrideDefaultInfinityDelta);\n  };\n\n  resize = ({ maxLength, maxDelta }: Partial<StreamingFrameOptions>) => {\n    if (maxDelta) {\n      if (this.options.maxDelta === Infinity) {\n        this.options.maxDelta = maxDelta;\n      } else {\n        this.options.maxDelta = Math.max(maxDelta, this.options.maxDelta);\n      }\n    }\n    this.options.maxLength = Math.max(this.options.maxLength, maxLength ?? 0);\n  };\n\n  /**\n   * apply the new message to the existing data.  This will replace the existing schema\n   * if a new schema is included in the message, or append data matching the current schema\n   */\n  push(msg: DataFrameJSON): StreamPacketInfo {\n    const { schema, data } = msg;\n\n    this.packetInfo.number++;\n    this.packetInfo.length = 0;\n    this.packetInfo.schemaChanged = false;\n\n    if (schema) {\n      this.pushMode = PushMode.wide;\n      this.timeFieldIndex = schema.fields.findIndex((f) => f.type === FieldType.time);\n      const firstField = schema.fields[0];\n      if (\n        this.timeFieldIndex === 1 &&\n        firstField.type === FieldType.string &&\n        (firstField.name === 'labels' || firstField.name === 'Labels')\n      ) {\n        this.pushMode = PushMode.labels;\n        this.timeFieldIndex = 0; // after labels are removed!\n      }\n\n      const niceSchemaFields = this.pushMode === PushMode.labels ? schema.fields.slice(1) : schema.fields;\n\n      this.refId = schema.refId;\n      if (schema.meta) {\n        this.meta = { ...schema.meta };\n      }\n\n      const { displayNameFormat } = this.options;\n      if (hasSameStructure(this.schemaFields, niceSchemaFields)) {\n        const len = niceSchemaFields.length;\n        this.fields.forEach((f, idx) => {\n          const sf = niceSchemaFields[idx % len];\n          f.config = sf.config ?? {};\n          f.labels = sf.labels;\n        });\n        if (displayNameFormat) {\n          this.fields.forEach((f) => {\n            const labels = { [PROM_STYLE_METRIC_LABEL]: f.name, ...f.labels };\n            f.config.displayNameFromDS = renderLegendFormat(displayNameFormat, labels);\n          });\n        }\n      } else {\n        this.packetInfo.schemaChanged = true;\n        const isWide = this.pushMode === PushMode.wide;\n        this.fields = niceSchemaFields.map((f) => {\n          const config = f.config ?? {};\n          if (displayNameFormat) {\n            const labels = { [PROM_STYLE_METRIC_LABEL]: f.name, ...f.labels };\n            config.displayNameFromDS = renderLegendFormat(displayNameFormat, labels);\n          }\n          return {\n            config,\n            name: f.name,\n            labels: f.labels,\n            type: f.type ?? FieldType.other,\n            // transfer old values by type & name, unless we relied on labels to match fields\n            values: isWide\n              ? (this.fields.find((of) => of.name === f.name && f.type === of.type)?.values ??\n                Array(this.length).fill(undefined))\n              : [],\n          };\n        });\n      }\n\n      this.schemaFields = niceSchemaFields;\n    }\n\n    if (data && data.values.length && data.values[0].length) {\n      let { values, entities } = data;\n\n      if (entities) {\n        entities.forEach((ents, i) => {\n          if (ents) {\n            decodeFieldValueEntities(ents, values[i]);\n            // TODO: append replacements to field\n          }\n        });\n      }\n\n      if (this.pushMode === PushMode.labels) {\n        // augment and transform data to match current schema for standard circPush() path\n        const labeledTables = transpose(values);\n\n        // make sure fields are initalized for each label\n        for (const label of labeledTables.keys()) {\n          if (!this.labels.has(label)) {\n            this.packetInfo.schemaChanged = true;\n            this.addLabel(label);\n          }\n        }\n\n        // TODO: cache higher up\n        let dummyTable = Array(this.schemaFields.length).fill([]);\n\n        let tables: AlignedData[] = [];\n        this.labels.forEach((label) => {\n          tables.push(labeledTables.get(label) ?? dummyTable);\n        });\n\n        values = join(tables);\n      }\n\n      if (values.length !== this.fields.length) {\n        if (this.fields.length) {\n          throw new Error(\n            `push message mismatch.  Expected: ${this.fields.length}, received: ${values.length} (labels=${\n              this.pushMode === PushMode.labels\n            })`\n          );\n        }\n\n        this.fields = values.map((vals, idx) => {\n          let name = `Field ${idx}`;\n          let type = guessFieldTypeFromValue(vals[0]);\n          const isTime = idx === 0 && type === FieldType.number && (vals as number[])[0] > 1600016688632;\n          if (isTime) {\n            type = FieldType.time;\n            name = 'Time';\n          }\n\n          return {\n            name,\n            type,\n            config: {},\n            values: [],\n          };\n        });\n      }\n\n      let appended = values;\n      this.packetInfo.length = values[0].length;\n\n      if (this.alwaysReplace || !this.length) {\n        this.packetInfo.action = StreamingFrameAction.Replace;\n      } else {\n        this.packetInfo.action = StreamingFrameAction.Append;\n\n        // mutates appended\n        appended = this.fields.map((f) => f.values);\n        circPush(appended, values, this.options.maxLength, this.timeFieldIndex, this.options.maxDelta);\n      }\n\n      appended.forEach((v, i) => {\n        const field = this.fields[i];\n        const { state } = field;\n        field.values = v;\n        if (state) {\n          state.calcs = undefined;\n        }\n      });\n\n      // Update the frame length\n      this.length = appended[0].length;\n    }\n\n    return {\n      ...this.packetInfo,\n    };\n  }\n\n  pushNewValues = (values: unknown[][]) => {\n    if (!values?.length) {\n      return;\n    }\n\n    this.packetInfo.action = this.options.action;\n    this.packetInfo.number++;\n    this.packetInfo.length = values[0].length;\n    this.packetInfo.schemaChanged = false;\n\n    if (this.options.action === StreamingFrameAction.Append) {\n      circPush(\n        this.fields.map((f) => f.values),\n        values,\n        this.options.maxLength,\n        this.timeFieldIndex,\n        this.options.maxDelta\n      );\n    } else {\n      values.forEach((v, i) => {\n        if (this.fields[i]) {\n          this.fields[i].values = v;\n        }\n      });\n\n      assureValuesAreWithinLengthLimit(\n        this.fields.map((f) => f.values),\n        this.options.maxLength,\n        this.timeFieldIndex,\n        this.options.maxDelta\n      );\n    }\n    const newLength = this.fields?.[0]?.values.length;\n    if (newLength !== undefined) {\n      this.length = newLength;\n    }\n  };\n\n  resetStateCalculations = () => {\n    this.fields.forEach((f) => {\n      f.state = {\n        ...(f.state ?? {}),\n        calcs: undefined,\n        range: undefined,\n      };\n    });\n  };\n\n  getMatchingFieldIndexes = (fieldPredicate: (f: Field) => boolean): number[] =>\n    this.fields\n      .map((f, index) => (fieldPredicate(f) ? index : undefined))\n      .filter((val) => val !== undefined) as number[];\n\n  getValuesFromLastPacket = (): unknown[][] =>\n    this.fields.map((f) => {\n      const values = f.values;\n      return values.slice(Math.max(values.length - this.packetInfo.length));\n    });\n\n  hasAtLeastOnePacket = () => Boolean(this.packetInfo.length);\n\n  // adds a set of fields for a new label\n  private addLabel(label: string) {\n    const { displayNameFormat } = this.options;\n    const labelCount = this.labels.size;\n\n    // parse labels\n    const parsedLabels = parseLabelsFromField(label);\n\n    if (labelCount === 0) {\n      // mutate existing fields and add labels\n      this.fields.forEach((f, i) => {\n        if (i > 0) {\n          f.labels = parsedLabels;\n          if (displayNameFormat) {\n            const labels = { [PROM_STYLE_METRIC_LABEL]: f.name, ...parsedLabels };\n            f.config.displayNameFromDS = renderLegendFormat(displayNameFormat, labels);\n          }\n        }\n      });\n    } else {\n      for (let i = 1; i < this.schemaFields.length; i++) {\n        let proto = this.schemaFields[i] as Field;\n        const config = proto.config ?? {};\n        if (displayNameFormat) {\n          const labels = { [PROM_STYLE_METRIC_LABEL]: proto.name, ...parsedLabels };\n          config.displayNameFromDS = renderLegendFormat(displayNameFormat, labels);\n        }\n        this.fields.push({\n          ...proto,\n          config,\n          labels: parsedLabels,\n          values: Array(this.length).fill(undefined),\n        });\n      }\n    }\n\n    this.labels.add(label);\n  }\n\n  getOptions = (): Readonly<StreamingFrameOptions> => this.options;\n}\n\nexport function getStreamingFrameOptions(opts?: Partial<StreamingFrameOptions>): StreamingFrameOptions {\n  return {\n    maxLength: opts?.maxLength ?? 1000,\n    maxDelta: opts?.maxDelta ?? Infinity,\n    action: opts?.action ?? StreamingFrameAction.Append,\n    displayNameFormat: opts?.displayNameFormat,\n  };\n}\n\n// converts vertical insertion records with table keys in [0] and column values in [1...N]\n// to join()-able tables with column arrays\nexport function transpose(vrecs: unknown[][]) {\n  let tableKeys = new Set(vrecs[0]);\n  let tables = new Map();\n\n  tableKeys.forEach((key) => {\n    let cols = Array(vrecs.length - 1)\n      .fill(null)\n      .map(() => []);\n\n    tables.set(key, cols);\n  });\n\n  for (let r = 0; r < vrecs[0].length; r++) {\n    let table = tables.get(vrecs[0][r]);\n    for (let c = 1; c < vrecs.length; c++) {\n      table[c - 1].push(vrecs[c][r]);\n    }\n  }\n\n  return tables;\n}\n\n// binary search for index of closest value\nexport function closestIdx(num: number, arr: number[], lo?: number, hi?: number) {\n  let mid;\n  lo = lo || 0;\n  hi = hi || arr.length - 1;\n  let bitwise = hi <= 2147483647;\n\n  while (hi - lo > 1) {\n    mid = bitwise ? (lo + hi) >> 1 : Math.floor((lo + hi) / 2);\n\n    if (arr[mid] < num) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n\n  if (num - arr[lo] <= arr[hi] - num) {\n    return lo;\n  }\n\n  return hi;\n}\n\nexport function parseLabelsFromField(str: string): Labels {\n  if (!str.length) {\n    return {};\n  }\n  if (str.charAt(0) === '{') {\n    return parseLabels(str);\n  }\n  const parsedLabels: Labels = {};\n  str.split(',').forEach((kv) => {\n    const [key, val] = kv.trim().split('=');\n    parsedLabels[key] = val;\n  });\n  return parsedLabels;\n}\n\n/**\n * @internal // not exported in yet\n */\nexport function getLastStreamingDataFramePacket(frame: DataFrame) {\n  if (frame instanceof StreamingDataFrame) {\n    const pi = frame.packetInfo;\n    return pi.action;\n  }\n  return undefined;\n}\n\n// mutable circular push\nfunction circPush(data: unknown[][], newData: unknown[][], maxLength = Infinity, deltaIdx = 0, maxDelta = Infinity) {\n  for (let i = 0; i < data.length; i++) {\n    for (let k = 0; k < newData[i].length; k++) {\n      data[i].push(newData[i][k]);\n    }\n  }\n\n  return assureValuesAreWithinLengthLimit(data, maxLength, deltaIdx, maxDelta);\n}\n\nfunction assureValuesAreWithinLengthLimit(data: unknown[][], maxLength = Infinity, deltaIdx = 0, maxDelta = Infinity) {\n  const count = getNumberOfItemsToRemove(data, maxLength, deltaIdx, maxDelta);\n\n  if (count) {\n    for (let i = 0; i < data.length; i++) {\n      data[i].splice(0, count);\n    }\n  }\n\n  return count;\n}\n\nfunction getNumberOfItemsToRemove(data: unknown[][], maxLength = Infinity, deltaIdx = 0, maxDelta = Infinity) {\n  if (!data[0]?.length) {\n    return 0;\n  }\n\n  const nlen = data[0].length;\n\n  let sliceIdx = 0;\n\n  if (nlen > maxLength) {\n    sliceIdx = nlen - maxLength;\n  }\n\n  if (maxDelta !== Infinity && deltaIdx >= 0) {\n    const deltaLookup = data[deltaIdx] as number[];\n\n    const low = deltaLookup[sliceIdx];\n    const high = deltaLookup[nlen - 1];\n\n    if (high - low > maxDelta) {\n      sliceIdx = closestIdx(high - maxDelta, deltaLookup, sliceIdx);\n    }\n  }\n\n  return sliceIdx;\n}\n\nfunction hasSameStructure(a: FieldSchema[], b: FieldSchema[]): boolean {\n  if (a?.length !== b.length) {\n    return false;\n  }\n  for (let i = 0; i < a.length; i++) {\n    const fA = a[i];\n    const fB = b[i];\n    if (fA.name !== fB.name || fA.type !== fB.type) {\n      return false;\n    }\n  }\n  return true;\n}\n","import { closestIdx } from '../dataframe/StreamingDataFrame';\n\nexport type Table = [times: number[], ...values: any[][]];\n\n// prevTable and nextTable are assumed sorted ASC on reference [0] arrays\n// nextTable is assumed to be contiguous, only edges are checked for overlap\n// ...so prev: [1,2,5] + next: [3,4,6] -> [1,2,3,4,6]\nexport function amendTable(prevTable: Table, nextTable: Table): Table {\n  let [prevTimes] = prevTable;\n  let [nextTimes] = nextTable;\n\n  let pLen = prevTimes.length;\n  let pStart = prevTimes[0];\n  let pEnd = prevTimes[pLen - 1];\n\n  let nLen = nextTimes.length;\n  let nStart = nextTimes[0];\n  let nEnd = nextTimes[nLen - 1];\n\n  let outTable: Table;\n\n  if (pLen) {\n    if (nLen) {\n      // append, no overlap\n      if (nStart > pEnd) {\n        outTable = prevTable.map((_, i) => prevTable[i].concat(nextTable[i])) as Table;\n      }\n      // prepend, no overlap\n      else if (nEnd < pStart) {\n        outTable = nextTable.map((_, i) => nextTable[i].concat(prevTable[i])) as Table;\n      }\n      // full replace\n      else if (nStart <= pStart && nEnd >= pEnd) {\n        outTable = nextTable;\n      }\n      // partial replace\n      else if (nStart > pStart && nEnd < pEnd) {\n        // partial replace\n        let startIdx = closestIdx(nStart, prevTimes);\n        startIdx = prevTimes[startIdx] < nStart ? startIdx + 1 : startIdx;\n        let endIdx = closestIdx(nEnd, prevTimes);\n        endIdx = prevTimes[endIdx] > nEnd ? endIdx - 1 : endIdx;\n\n        outTable = prevTable.map((_, i) =>\n          prevTable[i]\n            .slice(0, startIdx)\n            .concat(nextTable[i])\n            .concat(prevTable[i].slice(endIdx + 1))\n        ) as Table;\n      }\n      // append, with overlap\n      else if (nStart >= pStart) {\n        let idx = closestIdx(nStart, prevTimes);\n        idx = prevTimes[idx] < nStart ? idx - 1 : idx;\n        outTable = prevTable.map((_, i) => prevTable[i].slice(0, idx).concat(nextTable[i])) as Table;\n      }\n      // prepend, with overlap\n      else if (nEnd >= pStart) {\n        let idx = closestIdx(nEnd, prevTimes);\n        idx = prevTimes[idx] < nEnd ? idx : idx + 1;\n        outTable = nextTable.map((_, i) => nextTable[i].concat(prevTable[i].slice(idx))) as Table;\n      }\n    } else {\n      outTable = prevTable;\n    }\n  } else {\n    if (nLen) {\n      outTable = nextTable;\n    } else {\n      outTable = [[]];\n    }\n  }\n\n  return outTable!;\n}\n\nexport function trimTable(table: Table, fromTime: number, toTime: number): Table {\n  let [times, ...vals] = table;\n  let fromIdx: number | undefined;\n  let toIdx: number | undefined;\n\n  // trim to bounds\n  if (times[0] < fromTime) {\n    fromIdx = closestIdx(fromTime, times);\n\n    if (times[fromIdx] < fromTime) {\n      fromIdx++;\n    }\n  }\n\n  if (times[times.length - 1] > toTime) {\n    toIdx = closestIdx(toTime, times);\n\n    if (times[toIdx] > toTime) {\n      toIdx--;\n    }\n  }\n\n  if (fromIdx != null || toIdx != null) {\n    times = times.slice(fromIdx ?? 0, toIdx);\n    vals = vals.map((vals2) => vals2.slice(fromIdx ?? 0, toIdx));\n  }\n\n  return [times, ...vals];\n}\n","/**\n * @public\n * @deprecated use a simple Arrays\n */\nexport abstract class FunctionalVector<T = unknown> {\n  abstract get length(): number;\n\n  abstract get(index: number): T;\n\n  // Implement \"iterator protocol\"\n  *iterator(): Generator<T> {\n    for (let i = 0; i < this.length; i++) {\n      yield this.get(i);\n    }\n  }\n\n  set(index: number, value: T): void {\n    throw 'unsupported operation';\n  }\n\n  add(value: T): void {\n    throw 'unsupported operation';\n  }\n\n  push(...vals: T[]): number {\n    for (const v of vals) {\n      this.add(v);\n    }\n    return this.length;\n  }\n\n  // Implement \"iterable protocol\"\n  [Symbol.iterator]() {\n    return this.iterator();\n  }\n\n  forEach(iterator: (row: T, index: number, array: T[]) => void): void {\n    return vectorator(this).forEach(iterator);\n  }\n\n  map<V>(transform: (item: T, index: number, array: T[]) => V): V[] {\n    return vectorator(this).map(transform);\n  }\n\n  filter(predicate: (item: T, index: number, array: T[]) => boolean): T[] {\n    return vectorator(this).filter(predicate);\n  }\n\n  at(index: number): T | undefined {\n    return this.get(index);\n  }\n\n  toArray(): T[] {\n    const arr = new Array<T>(this.length);\n    for (let i = 0; i < this.length; i++) {\n      arr[i] = this.get(i);\n    }\n    return arr;\n  }\n\n  join(separator?: string | undefined): string {\n    return this.toArray().join(separator);\n  }\n\n  toJSON(): any {\n    return this.toArray();\n  }\n\n  //--------------------------\n  // Method not implemented\n  //--------------------------\n\n  [n: number]: T;\n\n  pop(): T | undefined {\n    throw new Error('Method not implemented.');\n  }\n  concat(...items: Array<ConcatArray<T>>): T[];\n  concat(...items: Array<T | ConcatArray<T>>): T[] {\n    throw new Error('Method not implemented.');\n  }\n  reverse(): T[] {\n    throw new Error('Method not implemented.');\n  }\n  shift(): T | undefined {\n    throw new Error('Method not implemented.');\n  }\n  sort(compareFn?: ((a: T, b: T) => number) | undefined): this {\n    throw new Error('Method not implemented.');\n  }\n  splice(start: number, deleteCount?: number | undefined): T[];\n  splice(start: number, deleteCount: number, ...items: T[]): T[] {\n    throw new Error('Method not implemented.');\n  }\n  unshift(...items: T[]): number {\n    throw new Error('Method not implemented.');\n  }\n  fill(value: T, start?: number | undefined, end?: number | undefined): this {\n    throw new Error('Method not implemented.');\n  }\n  copyWithin(target: number, start: number, end?: number | undefined): this {\n    throw new Error('Method not implemented.');\n  }\n  // Object not implemented\n  [Symbol.unscopables] = {};\n\n  //--------------------------------------------------------------------------------\n  // Delegated Array function -- these will not be efficient :grimmice:\n  //--------------------------------------------------------------------------------\n\n  slice(start?: number | undefined, end?: number | undefined): T[] {\n    return this.toArray().slice(start, end);\n  }\n  indexOf(searchElement: T, fromIndex?: number | undefined): number {\n    return this.toArray().indexOf(searchElement, fromIndex);\n  }\n  lastIndexOf(searchElement: T, fromIndex?: number | undefined): number {\n    return this.toArray().lastIndexOf(searchElement, fromIndex);\n  }\n  every<S extends T>(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): this is S[];\n  every(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean;\n  every(predicate: any, thisArg?: unknown): boolean {\n    return this.toArray().every(predicate, thisArg);\n  }\n  some(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean {\n    return this.toArray().some(predicate, thisArg);\n  }\n  reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T;\n  reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T;\n  reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U;\n  reduce(callbackfn: unknown, initialValue?: unknown): T {\n    throw new Error('Method not implemented.');\n  }\n  reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T;\n  reduceRight(\n    callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T,\n    initialValue: T\n  ): T;\n  reduceRight<U>(\n    callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U,\n    initialValue: U\n  ): U;\n  reduceRight(callbackfn: unknown, initialValue?: unknown): T {\n    throw new Error('Method not implemented.');\n  }\n  find<S extends T>(\n    predicate: (this: void, value: T, index: number, obj: T[]) => value is S,\n    thisArg?: any\n  ): S | undefined;\n  find(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): T | undefined {\n    return this.toArray().find(predicate, thisArg);\n  }\n  findIndex(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): number {\n    return this.toArray().findIndex(predicate, thisArg);\n  }\n  entries(): IterableIterator<[number, T]> {\n    return this.toArray().entries();\n  }\n  keys(): IterableIterator<number> {\n    return this.toArray().keys();\n  }\n  values(): IterableIterator<T> {\n    return this.toArray().values();\n  }\n  includes(searchElement: T, fromIndex?: number | undefined): boolean {\n    return this.toArray().includes(searchElement, fromIndex);\n  }\n  flatMap<U, This = undefined>(\n    callback: (this: This, value: T, index: number, array: T[]) => U | readonly U[],\n    thisArg?: This | undefined\n  ): U[] {\n    return this.toArray().flatMap(callback, thisArg);\n  }\n  flat<A, D extends number = 1>(this: A, depth?: D | undefined): Array<FlatArray<A, D>> {\n    throw new Error('Method not implemented.');\n  }\n}\n\nconst emptyarray: any[] = [];\n\n/**\n * Use functional programming with your vector\n *\n * @deprecated use a simple Arrays\n */\nexport function vectorator<T>(vector: FunctionalVector<T>) {\n  return {\n    *[Symbol.iterator]() {\n      for (let i = 0; i < vector.length; i++) {\n        yield vector.get(i);\n      }\n    },\n\n    forEach(iterator: (row: T, index: number, array: T[]) => void): void {\n      for (let i = 0; i < vector.length; i++) {\n        iterator(vector.get(i), i, emptyarray);\n      }\n    },\n\n    map<V>(transform: (item: T, index: number, array: T[]) => V): V[] {\n      const result: V[] = [];\n      for (let i = 0; i < vector.length; i++) {\n        result.push(transform(vector.get(i), i, emptyarray));\n      }\n      return result;\n    },\n\n    /** Add a predicate where you return true if it should *keep* the value */\n    filter(predicate: (item: T, index: number, array: T[]) => boolean): T[] {\n      const result: T[] = [];\n      let count = 0;\n      for (const val of this) {\n        if (predicate(val, count++, emptyarray)) {\n          result.push(val);\n        }\n      }\n      return result;\n    },\n  };\n}\n","import { DataFrame, Field } from '../types/dataFrame';\nimport { DisplayProcessor } from '../types/displayValue';\nimport { FunctionalVector } from '../vector/FunctionalVector';\n\n/**\n * This abstraction will present the contents of a DataFrame as if\n * it were a well typed javascript object Vector.\n *\n * @remarks\n * The {@link DataFrameView.get} is optimized for use in a loop and will return same object.\n * See function for more details.\n *\n * @typeParam T - Type of object stored in the DataFrame.\n * @beta\n */\nexport class DataFrameView<T extends object = any> extends FunctionalVector<T> {\n  private index = 0;\n  private obj: T;\n  readonly fields: {\n    readonly [Property in keyof T]: Field<T[Property]>;\n  };\n\n  constructor(private data: DataFrame) {\n    super();\n    const obj = {} as T;\n    const fields = {} as any;\n\n    for (let i = 0; i < data.fields.length; i++) {\n      const field = data.fields[i];\n      if (!field.name) {\n        continue; // unsupported\n      }\n\n      fields[field.name] = field;\n      const getter = () => field.values.get(this.index); // .get() to support all Vector types\n\n      if (!obj.hasOwnProperty(field.name)) {\n        Object.defineProperty(obj, field.name, {\n          enumerable: true, // Shows up as enumerable property\n          get: getter,\n        });\n      }\n\n      if (!obj.hasOwnProperty(i.toString())) {\n        Object.defineProperty(obj, i, {\n          enumerable: false, // Don't enumerate array index\n          get: getter,\n        });\n      }\n    }\n\n    this.obj = obj;\n    this.fields = fields;\n  }\n\n  get dataFrame() {\n    return this.data;\n  }\n\n  get length() {\n    return this.data.length;\n  }\n\n  /**\n   * Helper function to return the {@link DisplayProcessor} for a given field column.\n   * @param colIndex - the field column index for the data frame.\n   */\n  getFieldDisplayProcessor(colIndex: number): DisplayProcessor | undefined {\n    if (!this.dataFrame || !this.dataFrame.fields) {\n      return undefined;\n    }\n\n    const field = this.dataFrame.fields[colIndex];\n\n    if (!field || !field.display) {\n      return undefined;\n    }\n\n    return field.display;\n  }\n\n  /**\n   * The contents of the object returned from this function\n   * are optimized for use in a loop. All calls return the same object\n   * but the index has changed.\n   *\n   * @example\n   * ```typescript\n   *   // `first`, `second` and `third` will all point to the same contents at index 2:\n   *   const first = view.get(0);\n   *   const second = view.get(1);\n   *   const third = view.get(2);\n   *\n   *   // If you need three different objects, consider something like:\n   *   const first = { ...view.get(0) };\n   *   const second = { ...view.get(1) };\n   *   const third = { ...view.get(2) };\n   * ```\n   * @param idx - The index of the object you currently are inspecting\n   */\n  get(idx: number) {\n    this.index = idx;\n    return this.obj;\n  }\n\n  toArray(): T[] {\n    return new Array(this.data.length)\n      .fill(0) // Needs to make a full copy\n      .map((_, i) => ({ ...this.get(i) }));\n  }\n}\n","import { DataFrame, Field, FieldType } from '../types/dataFrame';\n\nimport { guessFieldTypeForField } from './processDataFrame';\n\nexport interface FieldWithIndex extends Field {\n  index: number;\n}\n\nexport class FieldCache {\n  fields: FieldWithIndex[] = [];\n\n  private fieldByName: { [key: string]: FieldWithIndex } = {};\n  private fieldByType: { [key: string]: FieldWithIndex[] } = {};\n\n  constructor(data: DataFrame) {\n    this.fields = data.fields.map((field, idx) => ({\n      ...field,\n      index: idx,\n    }));\n\n    for (let i = 0; i < data.fields.length; i++) {\n      const field = data.fields[i];\n      // Make sure it has a type\n      if (field.type === FieldType.other) {\n        const t = guessFieldTypeForField(field);\n        if (t) {\n          field.type = t;\n        }\n      }\n      if (!this.fieldByType[field.type]) {\n        this.fieldByType[field.type] = [];\n      }\n      this.fieldByType[field.type].push({\n        ...field,\n        index: i,\n      });\n\n      if (this.fieldByName[field.name]) {\n        console.warn('Duplicate field names in DataFrame: ', field.name);\n      } else {\n        this.fieldByName[field.name] = { ...field, index: i };\n      }\n    }\n  }\n\n  getFields(type?: FieldType): FieldWithIndex[] {\n    if (!type) {\n      return [...this.fields]; // All fields\n    }\n    const fields = this.fieldByType[type];\n    if (fields) {\n      return [...fields];\n    }\n    return [];\n  }\n\n  hasFieldOfType(type: FieldType): boolean {\n    const types = this.fieldByType[type];\n    return types && types.length > 0;\n  }\n\n  getFirstFieldOfType(type: FieldType, includeHidden = false): FieldWithIndex | undefined {\n    const fields = this.fieldByType[type];\n    const firstField = fields?.find((field) => includeHidden || !field.config.custom?.hidden);\n    return firstField;\n  }\n\n  hasFieldNamed(name: string): boolean {\n    return !!this.fieldByName[name];\n  }\n\n  hasFieldWithNameAndType(name: string, type: FieldType): boolean {\n    return !!this.fieldByName[name] && this.fieldByType[type].filter((field) => field.name === name).length > 0;\n  }\n\n  /**\n   * Returns the first field with the given name.\n   */\n  getFieldByName(name: string): FieldWithIndex | undefined {\n    return this.fieldByName[name];\n  }\n\n  /**\n   * Returns the fields with the given label.\n   */\n  getFieldsByLabel(label: string, value: string): FieldWithIndex[] {\n    return Object.values(this.fieldByName).filter((f) => {\n      return f.labels && f.labels[label] === value;\n    });\n  }\n}\n","import { guessFieldTypeFromValue } from '../dataframe/processDataFrame';\nimport { Field, FieldType } from '../types/dataFrame';\n\nexport function makeFieldParser(value: unknown, field: Field) {\n  if (!field.type) {\n    if (field.name === 'time' || field.name === 'Time') {\n      field.type = FieldType.time;\n    } else {\n      field.type = guessFieldTypeFromValue(value);\n    }\n  }\n\n  if (field.type === FieldType.number) {\n    return (value: string) => {\n      return parseFloat(value);\n    };\n  }\n\n  // Will convert anything that starts with \"T\" to true\n  if (field.type === FieldType.boolean) {\n    return (value: string) => {\n      return !(value[0] === 'F' || value[0] === 'f' || value[0] === '0');\n    };\n  }\n\n  // Just pass the string back\n  return (value: string) => value;\n}\n","import { isString } from 'lodash';\n\nimport { QueryResultMeta } from '../types/data';\nimport { Field, DataFrame, DataFrameDTO, FieldDTO, FieldType } from '../types/dataFrame';\nimport { makeFieldParser } from '../utils/fieldParser';\nimport { FunctionalVector } from '../vector/FunctionalVector';\n\nimport { guessFieldTypeFromValue, guessFieldTypeForField, toDataFrameDTO } from './processDataFrame';\n\n/** @deprecated */\nexport type MutableField<T = any> = Field<T>;\n\n/** @deprecated */\ntype MutableVectorCreator = (buffer?: unknown[]) => unknown[];\n\nexport const MISSING_VALUE = undefined; // Treated as connected in new graph panel\n\n/**\n * MutableDataFrame is a complex wrapper around the DataFrame interface\n *\n * @deprecated use standard DataFrame, or create one with PartialDataFrame\n */\nexport class MutableDataFrame<T = any> extends FunctionalVector<T> implements DataFrame {\n  name?: string;\n  refId?: string;\n  meta?: QueryResultMeta;\n  fields: MutableField[] = [];\n\n  private first: any[] = [];\n  private creator: MutableVectorCreator;\n\n  constructor(source?: DataFrame | DataFrameDTO, creator?: MutableVectorCreator) {\n    super();\n\n    // This creates the underlying storage buffers\n    this.creator = creator\n      ? creator\n      : (buffer?: any[]) => {\n          return buffer ?? [];\n        };\n\n    // Copy values from\n    if (source) {\n      const { name, refId, meta, fields } = source;\n      if (name) {\n        this.name = name;\n      }\n      if (refId) {\n        this.refId = refId;\n      }\n      if (meta) {\n        this.meta = meta;\n      }\n      if (fields) {\n        for (const f of fields) {\n          this.addField(f);\n        }\n      }\n    }\n\n    // Get Length to show up if you use spread\n    Object.defineProperty(this, 'length', {\n      enumerable: true,\n      get: () => {\n        return this.first.length;\n      },\n    });\n  }\n\n  // Defined for Vector interface\n  get length() {\n    return this.first.length;\n  }\n\n  addFieldFor(value: unknown, name?: string): Field {\n    return this.addField({\n      name: name || '', // Will be filled in\n      type: guessFieldTypeFromValue(value),\n    });\n  }\n\n  addField(f: Field | FieldDTO, startLength?: number): Field {\n    let buffer: any[] | undefined = undefined;\n\n    if (f.values) {\n      buffer = f.values;\n    }\n\n    let type = f.type;\n\n    if (!type && ('time' === f.name || 'Time' === f.name)) {\n      type = FieldType.time;\n    } else {\n      if (!type && buffer && buffer.length) {\n        type = guessFieldTypeFromValue(buffer[0]);\n      }\n      if (!type) {\n        type = FieldType.other;\n      }\n    }\n\n    // Make sure it has a name\n    let name = f.name;\n    if (!name) {\n      name = `Field ${this.fields.length + 1}`;\n    }\n\n    const field: Field = {\n      ...f,\n      name,\n      type,\n      config: f.config || {},\n      values: this.creator(buffer),\n    };\n\n    if (type === FieldType.other) {\n      type = guessFieldTypeForField(field);\n      if (type) {\n        field.type = type;\n      }\n    }\n\n    this.fields.push(field);\n    this.first = this.fields[0].values;\n\n    // Make sure the field starts with a given length\n    if (startLength) {\n      while (field.values.length < startLength) {\n        field.values.push(MISSING_VALUE);\n      }\n    } else {\n      this.validate();\n    }\n\n    return field;\n  }\n\n  validate() {\n    // Make sure all arrays are the same length\n    const length = this.fields.reduce((v: number, f) => {\n      return Math.max(v, f.values.length);\n    }, 0);\n\n    // Add empty elements until everything matches\n    for (const field of this.fields) {\n      while (field.values.length !== length) {\n        field.values.push(MISSING_VALUE);\n      }\n    }\n  }\n\n  private parsers: Map<Field, (v: string) => any> | undefined = undefined;\n\n  /**\n   * @deprecated unclear if this is actually used\n   */\n  setParser(field: Field, parser: (v: string) => any) {\n    if (!this.parsers) {\n      this.parsers = new Map<Field, (v: string) => any>();\n    }\n    this.parsers.set(field, parser);\n    return parser;\n  }\n\n  private parseValue(field: Field, v: string) {\n    let p = this.parsers?.get(field);\n    if (!p) {\n      p = this.setParser(field, makeFieldParser(v, field));\n    }\n    return p(v);\n  }\n\n  /**\n   * This will add each value to the corresponding column\n   */\n  appendRow(row: unknown[]) {\n    // Add any extra columns\n    for (let i = this.fields.length; i < row.length; i++) {\n      this.addField({\n        name: `Field ${i + 1}`,\n        type: guessFieldTypeFromValue(row[i]),\n      });\n    }\n\n    // The first line may change the field types\n    if (this.length < 1) {\n      for (let i = 0; i < this.fields.length; i++) {\n        const f = this.fields[i];\n        if (!f.type || f.type === FieldType.other) {\n          f.type = guessFieldTypeFromValue(row[i]);\n        }\n      }\n    }\n\n    for (let i = 0; i < this.fields.length; i++) {\n      const f = this.fields[i];\n      let v = row[i];\n      if (f.type !== FieldType.string && isString(v)) {\n        v = this.parseValue(f, v);\n      }\n      f.values.push(v);\n    }\n  }\n\n  /** support standard array push syntax */\n  push(...vals: T[]): number {\n    for (const v of vals) {\n      this.add(v);\n    }\n    return this.length;\n  }\n\n  reverse() {\n    for (const field of this.fields) {\n      field.values.reverse();\n    }\n    return this;\n  }\n\n  /**\n   * Add values from an object to corresponding fields. Similar to appendRow but does not create new fields.\n   */\n  add(value: T): void {\n    // Will add one value for every field\n    const obj = value as any;\n    for (const field of this.fields) {\n      let val = obj[field.name];\n\n      if (field.type !== FieldType.string && isString(val)) {\n        val = this.parseValue(field, val);\n      }\n\n      if (val === undefined) {\n        val = MISSING_VALUE;\n      }\n\n      field.values.push(val);\n    }\n  }\n\n  set(index: number, value: T) {\n    if (index > this.length) {\n      throw new Error('Unable to set value beyond current length');\n    }\n\n    const obj = (value as Record<string, unknown>) || {};\n    for (const field of this.fields) {\n      field.values[index] = obj[field.name];\n    }\n  }\n\n  /**\n   * Get an object with a property for each field in the DataFrame\n   */\n  get(idx: number): T {\n    const v: Record<string, unknown> = {};\n    for (const field of this.fields) {\n      v[field.name] = field.values[idx];\n    }\n    return v as T;\n  }\n\n  /**\n   * The simplified JSON values used in JSON.stringify()\n   */\n  toJSON() {\n    return toDataFrameDTO(this);\n  }\n}\n","import { KeyValue } from '../types/data';\nimport { Field } from '../types/dataFrame';\n\nexport interface Dimension<T = unknown> {\n  // Name of the dimension\n  name: string;\n  // Collection of fields representing dimension\n  // I.e. in 2d graph we have two dimension- X and Y axes. Both dimensions can represent\n  // multiple fields being drawn on the graph.\n  // For instance y-axis dimension is a collection of series value fields,\n  // and x-axis dimension is a collection of corresponding time fields\n  columns: Array<Field<T>>;\n}\n\nexport type Dimensions<T = unknown> = KeyValue<Dimension<T>>;\n\nexport const createDimension = <T>(name: string, columns: Array<Field<T>>): Dimension<T> => {\n  return {\n    name,\n    columns,\n  };\n};\n\nexport const getColumnsFromDimension = <T>(dimension: Dimension<T>) => {\n  return dimension.columns;\n};\nexport const getColumnFromDimension = <T>(dimension: Dimension<T>, column: number) => {\n  return dimension.columns[column];\n};\n\nexport const getValueFromDimension = <T>(dimension: Dimension<T>, column: number, row: number) => {\n  return dimension.columns[column].values[row];\n};\n\nexport const getAllValuesFromDimension = <T>(dimension: Dimension<T>, column: number, row: number) => {\n  return dimension.columns.map((c) => c.values[row]);\n};\n\nexport const getDimensionByName = <T>(dimensions: Dimensions<T>, name: string) => dimensions[name];\n","import { DataFrame, Field, FieldType } from '../types/dataFrame';\n\nimport { getTimeField } from './processDataFrame';\n\nconst MAX_TIME_COMPARISONS = 100;\n\nexport function isTimeSeriesFrame(frame: DataFrame) {\n  // If we have less than two frames we can't have a timeseries\n  if (frame.fields.length < 2) {\n    return false;\n  }\n\n  // Find a number field, as long as we have any number field this should work\n  const numberField = frame.fields.find((field) => field.type === FieldType.number);\n\n  // There are certain query types in which we will\n  // get times but they will be the same or not be\n  // in increasing order. To have a time-series the\n  // times need to be ordered from past to present\n  let timeFieldFound = false;\n  for (const field of frame.fields) {\n    if (isTimeSeriesField(field)) {\n      timeFieldFound = true;\n      break;\n    }\n  }\n\n  return timeFieldFound && numberField !== undefined;\n}\n\nexport function isTimeSeriesFrames(data: DataFrame[]) {\n  return !data.find((frame) => !isTimeSeriesFrame(frame));\n}\n\n/**\n * Determines if a field is a time field in ascending\n * order within the sampling range specified by\n * MAX_TIME_COMPARISONS\n *\n * @param field\n * @returns boolean\n */\nexport function isTimeSeriesField(field: Field) {\n  if (field.type !== FieldType.time) {\n    return false;\n  }\n\n  let greatestTime: number | null = null;\n  let testWindow = field.values.length > MAX_TIME_COMPARISONS ? MAX_TIME_COMPARISONS : field.values.length;\n\n  // Test up to the test window number of values\n  for (let i = 0; i < testWindow; i++) {\n    const time = field.values[i];\n\n    // Check to see if the current time is greater than\n    // the last time. If we get to the end then we\n    // have a time series otherwise we return false\n    if (greatestTime === null || (time !== null && time > greatestTime)) {\n      greatestTime = time;\n    } else {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Indicates if there is any time field in the array of data frames\n * @param data\n */\nexport function anySeriesWithTimeField(data: DataFrame[]) {\n  for (let i = 0; i < data.length; i++) {\n    const timeField = getTimeField(data[i]);\n    if (timeField.timeField !== undefined && timeField.timeIndex !== undefined) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Indicates if there is any time field in the data frame\n * @param data\n */\nexport function hasTimeField(data: DataFrame): boolean {\n  return data.fields.some((field) => field.type === FieldType.time);\n}\n\n/**\n * Get row id based on the meta.uniqueRowIdFields attribute.\n * @param dataFrame\n * @param rowIndex\n */\nexport function getRowUniqueId(dataFrame: DataFrame, rowIndex: number) {\n  if (dataFrame.meta?.uniqueRowIdFields === undefined) {\n    return undefined;\n  }\n  return dataFrame.meta.uniqueRowIdFields.map((fieldIndex) => dataFrame.fields[fieldIndex].values[rowIndex]).join('-');\n}\n\n/**\n * Simple helper to add values to a data frame. Doesn't do any validation so make sure you are adding the right types\n * of values.\n * @param dataFrame\n * @param row Either an array of values or an object with keys that match the field names.\n */\nexport function addRow(dataFrame: DataFrame, row: Record<string, unknown> | unknown[]) {\n  if (row instanceof Array) {\n    for (let i = 0; i < row.length; i++) {\n      dataFrame.fields[i].values.push(row[i]);\n    }\n  } else {\n    for (const field of dataFrame.fields) {\n      field.values.push(row[field.name]);\n    }\n  }\n  try {\n    dataFrame.length++;\n  } catch (e) {\n    // Unfortunate but even though DataFrame as interface defines length some implementation of DataFrame only have\n    // length getter. In that case it will throw and so we just skip and assume they defined a `getter` for length that\n    // does not need any external updating.\n  }\n}\n","import { isEqual } from 'lodash';\n\nimport { DataFrame } from '../types/dataFrame';\n\n/**\n * Returns true if both frames have the same name, fields, labels and configs.\n *\n * @example\n * To compare multiple frames use:\n * ```\n * compareArrayValues(a, b, framesHaveSameStructure);\n * ```\n * @beta\n */\nexport function compareDataFrameStructures(a: DataFrame, b: DataFrame, skipConfig?: boolean): boolean {\n  if (a === b) {\n    return true;\n  }\n\n  if (a?.fields?.length !== b?.fields?.length) {\n    return false;\n  }\n\n  if (a.name !== b.name) {\n    return false;\n  }\n\n  for (let i = 0; i < a.fields.length; i++) {\n    const fA = a.fields[i];\n    const fB = b.fields[i];\n\n    if (fA.type !== fB.type || fA.name !== fB.name) {\n      return false;\n    }\n\n    // Do not check the config fields\n    if (skipConfig) {\n      continue;\n    }\n\n    // Check if labels are different\n    if (fA.labels && fB.labels && !shallowCompare(fA.labels, fB.labels)) {\n      return false;\n    }\n\n    const cfgA = fA.config;\n    const cfgB = fB.config;\n\n    if (Object.keys(cfgA).length !== Object.keys(cfgB).length) {\n      return false;\n    }\n\n    let key: keyof typeof cfgA;\n    for (key in cfgA) {\n      if (!(key in cfgB)) {\n        return false;\n      }\n\n      if (key === 'interval') {\n        continue;\n      }\n\n      // Deep comparison on all object properties\n      if (!isEqual(cfgA[key], cfgB[key])) {\n        return false;\n      }\n    }\n  }\n\n  return true;\n}\n\n/**\n * Check if all values in two arrays match the compare function\n *\n * @beta\n */\nexport function compareArrayValues<T>(a: T[], b: T[], cmp: (a: T, b: T) => boolean) {\n  if (a === b) {\n    return true;\n  }\n  if (a?.length !== b?.length) {\n    return false;\n  }\n  for (let i = 0; i < a.length; i++) {\n    if (!cmp(a[i], b[i])) {\n      return false;\n    }\n  }\n  return true;\n}\n\ntype Cmp = (valA: unknown, valB: unknown) => boolean;\n\nconst defaultCmp: Cmp = (a, b) => a === b;\n\n/**\n * Checks if two objects are equal shallowly\n *\n * @beta\n */\nexport function shallowCompare<T extends {}>(a: T, b: T, cmp: Cmp = defaultCmp) {\n  if (a === b) {\n    return true;\n  }\n\n  if (Object.keys(a).length !== Object.keys(b).length) {\n    return false;\n  }\n\n  let key: keyof typeof a;\n  for (key in a) {\n    if (!cmp(a[key], b[key])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n","import { DataQuery } from '@grafana/schema';\n\n/**\n * Finds the next available refId for a query\n */\nexport const getNextRefId = (queries: DataQuery[]): string => {\n  for (let num = 0; ; num++) {\n    const refId = getRefId(num);\n    if (!queries.some((query) => query.refId === refId)) {\n      return refId;\n    }\n  }\n};\n\nfunction getRefId(num: number): string {\n  const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\n  if (num < letters.length) {\n    return letters[num];\n  } else {\n    return getRefId(Math.floor(num / letters.length) - 1) + letters[num % letters.length];\n  }\n}\n","export interface TextMatch {\n  text: string;\n  start: number;\n  length: number;\n  end: number;\n}\n\n/**\n * Adapt findMatchesInText for react-highlight-words findChunks handler.\n * See https://github.com/bvaughn/react-highlight-words#props\n */\nexport function findHighlightChunksInText({\n  searchWords,\n  textToHighlight,\n}: {\n  searchWords: Array<string | RegExp>;\n  textToHighlight: string;\n}) {\n  const chunks: TextMatch[] = [];\n  for (const term of searchWords) {\n    if (typeof term === 'string') {\n      chunks.push(...findMatchesInText(textToHighlight, term));\n    }\n  }\n  return chunks;\n}\n\nconst cleanNeedle = (needle: string): string => {\n  return needle.replace(/[[{(][\\w,.\\/:;<=>?:*+]+$/, '');\n};\n\n/**\n * Returns a list of substring regexp matches.\n */\nexport function findMatchesInText(haystack: string, needle: string): TextMatch[] {\n  // Empty search can send re.exec() into infinite loop, exit early\n  if (!haystack || !needle) {\n    return [];\n  }\n\n  const matches: TextMatch[] = [];\n  const { cleaned, flags } = parseFlags(cleanNeedle(needle));\n  let regexp: RegExp;\n\n  try {\n    regexp = new RegExp(`(?:${cleaned})`, flags);\n  } catch (error) {\n    return matches;\n  }\n\n  haystack.replace(regexp, (substring, ...rest) => {\n    if (substring) {\n      const offset = rest[rest.length - 2];\n      matches.push({\n        text: substring,\n        start: offset,\n        length: substring.length,\n        end: offset + substring.length,\n      });\n    }\n    return '';\n  });\n\n  return matches;\n}\n\nconst CLEAR_FLAG = '-';\nconst FLAGS_REGEXP = /\\(\\?([ims-]+)\\)/g;\n\n/**\n * Converts any mode modifiers in the text to the Javascript equivalent flag\n */\nexport function parseFlags(text: string): { cleaned: string; flags: string } {\n  const flags: Set<string> = new Set(['g']);\n\n  const cleaned = text.replace(FLAGS_REGEXP, (str, group) => {\n    const clearAll = group.startsWith(CLEAR_FLAG);\n\n    for (let i = 0; i < group.length; ++i) {\n      const flag = group.charAt(i);\n      if (clearAll || group.charAt(i - 1) === CLEAR_FLAG) {\n        flags.delete(flag);\n      } else if (flag !== CLEAR_FLAG) {\n        flags.add(flag);\n      }\n    }\n    return ''; // Remove flag from text\n  });\n\n  return {\n    cleaned: cleaned,\n    flags: Array.from(flags).join(''),\n  };\n}\n","import { sanitizeUrl as braintreeSanitizeUrl } from '@braintree/sanitize-url';\nimport DOMPurify from 'dompurify';\nimport * as xss from 'xss';\n\nconst XSSWL = Object.keys(xss.whiteList).reduce<xss.IWhiteList>((acc, element) => {\n  acc[element] = xss.whiteList[element]?.concat(['class', 'style']);\n  return acc;\n}, {});\n\n// Add iframe tags to XSSWL.\n// We don't allow the sandbox attribute, since it can be overridden, instead we add it below.\nXSSWL.iframe = ['src', 'width', 'height'];\n\nconst sanitizeTextPanelWhitelist = new xss.FilterXSS({\n  // Add sandbox attribute to iframe tags if an attribute is allowed.\n  onTagAttr: function (tag, name, value, isWhiteAttr) {\n    if (tag === 'iframe') {\n      return isWhiteAttr\n        ? ` ${name}=\"${xss.escapeAttrValue(sanitizeUrl(value))}\" sandbox credentialless referrerpolicy=no-referrer`\n        : '';\n    }\n    return;\n  },\n  whiteList: XSSWL,\n  css: {\n    whiteList: {\n      ...xss.getDefaultCSSWhiteList(),\n      'flex-direction': true,\n      'flex-wrap': true,\n      'flex-basis': true,\n      'flex-grow': true,\n      'flex-shrink': true,\n      'flex-flow': true,\n      gap: true,\n      order: true,\n      'justify-content': true,\n      'justify-items': true,\n      'justify-self': true,\n      'align-items': true,\n      'align-content': true,\n      'align-self': true,\n    },\n  },\n});\n\n/**\n * Return a sanitized string that is going to be rendered in the browser to prevent XSS attacks.\n * Note that sanitized tags will be removed, such as \"<script>\".\n * We don't allow form or input elements.\n */\nexport function sanitize(unsanitizedString: string): string {\n  try {\n    return DOMPurify.sanitize(unsanitizedString, {\n      USE_PROFILES: { html: true },\n      FORBID_TAGS: ['form', 'input'],\n    });\n  } catch (error) {\n    console.error('String could not be sanitized', unsanitizedString);\n    return escapeHtml(unsanitizedString);\n  }\n}\n\nexport function sanitizeTrustedTypesRSS(unsanitizedString: string): TrustedHTML {\n  return DOMPurify.sanitize(unsanitizedString, {\n    RETURN_TRUSTED_TYPE: true,\n    ADD_ATTR: ['xmlns:atom', 'version', 'property', 'content'],\n    ADD_TAGS: ['rss', 'meta', 'channel', 'title', 'link', 'description', 'atom:link', 'item', 'pubDate', 'guid'],\n    PARSER_MEDIA_TYPE: 'application/xhtml+xml',\n  });\n}\n\nexport function sanitizeTrustedTypes(unsanitizedString: string): TrustedHTML {\n  return DOMPurify.sanitize(unsanitizedString, { RETURN_TRUSTED_TYPE: true });\n}\n\n/**\n * Returns string safe from XSS attacks to be used in the Text panel plugin.\n *\n * Even though we allow the style-attribute, there's still default filtering applied to it\n * Info: https://github.com/leizongmin/js-xss#customize-css-filter\n * Whitelist: https://github.com/leizongmin/js-css-filter/blob/master/lib/default.js\n */\nexport function sanitizeTextPanelContent(unsanitizedString: string): string {\n  try {\n    return sanitizeTextPanelWhitelist.process(unsanitizedString);\n  } catch (error) {\n    console.error('String could not be sanitized', unsanitizedString);\n    return 'Text string could not be sanitized';\n  }\n}\n\n// Returns sanitized SVG, free from XSS attacks to be used when rendering SVG content.\nexport function sanitizeSVGContent(unsanitizedString: string): string {\n  return DOMPurify.sanitize(unsanitizedString, { USE_PROFILES: { svg: true, svgFilters: true } });\n}\n\n// Return a sanitized URL, free from XSS attacks, such as javascript:alert(1)\nexport function sanitizeUrl(url: string): string {\n  return braintreeSanitizeUrl(url);\n}\n\n// Returns true if the string contains ANSI color codes.\nexport function hasAnsiCodes(input: string): boolean {\n  return /\\u001b\\[\\d{1,2}m/.test(input);\n}\n\n// Returns a string with HTML entities escaped.\nexport function escapeHtml(str: string): string {\n  return String(str)\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/'/g, '&#39;')\n    .replace(/\"/g, '&quot;');\n}\n\nexport const textUtil = {\n  escapeHtml,\n  hasAnsiCodes,\n  sanitize,\n  sanitizeTextPanelContent,\n  sanitizeUrl,\n  sanitizeSVGContent,\n  sanitizeTrustedTypes,\n  sanitizeTrustedTypesRSS,\n};\n","import { marked, MarkedOptions } from 'marked';\nimport { mangle } from 'marked-mangle';\n\nimport { sanitizeTextPanelContent } from './sanitize';\n\nlet hasInitialized = false;\n\nexport interface RenderMarkdownOptions {\n  noSanitize?: boolean;\n  breaks?: boolean;\n}\n\nconst markdownOptions: MarkedOptions = {\n  pedantic: false,\n  gfm: true,\n  breaks: false,\n};\n\nexport function renderMarkdown(str?: string, options?: RenderMarkdownOptions): string {\n  if (!hasInitialized) {\n    marked.use(mangle());\n    marked.setOptions({ ...markdownOptions });\n    hasInitialized = true;\n  }\n\n  let opts = undefined;\n  if (options?.breaks) {\n    opts = {\n      ...markdownOptions,\n      breaks: true,\n    };\n  }\n  const html = marked(str || '', opts);\n\n  // `marked()` returns a promise if using any extensions that require async processing.\n  // we don't use any async extensions, but there is no way for typescript to know this, so we need to check the type.\n  if (typeof html !== 'string') {\n    throw new Error('Failed to process markdown synchronously.');\n  }\n\n  if (options?.noSanitize) {\n    return html;\n  }\n\n  return sanitizeTextPanelContent(html);\n}\n\nexport function renderTextPanelMarkdown(str?: string, options?: RenderMarkdownOptions): string {\n  if (!hasInitialized) {\n    marked.use(mangle());\n    marked.setOptions({ ...markdownOptions });\n    hasInitialized = true;\n  }\n\n  const html = marked(str || '');\n\n  // `marked()` returns a promise if using any extensions that require async processing.\n  // we don't use any async extensions, but there is no way for typescript to know this, so we need to check the type.\n  if (typeof html !== 'string') {\n    throw new Error('Failed to process markdown synchronously.');\n  }\n\n  if (options?.noSanitize) {\n    return html;\n  }\n\n  return sanitizeTextPanelContent(html);\n}\n","import { AppEvent } from './types';\n\nconst typeList: Set<string> = new Set();\n\nexport function eventFactory<T = undefined>(name: string): AppEvent<T> {\n  if (typeList.has(name)) {\n    throw new Error(`There is already an event defined with type '${name}'`);\n  }\n\n  typeList.add(name);\n  return { name };\n}\n","import { Unsubscribable, Observable } from 'rxjs';\n\n/**\n * @alpha\n * internal interface\n */\nexport interface BusEvent {\n  readonly type: string;\n  readonly payload?: any;\n  origin?: EventBus;\n}\n\n/**\n * @alpha\n * Base event type\n */\nexport abstract class BusEventBase implements BusEvent {\n  readonly type: string;\n  readonly payload?: any;\n  readonly origin?: EventBus;\n\n  /** @internal */\n  tags?: Set<string>;\n\n  constructor() {\n    //@ts-ignore\n    this.type = this.__proto__.constructor.type;\n  }\n\n  /**\n   * @internal\n   * Tag event for finer-grained filtering in subscribers\n   */\n  setTags(tags: string[]) {\n    this.tags = new Set(tags);\n    return this;\n  }\n}\n\n/**\n * @alpha\n * Base event type with payload\n */\nexport abstract class BusEventWithPayload<T> extends BusEventBase {\n  readonly payload: T;\n\n  constructor(payload: T) {\n    super();\n    this.payload = payload;\n  }\n}\n\n/*\n * Interface for an event type constructor\n */\nexport interface BusEventType<T extends BusEvent> {\n  type: string;\n  new (...args: any[]): T;\n}\n\n/**\n * @alpha\n * Event callback/handler type\n */\nexport interface BusEventHandler<T extends BusEvent> {\n  (event: T): void;\n}\n\n/**\n * @alpha\n * Main minimal interface\n */\nexport interface EventFilterOptions {\n  onlyLocal: boolean;\n}\n\n/**\n * @alpha\n * Main minimal interface\n */\nexport interface EventBus {\n  /**\n   * Publish single event\n   */\n  publish<T extends BusEvent>(event: T): void;\n\n  /**\n   * Get observable of events\n   */\n  getStream<T extends BusEvent>(eventType: BusEventType<T>): Observable<T>;\n\n  /**\n   * Subscribe to an event stream\n   *\n   * This function is a wrapper around the `getStream(...)` function\n   */\n  subscribe<T extends BusEvent>(eventType: BusEventType<T>, handler: BusEventHandler<T>): Unsubscribable;\n\n  /**\n   * Remove all event subscriptions\n   */\n  removeAllListeners(): void;\n\n  /**\n   * Returns a new bus scoped that knows where it exists in a heiarchy\n   *\n   * @internal -- This is included for internal use only should not be used directly\n   */\n  newScopedBus(key: string, filter: EventFilterOptions): EventBus;\n}\n\n/**\n * @public\n * @deprecated event type\n */\nexport interface AppEvent<T> {\n  readonly name: string;\n  payload?: T;\n}\n\n/** @public */\nexport interface LegacyEmitter {\n  /**\n   * @deprecated use $emit\n   */\n  emit<T>(event: AppEvent<T> | string, payload?: T): void;\n\n  /**\n   * @deprecated use $on\n   */\n  on<T>(event: AppEvent<T> | string, handler: LegacyEventHandler<T>): void;\n\n  /**\n   * @deprecated use $on\n   */\n  off<T>(event: AppEvent<T> | string, handler: (payload?: T) => void): void;\n}\n\n/** @public */\nexport interface LegacyEventHandler<T> {\n  (payload: T): void;\n  wrapper?: (event: BusEvent) => void;\n}\n\n/** @alpha */\nexport interface EventBusExtended extends EventBus, LegacyEmitter {}\n","import EventEmitter from 'eventemitter3';\nimport { Unsubscribable, Observable, Subscriber } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport {\n  EventBus,\n  LegacyEmitter,\n  BusEventHandler,\n  BusEventType,\n  LegacyEventHandler,\n  BusEvent,\n  AppEvent,\n  EventFilterOptions,\n} from './types';\n\n/**\n * @alpha\n */\nexport class EventBusSrv implements EventBus, LegacyEmitter {\n  private emitter: EventEmitter;\n  private subscribers = new Map<Function, Subscriber<BusEvent>>();\n\n  constructor() {\n    this.emitter = new EventEmitter();\n  }\n\n  publish<T extends BusEvent>(event: T): void {\n    this.emitter.emit(event.type, event);\n  }\n\n  subscribe<T extends BusEvent>(typeFilter: BusEventType<T>, handler: BusEventHandler<T>): Unsubscribable {\n    return this.getStream(typeFilter).subscribe({ next: handler });\n  }\n\n  getStream<T extends BusEvent = BusEvent>(eventType: BusEventType<T>): Observable<T> {\n    return new Observable<T>((observer) => {\n      const handler = (event: T) => {\n        observer.next(event);\n      };\n\n      this.emitter.on(eventType.type, handler);\n      this.subscribers.set(handler, observer);\n\n      return () => {\n        this.emitter.off(eventType.type, handler);\n        this.subscribers.delete(handler);\n      };\n    });\n  }\n\n  newScopedBus(key: string, filter?: EventFilterOptions): ScopedEventBus {\n    return new ScopedEventBus([key], this, filter);\n  }\n\n  /**\n   * Legacy functions\n   */\n  emit<T>(event: AppEvent<T> | string, payload?: T): void {\n    // console.log(`Deprecated emitter function used (emit), use $emit`);\n\n    if (typeof event === 'string') {\n      this.emitter.emit(event, { type: event, payload });\n    } else {\n      this.emitter.emit(event.name, { type: event.name, payload });\n    }\n  }\n\n  on<T>(event: AppEvent<T> | string, handler: LegacyEventHandler<T>) {\n    // console.log(`Deprecated emitter function used (on), use $on`);\n\n    // need this wrapper to make old events compatible with old handlers\n    handler.wrapper = (emittedEvent: BusEvent) => {\n      handler(emittedEvent.payload);\n    };\n\n    if (typeof event === 'string') {\n      this.emitter.on(event, handler.wrapper);\n    } else {\n      this.emitter.on(event.name, handler.wrapper);\n    }\n  }\n\n  off<T>(event: AppEvent<T> | string, handler: LegacyEventHandler<T>) {\n    if (typeof event === 'string') {\n      this.emitter.off(event, handler.wrapper);\n      return;\n    }\n\n    this.emitter.off(event.name, handler.wrapper);\n  }\n\n  removeAllListeners() {\n    this.emitter.removeAllListeners();\n    for (const [key, sub] of this.subscribers) {\n      sub.complete();\n      this.subscribers.delete(key);\n    }\n  }\n}\n\n/**\n * Wraps EventBus and adds a source to help with identifying if a subscriber should react to the event or not.\n */\nclass ScopedEventBus implements EventBus {\n  // will be mutated by panel runners\n  filterConfig: EventFilterOptions;\n\n  // The path is not yet exposed, but can be used to indicate nested groups and support faster filtering\n  constructor(\n    public path: string[],\n    private eventBus: EventBus,\n    filter?: EventFilterOptions\n  ) {\n    this.filterConfig = filter ?? { onlyLocal: false };\n  }\n\n  publish<T extends BusEvent>(event: T): void {\n    if (!event.origin) {\n      event.origin = this;\n    }\n    this.eventBus.publish(event);\n  }\n\n  filter<T extends BusEvent>(event: T) {\n    if (this.filterConfig.onlyLocal) {\n      return event.origin === this;\n    }\n    return true;\n  }\n\n  getStream<T extends BusEvent>(eventType: BusEventType<T>): Observable<T> {\n    return this.eventBus.getStream(eventType).pipe(filter(this.filter.bind(this)));\n  }\n\n  // syntax sugar\n  subscribe<T extends BusEvent>(typeFilter: BusEventType<T>, handler: BusEventHandler<T>): Unsubscribable {\n    return this.getStream(typeFilter).subscribe({ next: handler });\n  }\n\n  removeAllListeners(): void {\n    this.eventBus.removeAllListeners();\n  }\n\n  /**\n   * Creates a nested event bus structure\n   */\n  newScopedBus(key: string, filter: EventFilterOptions): EventBus {\n    return new ScopedEventBus([...this.path, key], this, filter);\n  }\n}\n","import { AnnotationEvent } from '../types/annotations';\nimport { DataFrame } from '../types/dataFrame';\n\nimport { BusEventBase, BusEventWithPayload } from './types';\n\n/**\n * When hovering over an element this will identify\n *\n * For performance reasons, this object will usually be mutated between updates.  This\n * will avoid creating new objects for events that fire frequently (ie each mouse pixel)\n *\n * @alpha\n */\nexport interface DataHoverPayload {\n  data?: DataFrame; // source data\n  rowIndex?: number; // the hover row\n  columnIndex?: number; // the hover column\n  dataId?: string; // identifying string to correlate data between publishers and subscribers\n\n  // When dragging, this will capture the point when the mouse was down\n  point: Record<string, number | null>; // { time: 5678, lengthft: 456 }  // each axis|scale gets a value\n  down?: Record<string, number | null>;\n}\n\n/** @alpha */\nexport class DataHoverEvent extends BusEventWithPayload<DataHoverPayload> {\n  static type = 'data-hover';\n}\n\n/** @alpha */\nexport class DataHoverClearEvent extends BusEventBase {\n  static type = 'data-hover-clear';\n}\n\n/** @alpha */\nexport class DataSelectEvent extends BusEventWithPayload<DataHoverPayload> {\n  static type = 'data-select';\n}\n\n/** @alpha */\nexport class AnnotationChangeEvent extends BusEventWithPayload<Partial<AnnotationEvent>> {\n  static type = 'annotation-event';\n}\n\n// Loaded the first time a dashboard is loaded (not on every render)\nexport type DashboardLoadedEventPayload<T> = {\n  dashboardId: string; // eeep, this should be UID\n  orgId?: number;\n  userId?: number;\n  grafanaVersion?: string;\n  queries: Record<string, T[]>;\n};\n\n/** @alpha */\nexport class DashboardLoadedEvent<T> extends BusEventWithPayload<DashboardLoadedEventPayload<T>> {\n  static type = 'dashboard-loaded';\n}\nexport class DataSourceUpdatedSuccessfully extends BusEventBase {\n  static type = 'datasource-updated-successfully';\n}\nexport class DataSourceTestSucceeded extends BusEventBase {\n  static type = 'datasource-test-succeeded';\n}\n\nexport class DataSourceTestFailed extends BusEventBase {\n  static type = 'datasource-test-failed';\n}\n\nexport class SetPanelAttentionEvent extends BusEventWithPayload<{ panelId: string | number }> {\n  static type = 'set-panel-attention';\n}\n","// Code based on Material-UI\n// https://github.com/mui-org/material-ui/blob/1b096070faf102281f8e3c4f9b2bf50acf91f412/packages/material-ui/src/styles/colorManipulator.js#L97\n// MIT License Copyright (c) 2014 Call-Em-All\n\nimport tinycolor from 'tinycolor2';\n\n/**\n * Returns a number whose value is limited to the given range.\n * @param value The value to be clamped\n * @param min The lower boundary of the output range\n * @param max The upper boundary of the output range\n * @returns A number in the range [min, max]\n * @beta\n */\nfunction clamp(value: number, min = 0, max = 1) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (value < min || value > max) {\n      console.error(`The value provided ${value} is out of range [${min}, ${max}].`);\n    }\n  }\n\n  return Math.min(Math.max(min, value), max);\n}\n\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n * @param color - Hex color, i.e. #nnn or #nnnnnn\n * @returns A CSS rgb color string\n * @beta\n */\nexport function hexToRgb(color: string) {\n  color = color.slice(1);\n\n  const re = new RegExp(`.{1,${color.length >= 6 ? 2 : 1}}`, 'g');\n  let result = color.match(re);\n\n  if (!result) {\n    return '';\n  }\n\n  let colors = Array.from(result);\n\n  if (colors[0].length === 1) {\n    colors = colors.map((n) => n + n);\n  }\n\n  return colors\n    ? `rgb${colors.length === 4 ? 'a' : ''}(${colors\n        .map((n, index) => {\n          return index < 3 ? parseInt(n, 16) : Math.round((parseInt(n, 16) / 255) * 1000) / 1000;\n        })\n        .join(', ')})`\n    : '';\n}\n\nfunction intToHex(int: number) {\n  const hex = int.toString(16);\n  return hex.length === 1 ? `0${hex}` : hex;\n}\n\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n * @param color - RGB color, i.e. rgb(n, n, n)\n * @returns A CSS rgb color string, i.e. #nnnnnn\n * @beta\n */\nexport function rgbToHex(color: string) {\n  // Idempotent\n  if (color.indexOf('#') === 0) {\n    return color;\n  }\n\n  const { values } = decomposeColor(color);\n  return `#${values.map((n: number) => intToHex(n)).join('')}`;\n}\n\n/**\n * Converts a color to hex6 format if there is no alpha, hex8 if there is.\n * @param color - Hex, RGB, HSL color\n * @returns A hex color string, i.e. #ff0000 or #ff0000ff\n */\nexport function asHexString(color: string): string {\n  if (color[0] === '#') {\n    return color;\n  }\n  const tColor = tinycolor(color);\n  return tColor.getAlpha() === 1 ? tColor.toHexString() : tColor.toHex8String();\n}\n\n/**\n * Converts a color to rgb string\n */\nexport function asRgbString(color: string) {\n  if (color.startsWith('rgb')) {\n    return color;\n  }\n\n  return tinycolor(color).toRgbString();\n}\n\n/**\n * Converts a color from hsl format to rgb format.\n * @param color - HSL color values\n * @returns rgb color values\n * @beta\n */\nexport function hslToRgb(color: string | DecomposeColor) {\n  const parts = decomposeColor(color);\n  const { values } = parts;\n  const h = values[0];\n  const s = values[1] / 100;\n  const l = values[2] / 100;\n  const a = s * Math.min(l, 1 - l);\n  const f = (n: number, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n\n  let type = 'rgb';\n  const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n\n  if (parts.type === 'hsla') {\n    type += 'a';\n    rgb.push(values[3]);\n  }\n\n  return recomposeColor({ type, values: rgb });\n}\n\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n * @param color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n * @beta\n */\nexport function decomposeColor(color: string | DecomposeColor): DecomposeColor {\n  // Idempotent\n  if (typeof color !== 'string') {\n    return color;\n  }\n\n  if (color.charAt(0) === '#') {\n    return decomposeColor(hexToRgb(color));\n  }\n\n  const marker = color.indexOf('(');\n  const type = color.substring(0, marker);\n\n  if (['rgb', 'rgba', 'hsl', 'hsla', 'color'].indexOf(type) === -1) {\n    throw new Error(\n      `Unsupported '${color}' color. The following formats are supported: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()`\n    );\n  }\n\n  let values: any = color.substring(marker + 1, color.length - 1);\n  let colorSpace;\n\n  if (type === 'color') {\n    values = values.split(' ');\n    colorSpace = values.shift();\n    if (values.length === 4 && values[3].charAt(0) === '/') {\n      values[3] = values[3].slice(1);\n    }\n    if (['srgb', 'display-p3', 'a98-rgb', 'prophoto-rgb', 'rec-2020'].indexOf(colorSpace) === -1) {\n      throw new Error(\n        `Unsupported ${colorSpace} color space. The following color spaces are supported: srgb, display-p3, a98-rgb, prophoto-rgb, rec-2020.`\n      );\n    }\n  } else {\n    values = values.split(',');\n  }\n\n  values = values.map((value: string) => parseFloat(value));\n  return { type, values, colorSpace };\n}\n\n/**\n * Converts a color object with type and values to a string.\n * @param {object} color - Decomposed color\n * @param color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns A CSS color string\n * @beta\n */\nexport function recomposeColor(color: DecomposeColor) {\n  const { type, colorSpace } = color;\n  let values = color.values;\n\n  if (type.indexOf('rgb') !== -1) {\n    // Only convert the first 3 values to int (i.e. not alpha)\n    values = values.map((n: string, i: number) => (i < 3 ? parseInt(n, 10) : n));\n  } else if (type.indexOf('hsl') !== -1) {\n    values[1] = `${values[1]}%`;\n    values[2] = `${values[2]}%`;\n  }\n  if (type.indexOf('color') !== -1) {\n    values = `${colorSpace} ${values.join(' ')}`;\n  } else {\n    values = `${values.join(', ')}`;\n  }\n\n  return `${type}(${values})`;\n}\n\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param canvas - A CSS color that alpha based backgrounds blends into\n * @returns A contrast ratio value in the range 0 - 21.\n * @beta\n */\nexport function getContrastRatio(foreground: string, background: string, canvas?: string) {\n  const lumA = getLuminance(foreground);\n  const lumB = getLuminance(background, canvas);\n  return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param background - CSS color that needs to be take in to account to calculate luminance for colors with opacity\n * @returns The relative brightness of the color in the range 0 - 1\n * @beta\n */\nexport function getLuminance(color: string, background?: string) {\n  const parts = decomposeColor(color);\n\n  let rgb = parts.type === 'hsl' ? decomposeColor(hslToRgb(color)).values : parts.values;\n\n  if (background && parts.type === 'rgba') {\n    const backgroundParts = decomposeColor(background);\n    const alpha = rgb[3];\n    rgb[0] = rgb[0] * alpha + backgroundParts.values[0] * (1 - alpha);\n    rgb[1] = rgb[1] * alpha + backgroundParts.values[1] * (1 - alpha);\n    rgb[2] = rgb[2] * alpha + backgroundParts.values[2] * (1 - alpha);\n  }\n\n  const rgbNumbers = rgb.map((val: any) => {\n    if (parts.type !== 'color') {\n      val /= 255; // normalized\n    }\n    return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;\n  });\n\n  // Truncate at 3 digits\n  return Number((0.2126 * rgbNumbers[0] + 0.7152 * rgbNumbers[1] + 0.0722 * rgbNumbers[2]).toFixed(3));\n}\n\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n * @param color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param coefficient=0.15 - multiplier in the range 0 - 1\n * @returns A CSS color string. Hex input values are returned as rgb\n * @beta\n */\nexport function emphasize(color: string, coefficient = 0.15) {\n  return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\n\n/**\n * Set the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n * @param color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param value - value to set the alpha channel to in the range 0 - 1\n * @returns A CSS color string. Hex input values are returned as rgb\n * @beta\n */\nexport function alpha(color: string, value: number) {\n  if (color === '') {\n    return '#000000';\n  }\n\n  value = clamp(value);\n\n  // hex 3, hex 4 (w/alpha), hex 6, hex 8 (w/alpha)\n  if (color[0] === '#') {\n    if (color.length === 9) {\n      color = color.substring(0, 7);\n    } else if (color.length <= 5) {\n      let c = '#';\n      for (let i = 1; i < 4; i++) {\n        c += color[i] + color[i];\n      }\n      color = c;\n    }\n\n    return (\n      color +\n      Math.round(value * 255)\n        .toString(16)\n        .padStart(2, '0')\n    );\n  }\n  // rgb(, hsl(\n  else if (color[3] === '(') {\n    // rgb() and hsl() do not require the \"a\" suffix to accept alpha values in modern browsers:\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/rgb()#accepts_alpha_value\n    return color.replace(')', `, ${value})`);\n  }\n  // rgba(, hsla(\n  else if (color[4] === '(') {\n    return color.substring(0, color.lastIndexOf(',')) + `, ${value})`;\n  }\n\n  const parts = decomposeColor(color);\n\n  if (parts.type === 'color') {\n    parts.values[3] = `/${value}`;\n  } else {\n    parts.values[3] = value;\n  }\n\n  return recomposeColor(parts);\n}\n\n/**\n * Darkens a color.\n * @param color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param coefficient - multiplier in the range 0 - 1\n * @returns A CSS color string. Hex input values are returned as rgb\n * @beta\n */\nexport function darken(color: string, coefficient: number) {\n  const parts = decomposeColor(color);\n  coefficient = clamp(coefficient);\n\n  if (parts.type.indexOf('hsl') !== -1) {\n    parts.values[2] *= 1 - coefficient;\n  } else if (parts.type.indexOf('rgb') !== -1 || parts.type.indexOf('color') !== -1) {\n    for (let i = 0; i < 3; i += 1) {\n      parts.values[i] *= 1 - coefficient;\n    }\n  }\n  return recomposeColor(parts);\n}\n\n/**\n * Lightens a color.\n * @param color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param coefficient - multiplier in the range 0 - 1\n * @returns A CSS color string. Hex input values are returned as rgb\n * @beta\n */\nexport function lighten(color: string, coefficient: number) {\n  const parts = decomposeColor(color);\n  coefficient = clamp(coefficient);\n\n  if (parts.type.indexOf('hsl') !== -1) {\n    parts.values[2] += (100 - parts.values[2]) * coefficient;\n  } else if (parts.type.indexOf('rgb') !== -1) {\n    for (let i = 0; i < 3; i += 1) {\n      parts.values[i] += (255 - parts.values[i]) * coefficient;\n    }\n  } else if (parts.type.indexOf('color') !== -1) {\n    for (let i = 0; i < 3; i += 1) {\n      parts.values[i] += (1 - parts.values[i]) * coefficient;\n    }\n  }\n\n  return recomposeColor(parts);\n}\n\ninterface DecomposeColor {\n  type: string;\n  values: any;\n  colorSpace?: string;\n}\n\nexport const colorManipulator = {\n  clamp,\n  hexToRgb,\n  rgbToHex,\n  asHexString,\n  asRgbString,\n  hslToRgb,\n  decomposeColor,\n  recomposeColor,\n  getContrastRatio,\n  getLuminance,\n  emphasize,\n  alpha,\n  darken,\n  lighten,\n};\n","/**\n * @public\n */\nexport enum FieldColorModeId {\n  Thresholds = 'thresholds',\n  PaletteClassic = 'palette-classic',\n  PaletteClassicByName = 'palette-classic-by-name',\n  PaletteSaturated = 'palette-saturated',\n  ContinuousGrYlRd = 'continuous-GrYlRd',\n  ContinuousRdYlGr = 'continuous-RdYlGr',\n  ContinuousBlYlRd = 'continuous-BlYlRd',\n  ContinuousYlRd = 'continuous-YlRd',\n  ContinuousBlPu = 'continuous-BlPu',\n  ContinuousYlBl = 'continuous-YlBl',\n  ContinuousBlues = 'continuous-blues',\n  ContinuousReds = 'continuous-reds',\n  ContinuousGreens = 'continuous-greens',\n  ContinuousPurples = 'continuous-purples',\n  Fixed = 'fixed',\n  Shades = 'shades',\n}\n\n/**\n * @public\n */\nexport interface FieldColor {\n  /** The main color scheme mode */\n  mode: FieldColorModeId | string;\n  /** Stores the fixed color value if mode is fixed */\n  fixedColor?: string;\n  /** Some visualizations need to know how to assign a series color from by value color schemes */\n  seriesBy?: FieldColorSeriesByMode;\n}\n\n/**\n * @beta\n */\nexport type FieldColorSeriesByMode = 'min' | 'max' | 'last';\n\nexport const FALLBACK_COLOR = '#808080';\n","export interface Threshold {\n  value: number;\n  color: string;\n  /**\n   *  Warning, Error, LowLow, Low, OK, High, HighHigh etc\n   */\n  state?: string;\n}\n\n/**\n *  Display mode\n */\nexport enum ThresholdsMode {\n  Absolute = 'absolute',\n  /**\n   *  between 0 and 1 (based on min/max)\n   */\n  Percentage = 'percentage',\n}\n\n/**\n *  Config that is passed to the ThresholdsEditor\n */\nexport interface ThresholdsConfig {\n  mode: ThresholdsMode;\n\n  /**\n   *  Must be sorted by 'value', first value is always -Infinity\n   */\n  steps: Threshold[];\n}\n","import { Field } from '../types/dataFrame';\nimport { FALLBACK_COLOR } from '../types/fieldColor';\nimport { Threshold, ThresholdsMode } from '../types/thresholds';\n\nexport const fallBackThreshold: Threshold = { value: 0, color: FALLBACK_COLOR };\n\nexport function getActiveThreshold(value: number, thresholds: Threshold[] | undefined): Threshold {\n  if (!thresholds || thresholds.length === 0) {\n    return fallBackThreshold;\n  }\n\n  let active = thresholds[0];\n\n  for (const threshold of thresholds) {\n    if (value >= threshold.value) {\n      active = threshold;\n    } else {\n      break;\n    }\n  }\n\n  return active;\n}\n\nexport function getActiveThresholdForValue(field: Field, value: number, percent: number): Threshold {\n  const { thresholds } = field.config;\n\n  if (thresholds?.mode === ThresholdsMode.Percentage) {\n    return getActiveThreshold(percent * 100, thresholds?.steps);\n  }\n\n  return getActiveThreshold(value, thresholds?.steps);\n}\n\n/**\n * Sorts the thresholds\n */\nexport function sortThresholds(thresholds: Threshold[]) {\n  return thresholds.sort((t1, t2) => t1.value - t2.value);\n}\n","import { isNumber } from 'lodash';\n\nimport { GrafanaTheme2 } from '../themes/types';\nimport { reduceField, ReducerID } from '../transformations/fieldReducer';\nimport { Field, FieldConfig, FieldType, NumericRange } from '../types/dataFrame';\nimport { Threshold } from '../types/thresholds';\n\nimport { getFieldColorModeForField } from './fieldColor';\nimport { getActiveThresholdForValue } from './thresholds';\n\nexport interface ColorScaleValue {\n  percent: number; // 0-1\n  threshold: Threshold | undefined;\n  color: string;\n}\n\nexport type ScaleCalculator = (value: number) => ColorScaleValue;\n\nexport function getScaleCalculator(field: Field, theme: GrafanaTheme2): ScaleCalculator {\n  if (field.type === FieldType.boolean) {\n    return getBooleanScaleCalculator(field, theme);\n  }\n\n  const mode = getFieldColorModeForField(field);\n  const getColor = mode.getCalculator(field, theme);\n  const info = field.state?.range ?? getMinMaxAndDelta(field);\n\n  return (value: number) => {\n    let percent = 0;\n\n    if (value !== -Infinity) {\n      percent = (value - info.min!) / info.delta;\n\n      if (Number.isNaN(percent)) {\n        percent = 0;\n      }\n    }\n\n    const threshold = getActiveThresholdForValue(field, value, percent);\n\n    return {\n      percent,\n      threshold,\n      color: getColor(value, percent, threshold),\n    };\n  };\n}\n\nfunction getBooleanScaleCalculator(field: Field, theme: GrafanaTheme2): ScaleCalculator {\n  const trueValue: ColorScaleValue = {\n    color: theme.visualization.getColorByName('green'),\n    percent: 1,\n    threshold: undefined,\n  };\n\n  const falseValue: ColorScaleValue = {\n    color: theme.visualization.getColorByName('red'),\n    percent: 0,\n    threshold: undefined,\n  };\n\n  const mode = getFieldColorModeForField(field);\n  if (mode.isContinuous && mode.getColors) {\n    const colors = mode.getColors(theme);\n    trueValue.color = colors[colors.length - 1];\n    falseValue.color = colors[0];\n  }\n\n  return (value: number) => {\n    return Boolean(value) ? trueValue : falseValue;\n  };\n}\n\nexport function getMinMaxAndDelta(field: Field): NumericRange {\n  if (field.type !== FieldType.number) {\n    return { min: 0, max: 100, delta: 100 };\n  }\n\n  // Calculate min/max if required\n  let min = field.config.min;\n  let max = field.config.max;\n\n  if (!isNumber(min) || !isNumber(max)) {\n    if (field.values && field.values.length) {\n      const stats = reduceField({ field, reducers: [ReducerID.min, ReducerID.max] });\n      if (!isNumber(min)) {\n        min = stats[ReducerID.min];\n      }\n      if (!isNumber(max)) {\n        max = stats[ReducerID.max];\n      }\n    } else {\n      min = 0;\n      max = 100;\n    }\n  }\n\n  return {\n    min,\n    max,\n    delta: max! - min!,\n  };\n}\n\n/**\n * @internal\n */\nexport function getFieldConfigWithMinMax(field: Field, local?: boolean): FieldConfig {\n  const { config } = field;\n  let { min, max } = config;\n\n  if (isNumber(min) && isNumber(max)) {\n    return config;\n  }\n\n  if (local || !field.state?.range) {\n    return { ...config, ...getMinMaxAndDelta(field) };\n  }\n\n  return { ...config, ...field.state.range };\n}\n","import { interpolateRgbBasis } from 'd3-interpolate';\nimport stringHash from 'string-hash';\nimport tinycolor from 'tinycolor2';\n\nimport { getContrastRatio } from '../themes/colorManipulator';\nimport { GrafanaTheme2 } from '../themes/types';\nimport { reduceField } from '../transformations/fieldReducer';\nimport { Field } from '../types/dataFrame';\nimport { FALLBACK_COLOR, FieldColorModeId } from '../types/fieldColor';\nimport { Threshold } from '../types/thresholds';\nimport { Registry, RegistryItem } from '../utils/Registry';\n\nimport { getScaleCalculator, ColorScaleValue } from './scale';\nimport { fallBackThreshold } from './thresholds';\n\n/** @beta */\nexport type FieldValueColorCalculator = (value: number, percent: number, Threshold?: Threshold) => string;\n\n/** @beta */\nexport interface FieldColorMode extends RegistryItem {\n  getCalculator: (field: Field, theme: GrafanaTheme2) => FieldValueColorCalculator;\n  getColors?: (theme: GrafanaTheme2) => string[];\n  isContinuous?: boolean;\n  isByValue?: boolean;\n  useSeriesName?: boolean;\n}\n\n/** @internal */\nexport const fieldColorModeRegistry = new Registry<FieldColorMode>(() => {\n  return [\n    {\n      id: FieldColorModeId.Fixed,\n      name: 'Single color',\n      description: 'Set a specific color',\n      getCalculator: getFixedColor,\n    },\n    {\n      id: FieldColorModeId.Shades,\n      name: 'Shades of a color',\n      description: 'Select shades of a specific color',\n      getCalculator: getShadedColor,\n    },\n    {\n      id: FieldColorModeId.Thresholds,\n      name: 'From thresholds',\n      isByValue: true,\n      description: 'Derive colors from thresholds',\n      getCalculator: (_field, theme) => {\n        return (_value, _percent, threshold) => {\n          const thresholdSafe = threshold ?? fallBackThreshold;\n          return theme.visualization.getColorByName(thresholdSafe.color);\n        };\n      },\n    },\n    new FieldColorSchemeMode({\n      id: FieldColorModeId.PaletteClassic,\n      name: 'Classic palette',\n      isContinuous: false,\n      isByValue: false,\n      getColors: (theme: GrafanaTheme2) => {\n        return theme.visualization.palette;\n      },\n    }),\n    new FieldColorSchemeMode({\n      id: FieldColorModeId.PaletteClassicByName,\n      name: 'Classic palette (by series name)',\n      isContinuous: false,\n      isByValue: false,\n      useSeriesName: true,\n      getColors: (theme: GrafanaTheme2) => {\n        return theme.visualization.palette.filter(\n          (color) =>\n            getContrastRatio(theme.visualization.getColorByName(color), theme.colors.background.primary) >=\n            theme.colors.contrastThreshold\n        );\n      },\n    }),\n    new FieldColorSchemeMode({\n      id: FieldColorModeId.ContinuousGrYlRd,\n      name: 'Green-Yellow-Red',\n      isContinuous: true,\n      isByValue: true,\n      getColors: (theme: GrafanaTheme2) => ['green', 'yellow', 'red'],\n    }),\n    new FieldColorSchemeMode({\n      id: FieldColorModeId.ContinuousRdYlGr,\n      name: 'Red-Yellow-Green',\n      isContinuous: true,\n      isByValue: true,\n      getColors: (theme: GrafanaTheme2) => ['red', 'yellow', 'green'],\n    }),\n    new FieldColorSchemeMode({\n      id: FieldColorModeId.ContinuousBlYlRd,\n      name: 'Blue-Yellow-Red',\n      isContinuous: true,\n      isByValue: true,\n      getColors: (theme: GrafanaTheme2) => ['dark-blue', 'super-light-yellow', 'dark-red'],\n    }),\n    new FieldColorSchemeMode({\n      id: FieldColorModeId.ContinuousYlRd,\n      name: 'Yellow-Red',\n      isContinuous: true,\n      isByValue: true,\n      getColors: (theme: GrafanaTheme2) => ['super-light-yellow', 'dark-red'],\n    }),\n    new FieldColorSchemeMode({\n      id: FieldColorModeId.ContinuousBlPu,\n      name: 'Blue-Purple',\n      isContinuous: true,\n      isByValue: true,\n      getColors: (theme: GrafanaTheme2) => ['blue', 'purple'],\n    }),\n    new FieldColorSchemeMode({\n      id: FieldColorModeId.ContinuousYlBl,\n      name: 'Yellow-Blue',\n      isContinuous: true,\n      isByValue: true,\n      getColors: (theme: GrafanaTheme2) => ['super-light-yellow', 'dark-blue'],\n    }),\n    new FieldColorSchemeMode({\n      id: FieldColorModeId.ContinuousBlues,\n      name: 'Blues',\n      isContinuous: true,\n      isByValue: true,\n      getColors: (theme: GrafanaTheme2) => ['panel-bg', 'dark-blue'],\n    }),\n    new FieldColorSchemeMode({\n      id: FieldColorModeId.ContinuousReds,\n      name: 'Reds',\n      isContinuous: true,\n      isByValue: true,\n      getColors: (theme: GrafanaTheme2) => ['panel-bg', 'dark-red'],\n    }),\n    new FieldColorSchemeMode({\n      id: FieldColorModeId.ContinuousGreens,\n      name: 'Greens',\n      isContinuous: true,\n      isByValue: true,\n      getColors: (theme: GrafanaTheme2) => ['panel-bg', 'dark-green'],\n    }),\n    new FieldColorSchemeMode({\n      id: FieldColorModeId.ContinuousPurples,\n      name: 'Purples',\n      isContinuous: true,\n      isByValue: true,\n      getColors: (theme: GrafanaTheme2) => ['panel-bg', 'dark-purple'],\n    }),\n  ];\n});\n\ninterface FieldColorSchemeModeOptions {\n  id: FieldColorModeId;\n  name: string;\n  description?: string;\n  getColors: (theme: GrafanaTheme2) => string[];\n  isContinuous: boolean;\n  isByValue: boolean;\n  useSeriesName?: boolean;\n}\n\nexport class FieldColorSchemeMode implements FieldColorMode {\n  id: FieldColorModeId;\n  name: string;\n  description?: string;\n  isContinuous: boolean;\n  isByValue: boolean;\n  useSeriesName?: boolean;\n  colorCache?: string[];\n  colorCacheTheme?: GrafanaTheme2;\n  interpolator?: (value: number) => string;\n  getNamedColors?: (theme: GrafanaTheme2) => string[];\n\n  constructor(options: FieldColorSchemeModeOptions) {\n    this.id = options.id;\n    this.name = options.name;\n    this.description = options.description;\n    this.getNamedColors = options.getColors;\n    this.isContinuous = options.isContinuous;\n    this.isByValue = options.isByValue;\n    this.useSeriesName = options.useSeriesName;\n  }\n\n  getColors(theme: GrafanaTheme2): string[] {\n    if (!this.getNamedColors) {\n      return [];\n    }\n\n    if (this.colorCache && this.colorCacheTheme === theme) {\n      return this.colorCache;\n    }\n\n    this.colorCache = this.getNamedColors(theme).map(theme.visualization.getColorByName);\n    this.colorCacheTheme = theme;\n\n    return this.colorCache;\n  }\n\n  private getInterpolator() {\n    if (!this.interpolator) {\n      this.interpolator = interpolateRgbBasis(this.colorCache!);\n    }\n\n    return this.interpolator;\n  }\n\n  getCalculator(field: Field, theme: GrafanaTheme2) {\n    const colors = this.getColors(theme);\n\n    if (this.isByValue) {\n      if (this.isContinuous) {\n        return (_: number, percent: number, _threshold?: Threshold) => {\n          return this.getInterpolator()(percent);\n        };\n      } else {\n        return (_: number, percent: number, _threshold?: Threshold) => {\n          return colors[percent * (colors.length - 1)];\n        };\n      }\n    } else if (this.useSeriesName) {\n      return (_: number, _percent: number, _threshold?: Threshold) => {\n        return colors[Math.abs(stringHash(field.state?.displayName ?? field.name)) % colors.length];\n      };\n    } else {\n      return (_: number, _percent: number, _threshold?: Threshold) => {\n        const seriesIndex = field.state?.seriesIndex ?? 0;\n        return colors[seriesIndex % colors.length];\n      };\n    }\n  }\n}\n\n/** @beta */\nexport function getFieldColorModeForField(field: Field): FieldColorMode {\n  return fieldColorModeRegistry.get(field.config.color?.mode ?? FieldColorModeId.Thresholds);\n}\n\n/** @beta */\nexport function getFieldColorMode(mode?: FieldColorModeId | string): FieldColorMode {\n  return fieldColorModeRegistry.get(mode ?? FieldColorModeId.Thresholds);\n}\n\n/**\n * @alpha\n * Function that will return a series color for any given color mode. If the color mode is a by value color\n * mode it will use the field.config.color.seriesBy property to figure out which value to use\n */\nexport function getFieldSeriesColor(field: Field, theme: GrafanaTheme2): ColorScaleValue {\n  const mode = getFieldColorModeForField(field);\n\n  if (!mode.isByValue) {\n    return {\n      color: mode.getCalculator(field, theme)(0, 0),\n      threshold: fallBackThreshold,\n      percent: 1,\n    };\n  }\n\n  const scale = getScaleCalculator(field, theme);\n  const stat = field.config.color?.seriesBy ?? 'last';\n  const calcs = reduceField({ field, reducers: [stat] });\n  const value = calcs[stat] ?? 0;\n\n  return scale(value);\n}\n\nfunction getFixedColor(field: Field, theme: GrafanaTheme2) {\n  return () => {\n    return theme.visualization.getColorByName(field.config.color?.fixedColor ?? FALLBACK_COLOR);\n  };\n}\n\nfunction getShadedColor(field: Field, theme: GrafanaTheme2) {\n  return () => {\n    const baseColorString: string = theme.visualization.getColorByName(\n      field.config.color?.fixedColor ?? FALLBACK_COLOR\n    );\n\n    const colors: string[] = [\n      baseColorString, // start with base color\n    ];\n\n    const shadesCount = 6;\n    const maxHueSpin = 10; // hue spin, max is 360\n    const maxDarken = 35; // max 100%\n    const maxBrighten = 35; // max 100%\n\n    for (let i = 1; i < shadesCount; i++) {\n      // push alternating darker and brighter shades\n      colors.push(\n        tinycolor(baseColorString)\n          .spin((i / shadesCount) * maxHueSpin)\n          .brighten((i / shadesCount) * maxDarken)\n          .toHexString()\n      );\n      colors.push(\n        tinycolor(baseColorString)\n          .spin(-(i / shadesCount) * maxHueSpin)\n          .darken((i / shadesCount) * maxBrighten)\n          .toHexString()\n      );\n    }\n\n    const seriesIndex = field.state?.seriesIndex ?? 0;\n    return colors[seriesIndex % colors.length];\n  };\n}\n","import { FieldConfigPropertyItem } from '../types/fieldOverrides';\nimport { Registry } from '../utils/Registry';\n\nexport class FieldConfigOptionsRegistry extends Registry<FieldConfigPropertyItem> {}\n","/**\n * @preserve jquery-param (c) 2015 KNOWLEDGECODE | MIT\n */\n\nimport { isDateTime } from '../datetime/moment_wrapper';\nimport { ExploreUrlState, URLRange } from '../types/explore';\nimport { RawTimeRange } from '../types/time';\n\n/**\n * Type to represent the value of a single query variable.\n *\n * @public\n */\nexport type UrlQueryValue = string | number | boolean | string[] | number[] | boolean[] | undefined | null;\n\n/**\n * Type to represent the values parsed from the query string.\n *\n * @public\n */\nexport type UrlQueryMap = Record<string, UrlQueryValue>;\n\nfunction renderUrl(path: string, query: UrlQueryMap | undefined): string {\n  if (query && Object.keys(query).length > 0) {\n    path += '?' + toUrlParams(query);\n  }\n  return path;\n}\n\nfunction encodeURIComponentAsAngularJS(val: EncodeURIComponentParams, pctEncodeSpaces?: boolean) {\n  return encodeURIComponent(val)\n    .replace(/%40/gi, '@')\n    .replace(/%3A/gi, ':')\n    .replace(/%24/g, '$')\n    .replace(/%2C/gi, ',')\n    .replace(/%3B/gi, ';')\n    .replace(/%20/g, pctEncodeSpaces ? '%20' : '+')\n    .replace(/[!'()*]/g, function (c) {\n      return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n    });\n}\n\ntype EncodeURIComponentParams = Parameters<typeof encodeURIComponent>[0];\n/**\n *  Encodes URL parameters in the style of AngularJS.\n *  Use `serializeParams` to encode parameters using `encodeURIComponent` instead.\n */\nfunction toUrlParams(a: any, encodeAsAngularJS = true) {\n  const s: any[] = [];\n  const rbracket = /\\[\\]$/;\n\n  const encodingFunction = encodeAsAngularJS\n    ? (value: EncodeURIComponentParams, pctEncodeSpaces?: boolean) =>\n        encodeURIComponentAsAngularJS(value, pctEncodeSpaces)\n    : (value: EncodeURIComponentParams, _: boolean) => encodeURIComponent(value);\n\n  const isArray = (obj: unknown) => {\n    return Object.prototype.toString.call(obj) === '[object Array]';\n  };\n\n  const add = (k: string, v: any) => {\n    v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v;\n    if (typeof v !== 'boolean') {\n      s[s.length] = encodingFunction(k, true) + '=' + encodingFunction(v, true);\n    } else {\n      const valueQueryPart = v ? '' : '=' + encodingFunction('false', true);\n      s[s.length] = encodingFunction(k, true) + valueQueryPart;\n    }\n  };\n\n  const buildParams = (prefix: string, obj: any) => {\n    let i, len, key;\n\n    if (prefix) {\n      if (isArray(obj)) {\n        for (i = 0, len = obj.length; i < len; i++) {\n          if (rbracket.test(prefix)) {\n            add(prefix, obj[i]);\n          } else {\n            buildParams(prefix, obj[i]);\n          }\n        }\n      } else if (obj && String(obj) === '[object Object]') {\n        for (key in obj) {\n          buildParams(prefix + '[' + key + ']', obj[key]);\n        }\n      } else {\n        add(prefix, obj);\n      }\n    } else if (isArray(obj)) {\n      for (i = 0, len = obj.length; i < len; i++) {\n        add(obj[i].name, obj[i].value);\n      }\n    } else {\n      for (key in obj) {\n        buildParams(key, obj[key]);\n      }\n    }\n    return s;\n  };\n\n  return buildParams('', a).join('&');\n}\n\n/**\n * Converts params into a URL-encoded query string.\n *\n * @param params data to serialize\n * @returns A URL-encoded string representing the provided data.\n */\nfunction serializeParams(params: unknown): string {\n  return toUrlParams(params, false);\n}\n\nfunction appendQueryToUrl(url: string, stringToAppend: string) {\n  if (stringToAppend !== undefined && stringToAppend !== null && stringToAppend !== '') {\n    const pos = url.indexOf('?');\n    if (pos !== -1) {\n      if (url.length - pos > 1) {\n        url += '&';\n      }\n    } else {\n      url += '?';\n    }\n    url += stringToAppend;\n  }\n\n  return url;\n}\n\n/**\n * Return search part (as object) of current url\n */\nfunction getUrlSearchParams(): UrlQueryMap {\n  const search = window.location.search.substring(1);\n  const searchParamsSegments = search.split('&');\n  const params: UrlQueryMap = {};\n  for (const p of searchParamsSegments) {\n    const keyValuePair = p.split('=');\n    if (keyValuePair.length > 1) {\n      // key-value param\n      const key = decodeURIComponent(keyValuePair[0]);\n      const value = decodeURIComponent(keyValuePair[1]);\n      if (key in params) {\n        params[key] = [...(params[key] as any[]), value];\n      } else {\n        params[key] = [value];\n      }\n    } else if (keyValuePair.length === 1) {\n      // boolean param\n      const key = decodeURIComponent(keyValuePair[0]);\n      params[key] = true;\n    }\n  }\n  return params;\n}\n\n/**\n * Parses an escaped url query string into key-value pairs.\n * Attribution: Code dervived from https://github.com/angular/angular.js/master/src/Angular.js#L1396\n * @returns {Object.<string,boolean|Array>}\n */\nexport function parseKeyValue(keyValue: string) {\n  const obj: any = {};\n  const parts = (keyValue || '').split('&');\n\n  for (let keyValue of parts) {\n    let splitPoint: number | undefined;\n    let key: string | undefined;\n    let val: string | undefined | boolean;\n\n    if (keyValue) {\n      key = keyValue = keyValue.replace(/\\+/g, '%20');\n      splitPoint = keyValue.indexOf('=');\n\n      if (splitPoint !== -1) {\n        key = keyValue.substring(0, splitPoint);\n        val = keyValue.substring(splitPoint + 1);\n      }\n\n      key = tryDecodeURIComponent(key);\n\n      if (key !== undefined) {\n        val = val !== undefined ? tryDecodeURIComponent(val as string) : true;\n\n        let parsedVal: any;\n        if (typeof val === 'string' && val !== '') {\n          parsedVal = val === 'true' || val === 'false' ? val === 'true' : val;\n        } else {\n          parsedVal = val;\n        }\n\n        if (!obj.hasOwnProperty(key)) {\n          obj[key] = isNaN(parsedVal) ? val : parsedVal;\n        } else if (Array.isArray(obj[key])) {\n          obj[key].push(val);\n        } else {\n          obj[key] = [obj[key], isNaN(parsedVal) ? val : parsedVal];\n        }\n      }\n    }\n  }\n\n  return obj;\n}\n\nfunction tryDecodeURIComponent(value: string): string | undefined {\n  try {\n    return decodeURIComponent(value);\n  } catch (e) {\n    return undefined;\n  }\n}\n\nexport const urlUtil = {\n  renderUrl,\n  toUrlParams,\n  appendQueryToUrl,\n  getUrlSearchParams,\n  parseKeyValue,\n  serializeParams,\n};\n\n/**\n * Create an string that is used in URL to represent the Explore state. This is basically just a stringified json\n * that is used as a state of a single Explore pane so it does not represent full Explore URL so some properties\n * may be omitted (they will be filled in with default values).\n *\n * @param urlState\n * @param compact this parameter is deprecated and will be removed in a future release.\n */\nexport function serializeStateToUrlParam(urlState: Partial<ExploreUrlState>, compact?: boolean): string {\n  if (compact !== undefined) {\n    console.warn('`compact` parameter is deprecated and will be removed in a future release');\n  }\n  return JSON.stringify(urlState);\n}\n\n/**\n * Converts RawTimeRange to a string that is stored in the URL\n * - relative - stays as it is (e.g. \"now\")\n * - absolute - converted to ms\n */\nexport const toURLRange = (range: RawTimeRange): URLRange => {\n  let from = range.from;\n  if (isDateTime(from)) {\n    from = from.valueOf().toString();\n  }\n\n  let to = range.to;\n  if (isDateTime(to)) {\n    to = to.valueOf().toString();\n  }\n\n  return {\n    from,\n    to,\n  };\n};\n","import { Location } from 'history';\n\nimport { textUtil } from '../text/sanitize';\nimport { ScopedVars } from '../types/ScopedVars';\nimport { GrafanaConfig } from '../types/config';\nimport { RawTimeRange } from '../types/time';\n\nimport { UrlQueryMap, urlUtil } from './url';\n\nlet grafanaConfig = { appSubUrl: '' } as GrafanaConfig;\nlet getTimeRangeUrlParams: () => RawTimeRange;\nlet getVariablesUrlParams: (scopedVars?: ScopedVars) => UrlQueryMap;\n\nconst maybeParseUrl = (input: string): URL | undefined => {\n  try {\n    return new URL(input);\n  } catch {\n    return undefined;\n  }\n};\n\n/**\n *\n * @param url\n * @internal\n */\nconst stripBaseFromUrl = (urlOrPath: string): string => {\n  // Will only return a URL object if the input is actually a valid URL\n  const parsedUrl = maybeParseUrl(urlOrPath);\n  if (parsedUrl) {\n    // If the input is a URL, and for a different origin that we're on, just bail\n    // and return it. There's no need to strip anything from it\n    if (parsedUrl.origin !== window.location.origin) {\n      return urlOrPath;\n    }\n  }\n\n  const appSubUrl = grafanaConfig.appSubUrl ?? '';\n  const stripExtraChars = appSubUrl.endsWith('/') ? 1 : 0;\n  const isAbsoluteUrl = urlOrPath.startsWith('http');\n\n  let segmentToStrip = appSubUrl;\n\n  if (!urlOrPath.startsWith('/') || isAbsoluteUrl) {\n    segmentToStrip = `${window.location.origin}${appSubUrl}`;\n  }\n\n  // Check if the segment is either exactly the same as the url\n  // or followed by a '/' so it does not replace incorrect similarly named segments\n  // i.e. /grafana should not replace /grafanadashboards\n  return urlOrPath.length > 0 && (urlOrPath.indexOf(segmentToStrip + '/') === 0 || urlOrPath === segmentToStrip)\n    ? urlOrPath.slice(segmentToStrip.length - stripExtraChars)\n    : urlOrPath;\n};\n\n/**\n *\n * @param url\n * @internal\n */\nconst assureBaseUrl = (url: string): string => {\n  if (url.startsWith('/')) {\n    return `${grafanaConfig.appSubUrl}${stripBaseFromUrl(url)}`;\n  }\n  return url;\n};\n\n/**\n *\n * @param location\n * @param searchParamsToUpdate\n * @returns\n */\nconst getUrlForPartial = (location: Location, searchParamsToUpdate: UrlQueryMap) => {\n  const searchParams = urlUtil.parseKeyValue(\n    location.search.startsWith('?') ? location.search.substring(1) : location.search\n  );\n  for (const key in searchParamsToUpdate) {\n    // removing params with null | undefined\n    if (searchParamsToUpdate[key] === null || searchParamsToUpdate[key] === undefined) {\n      delete searchParams[key];\n    } else {\n      searchParams[key] = searchParamsToUpdate[key];\n    }\n  }\n  return assureBaseUrl(urlUtil.renderUrl(location.pathname, searchParams));\n};\n\n/**\n * @deprecated use `getUrlForPartial` instead\n * Update URL or search param string `init` with new params `partial`.\n */\nconst updateSearchParams = (init: string, partial: string) => {\n  const urlSearchParams = new URLSearchParams(partial);\n\n  // Check if full URL\n  try {\n    const curURL = new URL(init);\n    urlSearchParams.forEach((val, key) => curURL.searchParams.set(key, val));\n    return curURL.href;\n  } catch {\n    // assume search params\n    const newSearchParams = new URLSearchParams(init);\n    urlSearchParams.forEach((v, k) => {\n      newSearchParams.set(k, v);\n    });\n    return '?' + newSearchParams.toString();\n  }\n};\n\ninterface LocationUtilDependencies {\n  config: GrafanaConfig;\n  getTimeRangeForUrl: () => RawTimeRange;\n  getVariablesUrlParams: (scopedVars?: ScopedVars) => UrlQueryMap;\n}\n\nexport const locationUtil = {\n  /**\n   *\n   * @param getConfig\n   * @param getAllVariableValuesForUrl\n   * @param getTimeRangeForUrl\n   * @internal\n   */\n  initialize: (dependencies: LocationUtilDependencies) => {\n    grafanaConfig = dependencies.config;\n    getTimeRangeUrlParams = dependencies.getTimeRangeForUrl;\n    getVariablesUrlParams = dependencies.getVariablesUrlParams;\n  },\n  stripBaseFromUrl,\n  assureBaseUrl,\n  updateSearchParams,\n  getTimeRangeUrlParams: () => {\n    if (!getTimeRangeUrlParams) {\n      return null;\n    }\n    return urlUtil.toUrlParams(getTimeRangeUrlParams());\n  },\n  getVariablesUrlParams: (scopedVars?: ScopedVars) => {\n    if (!getVariablesUrlParams) {\n      return null;\n    }\n    const params = getVariablesUrlParams(scopedVars);\n    return urlUtil.toUrlParams(params);\n  },\n  getUrlForPartial,\n  processUrl: (url: string) => {\n    return grafanaConfig.disableSanitizeHtml ? url : textUtil.sanitizeUrl(url);\n  },\n};\n","import { ScopedVars } from '../types/ScopedVars';\nimport { Field } from '../types/dataFrame';\nimport { DataLink, InternalDataLink, LinkModel } from '../types/dataLink';\nimport { SplitOpen, ExplorePanelsState } from '../types/explore';\nimport { InterpolateFunction } from '../types/panel';\nimport { DataQuery } from '../types/query';\nimport { TimeRange } from '../types/time';\n\nimport { locationUtil } from './location';\nimport { serializeStateToUrlParam, toURLRange } from './url';\n\nexport const DataLinkBuiltInVars = {\n  keepTime: '__url_time_range',\n  timeRangeFrom: '__from',\n  timeRangeTo: '__to',\n  includeVars: '__all_variables',\n  seriesName: '__series.name',\n  fieldName: '__field.name',\n  valueTime: '__value.time',\n  valueNumeric: '__value.numeric',\n  valueText: '__value.text',\n  valueRaw: '__value.raw',\n  // name of the calculation represented by the value\n  valueCalc: '__value.calc',\n};\n\n// We inject these because we cannot import them directly as they reside inside grafana main package.\nexport type LinkToExploreOptions = {\n  link: DataLink;\n  scopedVars: ScopedVars;\n  range?: TimeRange;\n  field: Field;\n  internalLink: InternalDataLink;\n  onClickFn?: SplitOpen;\n  replaceVariables: InterpolateFunction;\n};\n\nexport function mapInternalLinkToExplore(options: LinkToExploreOptions): LinkModel<Field> {\n  const { onClickFn, replaceVariables, link, scopedVars, range, field, internalLink } = options;\n\n  const query =\n    typeof link.internal?.query === 'function'\n      ? link.internal.query({ replaceVariables, scopedVars })\n      : internalLink.query;\n  const interpolatedQuery = interpolateObject(query, scopedVars, replaceVariables);\n  const interpolatedPanelsState = interpolateObject(link.internal?.panelsState, scopedVars, replaceVariables);\n  const interpolatedCorrelationData = interpolateObject(link.meta?.correlationData, scopedVars, replaceVariables);\n  const title = link.title ? link.title : internalLink.datasourceName;\n\n  return {\n    title: replaceVariables(title, scopedVars),\n    // In this case this is meant to be internal link (opens split view by default) the href will also points\n    // to explore but this way you can open it in new tab.\n    href: generateInternalHref(internalLink.datasourceUid, interpolatedQuery, range, interpolatedPanelsState),\n    onClick: onClickFn\n      ? (event) => {\n          // Explore data links can be displayed not only in DataLinkButton but it can be used by the consumer in\n          // other way, for example MenuItem. We want to provide the URL (for opening in the new tab as well as\n          // the onClick to open the split view).\n          if (event.preventDefault) {\n            event.preventDefault();\n          }\n\n          onClickFn({\n            datasourceUid: internalLink.datasourceUid,\n            queries: [interpolatedQuery],\n            panelsState: interpolatedPanelsState,\n            correlationHelperData: interpolatedCorrelationData,\n            range,\n          });\n        }\n      : undefined,\n    target: link?.targetBlank ? '_blank' : '_self',\n    origin: field,\n  };\n}\n\n/**\n * Generates href for internal derived field link.\n */\nfunction generateInternalHref<T extends DataQuery>(\n  datasourceUid: string,\n  query: T,\n  range?: TimeRange,\n  panelsState?: ExplorePanelsState\n): string {\n  return locationUtil.assureBaseUrl(\n    `/explore?left=${encodeURIComponent(\n      serializeStateToUrlParam({\n        // @deprecated mapInternalLinkToExplore required passing range. Some consumers to generate the URL\n        // with defaults pass range as `{} as any`. This is why we need to check for `range?.raw` not just\n        // `range ? ...` here. This behavior will be marked as deprecated in #72498\n        ...(range?.raw ? { range: toURLRange(range.raw) } : {}),\n        datasource: datasourceUid,\n        queries: [query],\n        panelsState: panelsState,\n      })\n    )}`\n  );\n}\n\nfunction interpolateObject<T>(\n  obj: T | undefined,\n  scopedVars: ScopedVars,\n  replaceVariables: InterpolateFunction\n): T | undefined {\n  if (!obj) {\n    return obj;\n  }\n  if (typeof obj === 'string') {\n    // @ts-ignore this is complaining we are returning string, but we are checking if obj is a string so should be fine.\n    return replaceVariables(obj, scopedVars);\n  }\n  const copy = JSON.parse(JSON.stringify(obj));\n  return interpolateObjectRecursive(copy, scopedVars, replaceVariables);\n}\n\nfunction interpolateObjectRecursive<T extends Object>(\n  obj: T,\n  scopedVars: ScopedVars,\n  replaceVariables: InterpolateFunction\n): T {\n  for (const k of Object.keys(obj)) {\n    // Honestly not sure how to type this to make TS happy.\n    // @ts-ignore\n    if (typeof obj[k] === 'string') {\n      // @ts-ignore\n      obj[k] = replaceVariables(obj[k], scopedVars);\n      // @ts-ignore\n    } else if (typeof obj[k] === 'object' && obj[k] !== null) {\n      // @ts-ignore\n      obj[k] = interpolateObjectRecursive(obj[k], scopedVars, replaceVariables);\n    }\n  }\n  return obj;\n}\n","import {\n  TimeZone as SchemaTimeZone,\n  TimeZoneBrowser as SchemaTimeZoneBrowser,\n  TimeZoneUtc as SchemaTimeZoneUtc,\n  defaultTimeZone,\n} from '@grafana/schema';\n\nimport { dateTime, DateTime } from '../datetime/moment_wrapper';\n\nexport interface RawTimeRange {\n  from: DateTime | string;\n  to: DateTime | string;\n}\n\nexport interface TimeRange {\n  from: DateTime;\n  to: DateTime;\n  raw: RawTimeRange;\n}\n\n/**\n * Type to describe relative time to now in seconds.\n * @internal\n */\nexport interface RelativeTimeRange {\n  from: number;\n  to: number;\n}\n\nexport interface AbsoluteTimeRange {\n  from: number;\n  to: number;\n}\n\nexport interface IntervalValues {\n  interval: string; // 10s,5m\n  intervalMs: number;\n}\n\nexport interface TimeOption {\n  from: string;\n  to: string;\n  display: string;\n  invalid?: boolean;\n  section?: number;\n}\n\n/** @deprecated use TimeZone from schema  */\nexport type TimeZone = SchemaTimeZone;\n\n/** @deprecated use TimeZoneBrowser from schema  */\nexport type TimeZoneBrowser = SchemaTimeZoneBrowser;\n\n/** @deprecated use TimeZoneUtc from schema  */\nexport type TimeZoneUtc = SchemaTimeZoneUtc;\n\n/** @deprecated use defaultTimeZone from schema  */\nexport const DefaultTimeZone = defaultTimeZone;\n\nexport interface TimeOptions {\n  [key: string]: TimeOption[];\n}\n\nexport type TimeFragment = string | DateTime;\n\nexport const TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';\n\nexport function getDefaultTimeRange(): TimeRange {\n  const now = dateTime();\n\n  return {\n    from: dateTime(now).subtract(6, 'hour'),\n    to: now,\n    raw: { from: 'now-6h', to: 'now' },\n  };\n}\n\n/**\n * Returns the default relative time range.\n *\n * @public\n */\nexport function getDefaultRelativeTimeRange(): RelativeTimeRange {\n  return {\n    from: 600,\n    to: 0,\n  };\n}\n\n/**\n * Simple helper to quickly create a TimeRange object either from string representations of a dateTime or directly\n * DateTime objects.\n */\nexport function makeTimeRange(from: DateTime | string, to: DateTime | string): TimeRange {\n  const fromDateTime = typeof from === 'string' ? dateTime(from) : from;\n  const toDateTime = typeof to === 'string' ? dateTime(to) : to;\n  return {\n    from: fromDateTime,\n    to: toDateTime,\n    raw: {\n      from: fromDateTime,\n      to: toDateTime,\n    },\n  };\n}\n","import { isEmpty } from 'lodash';\n\nimport { TimeZone, DefaultTimeZone } from '../types/time';\n\n/**\n * Used for helper functions handling time zones.\n *\n * @public\n */\nexport interface TimeZoneOptions {\n  /**\n   * Specify this if you want to override the timeZone used when parsing or formatting\n   * a date and time value. If no timeZone is set, the default timeZone for the current\n   * user is used.\n   */\n  timeZone?: TimeZone;\n}\n\n/**\n * The type describing date and time options. Used for all the helper functions\n * available to parse or format date and time values.\n *\n * @public\n */\nexport interface DateTimeOptions extends TimeZoneOptions {\n  /**\n   * Specify a {@link https://momentjs.com/docs/#/displaying/format | momentjs} format to\n   * use a custom formatting pattern or parsing pattern. If no format is set,\n   * then system configured default format is used.\n   */\n  format?: string;\n}\n\n/**\n * The type to describe the time zone resolver function that will be used to access\n * the default time zone of a user.\n *\n * @public\n */\nexport type TimeZoneResolver = () => TimeZone | undefined;\n\nlet defaultTimeZoneResolver: TimeZoneResolver = () => DefaultTimeZone;\n\n/**\n * Used by Grafana internals to set the {@link TimeZoneResolver} to access the current\n * user timeZone.\n *\n * @internal\n */\nexport const setTimeZoneResolver = (resolver: TimeZoneResolver) => {\n  defaultTimeZoneResolver = resolver ?? defaultTimeZoneResolver;\n};\n\n/**\n * Used to get the current selected time zone. If a valid time zone is passed in the\n * options it will be returned. If no valid time zone is passed either the time zone\n * configured for the user account will be returned or the default for Grafana.\n *\n * @public\n */\nexport const getTimeZone = <T extends TimeZoneOptions>(options?: T): TimeZone => {\n  if (options?.timeZone && !isEmpty(options.timeZone)) {\n    return options.timeZone;\n  }\n  return defaultTimeZoneResolver() ?? DefaultTimeZone;\n};\n","import { isDate } from 'lodash';\n\nimport { TimeZone } from '@grafana/schema';\n\nimport {\n  DateTime,\n  dateTime,\n  dateTimeAsMoment,\n  dateTimeForTimeZone,\n  DateTimeInput,\n  DurationUnit,\n  isDateTime,\n  ISO_8601,\n} from './moment_wrapper';\n\nconst units: string[] = ['y', 'M', 'w', 'd', 'h', 'm', 's', 'Q'] satisfies DurationUnit[];\n\nconst isDurationUnit = (value: string): value is DurationUnit => {\n  return units.includes(value);\n};\n\n/**\n * Determine if a string contains a relative date time.\n * @param text\n */\nexport function isMathString(text: string | DateTime | Date): boolean {\n  if (!text) {\n    return false;\n  }\n\n  if (typeof text === 'string' && (text.substring(0, 3) === 'now' || text.includes('||'))) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\n/**\n * @deprecated use toDateTime instead\n * Parses different types input to a moment instance. There is a specific formatting language that can be used\n * if text arg is string. See unit tests for examples.\n * @param text\n * @param roundUp See parseDateMath function.\n * @param timezone Only string 'utc' is acceptable here, for anything else, local timezone is used.\n */\nexport function parse(\n  text?: string | DateTime | Date | null,\n  roundUp?: boolean,\n  timezone?: TimeZone,\n  fiscalYearStartMonth?: number\n): DateTime | undefined {\n  if (!text) {\n    return undefined;\n  }\n  return toDateTime(text, { roundUp, timezone, fiscalYearStartMonth });\n}\n\nexport interface ConversionOptions {\n  /**\n   * Set the time to endOf time unit, otherwise to startOf time unit.\n   */\n  roundUp?: boolean;\n  /**\n   * Only string 'utc' is acceptable here, for anything else, local timezone is used.\n   */\n  timezone?: TimeZone;\n  /**\n   * Setting for which month is the first month of the fiscal year.\n   */\n  fiscalYearStartMonth?: number;\n  /**\n   * DateTimeInput to use as now. Useful when parsing multiple values and now needs to be the same. Without this, comparing results from subsequent parses is not guaranteed to be deterministic.\n   */\n  now?: DateTimeInput;\n}\n\n/**\n * @param dateTimeRep A DateTime object, a Date object or a string representation of a specific time.\n * @param options Options for converting to DateTime\n * @returns A DateTime object if possible, undefined if not.\n */\nexport function toDateTime(dateTimeRep: string | DateTime | Date, options: ConversionOptions): DateTime | undefined {\n  if (typeof dateTimeRep !== 'string') {\n    if (isDateTime(dateTimeRep)) {\n      return dateTimeRep;\n    }\n\n    if (isDate(dateTimeRep)) {\n      return dateTime(dateTimeRep);\n    }\n\n    // We got some non string which is not a moment nor Date. TS should be able to check for that but not always.\n    return undefined;\n  } else {\n    let time: DateTime;\n    let mathString = '';\n    let index = -1;\n    let parseString = '';\n\n    if (dateTimeRep.substring(0, 3) === 'now') {\n      time = dateTimeForTimeZone(options.timezone, options.now);\n      mathString = dateTimeRep.substring('now'.length);\n    } else {\n      index = dateTimeRep.indexOf('||');\n      if (index === -1) {\n        parseString = dateTimeRep;\n        mathString = ''; // nothing else\n      } else {\n        parseString = dateTimeRep.substring(0, index);\n        mathString = dateTimeRep.substring(index + 2);\n      }\n      // We're going to just require ISO8601 timestamps, k?\n      time = dateTime(parseString, ISO_8601);\n    }\n\n    if (!mathString.length) {\n      return time;\n    }\n\n    return parseDateMath(mathString, time, options.roundUp, options.fiscalYearStartMonth);\n  }\n}\n\n/**\n * Checks if text is a valid date which in this context means that it is either a Moment instance or it can be parsed\n * by parse function. See parse function to see what is considered acceptable.\n * @param text\n */\nexport function isValid(text: string | DateTime): boolean {\n  const date = parse(text);\n  if (!date) {\n    return false;\n  }\n\n  if (isDateTime(date)) {\n    return date.isValid();\n  }\n\n  return false;\n}\n\n/**\n * Parses math part of the time string and shifts supplied time according to that math. See unit tests for examples.\n * @param mathString\n * @param time\n * @param roundUp If true it will round the time to endOf time unit, otherwise to startOf time unit.\n */\nexport function parseDateMath(\n  mathString: string,\n  time: DateTime,\n  roundUp?: boolean,\n  fiscalYearStartMonth = 0\n): DateTime | undefined {\n  const strippedMathString = mathString.replace(/\\s/g, '');\n  const result = dateTime(time);\n  let i = 0;\n  const len = strippedMathString.length;\n\n  while (i < len) {\n    const c = strippedMathString.charAt(i++);\n    let type;\n    let num;\n    let unitString: string;\n    let isFiscal = false;\n\n    if (c === '/') {\n      type = 0;\n    } else if (c === '+') {\n      type = 1;\n    } else if (c === '-') {\n      type = 2;\n    } else {\n      return undefined;\n    }\n\n    if (isNaN(parseInt(strippedMathString.charAt(i), 10))) {\n      num = 1;\n    } else if (strippedMathString.length === 2) {\n      num = parseInt(strippedMathString.charAt(i), 10);\n    } else {\n      const numFrom = i;\n      while (!isNaN(parseInt(strippedMathString.charAt(i), 10))) {\n        i++;\n        if (i > 10) {\n          return undefined;\n        }\n      }\n      num = parseInt(strippedMathString.substring(numFrom, i), 10);\n    }\n\n    if (type === 0) {\n      // rounding is only allowed on whole, single, units (eg M or 1M, not 0.5M or 2M)\n      if (num !== 1) {\n        return undefined;\n      }\n    }\n\n    unitString = strippedMathString.charAt(i++);\n\n    if (unitString === 'f') {\n      unitString = strippedMathString.charAt(i++);\n      isFiscal = true;\n    }\n\n    const unit = unitString;\n\n    if (isDurationUnit(unit)) {\n      if (type === 0) {\n        if (isFiscal) {\n          roundToFiscal(fiscalYearStartMonth, result, unit, roundUp);\n        } else {\n          if (roundUp) {\n            result.endOf(unit);\n          } else {\n            result.startOf(unit);\n          }\n        }\n      } else if (type === 1) {\n        result.add(num, unit);\n      } else if (type === 2) {\n        result.subtract(num, unit);\n      }\n    } else {\n      return undefined;\n    }\n  }\n  return result;\n}\n\nexport function roundToFiscal(fyStartMonth: number, dateTime: DateTime, unit: string, roundUp: boolean | undefined) {\n  switch (unit) {\n    case 'y':\n      if (roundUp) {\n        roundToFiscal(fyStartMonth, dateTime, unit, false)?.add(11, 'M').endOf('M');\n      } else {\n        dateTime.subtract((dateTimeAsMoment(dateTime).month() - fyStartMonth + 12) % 12, 'M').startOf('M');\n      }\n      return dateTime;\n    case 'Q':\n      if (roundUp) {\n        roundToFiscal(fyStartMonth, dateTime, unit, false)?.add(2, 'M').endOf('M');\n      } else {\n        // why + 12? to ensure this number is always a positive offset from fyStartMonth\n        dateTime.subtract((dateTimeAsMoment(dateTime).month() - fyStartMonth + 12) % 3, 'M').startOf('M');\n      }\n      return dateTime;\n    default:\n      return undefined;\n  }\n}\n","export interface SystemDateFormatSettings {\n  fullDate: string;\n  interval: {\n    millisecond: string;\n    second: string;\n    minute: string;\n    hour: string;\n    day: string;\n    month: string;\n    year: string;\n  };\n  useBrowserLocale: boolean;\n}\n\nconst DEFAULT_SYSTEM_DATE_FORMAT = 'YYYY-MM-DD HH:mm:ss';\nconst DEFAULT_SYSTEM_DATE_MS_FORMAT = 'YYYY-MM-DD HH:mm:ss.SSS';\n\nexport class SystemDateFormatsState {\n  fullDate = DEFAULT_SYSTEM_DATE_FORMAT;\n  fullDateMS = DEFAULT_SYSTEM_DATE_MS_FORMAT;\n  interval = {\n    millisecond: 'HH:mm:ss.SSS',\n    second: 'HH:mm:ss',\n    minute: 'HH:mm',\n    hour: 'MM/DD HH:mm',\n    day: 'MM/DD',\n    month: 'YYYY-MM',\n    year: 'YYYY',\n  };\n\n  update(settings: SystemDateFormatSettings) {\n    this.fullDate = settings.fullDate;\n    this.interval = settings.interval;\n\n    if (settings.useBrowserLocale) {\n      this.useBrowserLocale();\n    }\n  }\n\n  useBrowserLocale() {\n    this.fullDate = localTimeFormat({\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit',\n    });\n\n    // ES5 doesn't support `DateTimeFormatOptions.fractionalSecondDigits` so we have to use\n    // a hack with string replacement.\n    this.fullDateMS = this.fullDate.replace('ss', 'ss.SSS');\n\n    this.interval.millisecond = localTimeFormat(\n      { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false },\n      null,\n      this.interval.second\n    ).replace('ss', 'ss.SSS');\n    this.interval.second = localTimeFormat(\n      { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false },\n      null,\n      this.interval.second\n    );\n    this.interval.minute = localTimeFormat(\n      { hour: '2-digit', minute: '2-digit', hour12: false },\n      null,\n      this.interval.minute\n    );\n    this.interval.hour = localTimeFormat(\n      { month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', hour12: false },\n      null,\n      this.interval.hour\n    );\n    this.interval.day = localTimeFormat({ month: '2-digit', day: '2-digit', hour12: false }, null, this.interval.day);\n    this.interval.month = localTimeFormat(\n      { year: 'numeric', month: '2-digit', hour12: false },\n      null,\n      this.interval.month\n    );\n  }\n\n  getTimeFieldUnit(useMsResolution?: boolean) {\n    return `time:${useMsResolution ? this.fullDateMS : this.fullDate}`;\n  }\n}\n\n/**\n * localTimeFormat helps to generate date formats for momentjs based on browser's locale\n *\n * @param locale browser locale, or default\n * @param options DateTimeFormatOptions to format date\n * @param fallback default format if Intl API is not present\n */\nexport function localTimeFormat(\n  options: Intl.DateTimeFormatOptions,\n  locale?: string | string[] | null,\n  fallback?: string\n): string {\n  if (missingIntlDateTimeFormatSupport()) {\n    return fallback ?? DEFAULT_SYSTEM_DATE_FORMAT;\n  }\n\n  if (!locale && navigator) {\n    locale = [...navigator.languages];\n  }\n\n  // https://momentjs.com/docs/#/displaying/format/\n  const dateTimeFormat = new Intl.DateTimeFormat(locale || undefined, options);\n  const parts = dateTimeFormat.formatToParts(new Date());\n  const hour12 = dateTimeFormat.resolvedOptions().hour12;\n\n  const mapping: { [key: string]: string } = {\n    year: 'YYYY',\n    month: 'MM',\n    day: 'DD',\n    hour: hour12 ? 'hh' : 'HH',\n    minute: 'mm',\n    second: 'ss',\n    weekday: 'ddd',\n    era: 'N',\n    dayPeriod: 'A',\n    timeZoneName: 'Z',\n  };\n\n  return parts.map((part) => mapping[part.type] || part.value).join('');\n}\n\nexport const systemDateFormats = new SystemDateFormatsState();\n\nconst missingIntlDateTimeFormatSupport = (): boolean => {\n  return !('DateTimeFormat' in Intl) || !('formatToParts' in Intl.DateTimeFormat.prototype);\n};\n","/* eslint-disable id-blacklist, no-restricted-imports */\nimport { lowerCase } from 'lodash';\nimport moment from 'moment-timezone';\n\nimport { DateTimeOptions, getTimeZone } from './common';\nimport { parse, isValid } from './datemath';\nimport { systemDateFormats } from './formats';\nimport { DateTimeInput, DateTime, isDateTime, dateTime, toUtc, dateTimeForTimeZone } from './moment_wrapper';\n\n/**\n * The type that describes options that can be passed when parsing a date and time value.\n * @public\n */\nexport interface DateTimeOptionsWhenParsing extends DateTimeOptions {\n  /**\n   * If the input is a Grafana quick date, e.g. now-6h, then you can specify this to control\n   * whether the last part of the date and time value is included or excluded.\n   *\n   * Example: now-6h and the current time is 12:20:00 if roundUp is set to true\n   * the returned DateTime value will be 06:00:00.\n   */\n  roundUp?: boolean;\n  fiscalYearStartMonth?: number;\n}\n\ntype DateTimeParser<T extends DateTimeOptions = DateTimeOptions> = (value: DateTimeInput, options?: T) => DateTime;\n\n/**\n * Helper function to parse a number, text or Date to a DateTime value. If a timeZone is supplied the incoming value\n * is parsed with that timeZone as a base. The only exception to this is if the passed value is in a UTC-based\n * format. Then it will use UTC as the base. If no format is specified the current system format will be assumed.\n *\n * It can also parse the Grafana quick date and time format, e.g. now-6h will be parsed as Date.now() - 6 hours and\n * returned as a valid DateTime value.\n *\n * If no options are supplied, then default values are used. For more details please see {@link DateTimeOptions}.\n *\n * @param value - should be a parsable date and time value\n * @param options\n *\n * @public\n */\nexport const dateTimeParse: DateTimeParser<DateTimeOptionsWhenParsing> = (value, options?): DateTime => {\n  if (isDateTime(value)) {\n    return value;\n  }\n\n  if (typeof value === 'string') {\n    return parseString(value, options);\n  }\n\n  return parseOthers(value, options);\n};\n\nconst parseString = (value: string, options?: DateTimeOptionsWhenParsing): DateTime => {\n  if (value.indexOf('now') !== -1) {\n    if (!isValid(value)) {\n      return dateTime();\n    }\n\n    const parsed = parse(value, options?.roundUp, options?.timeZone, options?.fiscalYearStartMonth);\n    return parsed || dateTime();\n  }\n\n  let timeZone = getTimeZone(options);\n  let format = options?.format ?? systemDateFormats.fullDate;\n  if (value.endsWith('Z')) {\n    // This is a special case when we have an ISO date string\n    // In this case we want to force the format to be ISO and the timeZone to be UTC\n    // This logic is needed for initial load when parsing the URL params\n    format = 'YYYY-MM-DDTHH:mm:ss.SSSZ';\n    timeZone = 'utc';\n  }\n\n  const zone = moment.tz.zone(timeZone);\n\n  if (zone && zone.name) {\n    return dateTimeForTimeZone(zone.name, value, format);\n  }\n\n  switch (lowerCase(timeZone)) {\n    case 'utc':\n      return toUtc(value, format);\n    default:\n      return dateTime(value, format);\n  }\n};\n\nconst parseOthers = (value: DateTimeInput, options?: DateTimeOptionsWhenParsing): DateTime => {\n  const date = value;\n  const timeZone = getTimeZone(options);\n  const zone = moment.tz.zone(timeZone);\n\n  if (zone && zone.name) {\n    return dateTimeForTimeZone(zone.name, date);\n  }\n\n  switch (lowerCase(timeZone)) {\n    case 'utc':\n      return toUtc(date);\n    default:\n      return dateTime(date);\n  }\n};\n","import { toNumber } from 'lodash';\n\n/**\n * Will return any value as a number or NaN\n *\n * @internal\n * */\nexport function anyToNumber(value: unknown): number {\n  if (typeof value === 'number') {\n    return value;\n  }\n\n  if (value === '' || value === null || value === undefined || Array.isArray(value)) {\n    return NaN; // lodash calls them 0\n  }\n\n  if (typeof value === 'boolean') {\n    return value ? 1 : 0;\n  }\n\n  return toNumber(value);\n}\n","/**\n * @alpha\n */\nexport enum MappingType {\n  ValueToText = 'value', // was 1\n  RangeToText = 'range', // was 2\n  RegexToText = 'regex',\n  SpecialValue = 'special',\n}\n\n/**\n * @alpha\n */\nexport interface ValueMappingResult {\n  text?: string;\n  color?: string;\n  icon?: string;\n  index?: number;\n}\n\n/**\n * @alpha\n */\ninterface BaseValueMap<T> {\n  type: MappingType;\n  options: T;\n}\n\n/**\n * @alpha\n */\nexport interface ValueMap extends BaseValueMap<Record<string, ValueMappingResult>> {\n  type: MappingType.ValueToText;\n}\n\n/**\n * @alpha\n */\nexport interface RangeMapOptions {\n  from: number | null; // changed from string\n  to: number | null;\n  result: ValueMappingResult;\n}\n\n/**\n * @alpha\n */\nexport interface RangeMap extends BaseValueMap<RangeMapOptions> {\n  type: MappingType.RangeToText;\n}\n\n/**\n * @alpha\n */\nexport interface RegexMapOptions {\n  pattern: string;\n  result: ValueMappingResult;\n}\n\n/**\n * @alpha\n */\nexport interface RegexMap extends BaseValueMap<RegexMapOptions> {\n  type: MappingType.RegexToText;\n}\n\n/**\n * @alpha\n */\nexport interface SpecialValueOptions {\n  match: SpecialValueMatch;\n  result: ValueMappingResult;\n}\n\n/**\n * @alpha\n */\nexport enum SpecialValueMatch {\n  True = 'true',\n  False = 'false',\n  Null = 'null',\n  NaN = 'nan',\n  NullAndNaN = 'null+nan',\n  Empty = 'empty',\n}\n\n/**\n * @alpha\n */\nexport interface SpecialValueMap extends BaseValueMap<SpecialValueOptions> {\n  type: MappingType.SpecialValue;\n}\n\n/**\n * @alpha\n */\nexport type ValueMapping = ValueMap | RangeMap | RegexMap | SpecialValueMap;\n","import { getActiveThreshold } from '../field/thresholds';\nimport { stringToJsRegex } from '../text/string';\nimport { ThresholdsConfig } from '../types/thresholds';\nimport {\n  MappingType,\n  SpecialValueMatch,\n  SpecialValueOptions,\n  ValueMap,\n  ValueMapping,\n  ValueMappingResult,\n} from '../types/valueMapping';\n\nexport function getValueMappingResult(valueMappings: ValueMapping[], value: any): ValueMappingResult | null {\n  for (const vm of valueMappings) {\n    switch (vm.type) {\n      case MappingType.ValueToText:\n        if (value == null) {\n          continue;\n        }\n\n        const result = vm.options[value];\n        if (result) {\n          return result;\n        }\n\n        break;\n\n      case MappingType.RangeToText:\n        if (value == null) {\n          continue;\n        }\n\n        const valueAsNumber = parseFloat(value);\n        if (isNaN(valueAsNumber)) {\n          continue;\n        }\n\n        const from = vm.options.from ?? -Infinity;\n\n        const isNumFrom = !isNaN(from);\n        if (isNumFrom && valueAsNumber < from) {\n          continue;\n        }\n\n        const to = vm.options.to ?? Infinity;\n\n        const isNumTo = !isNaN(to);\n        if (isNumTo && valueAsNumber > to) {\n          continue;\n        }\n\n        return vm.options.result;\n\n      case MappingType.RegexToText:\n        if (value == null) {\n          continue;\n        }\n\n        if (typeof value !== 'string') {\n          continue;\n        }\n\n        const regex = stringToJsRegex(vm.options.pattern);\n        if (value.match(regex)) {\n          const res = { ...vm.options.result };\n\n          if (res.text != null) {\n            res.text = value.replace(regex, vm.options.result.text || '');\n          }\n\n          return res;\n        }\n\n      case MappingType.SpecialValue:\n        switch ((vm.options as SpecialValueOptions).match) {\n          case SpecialValueMatch.Null: {\n            if (value == null) {\n              return vm.options.result;\n            }\n            break;\n          }\n          case SpecialValueMatch.NaN: {\n            if (typeof value === 'number' && isNaN(value)) {\n              return vm.options.result;\n            }\n            break;\n          }\n          case SpecialValueMatch.NullAndNaN: {\n            if ((typeof value === 'number' && isNaN(value)) || value == null) {\n              return vm.options.result;\n            }\n            break;\n          }\n          case SpecialValueMatch.True: {\n            if (value === true || value === 'true') {\n              return vm.options.result;\n            }\n            break;\n          }\n          case SpecialValueMatch.False: {\n            if (value === false || value === 'false') {\n              return vm.options.result;\n            }\n            break;\n          }\n          case SpecialValueMatch.Empty: {\n            if (value === '') {\n              return vm.options.result;\n            }\n            break;\n          }\n        }\n    }\n  }\n\n  return null;\n}\n\n// Ref https://stackoverflow.com/a/58550111\nexport function isNumeric(num: unknown) {\n  return (typeof num === 'number' || (typeof num === 'string' && num.trim() !== '')) && !isNaN(num as number);\n}\n\n/**\n * @deprecated use MappingType instead\n * @internal\n */\nexport enum LegacyMappingType {\n  ValueToText = 1,\n  RangeToText = 2,\n}\n\n/**\n * @alpha\n * Converts the old Angular value mappings to new react style\n */\nexport function convertOldAngularValueMappings(panel: any, migratedThresholds?: ThresholdsConfig): ValueMapping[] {\n  const mappings: ValueMapping[] = [];\n\n  // Guess the right type based on options\n  let mappingType = panel.mappingType;\n  if (!panel.mappingType) {\n    if (panel.valueMaps && panel.valueMaps.length) {\n      mappingType = 1;\n    } else if (panel.rangeMaps && panel.rangeMaps.length) {\n      mappingType = 2;\n    }\n  }\n  if (mappingType === 1) {\n    for (let i = 0; i < panel.valueMaps.length; i++) {\n      const map = panel.valueMaps[i];\n      mappings.push(\n        upgradeOldAngularValueMapping(\n          {\n            ...map,\n            id: i, // used for order\n            type: MappingType.ValueToText,\n          },\n          panel.fieldConfig?.defaults?.thresholds || migratedThresholds\n        )\n      );\n    }\n  } else if (mappingType === 2) {\n    for (let i = 0; i < panel.rangeMaps.length; i++) {\n      const map = panel.rangeMaps[i];\n      mappings.push(\n        upgradeOldAngularValueMapping(\n          {\n            ...map,\n            id: i, // used for order\n            type: MappingType.RangeToText,\n          },\n          panel.fieldConfig?.defaults?.thresholds || migratedThresholds\n        )\n      );\n    }\n  }\n\n  return mappings;\n}\n\nfunction upgradeOldAngularValueMapping(old: any, thresholds?: ThresholdsConfig): ValueMapping {\n  const valueMaps: ValueMap = { type: MappingType.ValueToText, options: {} };\n  const newMappings: ValueMapping[] = [];\n\n  // Use the color we would have picked from thesholds\n  let color: string | undefined = undefined;\n  const numeric = parseFloat(old.text);\n  if (thresholds && !isNaN(numeric)) {\n    const level = getActiveThreshold(numeric, thresholds.steps);\n    if (level && level.color) {\n      color = level.color;\n    }\n  }\n\n  switch (old.type) {\n    case LegacyMappingType.ValueToText:\n    case MappingType.ValueToText:\n      if (old.value != null) {\n        if (old.value === 'null') {\n          newMappings.push({\n            type: MappingType.SpecialValue,\n            options: {\n              match: SpecialValueMatch.Null,\n              result: { text: old.text, color },\n            },\n          });\n        } else {\n          valueMaps.options[String(old.value)] = {\n            text: old.text,\n            color,\n          };\n        }\n      }\n      break;\n    case LegacyMappingType.RangeToText:\n    case MappingType.RangeToText:\n      if (old.from === 'null' || old.to === 'null') {\n        newMappings.push({\n          type: MappingType.SpecialValue,\n          options: {\n            match: SpecialValueMatch.Null,\n            result: { text: old.text, color },\n          },\n        });\n      } else {\n        newMappings.push({\n          type: MappingType.RangeToText,\n          options: {\n            from: +old.from,\n            to: +old.to,\n            result: { text: old.text, color },\n          },\n        });\n      }\n      break;\n  }\n\n  if (Object.keys(valueMaps.options).length > 0) {\n    newMappings.unshift(valueMaps);\n  }\n\n  return newMappings[0];\n}\n","import { DecimalCount } from '../types/displayValue';\n\nimport { toFixed, FormattedValue } from './valueFormats';\n\nexport function toPercent(size: number | null, decimals: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n  return { text: toFixed(size, decimals), suffix: '%' };\n}\n\nexport function toPercentUnit(size: number | null, decimals: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n  return { text: toFixed(100 * size, decimals), suffix: '%' };\n}\n\nexport function toHex0x(value: number | null, decimals: DecimalCount): FormattedValue {\n  if (value == null) {\n    return { text: '' };\n  }\n  const asHex = toHex(value, decimals);\n  if (asHex.text.substring(0, 1) === '-') {\n    asHex.text = '-0x' + asHex.text.substring(1);\n  } else {\n    asHex.text = '0x' + asHex.text;\n  }\n  return asHex;\n}\n\nexport function toHex(value: number | null, decimals: DecimalCount): FormattedValue {\n  if (value == null) {\n    return { text: '' };\n  }\n  return {\n    text: parseFloat(toFixed(value, decimals)).toString(16).toUpperCase(),\n  };\n}\n\nexport function sci(value: number | null, decimals: DecimalCount): FormattedValue {\n  if (value == null) {\n    return { text: '' };\n  }\n  return { text: value.toExponential(decimals ?? undefined) };\n}\n","/* eslint-disable id-blacklist, no-restricted-imports */\nimport moment, { Moment } from 'moment-timezone';\n\nimport { TimeZone } from '../types/time';\n\nimport { DateTimeOptions, getTimeZone } from './common';\nimport { systemDateFormats } from './formats';\nimport { DateTimeInput, toUtc, dateTimeAsMoment } from './moment_wrapper';\n\n/**\n * The type describing the options that can be passed to the {@link dateTimeFormat}\n * helper function to control how the date and time value passed to the function is\n * formatted.\n *\n * @public\n */\nexport interface DateTimeOptionsWithFormat extends DateTimeOptions {\n  /**\n   * Set this value to `true` if you want to include milliseconds when formatting date and time\n   */\n  defaultWithMS?: boolean;\n}\n\ntype DateTimeFormatter<T extends DateTimeOptions = DateTimeOptions> = (dateInUtc: DateTimeInput, options?: T) => string;\n\n/**\n * Helper function to format date and time according to the specified options. If no options\n * are supplied, then default values are used. For more details, see {@link DateTimeOptionsWithFormat}.\n *\n * @param dateInUtc - date in UTC format, e.g. string formatted with UTC offset, UNIX epoch in seconds etc.\n * @param options\n *\n * @public\n */\nexport const dateTimeFormat: DateTimeFormatter<DateTimeOptionsWithFormat> = (dateInUtc, options?) =>\n  toTz(dateInUtc, getTimeZone(options)).format(getFormat(options));\n\n/**\n * Helper function to format date and time according to the standard ISO format e.g. 2013-02-04T22:44:30.652Z.\n * If no options are supplied, then default values are used. For more details, see {@link DateTimeOptionsWithFormat}.\n *\n * @param dateInUtc - date in UTC format, e.g. string formatted with UTC offset, UNIX epoch in seconds etc.\n * @param options\n *\n * @public\n */\nexport const dateTimeFormatISO: DateTimeFormatter = (dateInUtc, options?) =>\n  toTz(dateInUtc, getTimeZone(options)).format();\n\n/**\n * Helper function to return elapsed time since passed date. The returned value will be formatted\n * in a human readable format e.g. 4 years ago. If no options are supplied, then default values are used.\n * For more details, see {@link DateTimeOptions}.\n *\n * @param dateInUtc - date in UTC format, e.g. string formatted with UTC offset, UNIX epoch in seconds etc.\n * @param options\n *\n * @public\n */\nexport const dateTimeFormatTimeAgo: DateTimeFormatter = (dateInUtc, options?) =>\n  toTz(dateInUtc, getTimeZone(options)).fromNow();\n\n/**\n * Helper function to format date and time according to the Grafana default formatting, but it\n * also appends the time zone abbreviation at the end e.g. 2020-05-20 13:37:00 CET. If no options\n * are supplied, then default values are used. For more details please see {@link DateTimeOptions}.\n *\n * @param dateInUtc - date in UTC format, e.g. string formatted with UTC offset, UNIX epoch in seconds etc.\n * @param options\n *\n * @public\n */\nexport const dateTimeFormatWithAbbrevation: DateTimeFormatter = (dateInUtc, options?) =>\n  toTz(dateInUtc, getTimeZone(options)).format(`${systemDateFormats.fullDate} z`);\n\n/**\n * Helper function to return only the time zone abbreviation for a given date and time value. If no options\n * are supplied, then default values are used. For more details please see {@link DateTimeOptions}.\n *\n * @param dateInUtc - date in UTC format, e.g. string formatted with UTC offset, UNIX epoch in seconds etc.\n * @param options\n *\n * @public\n */\nexport const timeZoneAbbrevation: DateTimeFormatter = (dateInUtc, options?) =>\n  toTz(dateInUtc, getTimeZone(options)).format('z');\n\nconst getFormat = <T extends DateTimeOptionsWithFormat>(options?: T): string => {\n  if (options?.defaultWithMS) {\n    return options?.format ?? systemDateFormats.fullDateMS;\n  }\n  return options?.format ?? systemDateFormats.fullDate;\n};\n\nconst toTz = (dateInUtc: DateTimeInput, timeZone: TimeZone): Moment => {\n  const date = dateInUtc;\n  const zone = moment.tz.zone(timeZone);\n\n  if (zone && zone.name) {\n    return dateTimeAsMoment(toUtc(date)).tz(zone.name);\n  }\n\n  switch (timeZone) {\n    case 'utc':\n      return dateTimeAsMoment(toUtc(date));\n    default:\n      return dateTimeAsMoment(toUtc(date)).local();\n  }\n};\n","import { localTimeFormat, systemDateFormats } from '../datetime/formats';\nimport { dateTimeFormat, dateTimeFormatTimeAgo } from '../datetime/formatter';\nimport { toDuration as duration, toUtc, dateTime } from '../datetime/moment_wrapper';\nimport { DecimalCount } from '../types/displayValue';\nimport { TimeZone } from '../types/time';\n\nimport { toFixed, toFixedScaled, FormattedValue, ValueFormatter } from './valueFormats';\n\ninterface IntervalsInSeconds {\n  [interval: string]: number;\n}\n\nexport enum Interval {\n  Year = 'year',\n  Month = 'month',\n  Week = 'week',\n  Day = 'day',\n  Hour = 'hour',\n  Minute = 'minute',\n  Second = 'second',\n  Millisecond = 'millisecond',\n}\n\nconst UNITS = [\n  Interval.Year,\n  Interval.Month,\n  Interval.Week,\n  Interval.Day,\n  Interval.Hour,\n  Interval.Minute,\n  Interval.Second,\n  Interval.Millisecond,\n];\n\nconst INTERVALS_IN_SECONDS: IntervalsInSeconds = {\n  [Interval.Year]: 31536000,\n  [Interval.Month]: 2592000,\n  [Interval.Week]: 604800,\n  [Interval.Day]: 86400,\n  [Interval.Hour]: 3600,\n  [Interval.Minute]: 60,\n  [Interval.Second]: 1,\n  [Interval.Millisecond]: 0.001,\n};\n\nexport function toNanoSeconds(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 1000) {\n    return { text: toFixed(size, decimals), suffix: ' ns' };\n  } else if (Math.abs(size) < 1000000) {\n    return toFixedScaled(size / 1000, decimals, ' µs');\n  } else if (Math.abs(size) < 1000000000) {\n    return toFixedScaled(size / 1000000, decimals, ' ms');\n  } else if (Math.abs(size) < 60000000000) {\n    return toFixedScaled(size / 1000000000, decimals, ' s');\n  } else if (Math.abs(size) < 3600000000000) {\n    return toFixedScaled(size / 60000000000, decimals, ' min');\n  } else if (Math.abs(size) < 86400000000000) {\n    return toFixedScaled(size / 3600000000000, decimals, ' hour');\n  } else {\n    return toFixedScaled(size / 86400000000000, decimals, ' day');\n  }\n}\n\nexport function toMicroSeconds(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 1000) {\n    return { text: toFixed(size, decimals), suffix: ' µs' };\n  } else if (Math.abs(size) < 1000000) {\n    return toFixedScaled(size / 1000, decimals, ' ms');\n  } else {\n    return toFixedScaled(size / 1000000, decimals, ' s');\n  }\n}\n\nexport function toMilliSeconds(size: number, decimals?: DecimalCount, scaledDecimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 1000) {\n    return { text: toFixed(size, decimals), suffix: ' ms' };\n  } else if (Math.abs(size) < 60000) {\n    // Less than 1 min\n    return toFixedScaled(size / 1000, decimals, ' s');\n  } else if (Math.abs(size) < 3600000) {\n    // Less than 1 hour, divide in minutes\n    return toFixedScaled(size / 60000, decimals, ' min');\n  } else if (Math.abs(size) < 86400000) {\n    // Less than one day, divide in hours\n    return toFixedScaled(size / 3600000, decimals, ' hour');\n  } else if (Math.abs(size) < 31536000000) {\n    // Less than one year, divide in days\n    return toFixedScaled(size / 86400000, decimals, ' day');\n  }\n\n  return toFixedScaled(size / 31536000000, decimals, ' year');\n}\n\nexport function toSeconds(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  // If 0, use s unit instead of ns\n  if (size === 0) {\n    return { text: '0', suffix: ' s' };\n  }\n\n  // Less than 1 µs, divide in ns\n  if (Math.abs(size) < 0.000001) {\n    return toFixedScaled(size * 1e9, decimals, ' ns');\n  }\n  // Less than 1 ms, divide in µs\n  if (Math.abs(size) < 0.001) {\n    return toFixedScaled(size * 1e6, decimals, ' µs');\n  }\n  // Less than 1 second, divide in ms\n  if (Math.abs(size) < 1) {\n    return toFixedScaled(size * 1e3, decimals, ' ms');\n  }\n\n  if (Math.abs(size) < 60) {\n    return { text: toFixed(size, decimals), suffix: ' s' };\n  } else if (Math.abs(size) < 3600) {\n    // Less than 1 hour, divide in minutes\n    return toFixedScaled(size / 60, decimals, ' min');\n  } else if (Math.abs(size) < 86400) {\n    // Less than one day, divide in hours\n    return toFixedScaled(size / 3600, decimals, ' hour');\n  } else if (Math.abs(size) < 604800) {\n    // Less than one week, divide in days\n    return toFixedScaled(size / 86400, decimals, ' day');\n  } else if (Math.abs(size) < 31536000) {\n    // Less than one year, divide in week\n    return toFixedScaled(size / 604800, decimals, ' week');\n  }\n\n  return toFixedScaled(size / 3.15569e7, decimals, ' year');\n}\n\nexport function toMinutes(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 60) {\n    return { text: toFixed(size, decimals), suffix: ' min' };\n  } else if (Math.abs(size) < 1440) {\n    return toFixedScaled(size / 60, decimals, ' hour');\n  } else if (Math.abs(size) < 10080) {\n    return toFixedScaled(size / 1440, decimals, ' day');\n  } else if (Math.abs(size) < 604800) {\n    return toFixedScaled(size / 10080, decimals, ' week');\n  } else {\n    return toFixedScaled(size / 5.25948e5, decimals, ' year');\n  }\n}\n\nexport function toHours(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 24) {\n    return { text: toFixed(size, decimals), suffix: ' hour' };\n  } else if (Math.abs(size) < 168) {\n    return toFixedScaled(size / 24, decimals, ' day');\n  } else if (Math.abs(size) < 8760) {\n    return toFixedScaled(size / 168, decimals, ' week');\n  } else {\n    return toFixedScaled(size / 8760, decimals, ' year');\n  }\n}\n\nexport function toDays(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (Math.abs(size) < 7) {\n    return toFixedScaled(size, decimals, ' day');\n  } else if (Math.abs(size) < 365) {\n    return toFixedScaled(size / 7, decimals, ' week');\n  } else {\n    return toFixedScaled(size / 365, decimals, ' year');\n  }\n}\n\nexport function toDuration(size: number, decimals: DecimalCount, timeScale: Interval): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  if (size === 0) {\n    return { text: '0', suffix: ' ' + timeScale + 's' };\n  }\n\n  if (size < 0) {\n    const v = toDuration(-size, decimals, timeScale);\n    if (!v.suffix) {\n      v.suffix = '';\n    }\n    v.suffix += ' ago';\n    return v;\n  }\n\n  // convert $size to milliseconds\n  // intervals_in_seconds uses seconds (duh), convert them to milliseconds here to minimize floating point errors\n  size *= INTERVALS_IN_SECONDS[timeScale] * 1000;\n\n  const strings = [];\n\n  // after first value >= 1 print only $decimals more\n  let decrementDecimals = false;\n  let decimalsCount = 0;\n\n  if (decimals !== null && decimals !== undefined) {\n    decimalsCount = decimals;\n  }\n\n  for (let i = 0; i < UNITS.length && decimalsCount >= 0; i++) {\n    const interval = INTERVALS_IN_SECONDS[UNITS[i]] * 1000;\n    const value = size / interval;\n    if (value >= 1 || decrementDecimals) {\n      decrementDecimals = true;\n      const floor = Math.floor(value);\n      const unit = UNITS[i] + (floor !== 1 ? 's' : '');\n      strings.push(floor + ' ' + unit);\n      size = size % interval;\n      decimalsCount--;\n    }\n  }\n\n  return { text: strings.join(', ') };\n}\n\nexport function toClock(size: number, decimals?: DecimalCount): FormattedValue {\n  if (size === null) {\n    return { text: '' };\n  }\n\n  // < 1 second\n  if (size < 1000) {\n    return {\n      text: toUtc(size).format('SSS\\\\m\\\\s'),\n    };\n  }\n\n  // < 1 minute\n  if (size < 60000) {\n    let format = 'ss\\\\s:SSS\\\\m\\\\s';\n    if (decimals === 0) {\n      format = 'ss\\\\s';\n    }\n    return { text: toUtc(size).format(format) };\n  }\n\n  // < 1 hour\n  if (size < 3600000) {\n    let format = 'mm\\\\m:ss\\\\s:SSS\\\\m\\\\s';\n    if (decimals === 0) {\n      format = 'mm\\\\m';\n    } else if (decimals === 1) {\n      format = 'mm\\\\m:ss\\\\s';\n    }\n    return { text: toUtc(size).format(format) };\n  }\n\n  let format = 'mm\\\\m:ss\\\\s:SSS\\\\m\\\\s';\n\n  const hours = `${Math.floor(duration(size, 'milliseconds').asHours())}h`;\n\n  if (decimals === 0) {\n    format = '';\n  } else if (decimals === 1) {\n    format = 'mm\\\\m';\n  } else if (decimals === 2) {\n    format = 'mm\\\\m:ss\\\\s';\n  }\n\n  const text = format ? `${hours}:${toUtc(size).format(format)}` : hours;\n  return { text };\n}\n\nexport function toDurationInMilliseconds(size: number, decimals: DecimalCount): FormattedValue {\n  return toDuration(size, decimals, Interval.Millisecond);\n}\n\nexport function toDurationInSeconds(size: number, decimals: DecimalCount): FormattedValue {\n  return toDuration(size, decimals, Interval.Second);\n}\n\nexport function toDurationInHoursMinutesSeconds(size: number): FormattedValue {\n  if (size < 0) {\n    const v = toDurationInHoursMinutesSeconds(-size);\n    if (!v.suffix) {\n      v.suffix = '';\n    }\n    v.suffix += ' ago';\n    return v;\n  }\n  const strings = [];\n  const numHours = Math.floor(size / 3600);\n  const numMinutes = Math.floor((size % 3600) / 60);\n  const numSeconds = Math.floor((size % 3600) % 60);\n  numHours > 9 ? strings.push('' + numHours) : strings.push('0' + numHours);\n  numMinutes > 9 ? strings.push('' + numMinutes) : strings.push('0' + numMinutes);\n  numSeconds > 9 ? strings.push('' + numSeconds) : strings.push('0' + numSeconds);\n  return { text: strings.join(':') };\n}\n\nexport function toDurationInDaysHoursMinutesSeconds(size: number): FormattedValue {\n  if (size < 0) {\n    const v = toDurationInDaysHoursMinutesSeconds(-size);\n    if (!v.suffix) {\n      v.suffix = '';\n    }\n    v.suffix += ' ago';\n    return v;\n  }\n  let dayString = '';\n  const numDays = Math.floor(size / (24 * 3600));\n  if (numDays > 0) {\n    dayString = numDays + ' d ';\n  }\n  const hmsString = toDurationInHoursMinutesSeconds(size - numDays * 24 * 3600);\n  return { text: dayString + hmsString.text };\n}\n\nexport function toTimeTicks(size: number, decimals: DecimalCount): FormattedValue {\n  return toSeconds(size / 100, decimals);\n}\n\nexport function toClockMilliseconds(size: number, decimals: DecimalCount): FormattedValue {\n  return toClock(size, decimals);\n}\n\nexport function toClockSeconds(size: number, decimals: DecimalCount): FormattedValue {\n  return toClock(size * 1000, decimals);\n}\n\nexport function toDateTimeValueFormatter(pattern: string, todayPattern?: string): ValueFormatter {\n  return (value: number, decimals: DecimalCount, scaledDecimals: DecimalCount, timeZone?: TimeZone): FormattedValue => {\n    if (todayPattern) {\n      if (dateTime().isSame(value, 'day')) {\n        return {\n          text: dateTimeFormat(value, { format: todayPattern, timeZone }),\n        };\n      }\n    }\n    return { text: dateTimeFormat(value, { format: pattern, timeZone }) };\n  };\n}\n\nexport const dateTimeAsIso = toDateTimeValueFormatter('YYYY-MM-DD HH:mm:ss');\nexport const dateTimeAsIsoNoDateIfToday = toDateTimeValueFormatter('YYYY-MM-DD HH:mm:ss', 'HH:mm:ss');\nexport const dateTimeAsUS = toDateTimeValueFormatter('MM/DD/YYYY h:mm:ss a');\nexport const dateTimeAsUSNoDateIfToday = toDateTimeValueFormatter('MM/DD/YYYY h:mm:ss a', 'h:mm:ss a');\n\nexport function getDateTimeAsLocalFormat() {\n  return toDateTimeValueFormatter(\n    localTimeFormat({\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit',\n    })\n  );\n}\n\nexport function getDateTimeAsLocalFormatNoDateIfToday() {\n  return toDateTimeValueFormatter(\n    localTimeFormat({\n      year: 'numeric',\n      month: '2-digit',\n      day: '2-digit',\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit',\n    }),\n    localTimeFormat({\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit',\n    })\n  );\n}\n\nexport function dateTimeSystemFormatter(\n  value: number,\n  decimals: DecimalCount,\n  scaledDecimals: DecimalCount,\n  timeZone?: TimeZone,\n  showMs?: boolean\n): FormattedValue {\n  return {\n    text: dateTimeFormat(value, {\n      format: showMs ? systemDateFormats.fullDateMS : systemDateFormats.fullDate,\n      timeZone,\n    }),\n  };\n}\n\nexport function dateTimeFromNow(\n  value: number,\n  decimals: DecimalCount,\n  scaledDecimals: DecimalCount,\n  timeZone?: TimeZone\n): FormattedValue {\n  return { text: dateTimeFormatTimeAgo(value, { timeZone }) };\n}\n","import { DecimalCount } from '../types/displayValue';\n\nimport { scaledUnits, ValueFormatter } from './valueFormats';\n\nexport function currency(symbol: string, asSuffix?: boolean): ValueFormatter {\n  const units = ['', 'K', 'M', 'B', 'T'];\n  const scaler = scaledUnits(1000, units);\n  return (value: number, decimals?: DecimalCount, scaledDecimals?: DecimalCount) => {\n    if (value == null) {\n      return { text: '' };\n    }\n    const isNegative = value < 0;\n    if (isNegative) {\n      value = Math.abs(value);\n    }\n    const scaled = scaler(value, decimals, scaledDecimals);\n    if (asSuffix) {\n      scaled.suffix = scaled.suffix !== undefined ? `${scaled.suffix}${symbol}` : undefined;\n    } else {\n      scaled.prefix = symbol;\n    }\n    if (isNegative) {\n      scaled.prefix = `-${scaled.prefix?.length ? scaled.prefix : ''}`;\n    }\n    return scaled;\n  };\n}\n\nconst SI_PREFIXES = ['f', 'p', 'n', 'µ', 'm', '', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'];\nconst SI_BASE_INDEX = SI_PREFIXES.indexOf('');\n\nexport function getOffsetFromSIPrefix(c: string): number {\n  const charIndex = SI_PREFIXES.findIndex((prefix) => prefix.normalize('NFKD') === c.normalize('NFKD'));\n  return charIndex < 0 ? 0 : charIndex - SI_BASE_INDEX;\n}\n\nconst BIN_PREFIXES = ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi'];\n\nexport function binaryPrefix(unit: string, offset = 0): ValueFormatter {\n  const units = BIN_PREFIXES.map((p) => ' ' + p + unit);\n  return scaledUnits(1024, units, offset);\n}\n\nexport function SIPrefix(unit: string, offset = 0): ValueFormatter {\n  const units = SI_PREFIXES.map((p) => ' ' + p + unit);\n  return scaledUnits(1000, units, SI_BASE_INDEX + offset);\n}\n","import { toHex, sci, toHex0x, toPercent, toPercentUnit } from './arithmeticFormatters';\nimport {\n  dateTimeAsIso,\n  dateTimeAsIsoNoDateIfToday,\n  dateTimeAsUS,\n  dateTimeAsUSNoDateIfToday,\n  getDateTimeAsLocalFormat,\n  getDateTimeAsLocalFormatNoDateIfToday,\n  dateTimeFromNow,\n  toClockMilliseconds,\n  toClockSeconds,\n  toDays,\n  toDurationInDaysHoursMinutesSeconds,\n  toDurationInHoursMinutesSeconds,\n  toDurationInMilliseconds,\n  toDurationInSeconds,\n  toHours,\n  toMicroSeconds,\n  toMilliSeconds,\n  toMinutes,\n  toNanoSeconds,\n  toSeconds,\n  toTimeTicks,\n  dateTimeSystemFormatter,\n} from './dateTimeFormatters';\nimport { binaryPrefix, currency, SIPrefix } from './symbolFormatters';\nimport {\n  locale,\n  scaledUnits,\n  simpleCountUnit,\n  toFixedUnit,\n  ValueFormatCategory,\n  stringFormater,\n  booleanValueFormatter,\n} from './valueFormats';\n\nexport const getCategories = (): ValueFormatCategory[] => [\n  {\n    name: 'Misc',\n    formats: [\n      { name: 'Number', id: 'none', fn: toFixedUnit('') },\n      { name: 'String', id: 'string', fn: stringFormater },\n      {\n        name: 'short',\n        id: 'short',\n        fn: scaledUnits(1000, ['', ' K', ' Mil', ' Bil', ' Tri', ' Quadr', ' Quint', ' Sext', ' Sept']),\n      },\n      { name: 'SI short', id: 'sishort', fn: SIPrefix('') },\n      { name: 'Percent (0-100)', id: 'percent', fn: toPercent },\n      { name: 'Percent (0.0-1.0)', id: 'percentunit', fn: toPercentUnit },\n      { name: 'Humidity (%H)', id: 'humidity', fn: toFixedUnit('%H') },\n      { name: 'Decibel', id: 'dB', fn: toFixedUnit('dB') },\n      { name: 'Candela (cd)', id: 'candela', fn: SIPrefix('cd') },\n      { name: 'Hexadecimal (0x)', id: 'hex0x', fn: toHex0x },\n      { name: 'Hexadecimal', id: 'hex', fn: toHex },\n      { name: 'Scientific notation', id: 'sci', fn: sci },\n      { name: 'Locale format', id: 'locale', fn: locale },\n      { name: 'Pixels', id: 'pixel', fn: toFixedUnit('px') },\n    ],\n  },\n  {\n    name: 'Acceleration',\n    formats: [\n      { name: 'Meters/sec²', id: 'accMS2', fn: toFixedUnit('m/sec²') },\n      { name: 'Feet/sec²', id: 'accFS2', fn: toFixedUnit('f/sec²') },\n      { name: 'G unit', id: 'accG', fn: toFixedUnit('g') },\n    ],\n  },\n  {\n    name: 'Angle',\n    formats: [\n      { name: 'Degrees (°)', id: 'degree', fn: toFixedUnit('°') },\n      { name: 'Radians', id: 'radian', fn: toFixedUnit('rad') },\n      { name: 'Gradian', id: 'grad', fn: toFixedUnit('grad') },\n      { name: 'Arc Minutes', id: 'arcmin', fn: toFixedUnit('arcmin') },\n      { name: 'Arc Seconds', id: 'arcsec', fn: toFixedUnit('arcsec') },\n    ],\n  },\n  {\n    name: 'Area',\n    formats: [\n      { name: 'Square Meters (m²)', id: 'areaM2', fn: toFixedUnit('m²') },\n      { name: 'Square Feet (ft²)', id: 'areaF2', fn: toFixedUnit('ft²') },\n      { name: 'Square Miles (mi²)', id: 'areaMI2', fn: toFixedUnit('mi²') },\n      { name: 'Acres (ac)', id: 'acres', fn: toFixedUnit('ac') },\n      { name: 'Hectares (ha)', id: 'hectares', fn: toFixedUnit('ha') },\n    ],\n  },\n  {\n    name: 'Computation',\n    formats: [\n      { name: 'FLOP/s', id: 'flops', fn: SIPrefix('FLOPS') },\n      { name: 'MFLOP/s', id: 'mflops', fn: SIPrefix('FLOPS', 2) },\n      { name: 'GFLOP/s', id: 'gflops', fn: SIPrefix('FLOPS', 3) },\n      { name: 'TFLOP/s', id: 'tflops', fn: SIPrefix('FLOPS', 4) },\n      { name: 'PFLOP/s', id: 'pflops', fn: SIPrefix('FLOPS', 5) },\n      { name: 'EFLOP/s', id: 'eflops', fn: SIPrefix('FLOPS', 6) },\n      { name: 'ZFLOP/s', id: 'zflops', fn: SIPrefix('FLOPS', 7) },\n      { name: 'YFLOP/s', id: 'yflops', fn: SIPrefix('FLOPS', 8) },\n    ],\n  },\n  {\n    name: 'Concentration',\n    formats: [\n      { name: 'parts-per-million (ppm)', id: 'ppm', fn: toFixedUnit('ppm') },\n      { name: 'parts-per-billion (ppb)', id: 'conppb', fn: toFixedUnit('ppb') },\n      { name: 'nanogram per cubic meter (ng/m³)', id: 'conngm3', fn: toFixedUnit('ng/m³') },\n      { name: 'nanogram per normal cubic meter (ng/Nm³)', id: 'conngNm3', fn: toFixedUnit('ng/Nm³') },\n      { name: 'microgram per cubic meter (μg/m³)', id: 'conμgm3', fn: toFixedUnit('μg/m³') },\n      { name: 'microgram per normal cubic meter (μg/Nm³)', id: 'conμgNm3', fn: toFixedUnit('μg/Nm³') },\n      { name: 'milligram per cubic meter (mg/m³)', id: 'conmgm3', fn: toFixedUnit('mg/m³') },\n      { name: 'milligram per normal cubic meter (mg/Nm³)', id: 'conmgNm3', fn: toFixedUnit('mg/Nm³') },\n      { name: 'gram per cubic meter (g/m³)', id: 'congm3', fn: toFixedUnit('g/m³') },\n      { name: 'gram per normal cubic meter (g/Nm³)', id: 'congNm3', fn: toFixedUnit('g/Nm³') },\n      { name: 'milligrams per decilitre (mg/dL)', id: 'conmgdL', fn: toFixedUnit('mg/dL') },\n      { name: 'millimoles per litre (mmol/L)', id: 'conmmolL', fn: toFixedUnit('mmol/L') },\n    ],\n  },\n  {\n    name: 'Currency',\n    formats: [\n      { name: 'Dollars ($)', id: 'currencyUSD', fn: currency('$') },\n      { name: 'Pounds (£)', id: 'currencyGBP', fn: currency('£') },\n      { name: 'Euro (€)', id: 'currencyEUR', fn: currency('€') },\n      { name: 'Yen (¥)', id: 'currencyJPY', fn: currency('¥') },\n      { name: 'Rubles (₽)', id: 'currencyRUB', fn: currency('₽') },\n      { name: 'Hryvnias (₴)', id: 'currencyUAH', fn: currency('₴') },\n      { name: 'Real (R$)', id: 'currencyBRL', fn: currency('R$') },\n      { name: 'Danish Krone (kr)', id: 'currencyDKK', fn: currency('kr', true) },\n      { name: 'Icelandic Króna (kr)', id: 'currencyISK', fn: currency('kr', true) },\n      { name: 'Norwegian Krone (kr)', id: 'currencyNOK', fn: currency('kr', true) },\n      { name: 'Swedish Krona (kr)', id: 'currencySEK', fn: currency('kr', true) },\n      { name: 'Czech koruna (czk)', id: 'currencyCZK', fn: currency('czk') },\n      { name: 'Swiss franc (CHF)', id: 'currencyCHF', fn: currency('CHF') },\n      { name: 'Polish Złoty (PLN)', id: 'currencyPLN', fn: currency('PLN') },\n      { name: 'Bitcoin (฿)', id: 'currencyBTC', fn: currency('฿') },\n      { name: 'Milli Bitcoin (฿)', id: 'currencymBTC', fn: currency('mBTC') },\n      { name: 'Micro Bitcoin (฿)', id: 'currencyμBTC', fn: currency('μBTC') },\n      { name: 'South African Rand (R)', id: 'currencyZAR', fn: currency('R') },\n      { name: 'Indian Rupee (₹)', id: 'currencyINR', fn: currency('₹') },\n      { name: 'South Korean Won (₩)', id: 'currencyKRW', fn: currency('₩') },\n      { name: 'Indonesian Rupiah (Rp)', id: 'currencyIDR', fn: currency('Rp') },\n      { name: 'Philippine Peso (PHP)', id: 'currencyPHP', fn: currency('PHP') },\n      { name: 'Vietnamese Dong (VND)', id: 'currencyVND', fn: currency('đ', true) },\n      { name: 'Turkish Lira (₺)', id: 'currencyTRY', fn: currency('₺', true) },\n      { name: 'Malaysian Ringgit (RM)', id: 'currencyMYR', fn: currency('RM') },\n      { name: 'CFP franc (XPF)', id: 'currencyXPF', fn: currency('XPF') },\n      { name: 'Bulgarian Lev (BGN)', id: 'currencyBGN', fn: currency('BGN') },\n      { name: 'Guaraní (₲)', id: 'currencyPYG', fn: currency('₲') },\n      { name: 'Uruguay Peso (UYU)', id: 'currencyUYU', fn: currency('UYU') },\n      { name: 'Israeli New Shekels (₪)', id: 'currencyILS', fn: currency('₪') },\n    ],\n  },\n  {\n    name: 'Data',\n    formats: [\n      { name: 'bytes(IEC)', id: 'bytes', fn: binaryPrefix('B') },\n      { name: 'bytes(SI)', id: 'decbytes', fn: SIPrefix('B') },\n      { name: 'bits(IEC)', id: 'bits', fn: binaryPrefix('b') },\n      { name: 'bits(SI)', id: 'decbits', fn: SIPrefix('b') },\n      { name: 'kibibytes', id: 'kbytes', fn: binaryPrefix('B', 1) },\n      { name: 'kilobytes', id: 'deckbytes', fn: SIPrefix('B', 1) },\n      { name: 'mebibytes', id: 'mbytes', fn: binaryPrefix('B', 2) },\n      { name: 'megabytes', id: 'decmbytes', fn: SIPrefix('B', 2) },\n      { name: 'gibibytes', id: 'gbytes', fn: binaryPrefix('B', 3) },\n      { name: 'gigabytes', id: 'decgbytes', fn: SIPrefix('B', 3) },\n      { name: 'tebibytes', id: 'tbytes', fn: binaryPrefix('B', 4) },\n      { name: 'terabytes', id: 'dectbytes', fn: SIPrefix('B', 4) },\n      { name: 'pebibytes', id: 'pbytes', fn: binaryPrefix('B', 5) },\n      { name: 'petabytes', id: 'decpbytes', fn: SIPrefix('B', 5) },\n    ],\n  },\n  {\n    name: 'Data rate',\n    formats: [\n      { name: 'packets/sec', id: 'pps', fn: SIPrefix('p/s') },\n      { name: 'bytes/sec(IEC)', id: 'binBps', fn: binaryPrefix('B/s') },\n      { name: 'bytes/sec(SI)', id: 'Bps', fn: SIPrefix('B/s') },\n      { name: 'bits/sec(IEC)', id: 'binbps', fn: binaryPrefix('b/s') },\n      { name: 'bits/sec(SI)', id: 'bps', fn: SIPrefix('b/s') },\n      { name: 'kibibytes/sec', id: 'KiBs', fn: binaryPrefix('B/s', 1) },\n      { name: 'kibibits/sec', id: 'Kibits', fn: binaryPrefix('b/s', 1) },\n      { name: 'kilobytes/sec', id: 'KBs', fn: SIPrefix('B/s', 1) },\n      { name: 'kilobits/sec', id: 'Kbits', fn: SIPrefix('b/s', 1) },\n      { name: 'mebibytes/sec', id: 'MiBs', fn: binaryPrefix('B/s', 2) },\n      { name: 'mebibits/sec', id: 'Mibits', fn: binaryPrefix('b/s', 2) },\n      { name: 'megabytes/sec', id: 'MBs', fn: SIPrefix('B/s', 2) },\n      { name: 'megabits/sec', id: 'Mbits', fn: SIPrefix('b/s', 2) },\n      { name: 'gibibytes/sec', id: 'GiBs', fn: binaryPrefix('B/s', 3) },\n      { name: 'gibibits/sec', id: 'Gibits', fn: binaryPrefix('b/s', 3) },\n      { name: 'gigabytes/sec', id: 'GBs', fn: SIPrefix('B/s', 3) },\n      { name: 'gigabits/sec', id: 'Gbits', fn: SIPrefix('b/s', 3) },\n      { name: 'tebibytes/sec', id: 'TiBs', fn: binaryPrefix('B/s', 4) },\n      { name: 'tebibits/sec', id: 'Tibits', fn: binaryPrefix('b/s', 4) },\n      { name: 'terabytes/sec', id: 'TBs', fn: SIPrefix('B/s', 4) },\n      { name: 'terabits/sec', id: 'Tbits', fn: SIPrefix('b/s', 4) },\n      { name: 'pebibytes/sec', id: 'PiBs', fn: binaryPrefix('B/s', 5) },\n      { name: 'pebibits/sec', id: 'Pibits', fn: binaryPrefix('b/s', 5) },\n      { name: 'petabytes/sec', id: 'PBs', fn: SIPrefix('B/s', 5) },\n      { name: 'petabits/sec', id: 'Pbits', fn: SIPrefix('b/s', 5) },\n    ],\n  },\n  {\n    name: 'Date & time',\n    formats: [\n      { name: 'Datetime ISO', id: 'dateTimeAsIso', fn: dateTimeAsIso },\n      { name: 'Datetime ISO (No date if today)', id: 'dateTimeAsIsoNoDateIfToday', fn: dateTimeAsIsoNoDateIfToday },\n      { name: 'Datetime US', id: 'dateTimeAsUS', fn: dateTimeAsUS },\n      { name: 'Datetime US (No date if today)', id: 'dateTimeAsUSNoDateIfToday', fn: dateTimeAsUSNoDateIfToday },\n      { name: 'Datetime local', id: 'dateTimeAsLocal', fn: getDateTimeAsLocalFormat() },\n      {\n        name: 'Datetime local (No date if today)',\n        id: 'dateTimeAsLocalNoDateIfToday',\n        fn: getDateTimeAsLocalFormatNoDateIfToday(),\n      },\n      { name: 'Datetime default', id: 'dateTimeAsSystem', fn: dateTimeSystemFormatter },\n      { name: 'From Now', id: 'dateTimeFromNow', fn: dateTimeFromNow },\n    ],\n  },\n  {\n    name: 'Energy',\n    formats: [\n      { name: 'Watt (W)', id: 'watt', fn: SIPrefix('W') },\n      { name: 'Kilowatt (kW)', id: 'kwatt', fn: SIPrefix('W', 1) },\n      { name: 'Megawatt (MW)', id: 'megwatt', fn: SIPrefix('W', 2) },\n      { name: 'Gigawatt (GW)', id: 'gwatt', fn: SIPrefix('W', 3) },\n      { name: 'Milliwatt (mW)', id: 'mwatt', fn: SIPrefix('W', -1) },\n      { name: 'Watt per square meter (W/m²)', id: 'Wm2', fn: SIPrefix('W/m²') },\n      { name: 'Volt-Ampere (VA)', id: 'voltamp', fn: SIPrefix('VA') },\n      { name: 'Kilovolt-Ampere (kVA)', id: 'kvoltamp', fn: SIPrefix('VA', 1) },\n      { name: 'Volt-Ampere reactive (VAr)', id: 'voltampreact', fn: SIPrefix('VAr') },\n      { name: 'Kilovolt-Ampere reactive (kVAr)', id: 'kvoltampreact', fn: SIPrefix('VAr', 1) },\n      { name: 'Watt-hour (Wh)', id: 'watth', fn: SIPrefix('Wh') },\n      { name: 'Watt-hour per Kilogram (Wh/kg)', id: 'watthperkg', fn: SIPrefix('Wh/kg') },\n      { name: 'Kilowatt-hour (kWh)', id: 'kwatth', fn: SIPrefix('Wh', 1) },\n      { name: 'Kilowatt-min (kWm)', id: 'kwattm', fn: SIPrefix('W-Min', 1) },\n      { name: 'Megawatt-hour (MWh)', id: 'mwatth', fn: SIPrefix('Wh', 2) },\n      { name: 'Ampere-hour (Ah)', id: 'amph', fn: SIPrefix('Ah') },\n      { name: 'Kiloampere-hour (kAh)', id: 'kamph', fn: SIPrefix('Ah', 1) },\n      { name: 'Milliampere-hour (mAh)', id: 'mamph', fn: SIPrefix('Ah', -1) },\n      { name: 'Joule (J)', id: 'joule', fn: SIPrefix('J') },\n      { name: 'Electron volt (eV)', id: 'ev', fn: SIPrefix('eV') },\n      { name: 'Ampere (A)', id: 'amp', fn: SIPrefix('A') },\n      { name: 'Kiloampere (kA)', id: 'kamp', fn: SIPrefix('A', 1) },\n      { name: 'Milliampere (mA)', id: 'mamp', fn: SIPrefix('A', -1) },\n      { name: 'Volt (V)', id: 'volt', fn: SIPrefix('V') },\n      { name: 'Kilovolt (kV)', id: 'kvolt', fn: SIPrefix('V', 1) },\n      { name: 'Millivolt (mV)', id: 'mvolt', fn: SIPrefix('V', -1) },\n      { name: 'Decibel-milliwatt (dBm)', id: 'dBm', fn: SIPrefix('dBm') },\n      { name: 'Milliohm (mΩ)', id: 'mohm', fn: SIPrefix('Ω', -1) },\n      { name: 'Ohm (Ω)', id: 'ohm', fn: SIPrefix('Ω') },\n      { name: 'Kiloohm (kΩ)', id: 'kohm', fn: SIPrefix('Ω', 1) },\n      { name: 'Megaohm (MΩ)', id: 'Mohm', fn: SIPrefix('Ω', 2) },\n      { name: 'Farad (F)', id: 'farad', fn: SIPrefix('F') },\n      { name: 'Microfarad (µF)', id: 'µfarad', fn: SIPrefix('F', -2) },\n      { name: 'Nanofarad (nF)', id: 'nfarad', fn: SIPrefix('F', -3) },\n      { name: 'Picofarad (pF)', id: 'pfarad', fn: SIPrefix('F', -4) },\n      { name: 'Femtofarad (fF)', id: 'ffarad', fn: SIPrefix('F', -5) },\n      { name: 'Henry (H)', id: 'henry', fn: SIPrefix('H') },\n      { name: 'Millihenry (mH)', id: 'mhenry', fn: SIPrefix('H', -1) },\n      { name: 'Microhenry (µH)', id: 'µhenry', fn: SIPrefix('H', -2) },\n      { name: 'Lumens (Lm)', id: 'lumens', fn: SIPrefix('Lm') },\n    ],\n  },\n  {\n    name: 'Flow',\n    formats: [\n      { name: 'Gallons/min (gpm)', id: 'flowgpm', fn: toFixedUnit('gpm') },\n      { name: 'Cubic meters/sec (cms)', id: 'flowcms', fn: toFixedUnit('cms') },\n      { name: 'Cubic feet/sec (cfs)', id: 'flowcfs', fn: toFixedUnit('cfs') },\n      { name: 'Cubic feet/min (cfm)', id: 'flowcfm', fn: toFixedUnit('cfm') },\n      { name: 'Litre/hour', id: 'litreh', fn: toFixedUnit('L/h') },\n      { name: 'Litre/min (L/min)', id: 'flowlpm', fn: toFixedUnit('L/min') },\n      { name: 'milliLitre/min (mL/min)', id: 'flowmlpm', fn: toFixedUnit('mL/min') },\n      { name: 'Lux (lx)', id: 'lux', fn: toFixedUnit('lux') },\n    ],\n  },\n  {\n    name: 'Force',\n    formats: [\n      { name: 'Newton-meters (Nm)', id: 'forceNm', fn: SIPrefix('Nm') },\n      { name: 'Kilonewton-meters (kNm)', id: 'forcekNm', fn: SIPrefix('Nm', 1) },\n      { name: 'Newtons (N)', id: 'forceN', fn: SIPrefix('N') },\n      { name: 'Kilonewtons (kN)', id: 'forcekN', fn: SIPrefix('N', 1) },\n    ],\n  },\n  {\n    name: 'Hash rate',\n    formats: [\n      { name: 'hashes/sec', id: 'Hs', fn: SIPrefix('H/s') },\n      { name: 'kilohashes/sec', id: 'KHs', fn: SIPrefix('H/s', 1) },\n      { name: 'megahashes/sec', id: 'MHs', fn: SIPrefix('H/s', 2) },\n      { name: 'gigahashes/sec', id: 'GHs', fn: SIPrefix('H/s', 3) },\n      { name: 'terahashes/sec', id: 'THs', fn: SIPrefix('H/s', 4) },\n      { name: 'petahashes/sec', id: 'PHs', fn: SIPrefix('H/s', 5) },\n      { name: 'exahashes/sec', id: 'EHs', fn: SIPrefix('H/s', 6) },\n    ],\n  },\n  {\n    name: 'Mass',\n    formats: [\n      { name: 'milligram (mg)', id: 'massmg', fn: SIPrefix('g', -1) },\n      { name: 'gram (g)', id: 'massg', fn: SIPrefix('g') },\n      { name: 'pound (lb)', id: 'masslb', fn: toFixedUnit('lb') },\n      { name: 'kilogram (kg)', id: 'masskg', fn: SIPrefix('g', 1) },\n      { name: 'metric ton (t)', id: 'masst', fn: toFixedUnit('t') },\n    ],\n  },\n  {\n    name: 'Length',\n    formats: [\n      { name: 'millimeter (mm)', id: 'lengthmm', fn: SIPrefix('m', -1) },\n      { name: 'inch (in)', id: 'lengthin', fn: toFixedUnit('in') },\n      { name: 'feet (ft)', id: 'lengthft', fn: toFixedUnit('ft') },\n      { name: 'meter (m)', id: 'lengthm', fn: SIPrefix('m') },\n      { name: 'kilometer (km)', id: 'lengthkm', fn: SIPrefix('m', 1) },\n      { name: 'mile (mi)', id: 'lengthmi', fn: toFixedUnit('mi') },\n    ],\n  },\n  {\n    name: 'Pressure',\n    formats: [\n      { name: 'Millibars', id: 'pressurembar', fn: SIPrefix('bar', -1) },\n      { name: 'Bars', id: 'pressurebar', fn: SIPrefix('bar') },\n      { name: 'Kilobars', id: 'pressurekbar', fn: SIPrefix('bar', 1) },\n      { name: 'Pascals', id: 'pressurepa', fn: SIPrefix('Pa') },\n      { name: 'Hectopascals', id: 'pressurehpa', fn: toFixedUnit('hPa') },\n      { name: 'Kilopascals', id: 'pressurekpa', fn: toFixedUnit('kPa') },\n      { name: 'Inches of mercury', id: 'pressurehg', fn: toFixedUnit('\"Hg') },\n      { name: 'PSI', id: 'pressurepsi', fn: scaledUnits(1000, ['psi', 'ksi', 'Mpsi']) },\n    ],\n  },\n  {\n    name: 'Radiation',\n    formats: [\n      { name: 'Becquerel (Bq)', id: 'radbq', fn: SIPrefix('Bq') },\n      { name: 'curie (Ci)', id: 'radci', fn: SIPrefix('Ci') },\n      { name: 'Gray (Gy)', id: 'radgy', fn: SIPrefix('Gy') },\n      { name: 'rad', id: 'radrad', fn: SIPrefix('rad') },\n      { name: 'Sievert (Sv)', id: 'radsv', fn: SIPrefix('Sv') },\n      { name: 'milliSievert (mSv)', id: 'radmsv', fn: SIPrefix('Sv', -1) },\n      { name: 'microSievert (µSv)', id: 'radusv', fn: SIPrefix('Sv', -2) },\n      { name: 'rem', id: 'radrem', fn: SIPrefix('rem') },\n      { name: 'Exposure (C/kg)', id: 'radexpckg', fn: SIPrefix('C/kg') },\n      { name: 'roentgen (R)', id: 'radr', fn: SIPrefix('R') },\n      { name: 'Sievert/hour (Sv/h)', id: 'radsvh', fn: SIPrefix('Sv/h') },\n      { name: 'milliSievert/hour (mSv/h)', id: 'radmsvh', fn: SIPrefix('Sv/h', -1) },\n      { name: 'microSievert/hour (µSv/h)', id: 'radusvh', fn: SIPrefix('Sv/h', -2) },\n    ],\n  },\n  {\n    name: 'Rotational Speed',\n    formats: [\n      { name: 'Revolutions per minute (rpm)', id: 'rotrpm', fn: toFixedUnit('rpm') },\n      { name: 'Hertz (Hz)', id: 'rothz', fn: SIPrefix('Hz') },\n      { name: 'Kilohertz (kHz)', id: 'rotkhz', fn: SIPrefix('Hz', 1) },\n      { name: 'Megahertz (MHz)', id: 'rotmhz', fn: SIPrefix('Hz', 2) },\n      { name: 'Gigahertz (GHz)', id: 'rotghz', fn: SIPrefix('Hz', 3) },\n      { name: 'Radians per second (rad/s)', id: 'rotrads', fn: toFixedUnit('rad/s') },\n      { name: 'Degrees per second (°/s)', id: 'rotdegs', fn: toFixedUnit('°/s') },\n    ],\n  },\n  {\n    name: 'Temperature',\n    formats: [\n      { name: 'Celsius (°C)', id: 'celsius', fn: toFixedUnit('°C') },\n      { name: 'Fahrenheit (°F)', id: 'fahrenheit', fn: toFixedUnit('°F') },\n      { name: 'Kelvin (K)', id: 'kelvin', fn: toFixedUnit('K') },\n    ],\n  },\n  {\n    name: 'Time',\n    formats: [\n      { name: 'Hertz (1/s)', id: 'hertz', fn: SIPrefix('Hz') },\n      { name: 'nanoseconds (ns)', id: 'ns', fn: toNanoSeconds },\n      { name: 'microseconds (µs)', id: 'µs', fn: toMicroSeconds },\n      { name: 'milliseconds (ms)', id: 'ms', fn: toMilliSeconds },\n      { name: 'seconds (s)', id: 's', fn: toSeconds },\n      { name: 'minutes (m)', id: 'm', fn: toMinutes },\n      { name: 'hours (h)', id: 'h', fn: toHours },\n      { name: 'days (d)', id: 'd', fn: toDays },\n      { name: 'duration (ms)', id: 'dtdurationms', fn: toDurationInMilliseconds },\n      { name: 'duration (s)', id: 'dtdurations', fn: toDurationInSeconds },\n      { name: 'duration (hh:mm:ss)', id: 'dthms', fn: toDurationInHoursMinutesSeconds },\n      { name: 'duration (d hh:mm:ss)', id: 'dtdhms', fn: toDurationInDaysHoursMinutesSeconds },\n      { name: 'Timeticks (s/100)', id: 'timeticks', fn: toTimeTicks },\n      { name: 'clock (ms)', id: 'clockms', fn: toClockMilliseconds },\n      { name: 'clock (s)', id: 'clocks', fn: toClockSeconds },\n    ],\n  },\n  {\n    name: 'Throughput',\n    formats: [\n      { name: 'counts/sec (cps)', id: 'cps', fn: simpleCountUnit('c/s') },\n      { name: 'ops/sec (ops)', id: 'ops', fn: simpleCountUnit('ops/s') },\n      { name: 'requests/sec (rps)', id: 'reqps', fn: simpleCountUnit('req/s') },\n      { name: 'reads/sec (rps)', id: 'rps', fn: simpleCountUnit('rd/s') },\n      { name: 'writes/sec (wps)', id: 'wps', fn: simpleCountUnit('wr/s') },\n      { name: 'I/O ops/sec (iops)', id: 'iops', fn: simpleCountUnit('io/s') },\n      { name: 'events/sec (eps)', id: 'eps', fn: simpleCountUnit('evt/s') },\n      { name: 'messages/sec (mps)', id: 'mps', fn: simpleCountUnit('msg/s') },\n      { name: 'records/sec (rps)', id: 'recps', fn: simpleCountUnit('rec/s') },\n      { name: 'rows/sec (rps)', id: 'rowsps', fn: simpleCountUnit('rows/s') },\n      { name: 'counts/min (cpm)', id: 'cpm', fn: simpleCountUnit('c/m') },\n      { name: 'ops/min (opm)', id: 'opm', fn: simpleCountUnit('ops/m') },\n      { name: 'requests/min (rpm)', id: 'reqpm', fn: simpleCountUnit('req/m') },\n      { name: 'reads/min (rpm)', id: 'rpm', fn: simpleCountUnit('rd/m') },\n      { name: 'writes/min (wpm)', id: 'wpm', fn: simpleCountUnit('wr/m') },\n      { name: 'events/min (epm)', id: 'epm', fn: simpleCountUnit('evts/m') },\n      { name: 'messages/min (mpm)', id: 'mpm', fn: simpleCountUnit('msgs/m') },\n      { name: 'records/min (rpm)', id: 'recpm', fn: simpleCountUnit('rec/m') },\n      { name: 'rows/min (rpm)', id: 'rowspm', fn: simpleCountUnit('rows/m') },\n    ],\n  },\n  {\n    name: 'Velocity',\n    formats: [\n      { name: 'meters/second (m/s)', id: 'velocityms', fn: toFixedUnit('m/s') },\n      { name: 'kilometers/hour (km/h)', id: 'velocitykmh', fn: toFixedUnit('km/h') },\n      { name: 'miles/hour (mph)', id: 'velocitymph', fn: toFixedUnit('mph') },\n      { name: 'knot (kn)', id: 'velocityknot', fn: toFixedUnit('kn') },\n    ],\n  },\n  {\n    name: 'Volume',\n    formats: [\n      { name: 'millilitre (mL)', id: 'mlitre', fn: SIPrefix('L', -1) },\n      { name: 'litre (L)', id: 'litre', fn: SIPrefix('L') },\n      { name: 'cubic meter', id: 'm3', fn: toFixedUnit('m³') },\n      { name: 'Normal cubic meter', id: 'Nm3', fn: toFixedUnit('Nm³') },\n      { name: 'cubic decimeter', id: 'dm3', fn: toFixedUnit('dm³') },\n      { name: 'gallons', id: 'gallons', fn: toFixedUnit('gal') },\n    ],\n  },\n  {\n    name: 'Boolean',\n    formats: [\n      { name: 'True / False', id: 'bool', fn: booleanValueFormatter('True', 'False') },\n      { name: 'Yes / No', id: 'bool_yes_no', fn: booleanValueFormatter('Yes', 'No') },\n      { name: 'On / Off', id: 'bool_on_off', fn: booleanValueFormatter('On', 'Off') },\n    ],\n  },\n];\n","import { clamp } from 'lodash';\n\nimport { DecimalCount } from '../types/displayValue';\nimport { TimeZone } from '../types/time';\n\nimport { getCategories } from './categories';\nimport { toDateTimeValueFormatter } from './dateTimeFormatters';\nimport { getOffsetFromSIPrefix, SIPrefix, currency } from './symbolFormatters';\n\nexport interface FormattedValue {\n  text: string;\n  prefix?: string;\n  suffix?: string;\n}\n\nexport function formattedValueToString(val: FormattedValue): string {\n  return `${val.prefix ?? ''}${val.text}${val.suffix ?? ''}`;\n}\n\nexport type ValueFormatter = (\n  value: number,\n  decimals?: DecimalCount,\n  scaledDecimals?: DecimalCount,\n  timeZone?: TimeZone,\n  showMs?: boolean\n) => FormattedValue;\n\nexport interface ValueFormat {\n  name: string;\n  id: string;\n  fn: ValueFormatter;\n}\n\nexport interface ValueFormatCategory {\n  name: string;\n  formats: ValueFormat[];\n}\n\nexport interface ValueFormatterIndex {\n  [id: string]: ValueFormatter;\n}\n\n// Globals & formats cache\nlet categories: ValueFormatCategory[] = [];\nconst index: ValueFormatterIndex = {};\nlet hasBuiltIndex = false;\n\nexport function toFixed(value: number, decimals?: DecimalCount): string {\n  if (value === null) {\n    return '';\n  }\n\n  if (value === Number.NEGATIVE_INFINITY || value === Number.POSITIVE_INFINITY) {\n    return value.toLocaleString();\n  }\n\n  if (decimals === null || decimals === undefined) {\n    decimals = getDecimalsForValue(value);\n  }\n\n  if (value === 0) {\n    return value.toFixed(decimals);\n  }\n\n  const factor = decimals ? Math.pow(10, Math.max(0, decimals)) : 1;\n  const formatted = String(Math.round(value * factor) / factor);\n\n  // if exponent return directly\n  if (formatted.indexOf('e') !== -1 || value === 0) {\n    return formatted;\n  }\n\n  const decimalPos = formatted.indexOf('.');\n  const precision = decimalPos === -1 ? 0 : formatted.length - decimalPos - 1;\n  if (precision < decimals) {\n    return (precision ? formatted : formatted + '.') + String(factor).slice(1, decimals - precision + 1);\n  }\n\n  return formatted;\n}\n\nfunction getDecimalsForValue(value: number): number {\n  const absValue = Math.abs(value);\n  const log10 = Math.floor(Math.log(absValue) / Math.LN10);\n  let dec = -log10 + 1;\n  const magn = Math.pow(10, -dec);\n  const norm = absValue / magn; // norm is between 1.0 and 10.0\n\n  // special case for 2.5, requires an extra decimal\n  if (norm > 2.25) {\n    ++dec;\n  }\n\n  if (value % 1 === 0) {\n    dec = 0;\n  }\n\n  const decimals = Math.max(0, dec);\n  return decimals;\n}\n\nexport function toFixedScaled(value: number, decimals: DecimalCount, ext?: string): FormattedValue {\n  return {\n    text: toFixed(value, decimals),\n    suffix: appendPluralIf(ext, Math.abs(value) > 1),\n  };\n}\n\nfunction appendPluralIf(ext: string | undefined, condition: boolean): string | undefined {\n  if (!condition) {\n    return ext;\n  }\n\n  switch (ext) {\n    case ' min':\n    case ' hour':\n    case ' day':\n    case ' week':\n    case ' year':\n      return `${ext}s`;\n    default:\n      return ext;\n  }\n}\n\nexport function toFixedUnit(unit: string, asPrefix?: boolean): ValueFormatter {\n  return (size: number, decimals?: DecimalCount) => {\n    if (size === null) {\n      return { text: '' };\n    }\n    const text = toFixed(size, decimals);\n    if (unit) {\n      if (asPrefix) {\n        return { text, prefix: unit };\n      }\n      return { text, suffix: ' ' + unit };\n    }\n    return { text };\n  };\n}\n\nexport function isBooleanUnit(unit?: string) {\n  return unit && unit.startsWith('bool');\n}\n\nexport function booleanValueFormatter(t: string, f: string): ValueFormatter {\n  return (value) => {\n    return { text: value ? t : f };\n  };\n}\n\nconst logb = (b: number, x: number) => Math.log10(x) / Math.log10(b);\n\nexport function scaledUnits(factor: number, extArray: string[], offset = 0): ValueFormatter {\n  return (size: number, decimals?: DecimalCount) => {\n    if (size === null || size === undefined) {\n      return { text: '' };\n    }\n\n    if (size === Number.NEGATIVE_INFINITY || size === Number.POSITIVE_INFINITY || isNaN(size)) {\n      return { text: size.toLocaleString() };\n    }\n\n    const siIndex = size === 0 ? 0 : Math.floor(logb(factor, Math.abs(size)));\n    const suffix = extArray[clamp(offset + siIndex, 0, extArray.length - 1)];\n\n    return {\n      text: toFixed(size / factor ** clamp(siIndex, -offset, extArray.length - offset - 1), decimals),\n      suffix,\n    };\n  };\n}\n\nexport function locale(value: number, decimals: DecimalCount): FormattedValue {\n  if (value == null) {\n    return { text: '' };\n  }\n  return {\n    text: value.toLocaleString(undefined, { maximumFractionDigits: decimals ?? undefined }),\n  };\n}\n\nexport function simpleCountUnit(symbol: string): ValueFormatter {\n  const units = ['', 'K', 'M', 'B', 'T'];\n  const scaler = scaledUnits(1000, units);\n  return (size: number, decimals?: DecimalCount, scaledDecimals?: DecimalCount) => {\n    if (size === null) {\n      return { text: '' };\n    }\n    const v = scaler(size, decimals, scaledDecimals);\n    v.suffix += ' ' + symbol;\n    return v;\n  };\n}\n\nexport function stringFormater(value: number): FormattedValue {\n  return { text: `${value}` };\n}\n\nfunction buildFormats() {\n  categories = getCategories();\n\n  for (const cat of categories) {\n    for (const format of cat.formats) {\n      index[format.id] = format.fn;\n    }\n  }\n\n  // Resolve units pointing to old IDs\n  [{ from: 'farenheit', to: 'fahrenheit' }].forEach((alias) => {\n    const f = index[alias.to];\n    if (f) {\n      index[alias.from] = f;\n    }\n  });\n\n  hasBuiltIndex = true;\n}\n\nexport function getValueFormat(id?: string | null): ValueFormatter {\n  if (!id) {\n    return toFixedUnit('');\n  }\n\n  if (!hasBuiltIndex) {\n    buildFormats();\n  }\n\n  const fmt = index[id];\n\n  if (!fmt && id) {\n    let idx = id.indexOf(':');\n\n    if (idx > 0) {\n      const key = id.substring(0, idx);\n      const sub = id.substring(idx + 1);\n\n      if (key === 'prefix') {\n        return toFixedUnit(sub, true);\n      }\n\n      if (key === 'suffix') {\n        return toFixedUnit(sub, false);\n      }\n\n      if (key === 'time') {\n        return toDateTimeValueFormatter(sub);\n      }\n\n      if (key === 'si') {\n        const offset = getOffsetFromSIPrefix(sub.charAt(0));\n        const unit = offset === 0 ? sub : sub.substring(1);\n        return SIPrefix(unit, offset);\n      }\n\n      if (key === 'count') {\n        return simpleCountUnit(sub);\n      }\n\n      if (key === 'currency') {\n        return currency(sub);\n      }\n\n      if (key === 'bool') {\n        idx = sub.indexOf('/');\n        if (idx >= 0) {\n          const t = sub.substring(0, idx);\n          const f = sub.substring(idx + 1);\n          return booleanValueFormatter(t, f);\n        }\n        return booleanValueFormatter(sub, '-');\n      }\n    }\n\n    return toFixedUnit(id);\n  }\n\n  return fmt;\n}\n\nexport function getValueFormatterIndex(): ValueFormatterIndex {\n  if (!hasBuiltIndex) {\n    buildFormats();\n  }\n\n  return index;\n}\n\nexport function getValueFormats() {\n  if (!hasBuiltIndex) {\n    buildFormats();\n  }\n\n  return categories.map((cat) => {\n    return {\n      text: cat.name,\n      submenu: cat.formats.map((format) => {\n        return {\n          text: format.name,\n          value: format.id,\n        };\n      }),\n    };\n  });\n}\n","// Libraries\nimport { toString, toNumber as _toNumber, isEmpty, isBoolean, isArray, join } from 'lodash';\n\n// Types\nimport { getFieldTypeFromValue } from '../dataframe/processDataFrame';\nimport { toUtc } from '../datetime/moment_wrapper';\nimport { dateTimeParse } from '../datetime/parser';\nimport { GrafanaTheme2 } from '../themes/types';\nimport { KeyValue } from '../types/data';\nimport { Field, FieldType } from '../types/dataFrame';\nimport { DecimalCount, DisplayProcessor, DisplayValue } from '../types/displayValue';\nimport { TimeZone } from '../types/time';\nimport { anyToNumber } from '../utils/anyToNumber';\nimport { getValueMappingResult } from '../utils/valueMappings';\nimport { FormattedValue, getValueFormat, isBooleanUnit } from '../valueFormats/valueFormats';\n\nimport { getScaleCalculator } from './scale';\n\ninterface DisplayProcessorOptions {\n  field: Partial<Field>;\n  /**\n   * Will pick browser timezone if not defined\n   */\n  timeZone?: TimeZone;\n  /**\n   * Will pick 'dark' if not defined\n   */\n  theme: GrafanaTheme2;\n}\n\n// Reasonable units for time\nconst timeFormats: KeyValue<boolean> = {\n  dateTimeAsIso: true,\n  dateTimeAsIsoNoDateIfToday: true,\n  dateTimeAsUS: true,\n  dateTimeAsUSNoDateIfToday: true,\n  dateTimeAsLocal: true,\n  dateTimeAsLocalNoDateIfToday: true,\n  dateTimeFromNow: true,\n};\n\nexport function getDisplayProcessor(options?: DisplayProcessorOptions): DisplayProcessor {\n  if (!options || isEmpty(options) || !options.field) {\n    return toStringProcessor;\n  }\n\n  const field = options.field as Field;\n  const config = field.config ?? {};\n  const { palette } = options.theme.visualization;\n\n  let unit = config.unit;\n  let hasDateUnit = unit && (timeFormats[unit] || unit.startsWith('time:'));\n  let showMs = false;\n\n  if (field.type === FieldType.time && !hasDateUnit) {\n    unit = `dateTimeAsSystem`;\n    hasDateUnit = true;\n    if (field.values && field.values.length > 1) {\n      let start = field.values[0];\n      let end = field.values[field.values.length - 1];\n      if (typeof start === 'string') {\n        start = dateTimeParse(start).unix();\n        end = dateTimeParse(end).unix();\n      } else {\n        start /= 1e3;\n        end /= 1e3;\n      }\n      showMs = Math.abs(end - start) < 60; //show ms when minute or less\n    }\n  } else if (field.type === FieldType.boolean) {\n    if (!isBooleanUnit(unit)) {\n      unit = 'bool';\n    }\n  } else if (!unit && field.type === FieldType.string) {\n    unit = 'string';\n  }\n\n  const hasCurrencyUnit = unit?.startsWith('currency');\n  const hasBoolUnit = isBooleanUnit(unit);\n  const isNumType = field.type === FieldType.number;\n  const isLocaleFormat = unit === 'locale';\n  const canTrimTrailingDecimalZeros =\n    !hasDateUnit && !hasCurrencyUnit && !hasBoolUnit && !isLocaleFormat && isNumType && config.decimals == null;\n\n  const formatFunc = getValueFormat(unit || 'none');\n  const scaleFunc = getScaleCalculator(field, options.theme);\n\n  return (value: unknown, adjacentDecimals?: DecimalCount) => {\n    const { mappings } = config;\n    const isStringUnit = unit === 'string';\n\n    if (hasDateUnit && typeof value === 'string') {\n      value = toUtc(value).valueOf();\n    }\n\n    let numeric = isStringUnit ? NaN : anyToNumber(value);\n    let text: string | undefined;\n    let prefix: string | undefined;\n    let suffix: string | undefined;\n    let color: string | undefined;\n    let icon: string | undefined;\n    let percent: number | undefined;\n\n    if (mappings && mappings.length > 0) {\n      const mappingResult = getValueMappingResult(mappings, value);\n\n      if (mappingResult) {\n        if (mappingResult.text != null) {\n          text = mappingResult.text;\n        }\n\n        if (mappingResult.color != null) {\n          color = options.theme.visualization.getColorByName(mappingResult.color);\n        }\n\n        if (mappingResult.icon != null) {\n          icon = mappingResult.icon;\n        }\n      }\n    } else if (field.type === FieldType.enum) {\n      // Apply enum display handling if field is enum type and no mappings are specified\n      if (value == null) {\n        return {\n          text: '',\n          numeric: NaN,\n        };\n      }\n\n      const enumIndex = +value;\n      if (config && config.type && config.type.enum) {\n        const { text: enumText, color: enumColor } = config.type.enum;\n\n        text = enumText ? enumText[enumIndex] : `${value}`;\n        // If no color specified in enum field config we will fallback to iterating through the theme palette\n        color = enumColor ? enumColor[enumIndex] : undefined;\n\n        if (color == null) {\n          const namedColor = palette[enumIndex % palette.length];\n          color = options.theme.visualization.getColorByName(namedColor);\n        }\n      }\n    }\n\n    if (!Number.isNaN(numeric)) {\n      if (text == null && !isBoolean(value)) {\n        let v: FormattedValue;\n\n        if (canTrimTrailingDecimalZeros && adjacentDecimals != null) {\n          v = formatFunc(numeric, adjacentDecimals, null, options.timeZone, showMs);\n\n          // if no explicit decimals config, we strip trailing zeros e.g. 60.00 -> 60\n          // this is needed because we may have determined the minimum determined `adjacentDecimals` for y tick increments based on\n          // e.g. 'seconds' field unit (0.15s, 0.20s, 0.25s), but then formatFunc decided to return milli or nanos (150, 200, 250)\n          // so we end up with excess precision: 150.00, 200.00, 250.00\n          v.text = +v.text + '';\n        } else {\n          v = formatFunc(numeric, config.decimals, null, options.timeZone, showMs);\n        }\n\n        text = v.text;\n        suffix = v.suffix;\n        prefix = v.prefix;\n      }\n\n      // Return the value along with scale info\n      if (color == null) {\n        const scaleResult = scaleFunc(numeric);\n        color = scaleResult.color;\n        percent = scaleResult.percent;\n      }\n    }\n\n    if (text == null && isArray(value)) {\n      text = join(value, ', ');\n    }\n\n    if (text == null) {\n      text = toString(value);\n      if (!text) {\n        if (config.noValue) {\n          text = config.noValue;\n        } else {\n          text = ''; // No data?\n        }\n      }\n    }\n\n    if (!color) {\n      const scaleResult = scaleFunc(-Infinity);\n      color = scaleResult.color;\n      percent = scaleResult.percent;\n    }\n\n    const display: DisplayValue = {\n      text,\n      numeric,\n      prefix,\n      suffix,\n      color,\n    };\n\n    if (icon != null) {\n      display.icon = icon;\n    }\n\n    if (percent != null) {\n      display.percent = percent;\n    }\n\n    return display;\n  };\n}\n\nfunction toStringProcessor(value: unknown): DisplayValue {\n  return { text: toString(value), numeric: anyToNumber(value) };\n}\n\nexport function getRawDisplayProcessor(): DisplayProcessor {\n  return (value: unknown) => ({\n    text: getFieldTypeFromValue(value) === 'other' ? `${JSON.stringify(value, getCircularReplacer())}` : `${value}`,\n    numeric: null as unknown as number,\n  });\n}\n\nconst getCircularReplacer = () => {\n  const seen = new WeakSet();\n  return (_key: string, value: object | null) => {\n    if (typeof value === 'object' && value !== null) {\n      if (seen.has(value)) {\n        return;\n      }\n      seen.add(value);\n    }\n    return value;\n  };\n};\n","import { ComponentType } from 'react';\n\nimport { EventBus } from '../events/types';\nimport { DataFrame } from '../types/dataFrame';\nimport { VariableSuggestionsScope, VariableSuggestion } from '../types/dataLink';\nimport { InterpolateFunction } from '../types/panel';\nimport { Registry, RegistryItem } from '../utils/Registry';\n\nimport { FieldConfigOptionsRegistry } from './FieldConfigOptionsRegistry';\n\nexport interface StandardEditorContext<TOptions, TState = any> {\n  data: DataFrame[]; // All results\n  replaceVariables?: InterpolateFunction;\n  eventBus?: EventBus;\n  getSuggestions?: (scope?: VariableSuggestionsScope) => VariableSuggestion[];\n  options?: TOptions;\n  instanceState?: TState;\n  isOverride?: boolean;\n  annotations?: DataFrame[];\n}\n\nexport interface StandardEditorProps<TValue = any, TSettings = any, TOptions = any, TState = any> {\n  value: TValue;\n  onChange: (value?: TValue) => void;\n  context: StandardEditorContext<TOptions, TState>;\n  id?: string;\n\n  item: RegistryItem & {\n    settings?: TSettings;\n  };\n}\n\nexport interface StandardEditorsRegistryItem<TValue = any, TSettings = any> extends RegistryItem {\n  editor: ComponentType<StandardEditorProps<TValue, TSettings>>;\n  settings?: TSettings;\n}\nexport const standardFieldConfigEditorRegistry = new FieldConfigOptionsRegistry();\n\nexport const standardEditorsRegistry = new Registry<StandardEditorsRegistryItem>();\n","import { isNumber, set, unset, get, cloneDeep } from 'lodash';\nimport { useMemo, useRef } from 'react';\nimport usePrevious from 'react-use/lib/usePrevious';\n\nimport { ThresholdsMode, VariableFormatID } from '@grafana/schema';\n\nimport { compareArrayValues, compareDataFrameStructures } from '../dataframe/frameComparisons';\nimport { guessFieldTypeForField } from '../dataframe/processDataFrame';\nimport { PanelPlugin } from '../panel/PanelPlugin';\nimport { asHexString } from '../themes/colorManipulator';\nimport { GrafanaTheme2 } from '../themes/types';\nimport { ReducerID, reduceField } from '../transformations/fieldReducer';\nimport { fieldMatchers } from '../transformations/matchers';\nimport { ScopedVars, DataContextScopedVar } from '../types/ScopedVars';\nimport { DataFrame, NumericRange, FieldType, Field, ValueLinkConfig, FieldConfig } from '../types/dataFrame';\nimport { LinkModel, DataLink } from '../types/dataLink';\nimport { DisplayProcessor, DisplayValue, DecimalCount } from '../types/displayValue';\nimport { FieldColorModeId } from '../types/fieldColor';\nimport {\n  DynamicConfigValue,\n  ApplyFieldOverrideOptions,\n  FieldOverrideContext,\n  FieldConfigPropertyItem,\n  DataLinkPostProcessor,\n  FieldConfigSource,\n} from '../types/fieldOverrides';\nimport { InterpolateFunction, PanelData } from '../types/panel';\nimport { TimeZone } from '../types/time';\nimport { FieldMatcher } from '../types/transformations';\nimport { mapInternalLinkToExplore } from '../utils/dataLinks';\nimport { locationUtil } from '../utils/location';\n\nimport { FieldConfigOptionsRegistry } from './FieldConfigOptionsRegistry';\nimport { getDisplayProcessor, getRawDisplayProcessor } from './displayProcessor';\nimport { getMinMaxAndDelta } from './scale';\nimport { standardFieldConfigEditorRegistry } from './standardFieldConfigEditorRegistry';\n\ninterface OverrideProps {\n  match: FieldMatcher;\n  properties: DynamicConfigValue[];\n}\n\nexport function findNumericFieldMinMax(data: DataFrame[]): NumericRange {\n  let min: number | null = null;\n  let max: number | null = null;\n\n  const reducers = [ReducerID.min, ReducerID.max];\n\n  for (const frame of data) {\n    for (const field of frame.fields) {\n      if (field.type === FieldType.number) {\n        const stats = reduceField({ field, reducers });\n        const statsMin = stats[ReducerID.min];\n        const statsMax = stats[ReducerID.max];\n\n        if (min === null || statsMin < min) {\n          min = statsMin;\n        }\n\n        if (max === null || statsMax > max) {\n          max = statsMax;\n        }\n      }\n    }\n  }\n\n  return { min, max, delta: (max ?? 0) - (min ?? 0) };\n}\n\n/**\n * Return a copy of the DataFrame with all rules applied\n */\nexport function applyFieldOverrides(options: ApplyFieldOverrideOptions): DataFrame[] {\n  if (!options.data) {\n    return [];\n  }\n\n  const source = options.fieldConfig;\n  if (!source) {\n    return options.data;\n  }\n\n  const fieldConfigRegistry = options.fieldConfigRegistry ?? standardFieldConfigEditorRegistry;\n\n  let seriesIndex = 0;\n  let globalRange: NumericRange | undefined = undefined;\n\n  // Prepare the Matchers\n  const override: OverrideProps[] = [];\n  if (source.overrides) {\n    for (const rule of source.overrides) {\n      const info = fieldMatchers.get(rule.matcher.id);\n      if (info) {\n        override.push({\n          match: info.get(rule.matcher.options),\n          properties: rule.properties,\n        });\n      }\n    }\n  }\n\n  return options.data.map((originalFrame, index) => {\n    // Need to define this new frame here as it's passed to the getLinkSupplier function inside the fields loop\n    const newFrame: DataFrame = { ...originalFrame };\n    // Copy fields\n    newFrame.fields = newFrame.fields.map((field) => {\n      return {\n        ...field,\n        config: cloneDeep(field.config),\n        state: {\n          ...field.state,\n        },\n      };\n    });\n\n    for (const field of newFrame.fields) {\n      const config = field.config;\n\n      field.state!.scopedVars = {\n        __dataContext: {\n          value: {\n            data: options.data!,\n            frame: newFrame,\n            frameIndex: index,\n            field: field,\n          },\n        },\n      };\n\n      const context = {\n        field: field,\n        data: options.data!,\n        dataFrameIndex: index,\n        replaceVariables: options.replaceVariables,\n        fieldConfigRegistry: fieldConfigRegistry,\n      };\n\n      // Anything in the field config that's not set by the datasource\n      // will be filled in by panel's field configuration\n      setFieldConfigDefaults(config, source.defaults, context);\n\n      // Find any matching rules and then override\n      for (const rule of override) {\n        if (rule.match(field, newFrame, options.data!)) {\n          for (const prop of rule.properties) {\n            // config.scopedVars is set already here\n            setDynamicConfigValue(config, prop, context);\n          }\n        }\n      }\n\n      // Try harder to set a real value that is not 'other'\n      let type = field.type;\n      if (!type || type === FieldType.other) {\n        const t = guessFieldTypeForField(field);\n        if (t) {\n          type = t;\n        }\n      }\n\n      // Set the Min/Max value automatically\n      const { range, newGlobalRange } = calculateRange(config, field, globalRange, options.data!);\n      globalRange = newGlobalRange;\n\n      // Clear any cached displayName as it can change during field overrides process\n      field.state!.displayName = null;\n      field.state!.seriesIndex = seriesIndex;\n      field.state!.range = range;\n      field.type = type;\n\n      // Some color modes needs series index to assign field color so we count\n      // up series index here but ignore time fields\n      if (field.type !== FieldType.time) {\n        seriesIndex++;\n      }\n\n      // and set the display processor using it\n      field.display = getDisplayProcessor({\n        field: field,\n        theme: options.theme,\n        timeZone: options.timeZone,\n      });\n\n      // Wrap the display with a cache to avoid double calls\n      if (field.config.unit !== 'dateTimeFromNow') {\n        field.display = cachingDisplayProcessor(field.display, 2500);\n      }\n\n      // Attach data links supplier\n      field.getLinks = getLinksSupplier(\n        newFrame,\n        field,\n        field.state!.scopedVars,\n        context.replaceVariables,\n        options.timeZone,\n        options.dataLinkPostProcessor\n      );\n\n      if (field.type === FieldType.nestedFrames) {\n        for (const nestedFrames of field.values) {\n          for (let nfIndex = 0; nfIndex < nestedFrames.length; nfIndex++) {\n            for (const valueField of nestedFrames[nfIndex].fields) {\n              // Get display processor for nested fields\n              valueField.display = getDisplayProcessor({\n                field: valueField,\n                theme: options.theme,\n                timeZone: options.timeZone,\n              });\n\n              valueField.state = {\n                scopedVars: {\n                  __dataContext: {\n                    value: {\n                      data: nestedFrames,\n                      frame: nestedFrames[nfIndex],\n                      frameIndex: nfIndex,\n                      field: valueField,\n                    },\n                  },\n                },\n              };\n\n              valueField.getLinks = getLinksSupplier(\n                nestedFrames[nfIndex],\n                valueField,\n                valueField.state!.scopedVars,\n                context.replaceVariables,\n                options.timeZone,\n                options.dataLinkPostProcessor\n              );\n            }\n          }\n        }\n      }\n    }\n\n    return newFrame;\n  });\n}\n\nfunction calculateRange(\n  config: FieldConfig,\n  field: Field,\n  globalRange: NumericRange | undefined,\n  data: DataFrame[]\n): { range?: { min?: number | null; max?: number | null; delta: number }; newGlobalRange: NumericRange | undefined } {\n  // Only calculate ranges when the field is a number and one of min/max is set to auto.\n  if (field.type !== FieldType.number || (isNumber(config.min) && isNumber(config.max))) {\n    return { newGlobalRange: globalRange };\n  }\n\n  // Calculate the min/max from the field.\n  if (config.fieldMinMax) {\n    const localRange = getMinMaxAndDelta(field);\n    const min = config.min ?? localRange.min;\n    const max = config.max ?? localRange.max;\n    return { range: { min, max, delta: max! - min! }, newGlobalRange: globalRange };\n  }\n\n  // We use the global range if supplied, otherwise we calculate it.\n  const newGlobalRange = globalRange ?? findNumericFieldMinMax(data);\n  const min = config.min ?? newGlobalRange!.min;\n  const max = config.max ?? newGlobalRange!.max;\n  return { range: { min, max, delta: max! - min! }, newGlobalRange };\n}\n\n// this is a significant optimization for streaming, where we currently re-process all values in the buffer on ech update\n// via field.display(value). this can potentially be removed once we...\n// 1. process data packets incrementally and/if cache the results in the streaming datafame (maybe by buffer index)\n// 2. have the ability to selectively get display color or text (but not always both, which are each quite expensive)\n// 3. sufficently optimize text formatting and threshold color determinitation\nfunction cachingDisplayProcessor(disp: DisplayProcessor, maxCacheSize = 2500): DisplayProcessor {\n  type dispCache = Map<unknown, DisplayValue>;\n  // decimals -> cache mapping, -1 is unspecified decimals\n  const caches = new Map<number, dispCache>();\n\n  // pre-init caches for up to 15 decimals\n  for (let i = -1; i <= 15; i++) {\n    caches.set(i, new Map());\n  }\n\n  return (value: unknown, decimals?: DecimalCount) => {\n    let cache = caches.get(decimals ?? -1)!;\n\n    let v = cache.get(value);\n\n    if (!v) {\n      // Don't grow too big\n      if (cache.size === maxCacheSize) {\n        cache.clear();\n      }\n\n      v = disp(value, decimals);\n\n      // convert to hex6 or hex8 so downstream we can cheaply test for alpha (and set new alpha)\n      // via a simple length check (in colorManipulator) rather using slow parsing via tinycolor\n      if (v.color) {\n        v.color = asHexString(v.color);\n      }\n\n      cache.set(value, v);\n    }\n\n    return v;\n  };\n}\n\nexport interface FieldOverrideEnv extends FieldOverrideContext {\n  fieldConfigRegistry: FieldConfigOptionsRegistry;\n}\n\nexport function setDynamicConfigValue(config: FieldConfig, value: DynamicConfigValue, context: FieldOverrideEnv) {\n  const reg = context.fieldConfigRegistry;\n  const item = reg.getIfExists(value.id);\n\n  if (!item) {\n    return;\n  }\n\n  const val = item.process(value.value, context, item.settings);\n\n  const remove = val === undefined || val === null;\n\n  if (remove) {\n    if (item.isCustom && config.custom) {\n      unset(config.custom, item.path);\n    } else {\n      unset(config, item.path);\n    }\n  } else {\n    if (item.isCustom) {\n      if (!config.custom) {\n        config.custom = {};\n      }\n      set(config.custom, item.path, val);\n    } else {\n      set(config, item.path, val);\n    }\n  }\n}\n\n// config -> from DS\n// defaults -> from Panel config\nexport function setFieldConfigDefaults(config: FieldConfig, defaults: FieldConfig, context: FieldOverrideEnv) {\n  // For cases where we have links on the datasource config and the panel config, we need to merge them\n  if (config.links && defaults.links) {\n    // Combine the data source links and the panel default config links\n    config.links = [...config.links, ...defaults.links];\n  }\n\n  // if we have a base threshold set by default but not on the config, we need to merge it in\n  const defaultBaseStep =\n    defaults?.thresholds?.mode === ThresholdsMode.Absolute &&\n    defaults.thresholds?.steps.find((step) => step.value === -Infinity);\n  if (\n    config.thresholds?.mode === ThresholdsMode.Absolute &&\n    !config.thresholds.steps.some((step) => step.value === -Infinity) &&\n    defaultBaseStep\n  ) {\n    config.thresholds.steps = [defaultBaseStep, ...config.thresholds.steps];\n  }\n  for (const fieldConfigProperty of context.fieldConfigRegistry.list()) {\n    if (fieldConfigProperty.isCustom && !config.custom) {\n      config.custom = {};\n    }\n    processFieldConfigValue(\n      fieldConfigProperty.isCustom ? config.custom : config,\n      fieldConfigProperty.isCustom ? defaults.custom : defaults,\n      fieldConfigProperty,\n      context\n    );\n  }\n\n  validateFieldConfig(config);\n}\n\nfunction processFieldConfigValue(\n  destination: Record<string, unknown>, // it's mutable\n  source: Record<string, unknown>,\n  fieldConfigProperty: FieldConfigPropertyItem,\n  context: FieldOverrideEnv\n) {\n  const currentConfig = get(destination, fieldConfigProperty.path);\n  if (currentConfig === null || currentConfig === undefined) {\n    const item = context.fieldConfigRegistry.getIfExists(fieldConfigProperty.id);\n    if (!item) {\n      return;\n    }\n\n    if (item && item.shouldApply(context.field!)) {\n      const val = item.process(get(source, item.path), context, item.settings);\n      if (val !== undefined && val !== null) {\n        set(destination, item.path, val);\n      }\n    }\n  }\n}\n\n/**\n * This checks that all options on FieldConfig make sense.  It mutates any value that needs\n * fixed.  In particular this makes sure that the first threshold value is -Infinity (not valid in JSON)\n */\nexport function validateFieldConfig(config: FieldConfig) {\n  const { thresholds } = config;\n\n  if (!config.color) {\n    if (thresholds) {\n      config.color = {\n        mode: FieldColorModeId.Thresholds,\n      };\n    }\n    // No Color settings\n  } else if (!config.color.mode) {\n    // Without a mode, skip color altogether\n    delete config.color;\n  }\n\n  // Verify that max > min (swap if necessary)\n  if (config.hasOwnProperty('min') && config.hasOwnProperty('max') && config.min! > config.max!) {\n    const tmp = config.max;\n    config.max = config.min;\n    config.min = tmp;\n  }\n}\n\nconst defaultInternalLinkPostProcessor: DataLinkPostProcessor = (options) => {\n  // For internal links at the moment only destination is Explore.\n  const { link, linkModel, dataLinkScopedVars, field, replaceVariables } = options;\n\n  if (link.internal) {\n    return mapInternalLinkToExplore({\n      link,\n      internalLink: link.internal,\n      scopedVars: dataLinkScopedVars,\n      field,\n      range: link.internal.range,\n      replaceVariables,\n    });\n  } else {\n    return linkModel;\n  }\n};\n\nexport const getLinksSupplier =\n  (\n    frame: DataFrame,\n    field: Field,\n    fieldScopedVars: ScopedVars,\n    replaceVariables: InterpolateFunction,\n    timeZone?: TimeZone,\n    dataLinkPostProcessor?: DataLinkPostProcessor\n  ) =>\n  (config: ValueLinkConfig): Array<LinkModel<Field>> => {\n    if (!field.config.links || field.config.links.length === 0) {\n      return [];\n    }\n\n    const linkModels = field.config.links.map((link: DataLink) => {\n      const dataContext: DataContextScopedVar = getFieldDataContextClone(frame, field, fieldScopedVars);\n      const dataLinkScopedVars = {\n        ...fieldScopedVars,\n        __dataContext: dataContext,\n      };\n\n      const boundReplaceVariables: InterpolateFunction = (value, scopedVars, format) =>\n        replaceVariables(value, { ...dataLinkScopedVars, ...scopedVars }, format);\n\n      // We are not displaying reduction result\n      if (config.valueRowIndex !== undefined && !isNaN(config.valueRowIndex)) {\n        dataContext.value.rowIndex = config.valueRowIndex;\n      } else {\n        dataContext.value.calculatedValue = config.calculatedValue;\n      }\n\n      let linkModel: LinkModel<Field>;\n\n      let href =\n        link.onClick || !link.onBuildUrl\n          ? link.url\n          : link.onBuildUrl({\n              origin: field,\n              replaceVariables: boundReplaceVariables,\n            });\n\n      if (href) {\n        href = locationUtil.assureBaseUrl(href.replace(/\\n/g, ''));\n        href = replaceVariables(href, dataLinkScopedVars, VariableFormatID.UriEncode);\n        href = locationUtil.processUrl(href);\n      }\n\n      if (link.onClick) {\n        linkModel = {\n          href,\n          title: replaceVariables(link.title || '', dataLinkScopedVars),\n          target: link.targetBlank ? '_blank' : undefined,\n          onClick: (evt: MouseEvent, origin: Field) => {\n            link.onClick!({\n              origin: origin ?? field,\n              e: evt,\n              replaceVariables: boundReplaceVariables,\n            });\n          },\n          origin: field,\n          oneClick: link.oneClick ?? false,\n        };\n      } else {\n        linkModel = {\n          href,\n          title: replaceVariables(link.title || '', dataLinkScopedVars),\n          target: link.targetBlank ? '_blank' : undefined,\n          origin: field,\n          oneClick: link.oneClick ?? false,\n        };\n      }\n\n      return (dataLinkPostProcessor || defaultInternalLinkPostProcessor)({\n        frame,\n        field,\n        dataLinkScopedVars,\n        replaceVariables,\n        config,\n        link,\n        linkModel,\n      });\n    });\n\n    return linkModels.filter((link): link is LinkModel => !!link);\n  };\n\n/**\n * Return a copy of the DataFrame with raw data\n */\nexport function applyRawFieldOverrides(data: DataFrame[]): DataFrame[] {\n  if (!data || data.length === 0) {\n    return [];\n  }\n\n  const newData = [...data];\n  const processor = getRawDisplayProcessor();\n\n  for (let frameIndex = 0; frameIndex < newData.length; frameIndex++) {\n    const newFrame = { ...newData[frameIndex] };\n    const newFields = [...newFrame.fields];\n\n    for (let fieldIndex = 0; fieldIndex < newFields.length; fieldIndex++) {\n      newFields[fieldIndex] = {\n        ...newFields[fieldIndex],\n        display: processor,\n      };\n    }\n\n    newData[frameIndex] = {\n      ...newFrame,\n      fields: newFields,\n    };\n  }\n\n  return newData;\n}\n\n/**\n * @internal\n */\nexport function useFieldOverrides(\n  plugin: PanelPlugin | undefined,\n  fieldConfig: FieldConfigSource | undefined,\n  data: PanelData | undefined,\n  timeZone: string,\n  theme: GrafanaTheme2,\n  replace: InterpolateFunction,\n  dataLinkPostProcessor?: DataLinkPostProcessor\n): PanelData | undefined {\n  const fieldConfigRegistry = plugin?.fieldConfigRegistry;\n  const structureRev = useRef(0);\n  const prevSeries = usePrevious(data?.series);\n\n  return useMemo(() => {\n    if (!fieldConfigRegistry || !fieldConfig || !data) {\n      return;\n    }\n\n    const series = data?.series;\n\n    if (\n      data.structureRev == null &&\n      series &&\n      prevSeries &&\n      !compareArrayValues(series, prevSeries, compareDataFrameStructures)\n    ) {\n      structureRev.current++;\n    }\n\n    const panelData: PanelData = {\n      structureRev: structureRev.current,\n      ...data,\n      series: applyFieldOverrides({\n        data: series,\n        fieldConfig,\n        fieldConfigRegistry,\n        replaceVariables: replace,\n        theme,\n        timeZone,\n        dataLinkPostProcessor,\n      }),\n    };\n    if (data.annotations && data.annotations.length > 0) {\n      panelData.annotations = applyFieldOverrides({\n        data: data.annotations,\n        fieldConfig: {\n          defaults: {},\n          overrides: [],\n        },\n        replaceVariables: replace,\n        theme,\n        timeZone,\n        dataLinkPostProcessor,\n      });\n    }\n    return panelData;\n  }, [fieldConfigRegistry, fieldConfig, data, prevSeries, timeZone, theme, replace, dataLinkPostProcessor]);\n}\n\n/**\n * Clones the existing dataContext or creates a new one\n */\nexport function getFieldDataContextClone(frame: DataFrame, field: Field, fieldScopedVars: ScopedVars) {\n  if (fieldScopedVars?.__dataContext) {\n    return {\n      value: {\n        ...fieldScopedVars.__dataContext.value,\n      },\n    };\n  }\n\n  return { value: { frame, field, data: [frame] } };\n}\n","import { toNumber } from 'lodash';\n\nimport { DataFrame } from '../types/dataFrame';\nimport { DisplayValue } from '../types/displayValue';\nimport { TimeZone } from '../types/time';\nimport { formattedValueToString } from '../valueFormats/valueFormats';\n\nimport { getDisplayProcessor } from './displayProcessor';\n\n/**\n * Creates a proxy object that allows accessing fields on dataFrame through various means and then returns it's\n * display value. This is mainly useful for example in data links interpolation where you can easily create a scoped\n * variable that will allow you to access dataFrame data with ${__data.fields.fieldName}.\n * Allows accessing fields by name, index, displayName or 'name' label\n *\n * @param options\n * @internal\n */\nexport function getFieldDisplayValuesProxy(options: {\n  frame: DataFrame;\n  rowIndex: number;\n  timeZone?: TimeZone;\n}): Record<string, DisplayValue> {\n  return new Proxy(\n    {},\n    {\n      get: (obj, key): DisplayValue | undefined => {\n        // 1. Match the name\n        let field = options.frame.fields.find((f) => key === f.name);\n        if (!field) {\n          // 2. Match the array index\n          const k = toNumber(key);\n          field = options.frame.fields[k];\n        }\n        if (!field) {\n          // 3. Match the config displayName\n          field = options.frame.fields.find((f) => key === f.config.displayName);\n        }\n        if (!field) {\n          // 4. Match the name label\n          field = options.frame.fields.find((f) => {\n            if (f.labels) {\n              return key === f.labels.name;\n            }\n            return false;\n          });\n        }\n        if (!field) {\n          return undefined;\n        }\n        // TODO: we could supply the field here for the getDisplayProcessor fallback but we would also need theme which\n        //  we do not have access to here\n        const displayProcessor = field.display ?? getDisplayProcessor();\n        const raw = field.values[options.rowIndex];\n        const disp = displayProcessor(raw);\n        disp.toString = () => formattedValueToString(disp);\n        return disp;\n      },\n    }\n  );\n}\n","import { isEmpty } from 'lodash';\n\nimport { DataFrameView } from '../dataframe/DataFrameView';\nimport { getTimeField } from '../dataframe/processDataFrame';\nimport { GrafanaTheme2 } from '../themes/types';\nimport { reduceField, ReducerID } from '../transformations/fieldReducer';\nimport { getFieldMatcher } from '../transformations/matchers';\nimport { FieldMatcherID } from '../transformations/matchers/ids';\nimport { ScopedVars } from '../types/ScopedVars';\nimport { DataFrame, Field, FieldConfig, FieldType } from '../types/dataFrame';\nimport { LinkModel } from '../types/dataLink';\nimport { DisplayValue, DisplayValueAlignmentFactors } from '../types/displayValue';\nimport { FieldConfigSource } from '../types/fieldOverrides';\nimport { InterpolateFunction } from '../types/panel';\nimport { TimeRange, TimeZone } from '../types/time';\n\nimport { getDisplayProcessor } from './displayProcessor';\nimport { getFieldDisplayName } from './fieldState';\n\n/**\n * Options for how to turn DataFrames into an array of display values\n */\nexport interface ReduceDataOptions {\n  /* If true show each row value */\n  values?: boolean;\n  /** if showing all values limit */\n  limit?: number;\n  /** When !values, pick one value for the whole field */\n  calcs: string[];\n  /** Which fields to show.  By default this is only numeric fields */\n  fields?: string;\n}\n\n// TODO: use built in variables, same as for data links?\nexport const VAR_SERIES_NAME = '__series.name';\nexport const VAR_FIELD_NAME = '__field.displayName'; // Includes the rendered tags and naming strategy\nexport const VAR_FIELD_LABELS = '__field.labels';\nexport const VAR_CALC = '__calc';\nexport const VAR_CELL_PREFIX = '__cell_'; // consistent with existing table templates\n\nexport interface FieldSparkline {\n  y: Field; // Y values\n  x?: Field; // if this does not exist, use the index\n  timeRange?: TimeRange; // Optionally force an absolute time\n  highlightIndex?: number;\n}\n\nexport interface FieldDisplay {\n  name: string; // The field name (title is in display)\n  field: FieldConfig;\n  display: DisplayValue;\n  sparkline?: FieldSparkline;\n\n  // Expose to the original values for delayed inspection (DataLinks etc)\n  view?: DataFrameView;\n  colIndex?: number; // The field column index\n  rowIndex?: number; // only filled in when the value is from a row (ie, not a reduction)\n  getLinks?: () => LinkModel[];\n  hasLinks: boolean;\n}\n\nexport interface GetFieldDisplayValuesOptions {\n  data?: DataFrame[];\n  reduceOptions: ReduceDataOptions;\n  fieldConfig: FieldConfigSource;\n  replaceVariables: InterpolateFunction;\n  sparkline?: boolean; // Calculate the sparkline\n  percentChange?: boolean; // Calculate percent change\n  theme: GrafanaTheme2;\n  timeZone?: TimeZone;\n}\n\nexport const DEFAULT_FIELD_DISPLAY_VALUES_LIMIT = 25;\n\nexport const getFieldDisplayValues = (options: GetFieldDisplayValuesOptions): FieldDisplay[] => {\n  const { replaceVariables, reduceOptions, timeZone, theme } = options;\n  const calcs = reduceOptions.calcs.length ? reduceOptions.calcs : [ReducerID.last];\n\n  const values: FieldDisplay[] = [];\n  const fieldMatcher = getFieldMatcher(\n    reduceOptions.fields\n      ? {\n          id: FieldMatcherID.byRegexp,\n          options: reduceOptions.fields,\n        }\n      : {\n          id: FieldMatcherID.numeric,\n        }\n  );\n\n  const data = options.data ?? [];\n  const limit = reduceOptions.limit ? reduceOptions.limit : DEFAULT_FIELD_DISPLAY_VALUES_LIMIT;\n\n  let hitLimit = false;\n\n  for (let s = 0; s < data.length && !hitLimit; s++) {\n    const dataFrame = data[s]; // Name is already set\n\n    const { timeField } = getTimeField(dataFrame);\n    const view = new DataFrameView(dataFrame);\n\n    for (let i = 0; i < dataFrame.fields.length && !hitLimit; i++) {\n      const field = dataFrame.fields[i];\n      const fieldLinksSupplier = field.getLinks;\n\n      // To filter out time field, need an option for this\n      if (!fieldMatcher(field, dataFrame, data)) {\n        continue;\n      }\n\n      let config = field.config; // already set by the prepare task\n\n      if (field.state?.range) {\n        // Us the global min/max values\n        config = {\n          ...config,\n          ...field.state?.range,\n        };\n      }\n\n      let displayName = field.config.displayName ?? '';\n\n      const display =\n        field.display ??\n        getDisplayProcessor({\n          field,\n          theme: options.theme,\n          timeZone,\n        });\n\n      // Show all rows\n      if (reduceOptions.values) {\n        for (let j = 0; j < field.values.length; j++) {\n          field.state = setIndexForPaletteColor(field, values.length);\n\n          const scopedVars = getFieldScopedVarsWithDataContexAndRowIndex(field, j);\n          const displayValue = display(field.values[j]);\n          const rowName = getSmartDisplayNameForRow(dataFrame, field, j, replaceVariables, scopedVars);\n          const overrideColor = lookupRowColorFromOverride(rowName, options.fieldConfig, theme);\n\n          values.push({\n            name: '',\n            field: config,\n            display: {\n              ...displayValue,\n              title: rowName,\n              color: overrideColor ?? displayValue.color,\n            },\n            view,\n            colIndex: i,\n            rowIndex: j,\n            getLinks: fieldLinksSupplier\n              ? () =>\n                  fieldLinksSupplier({\n                    valueRowIndex: j,\n                  })\n              : () => [],\n            hasLinks: hasLinks(field),\n          });\n\n          if (values.length >= limit) {\n            hitLimit = true;\n            break;\n          }\n        }\n      } else {\n        const results = reduceField({\n          field,\n          reducers: calcs, // The stats to calculate\n        });\n\n        for (const calc of calcs) {\n          const scopedVars = field.state?.scopedVars ?? {};\n          scopedVars[VAR_CALC] = { value: calc, text: calc };\n\n          const displayValue = display(results[calc]);\n\n          if (displayName !== '') {\n            displayValue.title = replaceVariables(displayName, scopedVars);\n          } else {\n            displayValue.title = getFieldDisplayName(field, dataFrame, data);\n          }\n          displayValue.percentChange = options.percentChange\n            ? reduceField({ field: field, reducers: [ReducerID.diffperc] }).diffperc\n            : undefined;\n\n          let sparkline: FieldSparkline | undefined = undefined;\n          if (options.sparkline) {\n            sparkline = {\n              y: dataFrame.fields[i],\n              x: timeField,\n            };\n            if (calc === ReducerID.last) {\n              sparkline.highlightIndex = sparkline.y.values.length - 1;\n            } else if (calc === ReducerID.first) {\n              sparkline.highlightIndex = 0;\n            }\n          }\n\n          // If there is only one row in the data frame, then set the\n          // valueRowIndex to that one row. This allows the data macros in\n          // things like links to access other fields from the data frame.\n          //\n          // If there were more rows, it still may be sane to set the row\n          // index, but it may be confusing; the calculation may have\n          // selected a value from a different row or it may have aggregated\n          // the values from multiple rows, so to make just the first row\n          // available would be arbitrary. For now, the users will have to\n          // ensure that the data frame has just one row if they want data\n          // link referencing other fields to work.\n          //\n          // TODO: A more complete solution here would be to allow the\n          // calculation to report a relevant row and use that value. For\n          // example, a common calculation is 'lastNotNull'. It'd be nifty to\n          // know which row the display value corresponds to in that case if\n          // there were potentially many\n          const valueRowIndex = dataFrame.length === 1 ? 0 : undefined;\n\n          values.push({\n            name: calc,\n            field: config,\n            display: displayValue,\n            sparkline,\n            view,\n            colIndex: i,\n            getLinks: fieldLinksSupplier\n              ? () =>\n                  fieldLinksSupplier({\n                    calculatedValue: displayValue,\n                    valueRowIndex,\n                  })\n              : () => [],\n            hasLinks: hasLinks(field),\n          });\n        }\n      }\n    }\n  }\n\n  if (values.length === 0) {\n    values.push(createNoValuesFieldDisplay(options));\n  }\n\n  return values;\n};\n\nfunction getSmartDisplayNameForRow(\n  frame: DataFrame,\n  field: Field,\n  rowIndex: number,\n  replaceVariables: InterpolateFunction,\n  scopedVars: ScopedVars | undefined\n): string {\n  const displayName = field.config.displayName;\n\n  if (displayName) {\n    // Handle old __cell_n syntax\n    if (displayName.indexOf(VAR_CELL_PREFIX)) {\n      return replaceVariables(fixCellTemplateExpressions(displayName), scopedVars);\n    }\n\n    return replaceVariables(displayName, scopedVars);\n  }\n\n  let parts: string[] = [];\n  let otherNumericFields = 0;\n\n  for (const otherField of frame.fields) {\n    if (otherField === field) {\n      continue;\n    }\n\n    if (otherField.type === FieldType.string) {\n      const value = otherField.values[rowIndex] ?? '';\n      const mappedValue = otherField.display ? otherField.display(value).text : value;\n      if (mappedValue.length > 0) {\n        parts.push(mappedValue);\n      }\n    } else if (otherField.type === FieldType.number) {\n      otherNumericFields++;\n    }\n  }\n\n  if (otherNumericFields || parts.length === 0) {\n    parts.push(getFieldDisplayName(field, frame));\n  }\n\n  return parts.join(' ');\n}\n\n/**\n * Palette color modes use series index (field index) which does not work for when displaing rows\n * So updating seriesIndex here makes the palette color modes work in \"All values\" mode\n */\nfunction setIndexForPaletteColor(field: Field, currentLength: number) {\n  return {\n    ...field.state,\n    seriesIndex: currentLength,\n  };\n}\n\n/**\n * This function makes overrides that set color work for row values\n */\nfunction lookupRowColorFromOverride(displayName: string, fieldConfig: FieldConfigSource, theme: GrafanaTheme2) {\n  for (const override of fieldConfig.overrides) {\n    if (override.matcher.id === 'byName' && override.matcher.options === displayName) {\n      for (const prop of override.properties) {\n        if (prop.id === 'color' && prop.value) {\n          return theme.visualization.getColorByName(prop.value.fixedColor);\n        }\n      }\n    }\n  }\n\n  return null;\n}\n\nexport function hasLinks(field: Field): boolean {\n  return field.config?.links?.length ? field.config.links.length > 0 : false;\n}\n\nexport function getDisplayValueAlignmentFactors(values: FieldDisplay[]): DisplayValueAlignmentFactors {\n  let maxTitle = '';\n  let maxText = '';\n  let maxPrefix = '';\n  let maxSuffix = '';\n\n  for (let i = 0; i < values.length; i++) {\n    const v = values[i].display;\n\n    if (v.text && v.text.length > maxText.length) {\n      maxText = v.text;\n    }\n\n    if (v.title && v.title.length > maxTitle.length) {\n      maxTitle = v.title;\n    }\n\n    if (v.prefix && v.prefix.length > maxPrefix.length) {\n      maxPrefix = v.prefix;\n    }\n\n    if (v.suffix && v.suffix.length > maxSuffix.length) {\n      maxSuffix = v.suffix;\n    }\n  }\n\n  return { text: maxText, title: maxTitle, suffix: maxSuffix, prefix: maxPrefix };\n}\n\nfunction createNoValuesFieldDisplay(options: GetFieldDisplayValuesOptions): FieldDisplay {\n  const displayName = 'No data';\n  const { fieldConfig, timeZone } = options;\n  const { defaults } = fieldConfig;\n\n  const displayProcessor = getDisplayProcessor({\n    field: {\n      name: '',\n      type: FieldType.other,\n      config: defaults,\n    },\n    theme: options.theme,\n    timeZone,\n  });\n\n  const display = displayProcessor(null);\n  const text = getDisplayText(display, displayName);\n\n  return {\n    name: displayName,\n    field: {\n      ...defaults,\n      max: defaults.max ?? 0,\n      min: defaults.min ?? 0,\n    },\n    display: {\n      text,\n      numeric: 0,\n      color: display.color,\n    },\n    hasLinks: false,\n  };\n}\n\nfunction getDisplayText(display: DisplayValue, fallback: string): string {\n  if (!display || isEmpty(display.text)) {\n    return fallback;\n  }\n  return display.text;\n}\n\nexport function fixCellTemplateExpressions(str: string) {\n  return str.replace(\n    /\\${__cell_(\\d+)(.*?)}|\\[\\[__cell_(\\d+)(.*?)\\]\\]|\\$__cell_(\\d+)(\\S*)/g,\n    (match, cellNum1, fmt1, cellNum2, fmt2, cellNum3, fmt3) => {\n      return `\\${__data.fields[${cellNum1 ?? cellNum2 ?? cellNum3}]${fmt1 ?? fmt2 ?? fmt3}}`;\n    }\n  );\n}\n\n/**\n * Clones the existing dataContext and adds rowIndex to it\n */\nfunction getFieldScopedVarsWithDataContexAndRowIndex(field: Field, rowIndex: number): ScopedVars | undefined {\n  if (field.state?.scopedVars?.__dataContext) {\n    return {\n      ...field.state?.scopedVars,\n      __dataContext: {\n        value: {\n          ...field.state?.scopedVars?.__dataContext.value,\n          rowIndex,\n        },\n      },\n    };\n  }\n\n  return field.state?.scopedVars;\n}\n","import { Action } from '../../types/action';\nimport { Field } from '../../types/dataFrame';\nimport { DataLink } from '../../types/dataLink';\nimport { FieldOverrideContext } from '../../types/fieldOverrides';\nimport { SelectableValue } from '../../types/select';\nimport { SliderMarks } from '../../types/slider';\nimport { ThresholdsConfig } from '../../types/thresholds';\nimport { ValueMapping } from '../../types/valueMapping';\n\nexport const identityOverrideProcessor = <T>(value: T) => {\n  return value;\n};\n\nexport interface NumberFieldConfigSettings {\n  placeholder?: string;\n  integer?: boolean;\n  min?: number;\n  max?: number;\n  step?: number;\n}\n\nexport const numberOverrideProcessor = (\n  value: unknown,\n  context: FieldOverrideContext,\n  settings?: NumberFieldConfigSettings\n) => {\n  if (value === undefined || value === null) {\n    return undefined;\n  }\n\n  return parseFloat(String(value));\n};\n\nexport const displayNameOverrideProcessor = (\n  value: unknown,\n  context: FieldOverrideContext,\n  settings?: StringFieldConfigSettings\n) => {\n  // clear the cached display name\n  delete context.field?.state?.displayName;\n  return stringOverrideProcessor(value, context, settings);\n};\n\nexport interface SliderFieldConfigSettings {\n  min: number;\n  max: number;\n  step?: number;\n  included?: boolean;\n  marks?: SliderMarks;\n  ariaLabelForHandle?: string;\n}\n\nexport interface DataLinksFieldConfigSettings {\n  showOneClick?: boolean;\n}\n\nexport const dataLinksOverrideProcessor = (\n  value: any,\n  _context: FieldOverrideContext,\n  _settings?: DataLinksFieldConfigSettings\n): DataLink[] => {\n  return value;\n};\n\nexport const actionsOverrideProcessor = (\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  value: any,\n  _context: FieldOverrideContext,\n  _settings?: DataLinksFieldConfigSettings\n): Action[] => {\n  return value;\n};\n\nexport interface ValueMappingFieldConfigSettings {}\n\nexport const valueMappingsOverrideProcessor = (\n  value: any,\n  _context: FieldOverrideContext,\n  _settings?: ValueMappingFieldConfigSettings\n): ValueMapping[] => {\n  return value; // !!!! likely not !!!!\n};\n\nexport interface SelectFieldConfigSettings<T> {\n  allowCustomValue?: boolean;\n\n  isClearable?: boolean;\n\n  /** The default options */\n  options: Array<SelectableValue<T>>;\n\n  /** Optionally use the context to define the options */\n  getOptions?: (context: FieldOverrideContext) => Promise<Array<SelectableValue<T>>>;\n}\n\nexport const selectOverrideProcessor = (\n  value: any,\n  _context: FieldOverrideContext,\n  _settings?: SelectFieldConfigSettings<any>\n) => {\n  return value;\n};\n\nexport interface StringFieldConfigSettings {\n  placeholder?: string;\n  maxLength?: number;\n  expandTemplateVars?: boolean;\n  useTextarea?: boolean;\n  rows?: number;\n}\n\nexport const stringOverrideProcessor = (\n  value: unknown,\n  context: FieldOverrideContext,\n  settings?: StringFieldConfigSettings\n) => {\n  if (value === null || value === undefined) {\n    return value;\n  }\n  if (settings && settings.expandTemplateVars && context.replaceVariables && typeof value === 'string') {\n    return context.replaceVariables(value, context.field!.state!.scopedVars);\n  }\n  return `${value}`;\n};\n\nexport interface ThresholdsFieldConfigSettings {\n  // Anything?\n}\n\nexport const thresholdsOverrideProcessor = (\n  value: any,\n  _context: FieldOverrideContext,\n  _settings?: ThresholdsFieldConfigSettings\n): ThresholdsConfig => {\n  return value; // !!!! likely not !!!!\n};\n\nexport interface UnitFieldConfigSettings {\n  isClearable?: boolean;\n}\n\nexport const unitOverrideProcessor = (\n  value: boolean,\n  _context: FieldOverrideContext,\n  _settings?: UnitFieldConfigSettings\n) => {\n  return value;\n};\n\nexport const booleanOverrideProcessor = (\n  value: boolean,\n  _context: FieldOverrideContext,\n  _settings?: ThresholdsFieldConfigSettings\n) => {\n  return value; // !!!! likely not !!!!\n};\n\nexport interface FieldColorConfigSettings {\n  /**\n   * When switching to a visualization that does not support by value coloring then Grafana will\n   * switch to a by series palette based color mode\n   */\n  byValueSupport?: boolean;\n  /**\n   * When switching to a visualization that has this set to true then Grafana will change color mode\n   * to from thresholds if it was set to a by series palette\n   */\n  preferThresholdsMode?: boolean;\n  /**\n   * Set to true if the visualization supports both by value and by series\n   * This will enable the Color by series UI option that sets the `color.seriesBy` option.\n   */\n  bySeriesSupport?: boolean;\n}\n\nexport interface StatsPickerConfigSettings {\n  /**\n   * Enable multi-selection in the stats picker\n   */\n  allowMultiple: boolean;\n  /**\n   * Default stats to be use in the stats picker\n   */\n  defaultStat?: string;\n}\n\nexport enum FieldNamePickerBaseNameMode {\n  IncludeAll = 'all',\n  ExcludeBaseNames = 'exclude',\n  OnlyBaseNames = 'only',\n}\n\nexport interface FieldNamePickerConfigSettings {\n  /**\n   * Function is a predicate, to test each element of the array.\n   * Return a value that coerces to true to keep the field, or to false otherwise.\n   */\n  filter?: (field: Field) => boolean;\n\n  /**\n   * Show this text when no values are found\n   */\n  noFieldsMessage?: string;\n\n  /**\n   * Sets the width to a pixel value.\n   */\n  width?: number;\n\n  /**\n   * Exclude names that can match a collection of values\n   */\n  baseNameMode?: FieldNamePickerBaseNameMode;\n\n  /**\n   * Placeholder text to display when nothing is selected.\n   */\n  placeholderText?: string;\n\n  /** When set to false, the value can not be removed */\n  isClearable?: boolean;\n}\n","import { ComponentType } from 'react';\n\nimport {\n  NumberFieldConfigSettings,\n  SelectFieldConfigSettings,\n  SliderFieldConfigSettings,\n  StringFieldConfigSettings,\n} from '../field/overrides/processors';\nimport { RegistryItem, Registry } from '../utils/Registry';\n\nimport { OptionEditorConfig } from './options';\n\n/**\n * Option editor registry item\n */\nexport interface OptionsEditorItem<TOptions, TSettings, TEditorProps, TValue>\n  extends RegistryItem,\n    OptionEditorConfig<TOptions, TSettings, TValue> {\n  /**\n   * React component used to edit the options property\n   */\n  editor: ComponentType<TEditorProps>;\n\n  /*\n   * @param value\n   */\n  getItemsCount?: (value?: TValue) => number;\n}\n\n/**\n * Describes an API for option editors UI builder\n */\ninterface OptionsUIRegistryBuilderAPI<\n  TOptions,\n  TEditorProps,\n  T extends OptionsEditorItem<TOptions, any, TEditorProps, any>,\n> {\n  addNumberInput?<TSettings extends NumberFieldConfigSettings = NumberFieldConfigSettings>(\n    config: OptionEditorConfig<TOptions, TSettings, number>\n  ): this;\n\n  addSliderInput?<TSettings extends SliderFieldConfigSettings = SliderFieldConfigSettings>(\n    config: OptionEditorConfig<TOptions, TSettings, number>\n  ): this;\n\n  addTextInput?<TSettings extends StringFieldConfigSettings = StringFieldConfigSettings>(\n    config: OptionEditorConfig<TOptions, TSettings, string>\n  ): this;\n\n  addStringArray?<TSettings extends StringFieldConfigSettings = StringFieldConfigSettings>(\n    config: OptionEditorConfig<TOptions, TSettings, string[]>\n  ): this;\n\n  addSelect?<TOption, TSettings extends SelectFieldConfigSettings<TOption>>(\n    config: OptionEditorConfig<TOptions, TSettings, TOption>\n  ): this;\n\n  addRadio?<TOption, TSettings extends SelectFieldConfigSettings<TOption> = SelectFieldConfigSettings<TOption>>(\n    config: OptionEditorConfig<TOptions, TSettings, TOption>\n  ): this;\n\n  addBooleanSwitch?<TSettings>(config: OptionEditorConfig<TOptions, TSettings, boolean>): this;\n\n  addUnitPicker?<TSettings>(config: OptionEditorConfig<TOptions, TSettings, string>): this;\n\n  addColorPicker?<TSettings>(config: OptionEditorConfig<TOptions, TSettings, string>): this;\n\n  /**\n   * Enables custom editor definition\n   * @param config\n   */\n  addCustomEditor<TSettings, TValue>(config: OptionsEditorItem<TOptions, TSettings, TEditorProps, TValue>): this;\n\n  /**\n   * Returns registry of option editors\n   */\n  getRegistry: () => Registry<T>;\n}\n\nexport abstract class OptionsUIRegistryBuilder<\n  TOptions,\n  TEditorProps,\n  T extends OptionsEditorItem<TOptions, any, TEditorProps, any>,\n> implements OptionsUIRegistryBuilderAPI<TOptions, TEditorProps, T>\n{\n  private properties: T[] = [];\n\n  addCustomEditor<TSettings, TValue>(config: T & OptionsEditorItem<TOptions, TSettings, TEditorProps, TValue>): this {\n    this.properties.push(config);\n    return this;\n  }\n\n  getRegistry() {\n    return new Registry(() => {\n      return this.properties;\n    });\n  }\n\n  getItems() {\n    return this.properties;\n  }\n}\n","import { set, cloneDeep } from 'lodash';\n\nimport {\n  FieldNamePickerConfigSettings,\n  NumberFieldConfigSettings,\n  SelectFieldConfigSettings,\n  SliderFieldConfigSettings,\n  StringFieldConfigSettings,\n  UnitFieldConfigSettings,\n  booleanOverrideProcessor,\n  identityOverrideProcessor,\n  numberOverrideProcessor,\n  selectOverrideProcessor,\n  stringOverrideProcessor,\n  unitOverrideProcessor,\n} from '../field/overrides/processors';\nimport {\n  StandardEditorContext,\n  StandardEditorProps,\n  standardEditorsRegistry,\n} from '../field/standardFieldConfigEditorRegistry';\nimport { PanelOptionsSupplier } from '../panel/PanelPlugin';\nimport { OptionsEditorItem, OptionsUIRegistryBuilder } from '../types/OptionsUIRegistryBuilder';\nimport { isObject } from '../types/data';\nimport { FieldConfigPropertyItem, FieldConfigEditorConfig } from '../types/fieldOverrides';\nimport { PanelOptionsEditorConfig, PanelOptionsEditorItem } from '../types/panel';\n\n/**\n * Fluent API for declarative creation of field config option editors\n */\nexport class FieldConfigEditorBuilder<TOptions> extends OptionsUIRegistryBuilder<\n  TOptions,\n  StandardEditorProps,\n  FieldConfigPropertyItem<TOptions>\n> {\n  addNumberInput<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings & NumberFieldConfigSettings, number>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      override: standardEditorsRegistry.get('number').editor,\n      editor: standardEditorsRegistry.get('number').editor,\n      process: numberOverrideProcessor,\n      shouldApply: config.shouldApply ?? (() => true),\n      settings: config.settings || {},\n    });\n  }\n\n  addSliderInput<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings & SliderFieldConfigSettings, number>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      override: standardEditorsRegistry.get('slider').editor,\n      editor: standardEditorsRegistry.get('slider').editor,\n      process: numberOverrideProcessor,\n      shouldApply: config.shouldApply ?? (() => true),\n      settings: config.settings || {},\n    });\n  }\n\n  addTextInput<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings & StringFieldConfigSettings, string>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      override: standardEditorsRegistry.get('text').editor,\n      editor: standardEditorsRegistry.get('text').editor,\n      process: stringOverrideProcessor,\n      shouldApply: config.shouldApply ?? (() => true),\n      settings: config.settings || {},\n    });\n  }\n\n  addSelect<TOption, TSettings extends SelectFieldConfigSettings<TOption>>(\n    config: FieldConfigEditorConfig<TOptions, TSettings, TOption>\n  ) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      override: standardEditorsRegistry.get('select').editor,\n      editor: standardEditorsRegistry.get('select').editor,\n      process: selectOverrideProcessor,\n      // ???\n      shouldApply: config.shouldApply ? config.shouldApply : () => true,\n      settings: config.settings || { options: [] },\n    });\n  }\n\n  addRadio<TOption, TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings, TOption>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      override: standardEditorsRegistry.get('radio').editor,\n      editor: standardEditorsRegistry.get('radio').editor,\n      process: selectOverrideProcessor,\n      // ???\n      shouldApply: config.shouldApply ? config.shouldApply : () => true,\n      settings: config.settings || { options: [] },\n    });\n  }\n\n  addBooleanSwitch<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings, boolean>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('boolean').editor,\n      override: standardEditorsRegistry.get('boolean').editor,\n      process: booleanOverrideProcessor,\n      shouldApply: config.shouldApply ? config.shouldApply : () => true,\n      settings: config.settings || {},\n    });\n  }\n\n  addColorPicker<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings, string>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('color').editor,\n      override: standardEditorsRegistry.get('color').editor,\n      process: identityOverrideProcessor,\n      shouldApply: config.shouldApply ? config.shouldApply : () => true,\n      settings: config.settings || {},\n    });\n  }\n\n  addUnitPicker<TSettings>(config: FieldConfigEditorConfig<TOptions, TSettings & UnitFieldConfigSettings, string>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('unit').editor,\n      override: standardEditorsRegistry.get('unit').editor,\n      process: unitOverrideProcessor,\n      shouldApply: config.shouldApply ? config.shouldApply : () => true,\n      settings: config.settings || {},\n    });\n  }\n\n  addFieldNamePicker<TSettings>(\n    config: FieldConfigEditorConfig<TOptions, TSettings & FieldNamePickerConfigSettings, string>\n  ): this {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('field-name').editor,\n      override: standardEditorsRegistry.get('field-name').editor,\n      process: identityOverrideProcessor,\n      shouldApply: config.shouldApply ? config.shouldApply : () => true,\n      settings: config.settings || {},\n    });\n  }\n\n  addGenericEditor<TSettings>(\n    config: FieldConfigEditorConfig<TOptions, TSettings & any>, // & any... i give up!\n    editor: (props: StandardEditorProps<TSettings>) => JSX.Element\n  ): this {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: editor,\n      override: editor,\n      process: identityOverrideProcessor,\n      shouldApply: config.shouldApply ? config.shouldApply : () => true,\n      settings: config.settings || {},\n    });\n  }\n}\n\nexport interface NestedValueAccess {\n  getValue: (path: string) => any;\n  onChange: (path: string, value: any) => void;\n  getContext?: (parent: StandardEditorContext<any>) => StandardEditorContext<any>;\n}\nexport interface NestedPanelOptions<TSub = any> {\n  path: string;\n  category?: string[];\n  defaultValue?: TSub;\n  build: PanelOptionsSupplier<TSub>;\n  values?: (parent: NestedValueAccess) => NestedValueAccess;\n}\n\nexport class NestedPanelOptionsBuilder<TSub = any> implements OptionsEditorItem<TSub, any, any, any> {\n  path = '';\n  category?: string[];\n  defaultValue?: TSub;\n  id = 'nested-panel-options';\n  name = 'nested';\n  editor = () => null;\n\n  constructor(public cfg: NestedPanelOptions<TSub>) {\n    this.path = cfg.path;\n    this.category = cfg.category;\n    this.defaultValue = this.getDefaultValue(cfg);\n  }\n\n  private getDefaultValue(cfg: NestedPanelOptions<TSub>): TSub {\n    let result = isObject(cfg.defaultValue) ? cloneDeep(cfg.defaultValue) : {};\n\n    const builder = new PanelOptionsEditorBuilder<TSub>();\n    cfg.build(builder, { data: [] });\n\n    for (const item of builder.getItems()) {\n      if (item.defaultValue != null) {\n        set(result, item.path, item.defaultValue);\n      }\n    }\n\n    // TSub is defined as type any and we need to cast it back\n    // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n    return result as TSub;\n  }\n\n  getBuilder = () => {\n    return this.cfg.build;\n  };\n\n  getNestedValueAccess = (parent: NestedValueAccess) => {\n    const values = this.cfg.values;\n    if (values) {\n      return values(parent);\n    }\n    // by default prefix the path\n    return {\n      getValue: (path: string) => parent.getValue(`${this.path}.${path}`),\n      onChange: (path: string, value: any) => parent.onChange(`${this.path}.${path}`, value),\n    };\n  };\n}\n\nexport function isNestedPanelOptions(item: unknown): item is NestedPanelOptionsBuilder {\n  return isObject(item) && 'id' in item && item.id === 'nested-panel-options';\n}\n\n/**\n * Fluent API for declarative creation of panel options\n */\nexport class PanelOptionsEditorBuilder<TOptions> extends OptionsUIRegistryBuilder<\n  TOptions,\n  StandardEditorProps,\n  PanelOptionsEditorItem<TOptions>\n> {\n  addNestedOptions<Sub>(opts: NestedPanelOptions<Sub>) {\n    const s = new NestedPanelOptionsBuilder<Sub>(opts);\n    return this.addCustomEditor(s);\n  }\n\n  addNumberInput<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings & NumberFieldConfigSettings, number>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('number').editor,\n    });\n  }\n\n  addSliderInput<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings & SliderFieldConfigSettings, number>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('slider').editor,\n    });\n  }\n\n  addTextInput<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings & StringFieldConfigSettings, string>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('text').editor,\n    });\n  }\n\n  addStringArray<TSettings>(\n    config: PanelOptionsEditorConfig<TOptions, TSettings & StringFieldConfigSettings, string[]>\n  ) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('strings').editor,\n    });\n  }\n\n  addSelect<TOption, TSettings extends SelectFieldConfigSettings<TOption>>(\n    config: PanelOptionsEditorConfig<TOptions, TSettings, TOption>\n  ) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('select').editor,\n    });\n  }\n\n  addMultiSelect<TOption, TSettings extends SelectFieldConfigSettings<TOption>>(\n    config: PanelOptionsEditorConfig<TOptions, TSettings, TOption>\n  ) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('multi-select').editor,\n    });\n  }\n\n  addRadio<TOption, TSettings extends SelectFieldConfigSettings<TOption>>(\n    config: PanelOptionsEditorConfig<TOptions, TSettings, TOption>\n  ) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('radio').editor,\n    });\n  }\n\n  addBooleanSwitch<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings, boolean>) {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('boolean').editor,\n    });\n  }\n\n  addColorPicker<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings, string>): this {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('color').editor,\n      settings: config.settings || {},\n    });\n  }\n\n  addTimeZonePicker<TSettings>(config: PanelOptionsEditorConfig<TOptions, TSettings, string>): this {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('timezone').editor,\n      settings: config.settings || {},\n    });\n  }\n\n  addUnitPicker<TSettings>(\n    config: PanelOptionsEditorConfig<TOptions, TSettings & UnitFieldConfigSettings, string>\n  ): this {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('unit').editor,\n    });\n  }\n\n  addFieldNamePicker<TSettings>(\n    config: PanelOptionsEditorConfig<TOptions, TSettings & FieldNamePickerConfigSettings, string>\n  ): this {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('field-name').editor,\n    });\n  }\n\n  addDashboardPicker<TSettings>(\n    config: PanelOptionsEditorConfig<TOptions, TSettings & FieldNamePickerConfigSettings, string>\n  ): this {\n    return this.addCustomEditor({\n      ...config,\n      id: config.path,\n      editor: standardEditorsRegistry.get('dashboard-uid').editor, // added at runtime\n    });\n  }\n}\n","import { NullValueMode } from '../types/data';\nimport { Field } from '../types/dataFrame';\nimport { GraphSeriesValue } from '../types/graph';\nimport { TimeRange } from '../types/time';\n\nexport interface FlotPairsOptions {\n  xField: Field;\n  yField: Field;\n  nullValueMode?: NullValueMode;\n}\n\nexport function getFlotPairs({ xField, yField, nullValueMode }: FlotPairsOptions): GraphSeriesValue[][] {\n  const vX = xField.values;\n  const vY = yField.values;\n  const length = vX.length;\n  if (vY.length !== length) {\n    throw new Error('Unexpected field length');\n  }\n\n  const ignoreNulls = nullValueMode === NullValueMode.Ignore;\n  const nullAsZero = nullValueMode === NullValueMode.AsZero;\n\n  const pairs: any[][] = [];\n\n  for (let i = 0; i < length; i++) {\n    const x = vX[i];\n    let y = vY[i];\n\n    if (y === null) {\n      if (ignoreNulls) {\n        continue;\n      }\n      if (nullAsZero) {\n        y = 0;\n      }\n    }\n\n    // X must be a value\n    if (x === null) {\n      continue;\n    }\n\n    pairs.push([x, y]);\n  }\n  return pairs;\n}\n\n/**\n * Returns a constant series based on the first value from the provide series.\n * @param seriesData Series\n * @param range Start and end time for the constant series\n */\nexport function getFlotPairsConstant(seriesData: GraphSeriesValue[][], range: TimeRange): GraphSeriesValue[][] {\n  if (!range.from || !range.to || !seriesData || seriesData.length === 0) {\n    return [];\n  }\n\n  const from = range.from.valueOf();\n  const to = range.to.valueOf();\n  const value = seriesData[0][1];\n  return [\n    [from, value],\n    [to, value],\n  ];\n}\n","/**\n * Enumeration of documentation topics\n * @internal\n */\nexport enum DocsId {\n  Transformations,\n  FieldConfig,\n  FieldConfigOverrides,\n}\n","/**\n * @beta\n * Proxies a ES6 class so that it can be used as a base class for an ES5 class\n */\nexport function makeClassES5Compatible<T extends abstract new (...args: ConstructorParameters<T>) => InstanceType<T>>(\n  ES6Class: T\n): T {\n  return new Proxy(ES6Class, {\n    // ES5 code will call it like a function using super\n    apply(target, self, argumentsList) {\n      if (typeof Reflect === 'undefined' || !Reflect.construct) {\n        alert('Browser is too old');\n      }\n\n      return Reflect.construct(target, argumentsList, self.constructor);\n    },\n  });\n}\n","import { merge, Observable, timer } from 'rxjs';\nimport { mapTo, takeUntil } from 'rxjs/operators';\n\n/**\n * @internal\n */\nexport type WithLoadingIndicatorOptions<T> = {\n  whileLoading: T;\n  source: Observable<T>;\n};\n\n/**\n * @internal\n */\nexport function withLoadingIndicator<T>({ whileLoading, source }: WithLoadingIndicatorOptions<T>): Observable<T> {\n  return merge(timer(200).pipe(mapTo(whileLoading), takeUntil(source)), source);\n}\n","import { ScopedVars } from '../types/ScopedVars';\n\nconst SEARCH_FILTER_VARIABLE = '__searchFilter';\n\nexport const containsSearchFilter = (query: string | unknown): boolean =>\n  query && typeof query === 'string' ? query.indexOf(SEARCH_FILTER_VARIABLE) !== -1 : false;\n\nexport interface SearchFilterOptions {\n  searchFilter?: string;\n}\n\nexport const getSearchFilterScopedVar = (args: {\n  query: string;\n  wildcardChar: string;\n  options?: SearchFilterOptions;\n}): ScopedVars => {\n  const { query, wildcardChar } = args;\n  if (!containsSearchFilter(query)) {\n    return {};\n  }\n\n  let { options } = args;\n\n  options = options || { searchFilter: '' };\n  const value = options.searchFilter ? `${options.searchFilter}${wildcardChar}` : `${wildcardChar}`;\n\n  return {\n    __searchFilter: {\n      value,\n      text: '',\n    },\n  };\n};\n","import { PluginMeta } from '../types/plugin';\n\nexport function matchPluginId(idToMatch: string, pluginMeta: PluginMeta) {\n  if (pluginMeta.id === idToMatch) {\n    return true;\n  }\n\n  if (isPromFlavor(idToMatch)) {\n    return isPromFlavor(pluginMeta.id);\n  }\n\n  if (pluginMeta.aliasIDs) {\n    return pluginMeta.aliasIDs.includes(idToMatch);\n  }\n\n  return false;\n}\n\nfunction isPromFlavor(pluginId: string): boolean {\n  if (pluginId === 'prometheus') {\n    return true;\n  }\n  const regex = new RegExp('^grafana-[0-9a-z]+prometheus-datasource$');\n  return regex.test(pluginId);\n}\n","import { isString } from 'lodash';\n\nimport { DataSourceRef } from '@grafana/schema';\n\nimport { KeyValue } from '../types/data';\nimport {\n  DataSourceInstanceSettings,\n  DataSourceJsonData,\n  DataSourcePluginOptionsEditorProps,\n  DataSourceSettings,\n} from '../types/datasource';\nimport { SelectableValue } from '../types/select';\n\n/**\n * Convert instance settings to a reference\n *\n * @public\n */\nexport function getDataSourceRef(ds: DataSourceInstanceSettings): DataSourceRef {\n  const ref: DataSourceRef = { uid: ds.uid, type: ds.type };\n  if (ds.apiVersion) {\n    ref.apiVersion = ds.apiVersion;\n  }\n  return ref;\n}\n\n/**\n * Returns true if the argument is a DataSourceRef\n *\n * @public\n */\nexport function isDataSourceRef(ref: DataSourceRef | string | null | undefined): ref is DataSourceRef {\n  return typeof ref === 'object' && typeof ref?.uid === 'string';\n}\n\n/**\n * Get the UID from a string of reference\n *\n * @public\n */\nexport function getDataSourceUID(ref: DataSourceRef | string | null): string | undefined {\n  if (isDataSourceRef(ref)) {\n    return ref.uid;\n  }\n  if (isString(ref)) {\n    return ref;\n  }\n  return undefined;\n}\n\nexport const onUpdateDatasourceOption =\n  (props: DataSourcePluginOptionsEditorProps, key: keyof DataSourceSettings) =>\n  (event: React.SyntheticEvent<HTMLInputElement | HTMLSelectElement>) => {\n    updateDatasourcePluginOption(props, key, event.currentTarget.value);\n  };\n\nexport const onUpdateDatasourceJsonDataOption =\n  <J extends DataSourceJsonData, S, K extends keyof J>(props: DataSourcePluginOptionsEditorProps<J, S>, key: K) =>\n  (event: React.SyntheticEvent<HTMLInputElement | HTMLSelectElement>) => {\n    updateDatasourcePluginJsonDataOption(props, key, event.currentTarget.value);\n  };\n\nexport const onUpdateDatasourceSecureJsonDataOption =\n  <J extends DataSourceJsonData, S extends {} = KeyValue>(\n    props: DataSourcePluginOptionsEditorProps<J, S>,\n    key: string\n  ) =>\n  (event: React.SyntheticEvent<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>) => {\n    updateDatasourcePluginSecureJsonDataOption(props, key, event.currentTarget.value);\n  };\n\nexport const onUpdateDatasourceJsonDataOptionSelect =\n  <J extends DataSourceJsonData, S, K extends keyof J>(props: DataSourcePluginOptionsEditorProps<J, S>, key: K) =>\n  (selected: SelectableValue) => {\n    updateDatasourcePluginJsonDataOption(props, key, selected.value);\n  };\n\nexport const onUpdateDatasourceJsonDataOptionChecked =\n  <J extends DataSourceJsonData, S, K extends keyof J>(props: DataSourcePluginOptionsEditorProps<J, S>, key: K) =>\n  (event: React.SyntheticEvent<HTMLInputElement>) => {\n    updateDatasourcePluginJsonDataOption(props, key, event.currentTarget.checked);\n  };\n\nexport const onUpdateDatasourceSecureJsonDataOptionSelect =\n  <J extends DataSourceJsonData, S extends {} = KeyValue>(\n    props: DataSourcePluginOptionsEditorProps<J, S>,\n    key: string\n  ) =>\n  (selected: SelectableValue) => {\n    updateDatasourcePluginSecureJsonDataOption(props, key, selected.value);\n  };\n\nexport const onUpdateDatasourceResetOption =\n  (props: DataSourcePluginOptionsEditorProps, key: string) =>\n  (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n    updateDatasourcePluginResetOption(props, key);\n  };\n\nexport function updateDatasourcePluginOption<J extends DataSourceJsonData, S extends {} = KeyValue>(\n  props: DataSourcePluginOptionsEditorProps<J, S>,\n  key: keyof DataSourceSettings,\n  val: unknown\n) {\n  const config = props.options;\n\n  props.onOptionsChange({\n    ...config,\n    [key]: val,\n  });\n}\n\nexport const updateDatasourcePluginJsonDataOption = <J extends DataSourceJsonData, S, K extends keyof J>(\n  props: DataSourcePluginOptionsEditorProps<J, S>,\n  key: K,\n  val: unknown\n) => {\n  const config = props.options;\n\n  props.onOptionsChange({\n    ...config,\n    jsonData: {\n      ...config.jsonData,\n      [key]: val,\n    },\n  });\n};\n\nexport const updateDatasourcePluginSecureJsonDataOption = <J extends DataSourceJsonData, S extends {} = KeyValue>(\n  props: DataSourcePluginOptionsEditorProps<J, S>,\n  key: string,\n  val: unknown\n) => {\n  const config = props.options;\n\n  props.onOptionsChange({\n    ...config,\n    secureJsonData: {\n      ...(config.secureJsonData ? config.secureJsonData : ({} as S)),\n      [key]: val,\n    },\n  });\n};\n\nexport const updateDatasourcePluginResetOption = <J extends DataSourceJsonData, S extends {} = KeyValue>(\n  props: DataSourcePluginOptionsEditorProps<J, S>,\n  key: string\n) => {\n  const config = props.options;\n  props.onOptionsChange({\n    ...config,\n    secureJsonData: {\n      ...(config.secureJsonData ? config.secureJsonData : ({} as S)),\n      [key]: '',\n    },\n    secureJsonFields: {\n      ...config.secureJsonFields,\n      [key]: false,\n    },\n  });\n};\n","import { KeyValue } from '../types/data';\n\n// Avoid writing the warning message more than once every 10s\nconst history: KeyValue<number> = {};\n\nexport const deprecationWarning = (file: string, oldName: string, newName?: string) => {\n  let message = `[Deprecation warning] ${file}: ${oldName} is deprecated`;\n  if (newName) {\n    message += `. Use ${newName} instead`;\n  }\n  const now = Date.now();\n  const last = history[message];\n  if (!last || now - last > 10000) {\n    console.warn(message);\n    history[message] = now;\n  }\n};\n","// Libraries\nimport { defaults } from 'lodash';\nimport Papa, { ParseConfig, Parser, ParseResult } from 'papaparse';\n\n// Types\nimport { MutableDataFrame } from '../dataframe/MutableDataFrame';\nimport { guessFieldTypeFromValue } from '../dataframe/processDataFrame';\nimport { getFieldDisplayName } from '../field/fieldState';\nimport { DataFrame, Field, FieldConfig, FieldType } from '../types/dataFrame';\nimport { formattedValueToString } from '../valueFormats/valueFormats';\n\nexport enum CSVHeaderStyle {\n  full,\n  name,\n  none,\n}\n\n// Subset of all parse options\nexport interface CSVConfig {\n  delimiter?: string; // default: \",\"\n  newline?: string; // default: \"\\r\\n\"\n  quoteChar?: string; // default: '\"'\n  encoding?: string; // default: \"\",\n  useExcelHeader?: boolean; // default: false\n  headerStyle?: CSVHeaderStyle;\n}\n\nexport interface CSVParseCallbacks {\n  /**\n   * Get a callback before any rows are processed\n   * This can return a modified table to force any\n   * Column configurations\n   */\n  onHeader: (fields: Field[]) => void;\n\n  // Called after each row is read\n  onRow: (row: string[]) => void;\n}\n\nexport interface CSVOptions {\n  config?: CSVConfig;\n  callback?: CSVParseCallbacks;\n}\n\nexport function readCSV(csv: string, options?: CSVOptions): DataFrame[] {\n  return new CSVReader(options).readCSV(csv);\n}\n\nenum ParseState {\n  Starting,\n  InHeader,\n  ReadingRows,\n}\n\nexport class CSVReader {\n  config: CSVConfig;\n  callback?: CSVParseCallbacks;\n\n  state: ParseState;\n  data: MutableDataFrame[];\n  current: MutableDataFrame;\n\n  constructor(options?: CSVOptions) {\n    if (!options) {\n      options = {};\n    }\n    this.config = options.config || {};\n    this.callback = options.callback;\n\n    this.current = new MutableDataFrame({ fields: [] });\n    this.state = ParseState.Starting;\n    this.data = [];\n  }\n\n  // PapaParse callback on each line\n  private chunk = (results: ParseResult<string[]>, parser: Parser): void => {\n    for (let i = 0; i < results.data.length; i++) {\n      const line = results.data[i];\n      if (line.length < 1) {\n        continue;\n      }\n      const first = line[0]; // null or value, papaparse does not return ''\n      if (first) {\n        // Comment or header queue\n        if (first.startsWith('#')) {\n          // Look for special header column\n          // #{columkey}#a,b,c\n          const idx = first.indexOf('#', 2);\n          if (idx > 0) {\n            const k = first.slice(1, idx);\n            const isName = 'name' === k;\n\n            // Simple object used to check if headers match\n            const headerKeys: FieldConfig = {\n              unit: '#',\n            };\n\n            // Check if it is a known/supported column\n            if (isName || headerKeys.hasOwnProperty(k)) {\n              // Starting a new table after reading rows\n              if (this.state === ParseState.ReadingRows) {\n                this.current = new MutableDataFrame({ fields: [] });\n                this.data.push(this.current);\n              }\n\n              const v = first.slice(idx + 1);\n              if (isName) {\n                this.current.addFieldFor(undefined, v);\n                for (let j = 1; j < line.length; j++) {\n                  this.current.addFieldFor(undefined, line[j]);\n                }\n              } else {\n                const { fields } = this.current;\n                for (let j = 0; j < fields.length; j++) {\n                  if (!fields[j].config) {\n                    fields[j].config = {};\n                  }\n                  const disp = fields[j].config as any; // any lets name lookup\n                  disp[k] = j === 0 ? v : line[j];\n                }\n              }\n\n              this.state = ParseState.InHeader;\n              continue;\n            }\n          } else if (this.state === ParseState.Starting) {\n            this.state = ParseState.InHeader;\n            continue;\n          }\n          // Ignore comment lines\n          continue;\n        }\n\n        if (this.state === ParseState.Starting) {\n          const type = guessFieldTypeFromValue(first);\n          if (type === FieldType.string) {\n            for (const s of line) {\n              this.current.addFieldFor(undefined, s);\n            }\n            this.state = ParseState.InHeader;\n            continue;\n          }\n          this.state = ParseState.InHeader; // fall through to read rows\n        }\n      }\n\n      // Add the current results to the data\n      if (this.state !== ParseState.ReadingRows) {\n        // anything???\n      }\n\n      this.state = ParseState.ReadingRows;\n\n      // Make sure column structure is valid\n      if (line.length > this.current.fields.length) {\n        const { fields } = this.current;\n        for (let f = fields.length; f < line.length; f++) {\n          this.current.addFieldFor(line[f]);\n        }\n        if (this.callback) {\n          this.callback.onHeader(this.current.fields);\n        }\n      }\n\n      this.current.appendRow(line);\n      if (this.callback) {\n        // // Send the header after we guess the type\n        // if (this.series.rows.length === 0) {\n        //   this.callback.onHeader(this.series);\n        // }\n        this.callback.onRow(line);\n      }\n    }\n  };\n\n  readCSV(text: string): MutableDataFrame[] {\n    this.current = new MutableDataFrame({ fields: [] });\n    this.data = [this.current];\n\n    const papacfg = {\n      ...this.config,\n      dynamicTyping: false,\n      skipEmptyLines: true,\n      comments: false, // Keep comment lines\n      chunk: this.chunk,\n    } as ParseConfig;\n\n    Papa.parse(text, papacfg);\n\n    return this.data;\n  }\n}\n\ntype FieldWriter = (value: unknown) => string;\n\nfunction writeValue(value: unknown, config: CSVConfig): string {\n  if (value === null || value === undefined) {\n    return '';\n  }\n  const str = value.toString();\n  if (str.includes('\"')) {\n    // Escape the double quote characters\n    return config.quoteChar + str.replace(/\"/gi, '\"\"') + config.quoteChar;\n  }\n  if (str.includes('\\n') || (config.delimiter && str.includes(config.delimiter))) {\n    return config.quoteChar + str + config.quoteChar;\n  }\n  return str;\n}\n\nfunction makeFieldWriter(field: Field, config: CSVConfig): FieldWriter {\n  if (field.display) {\n    return (value: unknown) => {\n      const displayValue = field.display!(value);\n      return writeValue(formattedValueToString(displayValue), config);\n    };\n  }\n\n  return (value: unknown) => writeValue(value, config);\n}\n\nfunction getHeaderLine(key: string, fields: Field[], config: CSVConfig): string {\n  const isName = 'name' === key;\n  const isType = 'type' === key;\n\n  for (const f of fields) {\n    const display = f.config;\n    if (isName || isType || (display && display.hasOwnProperty(key))) {\n      let line = '#' + key + '#';\n      for (let i = 0; i < fields.length; i++) {\n        if (i > 0) {\n          line = line + config.delimiter;\n        }\n\n        let v = fields[i].name;\n        if (isType) {\n          v = fields[i].type;\n        } else if (isName) {\n          // already name\n        } else {\n          v = (fields[i].config as any)[key];\n        }\n        if (v) {\n          line = line + writeValue(v, config);\n        }\n      }\n      return line + config.newline;\n    }\n  }\n  return '';\n}\n\nfunction getLocaleDelimiter(): string {\n  const arr = ['x', 'y'];\n  if (arr.toLocaleString) {\n    return arr.toLocaleString().charAt(1);\n  }\n  return ',';\n}\n\nexport function toCSV(data: DataFrame[], config?: CSVConfig): string {\n  if (!data) {\n    return '';\n  }\n\n  config = defaults(config, {\n    delimiter: getLocaleDelimiter(),\n    newline: '\\r\\n',\n    quoteChar: '\"',\n    encoding: '',\n    headerStyle: CSVHeaderStyle.name,\n    useExcelHeader: false,\n  });\n  let csv = config.useExcelHeader ? `sep=${config.delimiter}${config.newline}` : '';\n\n  for (let s = 0; s < data.length; s++) {\n    const series = data[s];\n    const { fields } = series;\n\n    // ignore frames with no fields\n    if (fields.length === 0) {\n      continue;\n    }\n\n    if (config.headerStyle === CSVHeaderStyle.full) {\n      csv =\n        csv +\n        getHeaderLine('name', fields, config) +\n        getHeaderLine('type', fields, config) +\n        getHeaderLine('unit', fields, config) +\n        getHeaderLine('dateFormat', fields, config);\n    } else if (config.headerStyle === CSVHeaderStyle.name) {\n      for (let i = 0; i < fields.length; i++) {\n        if (i > 0) {\n          csv += config.delimiter;\n        }\n        csv += `\"${getFieldDisplayName(fields[i], series).replace(/\"/g, '\"\"')}\"`;\n      }\n      csv += config.newline;\n    }\n\n    const length = fields[0].values.length;\n\n    if (length > 0) {\n      const writers = fields.map((field) => makeFieldWriter(field, config!));\n      for (let i = 0; i < length; i++) {\n        for (let j = 0; j < fields.length; j++) {\n          if (j > 0) {\n            csv = csv + config.delimiter;\n          }\n\n          let v = fields[j].values[i];\n          // For FieldType frame, use value if it exists to prevent exporting [object object]\n          if (fields[j].type === FieldType.frame && fields[j].values[i].value) {\n            v = fields[j].values[i].value;\n          }\n          if (v !== null) {\n            csv = csv + writers[j](v);\n          }\n        }\n\n        if (i !== length - 1) {\n          csv = csv + config.newline;\n        }\n      }\n    }\n\n    if (s !== data.length - 1) {\n      csv = csv + config.newline;\n    }\n  }\n\n  return csv;\n}\n","/**\n * Round half away from zero ('commercial' rounding)\n * Uses correction to offset floating-point inaccuracies.\n * Works symmetrically for positive and negative numbers.\n *\n * ref: https://stackoverflow.com/a/48764436\n */\nexport function roundDecimals(val: number, dec = 0) {\n  if (Number.isInteger(val)) {\n    return val;\n  }\n\n  let p = 10 ** dec;\n  let n = val * p * (1 + Number.EPSILON);\n  return Math.round(n) / p;\n}\n\n/**\n * Tries to guess number of decimals needed to format a number\n *\n * used for determining minimum decimals required to uniformly\n * format a numric sequence, e.g. 10, 10.125, 10.25, 10.5\n *\n * good for precisce increments:  0.125            -> 3\n * bad  for arbitrary floats:     371.499999999999 -> 12\n */\nexport function guessDecimals(num: number) {\n  return (('' + num).split('.')[1] || '').length;\n}\n","export const objRemoveUndefined = (obj: { [key: string]: unknown }) => {\n  return Object.keys(obj).reduce((acc: { [key: string]: unknown }, key) => {\n    if (obj[key] !== undefined) {\n      acc[key] = obj[key];\n    }\n    return acc;\n  }, {});\n};\n\nexport const isEmptyObject = (value: unknown): value is Record<string, never> => {\n  return typeof value === 'object' && value !== null && Object.keys(value).length === 0;\n};\n","export const classicColors = [\n  '#7EB26D', // 0: pale green\n  '#EAB839', // 1: mustard\n  '#6ED0E0', // 2: light blue\n  '#EF843C', // 3: orange\n  '#E24D42', // 4: red\n  '#1F78C1', // 5: ocean\n  '#BA43A9', // 6: purple\n  '#705DA0', // 7: violet\n  '#508642', // 8: dark green\n  '#CCA300', // 9: dark sand\n  '#447EBC',\n  '#C15C17',\n  '#890F02',\n  '#0A437C',\n  '#6D1F62',\n  '#584477',\n  '#B7DBAB',\n  '#F4D598',\n  '#70DBED',\n  '#F9BA8F',\n  '#F29191',\n  '#82B5D8',\n  '#E5A8E2',\n  '#AEA2E0',\n  '#629E51',\n  '#E5AC0E',\n  '#64B0C8',\n  '#E0752D',\n  '#BF1B00',\n  '#0A50A1',\n  '#962D82',\n  '#614D93',\n  '#9AC48A',\n  '#F2C96D',\n  '#65C5DB',\n  '#F9934E',\n  '#EA6460',\n  '#5195CE',\n  '#D683CE',\n  '#806EB7',\n  '#3F6833',\n  '#967302',\n  '#2F575E',\n  '#99440A',\n  '#58140C',\n  '#052B51',\n  '#511749',\n  '#3F2B5B',\n  '#E0F9D7',\n  '#FCEACA',\n  '#CFFAFF',\n  '#F9E2D2',\n  '#FCE2DE',\n  '#BADFF4',\n  '#F9D9F9',\n  '#DEDAF7',\n];\n","import { Field } from '../types/dataFrame';\n\n/**\n * Returns minimal time step from series time field\n * @param timeField\n */\nexport const getSeriesTimeStep = (timeField: Field): number => {\n  let previousTime: number | undefined;\n  let minTimeStep: number | undefined;\n  let returnTimeStep = Number.MAX_VALUE;\n\n  for (let i = 0; i < timeField.values.length; i++) {\n    const currentTime = timeField.values[i];\n\n    if (previousTime !== undefined) {\n      const timeStep = currentTime - previousTime;\n\n      if (minTimeStep === undefined) {\n        returnTimeStep = timeStep;\n      }\n\n      if (timeStep < returnTimeStep) {\n        returnTimeStep = timeStep;\n      }\n    }\n    previousTime = currentTime;\n  }\n  return returnTimeStep;\n};\n\n/**\n * Checks if series time field has ms resolution\n * @param timeField\n */\nexport const hasMsResolution = (timeField: Field) => {\n  for (let i = 0; i < timeField.values.length; i++) {\n    const value = timeField.values[i];\n    if (value !== null && value !== undefined) {\n      const timestamp = value.toString();\n      if (timestamp.length === 13 && timestamp % 1000 !== 0) {\n        return true;\n      }\n    }\n  }\n  return false;\n};\n","import { RegistryItem, Registry } from './Registry';\n\nexport enum BinaryOperationID {\n  Add = '+',\n  Subtract = '-',\n  Divide = '/',\n  Multiply = '*',\n}\n\nexport type BinaryOperation = (left: number, right: number) => number;\n\ninterface BinaryOperatorInfo extends RegistryItem {\n  operation: BinaryOperation;\n  binaryOperationID: BinaryOperationID;\n}\n\nexport const binaryOperators = new Registry<BinaryOperatorInfo>(() => {\n  return [\n    {\n      id: BinaryOperationID.Add,\n      name: 'Add',\n      operation: (a: number, b: number) => a + b,\n      binaryOperationID: BinaryOperationID.Add,\n    },\n    {\n      id: BinaryOperationID.Subtract,\n      name: 'Subtract',\n      operation: (a: number, b: number) => a - b,\n      binaryOperationID: BinaryOperationID.Subtract,\n    },\n    {\n      id: BinaryOperationID.Multiply,\n      name: 'Multiply',\n      operation: (a: number, b: number) => a * b,\n      binaryOperationID: BinaryOperationID.Multiply,\n    },\n    {\n      id: BinaryOperationID.Divide,\n      name: 'Divide',\n      operation: (a: number, b: number) => a / b,\n      binaryOperationID: BinaryOperationID.Divide,\n    },\n  ];\n});\n","import { Registry, RegistryItem } from './Registry';\n\nexport enum UnaryOperationID {\n  Abs = 'abs',\n  Exp = 'exp',\n  Ln = 'ln',\n  Round = 'round',\n  Floor = 'floor',\n  Ceil = 'ceil',\n}\n\nexport type UnaryOperation = (value: number) => number;\n\ninterface UnaryOperatorInfo extends RegistryItem {\n  operation: UnaryOperation;\n  unaryOperationID: UnaryOperationID;\n}\n\nexport const unaryOperators = new Registry<UnaryOperatorInfo>(() => {\n  return [\n    {\n      id: UnaryOperationID.Abs,\n      name: 'Absolute value',\n      operation: (value: number) => Math.abs(value),\n      unaryOperationID: UnaryOperationID.Abs,\n    },\n    {\n      id: UnaryOperationID.Exp,\n      name: 'Natural exponent',\n      operation: (value: number) => Math.exp(value),\n      unaryOperationID: UnaryOperationID.Exp,\n    },\n    {\n      id: UnaryOperationID.Ln,\n      name: 'Natural logarithm',\n      operation: (value: number) => Math.log(value),\n      unaryOperationID: UnaryOperationID.Ln,\n    },\n    {\n      id: UnaryOperationID.Round,\n      name: 'Round',\n      operation: (value: number) => Math.round(value),\n      unaryOperationID: UnaryOperationID.Round,\n    },\n    {\n      id: UnaryOperationID.Floor,\n      name: 'Floor',\n      operation: (value: number) => Math.floor(value),\n      unaryOperationID: UnaryOperationID.Floor,\n    },\n    {\n      id: UnaryOperationID.Ceil,\n      name: 'Ceiling',\n      operation: (value: number) => Math.ceil(value),\n      unaryOperationID: UnaryOperationID.Ceil,\n    },\n  ];\n});\n","export enum NodeGraphDataFrameFieldNames {\n  // Unique identifier [required] [nodes + edges]\n  id = 'id',\n  // Text to show under the node [nodes]\n  title = 'title',\n  // Text to show under the node as second line [nodes]\n  subTitle = 'subtitle',\n  // Main value to be shown inside the node [nodes]\n  mainStat = 'mainstat',\n  // Second value to be shown inside the node under the mainStat [nodes]\n  secondaryStat = 'secondarystat',\n  // Prefix for fields which value will represent part of the color circle around the node, values should add up to 1 [nodes]\n  arc = 'arc__',\n  // Will show a named icon inside the node circle if defined. Can be used only with icons already available in\n  // grafana/ui [nodes]\n  icon = 'icon',\n  // Defines a single color if string (hex or html named value) or color mode config can be used as threshold or\n  // gradient. arc__ fields must not be defined if used [nodes + edges]\n  color = 'color',\n\n  // Id of the source node [required] [edges]\n  source = 'source',\n  // Id of the target node [required] [edges]\n  target = 'target',\n\n  // Prefix for fields which will be shown in a context menu [nodes + edges]\n  detail = 'detail__',\n\n  // Radius of the node [nodes]\n  nodeRadius = 'noderadius',\n\n  // Thickness of the edge [edges]\n  thickness = 'thickness',\n\n  // Whether the node or edge should be highlighted (e.g., shown in red) in the UI [nodes + edges]\n  // @deprecated -- for edges use color instead\n  highlighted = 'highlighted',\n\n  // Defines the stroke dash array for the edge [edges]. See SVG strokeDasharray definition for syntax.\n  strokeDasharray = 'strokedasharray',\n\n  // Supplies a fixed X position for the node to have in the finished graph.\n  fixedX = 'fixedx',\n\n  // Supplies a fixed Y position for the node to have in the finished graph.\n  fixedY = 'fixedy',\n\n  // Whether the node is instrumented or not\n  isInstrumented = 'isinstrumented',\n}\n","import { SelectableValue } from '../types/select';\n\nexport const toOption = (value: string): SelectableValue<string> => ({ label: value, value });\n","import { SortOrder } from '@grafana/schema';\n\n/** @internal */\nexport function moveItemImmutably<T>(arr: T[], from: number, to: number) {\n  const clone = [...arr];\n  Array.prototype.splice.call(clone, to, 0, Array.prototype.splice.call(clone, from, 1)[0]);\n  return clone;\n}\n\n/** @internal */\nexport function insertBeforeImmutably<T>(array: T[], item: T, index: number): T[] {\n  if (index < 0 || index > array.length) {\n    throw new Error('Index out of bounds');\n  }\n\n  const clone = [...array];\n  clone.splice(index, 0, item);\n\n  return clone;\n}\n\n/** @internal */\nexport function insertAfterImmutably<T>(array: T[], item: T, index: number): T[] {\n  if (index < 0 || index > array.length) {\n    throw new Error('Index out of bounds');\n  }\n\n  const clone = [...array];\n  clone.splice(index + 1, 0, item);\n\n  return clone;\n}\n\n/**\n * Given a sort order and a value, return a function that can be used to sort values\n * Null/undefined/empty string values are always sorted to the end regardless of the sort order provided\n */\nconst collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\nconst numericCompare = (a: number, b: number) => a - b;\n\nexport function sortValues(sort: SortOrder.Ascending | SortOrder.Descending) {\n  return (a: unknown, b: unknown) => {\n    if (a === b) {\n      return 0;\n    }\n\n    if (b == null || (typeof b === 'string' && b.trim() === '')) {\n      return -1;\n    }\n    if (a == null || (typeof a === 'string' && a?.trim() === '')) {\n      return 1;\n    }\n\n    let compareFn: (a: any, b: any) => number = collator.compare;\n\n    if (typeof a === 'number' && typeof b === 'number') {\n      compareFn = numericCompare;\n    }\n\n    if (sort === SortOrder.Descending) {\n      return compareFn(b, a);\n    }\n\n    return compareFn(a, b);\n  };\n}\n","type StoreValue = string | number | boolean | null;\ntype StoreSubscriber = () => void;\n\nexport class Store {\n  private subscribers: Map<string, Set<StoreSubscriber>> = new Map();\n\n  constructor() {\n    // Changes from other tabs\n    window.addEventListener('storage', (e) => {\n      if (e.key) {\n        this.notifySubscribers(e.key);\n      }\n    });\n  }\n\n  private notifySubscribers(key: string) {\n    const keySubscribers = this.subscribers.get(key);\n    if (keySubscribers) {\n      keySubscribers.forEach((subscriber) => subscriber());\n    }\n  }\n\n  subscribe(key: string, callback: StoreSubscriber) {\n    if (!this.subscribers.has(key)) {\n      this.subscribers.set(key, new Set());\n    }\n    this.subscribers.get(key)!.add(callback);\n\n    return () => {\n      const keySubscribers = this.subscribers.get(key);\n      if (keySubscribers) {\n        keySubscribers.delete(callback);\n        if (keySubscribers.size === 0) {\n          this.subscribers.delete(key);\n        }\n      }\n    };\n  }\n\n  get(key: string) {\n    return window.localStorage[key];\n  }\n\n  set(key: string, value: StoreValue) {\n    window.localStorage[key] = value;\n    this.notifySubscribers(key);\n  }\n\n  getBool(key: string, def: boolean): boolean {\n    if (def !== void 0 && !this.exists(key)) {\n      return def;\n    }\n    return window.localStorage[key] === 'true';\n  }\n\n  getObject<T = unknown>(key: string): T | undefined;\n  getObject<T = unknown>(key: string, def: T): T;\n  getObject<T = unknown>(key: string, def?: T) {\n    let ret = def;\n    if (this.exists(key)) {\n      const json = window.localStorage[key];\n      try {\n        ret = JSON.parse(json);\n      } catch (error) {\n        console.error(`Error parsing store object: ${key}. Returning default: ${def}. [${error}]`);\n      }\n    }\n    return ret;\n  }\n\n  /* Returns true when successfully stored, throws error if not successfully stored */\n  setObject(key: string, value: unknown) {\n    let json;\n    try {\n      json = JSON.stringify(value);\n    } catch (error) {\n      throw new Error(`Could not stringify object: ${key}. [${error}]`);\n    }\n    try {\n      this.set(key, json);\n    } catch (error) {\n      // Likely hitting storage quota\n      const errorToThrow = new Error(`Could not save item in localStorage: ${key}. [${error}]`);\n      if (error instanceof Error) {\n        errorToThrow.name = error.name;\n      }\n      throw errorToThrow;\n    }\n    return true;\n  }\n\n  exists(key: string) {\n    return window.localStorage[key] !== void 0;\n  }\n\n  delete(key: string) {\n    window.localStorage.removeItem(key);\n    this.notifySubscribers(key);\n  }\n}\n\nexport const store = new Store();\n","import { useEffect, useState } from 'react';\nimport * as React from 'react';\n\nimport { store } from './store';\n\nexport interface Props<T> {\n  storageKey: string;\n  defaultValue: T;\n  children: (value: T, onSaveToStore: (value: T) => void, onDeleteFromStore: () => void) => React.ReactNode;\n}\n\nexport const LocalStorageValueProvider = <T,>(props: Props<T>) => {\n  const { children, storageKey, defaultValue } = props;\n\n  const [state, setState] = useState({ value: store.getObject(props.storageKey, props.defaultValue) });\n\n  useEffect(() => {\n    const onStorageUpdate = (v: StorageEvent) => {\n      if (v.key === storageKey) {\n        setState({ value: store.getObject(props.storageKey, props.defaultValue) });\n      }\n    };\n\n    window.addEventListener('storage', onStorageUpdate);\n\n    return () => {\n      window.removeEventListener('storage', onStorageUpdate);\n    };\n  });\n\n  const onSaveToStore = (value: T) => {\n    try {\n      store.setObject(storageKey, value);\n    } catch (error) {\n      console.error(error);\n    }\n    setState({ value });\n  };\n\n  const onDeleteFromStore = () => {\n    try {\n      store.delete(storageKey);\n    } catch (error) {\n      console.log(error);\n    }\n    setState({ value: defaultValue });\n  };\n\n  return <>{children(state.value, onSaveToStore, onDeleteFromStore)}</>;\n};\n","import { PanelPlugin } from '../panel/PanelPlugin';\nimport { PluginMeta } from '../types/plugin';\n\nexport function throwIfAngular(module?: System.Module): void;\nexport function throwIfAngular(panel?: PanelPlugin): void;\nexport function throwIfAngular(plugin?: PluginMeta): void;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function throwIfAngular(data?: any): void {\n  const isAngularPlugin = data?.angular?.detected ?? data?.angularDetected ?? false;\n  const isAngularPanel = data?.angularPanelCtrl ?? false;\n  const isAngularModule = data.PanelCtrl ?? data?.ConfigCtrl ?? false;\n  if (isAngularPlugin || isAngularPanel || isAngularModule) {\n    throw new Error('Angular plugins are not supported');\n  }\n}\n","import { map } from 'rxjs/operators';\n\nimport { getTimeField } from '../../dataframe/processDataFrame';\nimport { DataFrame } from '../../types/dataFrame';\nimport { SynchronousDataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\nimport { joinByFieldTransformer } from './joinByField';\n\nexport const ensureColumnsTransformer: SynchronousDataTransformerInfo = {\n  id: DataTransformerID.ensureColumns,\n  name: 'Ensure Columns Transformer',\n  description: 'Will check if current data frames is series or columns. If in series it will convert to columns.',\n\n  operator: (options, ctx) => (source) =>\n    source.pipe(map((data) => ensureColumnsTransformer.transformer(options, ctx)(data))),\n\n  transformer: (_options, ctx) => (frames: DataFrame[]) => {\n    // Assume timeseries should first be joined by time\n    const timeFieldName = findConsistentTimeFieldName(frames);\n\n    if (frames.length > 1 && timeFieldName) {\n      return joinByFieldTransformer.transformer(\n        {\n          byField: timeFieldName,\n        },\n        ctx\n      )(frames);\n    }\n    return frames;\n  },\n};\n\n/**\n * Find the name for the time field used in all frames (if one exists)\n */\nfunction findConsistentTimeFieldName(data: DataFrame[]): string | undefined {\n  let name: string | undefined = undefined;\n  for (const frame of data) {\n    const { timeField } = getTimeField(frame);\n    if (!timeField) {\n      return undefined; // Not timeseries\n    }\n    if (!name) {\n      name = timeField.name;\n    } else if (name !== timeField.name) {\n      // Second frame has a different time column?!\n      return undefined;\n    }\n  }\n  return name;\n}\n","import { DataFrame } from '../../types/dataFrame';\nimport { SynchronousDataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\nexport interface NoopTransformerOptions {}\n\nexport const noopTransformer: SynchronousDataTransformerInfo<NoopTransformerOptions> = {\n  id: DataTransformerID.noop,\n  name: 'noop',\n  description: 'No-operation transformer',\n  defaultOptions: {},\n\n  /** no operation */\n  operator: (options: NoopTransformerOptions) => (source) => source,\n\n  /** no operation */\n  transformer: (options: NoopTransformerOptions) => (data: DataFrame[]) => data,\n};\n","import { defaults } from 'lodash';\nimport { map } from 'rxjs/operators';\n\nimport { getTimeField } from '../../dataframe/processDataFrame';\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { NullValueMode } from '../../types/data';\nimport { DataFrame, FieldType, Field } from '../../types/dataFrame';\nimport { DataTransformContext, DataTransformerInfo } from '../../types/transformations';\nimport { BinaryOperationID, binaryOperators } from '../../utils/binaryOperators';\nimport { UnaryOperationID, unaryOperators } from '../../utils/unaryOperators';\nimport { doStandardCalcs, fieldReducers, ReducerID } from '../fieldReducer';\nimport { getFieldMatcher } from '../matchers';\nimport { FieldMatcherID } from '../matchers/ids';\n\nimport { ensureColumnsTransformer } from './ensureColumns';\nimport { DataTransformerID } from './ids';\nimport { noopTransformer } from './noop';\n\nexport enum CalculateFieldMode {\n  ReduceRow = 'reduceRow',\n  CumulativeFunctions = 'cumulativeFunctions',\n  WindowFunctions = 'windowFunctions',\n  BinaryOperation = 'binary',\n  UnaryOperation = 'unary',\n  Index = 'index',\n}\n\nexport enum WindowSizeMode {\n  Percentage = 'percentage',\n  Fixed = 'fixed',\n}\n\nexport enum WindowAlignment {\n  Trailing = 'trailing',\n  Centered = 'centered',\n}\n\nexport interface ReduceOptions {\n  include?: string[]; // Assume all fields\n  reducer: ReducerID;\n  nullValueMode?: NullValueMode;\n}\n\nexport interface CumulativeOptions {\n  field?: string;\n  reducer: ReducerID;\n}\n\nexport interface WindowOptions extends CumulativeOptions {\n  windowSize?: number;\n  windowSizeMode?: WindowSizeMode;\n  windowAlignment?: WindowAlignment;\n}\n\nexport interface UnaryOptions {\n  operator: UnaryOperationID;\n  fieldName: string;\n}\n\nexport interface BinaryOptions {\n  left: BinaryValue;\n  operator: BinaryOperationID;\n  right: BinaryValue;\n}\n\nexport interface BinaryValue {\n  fixed?: string;\n  matcher?: { id?: FieldMatcherID; options?: string };\n}\n\ninterface IndexOptions {\n  asPercentile: boolean;\n}\n\nconst defaultReduceOptions: ReduceOptions = {\n  reducer: ReducerID.sum,\n};\n\nexport const defaultWindowOptions: WindowOptions = {\n  reducer: ReducerID.mean,\n  windowAlignment: WindowAlignment.Trailing,\n  windowSizeMode: WindowSizeMode.Percentage,\n  windowSize: 0.1,\n};\n\nconst defaultBinaryOptions: BinaryOptions = {\n  left: { fixed: '' },\n  operator: BinaryOperationID.Add,\n  right: { fixed: '' },\n};\n\nconst defaultUnaryOptions: UnaryOptions = {\n  operator: UnaryOperationID.Abs,\n  fieldName: '',\n};\n\nexport interface CalculateFieldTransformerOptions {\n  // True/False or auto\n  timeSeries?: boolean;\n  mode: CalculateFieldMode; // defaults to 'reduce'\n\n  // Only one should be filled\n  reduce?: ReduceOptions;\n  window?: WindowOptions;\n  cumulative?: CumulativeOptions;\n  binary?: BinaryOptions;\n  unary?: UnaryOptions;\n  index?: IndexOptions;\n\n  // Remove other fields\n  replaceFields?: boolean;\n\n  // Output field properties\n  alias?: string; // The output field name\n  // TODO: config?: FieldConfig; or maybe field overrides? since the UI exists\n}\n\ntype ValuesCreator = (data: DataFrame) => unknown[] | undefined;\n\nexport const calculateFieldTransformer: DataTransformerInfo<CalculateFieldTransformerOptions> = {\n  id: DataTransformerID.calculateField,\n  name: 'Add field from calculation',\n  description: 'Use the row values to calculate a new field',\n  defaultOptions: {\n    mode: CalculateFieldMode.ReduceRow,\n    reduce: {\n      reducer: ReducerID.sum,\n    },\n  },\n  operator: (options, ctx) => (outerSource) => {\n    const mode = options.mode ?? CalculateFieldMode.ReduceRow;\n\n    const asTimeSeries = options.timeSeries !== false;\n\n    const right = options.binary?.right;\n    const rightVal = typeof right === 'string' ? right : typeof right === 'object' ? right.fixed : undefined;\n    const isBinaryFixed = mode === CalculateFieldMode.BinaryOperation && !Number.isNaN(Number(rightVal));\n\n    const needsSingleFrame = asTimeSeries && !isBinaryFixed;\n\n    const operator = needsSingleFrame\n      ? ensureColumnsTransformer.operator(null, ctx)\n      : noopTransformer.operator({}, ctx);\n\n    return outerSource.pipe(\n      operator,\n      map((data) => {\n        let creator: ValuesCreator | undefined = undefined;\n\n        switch (mode) {\n          case CalculateFieldMode.ReduceRow:\n            creator = getReduceRowCreator(defaults(options.reduce, defaultReduceOptions), data);\n            break;\n          case CalculateFieldMode.CumulativeFunctions:\n            creator = getCumulativeCreator(defaults(options.cumulative, defaultReduceOptions), data);\n            break;\n          case CalculateFieldMode.WindowFunctions:\n            creator = getWindowCreator(defaults(options.window, defaultWindowOptions), data);\n            break;\n          case CalculateFieldMode.UnaryOperation:\n            creator = getUnaryCreator(defaults(options.unary, defaultUnaryOptions), data);\n            break;\n          case CalculateFieldMode.BinaryOperation:\n            const fieldNames: string[] = [];\n            data.map((frame) => {\n              frame.fields.map((field) => {\n                fieldNames.push(field.name);\n              });\n            });\n            const binaryOptions = {\n              left: checkBinaryValueType(options.binary?.left ?? '', fieldNames),\n              operator: options.binary?.operator ?? defaultBinaryOptions.operator,\n              right: checkBinaryValueType(options.binary?.right ?? '', fieldNames),\n            };\n            options.binary = binaryOptions;\n            if (binaryOptions.left?.matcher?.id && binaryOptions.left?.matcher.id === FieldMatcherID.byType) {\n              const fieldType = binaryOptions.left.matcher.options;\n              const operator = binaryOperators.getIfExists(binaryOptions.operator);\n              const outFrames = data.map((frame) => {\n                const { timeField } = getTimeField(frame);\n                const newFields: Field[] = [];\n                let didAddNewFields = false;\n                if (timeField && options.timeSeries !== false) {\n                  newFields.push(timeField);\n                }\n                // For each field of type match, apply operator\n                frame.fields.map((field, index) => {\n                  if (!options.replaceFields && !newFields.includes(field)) {\n                    newFields.push(field);\n                  }\n                  if (field.type === fieldType) {\n                    const left = field.values;\n                    // TODO consolidate common creator logic\n                    const right = findFieldValuesWithNameOrConstant(\n                      frame,\n                      binaryOptions.right ?? defaultBinaryOptions.right,\n                      data,\n                      ctx\n                    );\n                    if (!left || !right || !operator) {\n                      return undefined;\n                    }\n\n                    const arr = new Array(left.length);\n                    for (let i = 0; i < arr.length; i++) {\n                      arr[i] = operator.operation(left[i], right[i]);\n                    }\n                    const newField = {\n                      ...field,\n                      name: `${field.name} ${options.binary?.operator ?? ''} ${options.binary?.right.matcher?.options ?? options.binary?.right.fixed}`,\n                      values: arr,\n                    };\n                    delete newField.state;\n                    newFields.push(newField);\n                    didAddNewFields = true;\n                  }\n                });\n\n                if (options.replaceFields && !didAddNewFields) {\n                  return undefined;\n                }\n\n                return { ...frame, fields: newFields };\n              });\n\n              return outFrames.filter((frame) => frame != null);\n            } else {\n              creator = getBinaryCreator(defaults(binaryOptions, defaultBinaryOptions), data, ctx);\n            }\n            break;\n          case CalculateFieldMode.Index:\n            return data.map((frame) => {\n              const indexArr = [...Array(frame.length).keys()];\n\n              if (options.index?.asPercentile) {\n                for (let i = 0; i < indexArr.length; i++) {\n                  indexArr[i] = indexArr[i] / indexArr.length;\n                }\n              }\n\n              const f = {\n                name: options.alias ?? 'Row',\n                type: FieldType.number,\n                values: indexArr,\n                config: options.index?.asPercentile ? { unit: 'percentunit' } : {},\n              };\n              return {\n                ...frame,\n                fields: options.replaceFields ? [f] : [...frame.fields, f],\n              };\n            });\n        }\n\n        // Nothing configured\n        if (!creator) {\n          return data;\n        }\n\n        const outFrames = data.map((frame) => {\n          // delegate field creation to the specific function\n          const values = creator!(frame);\n          if (!values) {\n            // if nothing was done to frame, omit it when replacing fields\n            if (options.replaceFields) {\n              return undefined;\n            }\n            return frame;\n          }\n\n          const field = {\n            name: getNameFromOptions(options),\n            type: FieldType.number,\n            config: {},\n            values,\n          };\n          let fields: Field[] = [];\n\n          // Replace all fields with the single field\n          if (options.replaceFields) {\n            const { timeField } = getTimeField(frame);\n            if (timeField && options.timeSeries !== false) {\n              fields = [timeField, field];\n            } else {\n              fields = [field];\n            }\n          } else {\n            fields = [...frame.fields, field];\n          }\n          return {\n            ...frame,\n            fields,\n          };\n        });\n        return outFrames.filter((frame) => frame != null);\n      })\n    );\n  },\n};\n\nfunction getWindowCreator(options: WindowOptions, allFrames: DataFrame[]): ValuesCreator {\n  if (options.windowSize! <= 0) {\n    throw new Error('Add field from calculation transformation - Window size must be larger than 0');\n  }\n\n  let matcher = getFieldMatcher({\n    id: FieldMatcherID.numeric,\n  });\n\n  if (options.field) {\n    matcher = getFieldMatcher({\n      id: FieldMatcherID.byNames,\n      options: {\n        names: [options.field],\n      },\n    });\n  }\n\n  return (frame: DataFrame) => {\n    const window = Math.ceil(\n      options.windowSize! * (options.windowSizeMode === WindowSizeMode.Percentage ? frame.length : 1)\n    );\n\n    // Find the columns that should be examined\n    let selectedField: Field | null = null;\n    for (const field of frame.fields) {\n      if (matcher(field, frame, allFrames)) {\n        selectedField = field;\n        break;\n      }\n    }\n\n    if (!selectedField) {\n      return;\n    }\n\n    if (![ReducerID.mean, ReducerID.stdDev, ReducerID.variance].includes(options.reducer)) {\n      throw new Error(`Add field from calculation transformation - Unsupported reducer: ${options.reducer}`);\n    }\n\n    if (options.windowAlignment === WindowAlignment.Centered) {\n      return getCenteredWindowValues(frame, options.reducer, selectedField, window);\n    } else {\n      return getTrailingWindowValues(frame, options.reducer, selectedField, window);\n    }\n  };\n}\n\nfunction getTrailingWindowValues(frame: DataFrame, reducer: ReducerID, selectedField: Field, window: number) {\n  const vals: number[] = [];\n  let sum = 0;\n  let count = 0;\n  for (let i = 0; i < frame.length; i++) {\n    if (reducer === ReducerID.mean) {\n      const currentValue = selectedField.values[i];\n      if (currentValue !== null && currentValue !== undefined) {\n        count++;\n        sum += currentValue;\n\n        if (i > window - 1) {\n          const value = selectedField.values[i - window];\n          if (value != null) {\n            sum -= value;\n            count--;\n          }\n        }\n      }\n      vals.push(count === 0 ? 0 : sum / count);\n    } else if (reducer === ReducerID.variance) {\n      const start = Math.max(0, i - window + 1);\n      const end = i + 1;\n      vals.push(calculateVariance(selectedField.values.slice(start, end)));\n    } else if (reducer === ReducerID.stdDev) {\n      const start = Math.max(0, i - window + 1);\n      const end = i + 1;\n      vals.push(calculateStdDev(selectedField.values.slice(start, end)));\n    }\n  }\n  return vals;\n}\n\nfunction getCenteredWindowValues(frame: DataFrame, reducer: ReducerID, selectedField: Field, window: number) {\n  const vals: number[] = [];\n  let sum = 0;\n  let count = 0;\n  // Current value (i) is included in the leading part of the window. Which means if the window size is odd,\n  // the leading part of the window will be larger than the trailing part.\n  const leadingPartOfWindow = Math.ceil(window / 2) - 1;\n  const trailingPartOfWindow = Math.floor(window / 2);\n  for (let i = 0; i < frame.length; i++) {\n    const first = i - trailingPartOfWindow;\n    const last = i + leadingPartOfWindow;\n    if (reducer === ReducerID.mean) {\n      if (i === 0) {\n        // We're at the start and need to prime the leading part of the window\n        for (let x = 0; x < leadingPartOfWindow + 1 && x < selectedField.values.length; x++) {\n          if (selectedField.values[x] != null) {\n            sum += selectedField.values[x];\n            count++;\n          }\n        }\n      } else {\n        if (last < selectedField.values.length) {\n          // Last is inside the data and should be added.\n          if (selectedField.values[last] != null) {\n            sum += selectedField.values[last];\n            count++;\n          }\n        }\n        if (first > 0) {\n          // Remove values that have fallen outside of the window, if the start of the window isn't outside of the data.\n          if (selectedField.values[first - 1] != null) {\n            sum -= selectedField.values[first - 1];\n            count--;\n          }\n        }\n      }\n      vals.push(count === 0 ? 0 : sum / count);\n    } else if (reducer === ReducerID.variance) {\n      const windowVals = selectedField.values.slice(\n        Math.max(0, first),\n        Math.min(last + 1, selectedField.values.length)\n      );\n      vals.push(calculateVariance(windowVals));\n    } else if (reducer === ReducerID.stdDev) {\n      const windowVals = selectedField.values.slice(\n        Math.max(0, first),\n        Math.min(last + 1, selectedField.values.length)\n      );\n      vals.push(calculateStdDev(windowVals));\n    }\n  }\n  return vals;\n}\n\nfunction calculateVariance(vals: number[]): number {\n  if (vals.length < 1) {\n    return 0;\n  }\n  let squareSum = 0;\n  let runningMean = 0;\n  let nonNullCount = 0;\n  for (let i = 0; i < vals.length; i++) {\n    const currentValue = vals[i];\n    if (currentValue != null) {\n      nonNullCount++;\n      let _oldMean = runningMean;\n      runningMean += (currentValue - _oldMean) / nonNullCount;\n      squareSum += (currentValue - _oldMean) * (currentValue - runningMean);\n    }\n  }\n  if (nonNullCount === 0) {\n    return 0;\n  }\n  const variance = squareSum / nonNullCount;\n  return variance;\n}\n\nfunction calculateStdDev(vals: number[]): number {\n  return Math.sqrt(calculateVariance(vals));\n}\n\nfunction getCumulativeCreator(options: CumulativeOptions, allFrames: DataFrame[]): ValuesCreator {\n  let matcher = getFieldMatcher({\n    id: FieldMatcherID.numeric,\n  });\n\n  if (options.field) {\n    matcher = getFieldMatcher({\n      id: FieldMatcherID.byNames,\n      options: {\n        names: [options.field],\n      },\n    });\n  }\n\n  if (![ReducerID.mean, ReducerID.sum].includes(options.reducer)) {\n    throw new Error(`Add field from calculation transformation - Unsupported reducer: ${options.reducer}`);\n  }\n\n  return (frame: DataFrame) => {\n    // Find the columns that should be examined\n    let selectedField: Field | null = null;\n    for (const field of frame.fields) {\n      if (matcher(field, frame, allFrames)) {\n        selectedField = field;\n        break;\n      }\n    }\n\n    if (!selectedField) {\n      return;\n    }\n\n    const vals: number[] = [];\n\n    let total = 0;\n    for (let i = 0; i < frame.length; i++) {\n      total += selectedField.values[i] ?? 0;\n      if (options.reducer === ReducerID.sum) {\n        vals.push(total);\n      } else if (options.reducer === ReducerID.mean) {\n        vals.push(total / (i + 1));\n      }\n    }\n\n    return vals;\n  };\n}\n\nfunction getReduceRowCreator(options: ReduceOptions, allFrames: DataFrame[]): ValuesCreator {\n  let matcher = getFieldMatcher({\n    id: FieldMatcherID.numeric,\n  });\n\n  if (options.include && options.include.length) {\n    matcher = getFieldMatcher({\n      id: FieldMatcherID.byNames,\n      options: {\n        names: options.include,\n      },\n    });\n  }\n\n  const info = fieldReducers.get(options.reducer);\n\n  if (!info) {\n    throw new Error(`Unknown reducer: ${options.reducer}`);\n  }\n\n  const reducer = info.reduce ?? doStandardCalcs;\n  const ignoreNulls = options.nullValueMode === NullValueMode.Ignore;\n  const nullAsZero = options.nullValueMode === NullValueMode.AsZero;\n\n  return (frame: DataFrame) => {\n    // Find the columns that should be examined\n    const columns = [];\n    for (const field of frame.fields) {\n      if (matcher(field, frame, allFrames)) {\n        columns.push(field.values);\n      }\n    }\n\n    // Prepare a \"fake\" field for the row\n    const size = columns.length;\n    const row: Field = {\n      name: 'temp',\n      values: new Array(size),\n      type: FieldType.number,\n      config: {},\n    };\n    const vals: number[] = [];\n\n    for (let i = 0; i < frame.length; i++) {\n      for (let j = 0; j < size; j++) {\n        row.values[j] = columns[j][i];\n      }\n\n      vals.push(reducer(row, ignoreNulls, nullAsZero)[options.reducer]);\n    }\n\n    return vals;\n  };\n}\n\nfunction findFieldValuesWithNameOrConstant(\n  frame: DataFrame,\n  value: BinaryValue,\n  allFrames: DataFrame[],\n  ctx: DataTransformContext\n): number[] | undefined {\n  if (!value) {\n    return undefined;\n  }\n\n  if (value.matcher && value.matcher.id === FieldMatcherID.byName) {\n    const name = value.matcher.options ?? '';\n\n    for (const f of frame.fields) {\n      if (name === getFieldDisplayName(f, frame, allFrames)) {\n        if (f.type === FieldType.boolean) {\n          return f.values.map((v) => (v ? 1 : 0));\n        }\n        return f.values;\n      }\n    }\n  }\n\n  const v = parseFloat(value.fixed ?? value.matcher?.options ?? '');\n  if (!isNaN(v)) {\n    return new Array(frame.length).fill(v);\n  }\n\n  return undefined;\n}\n\nfunction getBinaryCreator(options: BinaryOptions, allFrames: DataFrame[], ctx: DataTransformContext): ValuesCreator {\n  const operator = binaryOperators.getIfExists(options.operator);\n\n  return (frame: DataFrame) => {\n    const left = findFieldValuesWithNameOrConstant(frame, options.left, allFrames, ctx);\n    const right = findFieldValuesWithNameOrConstant(frame, options.right, allFrames, ctx);\n    if (!left || !right || !operator) {\n      return undefined;\n    }\n\n    const arr = new Array(left.length);\n    for (let i = 0; i < arr.length; i++) {\n      arr[i] = operator.operation(left[i], right[i]);\n    }\n    return arr;\n  };\n}\n\nexport function checkBinaryValueType(value: BinaryValue | string, names: string[]): BinaryValue {\n  // Support old binary value structure\n  if (typeof value === 'string') {\n    if (isNaN(Number(value))) {\n      return { matcher: { id: FieldMatcherID.byName, options: value } };\n    } else {\n      // If it's a number, check if matches name, otherwise store as fixed number value\n      if (names.includes(value)) {\n        return { matcher: { id: FieldMatcherID.byName, options: value } };\n      } else {\n        return { fixed: value };\n      }\n    }\n  }\n  // Pass through new BinaryValue structure\n  return value;\n}\n\nfunction getUnaryCreator(options: UnaryOptions, allFrames: DataFrame[]): ValuesCreator {\n  const operator = unaryOperators.getIfExists(options.operator);\n\n  return (frame: DataFrame) => {\n    let value: number[] = [];\n\n    for (const f of frame.fields) {\n      if (options.fieldName === getFieldDisplayName(f, frame, allFrames) && f.type === FieldType.number) {\n        value = f.values;\n      }\n    }\n\n    if (!value.length || !operator) {\n      return undefined;\n    }\n\n    const arr = new Array(value.length);\n    for (let i = 0; i < arr.length; i++) {\n      arr[i] = operator.operation(value[i]);\n    }\n\n    return arr;\n  };\n}\n\nexport function getNameFromOptions(options: CalculateFieldTransformerOptions) {\n  if (options.alias?.length) {\n    return options.alias;\n  }\n\n  switch (options.mode) {\n    case CalculateFieldMode.CumulativeFunctions: {\n      const { cumulative } = options;\n      return `cumulative ${cumulative?.reducer ?? ''}${cumulative?.field ? `(${cumulative.field})` : ''}`;\n    }\n    case CalculateFieldMode.WindowFunctions: {\n      const { window } = options;\n      return `${window?.windowAlignment ?? ''} moving ${window?.reducer ?? ''}${\n        window?.field ? `(${window.field})` : ''\n      }`;\n    }\n    case CalculateFieldMode.UnaryOperation: {\n      const { unary } = options;\n      return `${unary?.operator ?? ''}${unary?.fieldName ? `(${unary.fieldName})` : ''}`;\n    }\n    case CalculateFieldMode.BinaryOperation: {\n      const { binary } = options;\n      const alias = `${binary?.left?.matcher?.options ?? binary?.left?.fixed ?? ''} ${binary?.operator ?? ''} ${binary?.right?.matcher?.options ?? binary?.right?.fixed ?? ''}`;\n\n      //Remove $ signs as they will be interpolated and cause issues. Variables can still be used\n      //in alias but shouldn't in the autogenerated name\n      return alias.replace(/\\$/g, '');\n    }\n    case CalculateFieldMode.ReduceRow:\n      {\n        const r = fieldReducers.getIfExists(options.reduce?.reducer);\n        if (r) {\n          return r.name;\n        }\n      }\n      break;\n    case CalculateFieldMode.Index:\n      return 'Row';\n  }\n\n  return 'math';\n}\n","import { map } from 'rxjs/operators';\n\nimport { DataFrame, Field, TIME_SERIES_VALUE_FIELD_NAME } from '../../types/dataFrame';\nimport { DataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\nexport enum ConcatenateFrameNameMode {\n  /**\n   * Ignore the source frame name when moving to the destination\n   */\n  Drop = 'drop',\n\n  /**\n   * Copy the source frame name to the destination field.  The final field will contain\n   * both the frame and field name\n   */\n  FieldName = 'field',\n\n  /**\n   * Copy the source frame name to a label on the field.  The label key is controlled\n   * by frameNameLabel\n   */\n  Label = 'label',\n}\n\nexport interface ConcatenateTransformerOptions {\n  frameNameMode?: ConcatenateFrameNameMode;\n  frameNameLabel?: string;\n}\n\nexport const concatenateTransformer: DataTransformerInfo<ConcatenateTransformerOptions> = {\n  id: DataTransformerID.concatenate,\n  name: 'Concatenate fields',\n  description:\n    'Combine all fields into a single frame.  Values will be appended with undefined values if not the same length.',\n  defaultOptions: {\n    frameNameMode: ConcatenateFrameNameMode.FieldName,\n    frameNameLabel: 'frame',\n  },\n  operator: (options) => (source) =>\n    source.pipe(\n      map((dataFrames) => {\n        if (!Array.isArray(dataFrames) || dataFrames.length < 2) {\n          return dataFrames; // noop with single frame\n        }\n        return [concatenateFields(dataFrames, options)];\n      })\n    ),\n};\n\n/**\n * @internal only exported for tests\n */\nexport function concatenateFields(data: DataFrame[], opts: ConcatenateTransformerOptions): DataFrame {\n  let sameLength = true;\n  let maxLength = data[0].length;\n  const frameNameLabel = opts.frameNameLabel ?? 'frame';\n  let fields: Field[] = [];\n\n  for (const frame of data) {\n    if (maxLength !== frame.length) {\n      sameLength = false;\n      maxLength = Math.max(maxLength, frame.length);\n    }\n\n    for (const f of frame.fields) {\n      const copy = { ...f };\n      copy.state = undefined;\n      if (frame.name) {\n        if (opts.frameNameMode === ConcatenateFrameNameMode.Drop) {\n          // nothing -- skip the name\n        } else if (opts.frameNameMode === ConcatenateFrameNameMode.Label) {\n          copy.labels = { ...f.labels };\n          copy.labels[frameNameLabel] = frame.name;\n        } else if (!copy.name || copy.name === TIME_SERIES_VALUE_FIELD_NAME) {\n          copy.name = frame.name;\n        } else {\n          copy.name = `${frame.name} · ${f.name}`;\n        }\n      }\n      fields.push(copy);\n    }\n  }\n\n  // Make sure all fields have the same length\n  if (!sameLength) {\n    fields = fields.map((f) => {\n      if (f.values.length === maxLength) {\n        return f;\n      }\n      const values = f.values.slice();\n      values.length = maxLength;\n      return {\n        ...f,\n        values: values,\n      };\n    });\n  }\n\n  return {\n    fields,\n    length: maxLength,\n  };\n}\n","import { map } from 'rxjs/operators';\n\nimport { TimeZone } from '@grafana/schema';\n\nimport { dateTimeParse, DateTimeOptionsWhenParsing } from '../../datetime/parser';\nimport { DataFrame, EnumFieldConfig, Field, FieldType } from '../../types/dataFrame';\nimport { SynchronousDataTransformerInfo } from '../../types/transformations';\nimport { fieldMatchers } from '../matchers';\nimport { FieldMatcherID } from '../matchers/ids';\n\nimport { DataTransformerID } from './ids';\n\nexport interface ConvertFieldTypeTransformerOptions {\n  conversions: ConvertFieldTypeOptions[];\n}\n\nexport interface ConvertFieldTypeOptions {\n  /**\n   * The field to convert field type\n   */\n  targetField?: string;\n  /**\n   * The field type to convert to\n   */\n  destinationType?: FieldType;\n  /**\n   * Date format to parse a string datetime\n   */\n  dateFormat?: string;\n  /**\n   * When converting an array to a string, the values can be joined with a custom separator\n   */\n  joinWith?: string;\n  /**\n   * When converting a date to a string an option timezone.\n   */\n  timezone?: TimeZone;\n  /**\n   * When converting to an enumeration, this is the target config\n   */\n  enumConfig?: EnumFieldConfig;\n}\n\nexport const convertFieldTypeTransformer: SynchronousDataTransformerInfo<ConvertFieldTypeTransformerOptions> = {\n  id: DataTransformerID.convertFieldType,\n  name: 'Convert field type',\n  description: 'Convert a field to a specified field type.',\n  defaultOptions: {\n    fields: {},\n    conversions: [{ targetField: undefined, destinationType: undefined, dateFormat: undefined, timezone: undefined }],\n  },\n\n  operator: (options, ctx) => (source) =>\n    source.pipe(map((data) => convertFieldTypeTransformer.transformer(options, ctx)(data))),\n\n  transformer: (options: ConvertFieldTypeTransformerOptions) => (data: DataFrame[]) => {\n    if (!Array.isArray(data) || data.length === 0) {\n      return data;\n    }\n    return convertFieldTypes(options, data) ?? [];\n  },\n};\n\n/**\n * Convert field types for dataframe(s)\n * @param options - field type conversion options\n * @param frames - dataframe(s) with field types to convert\n * @returns dataframe(s) with converted field types\n */\nexport function convertFieldTypes(options: ConvertFieldTypeTransformerOptions, frames: DataFrame[]): DataFrame[] {\n  if (!options.conversions.length) {\n    return frames;\n  }\n\n  const framesCopy = frames.map((frame) => ({ ...frame }));\n\n  for (const conversion of options.conversions) {\n    if (!conversion.targetField) {\n      continue;\n    }\n    const matches = fieldMatchers.get(FieldMatcherID.byName).get(conversion.targetField);\n    for (const frame of framesCopy) {\n      frame.fields = frame.fields.map((field) => {\n        if (matches(field, frame, framesCopy)) {\n          return convertFieldType(field, conversion);\n        }\n        return field;\n      });\n    }\n  }\n\n  return framesCopy;\n}\n\n/**\n * Convert a single field type to specified field type.\n * @param field - field to convert\n * @param opts - field conversion options\n * @returns converted field\n *\n * @internal\n */\nexport function convertFieldType(field: Field, opts: ConvertFieldTypeOptions): Field {\n  switch (opts.destinationType) {\n    case FieldType.time:\n      return ensureTimeField(field, opts.dateFormat);\n    case FieldType.number:\n      return fieldToNumberField(field);\n    case FieldType.string:\n      return fieldToStringField(field, opts.dateFormat, { timeZone: opts.timezone }, opts.joinWith);\n    case FieldType.boolean:\n      return fieldToBooleanField(field);\n    case FieldType.enum:\n      return fieldToEnumField(field, opts.enumConfig);\n    case FieldType.other:\n      return fieldToComplexField(field);\n    default:\n      return field;\n  }\n}\n\n// matches common ISO 8601 (see tests)\nconst iso8601Regex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3,})?(?:Z|[-+]\\d{2}:?\\d{2})$/;\n\n/**\n * @internal\n */\nexport function fieldToTimeField(field: Field, dateFormat?: string): Field {\n  let opts = dateFormat ? { format: dateFormat } : undefined;\n\n  const timeValues = field.values.slice();\n\n  let firstDefined = timeValues.find((v) => v != null);\n  const convertToMS = typeof firstDefined === 'number' && dateFormat === 'X';\n  const isISO8601 = typeof firstDefined === 'string' && iso8601Regex.test(firstDefined);\n\n  for (let t = 0; t < timeValues.length; t++) {\n    if (timeValues[t]) {\n      let parsed = isISO8601 ? Date.parse(timeValues[t]) : dateTimeParse(timeValues[t], opts).valueOf();\n      if (Number.isFinite(parsed)) {\n        timeValues[t] = convertToMS ? parsed * 1000 : parsed;\n      } else {\n        timeValues[t] = null;\n      }\n    } else {\n      timeValues[t] = null;\n    }\n  }\n\n  return {\n    ...field,\n    type: FieldType.time,\n    values: timeValues,\n  };\n}\n\nfunction fieldToNumberField(field: Field): Field {\n  const numValues = field.values.slice();\n\n  const valuesAsStrings = numValues.some((v) => typeof v === 'string');\n\n  for (let n = 0; n < numValues.length; n++) {\n    let toBeConverted = numValues[n];\n\n    if (valuesAsStrings && toBeConverted != null && typeof toBeConverted === 'string') {\n      // some numbers returned from datasources have commas\n      // strip the commas, coerce the string to a number\n      toBeConverted = toBeConverted.replace(/,/g, '');\n    }\n\n    const number = +toBeConverted;\n\n    numValues[n] = Number.isFinite(number) ? number : null;\n  }\n\n  return {\n    ...field,\n    type: FieldType.number,\n    values: numValues,\n  };\n}\n\nfunction fieldToBooleanField(field: Field): Field {\n  const booleanValues = field.values.slice();\n\n  for (let b = 0; b < booleanValues.length; b++) {\n    booleanValues[b] = Boolean(!!booleanValues[b]);\n  }\n\n  return {\n    ...field,\n    type: FieldType.boolean,\n    values: booleanValues,\n  };\n}\n\n/**\n * @internal\n */\nexport function fieldToStringField(\n  field: Field,\n  dateFormat?: string,\n  parseOptions?: DateTimeOptionsWhenParsing,\n  joinWith?: string\n): Field {\n  let values = field.values;\n\n  switch (field.type) {\n    case FieldType.time:\n      values = values.map((v) => dateTimeParse(v, parseOptions).format(dateFormat));\n      break;\n\n    case FieldType.other:\n      values = values.map((v) => {\n        if (joinWith?.length && Array.isArray(v)) {\n          return v.join(joinWith);\n        }\n        return JSON.stringify(v); // will quote strings and avoid \"object\"\n      });\n      break;\n\n    default:\n      values = values.map((v) => `${v}`);\n  }\n\n  return {\n    ...field,\n    type: FieldType.string,\n    values: values,\n  };\n}\n\nfunction fieldToComplexField(field: Field): Field {\n  const complexValues = field.values.slice();\n\n  for (let s = 0; s < complexValues.length; s++) {\n    try {\n      complexValues[s] = JSON.parse(complexValues[s]);\n    } catch {\n      complexValues[s] = null;\n    }\n  }\n\n  return {\n    ...field,\n    type: FieldType.other,\n    values: complexValues,\n  };\n}\n\n/**\n * Checks the first value. Assumes any number should be time fieldtype. Otherwise attempts to make the fieldtype time.\n * @param field - field to ensure is a time fieldtype\n * @param dateFormat - date format used to parse a string datetime\n * @returns field as time\n *\n * @public\n */\nexport function ensureTimeField(field: Field, dateFormat?: string): Field {\n  const firstValueTypeIsNumber = typeof field.values[0] === 'number';\n  // if the format is unix seconds, we don't want to skip formatting\n  const isUnixSecondsFormat = dateFormat === 'X';\n\n  if (field.type === FieldType.time && firstValueTypeIsNumber) {\n    return field; //already time\n  }\n  if (firstValueTypeIsNumber && !isUnixSecondsFormat) {\n    return {\n      ...field,\n      type: FieldType.time, //assumes it should be time\n    };\n  }\n  return fieldToTimeField(field, dateFormat);\n}\n\nfunction fieldToEnumField(field: Field, config?: EnumFieldConfig): Field {\n  const enumConfig = { ...config };\n  const enumValues = field.values.slice();\n\n  // Create lookup map based on existing enum config text values, if none exist return field as is\n  const lookup = new Map<unknown, number>();\n  if (enumConfig.text && enumConfig.text.length > 0) {\n    for (let i = 0; i < enumConfig.text.length; i++) {\n      lookup.set(enumConfig.text[i], i);\n    }\n  } else {\n    return field;\n  }\n\n  // Convert field values to enum indexes\n  for (let i = 0; i < enumValues.length; i++) {\n    const value = enumValues[i];\n    enumValues[i] = lookup.get(value);\n  }\n\n  return {\n    ...field,\n    config: {\n      ...field.config,\n      type: {\n        enum: enumConfig,\n      },\n    },\n    type: FieldType.enum,\n    values: enumValues,\n  };\n}\n","import { map } from 'rxjs/operators';\n\nimport { DataFrame, Field } from '../../types/dataFrame';\nimport { DataTransformerInfo, MatcherConfig } from '../../types/transformations';\nimport { getFieldMatcher, getFrameMatchers } from '../matchers';\n\nimport { DataTransformerID } from './ids';\nimport { noopTransformer } from './noop';\n\nexport interface FilterOptions {\n  include?: MatcherConfig;\n  exclude?: MatcherConfig;\n}\n\nexport const filterFieldsTransformer: DataTransformerInfo<FilterOptions> = {\n  id: DataTransformerID.filterFields,\n  name: 'Filter Fields',\n  description: 'select a subset of fields',\n  defaultOptions: {},\n\n  /**\n   * Return a modified copy of the series. If the transform is not or should not\n   * be applied, just return the input series\n   */\n  operator: (options: FilterOptions, ctx) => (source) => {\n    if (!options.include && !options.exclude) {\n      return source.pipe(noopTransformer.operator({}, ctx));\n    }\n\n    if (typeof options.include?.options === 'string') {\n      options.include.options = options.include?.options;\n    } else if (typeof options.include?.options?.pattern === 'string') {\n      options.include.options.pattern = options.include?.options.pattern;\n    }\n\n    if (typeof options.exclude?.options === 'string') {\n      options.exclude.options = options.exclude?.options;\n    } else if (typeof options.exclude?.options?.pattern === 'string') {\n      options.exclude.options.pattern = options.exclude?.options.pattern;\n    }\n\n    return source.pipe(\n      map((data) => {\n        const include = options.include ? getFieldMatcher(options.include) : null;\n        const exclude = options.exclude ? getFieldMatcher(options.exclude) : null;\n\n        const processed: DataFrame[] = [];\n        for (const series of data) {\n          // Find the matching field indexes\n          const fields: Field[] = [];\n          for (let i = 0; i < series.fields.length; i++) {\n            const field = series.fields[i];\n\n            if (exclude) {\n              if (exclude(field, series, data)) {\n                continue;\n              }\n              if (!include) {\n                fields.push(field);\n              }\n            }\n            if (include && include(field, series, data)) {\n              fields.push(field);\n            }\n          }\n\n          if (!fields.length) {\n            continue;\n          }\n          const copy = {\n            ...series, // all the other properties\n            fields, // but a different set of fields\n          };\n          processed.push(copy);\n        }\n        return processed;\n      })\n    );\n  },\n};\n\nexport const filterFramesTransformer: DataTransformerInfo<FilterOptions> = {\n  id: DataTransformerID.filterFrames,\n  name: 'Filter Frames',\n  description: 'select a subset of frames',\n  defaultOptions: {},\n\n  /**\n   * Return a modified copy of the series. If the transform is not or should not\n   * be applied, just return the input series\n   */\n  operator: (options, ctx) => (source) => {\n    if (!options.include && !options.exclude) {\n      return source.pipe(noopTransformer.operator({}, ctx));\n    }\n\n    return source.pipe(\n      map((data) => {\n        const include = options.include ? getFrameMatchers(options.include) : null;\n        const exclude = options.exclude ? getFrameMatchers(options.exclude) : null;\n\n        const processed: DataFrame[] = [];\n        for (const series of data) {\n          if (exclude) {\n            if (exclude(series)) {\n              continue;\n            }\n            if (!include) {\n              processed.push(series);\n            }\n          }\n          if (include && include(series)) {\n            processed.push(series);\n          }\n        }\n        return processed;\n      })\n    );\n  },\n};\n","import { DataTransformerInfo, MatcherConfig } from '../../types/transformations';\nimport { FieldMatcherID } from '../matchers/ids';\nimport { RegexpOrNamesMatcherOptions } from '../matchers/nameMatcher';\n\nimport { filterFieldsTransformer } from './filter';\nimport { DataTransformerID } from './ids';\n\nexport interface FilterFieldsByNameTransformerOptions {\n  include?: RegexpOrNamesMatcherOptions;\n  exclude?: RegexpOrNamesMatcherOptions;\n  byVariable?: boolean;\n}\n\nexport const filterFieldsByNameTransformer: DataTransformerInfo<FilterFieldsByNameTransformerOptions> = {\n  id: DataTransformerID.filterFieldsByName,\n  name: 'Filter fields by name',\n  description: 'select a subset of fields',\n  defaultOptions: {},\n\n  /**\n   * Return a modified copy of the series. If the transform is not or should not\n   * be applied, just return the input series\n   */\n  operator: (options, ctx) => (source) =>\n    source.pipe(\n      filterFieldsTransformer.operator(\n        {\n          include: getMatcherConfig(options.include, options.byVariable),\n          exclude: getMatcherConfig(options.exclude, options.byVariable),\n        },\n        ctx\n      )\n    ),\n};\n\n// Exported to share with other implementations, but not exported to `@grafana/data`\nexport const getMatcherConfig = (\n  options?: RegexpOrNamesMatcherOptions,\n  byVariable?: boolean\n): MatcherConfig | undefined => {\n  if (!options) {\n    return undefined;\n  }\n\n  const { names, pattern, variable } = options;\n\n  if (byVariable && variable) {\n    const stringOfNames = variable;\n\n    if (/^\\{.*\\}$/.test(stringOfNames)) {\n      const namesFromString = stringOfNames.slice(1).slice(0, -1).split(',');\n      return { id: FieldMatcherID.byNames, options: { names: namesFromString } };\n    }\n    return { id: FieldMatcherID.byNames, options: { names: stringOfNames.split(',') } };\n  }\n\n  if ((!Array.isArray(names) || names.length === 0) && !pattern) {\n    return undefined;\n  }\n\n  if (!pattern) {\n    return { id: FieldMatcherID.byNames, options: { names } };\n  }\n\n  if (!Array.isArray(names) || names.length === 0) {\n    return { id: FieldMatcherID.byRegexp, options: pattern };\n  }\n\n  return { id: FieldMatcherID.byRegexpOrNames, options };\n};\n","import { DataTransformerInfo } from '../../types/transformations';\nimport { FrameMatcherID } from '../matchers/ids';\n\nimport { filterFramesTransformer, FilterOptions } from './filter';\nimport { DataTransformerID } from './ids';\n\nexport interface FilterFramesByRefIdTransformerOptions {\n  include?: string;\n  exclude?: string;\n}\n\nexport const filterFramesByRefIdTransformer: DataTransformerInfo<FilterFramesByRefIdTransformerOptions> = {\n  id: DataTransformerID.filterByRefId,\n  name: 'Filter data by query refId',\n  description: 'select a subset of results',\n  defaultOptions: {},\n\n  /**\n   * Return a modified copy of the series. If the transform is not or should not\n   * be applied, just return the input series\n   */\n  operator: (options, ctx) => (source) => {\n    const filterOptions: FilterOptions = {};\n    if (options.include) {\n      filterOptions.include = {\n        id: FrameMatcherID.byRefId,\n        options: options.include,\n      };\n    }\n    if (options.exclude) {\n      filterOptions.exclude = {\n        id: FrameMatcherID.byRefId,\n        options: options.exclude,\n      };\n    }\n\n    return source.pipe(filterFramesTransformer.operator(filterOptions, ctx));\n  },\n};\n","import { map } from 'rxjs/operators';\n\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { DataFrame, Field } from '../../types/dataFrame';\nimport { DataTransformerInfo, MatcherConfig } from '../../types/transformations';\nimport { getValueMatcher } from '../matchers';\n\nimport { DataTransformerID } from './ids';\nimport { noopTransformer } from './noop';\n\nexport enum FilterByValueType {\n  exclude = 'exclude',\n  include = 'include',\n}\n\nexport enum FilterByValueMatch {\n  all = 'all',\n  any = 'any',\n}\n\nexport interface FilterByValueFilter {\n  fieldName: string;\n  config: MatcherConfig;\n}\n\nexport interface FilterByValueTransformerOptions {\n  filters: FilterByValueFilter[];\n  type: FilterByValueType;\n  match: FilterByValueMatch;\n}\n\nexport const filterByValueTransformer: DataTransformerInfo<FilterByValueTransformerOptions> = {\n  id: DataTransformerID.filterByValue,\n  name: 'Filter data by values',\n  description: 'select a subset of results based on values',\n  defaultOptions: {\n    filters: [],\n    type: FilterByValueType.include,\n    match: FilterByValueMatch.any,\n  },\n\n  operator: (options, ctx) => (source) => {\n    const filters = options.filters;\n    const matchAll = options.match === FilterByValueMatch.all;\n    const include = options.type === FilterByValueType.include;\n\n    if (!Array.isArray(filters) || filters.length === 0) {\n      return source.pipe(noopTransformer.operator({}, ctx));\n    }\n\n    return source.pipe(\n      map((data) => {\n        if (data.length === 0) {\n          return data;\n        }\n\n        const processed: DataFrame[] = [];\n\n        for (const frame of data) {\n          const rows = new Set<number>();\n          const fieldIndexByName = groupFieldIndexByName(frame, data);\n\n          const matchers = createFilterValueMatchers(filters, fieldIndexByName);\n\n          for (let index = 0; index < frame.length; index++) {\n            if (rows.has(index)) {\n              continue;\n            }\n\n            let matching = true;\n\n            for (const matcher of matchers) {\n              const match = matcher(index, frame, data);\n\n              if (!matchAll && match) {\n                matching = true;\n                break;\n              }\n\n              if (matchAll && !match) {\n                matching = false;\n                break;\n              }\n\n              matching = match;\n            }\n\n            if (matching) {\n              rows.add(index);\n            }\n          }\n\n          const fields: Field[] = [];\n          const frameLength = include ? rows.size : data[0].length - rows.size;\n\n          for (const field of frame.fields) {\n            const buffer = [];\n\n            for (let index = 0; index < frame.length; index++) {\n              if (include && rows.has(index)) {\n                buffer.push(field.values[index]);\n                continue;\n              }\n\n              if (!include && !rows.has(index)) {\n                buffer.push(field.values[index]);\n                continue;\n              }\n            }\n\n            // We keep field config, but clean the state as it's being recalculated when the field overrides are applied\n            fields.push({\n              ...field,\n              values: buffer,\n              state: {},\n            });\n          }\n\n          processed.push({\n            ...frame,\n            fields: fields,\n            length: frameLength,\n          });\n        }\n\n        return processed;\n      })\n    );\n  },\n};\n\nconst createFilterValueMatchers = (\n  filters: FilterByValueFilter[],\n  fieldIndexByName: Record<string, number>\n): Array<(index: number, frame: DataFrame, data: DataFrame[]) => boolean> => {\n  const noop = () => false;\n\n  return filters.map((filter) => {\n    const fieldIndex = fieldIndexByName[filter.fieldName] ?? -1;\n\n    if (fieldIndex < 0) {\n      console.warn(`[FilterByValue] Could not find index for field name: ${filter.fieldName}`);\n      return noop;\n    }\n\n    const matcher = getValueMatcher(filter.config);\n    return (index, frame, data) => matcher(index, frame.fields[fieldIndex], frame, data);\n  });\n};\n\nconst groupFieldIndexByName = (frame: DataFrame, data: DataFrame[]) => {\n  const lookup: Record<string, number> = {};\n\n  frame.fields.forEach((field, fieldIndex) => {\n    const fieldName = getFieldDisplayName(field, frame, data);\n    lookup[fieldName] = fieldIndex;\n  });\n\n  return lookup;\n};\n","import { MonoTypeOperatorFunction } from 'rxjs';\n\nimport { MatcherConfig, DataTransformerConfig } from '@grafana/schema';\n\nimport { RegistryItemWithOptions } from '../utils/Registry';\n\nimport { DataFrame, Field } from './dataFrame';\nimport { InterpolateFunction } from './panel';\n\n/** deprecated, use it from schema */\nexport type { MatcherConfig };\n\n/**\n * Context passed to transformDataFrame and to each transform operator\n */\nexport interface DataTransformContext {\n  interpolate: InterpolateFunction;\n}\n\n/**\n * We score for how applicable a given transformation is.\n * Currently :\n *  0 is considered as not-applicable\n *  1 is considered applicable\n *  2 is considered as highly applicable (i.e. should be highlighted)\n */\nexport type TransformationApplicabilityScore = number;\nexport enum TransformationApplicabilityLevels {\n  NotPossible = -1,\n  NotApplicable = 0,\n  Applicable = 1,\n  HighlyApplicable = 2,\n}\n\n/**\n * Function that transform data frames (AKA transformer)\n *\n * @public\n */\nexport interface DataTransformerInfo<TOptions = any> extends RegistryItemWithOptions {\n  /**\n   * Function that configures transformation and returns a transformer\n   * @param options\n   */\n  operator: (options: TOptions, context: DataTransformContext) => MonoTypeOperatorFunction<DataFrame[]>;\n  /**\n   * Function that is present will indicate whether a transformation is applicable\n   * given the current data.\n   * @param options\n   */\n  isApplicable?: (data: DataFrame[]) => TransformationApplicabilityScore;\n  /**\n   * A description of the applicator. Can either simply be a string\n   * or function which when given the current dataset returns a string.\n   * This way descriptions can be tailored relative to the underlying data.\n   */\n  isApplicableDescription?: string | ((data: DataFrame[]) => string);\n}\n\n/**\n * Function that returns a cutsom transform operator for transforming data frames\n *\n * @public\n */\nexport type CustomTransformOperator = (context: DataTransformContext) => MonoTypeOperatorFunction<DataFrame[]>;\n\n/**\n * Many transformations can be called with a simple synchronous function.\n * When a transformer is defined, it should have identical behavior to using the operator\n *\n * @public\n */\nexport interface SynchronousDataTransformerInfo<TOptions = any> extends DataTransformerInfo<TOptions> {\n  transformer: (options: TOptions, context: DataTransformContext) => (frames: DataFrame[]) => DataFrame[];\n}\n\n/**\n * @deprecated use TransformationConfig from schema\n */\nexport type { DataTransformerConfig };\n\nexport type FrameMatcher = (frame: DataFrame) => boolean;\nexport type FieldMatcher = (field: Field, frame: DataFrame, allFrames: DataFrame[]) => boolean;\n\n/**\n * Value matcher type to describe the matcher function\n * @public\n */\nexport type ValueMatcher = (valueIndex: number, field: Field, frame: DataFrame, allFrames: DataFrame[]) => boolean;\n\nexport interface FieldMatcherInfo<TOptions = any> extends RegistryItemWithOptions<TOptions> {\n  get: (options: TOptions) => FieldMatcher;\n}\n\nexport interface FrameMatcherInfo<TOptions = any> extends RegistryItemWithOptions<TOptions> {\n  get: (options: TOptions) => FrameMatcher;\n}\n\n/**\n * Registry item to represent all the different valu matchers supported\n * in the Grafana platform.\n * @public\n */\nexport interface ValueMatcherInfo<TOptions = any> extends RegistryItemWithOptions<TOptions> {\n  get: (options: TOptions) => ValueMatcher;\n  isApplicable: (field: Field) => boolean;\n  getDefaultOptions: (field: Field) => TOptions;\n}\n\n/**\n * @public\n */\nexport enum SpecialValue {\n  True = 'true',\n  False = 'false',\n  Null = 'null',\n  Empty = 'empty',\n  Zero = 'zero',\n}\n","import { map } from 'rxjs/operators';\n\nimport { DataFrame, Field, FieldType } from '../../types/dataFrame';\nimport { DataTransformerInfo, FieldMatcher, TransformationApplicabilityLevels } from '../../types/transformations';\nimport { fieldMatchers } from '../matchers';\nimport { FieldMatcherID } from '../matchers/ids';\n\nimport { DataTransformerID } from './ids';\n\nexport enum FormatStringOutput {\n  UpperCase = 'Upper Case',\n  LowerCase = 'Lower Case',\n  SentenceCase = 'Sentence Case',\n  TitleCase = 'Title Case',\n  PascalCase = 'Pascal Case',\n  CamelCase = 'Camel Case',\n  SnakeCase = 'Snake Case',\n  KebabCase = 'Kebab Case',\n  Trim = 'Trim',\n  Substring = 'Substring',\n}\n\nexport interface FormatStringTransformerOptions {\n  stringField: string;\n  substringStart: number;\n  substringEnd: number;\n  outputFormat: FormatStringOutput;\n}\n\nconst splitToCapitalWords = (input: string) => {\n  const arr = input.split(' ');\n  for (let i = 0; i < arr.length; i++) {\n    arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1).toLowerCase();\n  }\n  return arr;\n};\n\nexport const getFormatStringFunction = (options: FormatStringTransformerOptions) => {\n  return (field: Field) =>\n    field.values.map((value: string) => {\n      switch (options.outputFormat) {\n        case FormatStringOutput.UpperCase:\n          return value.toUpperCase();\n        case FormatStringOutput.LowerCase:\n          return value.toLowerCase();\n        case FormatStringOutput.SentenceCase:\n          return value.charAt(0).toUpperCase() + value.slice(1);\n        case FormatStringOutput.TitleCase:\n          return splitToCapitalWords(value).join(' ');\n        case FormatStringOutput.PascalCase:\n          return splitToCapitalWords(value).join('');\n        case FormatStringOutput.CamelCase:\n          value = splitToCapitalWords(value).join('');\n          return value.charAt(0).toLowerCase() + value.slice(1);\n        case FormatStringOutput.SnakeCase:\n          return value.toLowerCase().split(' ').join('_');\n        case FormatStringOutput.KebabCase:\n          return value.toLowerCase().split(' ').join('-');\n        case FormatStringOutput.Trim:\n          return value.trim();\n        case FormatStringOutput.Substring:\n          return value.substring(options.substringStart, options.substringEnd);\n      }\n    });\n};\n\nexport const formatStringTransformer: DataTransformerInfo<FormatStringTransformerOptions> = {\n  id: DataTransformerID.formatString,\n  name: 'Format string',\n  description: 'Manipulate string fields formatting',\n  defaultOptions: { stringField: '', outputFormat: FormatStringOutput.UpperCase },\n  isApplicable: (data: DataFrame[]) => {\n    // Search for a string field\n    // if there is one then we can use this transformation\n    for (const frame of data) {\n      for (const field of frame.fields) {\n        if (field.type === 'string') {\n          return TransformationApplicabilityLevels.Applicable;\n        }\n      }\n    }\n\n    return TransformationApplicabilityLevels.NotApplicable;\n  },\n  operator: (options) => (source) =>\n    source.pipe(\n      map((data) => {\n        if (data.length === 0) {\n          return data;\n        }\n\n        const fieldMatches = fieldMatchers.get(FieldMatcherID.byName).get(options.stringField);\n        const formatStringFunction = getFormatStringFunction(options);\n\n        const formatter = createStringFormatter(fieldMatches, formatStringFunction);\n\n        return data.map((frame) => ({\n          ...frame,\n          fields: formatter(frame, data),\n        }));\n      })\n    ),\n};\n\n/**\n * @internal\n */\nexport const createStringFormatter =\n  (fieldMatches: FieldMatcher, formatStringFunction: (field: Field) => string[]) =>\n  (frame: DataFrame, allFrames: DataFrame[]) => {\n    return frame.fields.map((field) => {\n      // Find the configured field\n      if (fieldMatches(field, frame, allFrames)) {\n        const newVals = formatStringFunction(field);\n\n        return {\n          ...field,\n          type: FieldType.string,\n          values: newVals,\n        };\n      }\n\n      return field;\n    });\n  };\n","import { map } from 'rxjs/operators';\n\nimport { TimeZone } from '@grafana/schema';\n\nimport { cacheFieldDisplayNames } from '../../field/fieldState';\nimport { DataFrame } from '../../types/dataFrame';\nimport {\n  DataTransformContext,\n  DataTransformerInfo,\n  TransformationApplicabilityLevels,\n} from '../../types/transformations';\n\nimport { fieldToStringField } from './convertFieldType';\nimport { DataTransformerID } from './ids';\n\nexport interface FormatTimeTransformerOptions {\n  timeField: string;\n  outputFormat: string;\n  timezone: TimeZone;\n}\n\nexport const formatTimeTransformer: DataTransformerInfo<FormatTimeTransformerOptions> = {\n  id: DataTransformerID.formatTime,\n  name: 'Format time',\n  description: 'Set the output format of a time field',\n  defaultOptions: { timeField: '', outputFormat: '', useTimezone: true },\n  isApplicable: (data: DataFrame[]) => {\n    // Search for a time field\n    // if there is one then we can use this transformation\n    for (const frame of data) {\n      for (const field of frame.fields) {\n        if (field.type === 'time') {\n          return TransformationApplicabilityLevels.Applicable;\n        }\n      }\n    }\n\n    return TransformationApplicabilityLevels.NotApplicable;\n  },\n  isApplicableDescription:\n    'The Format time transformation requires a time field to work. No time field could be found.',\n  operator: (options, ctx) => (source) =>\n    source.pipe(\n      map((data) => {\n        return applyFormatTime(options, data, ctx);\n      })\n    ),\n};\n\n/**\n * @internal\n */\nexport const applyFormatTime = (\n  { timeField, outputFormat, timezone }: FormatTimeTransformerOptions,\n  data: DataFrame[],\n  ctx?: DataTransformContext\n) => {\n  if (!Array.isArray(data) || data.length === 0) {\n    return data;\n  }\n\n  cacheFieldDisplayNames(data);\n\n  outputFormat = ctx?.interpolate(outputFormat) ?? outputFormat;\n\n  return data.map((frame) => ({\n    ...frame,\n    fields: frame.fields.map((field) => {\n      if (field.state?.displayName === timeField) {\n        field = fieldToStringField(field, outputFormat, { timeZone: timezone });\n      }\n\n      return field;\n    }),\n  }));\n};\n","import { BootData } from '../../types/config';\nimport { DataFrame } from '../../types/dataFrame';\n\ndeclare global {\n  interface Window {\n    grafanaBootData?: BootData;\n  }\n}\n/**\n * Retrieve the maximum number of fields in a series of a dataframe.\n */\nexport function findMaxFields(data: DataFrame[]) {\n  let maxFields = 0;\n\n  // Group to nested table needs at least two fields\n  // a field to group on and to show in the nested table\n  for (const frame of data) {\n    if (frame.fields.length > maxFields) {\n      maxFields = frame.fields.length;\n    }\n  }\n\n  return maxFields;\n}\n","import { map } from 'rxjs/operators';\n\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { DataFrame, Field } from '../../types/dataFrame';\nimport { DataTransformerInfo, TransformationApplicabilityLevels } from '../../types/transformations';\nimport { getFieldTypeForReducer, reduceField, ReducerID } from '../fieldReducer';\n\nimport { DataTransformerID } from './ids';\nimport { findMaxFields } from './utils';\n\nconst MINIMUM_FIELDS_REQUIRED = 2;\n\nexport enum GroupByOperationID {\n  aggregate = 'aggregate',\n  groupBy = 'groupby',\n}\n\nexport interface GroupByFieldOptions {\n  aggregations: ReducerID[];\n  operation: GroupByOperationID | null;\n}\n\nexport interface GroupByTransformerOptions {\n  fields: Record<string, GroupByFieldOptions>;\n}\n\ninterface FieldMap {\n  [key: string]: Field;\n}\n\nexport const groupByTransformer: DataTransformerInfo<GroupByTransformerOptions> = {\n  id: DataTransformerID.groupBy,\n  name: 'Group by',\n  description: 'Group the data by a field values then process calculations for each group.',\n  defaultOptions: {\n    fields: {},\n  },\n  isApplicable: (data: DataFrame[]) => {\n    // Group by needs at least two fields\n    // a field to group on and a field to aggregate\n    // We make sure that at least one frame has at\n    // least two fields\n    const maxFields = findMaxFields(data);\n\n    return maxFields >= MINIMUM_FIELDS_REQUIRED\n      ? TransformationApplicabilityLevels.Applicable\n      : TransformationApplicabilityLevels.NotApplicable;\n  },\n  isApplicableDescription: (data: DataFrame[]) => {\n    const maxFields = findMaxFields(data);\n    return `The Group by transformation requires a series with at least ${MINIMUM_FIELDS_REQUIRED} fields to work. The maximum number of fields found on a series is ${maxFields}`;\n  },\n  /**\n   * Return a modified copy of the series. If the transform is not or should not\n   * be applied, just return the input series\n   */\n  operator: (options) => (source) =>\n    source.pipe(\n      map((data) => {\n        const hasValidConfig = Object.keys(options.fields).find(\n          (name) => options.fields[name].operation === GroupByOperationID.groupBy\n        );\n\n        if (!hasValidConfig) {\n          return data;\n        }\n\n        const processed: DataFrame[] = [];\n\n        for (const frame of data) {\n          // Create a list of fields to group on\n          // If there are none we skip the rest\n          const groupByFields: Field[] = frame.fields.filter((field) => shouldGroupOnField(field, options));\n          if (groupByFields.length === 0) {\n            continue;\n          }\n\n          // Group the values by fields and groups so we can get all values for a\n          // group for a given field.\n          const valuesByGroupKey = groupValuesByKey(frame, groupByFields);\n\n          // Add the grouped fields to the resulting fields of the transformation\n          const fields: Field[] = createGroupedFields(groupByFields, valuesByGroupKey);\n\n          // Then for each calculations configured, compute and add a new field (column)\n          for (const field of frame.fields) {\n            if (!shouldCalculateField(field, options)) {\n              continue;\n            }\n\n            const fieldName = getFieldDisplayName(field);\n            const aggregations = options.fields[fieldName].aggregations;\n            const valuesByAggregation: Record<string, unknown[]> = {};\n\n            valuesByGroupKey.forEach((value) => {\n              const fieldWithValuesForGroup = value[fieldName];\n              const results = reduceField({\n                field: fieldWithValuesForGroup,\n                reducers: aggregations,\n              });\n\n              for (const aggregation of aggregations) {\n                if (!Array.isArray(valuesByAggregation[aggregation])) {\n                  valuesByAggregation[aggregation] = [];\n                }\n                valuesByAggregation[aggregation].push(results[aggregation]);\n              }\n            });\n\n            for (const aggregation of aggregations) {\n              const aggregationField: Field = {\n                name: `${fieldName} (${aggregation})`,\n                values: valuesByAggregation[aggregation] ?? [],\n                type: getFieldTypeForReducer(aggregation, field.type),\n                config: {},\n              };\n\n              fields.push(aggregationField);\n            }\n          }\n\n          processed.push({\n            ...frame,\n            fields,\n            length: valuesByGroupKey.size,\n          });\n        }\n\n        return processed;\n      })\n    ),\n};\n\nconst shouldGroupOnField = (field: Field, options: GroupByTransformerOptions): boolean => {\n  const fieldName = getFieldDisplayName(field);\n  return options?.fields[fieldName]?.operation === GroupByOperationID.groupBy;\n};\n\nconst shouldCalculateField = (field: Field, options: GroupByTransformerOptions): boolean => {\n  const fieldName = getFieldDisplayName(field);\n  return (\n    options?.fields[fieldName]?.operation === GroupByOperationID.aggregate &&\n    Array.isArray(options?.fields[fieldName].aggregations) &&\n    options?.fields[fieldName].aggregations.length > 0\n  );\n};\n\n/**\n * Groups values together by key. This will create a mapping of strings\n * to _FieldMaps_ that will then be used to group values on.\n *\n * @param frame\n *  The dataframe containing the data to group.\n * @param groupByFields\n *  An array of fields to group on.\n */\nexport function groupValuesByKey(frame: DataFrame, groupByFields: Field[]) {\n  const valuesByGroupKey = new Map<string, FieldMap>();\n\n  for (let rowIndex = 0; rowIndex < frame.length; rowIndex++) {\n    const groupKey = String(groupByFields.map((field) => field.values[rowIndex]));\n    const valuesByField = valuesByGroupKey.get(groupKey) ?? {};\n\n    if (!valuesByGroupKey.has(groupKey)) {\n      valuesByGroupKey.set(groupKey, valuesByField);\n    }\n\n    for (let field of frame.fields) {\n      const fieldName = getFieldDisplayName(field);\n\n      if (!valuesByField[fieldName]) {\n        valuesByField[fieldName] = {\n          name: fieldName,\n          type: field.type,\n          config: { ...field.config },\n          values: [],\n        };\n      }\n\n      valuesByField[fieldName].values.push(field.values[rowIndex]);\n    }\n  }\n\n  return valuesByGroupKey;\n}\n\n/**\n * Create new fields which will be used to display grouped values.\n *\n * @param groupByFields\n * @param valuesByGroupKey\n * @returns\n *  Returns an array of fields that have been grouped.\n */\nexport function createGroupedFields(groupByFields: Field[], valuesByGroupKey: Map<string, FieldMap>): Field[] {\n  const fields: Field[] = [];\n\n  for (const field of groupByFields) {\n    const values: unknown[] = [];\n    const fieldName = getFieldDisplayName(field);\n\n    valuesByGroupKey.forEach((value) => {\n      values.push(value[fieldName].values[0]);\n    });\n\n    fields.push({\n      name: field.name,\n      type: field.type,\n      config: {\n        ...field.config,\n      },\n      values,\n    });\n  }\n\n  return fields;\n}\n","import { map } from 'rxjs/operators';\n\nimport { guessFieldTypeForField } from '../../dataframe/processDataFrame';\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { DataFrame, Field, FieldType } from '../../types/dataFrame';\nimport { DataTransformerInfo, TransformationApplicabilityLevels } from '../../types/transformations';\nimport { ReducerID, reduceField } from '../fieldReducer';\n\nimport { GroupByFieldOptions, createGroupedFields, groupValuesByKey } from './groupBy';\nimport { DataTransformerID } from './ids';\nimport { findMaxFields } from './utils';\n\nexport const SHOW_NESTED_HEADERS_DEFAULT = true;\nconst MINIMUM_FIELDS_REQUIRED = 2;\n\nenum GroupByOperationID {\n  aggregate = 'aggregate',\n  groupBy = 'groupby',\n}\n\nexport interface GroupToNestedTableTransformerOptions {\n  showSubframeHeaders?: boolean;\n  fields: Record<string, GroupByFieldOptions>;\n}\n\ninterface FieldMap {\n  [key: string]: Field;\n}\n\nexport const groupToNestedTable: DataTransformerInfo<GroupToNestedTableTransformerOptions> = {\n  id: DataTransformerID.groupToNestedTable,\n  name: 'Group to nested tables',\n  description: 'Group data by a field value and create nested tables with the grouped data',\n  defaultOptions: {\n    showSubframeHeaders: SHOW_NESTED_HEADERS_DEFAULT,\n    fields: {},\n  },\n  isApplicable: (data) => {\n    // Group to nested table needs at least two fields\n    // a field to group on and to show in the nested table\n    const maxFields = findMaxFields(data);\n\n    return maxFields >= MINIMUM_FIELDS_REQUIRED\n      ? TransformationApplicabilityLevels.Applicable\n      : TransformationApplicabilityLevels.NotApplicable;\n  },\n  isApplicableDescription: (data: DataFrame[]) => {\n    const maxFields = findMaxFields(data);\n    return `The Group to nested table transformation requires a series with at least ${MINIMUM_FIELDS_REQUIRED} fields to work. The maximum number of fields found on a series is ${maxFields}`;\n  },\n  /**\n   * Return a modified copy of the series. If the transform is not or should not\n   * be applied, just return the input series\n   */\n  operator: (options) => (source) =>\n    source.pipe(\n      map((data) => {\n        const hasValidConfig = Object.keys(options.fields).find(\n          (name) => options.fields[name].operation === GroupByOperationID.groupBy\n        );\n        if (!hasValidConfig) {\n          return data;\n        }\n\n        const processed: DataFrame[] = [];\n\n        for (const frame of data) {\n          // Create a list of fields to group on\n          // If there are none we skip the rest\n          const groupByFields: Field[] = frame.fields.filter((field) => shouldGroupOnField(field, options));\n          if (groupByFields.length === 0) {\n            continue;\n          }\n\n          // Group the values by fields and groups so we can get all values for a\n          // group for a given field.\n          const valuesByGroupKey = groupValuesByKey(frame, groupByFields);\n\n          // Add the grouped fields to the resulting fields of the transformation\n          const fields: Field[] = createGroupedFields(groupByFields, valuesByGroupKey);\n\n          // Group data into sub frames so they will display as tables\n          const subFrames: DataFrame[][] = groupToSubframes(valuesByGroupKey, options);\n\n          // Then for each calculations configured, compute and add a new field (column)\n          for (let i = 0; i < frame.fields.length; i++) {\n            const field = frame.fields[i];\n\n            if (!shouldCalculateField(field, options)) {\n              continue;\n            }\n\n            const fieldName = getFieldDisplayName(field);\n            const aggregations = options.fields[fieldName].aggregations;\n            const valuesByAggregation: Record<string, unknown[]> = {};\n\n            valuesByGroupKey.forEach((value) => {\n              const fieldWithValuesForGroup = value[fieldName];\n              const results = reduceField({\n                field: fieldWithValuesForGroup,\n                reducers: aggregations,\n              });\n\n              for (const aggregation of aggregations) {\n                if (!Array.isArray(valuesByAggregation[aggregation])) {\n                  valuesByAggregation[aggregation] = [];\n                }\n                valuesByAggregation[aggregation].push(results[aggregation]);\n              }\n            });\n\n            for (const aggregation of aggregations) {\n              const aggregationField: Field = {\n                name: `${fieldName} (${aggregation})`,\n                values: valuesByAggregation[aggregation],\n                type: FieldType.other,\n                config: {},\n              };\n\n              aggregationField.type = detectFieldType(aggregation, field, aggregationField);\n              fields.push(aggregationField);\n            }\n          }\n\n          fields.push({\n            config: {},\n            name: 'Nested frames',\n            type: FieldType.nestedFrames,\n            values: subFrames,\n          });\n\n          processed.push({\n            fields,\n            length: valuesByGroupKey.size,\n          });\n        }\n\n        return processed;\n      })\n    ),\n};\n\n/**\n * Given the appropriate data, create a sub-frame\n * which can then be displayed in a sub-table.\n */\nfunction createSubframe(fields: Field[], frameLength: number, options: GroupToNestedTableTransformerOptions) {\n  const showHeaders =\n    options.showSubframeHeaders === undefined ? SHOW_NESTED_HEADERS_DEFAULT : options.showSubframeHeaders;\n\n  return {\n    meta: { custom: { noHeader: !showHeaders } },\n    length: frameLength,\n    fields,\n  };\n}\n\n/**\n * Determines whether a field should be grouped on.\n *\n * @returns boolean\n *  This will return _true_ if a field should be grouped on and _false_ if it should not.\n */\nconst shouldGroupOnField = (field: Field, options: GroupToNestedTableTransformerOptions): boolean => {\n  const fieldName = getFieldDisplayName(field);\n  return options?.fields[fieldName]?.operation === GroupByOperationID.groupBy;\n};\n\n/**\n * Determines whether field aggregations should be calculated\n * @returns boolean\n *  This will return _true_ if a field should be calculated and _false_ if it should not.\n */\nconst shouldCalculateField = (field: Field, options: GroupToNestedTableTransformerOptions): boolean => {\n  const fieldName = getFieldDisplayName(field);\n  return (\n    options?.fields[fieldName]?.operation === GroupByOperationID.aggregate &&\n    Array.isArray(options?.fields[fieldName].aggregations) &&\n    options?.fields[fieldName].aggregations.length > 0\n  );\n};\n\n/**\n * Detect the type of field given the relevant aggregation.\n */\nconst detectFieldType = (aggregation: string, sourceField: Field, targetField: Field): FieldType => {\n  switch (aggregation) {\n    case ReducerID.allIsNull:\n      return FieldType.boolean;\n    case ReducerID.last:\n    case ReducerID.lastNotNull:\n    case ReducerID.first:\n    case ReducerID.firstNotNull:\n      return sourceField.type;\n    default:\n      return guessFieldTypeForField(targetField) ?? FieldType.string;\n  }\n};\n\n/**\n * Group values into subframes so that they'll be displayed\n * inside of a subtable.\n *\n * @param valuesByGroupKey\n *  A mapping of group keys to their respective grouped values.\n * @param options\n *   Transformation options, which are used to find ungrouped/unaggregated fields.\n * @returns\n */\nfunction groupToSubframes(\n  valuesByGroupKey: Map<string, FieldMap>,\n  options: GroupToNestedTableTransformerOptions\n): DataFrame[][] {\n  const subFrames: DataFrame[][] = [];\n\n  // Construct a subframe of any fields\n  // that aren't being group on or reduced\n  for (const [, value] of valuesByGroupKey) {\n    const nestedFields: Field[] = [];\n\n    for (const [fieldName, field] of Object.entries(value)) {\n      const fieldOpts = options.fields[fieldName];\n\n      if (fieldOpts === undefined) {\n        nestedFields.push(field);\n      }\n      // Depending on the configuration form state all of the following are possible\n      else if (\n        fieldOpts.aggregations === undefined ||\n        (fieldOpts.operation === GroupByOperationID.aggregate && fieldOpts.aggregations.length === 0) ||\n        fieldOpts.operation === null ||\n        fieldOpts.operation === undefined\n      ) {\n        nestedFields.push(field);\n      }\n    }\n\n    // If there are any values in the subfields\n    // push a new subframe with the fields\n    // otherwise push an empty frame\n    if (nestedFields.length > 0) {\n      subFrames.push([createSubframe(nestedFields, nestedFields[0].values.length, options)]);\n    } else {\n      subFrames.push([createSubframe([], 0, options)]);\n    }\n  }\n\n  return subFrames;\n}\n","import { map } from 'rxjs/operators';\n\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { DataFrame, Field } from '../../types/dataFrame';\nimport {\n  SpecialValue,\n  DataTransformerInfo,\n  TransformationApplicabilityLevels,\n  DataTransformContext,\n} from '../../types/transformations';\nimport { fieldMatchers } from '../matchers';\nimport { FieldMatcherID } from '../matchers/ids';\n\nimport { DataTransformerID } from './ids';\n\nexport interface GroupingToMatrixTransformerOptions {\n  columnField?: string;\n  rowField?: string;\n  valueField?: string;\n  emptyValue?: SpecialValue;\n}\n\nconst DEFAULT_COLUMN_FIELD = 'Time';\nconst DEFAULT_ROW_FIELD = 'Time';\nconst DEFAULT_VALUE_FIELD = 'Value';\nconst DEFAULT_EMPTY_VALUE = SpecialValue.Empty;\n\n// grafana-data does not have access to runtime so we are accessing the window object\n// to get access to the feature toggle\n// eslint-disable-next-line\nconst supportDataplaneFallback = (window as any)?.grafanaBootData?.settings?.featureToggles?.dataplaneFrontendFallback;\n\nexport const groupingToMatrixTransformer: DataTransformerInfo<GroupingToMatrixTransformerOptions> = {\n  id: DataTransformerID.groupingToMatrix,\n  name: 'Grouping to Matrix',\n  description: 'Groups series by field and return a matrix visualisation',\n  defaultOptions: {\n    columnField: DEFAULT_COLUMN_FIELD,\n    rowField: DEFAULT_ROW_FIELD,\n    valueField: DEFAULT_VALUE_FIELD,\n  },\n  /**\n   * Grouping to matrix requires at least 3 fields to work.\n   */\n  isApplicable: (data: DataFrame[]) => {\n    let numFields = 0;\n\n    for (const frame of data) {\n      numFields += frame.fields.length;\n    }\n\n    return numFields >= 3\n      ? TransformationApplicabilityLevels.Applicable\n      : TransformationApplicabilityLevels.NotApplicable;\n  },\n  isApplicableDescription: (data: DataFrame[]) => {\n    let numFields = 0;\n\n    for (const frame of data) {\n      numFields += frame.fields.length;\n    }\n\n    return `Grouping to matrix requiers at least 3 fields to work. Currently there are ${numFields} fields.`;\n  },\n  operator: (options: GroupingToMatrixTransformerOptions, ctx: DataTransformContext) => (source) =>\n    source.pipe(\n      map((data) => {\n        const columnFieldMatch = options.columnField || DEFAULT_COLUMN_FIELD;\n        const rowFieldMatch = options.rowField || DEFAULT_ROW_FIELD;\n        const valueFieldMatch = options.valueField || DEFAULT_VALUE_FIELD;\n        const emptyValue = options.emptyValue || DEFAULT_EMPTY_VALUE;\n\n        // Accept only single queries\n        if (data.length !== 1) {\n          return data;\n        }\n\n        const frame = data[0];\n        const keyColumnField = findKeyField(frame, columnFieldMatch);\n        const keyRowField = findKeyField(frame, rowFieldMatch);\n        const valueField = findKeyField(frame, valueFieldMatch);\n        const rowColumnField = `${rowFieldMatch}\\\\${columnFieldMatch}`;\n\n        if (!keyColumnField || !keyRowField || !valueField) {\n          return data;\n        }\n\n        const columnValues = uniqueValues(keyColumnField.values);\n        const rowValues = uniqueValues(keyRowField.values);\n\n        const matrixValues: { [key: string]: { [key: string]: unknown } } = {};\n\n        for (let index = 0; index < valueField.values.length; index++) {\n          const columnName = keyColumnField.values[index];\n          const rowName = keyRowField.values[index];\n          const value = valueField.values[index];\n\n          if (!matrixValues[columnName]) {\n            matrixValues[columnName] = {};\n          }\n\n          matrixValues[columnName][rowName] = value;\n        }\n\n        const fields: Field[] = [\n          {\n            name: rowColumnField,\n            values: rowValues,\n            type: keyRowField.type,\n            config: {},\n          },\n        ];\n\n        for (const columnName of columnValues) {\n          let values = [];\n          for (const rowName of rowValues) {\n            const value = matrixValues[columnName][rowName] ?? getSpecialValue(emptyValue);\n            values.push(value);\n          }\n\n          // setting the displayNameFromDS in prometheus overrides\n          // the column name based on value fields that are numbers\n          // this prevents columns that should be named 1000190\n          // from becoming named {__name__: 'metricName'}\n          if (supportDataplaneFallback && typeof columnName === 'number') {\n            valueField.config = { ...valueField.config, displayNameFromDS: undefined };\n          }\n\n          fields.push({\n            name: columnName?.toString() ?? null,\n            values: values,\n            config: valueField.config,\n            type: valueField.type,\n          });\n        }\n\n        return [\n          {\n            fields,\n            length: rowValues.length,\n          },\n        ];\n      })\n    ),\n};\n\nfunction uniqueValues<T>(values: T[]): T[] {\n  const unique = new Set<T>(values);\n  return Array.from(unique);\n}\n\nfunction findKeyField(frame: DataFrame, matchTitle: string): Field | null {\n  for (let fieldIndex = 0; fieldIndex < frame.fields.length; fieldIndex++) {\n    const field = frame.fields[fieldIndex];\n\n    // support for dataplane contract with Prometheus and change in location of field name\n    let matches: boolean;\n    if (supportDataplaneFallback) {\n      const matcher = fieldMatchers.get(FieldMatcherID.byName).get(matchTitle);\n      matches = matcher(field, frame, [frame]);\n    } else {\n      matches = matchTitle === getFieldDisplayName(field);\n    }\n\n    if (matches) {\n      return field;\n    }\n  }\n\n  return null;\n}\n\nfunction getSpecialValue(specialValue: SpecialValue) {\n  switch (specialValue) {\n    case SpecialValue.False:\n      return false;\n    case SpecialValue.True:\n      return true;\n    case SpecialValue.Null:\n      return null;\n    case SpecialValue.Zero:\n      return 0;\n    case SpecialValue.Empty:\n    default:\n      return '';\n  }\n}\n","/** @beta */\nexport interface ThemeBreakpointValues {\n  xs: number;\n  sm: number;\n  md: number;\n  lg: number;\n  xl: number;\n  xxl: number;\n}\n\n/** @beta */\nexport type ThemeBreakpointsKey = keyof ThemeBreakpointValues;\n\n/** @beta */\nexport interface ThemeBreakpoints {\n  values: ThemeBreakpointValues;\n  keys: string[];\n  unit: string;\n  up: (key: ThemeBreakpointsKey | number) => string;\n  down: (key: ThemeBreakpointsKey | number) => string;\n}\n\n/** @internal */\nexport function createBreakpoints(): ThemeBreakpoints {\n  const step = 5;\n  const keys = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];\n  const unit = 'px';\n  const values: ThemeBreakpointValues = {\n    xs: 0,\n    sm: 544,\n    md: 769, // 1 more than regular ipad in portrait\n    lg: 992,\n    xl: 1200,\n    xxl: 1440,\n  };\n\n  function up(key: ThemeBreakpointsKey | number) {\n    const value = typeof key === 'number' ? key : values[key];\n    return `@media (min-width:${value}${unit})`;\n  }\n\n  function down(key: ThemeBreakpointsKey | number) {\n    const value = typeof key === 'number' ? key : values[key];\n    return `@media (max-width:${value - step / 100}${unit})`;\n  }\n\n  // TODO add functions for between and only\n\n  return {\n    values,\n    up,\n    down,\n    keys,\n    unit,\n  };\n}\n","export const palette = {\n  white: '#ffffff',\n  black: '#000000',\n\n  gray25: '#2c3235',\n  gray15: '#22252b', //'#202226',\n  gray10: '#181b1f', // old '#141619',\n  gray05: '#111217', // old '#0b0c0e',\n\n  // new from figma,\n  darkLayer0: '#18181a',\n  darkLayer1: '#212124',\n  darkLayer2: '#2a2a2f', // figma used #34343B but a bit too bright\n\n  darkBorder1: '#34343b',\n  darkBorder2: '#64646b',\n\n  // Dashboard bg / layer 0 (light theme)\n  gray90: '#f4f5f5',\n  // Card bg / layer 1\n  gray100: '#f4f5f5',\n  // divider line\n  gray80: '#d0d1d3',\n  // from figma\n  lightBorder1: '#e4e7e7',\n\n  blueDarkMain: '#3d71d9', // '#4165F5',\n  blueDarkText: '#6e9fff', // '#58a6ff', //'#33a2e5', // '#5790FF',\n  redDarkMain: '#d10e5c',\n  redDarkText: '#ff5286',\n  greenDarkMain: '#1a7f4b',\n  greenDarkText: '#6ccf8e',\n  orangeDarkMain: '#ff9900',\n  orangeDarkText: '#fbad37',\n\n  blueLightMain: '#3871dc',\n  blueLightText: '#1f62e0',\n  redLightMain: '#e0226e',\n  redLightText: '#cf0e5B',\n  greenLightMain: '#1b855e',\n  greenLightText: '#0a764e',\n  orangeLightMain: '#ff9900',\n  orangeLightText: '#b5510d',\n};\n","import { merge } from 'lodash';\n\nimport { alpha, darken, emphasize, getContrastRatio, lighten } from './colorManipulator';\nimport { palette } from './palette';\nimport { DeepPartial, ThemeRichColor } from './types';\n\n/** @internal */\nexport type ThemeColorsMode = 'light' | 'dark';\n\n/** @internal */\nexport interface ThemeColorsBase<TColor> {\n  mode: ThemeColorsMode;\n\n  primary: TColor;\n  secondary: TColor;\n  info: TColor;\n  error: TColor;\n  success: TColor;\n  warning: TColor;\n\n  text: {\n    primary: string;\n    secondary: string;\n    disabled: string;\n    link: string;\n    /** Used for auto white or dark text on colored backgrounds */\n    maxContrast: string;\n  };\n\n  background: {\n    /** Dashboard and body background */\n    canvas: string;\n    /** Primary content pane background (panels etc) */\n    primary: string;\n    /** Cards and elements that need to stand out on the primary background */\n    secondary: string;\n    /**\n     * For popovers and menu backgrounds. This is the same color as primary in most light themes but in dark\n     * themes it has a brighter shade to help give it contrast against the primary background.\n     **/\n    elevated: string;\n  };\n\n  border: {\n    weak: string;\n    medium: string;\n    strong: string;\n  };\n\n  gradients: {\n    brandVertical: string;\n    brandHorizontal: string;\n  };\n\n  action: {\n    /** Used for selected menu item / select option */\n    selected: string;\n    /**\n     * @alpha (Do not use from plugins)\n     * Used for selected items when background only change is not enough (Currently only used for FilterPill)\n     **/\n    selectedBorder: string;\n    /** Used for hovered menu item / select option */\n    hover: string;\n    /** Used for button/colored background hover opacity */\n    hoverOpacity: number;\n    /** Used focused menu item / select option */\n    focus: string;\n    /** Used for disabled buttons and inputs */\n    disabledBackground: string;\n    /** Disabled text */\n    disabledText: string;\n    /** Disablerd opacity */\n    disabledOpacity: number;\n  };\n\n  hoverFactor: number;\n  contrastThreshold: number;\n  tonalOffset: number;\n}\n\nexport interface ThemeHoverStrengh {}\n\n/** @beta */\nexport interface ThemeColors extends ThemeColorsBase<ThemeRichColor> {\n  /** Returns a text color for the background */\n  getContrastText(background: string, threshold?: number): string;\n  /* Brighten or darken a color by specified factor (0-1) */\n  emphasize(color: string, amount?: number): string;\n}\n\n/** @internal */\nexport type ThemeColorsInput = DeepPartial<ThemeColorsBase<ThemeRichColor>>;\n\nclass DarkColors implements ThemeColorsBase<Partial<ThemeRichColor>> {\n  mode: ThemeColorsMode = 'dark';\n\n  // Used to get more white opacity colors\n  whiteBase = '204, 204, 220';\n\n  border = {\n    weak: `rgba(${this.whiteBase}, 0.12)`,\n    medium: `rgba(${this.whiteBase}, 0.2)`,\n    strong: `rgba(${this.whiteBase}, 0.30)`,\n  };\n\n  text = {\n    primary: `rgb(${this.whiteBase})`,\n    secondary: `rgba(${this.whiteBase}, 0.65)`,\n    disabled: `rgba(${this.whiteBase}, 0.6)`,\n    link: palette.blueDarkText,\n    maxContrast: palette.white,\n  };\n\n  primary = {\n    main: palette.blueDarkMain,\n    text: palette.blueDarkText,\n    border: palette.blueDarkText,\n  };\n\n  secondary = {\n    main: `rgba(${this.whiteBase}, 0.10)`,\n    shade: `rgba(${this.whiteBase}, 0.14)`,\n    transparent: `rgba(${this.whiteBase}, 0.08)`,\n    text: this.text.primary,\n    contrastText: `rgb(${this.whiteBase})`,\n    border: `rgba(${this.whiteBase}, 0.08)`,\n  };\n\n  info = this.primary;\n\n  error = {\n    main: palette.redDarkMain,\n    text: palette.redDarkText,\n  };\n\n  success = {\n    main: palette.greenDarkMain,\n    text: palette.greenDarkText,\n  };\n\n  warning = {\n    main: palette.orangeDarkMain,\n    text: palette.orangeDarkText,\n  };\n\n  background = {\n    canvas: palette.gray05,\n    primary: palette.gray10,\n    secondary: palette.gray15,\n    elevated: palette.gray15,\n  };\n\n  action = {\n    hover: `rgba(${this.whiteBase}, 0.16)`,\n    selected: `rgba(${this.whiteBase}, 0.12)`,\n    selectedBorder: palette.orangeDarkMain,\n    focus: `rgba(${this.whiteBase}, 0.16)`,\n    hoverOpacity: 0.08,\n    disabledText: this.text.disabled,\n    disabledBackground: `rgba(${this.whiteBase}, 0.04)`,\n    disabledOpacity: 0.38,\n  };\n\n  gradients = {\n    brandHorizontal: 'linear-gradient(270deg, #F55F3E 0%, #FF8833 100%)',\n    brandVertical: 'linear-gradient(0.01deg, #F55F3E 0.01%, #FF8833 99.99%)',\n  };\n\n  contrastThreshold = 3;\n  hoverFactor = 0.03;\n  tonalOffset = 0.15;\n}\n\nclass LightColors implements ThemeColorsBase<Partial<ThemeRichColor>> {\n  mode: ThemeColorsMode = 'light';\n\n  blackBase = '36, 41, 46';\n\n  primary = {\n    main: palette.blueLightMain,\n    border: palette.blueLightText,\n    text: palette.blueLightText,\n  };\n\n  text = {\n    primary: `rgba(${this.blackBase}, 1)`,\n    secondary: `rgba(${this.blackBase}, 0.75)`,\n    disabled: `rgba(${this.blackBase}, 0.64)`,\n    link: this.primary.text,\n    maxContrast: palette.black,\n  };\n\n  border = {\n    weak: `rgba(${this.blackBase}, 0.12)`,\n    medium: `rgba(${this.blackBase}, 0.3)`,\n    strong: `rgba(${this.blackBase}, 0.4)`,\n  };\n\n  secondary = {\n    main: `rgba(${this.blackBase}, 0.08)`,\n    shade: `rgba(${this.blackBase}, 0.15)`,\n    transparent: `rgba(${this.blackBase}, 0.08)`,\n    contrastText: `rgba(${this.blackBase},  1)`,\n    text: this.text.primary,\n    border: this.border.weak,\n  };\n\n  info = {\n    main: palette.blueLightMain,\n    text: palette.blueLightText,\n  };\n\n  error = {\n    main: palette.redLightMain,\n    text: palette.redLightText,\n    border: palette.redLightText,\n  };\n\n  success = {\n    main: palette.greenLightMain,\n    text: palette.greenLightText,\n  };\n\n  warning = {\n    main: palette.orangeLightMain,\n    text: palette.orangeLightText,\n  };\n\n  background = {\n    canvas: palette.gray90,\n    primary: palette.white,\n    secondary: palette.gray100,\n    elevated: palette.white,\n  };\n\n  action = {\n    hover: `rgba(${this.blackBase}, 0.12)`,\n    selected: `rgba(${this.blackBase}, 0.08)`,\n    selectedBorder: palette.orangeLightMain,\n    hoverOpacity: 0.08,\n    focus: `rgba(${this.blackBase}, 0.12)`,\n    disabledBackground: `rgba(${this.blackBase}, 0.04)`,\n    disabledText: this.text.disabled,\n    disabledOpacity: 0.38,\n  };\n\n  gradients = {\n    brandHorizontal: 'linear-gradient(90deg, #FF8833 0%, #F53E4C 100%)',\n    brandVertical: 'linear-gradient(0.01deg, #F53E4C -31.2%, #FF8833 113.07%)',\n  };\n\n  contrastThreshold = 3;\n  hoverFactor = 0.03;\n  tonalOffset = 0.2;\n}\n\nexport function createColors(colors: ThemeColorsInput): ThemeColors {\n  const dark = new DarkColors();\n  const light = new LightColors();\n  const base = (colors.mode ?? 'dark') === 'dark' ? dark : light;\n  const {\n    primary = base.primary,\n    secondary = base.secondary,\n    info = base.info,\n    warning = base.warning,\n    success = base.success,\n    error = base.error,\n    tonalOffset = base.tonalOffset,\n    hoverFactor = base.hoverFactor,\n    contrastThreshold = base.contrastThreshold,\n    ...other\n  } = colors;\n\n  function getContrastText(background: string, threshold: number = contrastThreshold) {\n    const contrastText =\n      getContrastRatio(dark.text.maxContrast, background, base.background.primary) >= threshold\n        ? dark.text.maxContrast\n        : light.text.maxContrast;\n    // todo, need color framework\n    return contrastText;\n  }\n\n  const getRichColor = ({ color, name }: GetRichColorProps): ThemeRichColor => {\n    color = { ...color, name };\n    if (!color.main) {\n      color.main = base[name].main;\n    }\n    if (!color.text) {\n      color.text = color.main;\n    }\n    if (!color.border) {\n      color.border = color.text;\n    }\n    if (!color.shade) {\n      color.shade = base.mode === 'light' ? darken(color.main, tonalOffset) : lighten(color.main, tonalOffset);\n    }\n    if (!color.transparent) {\n      color.transparent = alpha(color.main, 0.15);\n    }\n    if (!color.contrastText) {\n      color.contrastText = getContrastText(color.main);\n    }\n    if (!color.borderTransparent) {\n      color.borderTransparent = alpha(color.border, 0.25);\n    }\n    return color as ThemeRichColor;\n  };\n\n  return merge(\n    {\n      ...base,\n      primary: getRichColor({ color: primary, name: 'primary' }),\n      secondary: getRichColor({ color: secondary, name: 'secondary' }),\n      info: getRichColor({ color: info, name: 'info' }),\n      error: getRichColor({ color: error, name: 'error' }),\n      success: getRichColor({ color: success, name: 'success' }),\n      warning: getRichColor({ color: warning, name: 'warning' }),\n      getContrastText,\n      emphasize: (color: string, factor?: number) => {\n        return emphasize(color, factor ?? hoverFactor);\n      },\n    },\n    other\n  );\n}\n\ntype RichColorNames = 'primary' | 'secondary' | 'info' | 'error' | 'success' | 'warning';\n\ninterface GetRichColorProps {\n  color: Partial<ThemeRichColor>;\n  name: RichColorNames;\n}\n","import { ThemeColors } from './createColors';\nimport { ThemeShadows } from './createShadows';\n\n/** @beta */\nexport interface ThemeComponents {\n  /** Applies to normal buttons, inputs, radio buttons, etc */\n  height: {\n    sm: number;\n    md: number;\n    lg: number;\n  };\n  input: {\n    background: string;\n    borderColor: string;\n    borderHover: string;\n    text: string;\n  };\n  tooltip: {\n    text: string;\n    background: string;\n  };\n  panel: {\n    padding: number;\n    headerHeight: number;\n    borderColor: string;\n    boxShadow: string;\n    background: string;\n  };\n  dropdown: {\n    background: string;\n  };\n  overlay: {\n    background: string;\n  };\n  dashboard: {\n    background: string;\n    padding: number;\n  };\n  textHighlight: {\n    background: string;\n    text: string;\n  };\n  sidemenu: {\n    width: number;\n  };\n  horizontalDrawer: {\n    defaultHeight: number;\n  };\n  table: {\n    rowHoverBackground: string;\n    rowSelected: string;\n  };\n}\n\nexport function createComponents(colors: ThemeColors, shadows: ThemeShadows): ThemeComponents {\n  const panel = {\n    padding: 1,\n    headerHeight: 4,\n    background: colors.background.primary,\n    borderColor: colors.border.weak,\n    boxShadow: 'none',\n  };\n\n  const input = {\n    borderColor: colors.border.medium,\n    borderHover: colors.border.strong,\n    text: colors.text.primary,\n    background: colors.mode === 'dark' ? colors.background.canvas : colors.background.primary,\n  };\n\n  return {\n    height: {\n      sm: 3,\n      md: 4,\n      lg: 6,\n    },\n    input,\n    panel,\n    dropdown: {\n      background: colors.background.elevated,\n    },\n    tooltip: {\n      background: colors.background.elevated,\n      text: colors.text.primary,\n    },\n    dashboard: {\n      background: colors.background.canvas,\n      padding: 1,\n    },\n    overlay: {\n      background: colors.mode === 'dark' ? 'rgba(63, 62, 62, 0.5)' : 'rgba(208, 209, 211, 0.5)',\n    },\n    sidemenu: {\n      width: 57,\n    },\n    // @ts-expect-error (added here to not crash plugins that might use it)\n    menuTabs: {\n      height: 5,\n    },\n    textHighlight: {\n      text: colors.warning.contrastText,\n      background: colors.warning.main,\n    },\n    horizontalDrawer: {\n      defaultHeight: 400,\n    },\n    table: {\n      rowHoverBackground: colors.action.hover,\n      rowSelected: colors.action.selected,\n    },\n  };\n}\n","import { ThemeColors } from './createColors';\n\n/** @beta */\nexport interface ThemeShadows {\n  z1: string;\n  z2: string;\n  z3: string;\n}\n\n/** @alpha */\nexport function createShadows(colors: ThemeColors): ThemeShadows {\n  if (colors.mode === 'dark') {\n    return {\n      z1: '0px 1px 2px rgba(1, 4, 9, 0.75)',\n      z2: '0px 4px 8px rgba(1, 4, 9, 0.75)',\n      z3: '0px 8px 24px rgb(1, 4, 9)',\n    };\n  }\n\n  return {\n    z1: '0px 1px 2px rgba(24, 26, 27, 0.2)',\n    z2: '0px 4px 8px rgba(24, 26, 27, 0.2)',\n    z3: '0px 13px 20px 1px rgba(24, 26, 27, 0.18)',\n  };\n}\n","/** @beta */\nexport interface ThemeShape {\n  /**\n   * @deprecated Use `theme.shape.radius.default`, `theme.shape.radius.pill` or `theme.shape.radius.circle` instead\n   */\n  borderRadius: (amount?: number) => string;\n  radius: Radii;\n}\n\ninterface Radii {\n  default: string;\n  pill: string;\n  circle: string;\n}\n\n/** @internal */\nexport interface ThemeShapeInput {\n  borderRadius?: number;\n}\n\nexport function createShape(options: ThemeShapeInput): ThemeShape {\n  const baseBorderRadius = options.borderRadius ?? 2;\n\n  const radius = {\n    default: `${baseBorderRadius}px`,\n    pill: '9999px',\n    circle: '100%',\n  };\n\n  /**\n   * @deprecated Use `theme.shape.radius.default`, `theme.shape.radius.pill` or `theme.shape.radius.circle`instead\n   * @param amount\n   */\n  const borderRadius = (amount?: number) => {\n    const value = (amount ?? 1) * baseBorderRadius;\n    return `${value}px`;\n  };\n\n  return {\n    radius,\n    borderRadius,\n  };\n}\n","// Code based on Material UI\n// The MIT License (MIT)\n// Copyright (c) 2014 Call-Em-All\n\n/** @internal */\nexport type ThemeSpacingOptions = {\n  gridSize?: number;\n};\n\n/** @internal */\nexport type ThemeSpacingArgument = number | string;\n\n/**\n * @beta\n * The different signatures imply different meaning for their arguments that can't be expressed structurally.\n * We express the difference with variable names.\n * tslint:disable:unified-signatures */\nexport interface ThemeSpacing extends SpacingTokens {\n  (): string;\n  (value: ThemeSpacingArgument): string;\n  (topBottom: ThemeSpacingArgument, rightLeft: ThemeSpacingArgument): string;\n  (top: ThemeSpacingArgument, rightLeft: ThemeSpacingArgument, bottom: ThemeSpacingArgument): string;\n  (\n    top: ThemeSpacingArgument,\n    right: ThemeSpacingArgument,\n    bottom: ThemeSpacingArgument,\n    left: ThemeSpacingArgument\n  ): string;\n  gridSize: number;\n}\n\n// Possible spacing token options\nexport type ThemeSpacingTokens = 0 | 0.25 | 0.5 | 1 | 1.5 | 2 | 2.5 | 3 | 4 | 5 | 6 | 8 | 10;\n\n// Spacing tokens as represented in the theme\ntype SpacingTokens = {\n  [key in `x${Exclude<ThemeSpacingTokens, 0.25 | 0.5 | 1.5 | 2.5> | '0_25' | '0_5' | '1_5' | '2_5'}`]: string;\n};\n\n/** @internal */\nexport function createSpacing(options: ThemeSpacingOptions = {}): ThemeSpacing {\n  const { gridSize = 8 } = options;\n\n  const transform = (value: ThemeSpacingArgument) => {\n    if (typeof value === 'string') {\n      return value;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof value !== 'number') {\n        console.error(`Expected spacing argument to be a number or a string, got ${value}.`);\n      }\n    }\n    return value * gridSize;\n  };\n\n  const spacing = (...args: Array<number | string>): string => {\n    if (process.env.NODE_ENV !== 'production') {\n      if (!(args.length <= 4)) {\n        console.error(`Too many arguments provided, expected between 0 and 4, got ${args.length}`);\n      }\n    }\n\n    if (args.length === 0) {\n      args[0] = 1;\n    }\n\n    return args\n      .map((argument) => {\n        const output = transform(argument);\n        return typeof output === 'number' ? `${output}px` : output;\n      })\n      .join(' ');\n  };\n\n  spacing.gridSize = gridSize;\n\n  // Design system spacing tokens\n  // Added in v10.2 of Grafana, if using spacing in a plugin that needs compatibility with older versions\n  // use the spacing function instead.\n  spacing.x0 = '0px';\n  spacing.x0_25 = '2px';\n  spacing.x0_5 = '4px';\n  spacing.x1 = '8px';\n  spacing.x1_5 = '12px';\n  spacing.x2 = '16px';\n  spacing.x2_5 = '20px';\n  spacing.x3 = '24px';\n  spacing.x4 = '32px';\n  spacing.x5 = '40px';\n  spacing.x6 = '48px';\n  spacing.x8 = '64px';\n  spacing.x10 = '80px';\n\n  return spacing;\n}\n","// Code based on Material UI\n// The MIT License (MIT)\n// Copyright (c) 2014 Call-Em-All\n\n// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nconst easing = {\n  // This is the most common easing curve.\n  easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n  // Objects enter the screen at full velocity from off-screen and\n  // slowly decelerate to a resting point.\n  easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n  // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n  easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n  // The sharp curve is used by objects that may return to the screen at any time.\n  sharp: 'cubic-bezier(0.4, 0, 0.6, 1)',\n};\n\n// Follow https://material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\nconst duration = {\n  shortest: 150,\n  shorter: 200,\n  short: 250,\n  // most basic recommended timing\n  standard: 300,\n  // this is to be used in complex animations\n  complex: 375,\n  // recommended when something is entering screen\n  enteringScreen: 225,\n  // recommended when something is leaving screen\n  leavingScreen: 195,\n};\n\n/** @alpha */\nexport interface CreateTransitionOptions {\n  duration?: number | string;\n  easing?: string;\n  delay?: number | string;\n}\n\n/** @alpha */\nexport function create(props: string | string[] = ['all'], options: CreateTransitionOptions = {}) {\n  const { duration: durationOption = duration.standard, easing: easingOption = easing.easeInOut, delay = 0 } = options;\n\n  return (Array.isArray(props) ? props : [props])\n    .map(\n      (animatedProp) =>\n        `${animatedProp} ${\n          typeof durationOption === 'string' ? durationOption : formatMs(durationOption)\n        } ${easingOption} ${typeof delay === 'string' ? delay : formatMs(delay)}`\n    )\n    .join(',');\n}\n\ntype ReducedMotionProps = 'no-preference' | 'reduce';\n\nexport function handleMotion(...props: ReducedMotionProps[]) {\n  return `@media ${props.map((prop) => `(prefers-reduced-motion: ${prop})`).join(',')}`;\n}\n\nexport function getAutoHeightDuration(height: number) {\n  if (!height) {\n    return 0;\n  }\n\n  const constant = height / 36;\n\n  // https://www.wolframalpha.com/input/?i=(4+%2B+15+*+(x+%2F+36+)+**+0.25+%2B+(x+%2F+36)+%2F+5)+*+10\n  return Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10);\n}\n\nfunction formatMs(milliseconds: number) {\n  return `${Math.round(milliseconds)}ms`;\n}\n\n/** @alpha */\nexport interface ThemeTransitions {\n  create: typeof create;\n  duration: typeof duration;\n  easing: typeof easing;\n  getAutoHeightDuration: typeof getAutoHeightDuration;\n  handleMotion: typeof handleMotion;\n}\n\n/** @internal */\nexport function createTransitions(): ThemeTransitions {\n  return {\n    create,\n    duration,\n    easing,\n    getAutoHeightDuration,\n    handleMotion,\n  };\n}\n","// Code based on Material UI\n// The MIT License (MIT)\n// Copyright (c) 2014 Call-Em-All\n\nimport { ThemeColors } from './createColors';\n\n/** @beta */\nexport interface ThemeTypography extends ThemeTypographyVariantTypes {\n  fontFamily: string;\n  fontFamilyMonospace: string;\n  fontSize: number;\n  fontWeightLight: number;\n  fontWeightRegular: number;\n  fontWeightMedium: number;\n  fontWeightBold: number;\n\n  // The font-size on the html element.\n  htmlFontSize?: number;\n\n  /**\n   * @deprecated\n   * from legacy old theme\n   * */\n  size: {\n    base: string;\n    xs: string;\n    sm: string;\n    md: string;\n    lg: string;\n  };\n\n  pxToRem: (px: number) => string;\n}\n\nexport interface ThemeTypographyVariant {\n  fontSize: string;\n  fontWeight: number;\n  lineHeight: number;\n  fontFamily: string;\n  letterSpacing?: string;\n}\n\nexport interface ThemeTypographyInput {\n  fontFamily?: string;\n  fontFamilyMonospace?: string;\n  fontSize?: number;\n  fontWeightLight?: number;\n  fontWeightRegular?: number;\n  fontWeightMedium?: number;\n  fontWeightBold?: number;\n  // hat's the font-size on the html element.\n  // 16px is the default font-size used by browsers.\n  htmlFontSize?: number;\n}\n\nconst defaultFontFamily = \"'Inter', 'Helvetica', 'Arial', sans-serif\";\nconst defaultFontFamilyMonospace = \"'Roboto Mono', monospace\";\n\nexport function createTypography(colors: ThemeColors, typographyInput: ThemeTypographyInput = {}): ThemeTypography {\n  const {\n    fontFamily = defaultFontFamily,\n    fontFamilyMonospace = defaultFontFamilyMonospace,\n    // The default font size of the Material Specification.\n    fontSize = 14, // px\n    fontWeightLight = 300,\n    fontWeightRegular = 400,\n    fontWeightMedium = 500,\n    fontWeightBold = 500,\n    // Tell Grafana-UI what's the font-size on the html element.\n    // 16px is the default font-size used by browsers.\n    htmlFontSize = 14,\n  } = typographyInput;\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof fontSize !== 'number') {\n      console.error('Grafana-UI: `fontSize` is required to be a number.');\n    }\n\n    if (typeof htmlFontSize !== 'number') {\n      console.error('Grafana-UI: `htmlFontSize` is required to be a number.');\n    }\n  }\n\n  const coef = fontSize / 14;\n  const pxToRem = (size: number) => `${(size / htmlFontSize) * coef}rem`;\n  const buildVariant = (\n    fontWeight: number,\n    size: number,\n    lineHeight: number,\n    letterSpacing: number,\n    casing?: object\n  ): ThemeTypographyVariant => {\n    if (lineHeight % 2 !== 0 || size % 2 !== 0) {\n      throw new Error('Font size and line height should be integer multiples of 2 to prevent issues with alignment');\n    }\n\n    return {\n      fontFamily,\n      fontWeight,\n      fontSize: pxToRem(size),\n      lineHeight: lineHeight / size,\n      ...(fontFamily === defaultFontFamily ? { letterSpacing: `${round(letterSpacing / size)}em` } : {}),\n      ...casing,\n    };\n  };\n\n  // All our fonts/line heights should be integer multiples of 2 to prevent issues with alignment\n  const variants = {\n    h1: buildVariant(fontWeightRegular, 28, 32, -0.25),\n    h2: buildVariant(fontWeightRegular, 24, 28, 0),\n    h3: buildVariant(fontWeightRegular, 22, 24, 0),\n    h4: buildVariant(fontWeightRegular, 18, 22, 0.25),\n    h5: buildVariant(fontWeightRegular, 16, 22, 0),\n    h6: buildVariant(fontWeightMedium, 14, 22, 0.15),\n    body: buildVariant(fontWeightRegular, fontSize, 22, 0.15),\n    bodySmall: buildVariant(fontWeightRegular, 12, 18, 0.15),\n    code: { ...buildVariant(fontWeightRegular, 14, 16, 0.15), fontFamily: fontFamilyMonospace },\n  };\n\n  const size = {\n    base: '14px',\n    xs: '10px',\n    sm: '12px',\n    md: '14px',\n    lg: '18px',\n  };\n\n  return {\n    htmlFontSize,\n    pxToRem,\n    fontFamily,\n    fontFamilyMonospace,\n    fontSize,\n    fontWeightLight,\n    fontWeightRegular,\n    fontWeightMedium,\n    fontWeightBold,\n    size,\n    ...variants,\n  };\n}\n\nfunction round(value: number) {\n  return Math.round(value * 1e5) / 1e5;\n}\n\nexport interface ThemeTypographyVariantTypes {\n  h1: ThemeTypographyVariant;\n  h2: ThemeTypographyVariant;\n  h3: ThemeTypographyVariant;\n  h4: ThemeTypographyVariant;\n  h5: ThemeTypographyVariant;\n  h6: ThemeTypographyVariant;\n  body: ThemeTypographyVariant;\n  bodySmall: ThemeTypographyVariant;\n  code: ThemeTypographyVariant;\n}\n","import { ThemeVisualizationColors } from '../themes/createVisualizationColors';\n\nexport enum GrafanaThemeType {\n  Light = 'light',\n  Dark = 'dark',\n}\n\nexport interface GrafanaThemeCommons {\n  name: string;\n  // TODO: not sure if should be a part of theme\n  breakpoints: {\n    xs: string;\n    sm: string;\n    md: string;\n    lg: string;\n    xl: string;\n    xxl: string;\n  };\n  typography: {\n    fontFamily: {\n      sansSerif: string;\n      monospace: string;\n    };\n    size: {\n      base: string;\n      xs: string;\n      sm: string;\n      md: string;\n      lg: string;\n    };\n    weight: {\n      light: number;\n      regular: number;\n      semibold: number;\n      bold: number;\n    };\n    lineHeight: {\n      xs: number; //1\n      sm: number; //1.1\n      md: number; // 4/3\n      lg: number; // 1.5\n    };\n    // TODO: Refactor to use size instead of custom defs\n    heading: {\n      h1: string;\n      h2: string;\n      h3: string;\n      h4: string;\n      h5: string;\n      h6: string;\n    };\n    link: {\n      decoration: string;\n      hoverDecoration: string;\n    };\n  };\n  spacing: {\n    base: number;\n    insetSquishMd: string;\n    d: string;\n    xxs: string;\n    xs: string;\n    sm: string;\n    md: string;\n    lg: string;\n    xl: string;\n    gutter: string;\n\n    // Next-gen forms spacing variables\n    // TODO: Move variables definition to respective components when implementing\n    formSpacingBase: number;\n    formMargin: string;\n    formFieldsetMargin: string;\n    formInputHeight: number;\n    formButtonHeight: number;\n    formInputPaddingHorizontal: string;\n    // Used for icons do define spacing between icon and input field\n    // Applied on the right(prefix) or left(suffix)\n    formInputAffixPaddingHorizontal: string;\n    formInputMargin: string;\n    formLabelPadding: string;\n    formLabelMargin: string;\n    formValidationMessagePadding: string;\n    formValidationMessageMargin: string;\n    inlineFormMargin: string;\n  };\n  border: {\n    radius: {\n      sm: string;\n      md: string;\n      lg: string;\n    };\n    width: {\n      sm: string;\n    };\n  };\n  height: {\n    sm: number;\n    md: number;\n    lg: number;\n  };\n  panelPadding: number;\n  panelHeaderHeight: number;\n  zIndex: {\n    dropdown: number;\n    navbarFixed: number;\n    sidemenu: number;\n    tooltip: number;\n    modalBackdrop: number;\n    modal: number;\n    portal: number;\n    typeahead: number;\n  };\n}\n\nexport interface GrafanaTheme extends GrafanaThemeCommons {\n  type: GrafanaThemeType;\n  isDark: boolean;\n  isLight: boolean;\n  palette: {\n    black: string;\n    white: string;\n    dark1: string;\n    dark2: string;\n    dark3: string;\n    dark4: string;\n    dark5: string;\n    dark6: string;\n    dark7: string;\n    dark8: string;\n    dark9: string;\n    dark10: string;\n    gray1: string;\n    gray2: string;\n    gray3: string;\n    gray4: string;\n    gray5: string;\n    gray6: string;\n    gray7: string;\n\n    // New greys palette used by next-gen form elements\n    gray98: string;\n    gray97: string;\n    gray95: string;\n    gray90: string;\n    gray85: string;\n    gray70: string;\n    gray60: string;\n    gray33: string;\n    gray25: string;\n    gray15: string;\n    gray10: string;\n    gray05: string;\n\n    // New blues palette used by next-gen form elements\n    blue95: string;\n    blue85: string;\n    blue80: string;\n    blue77: string;\n\n    // New reds palette used by next-gen form elements\n    red88: string;\n\n    // Accent colors\n    redBase: string;\n    redShade: string;\n    greenBase: string;\n    greenShade: string;\n    red: string;\n    yellow: string;\n    purple: string;\n    orange: string;\n    orangeDark: string;\n    queryRed: string;\n    queryGreen: string;\n    queryPurple: string;\n    queryOrange: string;\n    brandPrimary: string;\n    brandSuccess: string;\n    brandWarning: string;\n    brandDanger: string;\n\n    // Status colors\n    online: string;\n    warn: string;\n    critical: string;\n  };\n  colors: {\n    bg1: string;\n    bg2: string;\n    bg3: string;\n    border1: string;\n    border2: string;\n    border3: string;\n\n    bgBlue1: string;\n    bgBlue2: string;\n\n    dashboardBg: string;\n    bodyBg: string;\n    panelBg: string;\n    panelBorder: string;\n    pageHeaderBg: string;\n    pageHeaderBorder: string;\n\n    dropdownBg: string;\n    dropdownShadow: string;\n    dropdownOptionHoverBg: string;\n\n    // Link colors\n    link: string;\n    linkDisabled: string;\n    linkHover: string;\n    linkExternal: string;\n\n    // Text colors\n    textStrong: string;\n    textHeading: string;\n    text: string;\n    textSemiWeak: string;\n    textWeak: string;\n    textFaint: string;\n    textBlue: string;\n\n    // Next-gen forms functional colors\n    formLabel: string;\n    formDescription: string;\n    formInputBg: string;\n    formInputBgDisabled: string;\n    formInputBorder: string;\n    formInputBorderHover: string;\n    formInputBorderActive: string;\n    formInputBorderInvalid: string;\n    formFocusOutline: string;\n    formInputText: string;\n    formInputDisabledText: string;\n    formInputPlaceholderText: string;\n    formValidationMessageText: string;\n    formValidationMessageBg: string;\n  };\n  shadows: {\n    listItem: string;\n  };\n  visualization: ThemeVisualizationColors;\n}\n","import { GrafanaTheme, GrafanaThemeCommons, GrafanaThemeType } from '../types/theme';\n\nimport { GrafanaTheme2 } from './types';\n\nexport function createV1Theme(theme: Omit<GrafanaTheme2, 'v1'>): GrafanaTheme {\n  const oldCommon: GrafanaThemeCommons = {\n    name: 'Grafana Default',\n    typography: {\n      fontFamily: {\n        sansSerif: theme.typography.fontFamily,\n        monospace: theme.typography.fontFamilyMonospace,\n      },\n      size: {\n        base: `${theme.typography.fontSize}px`,\n        xs: theme.typography.size.xs,\n        sm: theme.typography.size.sm,\n        md: theme.typography.size.md,\n        lg: theme.typography.size.lg,\n      },\n      heading: {\n        h1: theme.typography.h1.fontSize,\n        h2: theme.typography.h2.fontSize,\n        h3: theme.typography.h3.fontSize,\n        h4: theme.typography.h4.fontSize,\n        h5: theme.typography.h5.fontSize,\n        h6: theme.typography.h6.fontSize,\n      },\n      weight: {\n        light: theme.typography.fontWeightLight,\n        regular: theme.typography.fontWeightRegular,\n        semibold: theme.typography.fontWeightMedium,\n        bold: theme.typography.fontWeightBold,\n      },\n      lineHeight: {\n        xs: theme.typography.bodySmall.lineHeight,\n        sm: theme.typography.bodySmall.lineHeight,\n        md: theme.typography.body.lineHeight,\n        lg: theme.typography.h2.lineHeight,\n      },\n      link: {\n        decoration: 'none',\n        hoverDecoration: 'none',\n      },\n    },\n    breakpoints: {\n      xs: `${theme.breakpoints.values.xs}px`,\n      sm: `${theme.breakpoints.values.sm}px`,\n      md: `${theme.breakpoints.values.md}px`,\n      lg: `${theme.breakpoints.values.lg}px`,\n      xl: `${theme.breakpoints.values.xl}px`,\n      xxl: `${theme.breakpoints.values.xxl}px`,\n    },\n    spacing: {\n      base: theme.spacing.gridSize,\n      insetSquishMd: theme.spacing(0.5, 1),\n      d: theme.spacing(2),\n      xxs: theme.spacing(0.25),\n      xs: theme.spacing(0.5),\n      sm: theme.spacing(1),\n      md: theme.spacing(2),\n      lg: theme.spacing(3),\n      xl: theme.spacing(4),\n      gutter: theme.spacing(4),\n\n      // Next-gen forms spacing variables\n      // TODO: Move variables definition to respective components when implementing\n      formSpacingBase: theme.spacing.gridSize,\n      formMargin: `${theme.spacing.gridSize * 4}px`,\n      formFieldsetMargin: `${theme.spacing.gridSize * 2}px`,\n      formInputHeight: theme.spacing.gridSize * 4,\n      formButtonHeight: theme.spacing.gridSize * 4,\n      formInputPaddingHorizontal: `${theme.spacing.gridSize}px`,\n\n      // Used for icons do define spacing between icon and input field\n      // Applied on the right(prefix) or left(suffix)\n      formInputAffixPaddingHorizontal: `${theme.spacing.gridSize / 2}px`,\n\n      formInputMargin: `${theme.spacing.gridSize * 2}px`,\n      formLabelPadding: '0 0 0 2px',\n      formLabelMargin: `0 0 ${theme.spacing.gridSize / 2 + 'px'} 0`,\n      formValidationMessagePadding: '4px 8px',\n      formValidationMessageMargin: '4px 0 0 0',\n      inlineFormMargin: '4px',\n    },\n    border: {\n      radius: {\n        sm: theme.shape.borderRadius(1),\n        md: theme.shape.borderRadius(2),\n        lg: theme.shape.borderRadius(3),\n      },\n      width: {\n        sm: '1px',\n      },\n    },\n    height: {\n      sm: theme.spacing.gridSize * theme.components.height.sm,\n      md: theme.spacing.gridSize * theme.components.height.md,\n      lg: theme.spacing.gridSize * theme.components.height.lg,\n    },\n    panelPadding: theme.components.panel.padding * theme.spacing.gridSize,\n    panelHeaderHeight: theme.spacing.gridSize * theme.components.panel.headerHeight,\n    zIndex: theme.zIndex,\n  };\n\n  const basicColors = {\n    ...commonColorsPalette,\n    black: '#000000',\n    white: '#ffffff',\n    dark1: '#141414',\n    dark2: '#161719',\n    dark3: '#1f1f20',\n    dark4: '#212124',\n    dark5: '#222426',\n    dark6: '#262628',\n    dark7: '#292a2d',\n    dark8: '#2f2f32',\n    dark9: '#343436',\n    dark10: '#424345',\n    gray1: '#555555',\n    gray2: '#8e8e8e',\n    gray3: '#b3b3b3',\n    gray4: '#d8d9da',\n    gray5: '#ececec',\n    gray6: '#f4f5f8', // not used in dark theme\n    gray7: '#fbfbfb', // not used in dark theme\n    redBase: '#e02f44',\n    redShade: '#c4162a',\n    greenBase: '#299c46',\n    greenShade: '#23843b',\n    red: '#d44a3a',\n    yellow: '#ecbb13',\n    purple: '#9933cc',\n    variable: '#32d1df',\n    orange: '#eb7b18',\n    orangeDark: '#ff780a',\n  };\n\n  const backgrounds = {\n    bg1: theme.colors.background.primary,\n    bg2: theme.colors.background.secondary,\n    bg3: theme.colors.action.hover,\n    dashboardBg: theme.colors.background.canvas,\n    bgBlue1: theme.colors.primary.main,\n    bgBlue2: theme.colors.primary.shade,\n  };\n\n  const borders = {\n    border1: theme.colors.border.weak,\n    border2: theme.colors.border.medium,\n    border3: theme.colors.border.strong,\n  };\n\n  const textColors = {\n    textStrong: theme.colors.text.maxContrast,\n    textHeading: theme.colors.text.primary,\n    text: theme.colors.text.primary,\n    textSemiWeak: theme.colors.text.secondary,\n    textWeak: theme.colors.text.secondary,\n    textFaint: theme.colors.text.disabled,\n    textBlue: theme.colors.primary.text,\n  };\n\n  const form = {\n    // Next-gen forms functional colors\n    formLabel: theme.colors.text.primary,\n    formDescription: theme.colors.text.secondary,\n    formInputBg: theme.components.input.background,\n    formInputBgDisabled: theme.colors.action.disabledBackground,\n    formInputBorder: theme.components.input.borderColor,\n    formInputBorderHover: theme.components.input.borderHover,\n    formInputBorderActive: theme.colors.primary.border,\n    formInputBorderInvalid: theme.colors.error.border,\n    formInputPlaceholderText: theme.colors.text.disabled,\n    formInputText: theme.components.input.text,\n    formInputDisabledText: theme.colors.action.disabledText,\n    formFocusOutline: theme.colors.primary.main,\n    formValidationMessageText: theme.colors.error.contrastText,\n    formValidationMessageBg: theme.colors.error.main,\n  };\n\n  return {\n    ...oldCommon,\n    type: theme.colors.mode === 'dark' ? GrafanaThemeType.Dark : GrafanaThemeType.Light,\n    isDark: theme.isDark,\n    isLight: theme.isLight,\n    name: theme.name,\n    palette: {\n      ...basicColors,\n      brandPrimary: basicColors.orange,\n      brandSuccess: theme.colors.success.main,\n      brandWarning: theme.colors.warning.main,\n      brandDanger: theme.colors.error.main,\n      queryRed: theme.colors.error.text,\n      queryGreen: theme.colors.success.text,\n      queryPurple: '#fe85fc',\n      queryOrange: basicColors.orange,\n      online: theme.colors.success.main,\n      warn: theme.colors.success.main,\n      critical: theme.colors.success.main,\n    },\n    colors: {\n      ...backgrounds,\n      ...borders,\n      ...form,\n      ...textColors,\n\n      bodyBg: theme.colors.background.canvas,\n      panelBg: theme.components.panel.background,\n      panelBorder: theme.components.panel.borderColor,\n      pageHeaderBg: theme.colors.background.canvas,\n      pageHeaderBorder: theme.colors.background.canvas,\n\n      dropdownBg: form.formInputBg,\n      dropdownShadow: basicColors.black,\n      dropdownOptionHoverBg: backgrounds.bg2,\n\n      link: theme.colors.text.primary,\n      linkDisabled: theme.colors.text.disabled,\n      linkHover: theme.colors.text.maxContrast,\n      linkExternal: theme.colors.text.link,\n    },\n    shadows: {\n      listItem: 'none',\n    },\n    visualization: theme.visualization,\n  };\n}\n\nconst commonColorsPalette = {\n  // New greys palette used by next-gen form elements\n  gray98: '#f7f8fa',\n  gray97: '#f1f5f9',\n  gray95: '#e9edf2',\n  gray90: '#dce1e6',\n  gray85: '#c7d0d9',\n  gray70: '#9fa7b3',\n  gray60: '#7b8087',\n  gray33: '#464c54',\n  gray25: '#2c3235',\n  gray15: '#202226',\n  gray10: '#141619',\n  gray05: '#0b0c0e',\n\n  // New blues palette used by next-gen form elements\n  blue95: '#5794f2', // blue95\n  blue85: '#33a2e5', // blueText\n  blue80: '#3274d9', // blue80\n  blue77: '#1f60c4', // blue77\n\n  // New reds palette used by next-gen form elements\n  red88: '#e02f44',\n};\n","import { FALLBACK_COLOR } from '../types/fieldColor';\n\nimport { ThemeColors } from './createColors';\n\n/**\n * @alpha\n */\nexport interface ThemeVisualizationColors {\n  /** Only for internal use by color schemes */\n  palette: string[];\n  /** Lookup the real color given the name */\n  getColorByName: (color: string) => string;\n  /** Colors organized by hue */\n  hues: ThemeVizHue[];\n}\n\n/**\n * @alpha\n */\nexport interface ThemeVizColor {\n  color: string;\n  name: string;\n  aliases?: string[];\n  primary?: boolean;\n}\n\n/**\n * @alpha\n */\nexport interface ThemeVizHue {\n  name: string;\n  shades: ThemeVizColor[];\n}\n\n/**\n * @internal\n */\nexport function createVisualizationColors(colors: ThemeColors): ThemeVisualizationColors {\n  const hues = colors.mode === 'light' ? getLightHues() : getDarkHues();\n\n  const byNameIndex: Record<string, string> = {};\n\n  for (const hue of hues) {\n    for (const shade of hue.shades) {\n      byNameIndex[shade.name] = shade.color;\n      if (shade.aliases) {\n        for (const alias of shade.aliases) {\n          byNameIndex[alias] = shade.color;\n        }\n      }\n    }\n  }\n\n  // special colors\n  byNameIndex['transparent'] = colors.mode === 'light' ? 'rgba(255, 255, 255, 0)' : 'rgba(0,0,0,0)';\n  byNameIndex['panel-bg'] = colors.background.primary;\n  byNameIndex['text'] = colors.text.primary;\n\n  const getColorByName = (colorName: string) => {\n    if (!colorName) {\n      return FALLBACK_COLOR;\n    }\n\n    const realColor = byNameIndex[colorName];\n    if (realColor) {\n      return realColor;\n    }\n\n    if (colorName[0] === '#') {\n      return colorName;\n    }\n\n    if (colorName.indexOf('rgb') > -1) {\n      return colorName;\n    }\n\n    const nativeColor = nativeColorNames[colorName.toLowerCase()];\n    if (nativeColor) {\n      byNameIndex[colorName] = nativeColor;\n      return nativeColor;\n    }\n\n    return colorName;\n  };\n\n  const palette = getClassicPalette();\n\n  return {\n    hues,\n    palette,\n    getColorByName,\n  };\n}\n\nfunction getDarkHues(): ThemeVizHue[] {\n  return [\n    {\n      name: 'red',\n      shades: [\n        { color: '#FFA6B0', name: 'super-light-red' },\n        { color: '#FF7383', name: 'light-red' },\n        { color: '#F2495C', name: 'red', primary: true },\n        { color: '#E02F44', name: 'semi-dark-red' },\n        { color: '#C4162A', name: 'dark-red' },\n      ],\n    },\n    {\n      name: 'orange',\n      shades: [\n        { color: '#FFCB7D', name: 'super-light-orange', aliases: [] },\n        { color: '#FFB357', name: 'light-orange', aliases: [] },\n        { color: '#FF9830', name: 'orange', aliases: [], primary: true },\n        { color: '#FF780A', name: 'semi-dark-orange', aliases: [] },\n        { color: '#FA6400', name: 'dark-orange', aliases: [] },\n      ],\n    },\n    {\n      name: 'yellow',\n      shades: [\n        { color: '#FFF899', name: 'super-light-yellow', aliases: [] },\n        { color: '#FFEE52', name: 'light-yellow', aliases: [] },\n        { color: '#FADE2A', name: 'yellow', aliases: [], primary: true },\n        { color: '#F2CC0C', name: 'semi-dark-yellow', aliases: [] },\n        { color: '#E0B400', name: 'dark-yellow', aliases: [] },\n      ],\n    },\n    {\n      name: 'green',\n      shades: [\n        { color: '#C8F2C2', name: 'super-light-green', aliases: [] },\n        { color: '#96D98D', name: 'light-green', aliases: [] },\n        { color: '#73BF69', name: 'green', aliases: [], primary: true },\n        { color: '#56A64B', name: 'semi-dark-green', aliases: [] },\n        { color: '#37872D', name: 'dark-green', aliases: [] },\n      ],\n    },\n    {\n      name: 'blue',\n      shades: [\n        { color: '#C0D8FF', name: 'super-light-blue', aliases: [] },\n        { color: '#8AB8FF', name: 'light-blue', aliases: [] },\n        { color: '#5794F2', name: 'blue', aliases: [], primary: true },\n        { color: '#3274D9', name: 'semi-dark-blue', aliases: [] },\n        { color: '#1F60C4', name: 'dark-blue', aliases: [] },\n      ],\n    },\n    {\n      name: 'purple',\n      shades: [\n        { color: '#DEB6F2', name: 'super-light-purple', aliases: [] },\n        { color: '#CA95E5', name: 'light-purple', aliases: [] },\n        { color: '#B877D9', name: 'purple', aliases: [], primary: true },\n        { color: '#A352CC', name: 'semi-dark-purple', aliases: [] },\n        { color: '#8F3BB8', name: 'dark-purple', aliases: [] },\n      ],\n    },\n  ];\n}\n\nfunction getLightHues(): ThemeVizHue[] {\n  return [\n    {\n      name: 'red',\n      shades: [\n        { color: '#FF7383', name: 'super-light-red' },\n        { color: '#F2495C', name: 'light-red' },\n        { color: '#E02F44', name: 'red', primary: true },\n        { color: '#C4162A', name: 'semi-dark-red' },\n        { color: '#AD0317', name: 'dark-red' },\n      ],\n    },\n    {\n      name: 'orange',\n      shades: [\n        { color: '#FFB357', name: 'super-light-orange', aliases: [] },\n        { color: '#FF9830', name: 'light-orange', aliases: [] },\n        { color: '#FF780A', name: 'orange', aliases: [], primary: true },\n        { color: '#FA6400', name: 'semi-dark-orange', aliases: [] },\n        { color: '#E55400', name: 'dark-orange', aliases: [] },\n      ],\n    },\n    {\n      name: 'yellow',\n      shades: [\n        { color: '#FFEE52', name: 'super-light-yellow', aliases: [] },\n        { color: '#FADE2A', name: 'light-yellow', aliases: [] },\n        { color: '#F2CC0C', name: 'yellow', aliases: [], primary: true },\n        { color: '#E0B400', name: 'semi-dark-yellow', aliases: [] },\n        { color: '#CC9D00', name: 'dark-yellow', aliases: [] },\n      ],\n    },\n    {\n      name: 'green',\n      shades: [\n        { color: '#96D98D', name: 'super-light-green', aliases: [] },\n        { color: '#73BF69', name: 'light-green', aliases: [] },\n        { color: '#56A64B', name: 'green', aliases: [], primary: true },\n        { color: '#37872D', name: 'semi-dark-green', aliases: [] },\n        { color: '#19730E', name: 'dark-green', aliases: [] },\n      ],\n    },\n    {\n      name: 'blue',\n      shades: [\n        { color: '#8AB8FF', name: 'super-light-blue', aliases: [] },\n        { color: '#5794F2', name: 'light-blue', aliases: [] },\n        { color: '#3274D9', name: 'blue', aliases: [], primary: true },\n        { color: '#1F60C4', name: 'semi-dark-blue', aliases: [] },\n        { color: '#1250B0', name: 'dark-blue', aliases: [] },\n      ],\n    },\n    {\n      name: 'purple',\n      shades: [\n        { color: '#CA95E5', name: 'super-light-purple', aliases: [] },\n        { color: '#B877D9', name: 'light-purple', aliases: [] },\n        { color: '#A352CC', name: 'purple', aliases: [], primary: true },\n        { color: '#8F3BB8', name: 'semi-dark-purple', aliases: [] },\n        { color: '#7C2EA3', name: 'dark-purple', aliases: [] },\n      ],\n    },\n  ];\n}\n\nfunction getClassicPalette() {\n  // Todo replace these with named colors (as many as possible)\n\n  return [\n    'green', // '#7EB26D', // 0: pale green\n    'semi-dark-yellow', // '#EAB839', // 1: mustard\n    'light-blue', // #6ED0E0', // 2: light blue\n    'semi-dark-orange', // '#EF843C', // 3: orange\n    'red', // '#E24D42', // 4: red\n    'blue', // #1F78C1', // 5: ocean\n    'purple', // '#BA43A9', // 6: purple\n    '#705DA0', // 7: violet\n    'dark-green', // '#508642', // 8: dark green\n    'yellow', //'#CCA300', // 9: dark sand\n    '#447EBC',\n    '#C15C17',\n    '#890F02',\n    '#0A437C',\n    '#6D1F62',\n    '#584477',\n    '#B7DBAB',\n    '#F4D598',\n    '#70DBED',\n    '#F9BA8F',\n    '#F29191',\n    '#82B5D8',\n    '#E5A8E2',\n    '#AEA2E0',\n    '#629E51',\n    '#E5AC0E',\n    '#64B0C8',\n    '#E0752D',\n    '#BF1B00',\n    '#0A50A1',\n    '#962D82',\n    '#614D93',\n    '#9AC48A',\n    '#F2C96D',\n    '#65C5DB',\n    '#F9934E',\n    '#EA6460',\n    '#5195CE',\n    '#D683CE',\n    '#806EB7',\n    '#3F6833',\n    '#967302',\n    '#2F575E',\n    '#99440A',\n    '#58140C',\n    '#052B51',\n    '#511749',\n    '#3F2B5B',\n    '#E0F9D7',\n    '#FCEACA',\n    '#CFFAFF',\n    '#F9E2D2',\n    '#FCE2DE',\n    '#BADFF4',\n    '#F9D9F9',\n    '#DEDAF7',\n  ];\n}\n\n// Old hues\n// function getDarkHues(): ThemeVizHue[] {\n//     return [\n//       {\n//         name: 'red',\n//         shades: [\n//           { name: 'red1', color: '#FFC2D4', aliases: ['super-light-red'] },\n//           { name: 'red2', color: '#FFA8C2', aliases: ['light-red'] },\n//           { name: 'red3', color: '#FF85A9', aliases: ['red'], primary: true },\n//           { name: 'red4', color: '#FF5286', aliases: ['semi-dark-red'] },\n//           { name: 'red5', color: '#E0226E', aliases: ['dark-red'] },\n//         ],\n//       },\n//       {\n//         name: 'orange',\n//         shades: [\n//           { name: 'orange1', color: '#FFC0AD', aliases: ['super-light-orange'] },\n//           { name: 'orange2', color: '#FFA98F', aliases: ['light-orange'] },\n//           { name: 'orange3', color: '#FF825C', aliases: ['orange'], primary: true },\n//           { name: 'orange4', color: '#FF5F2E', aliases: ['semi-dark-orange'] },\n//           { name: 'orange5', color: '#E73903', aliases: ['dark-orange'] },\n//         ],\n//       },\n//       {\n//         name: 'yellow',\n//         shades: [\n//           { name: 'yellow1', color: '#FFE68F', aliases: ['super-light-yellow'] },\n//           { name: 'yellow2', color: '#FAD34A', aliases: ['light-yellow'] },\n//           { name: 'yellow3', color: '#ECBB09', aliases: ['yellow'], primary: true },\n//           { name: 'yellow4', color: '#CFA302', aliases: ['semi-dark-yellow'] },\n//           { name: 'yellow5', color: '#AD8800', aliases: ['dark-yellow'] },\n//         ],\n//       },\n//       {\n//         name: 'green',\n//         shades: [\n//           { name: 'green1', color: '#93ECCB', aliases: ['super-light-green'] },\n//           { name: 'green2', color: '#65DCB1', aliases: ['light-green'] },\n//           { name: 'green3', color: '#2DC88F', aliases: ['green'], primary: true },\n//           { name: 'green4', color: '#25A777', aliases: ['semi-dark-green'] },\n//           { name: 'green5', color: '#1B855E', aliases: ['dark-green'] },\n//         ],\n//       },\n//       {\n//         name: 'teal',\n//         shades: [\n//           { name: 'teal1', color: '#73E7F7' },\n//           { name: 'teal2', color: '#2BD6EE' },\n//           { name: 'teal3', color: '#11BDD4', primary: true },\n//           { name: 'teal4', color: '#0EA0B4' },\n//           { name: 'teal5', color: '#077D8D' },\n//         ],\n//       },\n//       {\n//         name: 'blue',\n//         shades: [\n//           { name: 'blue1', color: '#C2D7FF', aliases: ['super-light-blue'] },\n//           { name: 'blue2', color: '#A3C2FF', aliases: ['light-blue'] },\n//           { name: 'blue3', color: '#83ACFC', aliases: ['blue'], primary: true },\n//           { name: 'blue4', color: '#5D8FEF', aliases: ['semi-dark-blue'] },\n//           { name: 'blue5', color: '#3871DC', aliases: ['dark-blue'] },\n//         ],\n//       },\n//       {\n//         name: 'violet',\n//         shades: [\n//           { name: 'violet1', color: '#DACCFF' },\n//           { name: 'violet2', color: '#C7B2FF' },\n//           { name: 'violet3', color: '#B094FF', primary: true },\n//           { name: 'violet4', color: '#9271EF' },\n//           { name: 'violet5', color: '#7E63CA' },\n//         ],\n//       },\n//       {\n//         name: 'purple',\n//         shades: [\n//           { name: 'purple1', color: '#FFBDFF', aliases: ['super-light-purple'] },\n//           { name: 'purple2', color: '#F5A3F5', aliases: ['light-purple'] },\n//           { name: 'purple3', color: '#E48BE4', aliases: ['purple'], primary: true },\n//           { name: 'purple4', color: '#CA68CA', aliases: ['semi-dark-purple'] },\n//           { name: 'purple5', color: '#B545B5', aliases: ['dark-purple'] },\n//         ],\n//       },\n//     ];\n//   }\n\nconst nativeColorNames: Record<string, string> = {\n  aliceblue: '#f0f8ff',\n  antiquewhite: '#faebd7',\n  aqua: '#00ffff',\n  aquamarine: '#7fffd4',\n  azure: '#f0ffff',\n  beige: '#f5f5dc',\n  bisque: '#ffe4c4',\n  black: '#000000',\n  blanchedalmond: '#ffebcd',\n  blue: '#0000ff',\n  blueviolet: '#8a2be2',\n  brown: '#a52a2a',\n  burlywood: '#deb887',\n  cadetblue: '#5f9ea0',\n  chartreuse: '#7fff00',\n  chocolate: '#d2691e',\n  coral: '#ff7f50',\n  cornflowerblue: '#6495ed',\n  cornsilk: '#fff8dc',\n  crimson: '#dc143c',\n  cyan: '#00ffff',\n  darkblue: '#00008b',\n  darkcyan: '#008b8b',\n  darkgoldenrod: '#b8860b',\n  darkgray: '#a9a9a9',\n  darkgreen: '#006400',\n  darkkhaki: '#bdb76b',\n  darkmagenta: '#8b008b',\n  darkolivegreen: '#556b2f',\n  darkorange: '#ff8c00',\n  darkorchid: '#9932cc',\n  darkred: '#8b0000',\n  darksalmon: '#e9967a',\n  darkseagreen: '#8fbc8f',\n  darkslateblue: '#483d8b',\n  darkslategray: '#2f4f4f',\n  darkturquoise: '#00ced1',\n  darkviolet: '#9400d3',\n  deeppink: '#ff1493',\n  deepskyblue: '#00bfff',\n  dimgray: '#696969',\n  dodgerblue: '#1e90ff',\n  firebrick: '#b22222',\n  floralwhite: '#fffaf0',\n  forestgreen: '#228b22',\n  fuchsia: '#ff00ff',\n  gainsboro: '#dcdcdc',\n  ghostwhite: '#f8f8ff',\n  gold: '#ffd700',\n  goldenrod: '#daa520',\n  gray: '#808080',\n  green: '#008000',\n  greenyellow: '#adff2f',\n  honeydew: '#f0fff0',\n  hotpink: '#ff69b4',\n  'indianred ': '#cd5c5c',\n  indigo: '#4b0082',\n  ivory: '#fffff0',\n  khaki: '#f0e68c',\n  lavender: '#e6e6fa',\n  lavenderblush: '#fff0f5',\n  lawngreen: '#7cfc00',\n  lemonchiffon: '#fffacd',\n  lightblue: '#add8e6',\n  lightcoral: '#f08080',\n  lightcyan: '#e0ffff',\n  lightgoldenrodyellow: '#fafad2',\n  lightgrey: '#d3d3d3',\n  lightgreen: '#90ee90',\n  lightpink: '#ffb6c1',\n  lightsalmon: '#ffa07a',\n  lightseagreen: '#20b2aa',\n  lightskyblue: '#87cefa',\n  lightslategray: '#778899',\n  lightsteelblue: '#b0c4de',\n  lightyellow: '#ffffe0',\n  lime: '#00ff00',\n  limegreen: '#32cd32',\n  linen: '#faf0e6',\n  magenta: '#ff00ff',\n  maroon: '#800000',\n  mediumaquamarine: '#66cdaa',\n  mediumblue: '#0000cd',\n  mediumorchid: '#ba55d3',\n  mediumpurple: '#9370d8',\n  mediumseagreen: '#3cb371',\n  mediumslateblue: '#7b68ee',\n  mediumspringgreen: '#00fa9a',\n  mediumturquoise: '#48d1cc',\n  mediumvioletred: '#c71585',\n  midnightblue: '#191970',\n  mintcream: '#f5fffa',\n  mistyrose: '#ffe4e1',\n  moccasin: '#ffe4b5',\n  navajowhite: '#ffdead',\n  navy: '#000080',\n  oldlace: '#fdf5e6',\n  olive: '#808000',\n  olivedrab: '#6b8e23',\n  orange: '#ffa500',\n  orangered: '#ff4500',\n  orchid: '#da70d6',\n  palegoldenrod: '#eee8aa',\n  palegreen: '#98fb98',\n  paleturquoise: '#afeeee',\n  palevioletred: '#d87093',\n  papayawhip: '#ffefd5',\n  peachpuff: '#ffdab9',\n  peru: '#cd853f',\n  pink: '#ffc0cb',\n  plum: '#dda0dd',\n  powderblue: '#b0e0e6',\n  purple: '#800080',\n  rebeccapurple: '#663399',\n  red: '#ff0000',\n  rosybrown: '#bc8f8f',\n  royalblue: '#4169e1',\n  saddlebrown: '#8b4513',\n  salmon: '#fa8072',\n  sandybrown: '#f4a460',\n  seagreen: '#2e8b57',\n  seashell: '#fff5ee',\n  sienna: '#a0522d',\n  silver: '#c0c0c0',\n  skyblue: '#87ceeb',\n  slateblue: '#6a5acd',\n  slategray: '#708090',\n  snow: '#fffafa',\n  springgreen: '#00ff7f',\n  steelblue: '#4682b4',\n  tan: '#d2b48c',\n  teal: '#008080',\n  thistle: '#d8bfd8',\n  tomato: '#ff6347',\n  turquoise: '#40e0d0',\n  violet: '#ee82ee',\n  wheat: '#f5deb3',\n  white: '#ffffff',\n  whitesmoke: '#f5f5f5',\n  yellow: '#ffff00',\n  yellowgreen: '#9acd32',\n};\n","// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nexport const zIndex = {\n  activePanel: 999,\n  navbarFixed: 1000,\n  sidemenu: 1020,\n  dropdown: 1030,\n  typeahead: 1030,\n  tooltip: 1040,\n  modalBackdrop: 1050,\n  modal: 1060,\n  portal: 1061,\n};\n\n/** @beta */\nexport type ThemeZIndices = typeof zIndex;\n","import { createBreakpoints } from './breakpoints';\nimport { createColors, ThemeColorsInput } from './createColors';\nimport { createComponents } from './createComponents';\nimport { createShadows } from './createShadows';\nimport { createShape, ThemeShapeInput } from './createShape';\nimport { createSpacing, ThemeSpacingOptions } from './createSpacing';\nimport { createTransitions } from './createTransitions';\nimport { createTypography, ThemeTypographyInput } from './createTypography';\nimport { createV1Theme } from './createV1Theme';\nimport { createVisualizationColors } from './createVisualizationColors';\nimport { GrafanaTheme2 } from './types';\nimport { zIndex } from './zIndex';\n\n/** @internal */\nexport interface NewThemeOptions {\n  name?: string;\n  colors?: ThemeColorsInput;\n  spacing?: ThemeSpacingOptions;\n  shape?: ThemeShapeInput;\n  typography?: ThemeTypographyInput;\n}\n\n/** @internal */\nexport function createTheme(options: NewThemeOptions = {}): GrafanaTheme2 {\n  const {\n    name,\n    colors: colorsInput = {},\n    spacing: spacingInput = {},\n    shape: shapeInput = {},\n    typography: typographyInput = {},\n  } = options;\n\n  const colors = createColors(colorsInput);\n  const breakpoints = createBreakpoints();\n  const spacing = createSpacing(spacingInput);\n  const shape = createShape(shapeInput);\n  const typography = createTypography(colors, typographyInput);\n  const shadows = createShadows(colors);\n  const transitions = createTransitions();\n  const components = createComponents(colors, shadows);\n  const visualization = createVisualizationColors(colors);\n\n  const theme = {\n    name: name ?? (colors.mode === 'dark' ? 'Dark' : 'Light'),\n    isDark: colors.mode === 'dark',\n    isLight: colors.mode === 'light',\n    colors,\n    breakpoints,\n    spacing,\n    shape,\n    components,\n    typography,\n    shadows,\n    transitions,\n    visualization,\n    zIndex: {\n      ...zIndex,\n    },\n    flags: {},\n  };\n\n  return {\n    ...theme,\n    v1: createV1Theme(theme),\n  };\n}\n","/**\n * See also:\n * https://github.com/grafana/grafana-plugin-sdk-go/blob/main/data/frame_type.go\n *\n * @public\n */\nexport enum DataFrameType {\n  TimeSeriesWide = 'timeseries-wide',\n  TimeSeriesLong = 'timeseries-long',\n\n  /** @deprecated in favor of TimeSeriesMulti */\n  TimeSeriesMany = 'timeseries-many',\n\n  TimeSeriesMulti = 'timeseries-multi',\n\n  /** Numeric types: https://grafana.com/developers/dataplane/numeric */\n  NumericWide = 'numeric-wide',\n  NumericMulti = 'numeric-multi',\n  NumericLong = 'numeric-long',\n\n  /** Logs types: https://grafana.com/developers/dataplane/logs */\n  LogLines = 'log-lines',\n\n  /** Directory listing */\n  DirectoryListing = 'directory-listing',\n\n  /**\n   * First field is X, the rest are ordinal values used as rows in the heatmap\n   */\n  HeatmapRows = 'heatmap-rows',\n\n  /**\n   * Explicit fields for:\n   *  xMin, yMin, count, ...\n   *\n   * All values in the grid exist and have regular spacing\n   *\n   * If the y value is actually ordinal, use `meta.custom` to specify the bucket lookup values\n   */\n  HeatmapCells = 'heatmap-cells',\n\n  /**\n   * Explicit fields for:\n   *  xMin, xMax, count\n   */\n  Histogram = 'histogram',\n}\n","import { DataFrame, Field } from '../../../types/dataFrame';\n\nexport function nullToValue(frame: DataFrame) {\n  return {\n    ...frame,\n    fields: frame.fields.map((field) => {\n      const noValue = Number(field.config.noValue);\n\n      if (!Number.isNaN(noValue)) {\n        return nullToValueField(field, noValue);\n      } else {\n        return field;\n      }\n    }),\n  };\n}\n\nexport function nullToValueField(field: Field, noValue: number) {\n  const transformedVals = field.values.slice();\n\n  for (let i = 0; i < transformedVals.length; i++) {\n    if (transformedVals[i] === null) {\n      transformedVals[i] = noValue;\n    }\n  }\n\n  return {\n    ...field,\n    values: transformedVals,\n  };\n}\n","import { map } from 'rxjs/operators';\n\nimport { outerJoinDataFrames } from '../..';\nimport { getDisplayProcessor } from '../../field/displayProcessor';\nimport { createTheme } from '../../themes/createTheme';\nimport { GrafanaTheme2 } from '../../themes/types';\nimport { DataFrame, Field, FieldConfig, FieldType } from '../../types/dataFrame';\nimport { DataFrameType } from '../../types/dataFrameTypes';\nimport { DataTransformContext, SynchronousDataTransformerInfo } from '../../types/transformations';\nimport { roundDecimals } from '../../utils/numbers';\n\nimport { DataTransformerID } from './ids';\nimport { AlignedData, join } from './joinDataFrames';\nimport { nullToValueField } from './nulls/nullToValue';\n\n/**\n * @internal\n */\n/* eslint-disable */\n// prettier-ignore\nexport const histogramBucketSizes = [\n  1e-9,  2e-9,  2.5e-9,  4e-9,  5e-9,\n  1e-8,  2e-8,  2.5e-8,  4e-8,  5e-8,\n  1e-7,  2e-7,  2.5e-7,  4e-7,  5e-7,\n  1e-6,  2e-6,  2.5e-6,  4e-6,  5e-6,\n  1e-5,  2e-5,  2.5e-5,  4e-5,  5e-5,\n  1e-4,  2e-4,  2.5e-4,  4e-4,  5e-4,\n  1e-3,  2e-3,  2.5e-3,  4e-3,  5e-3,\n  1e-2,  2e-2,  2.5e-2,  4e-2,  5e-2,\n  1e-1,  2e-1,  2.5e-1,  4e-1,  5e-1,\n  1,     2,              4,     5,\n  1e+1,  2e+1,  2.5e+1,  4e+1,  5e+1,\n  1e+2,  2e+2,  2.5e+2,  4e+2,  5e+2,\n  1e+3,  2e+3,  2.5e+3,  4e+3,  5e+3,\n  1e+4,  2e+4,  2.5e+4,  4e+4,  5e+4,\n  1e+5,  2e+5,  2.5e+5,  4e+5,  5e+5,\n  1e+6,  2e+6,  2.5e+6,  4e+6,  5e+6,\n  1e+7,  2e+7,  2.5e+7,  4e+7,  5e+7,\n  1e+8,  2e+8,  2.5e+8,  4e+8,  5e+8,\n  1e+9,  2e+9,  2.5e+9,  4e+9,  5e+9,\n];\n/* eslint-enable */\n\nconst DEFAULT_BUCKET_COUNT = 30;\n\nconst histFilter: number[] = [];\nconst histSort = (a: number, b: number) => a - b;\n\nexport interface HistogramTransformerInputs {\n  bucketCount?: number;\n  bucketSize?: string | number;\n  bucketOffset?: string | number;\n  combine?: boolean;\n}\n\n/**\n * @alpha\n */\nexport interface HistogramTransformerOptions {\n  bucketCount?: number;\n  bucketSize?: number; // 0 is auto\n  bucketOffset?: number;\n  // xMin?: number;\n  // xMax?: number;\n  combine?: boolean; // if multiple series are input, join them into one\n}\n\n/**\n * This is a helper class to use the same text in both a panel and transformer UI\n *\n * @internal\n */\nexport const histogramFieldInfo = {\n  bucketCount: {\n    name: 'Bucket count',\n    description: 'approx bucket count',\n  },\n  bucketSize: {\n    name: 'Bucket size',\n    description: undefined,\n  },\n  bucketOffset: {\n    name: 'Bucket offset',\n    description: 'for non-zero-based buckets',\n  },\n  combine: {\n    name: 'Combine series',\n    description: 'combine all series into a single histogram',\n  },\n};\n\n/**\n * @alpha\n */\nexport const histogramTransformer: SynchronousDataTransformerInfo<HistogramTransformerInputs> = {\n  id: DataTransformerID.histogram,\n  name: 'Histogram',\n  description: 'Calculate a histogram from input data.',\n  defaultOptions: {\n    fields: {},\n  },\n\n  operator: (options, ctx) => (source) =>\n    source.pipe(map((data) => histogramTransformer.transformer(options, ctx)(data))),\n\n  transformer: (options: HistogramTransformerInputs, ctx: DataTransformContext) => (data: DataFrame[]) => {\n    if (!Array.isArray(data) || data.length === 0) {\n      return data;\n    }\n\n    let bucketSize,\n      bucketOffset: number | undefined = undefined;\n\n    if (options.bucketSize) {\n      if (typeof options.bucketSize === 'string') {\n        bucketSize = parseFloat(options.bucketSize);\n      } else {\n        bucketSize = options.bucketSize;\n      }\n\n      if (isNaN(bucketSize)) {\n        bucketSize = undefined;\n      }\n    }\n\n    if (options.bucketOffset) {\n      if (typeof options.bucketOffset === 'string') {\n        bucketOffset = parseFloat(options.bucketOffset);\n      } else {\n        bucketOffset = options.bucketOffset;\n      }\n\n      if (isNaN(bucketOffset)) {\n        bucketOffset = undefined;\n      }\n    }\n\n    const interpolatedOptions: HistogramTransformerOptions = {\n      bucketSize: bucketSize,\n      bucketOffset: bucketOffset,\n      combine: options.combine,\n    };\n\n    const hist = buildHistogram(data, interpolatedOptions);\n    if (hist == null) {\n      return [];\n    }\n    return [histogramFieldsToFrame(hist)];\n  },\n};\n\n/**\n * @internal\n */\nexport const histogramFrameBucketMinFieldName = 'xMin';\n\n/**\n * @internal\n */\nexport function isHistogramFrameBucketMinFieldName(v: string) {\n  return v === histogramFrameBucketMinFieldName || v === 'BucketMin'; // REMOVE 'BuckentMin/Max'\n}\n\n/**\n * @internal\n */\nexport const histogramFrameBucketMaxFieldName = 'xMax';\n\n/**\n * @internal\n */\nexport function isHistogramFrameBucketMaxFieldName(v: string) {\n  return v === histogramFrameBucketMaxFieldName || v === 'BucketMax'; // REMOVE 'BuckentMin/Max'\n}\n\n/**\n * @alpha\n */\nexport interface HistogramFields {\n  xMin: Field;\n  xMax: Field;\n  counts: Field[]; // frequency\n}\n\n/**\n * Given a frame, find the explicit histogram fields\n *\n * @alpha\n */\nexport function getHistogramFields(frame: DataFrame): HistogramFields | undefined {\n  // we ignore xMax (time field) and sum all counts together for each found bucket\n  if (frame.meta?.type === DataFrameType.HeatmapCells) {\n    // we assume uniform bucket size for now\n    // we assume xMax, yMin, yMax fields\n    let yMinField = frame.fields.find((f) => f.name === 'yMin')!;\n    let yMaxField = frame.fields.find((f) => f.name === 'yMax')!;\n    let countField = frame.fields.find((f) => f.name === 'count')!;\n\n    let uniqueMaxs = [...new Set(yMaxField.values)].sort((a, b) => a - b);\n    let uniqueMins = [...new Set(yMinField.values)].sort((a, b) => a - b);\n    let countsByMax = new Map<number, number>();\n    uniqueMaxs.forEach((max) => countsByMax.set(max, 0));\n\n    for (let i = 0; i < yMaxField.values.length; i++) {\n      let max = yMaxField.values[i];\n      countsByMax.set(max, countsByMax.get(max) + countField.values[i]);\n    }\n\n    let fields = {\n      xMin: {\n        ...yMinField,\n        name: 'xMin',\n        values: uniqueMins,\n      },\n      xMax: {\n        ...yMaxField,\n        name: 'xMax',\n        values: uniqueMaxs,\n      },\n      counts: [\n        {\n          ...countField,\n          values: [...countsByMax.values()],\n        },\n      ],\n    };\n\n    return fields;\n  } else if (frame.meta?.type === DataFrameType.HeatmapRows) {\n    // assumes le\n\n    // tick label strings (will be ordinal-ized)\n    let minVals: string[] = [];\n    let maxVals: string[] = [];\n\n    // sums of all timstamps per bucket\n    let countVals: number[] = [];\n\n    let minVal = '0';\n    frame.fields.forEach((f) => {\n      if (f.type === FieldType.number) {\n        let countsSum = f.values.reduce((acc, v) => acc + v, 0);\n        countVals.push(countsSum);\n        minVals.push(minVal);\n        maxVals.push((minVal = f.name));\n      }\n    });\n\n    // fake extra value for +Inf (for x scale ranging since bars are right-aligned)\n    countVals.push(0);\n    minVals.push(minVal);\n    maxVals.push(minVal);\n\n    let fields = {\n      xMin: {\n        ...frame.fields[1],\n        name: 'xMin',\n        type: FieldType.string,\n        values: minVals,\n      },\n      xMax: {\n        ...frame.fields[1],\n        name: 'xMax',\n        type: FieldType.string,\n        values: maxVals,\n      },\n      counts: [\n        {\n          ...frame.fields[1],\n          name: 'count',\n          type: FieldType.number,\n          values: countVals,\n        },\n      ],\n    };\n\n    return fields;\n  }\n\n  let xMin: Field | undefined = undefined;\n  let xMax: Field | undefined = undefined;\n  const counts: Field[] = [];\n  for (const field of frame.fields) {\n    if (isHistogramFrameBucketMinFieldName(field.name)) {\n      xMin = field;\n    } else if (isHistogramFrameBucketMaxFieldName(field.name)) {\n      xMax = field;\n    } else if (field.type === FieldType.number) {\n      counts.push(field);\n    }\n  }\n\n  // guess bucket size from single explicit bucket field\n  if (!xMax && xMin && xMin.values.length > 1) {\n    let vals = xMin.values;\n    let bucketSize = roundDecimals(vals[1] - vals[0], 6);\n\n    xMax = {\n      ...xMin,\n      name: histogramFrameBucketMaxFieldName,\n      values: vals.map((v) => v + bucketSize),\n    };\n  }\n\n  if (!xMin && xMax && xMax?.values.length > 1) {\n    let vals = xMax.values;\n    let bucketSize = roundDecimals(vals[1] - vals[0], 6);\n\n    xMin = {\n      ...xMax,\n      name: histogramFrameBucketMinFieldName,\n      values: vals.map((v) => v - bucketSize),\n    };\n  }\n\n  if (xMin && xMax && counts.length) {\n    return {\n      xMin,\n      xMax,\n      counts,\n    };\n  }\n  return undefined;\n}\n\n/**\n * @alpha\n */\nexport function buildHistogram(\n  frames: DataFrame[],\n  options?: HistogramTransformerOptions,\n  theme?: GrafanaTheme2\n): HistogramFields | null {\n  let bucketSize = options?.bucketSize;\n  let bucketCount = options?.bucketCount ?? DEFAULT_BUCKET_COUNT;\n  let bucketOffset = options?.bucketOffset ?? 0;\n\n  // replace or filter nulls from numeric fields\n  frames = frames.map((frame) => {\n    return {\n      ...frame,\n      fields: frame.fields.map((field) => {\n        if (field.type === FieldType.number) {\n          const noValue = Number(field.config.noValue);\n\n          if (!Number.isNaN(noValue)) {\n            field = nullToValueField(field, noValue);\n          } else {\n            field = { ...field, values: field.values.filter((v) => v != null) };\n          }\n        }\n\n        return field;\n      }),\n    };\n  });\n\n  // if bucket size is auto, try to calc from all numeric fields\n  if (!bucketSize || bucketSize < 0) {\n    let allValues: number[] = [];\n\n    // TODO: include field configs!\n    for (const frame of frames) {\n      for (const field of frame.fields) {\n        if (field.type === FieldType.number) {\n          allValues = allValues.concat(field.values);\n        }\n      }\n    }\n\n    allValues.sort((a, b) => a - b);\n\n    let smallestDelta = Infinity;\n\n    // TODO: case of 1 value needs work\n    if (allValues.length === 1) {\n      smallestDelta = 1;\n    } else {\n      for (let i = 1; i < allValues.length; i++) {\n        let delta = allValues[i] - allValues[i - 1];\n\n        if (delta !== 0) {\n          smallestDelta = Math.min(smallestDelta, delta);\n        }\n      }\n    }\n\n    let min = allValues[0];\n    let max = allValues[allValues.length - 1];\n\n    let range = max - min;\n\n    const targetSize = range / bucketCount;\n\n    // choose bucket\n    for (let i = 0; i < histogramBucketSizes.length; i++) {\n      let _bucketSize = histogramBucketSizes[i];\n\n      if (targetSize < _bucketSize && _bucketSize >= smallestDelta) {\n        bucketSize = _bucketSize;\n        break;\n      }\n    }\n  }\n\n  const getBucket = (v: number) => roundDecimals(incrRoundDn(v - bucketOffset, bucketSize!) + bucketOffset, 9);\n\n  // guess number of decimals\n  let bucketDecimals = (('' + bucketSize).match(/\\.\\d+$/) ?? ['.'])[0].length - 1;\n\n  let histograms: AlignedData[] = [];\n  let counts: Field[] = [];\n  let config: FieldConfig | undefined = undefined;\n\n  for (const frame of frames) {\n    for (const field of frame.fields) {\n      if (field.type === FieldType.number) {\n        let fieldHist = histogram(field.values, getBucket, histFilter, histSort);\n        histograms.push(fieldHist);\n\n        const count = {\n          ...field,\n          config: {\n            ...field.config,\n            unit: field.config.unit === 'short' ? 'short' : undefined,\n          },\n        };\n\n        count.display = getDisplayProcessor({\n          field: count,\n          theme: theme ?? createTheme(),\n        });\n        counts.push(count);\n        if (!config && field.config.unit) {\n          config = field.config;\n        }\n      }\n    }\n  }\n\n  // Quit early for empty a\n  if (!counts.length) {\n    return null;\n  }\n\n  // align histograms\n  let joinedHists = join(histograms);\n\n  // zero-fill all undefined values (missing buckets -> 0 counts)\n  for (let histIdx = 1; histIdx < joinedHists.length; histIdx++) {\n    let hist = joinedHists[histIdx];\n\n    for (let bucketIdx = 0; bucketIdx < hist.length; bucketIdx++) {\n      if (hist[bucketIdx] == null) {\n        hist[bucketIdx] = 0;\n      }\n    }\n  }\n\n  const xMin: Field = {\n    name: histogramFrameBucketMinFieldName,\n    values: joinedHists[0],\n    type: FieldType.number,\n    state: undefined,\n    config:\n      bucketDecimals === 0\n        ? (config ?? {})\n        : {\n            ...config,\n            decimals: bucketDecimals,\n          },\n  };\n  const xMax = {\n    ...xMin,\n    name: histogramFrameBucketMaxFieldName,\n    values: joinedHists[0].map((v) => v + bucketSize!),\n  };\n\n  if (options?.combine) {\n    const vals = new Array(joinedHists[0].length).fill(0);\n    for (let i = 1; i < joinedHists.length; i++) {\n      for (let j = 0; j < vals.length; j++) {\n        vals[j] += joinedHists[i][j];\n      }\n    }\n    counts = [\n      {\n        ...counts[0],\n        name: 'count',\n        values: vals,\n        type: FieldType.number,\n        state: {\n          ...counts[0].state,\n          displayName: 'Count',\n          multipleFrames: false,\n          origin: { frameIndex: 0, fieldIndex: 2 },\n        },\n      },\n    ];\n  } else {\n    counts.forEach((field, i) => {\n      field.values = joinedHists[i + 1];\n    });\n  }\n\n  return {\n    xMin,\n    xMax,\n    counts,\n  };\n}\n\n/**\n * @internal\n */\nexport function incrRound(num: number, incr: number) {\n  return Math.round(num / incr) * incr;\n}\n\n/**\n * @internal\n */\nexport function incrRoundUp(num: number, incr: number) {\n  return Math.ceil(num / incr) * incr;\n}\n\n/**\n * @internal\n */\nexport function incrRoundDn(num: number, incr: number) {\n  return Math.floor(num / incr) * incr;\n}\n\nfunction histogram(\n  vals: number[],\n  getBucket: (v: number) => number,\n  filterOut?: number[],\n  sort?: ((a: number, b: number) => number) | null\n): AlignedData {\n  let hist = new Map();\n\n  for (let i = 0; i < vals.length; i++) {\n    let v = vals[i];\n\n    if (v != null) {\n      v = getBucket(v);\n    }\n\n    let entry = hist.get(v);\n\n    if (entry) {\n      entry.count++;\n    } else {\n      hist.set(v, { value: v, count: 1 });\n    }\n  }\n\n  filterOut && filterOut.forEach((v) => hist.delete(v));\n\n  let bins = [...hist.values()];\n\n  sort && bins.sort((a, b) => sort(a.value, b.value));\n\n  let values = Array(bins.length);\n  let counts = Array(bins.length);\n\n  for (let i = 0; i < bins.length; i++) {\n    values[i] = bins[i].value;\n    counts[i] = bins[i].count;\n  }\n\n  return [values, counts];\n}\n\n/**\n * @internal\n */\nexport function histogramFieldsToFrame(info: HistogramFields, theme?: GrafanaTheme2): DataFrame {\n  if (!info.xMin.display) {\n    const display = getDisplayProcessor({\n      field: info.xMin,\n      theme: theme ?? createTheme(),\n    });\n    info.xMin.display = display;\n    info.xMax.display = display;\n  }\n\n  return {\n    length: info.xMin.values.length,\n    meta: {\n      type: DataFrameType.Histogram,\n    },\n    fields: [info.xMin, info.xMax, ...info.counts],\n    refId: `${DataTransformerID.histogram}`,\n  };\n}\n\n/**\n *\n * Join multiple histograms into a histogram with multiple counts.\n * Useful eg if you want to overlay them for comparison.\n *\n * This is needed because histogram results from database\n * will have buckets omitted for 0 counts, but when joining multiple histograms\n * we need to fill in the 0 values for missing buckets.\n *\n * Returns field configs of the first provided histogram.\n * @alpha\n */\n\nexport function joinHistograms(histograms: HistogramFields[]): HistogramFields {\n  if (histograms.length === 1) {\n    return histograms[0];\n  }\n\n  let joined = outerJoinDataFrames({\n    frames: histograms.map((h) => ({\n      length: h.xMax.values.length,\n      fields: [h.xMax, h.xMin, ...h.counts],\n    })),\n    joinBy: (field) => field.name === 'xMax',\n  })!;\n\n  let xMaxField: Field | null = null;\n  let xMinField: Field | null = null;\n  let countFields: Field[] = [];\n\n  // merge all xMin fields into first xMin field\n  // and default all count fields to 0\n  joined.fields.forEach((f) => {\n    if (f.name === 'xMax') {\n      xMaxField = f;\n    } else if (f.name === 'xMin') {\n      if (xMinField == null) {\n        xMinField = f;\n      } else {\n        for (let i = 0; i < f.values.length; i++) {\n          xMinField.values[i] ??= f.values[i];\n        }\n      }\n    } else {\n      countFields.push({\n        ...f,\n        values: f.values.map((v) => v ?? 0),\n      });\n    }\n  });\n\n  const result: HistogramFields = {\n    xMin: xMinField!,\n    xMax: xMaxField!,\n    counts: countFields,\n  };\n\n  return result;\n}\n","import { map } from 'rxjs/operators';\n\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { DataFrame, Field, FieldType } from '../../types/dataFrame';\nimport { SynchronousDataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\nexport enum LabelsToFieldsMode {\n  Columns = 'columns', // default mode\n  Rows = 'rows',\n}\n\nexport interface LabelsToFieldsOptions {\n  mode?: LabelsToFieldsMode;\n\n  /** When empty, this will keep all labels, otherwise it will keep only labels matching the value */\n  keepLabels?: string[];\n\n  /**\n   * When in column mode and if set this will use this label's value as the value field name.\n   */\n  valueLabel?: string;\n}\n\nexport const labelsToFieldsTransformer: SynchronousDataTransformerInfo<LabelsToFieldsOptions> = {\n  id: DataTransformerID.labelsToFields,\n  name: 'Labels to fields',\n  description: 'Extract time series labels to fields (columns or rows)',\n  defaultOptions: {},\n\n  operator: (options, ctx) => (source) =>\n    source.pipe(map((data) => labelsToFieldsTransformer.transformer(options, ctx)(data))),\n\n  transformer: (options: LabelsToFieldsOptions) => (data: DataFrame[]) => {\n    // Show each label as a field row\n    if (options.mode === LabelsToFieldsMode.Rows) {\n      return convertLabelsToRows(data, options.keepLabels);\n    }\n\n    const result: DataFrame[] = [];\n    const keepLabels = options.keepLabels?.length ? new Set(options.keepLabels) : undefined;\n\n    for (const frame of data) {\n      const newFields: Field[] = [];\n      const uniqueLabels: Record<string, Set<string>> = {};\n      for (const field of frame.fields) {\n        if (!field.labels) {\n          newFields.push(field);\n          continue;\n        }\n\n        const sansLabels = {\n          ...field,\n          config: {\n            ...field.config,\n            // we need to clear these for this transform as these can contain label names that we no longer want\n            displayName: undefined,\n            displayNameFromDS: undefined,\n          },\n          labels: undefined,\n        };\n        newFields.push(sansLabels);\n\n        for (const labelName of Object.keys(field.labels)) {\n          if (keepLabels && !keepLabels.has(labelName)) {\n            continue;\n          }\n\n          // if we should use this label as the value field name store it and skip adding this as a separate field\n          if (options.valueLabel === labelName) {\n            sansLabels.name = field.labels[labelName];\n            continue;\n          }\n\n          const uniqueValues = uniqueLabels[labelName] ?? (uniqueLabels[labelName] = new Set()); // (Safari 13.1 lacks ??= support)\n          uniqueValues.add(field.labels[labelName]);\n        }\n      }\n\n      for (const name in uniqueLabels) {\n        for (const value of uniqueLabels[name]) {\n          const values = new Array(frame.length).fill(value);\n          newFields.push({\n            name: name,\n            type: FieldType.string,\n            values: values,\n            config: {},\n          });\n        }\n      }\n\n      result.push({\n        ...frame,\n        fields: newFields,\n        length: frame.length,\n      });\n    }\n\n    return result;\n  },\n};\n\nfunction convertLabelsToRows(data: DataFrame[], keepLabels?: string[]): DataFrame[] {\n  const result: DataFrame[] = [];\n  for (const frame of data) {\n    for (const field of frame.fields) {\n      if (field.labels) {\n        const keys: string[] = [];\n        const vals: string[] = [];\n        if (keepLabels) {\n          for (const key of keepLabels) {\n            keys.push(key);\n            vals.push(field.labels[key]);\n          }\n        } else {\n          for (const [key, val] of Object.entries(field.labels)) {\n            keys.push(key);\n            vals.push(val);\n          }\n        }\n        if (vals.length) {\n          result.push({\n            ...frame,\n            name: getFieldDisplayName(field, frame, data),\n            fields: [\n              { name: 'label', type: FieldType.string, config: {}, values: keys },\n              { name: 'value', type: FieldType.string, config: {}, values: vals },\n            ],\n            length: vals.length,\n          });\n        }\n      }\n    }\n  }\n  return result;\n}\n","import { map } from 'rxjs/operators';\n\nimport { DataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\nexport interface LimitTransformerOptions {\n  limitField?: number | string;\n}\n\nconst DEFAULT_LIMIT_FIELD = 10;\n\nexport const limitTransformer: DataTransformerInfo<LimitTransformerOptions> = {\n  id: DataTransformerID.limit,\n  name: 'Limit',\n  description: 'Limit the number of items to the top N',\n  defaultOptions: {\n    limitField: DEFAULT_LIMIT_FIELD,\n  },\n\n  operator: (options, ctx) => (source) =>\n    source.pipe(\n      map((data) => {\n        let limit = DEFAULT_LIMIT_FIELD;\n        if (options.limitField !== undefined) {\n          if (typeof options.limitField === 'string') {\n            limit = parseInt(options.limitField, 10);\n          } else {\n            limit = options.limitField;\n          }\n        }\n\n        return data.map((frame) => {\n          if (frame.length > limit) {\n            return {\n              ...frame,\n              fields: frame.fields.map((f) => {\n                return {\n                  ...f,\n                  values:\n                    limit >= 0 ? f.values.slice(0, limit) : f.values.slice(f.values.length + limit, f.values.length),\n                };\n              }),\n              length: Math.abs(limit),\n            };\n          }\n\n          return frame;\n        });\n      })\n    ),\n};\n","import { omit } from 'lodash';\nimport { map } from 'rxjs/operators';\n\nimport { MutableDataFrame } from '../../dataframe/MutableDataFrame';\nimport { DataFrame, Field } from '../../types/dataFrame';\nimport { DataTransformerInfo, TransformationApplicabilityLevels } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\ninterface ValuePointer {\n  key: string;\n  index: number;\n}\n\nexport interface MergeTransformerOptions {}\n\nexport const mergeTransformer: DataTransformerInfo<MergeTransformerOptions> = {\n  id: DataTransformerID.merge,\n  name: 'Merge series/tables',\n  description: 'Merges multiple series/tables into a single serie/table',\n  defaultOptions: {},\n  isApplicable: (data: DataFrame[]) => {\n    return data.length > 1\n      ? TransformationApplicabilityLevels.Applicable\n      : TransformationApplicabilityLevels.NotApplicable;\n  },\n  isApplicableDescription: (data: DataFrame[]) => {\n    return `The merge transformation requires at least 2 data series to work. There is currently ${data.length} data series.`;\n  },\n  operator: (options) => (source) =>\n    source.pipe(\n      map((dataFrames) => {\n        if (!Array.isArray(dataFrames) || dataFrames.length <= 1) {\n          return dataFrames;\n        }\n\n        const data = dataFrames.filter((frame) => frame.fields.length > 0);\n\n        if (data.length === 0) {\n          return [dataFrames[0]];\n        }\n\n        const fieldNames = new Set<string>();\n        const fieldIndexByName: Record<string, Record<number, number>> = {};\n        const fieldNamesForKey: string[] = [];\n        const dataFrame = new MutableDataFrame({\n          refId: `${DataTransformerID.merge}-${data.map((frame) => frame.refId).join('-')}`,\n          fields: [],\n        });\n\n        for (let frameIndex = 0; frameIndex < data.length; frameIndex++) {\n          const frame = data[frameIndex];\n\n          for (let fieldIndex = 0; fieldIndex < frame.fields.length; fieldIndex++) {\n            const field = frame.fields[fieldIndex];\n\n            if (!fieldNames.has(field.name)) {\n              dataFrame.addField(copyFieldStructure(field));\n              fieldNames.add(field.name);\n            }\n\n            fieldIndexByName[field.name] = fieldIndexByName[field.name] || {};\n            fieldIndexByName[field.name][frameIndex] = fieldIndex;\n\n            if (data.length - 1 !== frameIndex) {\n              continue;\n            }\n\n            if (fieldExistsInAllFrames(fieldIndexByName, field, data)) {\n              fieldNamesForKey.push(field.name);\n            }\n          }\n        }\n\n        if (fieldNamesForKey.length === 0) {\n          return dataFrames;\n        }\n\n        const valuesByKey: Record<string, Array<Record<string, unknown>>> = {};\n        const valuesInOrder: ValuePointer[] = [];\n        const keyFactory = createKeyFactory(data, fieldIndexByName, fieldNamesForKey);\n        const valueMapper = createValueMapper(data, fieldNames, fieldIndexByName);\n\n        for (let frameIndex = 0; frameIndex < data.length; frameIndex++) {\n          const frame = data[frameIndex];\n\n          for (let valueIndex = 0; valueIndex < frame.length; valueIndex++) {\n            const key = keyFactory(frameIndex, valueIndex);\n            const value = valueMapper(frameIndex, valueIndex);\n\n            if (!Array.isArray(valuesByKey[key])) {\n              valuesByKey[key] = [value];\n              valuesInOrder.push(createPointer(key, valuesByKey));\n              continue;\n            }\n\n            let valueWasMerged = false;\n\n            valuesByKey[key] = valuesByKey[key].map((existing) => {\n              if (!isMergable(existing, value)) {\n                return existing;\n              }\n              valueWasMerged = true;\n              return { ...existing, ...value };\n            });\n\n            if (!valueWasMerged) {\n              valuesByKey[key].push(value);\n              valuesInOrder.push(createPointer(key, valuesByKey));\n            }\n          }\n        }\n\n        for (const pointer of valuesInOrder) {\n          const value = valuesByKey[pointer.key][pointer.index];\n\n          if (value) {\n            dataFrame.add(value);\n          }\n        }\n\n        return [dataFrame];\n      })\n    ),\n};\n\nconst copyFieldStructure = (field: Field): Field => {\n  return {\n    ...omit(field, ['values', 'state', 'labels', 'config']),\n    values: [],\n    config: {\n      ...omit(field.config, 'displayName'),\n    },\n  };\n};\n\nconst createKeyFactory = (\n  data: DataFrame[],\n  fieldPointerByName: Record<string, Record<string, number>>,\n  keyFieldNames: string[]\n) => {\n  const factoryIndex = keyFieldNames.reduce((index: Record<string, number[]>, fieldName) => {\n    return Object.keys(fieldPointerByName[fieldName]).reduce((index: Record<string, number[]>, frameIndex) => {\n      index[frameIndex] = index[frameIndex] || [];\n      index[frameIndex].push(fieldPointerByName[fieldName][frameIndex]);\n      return index;\n    }, index);\n  }, {});\n\n  return (frameIndex: number, valueIndex: number): string => {\n    return factoryIndex[frameIndex].reduce((key: string, fieldIndex: number) => {\n      return key + data[frameIndex].fields[fieldIndex].values[valueIndex];\n    }, '');\n  };\n};\n\nconst createValueMapper = (\n  data: DataFrame[],\n  fieldByName: Set<string>,\n  fieldIndexByName: Record<string, Record<number, number>>\n) => {\n  return (frameIndex: number, valueIndex: number) => {\n    const value: Record<string, unknown> = {};\n    const fieldNames = Array.from(fieldByName);\n\n    for (const fieldName of fieldNames) {\n      const fieldIndexByFrameIndex = fieldIndexByName[fieldName];\n      if (!fieldIndexByFrameIndex) {\n        continue;\n      }\n\n      const fieldIndex = fieldIndexByFrameIndex[frameIndex];\n      if (typeof fieldIndex !== 'number') {\n        continue;\n      }\n\n      const frame = data[frameIndex];\n      if (!frame || !frame.fields) {\n        continue;\n      }\n\n      const field = frame.fields[fieldIndex];\n      if (!field || !field.values) {\n        continue;\n      }\n\n      value[fieldName] = field.values[valueIndex];\n    }\n\n    return value;\n  };\n};\n\nconst isMergable = (existing: Record<string, unknown>, value: Record<string, unknown>): boolean => {\n  let mergable = true;\n\n  for (const prop in value) {\n    if (typeof existing[prop] === 'undefined') {\n      continue;\n    }\n\n    if (existing[prop] === null) {\n      continue;\n    }\n\n    if (existing[prop] !== value[prop]) {\n      mergable = false;\n      break;\n    }\n  }\n\n  return mergable;\n};\n\nconst fieldExistsInAllFrames = (\n  fieldIndexByName: Record<string, Record<number, number>>,\n  field: Field,\n  data: DataFrame[]\n) => {\n  return Object.keys(fieldIndexByName[field.name]).length === data.length;\n};\n\nconst createPointer = (key: string, valuesByKey: Record<string, Array<Record<string, unknown>>>): ValuePointer => {\n  return {\n    key,\n    index: valuesByKey[key].length - 1,\n  };\n};\n","import { clone } from 'lodash';\nimport { map } from 'rxjs/operators';\n\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { DataFrame, Field } from '../../types/dataFrame';\nimport { DataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\nexport interface OrderFieldsTransformerOptions {\n  indexByName: Record<string, number>;\n}\n\nexport const orderFieldsTransformer: DataTransformerInfo<OrderFieldsTransformerOptions> = {\n  id: DataTransformerID.order,\n  name: 'Order fields by name',\n  description: 'Order fields based on configuration given by user',\n  defaultOptions: {\n    indexByName: {},\n  },\n\n  /**\n   * Return a modified copy of the series. If the transform is not or should not\n   * be applied, just return the input series\n   */\n  operator: (options) => (source) =>\n    source.pipe(\n      map((data) => {\n        const orderer = createFieldsOrderer(options.indexByName);\n\n        if (!Array.isArray(data) || data.length === 0) {\n          return data;\n        }\n\n        return data.map((frame) => ({\n          ...frame,\n          fields: orderer(frame.fields, data, frame),\n        }));\n      })\n    ),\n};\n\nexport const createOrderFieldsComparer = (indexByName: Record<string, number>) => (a: string, b: string) => {\n  return indexOfField(a, indexByName) - indexOfField(b, indexByName);\n};\n\nconst createFieldsOrderer =\n  (indexByName: Record<string, number>) => (fields: Field[], data: DataFrame[], frame: DataFrame) => {\n    if (!Array.isArray(fields) || fields.length === 0) {\n      return fields;\n    }\n    if (!indexByName || Object.keys(indexByName).length === 0) {\n      return fields;\n    }\n    const comparer = createOrderFieldsComparer(indexByName);\n    return clone(fields).sort((a, b) =>\n      comparer(getFieldDisplayName(a, frame, data), getFieldDisplayName(b, frame, data))\n    );\n  };\n\nconst indexOfField = (fieldName: string, indexByName: Record<string, number>) => {\n  if (Number.isInteger(indexByName[fieldName])) {\n    return indexByName[fieldName];\n  }\n  return Number.MAX_SAFE_INTEGER;\n};\n","import { map } from 'rxjs/operators';\n\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { DataFrame, Field } from '../../types/dataFrame';\nimport { DataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\nexport interface RenameFieldsTransformerOptions {\n  renameByName: Record<string, string>;\n}\n\nexport const renameFieldsTransformer: DataTransformerInfo<RenameFieldsTransformerOptions> = {\n  id: DataTransformerID.rename,\n  name: 'Rename fields by name',\n  description: 'Rename fields based on configuration given by user',\n  defaultOptions: {\n    renameByName: {},\n  },\n\n  /**\n   * Return a modified copy of the series. If the transform is not or should not\n   * be applied, just return the input series\n   */\n  operator: (options) => (source) =>\n    source.pipe(\n      map((data) => {\n        const renamer = createRenamer(options.renameByName);\n\n        if (!Array.isArray(data) || data.length === 0) {\n          return data;\n        }\n\n        return data.map((frame) => ({\n          ...frame,\n          fields: renamer(frame),\n        }));\n      })\n    ),\n};\n\nconst createRenamer =\n  (renameByName: Record<string, string>) =>\n  (frame: DataFrame): Field[] => {\n    if (!renameByName || Object.keys(renameByName).length === 0) {\n      return frame.fields;\n    }\n\n    return frame.fields.map((field) => {\n      const displayName = getFieldDisplayName(field, frame);\n      const renameTo = renameByName[displayName];\n\n      if (typeof renameTo !== 'string' || renameTo.length === 0) {\n        return field;\n      }\n\n      return {\n        ...field,\n        config: {\n          ...field.config,\n          displayName: renameTo,\n        },\n        state: {\n          ...field.state,\n          displayName: renameTo,\n        },\n      };\n    });\n  };\n","import { DataFrame } from '../../types/dataFrame';\nimport { DataTransformerInfo, TransformationApplicabilityLevels } from '../../types/transformations';\n\nimport { filterFieldsByNameTransformer } from './filterByName';\nimport { DataTransformerID } from './ids';\nimport { orderFieldsTransformer, OrderFieldsTransformerOptions } from './order';\nimport { renameFieldsTransformer, RenameFieldsTransformerOptions } from './rename';\n\nexport interface OrganizeFieldsTransformerOptions\n  extends OrderFieldsTransformerOptions,\n    RenameFieldsTransformerOptions {\n  excludeByName: Record<string, boolean>;\n  includeByName?: Record<string, boolean>;\n}\n\nexport const organizeFieldsTransformer: DataTransformerInfo<OrganizeFieldsTransformerOptions> = {\n  id: DataTransformerID.organize,\n  name: 'Organize fields by name',\n  description: 'Order, filter and rename fields based on configuration given by user',\n  defaultOptions: {\n    excludeByName: {},\n    indexByName: {},\n    renameByName: {},\n    includeByName: {},\n  },\n  isApplicable: (data: DataFrame[]) => {\n    return data.length > 1\n      ? TransformationApplicabilityLevels.NotPossible\n      : TransformationApplicabilityLevels.Applicable;\n  },\n  /**\n   * Return a modified copy of the series. If the transform is not or should not\n   * be applied, just return the input series\n   */\n  operator: (options, ctx) => (source) =>\n    source.pipe(\n      filterFieldsByNameTransformer.operator(\n        {\n          include: options.includeByName ? { names: mapToExcludeArray(options.includeByName) } : undefined,\n          exclude: { names: mapToExcludeArray(options.excludeByName) },\n        },\n        ctx\n      ),\n      orderFieldsTransformer.operator(options, ctx),\n      renameFieldsTransformer.operator(options, ctx)\n    ),\n};\n\nconst mapToExcludeArray = (excludeByName: Record<string, boolean>): string[] => {\n  if (!excludeByName) {\n    return [];\n  }\n\n  return Object.keys(excludeByName).filter((name) => excludeByName[name]);\n};\n","import { map } from 'rxjs/operators';\n\nimport { guessFieldTypeForField } from '../../dataframe/processDataFrame';\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { KeyValue } from '../../types/data';\nimport { DataFrame, Field, FieldType } from '../../types/dataFrame';\nimport { DataTransformerInfo, FieldMatcher, MatcherConfig } from '../../types/transformations';\nimport { fieldReducers, reduceField, ReducerID } from '../fieldReducer';\nimport { getFieldMatcher } from '../matchers';\nimport { alwaysFieldMatcher, notTimeFieldMatcher } from '../matchers/predicates';\n\nimport { DataTransformerID } from './ids';\n\nexport enum ReduceTransformerMode {\n  SeriesToRows = 'seriesToRows', // default\n  ReduceFields = 'reduceFields', // same structure, add additional row for each type\n}\n\nexport interface ReduceTransformerOptions {\n  reducers: ReducerID[];\n  fields?: MatcherConfig; // Assume all fields\n  mode?: ReduceTransformerMode;\n  includeTimeField?: boolean;\n  labelsToFields?: boolean;\n}\n\nexport const reduceTransformer: DataTransformerInfo<ReduceTransformerOptions> = {\n  id: DataTransformerID.reduce,\n  name: 'Reduce',\n  description: 'Reduce all rows or data points to a single value using a function like max, min, mean or last.',\n  defaultOptions: {\n    reducers: [ReducerID.max],\n  },\n\n  /**\n   * Return a modified copy of the series. If the transform is not or should not\n   * be applied, just return the input series\n   */\n  operator: (options) => (source) =>\n    source.pipe(\n      map((data) => {\n        if (!options?.reducers?.length) {\n          return data; // nothing selected\n        }\n\n        const matcher = options.fields\n          ? getFieldMatcher(options.fields)\n          : options.includeTimeField && options.mode === ReduceTransformerMode.ReduceFields\n            ? alwaysFieldMatcher\n            : notTimeFieldMatcher;\n\n        // Collapse all matching fields into a single row\n        if (options.mode === ReduceTransformerMode.ReduceFields) {\n          return reduceFields(data, matcher, options.reducers);\n        }\n\n        // Add a row for each series\n        const res = reduceSeriesToRows(data, matcher, options.reducers, options.labelsToFields);\n        return res\n          ? [{ ...res, refId: `${DataTransformerID.reduce}-${data.map((frame) => frame.refId).join('-')}` }]\n          : [];\n      })\n    ),\n};\n\n/**\n * @internal only exported for testing\n */\nfunction reduceSeriesToRows(\n  data: DataFrame[],\n  matcher: FieldMatcher,\n  reducerId: ReducerID[],\n  labelsToFields?: boolean\n): DataFrame | undefined {\n  const calculators = fieldReducers.list(reducerId);\n  const reducers = calculators.map((c) => c.id);\n  const processed: DataFrame[] = [];\n  const distinctLabels = labelsToFields ? getDistinctLabelKeys(data) : [];\n\n  for (const series of data) {\n    const source = series.fields.filter((f) => matcher(f, series, data));\n\n    const size = source.length;\n    const fields: Field[] = [];\n    const names: string[] = new Array(size);\n    fields.push({\n      name: 'Field',\n      type: FieldType.string,\n      values: names,\n      config: {},\n    });\n\n    const labels: KeyValue<unknown[]> = {};\n    if (labelsToFields) {\n      for (const key of distinctLabels) {\n        labels[key] = new Array(size);\n        fields.push({\n          name: key,\n          type: FieldType.string,\n          values: labels[key],\n          config: {},\n        });\n      }\n    }\n\n    const calcs: KeyValue<unknown[]> = {};\n    for (const info of calculators) {\n      calcs[info.id] = new Array(size);\n      fields.push({\n        name: info.name,\n        type: FieldType.other, // UNKNOWN until after we call the functions\n        values: calcs[info.id],\n        config: {},\n      });\n    }\n\n    for (let i = 0; i < source.length; i++) {\n      const field = source[i];\n      const results = reduceField({\n        field,\n        reducers,\n      });\n\n      if (labelsToFields) {\n        names[i] = field.name;\n        if (field.labels) {\n          for (const key in field.labels) {\n            labels[key][i] = field.labels[key];\n          }\n        }\n      } else {\n        names[i] = getFieldDisplayName(field, series, data);\n      }\n\n      for (const info of calculators) {\n        const v = results[info.id];\n        if (v === null) {\n          // NaN ensures proper row index, null results in shift\n          calcs[info.id][i] = NaN;\n        } else {\n          calcs[info.id][i] = v;\n        }\n      }\n    }\n\n    // For reduced fields, we don't know the type until we see the value\n    for (const f of fields) {\n      if (f.type === FieldType.other) {\n        const t = guessFieldTypeForField(f);\n        if (t) {\n          f.type = t;\n        }\n      }\n    }\n\n    processed.push({\n      ...series, // Same properties, different fields\n      fields,\n      length: size,\n    });\n  }\n\n  return mergeResults(processed);\n}\n\nfunction getDistinctLabelKeys(frames: DataFrame[]): string[] {\n  const keys = new Set<string>();\n  for (const frame of frames) {\n    for (const field of frame.fields) {\n      if (field.labels) {\n        for (const k of Object.keys(field.labels)) {\n          keys.add(k);\n        }\n      }\n    }\n  }\n  return [...keys];\n}\n\n/**\n * @internal only exported for testing\n */\nfunction mergeResults(data: DataFrame[]): DataFrame | undefined {\n  if (!data?.length) {\n    return undefined;\n  }\n\n  const baseFrame = data[0];\n\n  for (let seriesIndex = 1; seriesIndex < data.length; seriesIndex++) {\n    const series = data[seriesIndex];\n\n    for (let baseIndex = 0; baseIndex < baseFrame.fields.length; baseIndex++) {\n      const baseField = baseFrame.fields[baseIndex];\n      for (let fieldIndex = 0; fieldIndex < series.fields.length; fieldIndex++) {\n        const field = series.fields[fieldIndex];\n        const isFirstField = baseIndex === 0 && fieldIndex === 0;\n        const isSameField = baseField.type === field.type && baseField.name === field.name;\n\n        if (isFirstField || isSameField) {\n          const baseValues = baseField.values;\n          const values = field.values;\n          baseField.values = baseValues.concat(values);\n        }\n      }\n    }\n  }\n\n  baseFrame.name = undefined;\n  baseFrame.length = baseFrame.fields[0].values.length;\n  return baseFrame;\n}\n\n/**\n * @internal -- only exported for testing\n */\nexport function reduceFields(data: DataFrame[], matcher: FieldMatcher, reducerId: ReducerID[]): DataFrame[] {\n  const calculators = fieldReducers.list(reducerId);\n  const reducers = calculators.map((c) => c.id);\n  const processed: DataFrame[] = [];\n  for (const series of data) {\n    const fields: Field[] = [];\n    for (const field of series.fields) {\n      if (matcher(field, series, data)) {\n        const results = reduceField({\n          field,\n          reducers,\n        });\n        for (const reducer of reducers) {\n          const value = results[reducer];\n          const copy = {\n            ...field,\n            type: getFieldType(reducer, field),\n            values: [value],\n          };\n          copy.state = undefined;\n          if (reducers.length > 1) {\n            if (!copy.labels) {\n              copy.labels = {};\n            }\n            copy.labels['reducer'] = fieldReducers.get(reducer).name;\n          }\n          fields.push(copy);\n        }\n      }\n    }\n    if (fields.length) {\n      processed.push({\n        ...series,\n        fields,\n        length: 1, // always one row\n      });\n    }\n  }\n\n  return processed;\n}\n\nfunction getFieldType(reducer: string, field: Field) {\n  switch (reducer) {\n    case ReducerID.allValues:\n    case ReducerID.uniqueValues:\n      return FieldType.other;\n    case ReducerID.first:\n    case ReducerID.firstNotNull:\n    case ReducerID.last:\n    case ReducerID.lastNotNull:\n      return field.type;\n    default:\n      return FieldType.number;\n  }\n}\n","import { map } from 'rxjs/operators';\n\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { stringToJsRegex } from '../../text/string';\nimport { DataFrame } from '../../types/dataFrame';\nimport { DataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\n/**\n * Options for renameByRegexTransformer\n *\n * @public\n */\nexport interface RenameByRegexTransformerOptions {\n  regex: string;\n  renamePattern: string;\n}\n\n/**\n * Replaces the displayName of a field by applying a regular expression\n * to match the name and a pattern for the replacement.\n *\n * @public\n */\nexport const renameByRegexTransformer: DataTransformerInfo<RenameByRegexTransformerOptions> = {\n  id: DataTransformerID.renameByRegex,\n  name: 'Rename fields by regex',\n  description: 'Rename fields based on regular expression by users.',\n  defaultOptions: {\n    regex: '(.*)',\n    renamePattern: '$1',\n  },\n\n  /**\n   * Return a modified copy of the series. If the transform is not or should not\n   * be applied, just return the input series\n   */\n  operator: (options) => (source) =>\n    source.pipe(\n      map((data) => {\n        if (!Array.isArray(data) || data.length === 0) {\n          return data;\n        }\n        return data.map(renameFieldsByRegex(options));\n      })\n    ),\n};\n\nconst renameFieldsByRegex = (options: RenameByRegexTransformerOptions) => (frame: DataFrame) => {\n  const regex = stringToJsRegex(options.regex);\n  const fields = frame.fields.map((field) => {\n    const displayName = getFieldDisplayName(field, frame);\n    if (!regex.test(displayName)) {\n      return field;\n    }\n    const newDisplayName = displayName.replace(regex, options.renamePattern);\n    return {\n      ...field,\n      config: { ...field.config, displayName: newDisplayName },\n      state: { ...field.state, displayName: newDisplayName },\n    };\n  });\n  return { ...frame, fields };\n};\n","import { omit } from 'lodash';\nimport { map } from 'rxjs/operators';\n\nimport { MutableDataFrame } from '../../dataframe/MutableDataFrame';\nimport { sortDataFrame } from '../../dataframe/processDataFrame';\nimport { isTimeSeriesFrames } from '../../dataframe/utils';\nimport { getFrameDisplayName } from '../../field/fieldState';\nimport {\n  Field,\n  FieldType,\n  TIME_SERIES_METRIC_FIELD_NAME,\n  TIME_SERIES_TIME_FIELD_NAME,\n  TIME_SERIES_VALUE_FIELD_NAME,\n} from '../../types/dataFrame';\nimport { DataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\nexport interface SeriesToRowsTransformerOptions {}\n\nexport const seriesToRowsTransformer: DataTransformerInfo<SeriesToRowsTransformerOptions> = {\n  id: DataTransformerID.seriesToRows,\n  name: 'Series to rows',\n  description: 'Combines multiple series into a single serie and appends a column with metric name per value.',\n  defaultOptions: {},\n  operator: (options) => (source) =>\n    source.pipe(\n      map((data) => {\n        if (!Array.isArray(data) || data.length === 0) {\n          return data;\n        }\n\n        data = data.filter((frame) => frame.length > 0);\n        if (!isTimeSeriesFrames(data)) {\n          return data;\n        }\n\n        const timeFieldByIndex: Record<number, number> = {};\n        const targetFields = new Set<string>();\n        const dataFrame = new MutableDataFrame({\n          refId: `${DataTransformerID.seriesToRows}-${data.map((frame) => frame.refId).join('-')}`,\n          fields: [],\n        });\n        const metricField: Field = {\n          name: TIME_SERIES_METRIC_FIELD_NAME,\n          values: [],\n          config: {},\n          type: FieldType.string,\n        };\n\n        for (let frameIndex = 0; frameIndex < data.length; frameIndex++) {\n          const frame = data[frameIndex];\n\n          for (let fieldIndex = 0; fieldIndex < frame.fields.length; fieldIndex++) {\n            const field = frame.fields[fieldIndex];\n\n            if (field.type === FieldType.time) {\n              timeFieldByIndex[frameIndex] = fieldIndex;\n\n              if (!targetFields.has(TIME_SERIES_TIME_FIELD_NAME)) {\n                dataFrame.addField(copyFieldStructure(field, TIME_SERIES_TIME_FIELD_NAME));\n                dataFrame.addField(metricField);\n                targetFields.add(TIME_SERIES_TIME_FIELD_NAME);\n              }\n              continue;\n            }\n\n            if (!targetFields.has(TIME_SERIES_VALUE_FIELD_NAME)) {\n              dataFrame.addField(copyFieldStructure(field, TIME_SERIES_VALUE_FIELD_NAME));\n              targetFields.add(TIME_SERIES_VALUE_FIELD_NAME);\n            }\n          }\n        }\n\n        for (let frameIndex = 0; frameIndex < data.length; frameIndex++) {\n          const frame = data[frameIndex];\n\n          for (let valueIndex = 0; valueIndex < frame.length; valueIndex++) {\n            const timeFieldIndex = timeFieldByIndex[frameIndex];\n            const valueFieldIndex = timeFieldIndex === 0 ? 1 : 0;\n\n            dataFrame.add({\n              [TIME_SERIES_TIME_FIELD_NAME]: frame.fields[timeFieldIndex].values[valueIndex],\n              [TIME_SERIES_METRIC_FIELD_NAME]: getFrameDisplayName(frame),\n              [TIME_SERIES_VALUE_FIELD_NAME]: frame.fields[valueFieldIndex].values[valueIndex],\n            });\n          }\n        }\n\n        return [sortDataFrame(dataFrame, 0, true)];\n      })\n    ),\n};\n\nconst copyFieldStructure = (field: Field, name: string): Field => {\n  return {\n    ...omit(field, ['values', 'state', 'labels', 'config', 'name']),\n    name: name,\n    values: [],\n    config: {\n      ...omit(field.config, ['displayName', 'displayNameFromDS']),\n    },\n  };\n};\n","import { map } from 'rxjs/operators';\n\nimport { sortDataFrame } from '../../dataframe/processDataFrame';\nimport { getFieldDisplayName } from '../../field/fieldState';\nimport { DataFrame } from '../../types/dataFrame';\nimport { DataTransformContext, DataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\nexport interface SortByField {\n  field: string;\n  desc?: boolean;\n  index?: number;\n}\n\nexport interface SortByTransformerOptions {\n  // NOTE: this structure supports an array, however only the first entry is used\n  // future versions may support multi-sort options\n  sort: SortByField[];\n}\n\nexport const sortByTransformer: DataTransformerInfo<SortByTransformerOptions> = {\n  id: DataTransformerID.sortBy,\n  name: 'Sort by',\n  description: 'Sort fields in a frame.',\n  defaultOptions: {\n    fields: {},\n  },\n\n  /**\n   * Return a modified copy of the series. If the transform is not or should not\n   * be applied, just return the input series\n   */\n  operator: (options, ctx) => (source) =>\n    source.pipe(\n      map((data) => {\n        if (!Array.isArray(data) || data.length === 0 || !options?.sort?.length) {\n          return data;\n        }\n        return sortDataFrames(data, options.sort, ctx);\n      })\n    ),\n};\n\nfunction sortDataFrames(data: DataFrame[], sort: SortByField[], ctx: DataTransformContext): DataFrame[] {\n  return data.map((frame) => {\n    const s = attachFieldIndex(frame, sort, ctx);\n    if (s.length && s[0].index != null) {\n      return sortDataFrame(frame, s[0].index, s[0].desc);\n    }\n    return frame;\n  });\n}\n\nfunction attachFieldIndex(frame: DataFrame, sort: SortByField[], ctx: DataTransformContext): SortByField[] {\n  return sort.map((s) => {\n    if (s.index != null) {\n      // null or undefined\n      return s;\n    }\n\n    return {\n      ...s,\n      index: frame.fields.findIndex((f) => s.field === getFieldDisplayName(f, frame)),\n    };\n  });\n}\n","import { map } from 'rxjs/operators';\n\nimport { DataFrame, Field, FieldType } from '../../types/dataFrame';\nimport { DataTransformerInfo } from '../../types/transformations';\n\nimport { DataTransformerID } from './ids';\n\nexport interface TransposeTransformerOptions {\n  firstFieldName?: string;\n  restFieldsName?: string;\n}\n\nexport const transposeTransformer: DataTransformerInfo<TransposeTransformerOptions> = {\n  id: DataTransformerID.transpose,\n  name: 'Transpose',\n  description: 'Transpose the data frame',\n  defaultOptions: {},\n\n  operator: (options) => (source) =>\n    source.pipe(\n      map((data) => {\n        if (data.length === 0) {\n          return data;\n        }\n        return transposeDataFrame(options, data);\n      })\n    ),\n};\n\nfunction transposeDataFrame(options: TransposeTransformerOptions, data: DataFrame[]): DataFrame[] {\n  return data.map((frame) => {\n    const firstField = frame.fields[0];\n    const firstName = !options.firstFieldName ? 'Field' : options.firstFieldName;\n    const restName = !options.restFieldsName ? 'Value' : options.restFieldsName;\n    const useFirstFieldAsHeaders =\n      firstField.type === FieldType.string || firstField.type === FieldType.time || firstField.type === FieldType.enum;\n    const headers = useFirstFieldAsHeaders\n      ? [firstName, ...fieldValuesAsStrings(firstField, firstField.values)]\n      : [firstName, ...firstField.values.map((_, i) => restName)];\n    const rows = useFirstFieldAsHeaders\n      ? frame.fields.map((field) => field.name).slice(1)\n      : frame.fields.map((field) => field.name);\n    const fieldType = determineFieldType(\n      useFirstFieldAsHeaders\n        ? frame.fields.map((field) => field.type).slice(1)\n        : frame.fields.map((field) => field.type)\n    );\n\n    const newFields = headers.map((fieldName, index) => {\n      if (index === 0) {\n        return {\n          name: firstName,\n          type: FieldType.string,\n          config: {},\n          values: rows,\n        };\n      }\n\n      const values = frame.fields.map((field) => {\n        if (fieldType === FieldType.string) {\n          return fieldValuesAsStrings(field, [field.values[index - 1]])[0];\n        }\n        return field.values[index - 1];\n      });\n\n      const labelName = useFirstFieldAsHeaders ? firstField.name : 'row';\n      const labelValue = useFirstFieldAsHeaders ? fieldName : index;\n\n      return {\n        name: useFirstFieldAsHeaders ? restName : fieldName,\n        labels: {\n          [labelName]: labelValue,\n        },\n        type: fieldType,\n        config: {},\n        values: useFirstFieldAsHeaders ? values.slice(1) : values,\n      };\n    });\n    return {\n      ...frame,\n      fields: newFields,\n      length: Math.max(...newFields.map((field) => field.values.length)),\n      refId: `${DataTransformerID.transpose}-${frame.refId}`,\n    };\n  });\n}\n\nfunction determineFieldType(fieldTypes: FieldType[]): FieldType {\n  const uniqueFieldTypes = new Set(fieldTypes);\n  return uniqueFieldTypes.size === 1 ? [...uniqueFieldTypes][0] : FieldType.string;\n}\n\nfunction fieldValuesAsStrings(field: Field, values: unknown[]) {\n  switch (field.type) {\n    case FieldType.time:\n    case FieldType.number:\n    case FieldType.boolean:\n    case FieldType.string:\n      return values.map((v) => `${v}`);\n    case FieldType.enum:\n      // @ts-ignore\n      return values.map((v) => field.config.type!.enum!.text![v]);\n    default:\n      return values.map((v) => JSON.stringify(v));\n  }\n}\n","import { calculateFieldTransformer } from './transformers/calculateField';\nimport { concatenateTransformer } from './transformers/concat';\nimport { convertFieldTypeTransformer } from './transformers/convertFieldType';\nimport { ensureColumnsTransformer } from './transformers/ensureColumns';\nimport { filterFieldsTransformer, filterFramesTransformer } from './transformers/filter';\nimport { filterFieldsByNameTransformer } from './transformers/filterByName';\nimport { filterFramesByRefIdTransformer } from './transformers/filterByRefId';\nimport { filterByValueTransformer } from './transformers/filterByValue';\nimport { formatStringTransformer } from './transformers/formatString';\nimport { formatTimeTransformer } from './transformers/formatTime';\nimport { groupByTransformer } from './transformers/groupBy';\nimport { groupToNestedTable } from './transformers/groupToNestedTable';\nimport { groupingToMatrixTransformer } from './transformers/groupingToMatrix';\nimport { histogramTransformer } from './transformers/histogram';\nimport { joinByFieldTransformer } from './transformers/joinByField';\nimport { labelsToFieldsTransformer } from './transformers/labelsToFields';\nimport { limitTransformer } from './transformers/limit';\nimport { mergeTransformer } from './transformers/merge';\nimport { noopTransformer } from './transformers/noop';\nimport { orderFieldsTransformer } from './transformers/order';\nimport { organizeFieldsTransformer } from './transformers/organize';\nimport { reduceTransformer } from './transformers/reduce';\nimport { renameFieldsTransformer } from './transformers/rename';\nimport { renameByRegexTransformer } from './transformers/renameByRegex';\nimport { seriesToRowsTransformer } from './transformers/seriesToRows';\nimport { sortByTransformer } from './transformers/sortBy';\nimport { transposeTransformer } from './transformers/transpose';\n\nexport const standardTransformers = {\n  noopTransformer,\n  filterFieldsTransformer,\n  filterFieldsByNameTransformer,\n  filterFramesTransformer,\n  filterFramesByRefIdTransformer,\n  filterByValueTransformer,\n  formatStringTransformer,\n  formatTimeTransformer,\n  orderFieldsTransformer,\n  organizeFieldsTransformer,\n  reduceTransformer,\n  concatenateTransformer,\n  calculateFieldTransformer,\n  joinByFieldTransformer,\n  /** @deprecated */\n  seriesToColumnsTransformer: joinByFieldTransformer,\n  seriesToRowsTransformer,\n  renameFieldsTransformer,\n  labelsToFieldsTransformer,\n  ensureColumnsTransformer,\n  groupByTransformer,\n  sortByTransformer,\n  mergeTransformer,\n  renameByRegexTransformer,\n  histogramTransformer,\n  convertFieldTypeTransformer,\n  groupingToMatrixTransformer,\n  limitTransformer,\n  groupToNestedTable,\n  transposeTransformer,\n};\n","import * as React from 'react';\n\nimport { DataFrame } from '../types/dataFrame';\nimport { DataTransformerInfo } from '../types/transformations';\nimport { Registry, RegistryItem } from '../utils/Registry';\n\nexport interface TransformerUIProps<T> {\n  /**\n   * Transformer configuration, persisted on panel's model\n   */\n  options: T;\n  /**\n   * Pre-transform data frames\n   */\n  input: DataFrame[];\n  onChange: (options: T) => void;\n}\n\nexport interface TransformerRegistryItem<TOptions = any> extends RegistryItem {\n  /**\n   * Object describing transformer configuration\n   */\n  transformation: DataTransformerInfo<TOptions>;\n\n  /** Markdown with more detailed description and help */\n  help?: string;\n\n  /**\n   * React component used as UI for the transformer\n   */\n  editor: React.ComponentType<TransformerUIProps<TOptions>>;\n\n  /**\n   * Set of categories associated with the transformer\n   */\n  categories?: Set<TransformerCategory>;\n}\n\nexport enum TransformerCategory {\n  Combine = 'combine',\n  CalculateNewFields = 'calculateNewFields',\n  CreateNewVisualization = 'createNewVisualization',\n  Filter = 'filter',\n  PerformSpatialOperations = 'performSpatialOperations',\n  Reformat = 'reformat',\n  ReorderAndRename = 'reorderAndRename',\n}\n\n/**\n * Registry of transformation options that can be driven by\n * stored configuration files.\n */\nexport const standardTransformersRegistry = new Registry<TransformerRegistryItem>();\n","import { cloneDeep } from 'lodash';\nimport { MonoTypeOperatorFunction, Observable, of } from 'rxjs';\nimport { map, mergeMap } from 'rxjs/operators';\n\nimport { DataFrame } from '../types/dataFrame';\nimport {\n  CustomTransformOperator,\n  DataTransformContext,\n  DataTransformerConfig,\n  FrameMatcher,\n} from '../types/transformations';\n\nimport { getFrameMatchers } from './matchers';\nimport { standardTransformersRegistry, TransformerRegistryItem } from './standardTransformersRegistry';\n\nconst getOperator =\n  (config: DataTransformerConfig, ctx: DataTransformContext): MonoTypeOperatorFunction<DataFrame[]> =>\n  (source) => {\n    const info = standardTransformersRegistry.get(config.id);\n\n    if (!info) {\n      return source;\n    }\n\n    const defaultOptions = info.transformation.defaultOptions ?? {};\n    const options = { ...defaultOptions, ...config.options };\n\n    // when running within Scenes, we can skip var interpolation, since it's already handled upstream\n    const isScenes = window.__grafanaSceneContext != null;\n\n    const interpolated = isScenes\n      ? options\n      : deepIterate(cloneDeep(options), (v) => {\n          if (typeof v === 'string') {\n            return ctx.interpolate(v);\n          }\n          return v;\n        });\n\n    const matcher = config.filter?.options ? getFrameMatchers(config.filter) : undefined;\n    return source.pipe(\n      mergeMap((before) =>\n        of(filterInput(before, matcher)).pipe(\n          info.transformation.operator(interpolated, ctx),\n          postProcessTransform(before, info, matcher)\n        )\n      )\n    );\n  };\n\nfunction filterInput(data: DataFrame[], matcher?: FrameMatcher) {\n  if (matcher) {\n    return data.filter((v) => matcher(v));\n  }\n  return data;\n}\n\nconst postProcessTransform =\n  (before: DataFrame[], info: TransformerRegistryItem, matcher?: FrameMatcher): MonoTypeOperatorFunction<DataFrame[]> =>\n  (source) =>\n    source.pipe(\n      map((after) => {\n        if (after === before) {\n          return after;\n        }\n\n        // Add back the filtered out frames\n        if (matcher) {\n          // keep the frame order the same\n          let insert = 0;\n          const append = before.filter((v, idx) => {\n            const keep = !matcher(v);\n            if (keep && !insert) {\n              insert = idx;\n            }\n            return keep;\n          });\n          if (append.length) {\n            after.splice(insert, 0, ...append);\n          }\n        }\n        return after;\n      })\n    );\n\n/**\n * Apply configured transformations to the input data\n */\nexport function transformDataFrame(\n  options: Array<DataTransformerConfig | CustomTransformOperator>,\n  data: DataFrame[],\n  ctx?: DataTransformContext\n): Observable<DataFrame[]> {\n  const stream = of<DataFrame[]>(data);\n\n  if (!options.length) {\n    return stream;\n  }\n\n  const operators: Array<MonoTypeOperatorFunction<DataFrame[]>> = [];\n  const context = ctx ?? { interpolate: (str) => str };\n\n  for (let index = 0; index < options.length; index++) {\n    const config = options[index];\n\n    if (isCustomTransformation(config)) {\n      operators.push(config(context));\n    } else {\n      if (config.disabled) {\n        continue;\n      }\n      operators.push(getOperator(config, context));\n    }\n  }\n\n  // @ts-ignore TypeScript has a hard time understanding this construct\n  return stream.pipe.apply(stream, operators);\n}\n\nfunction isCustomTransformation(t: DataTransformerConfig | CustomTransformOperator): t is CustomTransformOperator {\n  return typeof t === 'function';\n}\n\nfunction deepIterate<T extends object>(obj: T, doSomething: (current: any) => any): T;\n// eslint-disable-next-line no-redeclare\nfunction deepIterate(obj: any, doSomething: (current: any) => any): any {\n  if (Array.isArray(obj)) {\n    return obj.map((o) => deepIterate(o, doSomething));\n  }\n\n  if (typeof obj === 'object') {\n    for (const key in obj) {\n      obj[key] = deepIterate(obj[key], doSomething);\n    }\n\n    return obj;\n  } else {\n    return doSomething(obj) ?? obj;\n  }\n}\n","import { DataFrame, FieldType } from '../../../types/dataFrame';\n\ntype InsertMode = (prev: number, next: number, threshold: number) => number;\n\nconst INSERT_MODES = {\n  threshold: (prev: number, next: number, threshold: number) => prev + threshold,\n  midpoint: (prev: number, next: number, threshold: number) => (prev + next) / 2,\n  // previous time + 1ms to prevent StateTimeline from forward-interpolating prior state\n  plusone: (prev: number, next: number, threshold: number) => prev + 1,\n};\n\ninterface NullInsertOptions {\n  frame: DataFrame;\n  refFieldName?: string | null;\n  refFieldPseudoMax?: number;\n  refFieldPseudoMin?: number;\n  insertMode?: InsertMode;\n}\n\nfunction getRefField(frame: DataFrame, refFieldName?: string | null) {\n  return frame.fields.find((field) => {\n    // note: getFieldDisplayName() would require full DF[]\n    return refFieldName != null ? field.name === refFieldName : field.type === FieldType.time;\n  });\n}\n\n/** @internal */\nexport function applyNullInsertThreshold(opts: NullInsertOptions): DataFrame {\n  if (opts.frame.length === 0) {\n    return opts.frame;\n  }\n\n  let thorough = true;\n  let { frame, refFieldName, refFieldPseudoMax, refFieldPseudoMin, insertMode } = opts;\n\n  if (!insertMode) {\n    insertMode = INSERT_MODES.threshold;\n  }\n\n  const refField = getRefField(frame, refFieldName);\n\n  if (refField == null) {\n    return frame;\n  }\n\n  refField.state = {\n    ...refField.state,\n    nullThresholdApplied: true,\n  };\n\n  const thresholds = frame.fields.map((field) => field.config.custom?.insertNulls || refField.config.interval || null);\n\n  const uniqueThresholds = new Set<number | null>(thresholds);\n\n  uniqueThresholds.delete(null);\n\n  if (uniqueThresholds.size === 0) {\n    return frame;\n  }\n\n  if (uniqueThresholds.size === 1) {\n    const threshold = uniqueThresholds.values().next().value;\n\n    if (!threshold || threshold <= 0) {\n      return frame;\n    }\n\n    const refValues = refField.values;\n\n    const frameValues = frame.fields.map((field) => field.values);\n\n    const filledFieldValues = nullInsertThreshold(\n      refValues,\n      frameValues,\n      threshold,\n      refFieldPseudoMin,\n      refFieldPseudoMax,\n      insertMode,\n      thorough\n    );\n\n    if (filledFieldValues === frameValues) {\n      return frame;\n    }\n\n    return {\n      ...frame,\n      length: filledFieldValues[0].length,\n      fields: frame.fields.map((field, i) => ({\n        ...field,\n        values: filledFieldValues[i],\n      })),\n    };\n  }\n\n  // TODO: unique threshold-per-field (via overrides) is unimplemented\n  // should be done by processing each (refField + thresholdA-field1 + thresholdA-field2...)\n  // as a separate nullInsertThreshold() dataset, then re-join into single dataset via join()\n  return frame;\n}\n\nfunction nullInsertThreshold(\n  refValues: number[],\n  frameValues: any[][],\n  threshold: number,\n  refFieldPseudoMin: number | null = null,\n  // will insert a trailing null when refFieldPseudoMax > last datapoint + threshold\n  refFieldPseudoMax: number | null = null,\n  getInsertValue: InsertMode,\n  // will insert the value at every missing interval\n  thorough: boolean\n) {\n  const len = refValues.length;\n  const refValuesNew: number[] = [];\n\n  // Continuously subtract the threshold from the first data point, filling in insert values accordingly\n  if (refFieldPseudoMin != null && refFieldPseudoMin < refValues[0]) {\n    let preFillCount = Math.ceil((refValues[0] - refFieldPseudoMin) / threshold);\n    // this will be 0 or 1 threshold increment left of visible range\n    let prevSlot = refValues[0] - preFillCount * threshold;\n\n    while (prevSlot < refValues[0]) {\n      // (prevSlot - threshold) is used to simulate the previous 'real' data point, as getInsertValue expects\n      refValuesNew.push(getInsertValue(prevSlot - threshold, prevSlot, threshold));\n      prevSlot += threshold;\n    }\n  }\n\n  // Insert initial value\n  refValuesNew.push(refValues[0]);\n\n  let prevValue: number = refValues[0];\n\n  // Fill nulls when a value is greater than the threshold value\n  for (let i = 1; i < len; i++) {\n    const curValue = refValues[i];\n\n    while (curValue - prevValue > threshold) {\n      refValuesNew.push(getInsertValue(prevValue, curValue, threshold));\n\n      prevValue += threshold;\n\n      if (!thorough) {\n        break;\n      }\n    }\n\n    refValuesNew.push(curValue);\n\n    prevValue = curValue;\n  }\n\n  // At the end of the sequence\n  if (refFieldPseudoMax != null && refFieldPseudoMax > prevValue) {\n    while (prevValue + threshold < refFieldPseudoMax) {\n      refValuesNew.push(getInsertValue(prevValue, refFieldPseudoMax, threshold));\n      prevValue += threshold;\n    }\n  }\n\n  const filledLen = refValuesNew.length;\n\n  if (filledLen === len) {\n    return frameValues;\n  }\n\n  const filledFieldValues: any[][] = [];\n\n  for (let fieldValues of frameValues) {\n    let filledValues;\n\n    if (fieldValues !== refValues) {\n      filledValues = Array(filledLen);\n\n      for (let i = 0, j = 0; i < filledLen; i++) {\n        filledValues[i] = refValues[j] === refValuesNew[i] ? fieldValues[j++] : null;\n      }\n    } else {\n      filledValues = refValuesNew;\n    }\n\n    filledFieldValues.push(filledValues);\n  }\n\n  return filledFieldValues;\n}\n","import { Registry, RegistryItem } from '../utils/Registry';\n\n/**\n * @alpha\n */\nexport interface MonacoLanguageRegistryItem extends RegistryItem {\n  init: () => Worker;\n}\n\n/**\n * @alpha\n */\nexport const monacoLanguageRegistry = new Registry<MonacoLanguageRegistryItem>();\n","import { NewThemeOptions } from '../createTheme';\n\nconst aubergineTheme: NewThemeOptions = {\n  name: 'Aubergine',\n  colors: {\n    mode: 'dark',\n    border: {\n      weak: '#4F2A3D',\n      medium: '#6A3C4B',\n      strong: '#8C5A69',\n    },\n    text: {\n      primary: '#E5D0D6',\n      secondary: '#D1A8C4',\n      disabled: '#B7A0A6',\n      link: '#A56BB6',\n      maxContrast: '#FFFFFF',\n    },\n    primary: {\n      main: '#8C5A69',\n    },\n    secondary: {\n      main: '#6A3C4B',\n      text: '#D1A8C4',\n      border: '#8C5A69',\n    },\n    background: {\n      canvas: '#2E1F2D',\n      primary: '#3C2136',\n      secondary: '#4A2D47',\n      elevated: '#4A2D47',\n    },\n    action: {\n      hover: '#6A3C4B',\n      selected: '#8C5A69',\n      selectedBorder: '#FFB300',\n      focus: '#A56BB6',\n      hoverOpacity: 0.1,\n      disabledText: '#B7A0A6',\n      disabledBackground: '#4A2D47',\n      disabledOpacity: 0.38,\n    },\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg, #6A3C4B 0%, #A56BB6 100%)',\n      brandVertical: 'linear-gradient(0deg, #6A3C4B 0%, #A56BB6 100%)',\n    },\n    contrastThreshold: 4,\n    hoverFactor: 0.07,\n    tonalOffset: 0.15,\n  },\n  shape: {\n    borderRadius: 6,\n  },\n};\n\nexport default aubergineTheme;\n","import { NewThemeOptions } from '../createTheme';\n\n/**\n * a very ugly theme that is useful for debugging and checking if the theme is applied correctly\n * borders are red,\n * backgrounds are blue,\n * text is yellow,\n * and grafana loves you <3\n * (also corners are rounded, action states (hover, focus, selected) are purple)\n */\nconst debugTheme: NewThemeOptions = {\n  name: 'Debug',\n  colors: {\n    mode: 'dark',\n    background: {\n      canvas: '#000033',\n      primary: '#000044',\n      secondary: '#000055',\n      elevated: '#000055',\n    },\n    text: {\n      primary: '#bbbb00',\n      secondary: '#888800',\n      disabled: '#444400',\n      link: '#dddd00',\n      maxContrast: '#ffff00',\n    },\n    border: {\n      weak: '#ff000044',\n      medium: '#ff000088',\n      strong: '#ff0000ff',\n    },\n    primary: {\n      border: '#ff000088',\n      text: '#cccc00',\n      contrastText: '#ffff00',\n      shade: '#9900dd',\n    },\n    secondary: {\n      border: '#ff000088',\n      text: '#cccc00',\n      contrastText: '#ffff00',\n      shade: '#9900dd',\n    },\n    info: {\n      shade: '#9900dd',\n    },\n    warning: {\n      shade: '#9900dd',\n    },\n    success: {\n      shade: '#9900dd',\n    },\n    error: {\n      shade: '#9900dd',\n    },\n    action: {\n      hover: '#9900dd',\n      focus: '#6600aa',\n      selected: '#440088',\n    },\n  },\n  shape: {\n    borderRadius: 8,\n  },\n  spacing: {\n    gridSize: 10,\n  },\n};\n\nexport default debugTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst desertBloomTheme: NewThemeOptions = {\n  name: 'Desert bloom',\n  colors: {\n    mode: 'light',\n    border: {\n      weak: 'rgba(0, 0, 0, 0.12)',\n      medium: 'rgba(0, 0, 0, 0.20)',\n      strong: 'rgba(0, 0, 0, 0.30)',\n    },\n    text: {\n      primary: '#333333',\n      secondary: '#555555',\n      disabled: 'rgba(0, 0, 0, 0.5)',\n      link: '#1A82E2',\n      maxContrast: '#000000',\n    },\n    primary: {\n      main: '#FF6F61',\n      text: '#FE6F61',\n      border: '#E55B4D',\n      name: 'primary',\n      shade: '#E55B4D',\n      transparent: '#FF6F6126',\n      contrastText: '#FFFFFF',\n      borderTransparent: '#FF6F6140',\n    },\n    secondary: {\n      main: '#FFFFFF',\n      text: '#695f53',\n      border: '#d9cec0',\n      name: 'secondary',\n      shade: '#d9cec0',\n      transparent: '#FFFFFF26',\n      contrastText: '#4c4339',\n      borderTransparent: '#FFFFFF40',\n    },\n    info: {\n      main: '#1A82E2',\n    },\n    success: {\n      main: '#4CAF50',\n    },\n    warning: {\n      main: '#FFC107',\n    },\n    background: {\n      canvas: '#FFF8F0',\n      primary: '#FFFFFF',\n      secondary: '#f9f3e8',\n      elevated: '#FFFFFF',\n    },\n    action: {\n      hover: 'rgba(168, 156, 134, 0.12)',\n      selected: 'rgba(168, 156, 134, 0.36)',\n      selectedBorder: '#FF6F61',\n      focus: 'rgba(168, 156, 134, 0.50)',\n      hoverOpacity: 0.08,\n      disabledText: 'rgba(168, 156, 134, 0.5)',\n      disabledBackground: 'rgba(168, 156, 134, 0.06)',\n      disabledOpacity: 0.38,\n    },\n\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg,rgba(255, 111, 97, 1) 0%, rgba(255, 167, 58, 1) 100%)',\n      brandVertical: 'linear-gradient(0deg, rgba(255, 111, 97, 1) 0%, rgba(255, 167, 58, 1) 100%)',\n    },\n    contrastThreshold: 3,\n    hoverFactor: 0.03,\n    tonalOffset: 0.15,\n  },\n  shape: {\n    borderRadius: 6,\n  },\n};\n\nexport default desertBloomTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst gildedGroveTheme: NewThemeOptions = {\n  name: 'Gilded grove',\n  colors: {\n    mode: 'dark',\n    border: {\n      weak: 'rgba(200, 200, 180, 0.12)',\n      medium: 'rgba(200, 200, 180, 0.20)',\n      strong: 'rgba(200, 200, 180, 0.30)',\n    },\n    text: {\n      primary: 'rgb(250, 250, 239)',\n      secondary: 'rgba(200, 200, 180, 0.85)',\n      disabled: 'rgba(200, 200, 180, 0.6)',\n      link: '#FEAC34',\n      maxContrast: '#FFFFFF',\n    },\n    primary: {\n      main: '#FEAC34',\n      text: '#FFD783',\n      border: '#FFD783',\n      name: 'primary',\n      shade: 'rgb(255, 173, 80)',\n      transparent: '#FEAC3426',\n      contrastText: '#111614',\n      borderTransparent: '#FFD78340',\n    },\n    secondary: {\n      main: 'rgba(200, 200, 180, 0.10)',\n      shade: 'rgba(200, 200, 180, 0.14)',\n      transparent: 'rgba(200, 200, 180, 0.08)',\n      text: 'rgb(200, 200, 180)',\n      contrastText: 'rgb(200, 200, 180)',\n      border: 'rgba(200, 200, 180, 0.08)',\n      name: 'secondary',\n      borderTransparent: 'rgba(200, 200, 180, 0.25)',\n    },\n    background: {\n      canvas: '#111614',\n      primary: '#1d2220',\n      secondary: '#27312E',\n      elevated: '#27312E',\n    },\n    action: {\n      hover: 'rgba(200, 200, 180, 0.16)',\n      selected: 'rgba(200, 200, 180, 0.12)',\n      selectedBorder: '#FEAC34',\n      focus: 'rgba(200, 200, 180, 0.16)',\n      hoverOpacity: 0.08,\n      disabledText: 'rgba(200, 200, 180, 0.6)',\n      disabledBackground: 'rgba(200, 200, 180, 0.04)',\n      disabledOpacity: 0.38,\n    },\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg, #FEAC34 0%, #FFD783 100%)',\n      brandVertical: 'linear-gradient(0.01deg, #FEAC34 0.01%, #FFD783 99.99%)',\n    },\n    contrastThreshold: 3,\n    hoverFactor: 0.03,\n    tonalOffset: 0.15,\n  },\n  shape: {\n    borderRadius: 5,\n  },\n};\n\nexport default gildedGroveTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst marsTheme: NewThemeOptions = {\n  name: 'Mars',\n  colors: {\n    mode: 'dark',\n    border: {\n      weak: 'rgba(210, 90, 60, 0.2)',\n      medium: 'rgba(210, 90, 60, 0.35)',\n      strong: 'rgba(210, 90, 60, 0.5)',\n    },\n    text: {\n      primary: '#DDDDDD',\n      secondary: '#BBBBBB',\n      disabled: 'rgba(221, 221, 221, 0.5)',\n      link: '#FF6F61',\n      maxContrast: '#FFFFFF',\n    },\n    primary: {\n      main: '#FF6F61',\n    },\n    secondary: {\n      main: '#6a2f2f',\n      text: '#BBBBBB',\n      border: 'rgba(210, 90, 60, 0.2)',\n    },\n    background: {\n      canvas: '#3C1E1E',\n      primary: '#522626',\n      secondary: '#6A2F2F',\n      elevated: '#6A2F2F',\n    },\n    action: {\n      hover: 'rgba(210, 90, 60, 0.16)',\n      selected: 'rgba(210, 90, 60, 0.12)',\n      selectedBorder: '#FF6F61',\n      focus: 'rgba(210, 90, 60, 0.16)',\n      hoverOpacity: 0.08,\n      disabledText: 'rgba(221, 221, 221, 0.5)',\n      disabledBackground: 'rgba(210, 90, 60, 0.08)',\n      disabledOpacity: 0.38,\n    },\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg, #FF6F61 0%, #D25A3C 100%)',\n      brandVertical: 'linear-gradient(0.01deg, #FF6F61 0.01%, #D25A3C 99.99%)',\n    },\n    contrastThreshold: 3,\n    hoverFactor: 0.05,\n    tonalOffset: 0.2,\n  },\n  shape: {\n    borderRadius: 4,\n  },\n};\n\nexport default marsTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst matrixTheme: NewThemeOptions = {\n  name: 'Matrix',\n  colors: {\n    mode: 'dark',\n    background: {\n      canvas: '#000000',\n      primary: '#020202',\n      secondary: '#080808',\n      elevated: '#080808',\n    },\n    text: {\n      primary: '#00c017',\n      secondary: '#008910',\n      disabled: '#006a0c',\n      link: '#00ff41',\n      maxContrast: '#00ff41',\n    },\n    border: {\n      weak: '#008f1144',\n      medium: '#008f1188',\n      strong: '#008910',\n    },\n    primary: {\n      main: '#008910',\n    },\n    secondary: {\n      text: '#008910',\n    },\n    gradients: {\n      brandVertical: 'linear-gradient(0deg, #008910 0%, #00ff41 100%)',\n      brandHorizontal: 'linear-gradient(90deg, #008910 0%, #00ff41 100%)',\n    },\n  },\n  shape: {\n    borderRadius: 0,\n  },\n  typography: {\n    fontFamily: 'monospace',\n  },\n};\n\nexport default matrixTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst sapphireDuskTheme: NewThemeOptions = {\n  name: 'Sapphire dusk',\n  colors: {\n    mode: 'dark',\n    border: {\n      weak: '#232e47',\n      medium: '#2c3853',\n      strong: '#404d6b',\n    },\n    text: {\n      primary: '#FFFFFF',\n      secondary: '#bcccdd',\n      disabled: '#838da5',\n      link: '#93EBF0',\n      maxContrast: '#FFFFFF',\n    },\n    primary: {\n      main: '#93EBF0',\n      text: '#a8e9ed',\n      border: '#93ebf0',\n      name: 'primary',\n      shade: '#c0f5d9',\n      transparent: '#93EBF029',\n      contrastText: '#111614',\n      borderTransparent: '#93ebf040',\n    },\n    secondary: {\n      main: '#2c364f',\n      shade: '#36415e',\n      transparent: 'rgba(200, 200, 180, 0.08)',\n      text: '#d1dfff',\n      contrastText: '#acfeff',\n      border: 'rgba(200, 200, 180, 0.08)',\n      name: 'secondary',\n      borderTransparent: 'rgba(200, 200, 180, 0.25)',\n    },\n    info: {\n      main: '#4d4593',\n      text: '#a8e9ed',\n      border: '#5d54a7',\n    },\n    error: {\n      main: '#c63370',\n    },\n    success: {\n      main: '#1A7F4B',\n    },\n    warning: {\n      main: '#D448EA',\n    },\n    background: {\n      canvas: '#1e273d',\n      primary: '#12192e',\n      secondary: '#212c47',\n      elevated: '#212c47',\n    },\n    action: {\n      hover: '#364057',\n      selected: '#364260',\n      selectedBorder: '#D448EA',\n      focus: '#364057',\n      hoverOpacity: 0.08,\n      disabledText: '#838da5',\n      disabledBackground: 'rgba(54, 64, 87, 0.2)',\n      disabledOpacity: 0.38,\n    },\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg, #D346EF 0%, #2C83FE 100%)',\n      brandVertical: 'linear-gradient(0deg, #D346EF 0%, #2C83FE 100%)',\n    },\n    contrastThreshold: 3,\n    hoverFactor: 0.03,\n    tonalOffset: 0.15,\n  },\n  shape: {\n    borderRadius: 5,\n  },\n};\n\nexport default sapphireDuskTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst synthwaveTheme: NewThemeOptions = {\n  name: 'Synthwave',\n  colors: {\n    mode: 'dark',\n    border: {\n      weak: 'rgba(255, 20, 147, 0.12)',\n      medium: 'rgba(255, 20, 147, 0.20)',\n      strong: 'rgba(255, 20, 147, 0.30)',\n    },\n    text: {\n      primary: '#E0E0E0',\n      secondary: 'rgba(224, 224, 224, 0.75)',\n      disabled: 'rgba(224, 224, 224, 0.5)',\n      link: '#FF69B4',\n      maxContrast: '#FFFFFF',\n    },\n    primary: {\n      main: '#FF1493',\n    },\n    secondary: {\n      main: '#37183a',\n      text: 'rgba(224, 224, 224, 0.75)',\n      border: 'rgba(255, 20, 147, 0.10)',\n    },\n    background: {\n      canvas: '#1A1A2E',\n      primary: '#16213E',\n      secondary: '#0F3460',\n      elevated: '#0F3460',\n    },\n    action: {\n      hover: 'rgba(255, 20, 147, 0.16)',\n      selected: 'rgba(255, 20, 147, 0.12)',\n      selectedBorder: '#FF1493',\n      focus: 'rgba(255, 20, 147, 0.16)',\n      hoverOpacity: 0.08,\n      disabledText: 'rgba(224, 224, 224, 0.5)',\n      disabledBackground: 'rgba(255, 20, 147, 0.08)',\n      disabledOpacity: 0.38,\n    },\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg, #FF1493 0%, #1E90FF 100%)',\n      brandVertical: 'linear-gradient(0.01deg, #FF1493 0.01%, #1E90FF 99.99%)',\n    },\n    contrastThreshold: 3,\n    hoverFactor: 0.03,\n    tonalOffset: 0.15,\n  },\n  shape: {\n    borderRadius: 6,\n  },\n};\n\nexport default synthwaveTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst tronTheme: NewThemeOptions = {\n  name: 'Tron',\n  colors: {\n    mode: 'dark',\n    border: {\n      weak: 'rgba(0, 255, 255, 0.12)',\n      medium: 'rgba(0, 255, 255, 0.20)',\n      strong: 'rgba(0, 255, 255, 0.30)',\n    },\n    text: {\n      primary: '#E0E0E0',\n      secondary: 'rgba(224, 224, 224, 0.75)',\n      disabled: 'rgba(224, 224, 224, 0.5)',\n      link: '#00FFFF',\n      maxContrast: '#FFFFFF',\n    },\n    primary: {\n      main: '#00FFFF',\n    },\n    secondary: {\n      main: '#0b2e36',\n      text: 'rgba(224, 224, 224, 0.75)',\n      border: 'rgba(0, 255, 255, 0.10)',\n    },\n    background: {\n      canvas: '#0A0F18',\n      primary: '#0F1B2A',\n      secondary: '#152234',\n      elevated: '#152234',\n    },\n    action: {\n      hover: 'rgba(0, 255, 255, 0.16)',\n      selected: 'rgba(0, 255, 255, 0.12)',\n      selectedBorder: '#00FFFF',\n      focus: 'rgba(0, 255, 255, 0.16)',\n      hoverOpacity: 0.08,\n      disabledText: 'rgba(224, 224, 224, 0.5)',\n      disabledBackground: 'rgba(0, 255, 255, 0.08)',\n      disabledOpacity: 0.38,\n    },\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg, #00FFFF 0%, #29ABE2 100%)',\n      brandVertical: 'linear-gradient(0.01deg, #00FFFF 0.01%, #29ABE2 99.99%)',\n    },\n    contrastThreshold: 3,\n    hoverFactor: 0.05,\n    tonalOffset: 0.2,\n  },\n  shape: {\n    borderRadius: 6,\n  },\n};\n\nexport default tronTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst victorianTheme: NewThemeOptions = {\n  name: 'Victorian',\n  colors: {\n    mode: 'dark',\n    border: {\n      weak: '#3A2C22',\n      medium: '#3A2C22',\n      strong: '#4B3D32',\n    },\n    text: {\n      primary: '#D9D0A2',\n      secondary: '#C4B89B',\n      disabled: '#A89F91',\n      link: '#C28A4D',\n      maxContrast: '#FFFFFF',\n    },\n    primary: {\n      main: '#C28A4D',\n    },\n    secondary: {\n      main: '#3A2C22',\n      text: '#C4B89B',\n      border: '#4B3D32',\n    },\n    background: {\n      canvas: '#1F1510',\n      primary: '#2C1A13',\n      secondary: '#402A21',\n      elevated: '#402A21',\n    },\n    action: {\n      hover: '#3A2C22',\n      selected: '#4B3D32',\n      selectedBorder: '#C28A4D',\n      focus: '#C28A4D',\n      hoverOpacity: 0.1,\n      disabledText: '#A89F91',\n      disabledBackground: '#402A21',\n      disabledOpacity: 0.38,\n    },\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg, #D9D0a1 0%, #C28A4D 100%)',\n      brandVertical: 'linear-gradient(0.01deg, #D9D0a1 0.01%, #C28A4D 99.99%)',\n    },\n    contrastThreshold: 4,\n    hoverFactor: 0.07,\n    tonalOffset: 0.15,\n  },\n  shape: {\n    borderRadius: 6,\n  },\n  typography: {\n    fontFamily: '\"Georgia\", \"Times New Roman\", serif',\n    fontFamilyMonospace: \"'Courier New', monospace\",\n  },\n};\n\nexport default victorianTheme;\n","import { NewThemeOptions } from '../createTheme';\n\nconst zenTheme: NewThemeOptions = {\n  name: 'Zen',\n  colors: {\n    mode: 'light',\n    text: {\n      primary: '#333333',\n      secondary: '#666666',\n      disabled: '#B8B8B8',\n      link: '#4F9F6E',\n      maxContrast: '#000000',\n    },\n    border: {\n      weak: '#B1B7B3',\n      medium: '#A2A8A2',\n      strong: '#7C7F7A',\n    },\n    primary: {\n      main: '#6D8E6D',\n    },\n    secondary: {\n      main: '#E0E0E0',\n      text: '#666666',\n      border: '#A2A8A2',\n    },\n    background: {\n      canvas: '#F4F4F4',\n      primary: '#E9E9E9',\n      secondary: '#D8D8D8',\n      elevated: '#E9E9E9',\n    },\n    action: {\n      hover: '#D1D1D1',\n      selected: '#B8B8B8',\n      selectedBorder: '#88B88B',\n      hoverOpacity: 0.1,\n      focus: '#D1D1D1',\n      disabledBackground: '#E0E0E0',\n      disabledText: '#B8B8B8',\n      disabledOpacity: 0.5,\n    },\n    gradients: {\n      brandHorizontal: 'linear-gradient(270deg, #88B88B 0%, #6D8E6D 100%)',\n      brandVertical: 'linear-gradient(0.01deg, #88B88B 0.01%, #6D8E6D 99.99%)',\n    },\n    contrastThreshold: 3,\n    hoverFactor: 0.03,\n    tonalOffset: 0.2,\n  },\n  shape: {\n    borderRadius: 8,\n  },\n};\n\nexport default zenTheme;\n","import { NewThemeOptions } from '../createTheme';\n\n/**\n * Torkel's GrafanaCon theme\n * very WIP state\n */\n\nconst whiteBase = `210, 210, 220`;\nconst secondaryBase = `195, 195, 245`;\n\n//const brandMain = '#3d71d9';\n//const brandText = '#6e9fff';\nconst brandMain = '#ff934d';\nconst brandText = '#f99a5c';\nconst disabledText = `rgba(${whiteBase}, 0.48)`;\n\nconst gloomTheme: NewThemeOptions = {\n  name: 'Gloom',\n  colors: {\n    mode: 'dark',\n    border: {\n      weak: `rgba(${whiteBase}, 0.12)`,\n      medium: `rgba(${whiteBase}, 0.20)`,\n      strong: `rgba(${whiteBase}, 0.30)`,\n    },\n\n    text: {\n      primary: `rgb(${whiteBase})`,\n      secondary: `rgba(${whiteBase}, 0.65)`,\n      disabled: disabledText,\n      link: brandText,\n      maxContrast: '#FFF',\n    },\n\n    primary: {\n      main: brandMain,\n      text: brandText,\n      border: brandMain,\n      name: 'primary',\n    },\n\n    secondary: {\n      main: `rgba(${secondaryBase}, 0.10)`,\n      shade: `rgba(${secondaryBase}, 0.14)`,\n      transparent: `rgba(${secondaryBase}, 0.08)`,\n      text: `rgba(${secondaryBase})`,\n      contrastText: `rgb(${secondaryBase})`,\n      border: `rgba(${secondaryBase}, 0.08)`,\n    },\n\n    background: {\n      canvas: '#000',\n      primary: '#121118',\n      secondary: '#211e28',\n      elevated: '#211e28',\n    },\n\n    action: {\n      hover: `rgba(${secondaryBase}, 0.07)`,\n      selected: `rgba(${secondaryBase}, 0.11)`,\n      selectedBorder: brandMain,\n      focus: `rgba(${secondaryBase}, 0.07)`,\n      hoverOpacity: 0.05,\n      disabledText: disabledText,\n      disabledBackground: `rgba(${whiteBase}, 0.04)`,\n      disabledOpacity: 0.38,\n    },\n\n    // gradients: {\n    //   brandHorizontal: 'linear-gradient(270deg, #ff934d 0%, #FEAC34 100%)',\n    //   brandVertical: 'linear-gradient(0.01deg, #ff934d 0.01%, #FEAC34 99.99%)',\n    // },\n\n    contrastThreshold: 3,\n    hoverFactor: 0.03,\n    tonalOffset: 0.15,\n  },\n  shape: {\n    borderRadius: 5,\n  },\n};\n\nexport default gloomTheme;\n","import { Registry, RegistryItem } from '../utils/Registry';\n\nimport { createTheme } from './createTheme';\nimport * as extraThemes from './themeDefinitions';\nimport { GrafanaTheme2 } from './types';\n\nexport interface ThemeRegistryItem extends RegistryItem {\n  isExtra?: boolean;\n  build: () => GrafanaTheme2;\n}\n\n/**\n * @internal\n * Only for internal use, never use this from a plugin\n **/\nexport function getThemeById(id: string): GrafanaTheme2 {\n  const theme = themeRegistry.getIfExists(id) ?? themeRegistry.get('dark');\n  return theme.build();\n}\n\n/**\n * @internal\n * For internal use only\n */\nexport function getBuiltInThemes(allowedExtras: string[]) {\n  const themes = themeRegistry.list().filter((item) => {\n    if (item.isExtra) {\n      return allowedExtras.includes(item.id);\n    }\n    return true;\n  });\n  // sort themes alphabetically, but put built-in themes (default, dark, light, system) first\n  const sortedThemes = themes.sort((a, b) => {\n    if (a.isExtra && !b.isExtra) {\n      return 1;\n    } else if (!a.isExtra && b.isExtra) {\n      return -1;\n    } else {\n      return a.name.localeCompare(b.name);\n    }\n  });\n  return sortedThemes;\n}\n\n/**\n * There is also a backend list at pkg/services/preference/themes.go\n */\nconst themeRegistry = new Registry<ThemeRegistryItem>(() => {\n  return [\n    { id: 'system', name: 'System preference', build: getSystemPreferenceTheme },\n    { id: 'dark', name: 'Dark', build: () => createTheme({ colors: { mode: 'dark' } }) },\n    { id: 'light', name: 'Light', build: () => createTheme({ colors: { mode: 'light' } }) },\n  ];\n});\n\nfor (const [id, theme] of Object.entries(extraThemes)) {\n  themeRegistry.register({\n    id,\n    name: theme.name ?? '',\n    build: () => createTheme(theme),\n    isExtra: true,\n  });\n}\n\nfunction getSystemPreferenceTheme() {\n  const mediaResult = window.matchMedia('(prefers-color-scheme: dark)');\n  const id = mediaResult.matches ? 'dark' : 'light';\n  return getThemeById(id);\n}\n","import { createContext } from 'react';\n\nimport { createTheme } from './createTheme';\n\n/** @public */\nexport const ThemeContext = createContext(createTheme());\n\nThemeContext.displayName = 'ThemeContext';\n","import { RawTimeRange, TimeRange, TimeZone, IntervalValues, RelativeTimeRange, TimeOption } from '../types/time';\n\nimport * as dateMath from './datemath';\nimport { timeZoneAbbrevation, dateTimeFormat, dateTimeFormatTimeAgo } from './formatter';\nimport { isDateTime, DateTime, dateTime } from './moment_wrapper';\nimport { dateTimeParse } from './parser';\n\nconst spans: { [key: string]: { display: string; section?: number } } = {\n  s: { display: 'second' },\n  m: { display: 'minute' },\n  h: { display: 'hour' },\n  d: { display: 'day' },\n  w: { display: 'week' },\n  M: { display: 'month' },\n  y: { display: 'year' },\n};\n\nconst BASE_RANGE_OPTIONS: TimeOption[] = [\n  { from: 'now/d', to: 'now/d', display: 'Today' },\n  { from: 'now/d', to: 'now', display: 'Today so far' },\n  { from: 'now/w', to: 'now/w', display: 'This week' },\n  { from: 'now/w', to: 'now', display: 'This week so far' },\n  { from: 'now/M', to: 'now/M', display: 'This month' },\n  { from: 'now/M', to: 'now', display: 'This month so far' },\n  { from: 'now/y', to: 'now/y', display: 'This year' },\n  { from: 'now/y', to: 'now', display: 'This year so far' },\n\n  { from: 'now-1d/d', to: 'now-1d/d', display: 'Yesterday' },\n  {\n    from: 'now-2d/d',\n    to: 'now-2d/d',\n    display: 'Day before yesterday',\n  },\n  {\n    from: 'now-7d/d',\n    to: 'now-7d/d',\n    display: 'This day last week',\n  },\n  { from: 'now-1w/w', to: 'now-1w/w', display: 'Previous week' },\n  { from: 'now-1M/M', to: 'now-1M/M', display: 'Previous month' },\n  { from: 'now-1Q/fQ', to: 'now-1Q/fQ', display: 'Previous fiscal quarter' },\n  { from: 'now-1y/y', to: 'now-1y/y', display: 'Previous year' },\n  { from: 'now-1y/fy', to: 'now-1y/fy', display: 'Previous fiscal year' },\n\n  { from: 'now-5m', to: 'now', display: 'Last 5 minutes' },\n  { from: 'now-15m', to: 'now', display: 'Last 15 minutes' },\n  { from: 'now-30m', to: 'now', display: 'Last 30 minutes' },\n  { from: 'now-1h', to: 'now', display: 'Last 1 hour' },\n  { from: 'now-3h', to: 'now', display: 'Last 3 hours' },\n  { from: 'now-6h', to: 'now', display: 'Last 6 hours' },\n  { from: 'now-12h', to: 'now', display: 'Last 12 hours' },\n  { from: 'now-24h', to: 'now', display: 'Last 24 hours' },\n  { from: 'now-2d', to: 'now', display: 'Last 2 days' },\n  { from: 'now-7d', to: 'now', display: 'Last 7 days' },\n  { from: 'now-30d', to: 'now', display: 'Last 30 days' },\n  { from: 'now-90d', to: 'now', display: 'Last 90 days' },\n  { from: 'now-6M', to: 'now', display: 'Last 6 months' },\n  { from: 'now-1y', to: 'now', display: 'Last 1 year' },\n  { from: 'now-2y', to: 'now', display: 'Last 2 years' },\n  { from: 'now-5y', to: 'now', display: 'Last 5 years' },\n  { from: 'now/fQ', to: 'now', display: 'This fiscal quarter so far' },\n  { from: 'now/fQ', to: 'now/fQ', display: 'This fiscal quarter' },\n  { from: 'now/fy', to: 'now', display: 'This fiscal year so far' },\n  { from: 'now/fy', to: 'now/fy', display: 'This fiscal year' },\n];\n\nconst HIDDEN_RANGE_OPTIONS: TimeOption[] = [\n  { from: 'now', to: 'now+1m', display: 'Next minute' },\n  { from: 'now', to: 'now+5m', display: 'Next 5 minutes' },\n  { from: 'now', to: 'now+15m', display: 'Next 15 minutes' },\n  { from: 'now', to: 'now+30m', display: 'Next 30 minutes' },\n  { from: 'now', to: 'now+1h', display: 'Next hour' },\n  { from: 'now', to: 'now+3h', display: 'Next 3 hours' },\n  { from: 'now', to: 'now+6h', display: 'Next 6 hours' },\n  { from: 'now', to: 'now+12h', display: 'Next 12 hours' },\n  { from: 'now', to: 'now+24h', display: 'Next 24 hours' },\n  { from: 'now', to: 'now+2d', display: 'Next 2 days' },\n  { from: 'now', to: 'now+7d', display: 'Next 7 days' },\n  { from: 'now', to: 'now+30d', display: 'Next 30 days' },\n  { from: 'now', to: 'now+90d', display: 'Next 90 days' },\n  { from: 'now', to: 'now+6M', display: 'Next 6 months' },\n  { from: 'now', to: 'now+1y', display: 'Next year' },\n  { from: 'now', to: 'now+2y', display: 'Next 2 years' },\n  { from: 'now', to: 'now+5y', display: 'Next 5 years' },\n];\n\nconst STANDARD_RANGE_OPTIONS = BASE_RANGE_OPTIONS.concat(HIDDEN_RANGE_OPTIONS);\n\nfunction findRangeInOptions(range: RawTimeRange, options: TimeOption[]) {\n  return options.find((option) => option.from === range.from && option.to === range.to);\n}\n\n// handles expressions like\n// 5m\n// 5m to now/d\n// now/d to now\n// now/d\n// if no to <expr> then to now is assumed\nexport function describeTextRange(expr: string): TimeOption {\n  const isLast = expr.indexOf('+') !== 0;\n  if (expr.indexOf('now') === -1) {\n    expr = (isLast ? 'now-' : 'now') + expr;\n  }\n\n  let opt = findRangeInOptions({ from: expr, to: 'now' }, STANDARD_RANGE_OPTIONS);\n  if (opt) {\n    return opt;\n  }\n\n  if (isLast) {\n    opt = { from: expr, to: 'now', display: '' };\n  } else {\n    opt = { from: 'now', to: expr, display: '' };\n  }\n\n  const parts = /^now([-+])(\\d+)(\\w)/.exec(expr);\n  if (parts) {\n    const unit = parts[3];\n    const amount = parseInt(parts[2], 10);\n    const span = spans[unit];\n    if (span) {\n      opt.display = isLast ? 'Last ' : 'Next ';\n      opt.display += amount + ' ' + span.display;\n      opt.section = span.section;\n      if (amount > 1) {\n        opt.display += 's';\n      }\n    }\n  } else {\n    opt.display = opt.from + ' to ' + opt.to;\n    opt.invalid = true;\n  }\n\n  return opt;\n}\n\n/**\n * Use this function to get a properly formatted string representation of a {@link @grafana/data:RawTimeRange | range}.\n *\n * @category TimeUtils\n * @param range - a time range (usually specified by the TimePicker)\n * @param timeZone - optional time zone.\n * @param quickRanges - optional dashboard's custom quick ranges to pick range names from.\n * @alpha\n */\nexport function describeTimeRange(range: RawTimeRange, timeZone?: TimeZone, quickRanges?: TimeOption[]): string {\n  const rangeOptions = quickRanges ? quickRanges.concat(STANDARD_RANGE_OPTIONS) : STANDARD_RANGE_OPTIONS;\n  const option = findRangeInOptions(range, rangeOptions);\n\n  if (option) {\n    return option.display;\n  }\n\n  const options = { timeZone };\n\n  if (isDateTime(range.from) && isDateTime(range.to)) {\n    return dateTimeFormat(range.from, options) + ' to ' + dateTimeFormat(range.to, options);\n  }\n\n  if (isDateTime(range.from)) {\n    const parsed = dateMath.parse(range.to, true, 'utc');\n    return parsed ? dateTimeFormat(range.from, options) + ' to ' + dateTimeFormatTimeAgo(parsed, options) : '';\n  }\n\n  if (isDateTime(range.to)) {\n    const parsed = dateMath.parse(range.from, false, 'utc');\n    return parsed ? dateTimeFormatTimeAgo(parsed, options) + ' to ' + dateTimeFormat(range.to, options) : '';\n  }\n\n  if (range.to.toString() === 'now') {\n    const res = describeTextRange(range.from);\n    return res.display;\n  }\n\n  return range.from.toString() + ' to ' + range.to.toString();\n}\n\nexport const isValidTimeSpan = (value: string) => {\n  if (value.indexOf('$') === 0 || value.indexOf('+$') === 0) {\n    return true;\n  }\n\n  const info = describeTextRange(value);\n  return info.invalid !== true;\n};\n\nexport const describeTimeRangeAbbreviation = (range: TimeRange, timeZone?: TimeZone) => {\n  if (isDateTime(range.from)) {\n    return timeZoneAbbrevation(range.from, { timeZone });\n  }\n  const parsed = dateMath.parse(range.from, true);\n  return parsed ? timeZoneAbbrevation(parsed, { timeZone }) : '';\n};\n\nexport const convertRawToRange = (\n  raw: RawTimeRange,\n  timeZone?: TimeZone,\n  fiscalYearStartMonth?: number,\n  format?: string\n): TimeRange => {\n  const from = dateTimeParse(raw.from, { roundUp: false, timeZone, fiscalYearStartMonth, format });\n  const to = dateTimeParse(raw.to, { roundUp: true, timeZone, fiscalYearStartMonth, format });\n\n  return {\n    from,\n    to,\n    raw: {\n      from: dateMath.isMathString(raw.from) ? raw.from : from,\n      to: dateMath.isMathString(raw.to) ? raw.to : to,\n    },\n  };\n};\n\nexport function isRelativeTime(v: DateTime | string) {\n  if (typeof v === 'string') {\n    return v.indexOf('now') >= 0;\n  }\n  return false;\n}\n\nexport function isFiscal(timeRange: TimeRange) {\n  if (typeof timeRange.raw.from === 'string' && timeRange.raw.from.indexOf('f') > 0) {\n    return true;\n  } else if (typeof timeRange.raw.to === 'string' && timeRange.raw.to.indexOf('f') > 0) {\n    return true;\n  }\n  return false;\n}\n\nexport function isRelativeTimeRange(raw: RawTimeRange): boolean {\n  return isRelativeTime(raw.from) || isRelativeTime(raw.to);\n}\n\nexport function secondsToHms(seconds: number): string {\n  const numYears = Math.floor(seconds / 31536000);\n  if (numYears) {\n    return numYears + 'y';\n  }\n  const numDays = Math.floor((seconds % 31536000) / 86400);\n  if (numDays) {\n    return numDays + 'd';\n  }\n  const numHours = Math.floor(((seconds % 31536000) % 86400) / 3600);\n  if (numHours) {\n    return numHours + 'h';\n  }\n  const numMinutes = Math.floor((((seconds % 31536000) % 86400) % 3600) / 60);\n  if (numMinutes) {\n    return numMinutes + 'm';\n  }\n  const numSeconds = Math.floor((((seconds % 31536000) % 86400) % 3600) % 60);\n  if (numSeconds) {\n    return numSeconds + 's';\n  }\n  const numMilliseconds = Math.floor(seconds * 1000.0);\n  if (numMilliseconds) {\n    return numMilliseconds + 'ms';\n  }\n\n  return 'less than a millisecond'; //'just now' //or other string you like;\n}\n\n// Format timeSpan (in sec) to string used in log's meta info\nexport function msRangeToTimeString(rangeMs: number): string {\n  const rangeSec = Number((rangeMs / 1000).toFixed());\n\n  const h = Math.floor(rangeSec / 60 / 60);\n  const m = Math.floor(rangeSec / 60) - h * 60;\n  const s = Number((rangeSec % 60).toFixed());\n  let formattedH = h ? h + 'h' : '';\n  let formattedM = m ? m + 'min' : '';\n  let formattedS = s ? s + 'sec' : '';\n\n  formattedH && formattedM ? (formattedH = formattedH + ' ') : (formattedH = formattedH);\n  (formattedM || formattedH) && formattedS ? (formattedM = formattedM + ' ') : (formattedM = formattedM);\n\n  return formattedH + formattedM + formattedS || 'less than 1sec';\n}\n\nexport function calculateInterval(range: TimeRange, resolution: number, lowLimitInterval?: string): IntervalValues {\n  let lowLimitMs = 1; // 1 millisecond default low limit\n  if (lowLimitInterval) {\n    lowLimitMs = intervalToMs(lowLimitInterval);\n  }\n\n  let intervalMs = roundInterval((range.to.valueOf() - range.from.valueOf()) / resolution);\n  if (lowLimitMs > intervalMs) {\n    intervalMs = lowLimitMs;\n  }\n  return {\n    intervalMs: intervalMs,\n    interval: secondsToHms(intervalMs / 1000),\n  };\n}\n\nconst interval_regex = /^(-?\\d+(?:\\.\\d+)?)(ms|[Mwdhmsy])/;\n// histogram & trends\nconst intervals_in_seconds: Record<string, number> = {\n  y: 31536000,\n  M: 2592000,\n  w: 604800,\n  d: 86400,\n  h: 3600,\n  m: 60,\n  s: 1,\n  ms: 0.001,\n};\n\nexport function describeInterval(str: string) {\n  // Default to seconds if no unit is provided\n  if (Number(str)) {\n    return {\n      sec: intervals_in_seconds.s,\n      type: 's',\n      count: parseInt(str, 10),\n    };\n  }\n\n  const matches = str.match(interval_regex);\n  if (!matches) {\n    throw new Error(\n      `Invalid interval string, has to be either unit-less or end with one of the following units: \"${Object.keys(\n        intervals_in_seconds\n      ).join(', ')}\"`\n    );\n  }\n\n  const sec = intervals_in_seconds[matches[2]];\n  if (sec === undefined) {\n    // this can never happen, because above we\n    // already made sure the key is correct,\n    // but we handle it to be safe.\n    throw new Error('describeInterval failed: invalid interval string');\n  }\n\n  return {\n    sec,\n    type: matches[2],\n    count: parseInt(matches[1], 10),\n  };\n}\n\nexport function intervalToSeconds(str: string): number {\n  const info = describeInterval(str);\n  return info.sec * info.count;\n}\n\nexport function intervalToMs(str: string): number {\n  const info = describeInterval(str);\n  return info.sec * 1000 * info.count;\n}\n\nexport function roundInterval(interval: number) {\n  switch (true) {\n    // 0.01s\n    case interval < 10:\n      return 1; // 0.001s\n    // 0.015s\n    case interval < 15:\n      return 10; // 0.01s\n    // 0.035s\n    case interval < 35:\n      return 20; // 0.02s\n    // 0.075s\n    case interval < 75:\n      return 50; // 0.05s\n    // 0.15s\n    case interval < 150:\n      return 100; // 0.1s\n    // 0.35s\n    case interval < 350:\n      return 200; // 0.2s\n    // 0.75s\n    case interval < 750:\n      return 500; // 0.5s\n    // 1.5s\n    case interval < 1500:\n      return 1000; // 1s\n    // 3.5s\n    case interval < 3500:\n      return 2000; // 2s\n    // 7.5s\n    case interval < 7500:\n      return 5000; // 5s\n    // 12.5s\n    case interval < 12500:\n      return 10000; // 10s\n    // 17.5s\n    case interval < 17500:\n      return 15000; // 15s\n    // 25s\n    case interval < 25000:\n      return 20000; // 20s\n    // 45s\n    case interval < 45000:\n      return 30000; // 30s\n    // 1.5m\n    case interval < 90000:\n      return 60000; // 1m\n    // 3.5m\n    case interval < 210000:\n      return 120000; // 2m\n    // 7.5m\n    case interval < 450000:\n      return 300000; // 5m\n    // 12.5m\n    case interval < 750000:\n      return 600000; // 10m\n    // 17.5m\n    case interval < 1050000:\n      return 900000; // 15m\n    // 25m\n    case interval < 1500000:\n      return 1200000; // 20m\n    // 45m\n    case interval < 2700000:\n      return 1800000; // 30m\n    // 1.5h\n    case interval < 5400000:\n      return 3600000; // 1h\n    // 2.5h\n    case interval < 9000000:\n      return 7200000; // 2h\n    // 4.5h\n    case interval < 16200000:\n      return 10800000; // 3h\n    // 9h\n    case interval < 32400000:\n      return 21600000; // 6h\n    // 1d\n    case interval < 86400000:\n      return 43200000; // 12h\n    // 1w\n    case interval < 604800000:\n      return 86400000; // 1d\n    // 3w\n    case interval < 1814400000:\n      return 604800000; // 1w\n    // 6w\n    case interval < 3628800000:\n      return 2592000000; // 30d\n    default:\n      return 31536000000; // 1y\n  }\n}\n\n/**\n * Converts a TimeRange to a RelativeTimeRange that can be used in\n * e.g. alerting queries/rules.\n *\n * @internal\n */\nexport function timeRangeToRelative(timeRange: TimeRange, now: DateTime = dateTime()): RelativeTimeRange {\n  const from = now.unix() - timeRange.from.unix();\n  const to = now.unix() - timeRange.to.unix();\n\n  return {\n    from,\n    to,\n  };\n}\n\n/**\n * Converts a RelativeTimeRange to a TimeRange\n *\n * @internal\n */\nexport function relativeToTimeRange(relativeTimeRange: RelativeTimeRange, now: DateTime = dateTime()): TimeRange {\n  const from = dateTime(now).subtract(relativeTimeRange.from, 's');\n  const to = relativeTimeRange.to === 0 ? dateTime(now) : dateTime(now).subtract(relativeTimeRange.to, 's');\n\n  return {\n    from,\n    to,\n    raw: { from, to },\n  };\n}\n","import { memoize } from 'lodash';\nimport moment from 'moment-timezone';\n\nimport { TimeZone } from '../types/time';\n\nimport { getTimeZone } from './common';\n\nexport enum InternalTimeZones {\n  default = '',\n  localBrowserTime = 'browser',\n  utc = 'utc',\n}\n\nexport const timeZoneFormatUserFriendly = (timeZone: TimeZone | undefined) => {\n  switch (getTimeZone({ timeZone })) {\n    case 'browser':\n      return 'Local browser time';\n    case 'utc':\n      return 'UTC';\n    default:\n      return timeZone;\n  }\n};\n\nexport const getZone = (timeZone: string) => {\n  return moment.tz.zone(timeZone);\n};\n\nexport interface TimeZoneCountry {\n  code: string;\n  name: string;\n}\nexport interface TimeZoneInfo {\n  name: string;\n  zone: string;\n  countries: TimeZoneCountry[];\n  abbreviation: string;\n  offsetInMins: number;\n  ianaName: string;\n}\n\nexport interface GroupedTimeZones {\n  name: string;\n  zones: TimeZone[];\n}\n\nexport const getTimeZoneInfo = (zone: string, timestamp: number): TimeZoneInfo | undefined => {\n  const internal = mapInternal(zone, timestamp);\n\n  if (internal) {\n    return internal;\n  }\n\n  return mapToInfo(zone, timestamp);\n};\n\nexport const getTimeZones = memoize((includeInternal: boolean | InternalTimeZones[] = false): TimeZone[] => {\n  const initial: TimeZone[] = [];\n\n  if (includeInternal === true) {\n    initial.push(InternalTimeZones.default, InternalTimeZones.localBrowserTime, InternalTimeZones.utc);\n  } else if (includeInternal) {\n    initial.push(...includeInternal);\n  }\n\n  return moment.tz.names().reduce((zones: TimeZone[], zone: string) => {\n    const countriesForZone = countriesByTimeZone[zone];\n\n    if (!Array.isArray(countriesForZone) || countriesForZone.length === 0) {\n      return zones;\n    }\n\n    zones.push(zone);\n    return zones;\n  }, initial);\n});\n\nexport const getTimeZoneGroups = memoize(\n  (includeInternal: boolean | InternalTimeZones[] = false): GroupedTimeZones[] => {\n    const timeZones = getTimeZones(includeInternal);\n\n    const groups = timeZones.reduce((groups: Record<string, TimeZone[]>, zone: TimeZone) => {\n      const delimiter = zone.indexOf('/');\n\n      if (delimiter === -1) {\n        const group = '';\n        groups[group] = groups[group] ?? [];\n        groups[group].push(zone);\n\n        return groups;\n      }\n\n      const group = zone.slice(0, delimiter);\n      groups[group] = groups[group] ?? [];\n      groups[group].push(zone);\n\n      return groups;\n    }, {});\n\n    return Object.keys(groups).map((name) => ({\n      name,\n      zones: groups[name],\n    }));\n  }\n);\n\nconst mapInternal = (zone: string, timestamp: number): TimeZoneInfo | undefined => {\n  switch (zone) {\n    case InternalTimeZones.utc: {\n      return {\n        name: 'Coordinated Universal Time',\n        ianaName: 'UTC',\n        zone,\n        countries: [],\n        abbreviation: 'UTC, GMT',\n        offsetInMins: 0,\n      };\n    }\n\n    case InternalTimeZones.default: {\n      const tz = getTimeZone();\n      const isInternal = tz === 'browser' || tz === 'utc';\n      const info = isInternal ? mapInternal(tz, timestamp) : mapToInfo(tz, timestamp);\n\n      return {\n        countries: countriesByTimeZone[tz] ?? [],\n        abbreviation: '',\n        offsetInMins: 0,\n        ...info,\n        ianaName: info?.ianaName ?? '',\n        name: 'Default',\n        zone,\n      };\n    }\n\n    case InternalTimeZones.localBrowserTime: {\n      const tz = moment.tz.guess(true);\n      const info = mapToInfo(tz, timestamp);\n\n      return {\n        countries: countriesByTimeZone[tz] ?? [],\n        abbreviation: 'Your local time',\n        offsetInMins: new Date().getTimezoneOffset(),\n        ...info,\n        name: 'Browser Time',\n        ianaName: info?.ianaName ?? '',\n        zone,\n      };\n    }\n\n    default:\n      return undefined;\n  }\n};\n\nconst abbrevationWithoutOffset = (abbrevation: string): string => {\n  if (/^(\\+|\\-).+/.test(abbrevation)) {\n    return '';\n  }\n  return abbrevation;\n};\n\nconst mapToInfo = (timeZone: TimeZone, timestamp: number): TimeZoneInfo | undefined => {\n  const momentTz = moment.tz.zone(timeZone);\n  if (!momentTz) {\n    return undefined;\n  }\n\n  return {\n    name: timeZone,\n    ianaName: momentTz.name,\n    zone: timeZone,\n    countries: countriesByTimeZone[timeZone] ?? [],\n    abbreviation: abbrevationWithoutOffset(momentTz.abbr(timestamp)),\n    offsetInMins: momentTz.utcOffset(timestamp),\n  };\n};\n\n// Country names by ISO 3166-1-alpha-2 code\nconst countryByCode: Record<string, string> = {\n  AF: 'Afghanistan',\n  AX: 'Aland Islands',\n  AL: 'Albania',\n  DZ: 'Algeria',\n  AS: 'American Samoa',\n  AD: 'Andorra',\n  AO: 'Angola',\n  AI: 'Anguilla',\n  AQ: 'Antarctica',\n  AG: 'Antigua And Barbuda',\n  AR: 'Argentina',\n  AM: 'Armenia',\n  AW: 'Aruba',\n  AU: 'Australia',\n  AT: 'Austria',\n  AZ: 'Azerbaijan',\n  BS: 'Bahamas',\n  BH: 'Bahrain',\n  BD: 'Bangladesh',\n  BB: 'Barbados',\n  BY: 'Belarus',\n  BE: 'Belgium',\n  BZ: 'Belize',\n  BJ: 'Benin',\n  BM: 'Bermuda',\n  BT: 'Bhutan',\n  BO: 'Bolivia',\n  BA: 'Bosnia And Herzegovina',\n  BW: 'Botswana',\n  BV: 'Bouvet Island',\n  BR: 'Brazil',\n  IO: 'British Indian Ocean Territory',\n  BN: 'Brunei Darussalam',\n  BG: 'Bulgaria',\n  BF: 'Burkina Faso',\n  BI: 'Burundi',\n  KH: 'Cambodia',\n  CM: 'Cameroon',\n  CA: 'Canada',\n  CV: 'Cape Verde',\n  KY: 'Cayman Islands',\n  CF: 'Central African Republic',\n  TD: 'Chad',\n  CL: 'Chile',\n  CN: 'China',\n  CX: 'Christmas Island',\n  CC: 'Cocos (Keeling) Islands',\n  CO: 'Colombia',\n  KM: 'Comoros',\n  CG: 'Congo',\n  CD: 'Congo, Democratic Republic',\n  CK: 'Cook Islands',\n  CR: 'Costa Rica',\n  CI: \"Cote D'Ivoire\",\n  HR: 'Croatia',\n  CU: 'Cuba',\n  CY: 'Cyprus',\n  CZ: 'Czech Republic',\n  DK: 'Denmark',\n  DJ: 'Djibouti',\n  DM: 'Dominica',\n  DO: 'Dominican Republic',\n  EC: 'Ecuador',\n  EG: 'Egypt',\n  SV: 'El Salvador',\n  GQ: 'Equatorial Guinea',\n  ER: 'Eritrea',\n  EE: 'Estonia',\n  ET: 'Ethiopia',\n  FK: 'Falkland Islands (Malvinas)',\n  FO: 'Faroe Islands',\n  FJ: 'Fiji',\n  FI: 'Finland',\n  FR: 'France',\n  GF: 'French Guiana',\n  PF: 'French Polynesia',\n  TF: 'French Southern Territories',\n  GA: 'Gabon',\n  GM: 'Gambia',\n  GE: 'Georgia',\n  DE: 'Germany',\n  GH: 'Ghana',\n  GI: 'Gibraltar',\n  GR: 'Greece',\n  GL: 'Greenland',\n  GD: 'Grenada',\n  GP: 'Guadeloupe',\n  GU: 'Guam',\n  GT: 'Guatemala',\n  GG: 'Guernsey',\n  GN: 'Guinea',\n  GW: 'Guinea-Bissau',\n  GY: 'Guyana',\n  HT: 'Haiti',\n  HM: 'Heard Island & Mcdonald Islands',\n  VA: 'Holy See (Vatican City State)',\n  HN: 'Honduras',\n  HK: 'Hong Kong',\n  HU: 'Hungary',\n  IS: 'Iceland',\n  IN: 'India',\n  ID: 'Indonesia',\n  IR: 'Iran (Islamic Republic Of)',\n  IQ: 'Iraq',\n  IE: 'Ireland',\n  IM: 'Isle Of Man',\n  IL: 'Israel',\n  IT: 'Italy',\n  JM: 'Jamaica',\n  JP: 'Japan',\n  JE: 'Jersey',\n  JO: 'Jordan',\n  KZ: 'Kazakhstan',\n  KE: 'Kenya',\n  KI: 'Kiribati',\n  KR: 'Korea',\n  KW: 'Kuwait',\n  KG: 'Kyrgyzstan',\n  LA: \"Lao People's Democratic Republic\",\n  LV: 'Latvia',\n  LB: 'Lebanon',\n  LS: 'Lesotho',\n  LR: 'Liberia',\n  LY: 'Libyan Arab Jamahiriya',\n  LI: 'Liechtenstein',\n  LT: 'Lithuania',\n  LU: 'Luxembourg',\n  MO: 'Macao',\n  MK: 'Macedonia',\n  MG: 'Madagascar',\n  MW: 'Malawi',\n  MY: 'Malaysia',\n  MV: 'Maldives',\n  ML: 'Mali',\n  MT: 'Malta',\n  MH: 'Marshall Islands',\n  MQ: 'Martinique',\n  MR: 'Mauritania',\n  MU: 'Mauritius',\n  YT: 'Mayotte',\n  MX: 'Mexico',\n  FM: 'Micronesia (Federated States Of)',\n  MD: 'Moldova',\n  MC: 'Monaco',\n  MN: 'Mongolia',\n  ME: 'Montenegro',\n  MS: 'Montserrat',\n  MA: 'Morocco',\n  MZ: 'Mozambique',\n  MM: 'Myanmar',\n  NA: 'Namibia',\n  NR: 'Nauru',\n  NP: 'Nepal',\n  NL: 'Netherlands',\n  AN: 'Netherlands Antilles',\n  NC: 'New Caledonia',\n  NZ: 'New Zealand',\n  NI: 'Nicaragua',\n  NE: 'Niger',\n  NG: 'Nigeria',\n  NU: 'Niue',\n  NF: 'Norfolk Island',\n  MP: 'Northern Mariana Islands',\n  NO: 'Norway',\n  OM: 'Oman',\n  PK: 'Pakistan',\n  PW: 'Palau',\n  PS: 'Palestine, State of',\n  PA: 'Panama',\n  PG: 'Papua New Guinea',\n  PY: 'Paraguay',\n  PE: 'Peru',\n  PH: 'Philippines',\n  PN: 'Pitcairn',\n  PL: 'Poland',\n  PT: 'Portugal',\n  PR: 'Puerto Rico',\n  QA: 'Qatar',\n  RE: 'Reunion',\n  RO: 'Romania',\n  RU: 'Russian Federation',\n  RW: 'Rwanda',\n  BL: 'Saint Barthelemy',\n  SH: 'Saint Helena',\n  KN: 'Saint Kitts And Nevis',\n  LC: 'Saint Lucia',\n  MF: 'Saint Martin',\n  PM: 'Saint Pierre And Miquelon',\n  VC: 'Saint Vincent And Grenadines',\n  WS: 'Samoa',\n  SM: 'San Marino',\n  ST: 'Sao Tome And Principe',\n  SA: 'Saudi Arabia',\n  SN: 'Senegal',\n  RS: 'Serbia',\n  SC: 'Seychelles',\n  SL: 'Sierra Leone',\n  SG: 'Singapore',\n  SK: 'Slovakia',\n  SI: 'Slovenia',\n  SB: 'Solomon Islands',\n  SO: 'Somalia',\n  ZA: 'South Africa',\n  GS: 'South Georgia And Sandwich Isl.',\n  ES: 'Spain',\n  LK: 'Sri Lanka',\n  SD: 'Sudan',\n  SR: 'Suriname',\n  SJ: 'Svalbard And Jan Mayen',\n  SZ: 'Swaziland',\n  SE: 'Sweden',\n  CH: 'Switzerland',\n  SY: 'Syrian Arab Republic',\n  TW: 'Taiwan',\n  TJ: 'Tajikistan',\n  TZ: 'Tanzania',\n  TH: 'Thailand',\n  TL: 'Timor-Leste',\n  TG: 'Togo',\n  TK: 'Tokelau',\n  TO: 'Tonga',\n  TT: 'Trinidad And Tobago',\n  TN: 'Tunisia',\n  TR: 'Turkey',\n  TM: 'Turkmenistan',\n  TC: 'Turks And Caicos Islands',\n  TV: 'Tuvalu',\n  UG: 'Uganda',\n  UA: 'Ukraine',\n  AE: 'United Arab Emirates',\n  GB: 'United Kingdom',\n  US: 'United States',\n  UM: 'United States Outlying Islands',\n  UY: 'Uruguay',\n  UZ: 'Uzbekistan',\n  VU: 'Vanuatu',\n  VE: 'Venezuela',\n  VN: 'Viet Nam',\n  VG: 'Virgin Islands, British',\n  VI: 'Virgin Islands, U.S.',\n  WF: 'Wallis And Futuna',\n  EH: 'Western Sahara',\n  YE: 'Yemen',\n  ZM: 'Zambia',\n  ZW: 'Zimbabwe',\n};\n\nconst countriesByTimeZone = ((): Record<string, TimeZoneCountry[]> => {\n  return moment.tz.countries().reduce((all: Record<string, TimeZoneCountry[]>, code) => {\n    const timeZones = moment.tz.zonesForCountry(code);\n    return timeZones.reduce((all: Record<string, TimeZoneCountry[]>, timeZone) => {\n      if (!all[timeZone]) {\n        all[timeZone] = [];\n      }\n\n      const name = countryByCode[code];\n\n      if (!name) {\n        return all;\n      }\n\n      all[timeZone].push({ code, name });\n      return all;\n    }, all);\n  }, {});\n})();\n","import { add, Duration, intervalToDuration, Interval, isAfter } from 'date-fns';\n\nconst durationMap: Record<string, string[]> = {\n  years: ['y', 'Y', 'years'],\n  months: ['M', 'months'],\n  weeks: ['w', 'W', 'weeks'],\n  days: ['d', 'D', 'days'],\n  hours: ['h', 'H', 'hours'],\n  minutes: ['m', 'minutes'],\n  seconds: ['s', 'S', 'seconds'],\n} satisfies { [key in keyof Duration]: string[] };\n\n/**\n * intervalToAbbreviatedDurationString converts interval to readable duration string\n *\n * @param interval - interval to convert\n * @param includeSeconds - optional, default true. If false, will not include seconds unless interval is less than 1 minute\n *\n * @public\n */\nexport function intervalToAbbreviatedDurationString(interval: Interval, includeSeconds = true): string {\n  // An edge case that causes the app to crash (e.g. browser's clock behind the rule/alert date)\n  // The code will again return a proper duration when the browser's clock >= rule/alert date\n  if (isAfter(interval.start, interval.end)) {\n    return '';\n  }\n\n  const duration = intervalToDuration(interval);\n  return reverseParseDuration(duration, includeSeconds);\n}\n\nexport function reverseParseDuration(duration: Duration, includeSeconds: boolean): string {\n  return Object.entries(duration).reduce((str, [unit, value]) => {\n    if (value && value !== 0 && !(unit === 'seconds' && !includeSeconds && str)) {\n      const padding = str !== '' ? ' ' : '';\n      return str + `${padding}${value}${durationMap[unit][0]}`;\n    }\n\n    return str;\n  }, '');\n}\n\n/**\n * parseDuration parses duration string into datefns Duration object\n *\n * @param durationString - string to convert. For example '2m', '5h 20s'\n *\n * @public\n */\nexport function parseDuration(durationString: string): Duration {\n  return durationString.split(' ').reduce<Duration>((acc, value) => {\n    const match = value.match(/(\\d+)(.+)/);\n\n    const rawLength = match?.[1];\n    const unit = match?.[2];\n\n    if (!(rawLength && unit)) {\n      return acc;\n    }\n\n    const mapping = Object.entries(durationMap).find(([_, abbreviations]) => abbreviations?.includes(match[2]));\n    const length = parseInt(rawLength, 10);\n\n    return mapping ? { ...acc, [mapping[0]]: length } : acc;\n  }, {});\n}\n\n/**\n * addDurationToDate adds given duration to given date and returns a new Date object\n *\n * @param date - date to add to. Can be either Date object or a number (milliseconds since epoch)\n * @param duration - duration to add. For example '2m', '5h 20s'\n *\n * @public\n */\nexport function addDurationToDate(date: Date | number, duration: Duration): Date {\n  return add(date, duration);\n}\n\n/**\n * durationToMilliseconds convert a duration object to milliseconds\n *\n * @param duration - datefns Duration object\n *\n * @public\n */\nexport function durationToMilliseconds(duration: Duration): number {\n  const now = new Date();\n  return addDurationToDate(now, duration).getTime() - now.getTime();\n}\n\n/**\n * isValidDate returns true if given string can be parsed into valid Date object, false otherwise\n *\n * @param dateString - string representation of a date\n *\n * @public\n */\nexport function isValidDate(dateString: string): boolean {\n  return !isNaN(Date.parse(dateString));\n}\n\n/**\n * isValidDuration returns true if the given string can be parsed into a valid `date-fns` `Duration` object, false otherwise\n *\n * Valid time units are \"y\", \"Y\", \"years\", \"M\", \"months\", \"w\", \"W\", \"weeks\", \"d\", \"D\", \"days\", \"h\", \"H\", \"hours\", \"m\", \"minutes\", \"s\", \"S\", \"seconds\"\n *\n * @see https://date-fns.org/v2.30.0/docs/Duration\n * @param durationString - string representation of a duration\n *\n * @public\n */\nexport function isValidDuration(durationString: string): boolean {\n  for (const value of durationString.trim().split(' ')) {\n    const match = value.match(/(\\d+)(.+)/);\n    if (match === null || match.length !== 3) {\n      return false;\n    }\n\n    const key = Object.entries(durationMap).find(([_, abbreviations]) => abbreviations?.includes(match[2]))?.[0];\n    if (!key) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * isValidGoDuration returns true if the given string can be parsed into a valid Duration object based on\n * Go's time.parseDuration, false otherwise.\n *\n * Valid time units are \"ns\", \"us\" (or \"µs\"), \"ms\", \"s\", \"m\", \"h\".\n *\n * @see https://pkg.go.dev/time#ParseDuration\n *\n * @param durationString - string representation of a duration\n *\n * @internal\n */\nexport function isValidGoDuration(durationString: string): boolean {\n  const timeUnits = ['h', 'm', 's', 'ms', 'us', 'µs', 'ns'];\n  return validateDurationByUnits(durationString, timeUnits);\n}\n\n/**\n * isValidGrafanaDuration returns `true` if the given string can be parsed into a valid Duration object based on\n * the Grafana SDK's gtime.parseDuration, `false` otherwise.\n *\n * Valid time units are \"ns\", \"us\" (or \"µs\"), \"ms\", \"s\", \"m\", \"h\", \"d\", \"w\", \"M\", \"y\".\n *\n * @see https://pkg.go.dev/github.com/grafana/grafana-plugin-sdk-go/backend/gtime#ParseDuration\n *\n * @param durationString - string representation of a duration\n *\n * @internal\n */\nexport function isValidGrafanaDuration(durationString: string): boolean {\n  const timeUnits = ['y', 'M', 'w', 'd', 'h', 'm', 's', 'ms', 'us', 'µs', 'ns'];\n  return validateDurationByUnits(durationString, timeUnits);\n}\n\nfunction validateDurationByUnits(durationString: string, timeUnits: string[]): boolean {\n  for (const value of durationString.trim().split(' ')) {\n    const match = value.match(/([0-9]*[.]?[0-9]+)(.+)/);\n    if (match === null || match.length !== 3) {\n      return false;\n    }\n\n    const isValidUnit = timeUnits.includes(match[2]);\n    if (!isValidUnit) {\n      return false;\n    }\n  }\n\n  return true;\n}\n","export type LayoutMode = LayoutModes.Grid | LayoutModes.List;\n\nexport enum LayoutModes {\n  Grid = 'grid',\n  List = 'list',\n}\n","import { FieldConfigOptionsRegistry } from '../field/FieldConfigOptionsRegistry';\nimport { standardFieldConfigEditorRegistry } from '../field/standardFieldConfigEditorRegistry';\nimport { FieldConfigProperty, FieldConfigPropertyItem } from '../types/fieldOverrides';\nimport { FieldConfigEditorBuilder } from '../utils/OptionsUIBuilders';\n\nimport { SetFieldConfigOptionsArgs } from './PanelPlugin';\n\n/**\n * Helper functionality to create a field config registry.\n *\n * @param config - configuration to base the registry on.\n * @param pluginName - name of the plugin that will use the registry.\n * @internal\n */\nexport function createFieldConfigRegistry<TFieldConfigOptions>(\n  config: SetFieldConfigOptionsArgs<TFieldConfigOptions> = {},\n  pluginName: string\n): FieldConfigOptionsRegistry {\n  const registry = new FieldConfigOptionsRegistry();\n  const standardConfigs = standardFieldConfigEditorRegistry.list();\n  const standardOptionsExtensions: Record<string, FieldConfigPropertyItem[]> = {};\n\n  // Add custom options\n  if (config.useCustomConfig) {\n    const builder = new FieldConfigEditorBuilder<TFieldConfigOptions>();\n    config.useCustomConfig(builder);\n\n    for (const customProp of builder.getRegistry().list()) {\n      customProp.isCustom = true;\n      // need to do something to make the custom items not conflict with standard ones\n      // problem is id (registry index) is used as property path\n      // so sort of need a property path on the FieldPropertyEditorItem\n      customProp.id = 'custom.' + customProp.id;\n\n      if (isStandardConfigExtension(customProp, standardConfigs)) {\n        const currentExtensions = standardOptionsExtensions[customProp.category![0]] ?? [];\n        currentExtensions.push(customProp);\n        standardOptionsExtensions[customProp.category![0]] = currentExtensions;\n      } else {\n        registry.register(customProp);\n      }\n    }\n  }\n\n  for (let fieldConfigProp of standardConfigs) {\n    const id = fieldConfigProp.id as FieldConfigProperty;\n    if (config.disableStandardOptions) {\n      const isDisabled = config.disableStandardOptions.indexOf(id) > -1;\n      if (isDisabled) {\n        continue;\n      }\n    }\n    if (config.standardOptions) {\n      const customHideFromDefaults = config.standardOptions[id]?.hideFromDefaults;\n      const customDefault = config.standardOptions[id]?.defaultValue;\n      const customSettings = config.standardOptions[id]?.settings;\n\n      if (customHideFromDefaults !== undefined) {\n        fieldConfigProp = {\n          ...fieldConfigProp,\n          hideFromDefaults: customHideFromDefaults,\n        };\n      }\n\n      if (customDefault) {\n        fieldConfigProp = {\n          ...fieldConfigProp,\n          defaultValue: customDefault,\n        };\n      }\n\n      if (customSettings) {\n        fieldConfigProp = {\n          ...fieldConfigProp,\n          settings: fieldConfigProp.settings ? { ...fieldConfigProp.settings, ...customSettings } : customSettings,\n        };\n      }\n    }\n\n    registry.register(fieldConfigProp);\n\n    if (fieldConfigProp.category && standardOptionsExtensions[fieldConfigProp.category[0]]) {\n      for (let extensionProperty of standardOptionsExtensions[fieldConfigProp.category[0]]) {\n        registry.register(extensionProperty);\n      }\n    }\n  }\n\n  // assert that field configs do not use array path syntax\n  for (const item of registry.list()) {\n    if (item.path.indexOf('[') > 0) {\n      throw new Error(`[${pluginName}] Field config paths do not support arrays: ${item.id}`);\n    }\n  }\n\n  return registry;\n}\n\nfunction isStandardConfigExtension(property: FieldConfigPropertyItem, standardProperties: FieldConfigPropertyItem[]) {\n  return Boolean(\n    standardProperties.find((p) => property.category && p.category && property.category[0] === p.category[0])\n  );\n}\n","import { set } from 'lodash';\nimport { ComponentClass, ComponentType } from 'react';\n\nimport { FieldConfigOptionsRegistry } from '../field/FieldConfigOptionsRegistry';\nimport { StandardEditorContext } from '../field/standardFieldConfigEditorRegistry';\nimport { FieldConfigProperty, FieldConfigSource } from '../types/fieldOverrides';\nimport {\n  PanelPluginMeta,\n  VisualizationSuggestionsSupplier,\n  PanelProps,\n  PanelEditorProps,\n  PanelMigrationHandler,\n  PanelTypeChangedHandler,\n  PanelPluginDataSupport,\n} from '../types/panel';\nimport { GrafanaPlugin } from '../types/plugin';\nimport { FieldConfigEditorBuilder, PanelOptionsEditorBuilder } from '../utils/OptionsUIBuilders';\nimport { deprecationWarning } from '../utils/deprecationWarning';\n\nimport { createFieldConfigRegistry } from './registryFactories';\n\n/** @beta */\nexport type StandardOptionConfig = {\n  defaultValue?: any;\n  settings?: any;\n  hideFromDefaults?: boolean;\n};\n\n/** @beta */\nexport interface SetFieldConfigOptionsArgs<TFieldConfigOptions = any> {\n  /**\n   * Configuration object of the standard field config properites\n   *\n   * @example\n   * ```typescript\n   * {\n   *   standardOptions: {\n   *     [FieldConfigProperty.Decimals]: {\n   *       defaultValue: 3\n   *     }\n   *   }\n   * }\n   * ```\n   */\n  standardOptions?: Partial<Record<FieldConfigProperty, StandardOptionConfig>>;\n\n  /**\n   * Array of standard field config properties that should not be available in the panel\n   * @example\n   * ```typescript\n   * {\n   *   disableStandardOptions: [FieldConfigProperty.Min, FieldConfigProperty.Max, FieldConfigProperty.Unit]\n   * }\n   * ```\n   */\n  disableStandardOptions?: FieldConfigProperty[];\n\n  /**\n   * Function that allows custom field config properties definition.\n   *\n   * @param builder\n   *\n   * @example\n   * ```typescript\n   * useCustomConfig: builder => {\n   *   builder\n   *    .addNumberInput({\n   *      id: 'shapeBorderWidth',\n   *      name: 'Border width',\n   *      description: 'Border width of the shape',\n   *      settings: {\n   *        min: 1,\n   *        max: 5,\n   *      },\n   *    })\n   *    .addSelect({\n   *      id: 'displayMode',\n   *      name: 'Display mode',\n   *      description: 'How the shape shout be rendered'\n   *      settings: {\n   *      options: [{value: 'fill', label: 'Fill' }, {value: 'transparent', label: 'Transparent }]\n   *    },\n   *  })\n   * }\n   * ```\n   */\n  useCustomConfig?: (builder: FieldConfigEditorBuilder<TFieldConfigOptions>) => void;\n}\n\nexport type PanelOptionsSupplier<TOptions> = (\n  builder: PanelOptionsEditorBuilder<TOptions>,\n  context: StandardEditorContext<TOptions>\n) => void;\n\nexport class PanelPlugin<\n  TOptions = any,\n  TFieldConfigOptions extends object = {},\n> extends GrafanaPlugin<PanelPluginMeta> {\n  private _defaults?: TOptions;\n  private _fieldConfigDefaults: FieldConfigSource<TFieldConfigOptions> = {\n    defaults: {},\n    overrides: [],\n  };\n\n  private _fieldConfigRegistry?: FieldConfigOptionsRegistry;\n  private _initConfigRegistry = () => {\n    return new FieldConfigOptionsRegistry();\n  };\n\n  private optionsSupplier?: PanelOptionsSupplier<TOptions>;\n  private suggestionsSupplier?: VisualizationSuggestionsSupplier;\n\n  panel: ComponentType<PanelProps<TOptions>> | null;\n  editor?: ComponentClass<PanelEditorProps<TOptions>>;\n  onPanelMigration?: PanelMigrationHandler<TOptions>;\n  shouldMigrate?: (panel: ComponentType<PanelProps<TOptions>> | null) => boolean;\n  onPanelTypeChanged?: PanelTypeChangedHandler<TOptions>;\n  noPadding?: boolean;\n  dataSupport: PanelPluginDataSupport = {\n    annotations: false,\n    alertStates: false,\n  };\n\n  /**\n   * Legacy angular ctrl. If this exists it will be used instead of the panel\n   */\n  angularPanelCtrl?: any;\n\n  constructor(panel: ComponentType<PanelProps<TOptions>> | null) {\n    super();\n    this.panel = panel;\n  }\n\n  get defaults() {\n    let result = this._defaults || {};\n\n    if (!this._defaults && this.optionsSupplier) {\n      const builder = new PanelOptionsEditorBuilder<TOptions>();\n      this.optionsSupplier(builder, { data: [] });\n      for (const item of builder.getItems()) {\n        if (item.defaultValue != null) {\n          set(result, item.path, item.defaultValue);\n        }\n      }\n    }\n\n    return result;\n  }\n\n  get fieldConfigDefaults(): FieldConfigSource<TFieldConfigOptions> {\n    const configDefaults = this._fieldConfigDefaults.defaults;\n    configDefaults.custom = {} as TFieldConfigOptions;\n\n    for (const option of this.fieldConfigRegistry.list()) {\n      if (option.defaultValue === undefined) {\n        continue;\n      }\n\n      set(configDefaults, option.id, option.defaultValue);\n    }\n\n    return {\n      defaults: {\n        ...configDefaults,\n      },\n      overrides: this._fieldConfigDefaults.overrides,\n    };\n  }\n\n  /**\n   * @deprecated setDefaults is deprecated in favor of setPanelOptions\n   */\n  setDefaults(defaults: TOptions) {\n    deprecationWarning('PanelPlugin', 'setDefaults', 'setPanelOptions');\n    this._defaults = defaults;\n    return this;\n  }\n\n  get fieldConfigRegistry() {\n    if (!this._fieldConfigRegistry) {\n      this._fieldConfigRegistry = this._initConfigRegistry();\n    }\n\n    return this._fieldConfigRegistry;\n  }\n\n  /**\n   * @deprecated setEditor is deprecated in favor of setPanelOptions\n   */\n  setEditor(editor: ComponentClass<PanelEditorProps<TOptions>>) {\n    deprecationWarning('PanelPlugin', 'setEditor', 'setPanelOptions');\n    this.editor = editor;\n    return this;\n  }\n\n  setNoPadding() {\n    this.noPadding = true;\n    return this;\n  }\n\n  /**\n   * This function is called before the panel first loads if\n   * the current version is different than the version that was saved.\n   *\n   * If shouldMigrate is provided, it will be called regardless of whether\n   * the version has changed, and can explicitly opt into running the\n   * migration handler\n   *\n   * This is a good place to support any changes to the options model\n   */\n  setMigrationHandler(\n    handler: PanelMigrationHandler<TOptions>,\n    shouldMigrate?: (panel: ComponentType<PanelProps<TOptions>> | null) => boolean\n  ) {\n    this.onPanelMigration = handler;\n    this.shouldMigrate = shouldMigrate;\n    return this;\n  }\n\n  /**\n   * This function is called when the visualization was changed. This\n   * passes in the panel model for previous visualisation options inspection\n   * and panel model updates.\n   *\n   * This is useful for supporting PanelModel API updates when changing\n   * between Angular and React panels.\n   */\n  setPanelChangeHandler(handler: PanelTypeChangedHandler) {\n    this.onPanelTypeChanged = handler;\n    return this;\n  }\n\n  /**\n   * Enables panel options editor creation\n   *\n   * @example\n   * ```typescript\n   *\n   * import { ShapePanel } from './ShapePanel';\n   *\n   * interface ShapePanelOptions {}\n   *\n   * export const plugin = new PanelPlugin<ShapePanelOptions>(ShapePanel)\n   *   .setPanelOptions(builder => {\n   *     builder\n   *       .addSelect({\n   *         id: 'shape',\n   *         name: 'Shape',\n   *         description: 'Select shape to render'\n   *         settings: {\n   *           options: [\n   *             {value: 'circle', label: 'Circle' },\n   *             {value: 'square', label: 'Square },\n   *             {value: 'triangle', label: 'Triangle }\n   *            ]\n   *         },\n   *       })\n   *   })\n   * ```\n   *\n   * @public\n   **/\n  setPanelOptions(builder: PanelOptionsSupplier<TOptions>) {\n    // builder is applied lazily when options UI is created\n    this.optionsSupplier = builder;\n    return this;\n  }\n\n  /**\n   * This is used while building the panel options editor.\n   *\n   * @internal\n   */\n  getPanelOptionsSupplier(): PanelOptionsSupplier<TOptions> {\n    return this.optionsSupplier ?? (() => {});\n  }\n\n  /**\n   * Tells Grafana if the plugin should subscribe to annotation and alertState results.\n   *\n   * @example\n   * ```typescript\n   *\n   * import { ShapePanel } from './ShapePanel';\n   *\n   * interface ShapePanelOptions {}\n   *\n   * export const plugin = new PanelPlugin<ShapePanelOptions>(ShapePanel)\n   *     .useFieldConfig({})\n   *     ...\n   *     ...\n   *     .setDataSupport({\n   *       annotations: true,\n   *       alertStates: true,\n   *     });\n   * ```\n   *\n   * @public\n   **/\n  setDataSupport(support: Partial<PanelPluginDataSupport>) {\n    this.dataSupport = { ...this.dataSupport, ...support };\n    return this;\n  }\n\n  /**\n   * Allows specifying which standard field config options panel should use and defining default values\n   *\n   * @example\n   * ```typescript\n   *\n   * import { ShapePanel } from './ShapePanel';\n   *\n   * interface ShapePanelOptions {}\n   *\n   * // when plugin should use all standard options\n   * export const plugin = new PanelPlugin<ShapePanelOptions>(ShapePanel)\n   *  .useFieldConfig();\n   *\n   * // when plugin should only display specific standard options\n   * // note, that options will be displayed in the order they are provided\n   * export const plugin = new PanelPlugin<ShapePanelOptions>(ShapePanel)\n   *  .useFieldConfig({\n   *    standardOptions: [FieldConfigProperty.Min, FieldConfigProperty.Max]\n   *   });\n   *\n   * // when standard option's default value needs to be provided\n   * export const plugin = new PanelPlugin<ShapePanelOptions>(ShapePanel)\n   *  .useFieldConfig({\n   *    standardOptions: [FieldConfigProperty.Min, FieldConfigProperty.Max],\n   *    standardOptionsDefaults: {\n   *      [FieldConfigProperty.Min]: 20,\n   *      [FieldConfigProperty.Max]: 100\n   *    }\n   *  });\n   *\n   * // when custom field config options needs to be provided\n   * export const plugin = new PanelPlugin<ShapePanelOptions>(ShapePanel)\n   *  .useFieldConfig({\n   *    useCustomConfig: builder => {\n   *      builder\n   *       .addNumberInput({\n   *         id: 'shapeBorderWidth',\n   *         name: 'Border width',\n   *         description: 'Border width of the shape',\n   *         settings: {\n   *           min: 1,\n   *           max: 5,\n   *         },\n   *       })\n   *       .addSelect({\n   *         id: 'displayMode',\n   *         name: 'Display mode',\n   *         description: 'How the shape shout be rendered'\n   *         settings: {\n   *         options: [{value: 'fill', label: 'Fill' }, {value: 'transparent', label: 'Transparent }]\n   *       },\n   *     })\n   *   },\n   *  });\n   *\n   * ```\n   *\n   * @public\n   */\n  useFieldConfig(config: SetFieldConfigOptionsArgs<TFieldConfigOptions> = {}) {\n    // builder is applied lazily when custom field configs are accessed\n    this._initConfigRegistry = () => createFieldConfigRegistry(config, this.meta.name);\n\n    return this;\n  }\n\n  /**\n   * Sets function that can return visualization examples and suggestions.\n   * @alpha\n   */\n  setSuggestionsSupplier(supplier: VisualizationSuggestionsSupplier) {\n    this.suggestionsSupplier = supplier;\n    return this;\n  }\n\n  /**\n   * Returns the suggestions supplier\n   * @alpha\n   */\n  getSuggestionsSupplier(): VisualizationSuggestionsSupplier | undefined {\n    return this.suggestionsSupplier;\n  }\n\n  hasPluginId(pluginId: string) {\n    return this.meta.id === pluginId;\n  }\n}\n","import { ComponentType } from 'react';\n\nimport { FieldConfigOptionsRegistry } from '../field/FieldConfigOptionsRegistry';\nimport { StandardEditorContext, StandardEditorProps } from '../field/standardFieldConfigEditorRegistry';\nimport { GrafanaTheme2 } from '../themes/types';\n\nimport { OptionsEditorItem } from './OptionsUIRegistryBuilder';\nimport { ScopedVars } from './ScopedVars';\nimport { DataFrame, Field, FieldConfig, ValueLinkConfig } from './dataFrame';\nimport { DataLink, LinkModel } from './dataLink';\nimport { OptionEditorConfig } from './options';\nimport { InterpolateFunction } from './panel';\nimport { TimeZone } from './time';\nimport { MatcherConfig } from './transformations';\n\nexport interface DynamicConfigValue {\n  id: string;\n  value?: any;\n}\n\nexport interface ConfigOverrideRule {\n  matcher: MatcherConfig;\n  properties: DynamicConfigValue[];\n}\n\n/**\n * Describes config override rules created when interacting with Grafana.\n *\n * @internal\n */\nexport interface SystemConfigOverrideRule extends ConfigOverrideRule {\n  __systemRef: string;\n}\n\n/**\n * Guard functionality to check if an override rule is of type {@link SystemConfigOverrideRule}.\n * It will only return true if the {@link SystemConfigOverrideRule} has the passed systemRef.\n *\n * @param ref system override reference\n * @internal\n */\nexport function isSystemOverrideWithRef<T extends SystemConfigOverrideRule>(ref: string) {\n  return (override: ConfigOverrideRule): override is T => {\n    return '__systemRef' in override && override.__systemRef === ref;\n  };\n}\n\n/**\n * Guard functionality to check if an override rule is of type {@link SystemConfigOverrideRule}.\n * It will return true if the {@link SystemConfigOverrideRule} has any systemRef set.\n *\n * @internal\n */\nexport const isSystemOverride = (override: ConfigOverrideRule): override is SystemConfigOverrideRule => {\n  return '__systemRef' in override && typeof override.__systemRef === 'string';\n};\n\nexport interface FieldConfigSource<TOptions = any> {\n  // Defaults applied to all numeric fields\n  defaults: FieldConfig<TOptions>;\n\n  // Rules to override individual values\n  overrides: ConfigOverrideRule[];\n}\n\nexport interface FieldOverrideContext extends StandardEditorContext<any> {\n  field?: Field;\n  dataFrameIndex?: number; // The index for the selected field frame\n}\n\n/** @deprecated Use StandardEditorProps instead */\nexport type FieldConfigEditorProps<TValue, TSettings extends {}> = StandardEditorProps<TValue, TSettings>;\n\n/** @deprecated Use StandardEditorProps instead */\nexport type FieldOverrideEditorProps<TValue, TSettings extends {}> = StandardEditorProps<TValue, TSettings>;\n\nexport interface FieldConfigEditorConfig<TOptions, TSettings = any, TValue = any>\n  extends OptionEditorConfig<TOptions, TSettings, TValue> {\n  /**\n   * Function that allows specifying whether or not this field config should apply to a given field.\n   * @param field\n   */\n  shouldApply?: (field: Field) => boolean;\n\n  /** Indicates that option shoukd not be available in the Field config tab */\n  hideFromDefaults?: boolean;\n\n  /** Indicates that option should not be available for the overrides */\n  hideFromOverrides?: boolean;\n}\n\nexport interface FieldConfigPropertyItem<TOptions = any, TValue = any, TSettings extends {} = any>\n  extends OptionsEditorItem<TOptions, TSettings, StandardEditorProps<TValue, TSettings>, TValue> {\n  // An editor that can be filled in with context info (template variables etc)\n  override: ComponentType<StandardEditorProps<TValue, TSettings>>;\n\n  /** true for plugin field config properties */\n  isCustom?: boolean;\n\n  /** Hides option from the Field config tab */\n  hideFromDefaults?: boolean;\n\n  /** Indicates that option should not be available for the overrides */\n  hideFromOverrides?: boolean;\n\n  /** Convert the override value to a well typed value */\n  process: (value: any, context: FieldOverrideContext, settings?: TSettings) => TValue | undefined | null;\n\n  /** Checks if field should be processed */\n  shouldApply: (field: Field) => boolean;\n}\n\nexport type DataLinkPostProcessorOptions = {\n  frame: DataFrame;\n  field: Field;\n  dataLinkScopedVars: ScopedVars;\n  replaceVariables: InterpolateFunction;\n  timeZone?: TimeZone;\n  config: ValueLinkConfig;\n  link: DataLink;\n  linkModel: LinkModel;\n};\n\nexport type DataLinkPostProcessor = (options: DataLinkPostProcessorOptions) => LinkModel<Field> | undefined;\n\nexport interface ApplyFieldOverrideOptions {\n  data?: DataFrame[];\n  fieldConfig: FieldConfigSource;\n  fieldConfigRegistry?: FieldConfigOptionsRegistry;\n  replaceVariables: InterpolateFunction;\n  theme: GrafanaTheme2;\n  timeZone?: TimeZone;\n  dataLinkPostProcessor?: DataLinkPostProcessor;\n}\n\nexport enum FieldConfigProperty {\n  Unit = 'unit',\n  Min = 'min',\n  Max = 'max',\n  FieldMinMax = 'fieldMinMax',\n  Decimals = 'decimals',\n  DisplayName = 'displayName',\n  NoValue = 'noValue',\n  Thresholds = 'thresholds',\n  Mappings = 'mappings',\n  Links = 'links',\n  Actions = 'actions',\n  Color = 'color',\n  Filterable = 'filterable',\n}\n","import { mergeWith, isArray, isObject, unset, isEqual } from 'lodash';\n\nimport { FieldConfigOptionsRegistry } from '../field/FieldConfigOptionsRegistry';\nimport { fieldColorModeRegistry } from '../field/fieldColor';\nimport { FieldColorConfigSettings } from '../field/overrides/processors';\nimport { FieldColorModeId } from '../types/fieldColor';\nimport {\n  ConfigOverrideRule,\n  DynamicConfigValue,\n  FieldConfigProperty,\n  FieldConfigSource,\n} from '../types/fieldOverrides';\nimport { ThresholdsConfig, ThresholdsMode } from '../types/thresholds';\n\nimport { PanelPlugin } from './PanelPlugin';\n\ninterface Props {\n  plugin: PanelPlugin;\n  currentFieldConfig: FieldConfigSource;\n  currentOptions: Record<string, unknown>;\n  isAfterPluginChange: boolean;\n}\n\nexport interface OptionDefaults {\n  options: Record<string, unknown>;\n  fieldConfig: FieldConfigSource;\n}\n\n/**\n * This will return the panel options with defaults applied.\n * Used internally, not intended for external use.\n * @internal\n */\nexport function getPanelOptionsWithDefaults({\n  plugin,\n  currentOptions,\n  currentFieldConfig,\n  isAfterPluginChange,\n}: Props): OptionDefaults {\n  const optionsWithDefaults = mergeWith({}, plugin.defaults, currentOptions || {}, (objValue, srcValue) => {\n    if (isArray(srcValue)) {\n      return srcValue;\n    }\n    return;\n  });\n\n  const fieldConfigWithDefaults = applyFieldConfigDefaults(currentFieldConfig, plugin);\n  const fieldConfigWithOptimalColorMode = adaptFieldColorMode(plugin, fieldConfigWithDefaults, isAfterPluginChange);\n\n  return { options: optionsWithDefaults, fieldConfig: fieldConfigWithOptimalColorMode };\n}\n\nfunction applyFieldConfigDefaults(existingFieldConfig: FieldConfigSource, plugin: PanelPlugin): FieldConfigSource {\n  const pluginDefaults = plugin.fieldConfigDefaults;\n\n  const result: FieldConfigSource = {\n    defaults: mergeWith(\n      {},\n      pluginDefaults.defaults,\n      existingFieldConfig ? existingFieldConfig.defaults : {},\n      (objValue, srcValue) => {\n        if (isArray(srcValue)) {\n          return srcValue;\n        }\n        return;\n      }\n    ),\n    overrides: existingFieldConfig?.overrides ?? [],\n  };\n\n  cleanProperties(result.defaults, '', plugin.fieldConfigRegistry);\n\n  // Thresholds base values are null in JSON but need to be converted to -Infinity\n  if (result.defaults.thresholds) {\n    fixThresholds(result.defaults.thresholds);\n  }\n\n  // Filter out overrides for properties that cannot be found in registry\n  result.overrides = filterFieldConfigOverrides(result.overrides, (prop) => {\n    return plugin.fieldConfigRegistry.getIfExists(prop.id) !== undefined;\n  });\n\n  for (const override of result.overrides) {\n    for (const property of override.properties) {\n      if (property.id === 'thresholds') {\n        fixThresholds(property.value);\n      }\n    }\n  }\n\n  return result;\n}\n\n/**\n * Used internally, not intended for external use.\n * @internal\n */\nexport function filterFieldConfigOverrides(\n  overrides: ConfigOverrideRule[],\n  condition: (value: DynamicConfigValue) => boolean\n): ConfigOverrideRule[] {\n  return overrides.map((x) => {\n    const properties = x.properties.filter(condition);\n\n    return {\n      ...x,\n      properties,\n    };\n  });\n}\n\nfunction cleanProperties(obj: object, parentPath: string, fieldConfigRegistry: FieldConfigOptionsRegistry) {\n  let found = false;\n\n  for (const [propName, value] of Object.entries(obj)) {\n    const fullPath = `${parentPath}${propName}`;\n    const existsInRegistry = !!fieldConfigRegistry.getIfExists(fullPath);\n\n    // need to check early here as some standard properties have nested properies\n    if (existsInRegistry) {\n      found = true;\n      continue;\n    }\n\n    if (isArray(value) || !isObject(value)) {\n      if (!existsInRegistry) {\n        unset(obj, propName);\n      }\n    } else {\n      const childPropFound = cleanProperties(value, `${fullPath}.`, fieldConfigRegistry);\n      // If no child props found unset the main object\n      if (!childPropFound) {\n        unset(obj, propName);\n      }\n    }\n  }\n\n  return found;\n}\n\nfunction adaptFieldColorMode(\n  plugin: PanelPlugin,\n  fieldConfig: FieldConfigSource,\n  isAfterPluginChange: boolean\n): FieldConfigSource {\n  if (!isAfterPluginChange) {\n    return fieldConfig;\n  }\n\n  // adjust to prefered field color setting if needed\n  const color = plugin.fieldConfigRegistry.getIfExists(FieldConfigProperty.Color);\n\n  if (color && color.settings) {\n    const colorSettings: FieldColorConfigSettings = color.settings;\n    const mode = fieldColorModeRegistry.getIfExists(fieldConfig.defaults.color?.mode);\n\n    // When no support fo value colors, use classic palette\n    if (!colorSettings.byValueSupport) {\n      if (!mode || mode.isByValue) {\n        fieldConfig.defaults.color = { mode: FieldColorModeId.PaletteClassic };\n        return fieldConfig;\n      }\n    }\n\n    // When supporting value colors and prefering thresholds, use Thresholds mode.\n    // Otherwise keep current mode\n    if (colorSettings.byValueSupport && colorSettings.preferThresholdsMode && mode?.id !== FieldColorModeId.Fixed) {\n      if (!mode || !mode.isByValue) {\n        fieldConfig.defaults.color = { mode: FieldColorModeId.Thresholds };\n        return fieldConfig;\n      }\n    }\n\n    // If panel support bySeries then we should default to that when switching to this panel as that is most likely\n    // what users will expect. Example scenario a user who has a graph panel (time series) and switches to Gauge and\n    // then back to time series we want the graph panel color mode to reset to classic palette and not preserve the\n    // Gauge prefered thresholds mode.\n    if (colorSettings.bySeriesSupport && mode?.isByValue) {\n      fieldConfig.defaults.color = { mode: FieldColorModeId.PaletteClassic };\n      return fieldConfig;\n    }\n  }\n  return fieldConfig;\n}\n\nfunction fixThresholds(thresholds: ThresholdsConfig) {\n  if (!thresholds.mode) {\n    thresholds.mode = ThresholdsMode.Absolute;\n  }\n\n  if (!thresholds.steps) {\n    thresholds.steps = [];\n  } else if (thresholds.steps.length) {\n    // First value is always -Infinity\n    // JSON saves it as null\n    thresholds.steps[0].value = -Infinity;\n  }\n}\n\n/**\n * Used internally, not intended for external use.\n * @internal\n */\nexport function restoreCustomOverrideRules(current: FieldConfigSource, old: FieldConfigSource): FieldConfigSource {\n  const result = {\n    defaults: {\n      ...current.defaults,\n      custom: old.defaults.custom,\n    },\n    overrides: [...current.overrides],\n  };\n\n  for (const override of old.overrides) {\n    for (const prop of override.properties) {\n      if (isCustomFieldProp(prop)) {\n        const currentOverride = result.overrides.find((o) => isEqual(o.matcher, override.matcher));\n        if (currentOverride) {\n          if (currentOverride !== override) {\n            currentOverride.properties.push(prop);\n          }\n        } else {\n          result.overrides.push(override);\n        }\n      }\n    }\n  }\n\n  return result;\n}\n\n/**\n * Used internally, not intended for external use.\n * @internal\n */\nexport function isCustomFieldProp(prop: DynamicConfigValue): boolean {\n  return prop.id.startsWith('custom.');\n}\n\n/**\n * Used internally, not intended for external use.\n * @internal\n */\nexport function isStandardFieldProp(prop: DynamicConfigValue): boolean {\n  return !isCustomFieldProp(prop);\n}\n","import { createContext } from 'react';\n\nimport { DataSourceInstanceSettings } from '../../types/datasource';\nimport { PluginMeta } from '../../types/plugin';\n\nexport interface PluginContextType {\n  meta: PluginMeta;\n}\n\nexport interface DataSourcePluginContextType extends PluginContextType {\n  instanceSettings: DataSourceInstanceSettings;\n}\n\nexport const Context = createContext<PluginContextType | undefined>(undefined);\n","import { PropsWithChildren, ReactElement } from 'react';\n\nimport { PluginMeta } from '../../types/plugin';\n\nimport { Context } from './PluginContext';\n\nexport type PluginContextProviderProps = {\n  meta: PluginMeta;\n};\n\nexport function PluginContextProvider(props: PropsWithChildren<PluginContextProviderProps>): ReactElement {\n  const { children, ...rest } = props;\n  return <Context.Provider value={rest}>{children}</Context.Provider>;\n}\n","import { PropsWithChildren, ReactElement, useMemo } from 'react';\n\nimport { DataSourceInstanceSettings } from '../../types/datasource';\n\nimport { Context, DataSourcePluginContextType } from './PluginContext';\n\nexport type DataSourcePluginContextProviderProps = {\n  instanceSettings: DataSourceInstanceSettings;\n};\n\nexport function DataSourcePluginContextProvider(\n  props: PropsWithChildren<DataSourcePluginContextProviderProps>\n): ReactElement {\n  const { children, instanceSettings } = props;\n  const value: DataSourcePluginContextType = useMemo(() => {\n    return { instanceSettings, meta: instanceSettings.meta };\n  }, [instanceSettings]);\n\n  return <Context.Provider value={value}>{children}</Context.Provider>;\n}\n","import { useContext } from 'react';\n\nimport { Context, PluginContextType } from './PluginContext';\n\nexport function usePluginContext(): PluginContextType | null {\n  const context = useContext(Context);\n\n  // The extensions hooks (e.g. `usePluginLinks()`) are using this hook to check\n  // if they are inside a plugin or not (core Grafana), so we should be able to return an empty state as well (`null`).\n  if (!context) {\n    return null;\n  }\n\n  return context;\n}\n","import { type DataSourcePluginContextType, type PluginContextType } from './PluginContext';\n\nexport function isDataSourcePluginContext(context: PluginContextType): context is DataSourcePluginContextType {\n  return 'instanceSettings' in context && 'meta' in context;\n}\n","import { PluginSignatureStatus } from './plugin';\n\n/**\n * Utility function to check if a plugin is unsigned.\n *\n * @param signature - the plugin meta signature\n * @internal\n */\nexport function isUnsignedPluginSignature(signature?: PluginSignatureStatus) {\n  return signature && signature !== PluginSignatureStatus.valid && signature !== PluginSignatureStatus.internal;\n}\n","export const availableIconsIndex = {\n  google: true,\n  microsoft: true,\n  github: true,\n  gitlab: true,\n  okta: true,\n  discord: true,\n  hipchat: true,\n  amazon: true,\n  'google-hangouts-alt': true,\n  pagerduty: true,\n  line: true,\n  anchor: true,\n  'adjust-circle': true,\n  'angle-double-down': true,\n  'angle-double-right': true,\n  'angle-double-left': true,\n  'angle-double-up': true,\n  'angle-down': true,\n  'angle-left': true,\n  'angle-right': true,\n  'angle-up': true,\n  'align-left': true,\n  'align-right': true,\n  'api-endpoint': true,\n  'application-observability': true,\n  apps: true,\n  'archive-alt': true,\n  arrow: true,\n  'arrow-down': true,\n  'arrow-from-right': true,\n  'arrow-left': true,\n  'arrow-random': true,\n  'arrow-right': true,\n  'arrow-to-right': true,\n  'arrow-up': true,\n  'arrows-h': true,\n  'arrows-v': true,\n  asserts: true,\n  'expand-arrows': true,\n  'expand-arrows-alt': true,\n  at: true,\n  ai: true,\n  backward: true,\n  bars: true,\n  bell: true,\n  'bell-slash': true,\n  bolt: true,\n  book: true,\n  bookmark: true,\n  'book-open': true,\n  'brackets-curly': true,\n  'browser-alt': true,\n  bug: true,\n  building: true,\n  'calculator-alt': true,\n  'calendar-alt': true,\n  'calendar-slash': true,\n  camera: true,\n  capture: true,\n  'channel-add': true,\n  'chart-line': true,\n  check: true,\n  'check-circle': true,\n  'check-square': true,\n  circle: true,\n  'circle-mono': true,\n  'clipboard-alt': true,\n  'clock-nine': true,\n  cloud: true,\n  'cloud-download': true,\n  'cloud-upload': true,\n  'code-branch': true,\n  cog: true,\n  columns: true,\n  'comment-alt': true,\n  'comment-alt-message': true,\n  'comment-alt-share': true,\n  'comments-alt': true,\n  compass: true,\n  'compress-arrows': true,\n  copy: true,\n  'corner-down-right-alt': true,\n  'create-dashboard': true,\n  'credit-card': true,\n  crosshair: true,\n  cube: true,\n  dashboard: true,\n  database: true,\n  'dice-three': true,\n  docker: true,\n  'document-info': true,\n  'document-layout-left': true,\n  'download-alt': true,\n  draggabledots: true,\n  drilldown: true,\n  edit: true,\n  'ellipsis-v': true,\n  enter: true,\n  envelope: true,\n  'exchange-alt': true,\n  'exclamation-triangle': true,\n  'exclamation-circle': true,\n  exclamation: true,\n  'external-link-alt': true,\n  eye: true,\n  'eye-slash': true,\n  'ellipsis-h': true,\n  /* @deprecated, use 'spinner' instead */\n  'fa fa-spinner': true,\n  favorite: true,\n  'file-alt': true,\n  'file-blank': true,\n  'file-copy-alt': true,\n  'file-download': true,\n  'file-edit-alt': true,\n  'file-export': true,\n  'file-landscape-alt': true,\n  filter: true,\n  flip: true,\n  folder: true,\n  font: true,\n  fire: true,\n  'folder-open': true,\n  'folder-plus': true,\n  'folder-upload': true,\n  forward: true,\n  'frontend-observability': true,\n  'gf-bar-alignment-after': true,\n  'gf-bar-alignment-before': true,\n  'gf-bar-alignment-center': true,\n  'gf-glue': true,\n  'gf-grid': true,\n  'gf-interpolation-linear': true,\n  'gf-interpolation-smooth': true,\n  'gf-interpolation-step-after': true,\n  'gf-interpolation-step-before': true,\n  'gf-landscape': true,\n  'gf-layout-simple': true,\n  'gf-logs': true,\n  'gf-ml': true,\n  'gf-movepane-left': true,\n  'gf-movepane-right': true,\n  'gf-portrait': true,\n  'gf-service-account': true,\n  'gf-show-context': true,\n  'gf-pin': true,\n  'gf-prometheus': true,\n  'gf-traces': true,\n  globe: true,\n  grafana: true,\n  'graph-bar': true,\n  heart: true,\n  'heart-rate': true,\n  'heart-break': true,\n  history: true,\n  'history-alt': true,\n  home: true,\n  'home-alt': true,\n  'horizontal-align-center': true,\n  'horizontal-align-left': true,\n  'horizontal-align-right': true,\n  hourglass: true,\n  import: true,\n  info: true,\n  'info-circle': true,\n  k6: true,\n  'k6-rounded': true,\n  'key-skeleton-alt': true,\n  keyboard: true,\n  kubernetes: true,\n  'layer-group': true,\n  'layers-alt': true,\n  layers: true,\n  'layers-slash': true,\n  'legend-hide': true,\n  'legend-show': true,\n  'library-panel': true,\n  'line-alt': true,\n  link: true,\n  'link-broken': true,\n  'list-ui-alt': true,\n  'list-ul': true,\n  'list-ol': true,\n  lock: true,\n  'map-marker': true,\n  'map-marker-plus': true,\n  'map-marker-minus': true,\n  message: true,\n  minus: true,\n  'minus-circle': true,\n  'mobile-android': true,\n  monitor: true,\n  'multi-step': true,\n  palette: true,\n  'panel-add': true,\n  paragraph: true,\n  'pathfinder-unite': true,\n  pause: true,\n  'pause-circle': true,\n  pen: true,\n  percentage: true,\n  play: true,\n  plug: true,\n  plus: true,\n  'plus-circle': true,\n  'plus-square': true,\n  power: true,\n  'presentation-play': true,\n  process: true,\n  'question-circle': true,\n  'record-audio': true,\n  repeat: true,\n  rocket: true,\n  'ruler-combined': true,\n  save: true,\n  search: true,\n  'search-minus': true,\n  'search-plus': true,\n  'share-alt': true,\n  shield: true,\n  'shield-exclamation': true,\n  signal: true,\n  signin: true,\n  signout: true,\n  sitemap: true,\n  slack: true,\n  'sliders-v-alt': true,\n  spinner: true,\n  'sort-amount-down': true,\n  'sort-amount-up': true,\n  'square-shape': true,\n  star: true,\n  'step-backward': true,\n  stopwatch: true,\n  'stopwatch-slash': true,\n  sync: true,\n  'sync-slash': true,\n  table: true,\n  'table-collapse-all': true,\n  'table-expand-all': true,\n  'tag-alt': true,\n  'telegram-alt': true,\n  'text-fields': true,\n  'thumbs-up': true,\n  times: true,\n  'times-circle': true,\n  'toggle-on': true,\n  'toggle-off': true,\n  'trash-alt': true,\n  unarchive: true,\n  unlock: true,\n  upload: true,\n  user: true,\n  ban: true,\n  window: true,\n  'window-grid': true,\n  'users-alt': true,\n  'user-arrows': true,\n  'vertical-align-bottom': true,\n  'vertical-align-center': true,\n  'vertical-align-top': true,\n  'web-section': true,\n  'web-section-alt': true,\n  'wrap-text': true,\n  wrench: true,\n  rss: true,\n  x: true,\n  'add-user': true,\n  attach: true,\n  'dollar-alt': true,\n  'ai-sparkle': true,\n};\n\nexport type IconName = keyof typeof availableIconsIndex;\n\nexport function isIconName(iconName: unknown): iconName is IconName {\n  if (!iconName || typeof iconName !== 'string') {\n    return false;\n  }\n\n  return iconName in availableIconsIndex;\n}\n\nexport function toIconName(iconName: string): IconName | undefined {\n  if (isIconName(iconName)) {\n    return iconName;\n  }\n\n  return undefined;\n}\n","/**\n * @internal\n */\nexport enum AlertState {\n  NoData = 'no_data',\n  Paused = 'paused',\n  Alerting = 'alerting',\n  OK = 'ok',\n  Pending = 'pending',\n  Recovering = 'recovering',\n  Unknown = 'unknown',\n}\n\n/**\n * @internal\n */\nexport interface AlertStateInfo {\n  id: number;\n  dashboardId: number;\n  panelId: number;\n  state: AlertState;\n}\n","import { ComponentType } from 'react';\nimport { Observable } from 'rxjs';\n\nimport {\n  DataQueryRequest,\n  DataQueryResponse,\n  DataSourceApi,\n  DataSourceJsonData,\n  DataSourceOptionsType,\n  DataSourceQueryType,\n  QueryEditorProps,\n} from './datasource';\nimport { DataQuery } from './query';\n\n/**\n * Enum with the different variable support types\n */\nexport enum VariableSupportType {\n  Legacy = 'legacy',\n  Standard = 'standard',\n  Custom = 'custom',\n  Datasource = 'datasource',\n}\n\n/**\n * Base class for VariableSupport classes\n */\nexport abstract class VariableSupportBase<\n  DSType extends DataSourceApi<TQuery, TOptions>,\n  TQuery extends DataQuery = DataSourceQueryType<DSType>,\n  TOptions extends DataSourceJsonData = DataSourceOptionsType<DSType>,\n> {\n  abstract getType(): VariableSupportType;\n\n  /**\n   * Define this method in the config if you want to pre-populate the editor with a default query.\n   */\n  getDefaultQuery?(): Partial<TQuery>;\n}\n\n/**\n * Extend this class in a data source plugin to use the standard query editor for Query variables\n */\nexport abstract class StandardVariableSupport<\n  DSType extends DataSourceApi<TQuery, TOptions>,\n  TQuery extends DataQuery = DataSourceQueryType<DSType>,\n  TOptions extends DataSourceJsonData = DataSourceOptionsType<DSType>,\n> extends VariableSupportBase<DSType, TQuery, TOptions> {\n  getType(): VariableSupportType {\n    return VariableSupportType.Standard;\n  }\n\n  abstract toDataQuery(query: StandardVariableQuery): TQuery;\n  query?(request: DataQueryRequest<TQuery>): Observable<DataQueryResponse>;\n}\n\n/**\n * Extend this class in a data source plugin to use a customized query editor for Query variables\n */\nexport abstract class CustomVariableSupport<\n  DSType extends DataSourceApi<TQuery, TOptions>,\n  VariableQuery extends DataQuery = any,\n  TQuery extends DataQuery = DataSourceQueryType<DSType>,\n  TOptions extends DataSourceJsonData = DataSourceOptionsType<DSType>,\n> extends VariableSupportBase<DSType, TQuery, TOptions> {\n  getType(): VariableSupportType {\n    return VariableSupportType.Custom;\n  }\n\n  abstract editor: ComponentType<QueryEditorProps<DSType, TQuery, TOptions, VariableQuery>>;\n\n  /**\n   * This can return data in various formats as DataQueryResponse allows multiple types. In general though the\n   * assumption is that there will be a string Field or value in an Array of objects that will be taken as the possible\n   * variable values. You can also use this type directly MetricFindValue or just use text/value/expendable fields/keys\n   * in the response.\n   * @param request\n   */\n  abstract query(request: DataQueryRequest<VariableQuery>): Observable<DataQueryResponse>;\n}\n\n/**\n * Extend this class in a data source plugin to use the query editor in the data source plugin for Query variables\n */\nexport abstract class DataSourceVariableSupport<\n  DSType extends DataSourceApi<TQuery, TOptions>,\n  TQuery extends DataQuery = DataSourceQueryType<DSType>,\n  TOptions extends DataSourceJsonData = DataSourceOptionsType<DSType>,\n> extends VariableSupportBase<DSType, TQuery, TOptions> {\n  getType(): VariableSupportType {\n    return VariableSupportType.Datasource;\n  }\n}\n\n/**\n * Defines the standard DatQuery used by data source plugins that implement StandardVariableSupport\n */\nexport interface StandardVariableQuery extends DataQuery {\n  query: string;\n}\n","import { DataHoverPayload } from '../events/common';\nimport { eventFactory } from '../events/eventFactory';\nimport { BusEventBase, BusEventWithPayload } from '../events/types';\n\nimport { DataFrame } from './dataFrame';\nimport { DataQueryError, DataQueryResponseData } from './datasource';\nimport { AngularPanelMenuItem } from './panel';\n\nexport type AlertPayload = [string, string?, string?];\nexport type AlertErrorPayload = [string, (string | Error)?, string?];\n\nexport const AppEvents = {\n  alertSuccess: eventFactory<AlertPayload>('alert-success'),\n  alertWarning: eventFactory<AlertPayload>('alert-warning'),\n  alertError: eventFactory<AlertErrorPayload>('alert-error'),\n  alertInfo: eventFactory<AlertPayload>('alert-info'),\n};\n\nexport const PanelEvents = {\n  refresh: eventFactory('refresh'),\n  componentDidMount: eventFactory('component-did-mount'),\n  dataReceived: eventFactory<DataQueryResponseData[]>('data-received'),\n  dataError: eventFactory<DataQueryError>('data-error'),\n  dataFramesReceived: eventFactory<DataFrame[]>('data-frames-received'),\n  dataSnapshotLoad: eventFactory<DataQueryResponseData[]>('data-snapshot-load'),\n  editModeInitialized: eventFactory('init-edit-mode'),\n  initPanelActions: eventFactory<AngularPanelMenuItem[]>('init-panel-actions'),\n  initialized: eventFactory('panel-initialized'),\n  panelTeardown: eventFactory('panel-teardown'),\n  render: eventFactory<any>('render'),\n};\n\n/** @public */\nexport interface LegacyGraphHoverEventPayload extends DataHoverPayload {\n  pos: any;\n  panel: {\n    id: number;\n  };\n}\n\n/** @alpha */\nexport class LegacyGraphHoverEvent extends BusEventWithPayload<LegacyGraphHoverEventPayload> {\n  static type = 'graph-hover';\n}\n\n/** @alpha */\nexport class LegacyGraphHoverClearEvent extends BusEventBase {\n  static type = 'graph-hover-clear';\n  payload: DataHoverPayload = { point: {} };\n}\n","export interface UserOrgDTO {\n  orgId: number;\n  name: string;\n  role: OrgRole;\n}\n\nexport enum OrgRole {\n  None = 'None',\n  Viewer = 'Viewer',\n  Editor = 'Editor',\n  Admin = 'Admin',\n}\n","import { LoadingState } from './data';\nimport { MetricFindValue } from './datasource';\nimport { DataSourceRef } from './query';\n\nexport type VariableType = TypedVariableModel['type'];\n\n/** @deprecated Use TypedVariableModel instead */\nexport interface VariableModel {\n  type: VariableType;\n  name: string;\n  label?: string;\n}\n\nexport type TypedVariableModel =\n  | QueryVariableModel\n  | AdHocVariableModel\n  | GroupByVariableModel\n  | ConstantVariableModel\n  | DataSourceVariableModel\n  | IntervalVariableModel\n  | TextBoxVariableModel\n  | CustomVariableModel\n  | UserVariableModel\n  | OrgVariableModel\n  | DashboardVariableModel\n  | SnapshotVariableModel;\n\nexport enum VariableRefresh {\n  never, // removed from the UI\n  onDashboardLoad,\n  onTimeRangeChanged,\n}\n\nexport enum VariableSort {\n  disabled,\n  alphabeticalAsc,\n  alphabeticalDesc,\n  numericalAsc,\n  numericalDesc,\n  alphabeticalCaseInsensitiveAsc,\n  alphabeticalCaseInsensitiveDesc,\n  naturalAsc,\n  naturalDesc,\n}\n\nexport enum VariableHide {\n  dontHide,\n  hideLabel,\n  hideVariable,\n}\n\nexport interface AdHocVariableFilter {\n  key: string;\n  operator: string;\n  value: string;\n  values?: string[];\n  /** @deprecated  */\n  condition?: string;\n}\n\nexport interface AdHocVariableModel extends BaseVariableModel {\n  type: 'adhoc';\n  datasource: DataSourceRef | null;\n  filters: AdHocVariableFilter[];\n  /**\n   * Filters that are always applied to the lookup of keys. Not shown in the AdhocFilterBuilder UI.\n   */\n  baseFilters?: AdHocVariableFilter[];\n  /**\n   * Static keys that override any dynamic keys from the datasource.\n   */\n  defaultKeys?: MetricFindValue[];\n  allowCustomValue?: boolean;\n}\n\nexport interface GroupByVariableModel extends VariableWithOptions {\n  type: 'groupby';\n  datasource: DataSourceRef | null;\n  multi: true;\n  allowCustomValue?: boolean;\n}\n\nexport interface VariableOption {\n  selected: boolean;\n  text: string | string[];\n  value: string | string[];\n  isNone?: boolean;\n}\n\nexport interface IntervalVariableModel extends VariableWithOptions {\n  type: 'interval';\n  auto: boolean;\n  auto_min: string;\n  auto_count: number;\n  refresh: VariableRefresh;\n}\n\nexport interface CustomVariableModel extends VariableWithMultiSupport {\n  type: 'custom';\n}\n\nexport interface DataSourceVariableModel extends VariableWithMultiSupport {\n  type: 'datasource';\n  regex: string;\n  refresh: VariableRefresh;\n}\n\nexport interface QueryVariableModel extends VariableWithMultiSupport {\n  type: 'query';\n  datasource: DataSourceRef | null;\n  definition: string;\n  sort: VariableSort;\n  queryValue?: string;\n  query: any;\n  regex: string;\n  refresh: VariableRefresh;\n}\n\nexport interface TextBoxVariableModel extends VariableWithOptions {\n  type: 'textbox';\n  originalQuery: string | null;\n}\n\nexport interface ConstantVariableModel extends VariableWithOptions {\n  type: 'constant';\n}\n\nexport interface VariableWithMultiSupport extends VariableWithOptions {\n  multi: boolean;\n  includeAll: boolean;\n  allValue?: string | null;\n  allowCustomValue?: boolean;\n}\n\nexport interface VariableWithOptions extends BaseVariableModel {\n  current: VariableOption | Record<string, never>;\n  options: VariableOption[];\n  query: string;\n}\n\nexport interface DashboardProps {\n  name: string;\n  uid: string;\n  toString: () => string;\n}\n\nexport interface DashboardVariableModel extends SystemVariable<DashboardProps> {}\n\nexport interface OrgProps {\n  name: string;\n  id: number;\n  toString: () => string;\n}\n\nexport interface OrgVariableModel extends SystemVariable<OrgProps> {}\n\nexport interface UserProps {\n  login: string;\n  id: number;\n  email?: string;\n  toString: () => string;\n}\n\nexport interface UserVariableModel extends SystemVariable<UserProps> {}\n\nexport interface SystemVariable<TProps extends { toString: () => string }> extends BaseVariableModel {\n  type: 'system';\n  current: { value: TProps };\n}\n\nexport interface BaseVariableModel {\n  name: string;\n  label?: string;\n  id: string;\n  type: VariableType;\n  rootStateKey: string | null;\n  global: boolean;\n  hide: VariableHide;\n  skipUrlSync: boolean;\n  index: number;\n  state: LoadingState;\n  error: any | null;\n  description: string | null;\n  usedInRepeat?: boolean;\n}\n\nexport interface SnapshotVariableModel extends VariableWithOptions {\n  type: 'snapshot';\n  query: string;\n}\n","/**\n * The channel id is defined as:\n *\n *   ${scope}/${namespace}/${path}\n *\n * The scope drives how the namespace is used and controlled\n *\n * @alpha\n */\nexport enum LiveChannelScope {\n  DataSource = 'ds', // namespace = data source ID\n  Plugin = 'plugin', // namespace = plugin name (singleton works for apps too)\n  Grafana = 'grafana', // namespace = feature\n  Stream = 'stream', // namespace = id for the managed data stream\n  Watch = 'watch', // namespace = k8s group we will watch\n}\n\n/**\n * The type of data to expect in a given channel\n *\n * @alpha\n */\nexport enum LiveChannelType {\n  DataStream = 'stream', // each message contains a batch of rows that will be appended to previous values\n  DataFrame = 'frame', // each message is an entire data frame and should *replace* previous content\n  JSON = 'json', // arbitrary json message\n}\n\nexport enum LiveChannelConnectionState {\n  /** The connection is not yet established */\n  Pending = 'pending',\n  /** Connected to the channel */\n  Connected = 'connected',\n  /** Connecting to a channel */\n  Connecting = 'connecting',\n  /** Disconnected from the channel.  The channel will reconnect when possible */\n  Disconnected = 'disconnected',\n  /** Was at some point connected, and will not try to reconnect */\n  Shutdown = 'shutdown',\n  /** Channel configuration was invalid and will not connect */\n  Invalid = 'invalid',\n}\n\nexport enum LiveChannelEventType {\n  Status = 'status',\n  Join = 'join',\n  Leave = 'leave',\n  Message = 'message',\n}\n\n/**\n * @alpha -- experimental\n */\nexport interface LiveChannelStatusEvent {\n  type: LiveChannelEventType.Status;\n\n  /**\n   * {scope}/{namespace}/{path}\n   */\n  id: string;\n\n  /**\n   * unix millies timestamp for the last status change\n   */\n  timestamp: number;\n\n  /**\n   * flag if the channel is actively connected to the channel.\n   * This may be false while the connections get established or if the network is lost\n   * As long as the `shutdown` flag is not set, the connection will try to reestablish\n   */\n  state: LiveChannelConnectionState;\n\n  /**\n   * When joining a channel, there may be an initial packet in the subscribe method\n   */\n  message?: any;\n\n  /**\n   * The last error.\n   *\n   * This will remain in the status until a new message is successfully received from the channel\n   */\n  error?: any;\n}\n\nexport interface LiveChannelJoinEvent {\n  type: LiveChannelEventType.Join;\n  user: any; // @alpha -- experimental -- will be filled in when we improve the UI\n}\n\nexport interface LiveChannelLeaveEvent {\n  type: LiveChannelEventType.Leave;\n  user: any; // @alpha -- experimental -- will be filled in when we improve the UI\n}\n\nexport interface LiveChannelMessageEvent<T> {\n  type: LiveChannelEventType.Message;\n  message: T;\n}\n\nexport type LiveChannelEvent<T = any> =\n  | LiveChannelStatusEvent\n  | LiveChannelJoinEvent\n  | LiveChannelLeaveEvent\n  | LiveChannelMessageEvent<T>;\n\nexport function isLiveChannelStatusEvent<T>(evt: LiveChannelEvent<T>): evt is LiveChannelStatusEvent {\n  return evt.type === LiveChannelEventType.Status;\n}\n\nexport function isLiveChannelJoinEvent<T>(evt: LiveChannelEvent<T>): evt is LiveChannelJoinEvent {\n  return evt.type === LiveChannelEventType.Join;\n}\n\nexport function isLiveChannelLeaveEvent<T>(evt: LiveChannelEvent<T>): evt is LiveChannelLeaveEvent {\n  return evt.type === LiveChannelEventType.Leave;\n}\n\nexport function isLiveChannelMessageEvent<T>(evt: LiveChannelEvent<T>): evt is LiveChannelMessageEvent<T> {\n  return evt.type === LiveChannelEventType.Message;\n}\n\n/**\n * @alpha -- experimental\n */\nexport interface LiveChannelPresenceStatus {\n  users: any; // @alpha -- experimental -- will be filled in when we improve the UI\n}\n\n/**\n * @alpha -- experimental\n */\nexport type LiveChannelId = string;\n\n/**\n * @alpha -- experimental\n */\nexport interface LiveChannelAddress {\n  scope: LiveChannelScope;\n  namespace: string; // depends on the scope\n  path: string;\n\n  /**\n   * Additional metadata passed to a channel.  The backend will propagate this JSON object to\n   * each OnSubscribe and RunStream calls.  This value should be constant across multiple requests\n   * to the same channel path\n   */\n  data?: any;\n}\n\n/**\n * Return an address from a string\n *\n * @alpha -- experimental\n */\nexport function parseLiveChannelAddress(id?: string): LiveChannelAddress | undefined {\n  if (id?.length) {\n    let parts = id.trim().split('/');\n    if (parts.length >= 3) {\n      return {\n        scope: parts[0] as LiveChannelScope,\n        namespace: parts[1],\n        path: parts.slice(2).join('/'),\n      };\n    }\n  }\n  return undefined;\n}\n\n/**\n * Check if the address has a scope, namespace, and path\n *\n * @alpha -- experimental\n */\nexport function isValidLiveChannelAddress(addr?: LiveChannelAddress): addr is LiveChannelAddress {\n  return !!(addr?.path && addr.namespace && addr.scope);\n}\n\n/**\n * Convert the address to an explicit channel path\n *\n * @alpha -- experimental\n */\nexport function toLiveChannelId(addr: LiveChannelAddress): LiveChannelId {\n  if (!addr.scope) {\n    return '';\n  }\n  let id: string = addr.scope;\n  if (!addr.namespace) {\n    return id;\n  }\n  id += '/' + addr.namespace;\n  if (!addr.path) {\n    return id;\n  }\n  return id + '/' + addr.path;\n}\n","import * as React from 'react';\n\nimport { DataQuery, DataSourceJsonData } from '@grafana/schema';\n\nimport { ScopedVars } from './ScopedVars';\nimport { DataSourcePluginMeta, DataSourceSettings } from './datasource';\nimport { IconName } from './icon';\nimport { PanelData } from './panel';\nimport { RawTimeRange, TimeZone } from './time';\n\n// Plugin Extensions types\n// ---------------------------------------\n\nexport enum PluginExtensionTypes {\n  link = 'link',\n  component = 'component',\n  function = 'function',\n}\n\ntype PluginExtensionBase = {\n  id: string;\n  type: PluginExtensionTypes;\n  title: string;\n  description: string;\n  pluginId: string;\n};\nexport type PluginExtensionLink = PluginExtensionBase & {\n  type: PluginExtensionTypes.link;\n  path?: string;\n  onClick?: (event?: React.MouseEvent) => void;\n  icon?: IconName;\n  category?: string;\n};\n\nexport type PluginExtensionComponentMeta = Omit<PluginExtensionComponent, 'component'>;\n\nexport type PluginExtensionComponent<Props = {}> = PluginExtensionBase & {\n  type: PluginExtensionTypes.component;\n  component: React.ComponentType<Props>;\n};\n\nexport type ComponentTypeWithExtensionMeta<Props = {}> = React.ComponentType<Props> & {\n  meta: PluginExtensionComponentMeta;\n};\n\nexport type PluginExtensionFunction<Signature = () => void> = PluginExtensionBase & {\n  type: PluginExtensionTypes.function;\n  fn: Signature;\n};\n\nexport type PluginExtension = PluginExtensionLink | PluginExtensionComponent | PluginExtensionFunction;\n\n// Objects used for registering extensions (in app plugins)\n// --------------------------------------------------------\n\ntype PluginExtensionConfigBase = {\n  /**\n   * The title of the link extension\n   */\n  title: string;\n\n  /**\n   * A short description\n   */\n  description?: string;\n};\n\nexport type PluginExtensionAddedComponentConfig<Props = {}> = PluginExtensionConfigBase & {\n  /**\n   * The target extension points where the component will be added\n   */\n  targets: string | string[];\n\n  /**\n   * The title of the component\n   */\n  title: string;\n\n  /**\n   * A short description of the component\n   */\n  description: string;\n\n  /**\n   * The React component that will added to the target extension points\n   */\n  component: React.ComponentType<Props>;\n};\nexport type PluginExtensionAddedFunctionConfig<Signature = unknown> = PluginExtensionConfigBase & {\n  /**\n   * The target extension points where the component will be added\n   */\n  targets: string | string[];\n\n  /**\n   * The function to be executed\n   */\n  fn: Signature;\n};\n\nexport type PluginAddedLinksConfigureFunc<Context extends object> = (context: Readonly<Context> | undefined) =>\n  | Partial<{\n      title: string;\n      description: string;\n      path: string;\n      onClick: (event: React.MouseEvent | undefined, helpers: PluginExtensionEventHelpers<Context>) => void;\n      icon: IconName;\n      category: string;\n    }>\n  | undefined;\n\nexport type PluginExtensionAddedLinkConfig<Context extends object = object> = PluginExtensionConfigBase & {\n  /**\n   * The target extension points where the link will be added\n   */\n  targets: string | string[];\n\n  /** A URL path that will be used as the href for the rendered link extension\n   * (It is optional, because in some cases the action will be handled by the `onClick` handler instead of navigating to a new page)\n   */\n  path?: string;\n\n  /** A URL path that will be used as the href for the rendered link extension\n   * (It is optional, because in some cases the action will be handled by the `onClick` handler instead of navigating to a new page)\n   * path?: string;\n   *\n   * A function that will be called when the link is clicked\n   *  (It is called with the original event object)\n   */\n  onClick?: (event: React.MouseEvent | undefined, helpers: PluginExtensionEventHelpers<Context>) => void;\n\n  // (Optional) A function that can be used to configure the extension dynamically based on the extension point's context\n  configure?: PluginAddedLinksConfigureFunc<Context>;\n\n  // (Optional) A icon that can be displayed in the ui for the extension option.\n  icon?: IconName;\n\n  // (Optional) A category to be used when grouping the options in the ui\n  category?: string;\n};\n\nexport type PluginExtensionExposedComponentConfig<Props = {}> = PluginExtensionConfigBase & {\n  /**\n   * The unique identifier of the component\n   * Shoud be in the format of `<pluginId>/<componentName>/<componentVersion>`. e.g. `myorg-todo-app/todo-list/v1`\n   */\n  id: string;\n\n  /**\n   * The React component that will be exposed to other plugins\n   */\n  component: React.ComponentType<Props>;\n};\n\nexport type PluginExtensionOpenModalOptions = {\n  // The title of the modal\n  title: string;\n  // A React element that will be rendered inside the modal\n  body: React.ElementType<{ onDismiss?: () => void }>;\n  // Width of the modal in pixels or percentage\n  width?: string | number;\n  // Height of the modal in pixels or percentage\n  height?: string | number;\n};\n\nexport type PluginExtensionEventHelpers<Context extends object = object> = {\n  context?: Readonly<Context>;\n  // Opens a modal dialog and renders the provided React component inside it\n  openModal: (options: PluginExtensionOpenModalOptions) => void;\n  /**\n   * @internal\n   * Opens the extension sidebar with the registered component.\n   * @param componentTitle The title of the component to be opened in the sidebar.\n   * @param props The props to be passed to the component.\n   */\n  openSidebar: (componentTitle: string, props?: Record<string, unknown>) => void;\n};\n\n// Extension Points & Contexts\n// --------------------------------------------------------\n\n// Extension Points available in core Grafana\nexport enum PluginExtensionPoints {\n  AlertInstanceAction = 'grafana/alerting/instance/action',\n  AlertingHomePage = 'grafana/alerting/home',\n  AlertingAlertingRuleAction = 'grafana/alerting/alertingrule/action',\n  AlertingRecordingRuleAction = 'grafana/alerting/recordingrule/action',\n  CommandPalette = 'grafana/commandpalette/action',\n  DashboardPanelMenu = 'grafana/dashboard/panel/menu',\n  DataSourceConfig = 'grafana/datasources/config',\n  ExploreToolbarAction = 'grafana/explore/toolbar/action',\n  UserProfileTab = 'grafana/user/profile/tab',\n  TraceViewDetails = 'grafana/traceview/details',\n  QueryEditorRowAdaptiveTelemetryV1 = 'grafana/query-editor-row/adaptivetelemetry/v1',\n}\n\nexport type PluginExtensionPanelContext = {\n  pluginId: string;\n  id: number;\n  title: string;\n  timeRange: RawTimeRange;\n  timeZone: TimeZone;\n  dashboard: Dashboard;\n  targets: DataQuery[];\n  scopedVars?: ScopedVars;\n  data?: PanelData;\n};\n\nexport type PluginExtensionQueryEditorRowAdaptiveTelemetryV1Context = {\n  /** An ordered list of lower-case [a-z]+ string identifiers to provide context clues of where this component is being embedded and how we might want to consider displaying it */\n  contextHints?: string[];\n  query?: DataQuery & { expr?: string };\n};\n\nexport type PluginExtensionDataSourceConfigContext<\n  JsonData extends DataSourceJsonData = DataSourceJsonData,\n  SecureJsonData = {},\n> = {\n  // The current datasource settings\n  dataSource: DataSourceSettings<JsonData>;\n\n  // Meta information about the datasource plugin\n  dataSourceMeta: DataSourcePluginMeta;\n\n  // Testing status\n  testingStatus?: {\n    message?: string | null;\n    status?: string | null;\n  };\n\n  // Can be used to update the `jsonData` field on the datasource\n  // (Only updates the form, it still needs to be saved by the user)\n  setJsonData: (jsonData: JsonData) => void;\n  setSecureJsonData: (secureJsonData: SecureJsonData) => void;\n};\n\nexport type PluginExtensionCommandPaletteContext = {};\n\ntype Dashboard = {\n  uid: string;\n  title: string;\n  tags: string[];\n};\n","export interface ScopeDashboardBindingSpec {\n  dashboard: string;\n  scope: string;\n}\n\nexport interface ScopeDashboardBindingStatus {\n  dashboardTitle: string;\n  groups?: string[];\n}\n\n// TODO: Use Resource from apiserver when we export the types\nexport interface ScopeDashboardBinding {\n  metadata: {\n    name: string;\n  };\n  spec: ScopeDashboardBindingSpec;\n  status: ScopeDashboardBindingStatus;\n}\n\nexport type ScopeFilterOperator = 'equals' | 'not-equals' | 'regex-match' | 'regex-not-match' | 'one-of' | 'not-one-of';\nexport type EqualityOrMultiOperator = Extract<ScopeFilterOperator, 'equals' | 'not-equals' | 'one-of' | 'not-one-of'>;\n\nexport function isEqualityOrMultiOperator(value: string): value is EqualityOrMultiOperator {\n  const operators = new Set(['equals', 'not-equals', 'one-of', 'not-one-of']);\n  return operators.has(value);\n}\n\nexport const scopeFilterOperatorMap: Record<string, ScopeFilterOperator> = {\n  '=': 'equals',\n  '!=': 'not-equals',\n  '=~': 'regex-match',\n  '!~': 'regex-not-match',\n  '=|': 'one-of',\n  '!=|': 'not-one-of',\n};\n\nexport const reverseScopeFilterOperatorMap: Record<ScopeFilterOperator, string> = Object.fromEntries(\n  Object.entries(scopeFilterOperatorMap).map(([symbol, operator]) => [operator, symbol])\n  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n) as Record<ScopeFilterOperator, string>;\n\nexport interface ScopeSpecFilter {\n  key: string;\n  value: string;\n  // values is used for operators that support multiple values (e.g. one-of, not-one-of)\n  values?: string[];\n  operator: ScopeFilterOperator;\n}\n\nexport interface ScopeSpec {\n  title: string;\n  type: string;\n  description: string;\n  category: string;\n  filters: ScopeSpecFilter[];\n}\n\n// TODO: Use Resource from apiserver when we export the types\nexport interface Scope {\n  metadata: {\n    name: string;\n  };\n  spec: ScopeSpec;\n}\n\nexport type ScopeNodeNodeType = 'container' | 'leaf';\nexport type ScopeNodeLinkType = 'scope';\n\nexport interface ScopeNodeSpec {\n  nodeType: ScopeNodeNodeType;\n  title: string;\n\n  description?: string;\n  disableMultiSelect?: boolean;\n  linkId?: string;\n  linkType?: ScopeNodeLinkType;\n}\n\n// TODO: Use Resource from apiserver when we export the types\nexport interface ScopeNode {\n  metadata: {\n    name: string;\n  };\n  spec: ScopeNodeSpec;\n}\n","import { defaultsDeep } from 'lodash';\n\nimport { EventBus } from '../events/types';\nimport { StandardEditorProps } from '../field/standardFieldConfigEditorRegistry';\nimport { Registry } from '../utils/Registry';\n\nimport { OptionsEditorItem } from './OptionsUIRegistryBuilder';\nimport { ScopedVars } from './ScopedVars';\nimport { AlertStateInfo } from './alerts';\nimport { PanelModel } from './dashboard';\nimport { LoadingState, PreferredVisualisationType } from './data';\nimport { DataFrame, FieldType } from './dataFrame';\nimport { DataQueryError, DataQueryRequest, DataQueryTimings } from './datasource';\nimport { FieldConfigSource } from './fieldOverrides';\nimport { IconName } from './icon';\nimport { OptionEditorConfig } from './options';\nimport { PluginMeta } from './plugin';\nimport { AbsoluteTimeRange, TimeRange, TimeZone } from './time';\nimport { DataTransformerConfig } from './transformations';\n\nexport type InterpolateFunction = (value: string, scopedVars?: ScopedVars, format?: string | Function) => string;\n\nexport interface PanelPluginMeta extends PluginMeta {\n  /** Indicates that panel does not issue queries */\n  skipDataQuery?: boolean;\n  /** Indicates that panel should not be available in visualisation picker */\n  hideFromList?: boolean;\n  /** Sort order */\n  sort: number;\n}\n\nexport interface PanelData {\n  /** State of the data (loading, done, error, streaming) */\n  state: LoadingState;\n\n  /** Contains data frames with field overrides applied */\n  series: DataFrame[];\n\n  /**\n   * This is a key that will change when the DataFrame[] structure changes.\n   * The revision is a useful way to know if only data has changed or data+structure\n   */\n  structureRev?: number;\n\n  /** A list of annotation items */\n  annotations?: DataFrame[];\n\n  /**\n   * @internal\n   */\n  alertState?: AlertStateInfo;\n\n  /** Request contains the queries and properties sent to the datasource */\n  request?: DataQueryRequest;\n\n  /** Timing measurements */\n  timings?: DataQueryTimings;\n\n  /** Any query errors */\n  errors?: DataQueryError[];\n  /**\n   * Single error for legacy reasons\n   * @deprecated use errors instead -- will be removed in Grafana 10+\n   */\n  error?: DataQueryError;\n\n  /** Contains the range from the request or a shifted time range if a request uses relative time */\n  timeRange: TimeRange;\n\n  /** traceIds collected during the processing of the requests */\n  traceIds?: string[];\n}\n\nexport interface PanelProps<T = any> {\n  /** Unique ID of the panel within the current dashboard */\n  id: number;\n\n  /** Data available as result of running panel queries, includes dataframes and loading state **/\n  data: PanelData;\n\n  /** Time range of the current dashboard */\n  timeRange: TimeRange;\n\n  /** Time zone of the current dashboard */\n  timeZone: TimeZone;\n\n  /** Panel options set by the user in the panel editor. Includes both default and custom panel options */\n  options: T;\n\n  /** Indicates whether or not panel should be rendered transparent */\n  transparent: boolean;\n\n  /** Current width of the panel in pixels */\n  width: number;\n\n  /** Current height of the panel in pixels */\n  height: number;\n\n  /** Field options configuration. Controls how field values are displayed (e.g., units, min, max, decimals, thresholds) */\n  fieldConfig: FieldConfigSource;\n\n  /** @internal */\n  renderCounter: number;\n\n  /** Panel title */\n  title: string;\n\n  /** Grafana EventBus  */\n  eventBus: EventBus;\n\n  /** Handler for options change. Invoke it to update the panel custom options. */\n  onOptionsChange: (options: T) => void;\n\n  /** Field config change handler. Invoke it to update the panel field config. */\n  onFieldConfigChange: (config: FieldConfigSource) => void;\n\n  /** Template variables interpolation function. Given a string containing template variables, it returns the string with interpolated values. */\n  replaceVariables: InterpolateFunction;\n\n  /** Time range change handler */\n  onChangeTimeRange: (timeRange: AbsoluteTimeRange) => void;\n}\n\nexport interface PanelEditorProps<T = any> {\n  /** Panel options */\n  options: T;\n  /** Panel options change handler */\n  onOptionsChange: (\n    options: T,\n    // callback can be used to run something right after update.\n    callback?: () => void\n  ) => void;\n  /** Result set of panel queries */\n  data?: PanelData;\n}\n\n/**\n * This type mirrors the required properties from PanelModel<TOptions> needed for migration handlers.\n *\n * By maintaining a separate type definition, we ensure that changes to PanelModel\n * that would break third-party migration handlers are caught at compile time,\n * rather than failing silently when third-party code attempts to use an incompatible panel.\n *\n * TOptions must be any to follow the same pattern as PanelModel<TOptions>\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface PanelMigrationModel<TOptions = any> {\n  id: number;\n  type: string;\n  title?: string;\n  options: TOptions;\n  fieldConfig: PanelModel<TOptions>['fieldConfig'];\n  pluginVersion?: string;\n  targets?: PanelModel<TOptions>['targets'];\n}\n\n/**\n * Called when a panel is first loaded with current panel model to migrate panel options if needed.\n * Can return panel options, or a Promise that resolves to panel options for async migrations\n */\nexport type PanelMigrationHandler<TOptions = any> = (\n  panel: PanelMigrationModel<TOptions>\n) => Partial<TOptions> | Promise<Partial<TOptions>>;\n\n/**\n * Called before a panel is initialized. Allows panel inspection for any updates before changing the panel type.\n */\nexport type PanelTypeChangedHandler<TOptions = any> = (\n  panel: PanelModel<TOptions>,\n  prevPluginId: string,\n  prevOptions: Record<string, any>,\n  prevFieldConfig: FieldConfigSource\n) => Partial<TOptions>;\n\nexport type PanelOptionEditorsRegistry = Registry<PanelOptionsEditorItem>;\n\nexport interface PanelOptionsEditorProps<TValue> extends StandardEditorProps<TValue> {}\n\nexport interface PanelOptionsEditorItem<TOptions = any, TValue = any, TSettings = any>\n  extends OptionsEditorItem<TOptions, TSettings, PanelOptionsEditorProps<TValue>, TValue> {}\n\nexport interface PanelOptionsEditorConfig<TOptions, TSettings = any, TValue = any>\n  extends OptionEditorConfig<TOptions, TSettings, TValue> {}\n\n/**\n * @internal\n */\nexport interface PanelMenuItem {\n  type?: 'submenu' | 'divider' | 'group';\n  text: string;\n  iconClassName?: IconName;\n  onClick?: (event: React.MouseEvent) => void;\n  shortcut?: string;\n  href?: string;\n  subMenu?: PanelMenuItem[];\n}\n\n/**\n * @internal\n */\nexport interface AngularPanelMenuItem {\n  click: Function;\n  icon: string;\n  href: string;\n  divider: boolean;\n  text: string;\n  shortcut: string;\n  submenu: any[];\n}\n\nexport enum VizOrientation {\n  Auto = 'auto',\n  Vertical = 'vertical',\n  Horizontal = 'horizontal',\n}\n\nexport interface PanelPluginDataSupport {\n  annotations: boolean;\n  alertStates: boolean;\n}\n\n/**\n * @alpha\n */\nexport interface VisualizationSuggestion<TOptions = any, TFieldConfig = any> {\n  /** Name of suggestion */\n  name: string;\n  /** Description */\n  description?: string;\n  /** Panel plugin id */\n  pluginId: string;\n  /** Panel plugin options */\n  options?: Partial<TOptions>;\n  /** Panel plugin field options */\n  fieldConfig?: FieldConfigSource<Partial<TFieldConfig>>;\n  /** Data transformations */\n  transformations?: DataTransformerConfig[];\n  /** Options for how to render suggestion card */\n  cardOptions?: {\n    /** Tweak for small preview */\n    previewModifier?: (suggestion: VisualizationSuggestion) => void;\n    icon?: string;\n    imgSrc?: string;\n  };\n  /** A value between 0-100 how suitable suggestion is */\n  score?: VisualizationSuggestionScore;\n}\n\n/**\n * @alpha\n */\nexport enum VisualizationSuggestionScore {\n  /** We are pretty sure this is the best possible option */\n  Best = 100,\n  /** Should be a really good option */\n  Good = 70,\n  /** Can be visualized but there are likely better options. If no score is set this score is assumed */\n  OK = 50,\n}\n\n/**\n * @alpha\n */\nexport interface PanelDataSummary {\n  hasData?: boolean;\n  rowCountTotal: number;\n  rowCountMax: number;\n  frameCount: number;\n  fieldCount: number;\n  numberFieldCount: number;\n  timeFieldCount: number;\n  stringFieldCount: number;\n  hasNumberField?: boolean;\n  hasTimeField?: boolean;\n  hasStringField?: boolean;\n  /** The first frame that set's this value */\n  preferredVisualisationType?: PreferredVisualisationType;\n}\n\n/**\n * @alpha\n */\nexport class VisualizationSuggestionsBuilder {\n  /** Current data */\n  data?: PanelData;\n  /** Current panel & options */\n  panel?: PanelModel;\n  /** Summary stats for current data */\n  dataSummary: PanelDataSummary;\n\n  private list: VisualizationSuggestion[] = [];\n\n  constructor(data?: PanelData, panel?: PanelModel) {\n    this.data = data;\n    this.panel = panel;\n    this.dataSummary = this.computeDataSummary();\n  }\n\n  getListAppender<TOptions, TFieldConfig>(defaults: VisualizationSuggestion<TOptions, TFieldConfig>) {\n    return new VisualizationSuggestionsListAppender<TOptions, TFieldConfig>(this.list, defaults);\n  }\n\n  private computeDataSummary() {\n    const frames = this.data?.series || [];\n\n    let numberFieldCount = 0;\n    let timeFieldCount = 0;\n    let stringFieldCount = 0;\n    let rowCountTotal = 0;\n    let rowCountMax = 0;\n    let fieldCount = 0;\n    let preferredVisualisationType: PreferredVisualisationType | undefined;\n\n    for (const frame of frames) {\n      rowCountTotal += frame.length;\n\n      if (frame.meta?.preferredVisualisationType) {\n        preferredVisualisationType = frame.meta.preferredVisualisationType;\n      }\n\n      for (const field of frame.fields) {\n        fieldCount++;\n\n        switch (field.type) {\n          case FieldType.number:\n            numberFieldCount += 1;\n            break;\n          case FieldType.time:\n            timeFieldCount += 1;\n            break;\n          case FieldType.string:\n            stringFieldCount += 1;\n            break;\n        }\n      }\n\n      if (frame.length > rowCountMax) {\n        rowCountMax = frame.length;\n      }\n    }\n\n    return {\n      numberFieldCount,\n      timeFieldCount,\n      stringFieldCount,\n      rowCountTotal,\n      rowCountMax,\n      fieldCount,\n      preferredVisualisationType,\n      frameCount: frames.length,\n      hasData: rowCountTotal > 0,\n      hasTimeField: timeFieldCount > 0,\n      hasNumberField: numberFieldCount > 0,\n      hasStringField: stringFieldCount > 0,\n    };\n  }\n\n  getList() {\n    return this.list;\n  }\n}\n\n/**\n * @alpha\n */\nexport type VisualizationSuggestionsSupplier = {\n  /**\n   * Adds good suitable suggestions for the current data\n   */\n  getSuggestionsForData: (builder: VisualizationSuggestionsBuilder) => void;\n};\n\n/**\n * Helps with typings and defaults\n * @alpha\n */\nexport class VisualizationSuggestionsListAppender<TOptions, TFieldConfig> {\n  constructor(\n    private list: VisualizationSuggestion[],\n    private defaults: VisualizationSuggestion<TOptions, TFieldConfig>\n  ) {}\n\n  append(overrides: Partial<VisualizationSuggestion<TOptions, TFieldConfig>>) {\n    this.list.push(defaultsDeep(overrides, this.defaults));\n  }\n}\n","import { ComponentType } from 'react';\nimport { Observable } from 'rxjs';\n\nimport { DataSourceRef } from '@grafana/schema';\n\nimport { deprecationWarning } from '../utils/deprecationWarning';\nimport { makeClassES5Compatible } from '../utils/makeClassES5Compatible';\nimport { throwIfAngular } from '../utils/throwIfAngular';\n\nimport { ScopedVars } from './ScopedVars';\nimport { WithAccessControlMetadata } from './accesscontrol';\nimport { AnnotationEvent, AnnotationQuery, AnnotationSupport } from './annotations';\nimport { CoreApp } from './app';\nimport { KeyValue, LoadingState, TableData, TimeSeries } from './data';\nimport { DataFrame, DataFrameDTO } from './dataFrame';\nimport { PanelData } from './panel';\nimport { GrafanaPlugin, PluginMeta } from './plugin';\nimport { DataQuery } from './query';\nimport { Scope } from './scopes';\nimport { AdHocVariableFilter } from './templateVars';\nimport { RawTimeRange, TimeRange } from './time';\nimport { CustomVariableSupport, DataSourceVariableSupport, StandardVariableSupport } from './variables';\n\nexport interface DataSourcePluginOptionsEditorProps<\n  JSONData extends DataSourceJsonData = DataSourceJsonData,\n  SecureJSONData = {},\n> {\n  options: DataSourceSettings<JSONData, SecureJSONData>;\n  onOptionsChange: (options: DataSourceSettings<JSONData, SecureJSONData>) => void;\n}\n\n// Utility type to extract the query type TQuery from a class extending DataSourceApi<TQuery, TOptions>\nexport type DataSourceQueryType<DSType> = DSType extends DataSourceApi<infer TQuery, any> ? TQuery : never;\n\n// Utility type to extract the options type TOptions from a class extending DataSourceApi<TQuery, TOptions>\nexport type DataSourceOptionsType<DSType> = DSType extends DataSourceApi<any, infer TOptions> ? TOptions : never;\n\nexport class DataSourcePlugin<\n  DSType extends DataSourceApi<TQuery, TOptions>,\n  TQuery extends DataQuery = DataSourceQueryType<DSType>,\n  TOptions extends DataSourceJsonData = DataSourceOptionsType<DSType>,\n  TSecureOptions = {},\n> extends GrafanaPlugin<DataSourcePluginMeta<TOptions>> {\n  components: DataSourcePluginComponents<DSType, TQuery, TOptions, TSecureOptions> = {};\n\n  constructor(public DataSourceClass: DataSourceConstructor<DSType, TQuery, TOptions>) {\n    super();\n  }\n\n  setConfigEditor(editor: ComponentType<DataSourcePluginOptionsEditorProps<TOptions, TSecureOptions>>) {\n    this.components.ConfigEditor = editor;\n    return this;\n  }\n\n  /** @deprecated it will be removed in a future release */\n  setConfigCtrl(ConfigCtrl: any) {\n    deprecationWarning('DataSourcePlugin', 'setConfigCtrl');\n    this.angularConfigCtrl = ConfigCtrl;\n    return this;\n  }\n\n  /** @deprecated it will be removed in a future release */\n  setQueryCtrl(QueryCtrl: any) {\n    deprecationWarning('DataSourcePlugin', 'setQueryCtrl');\n    this.components.QueryCtrl = QueryCtrl;\n    return this;\n  }\n\n  /** @deprecated -- register the annotation support in the instance constructor */\n  setAnnotationQueryCtrl(AnnotationsQueryCtrl: any) {\n    this.components.AnnotationsQueryCtrl = AnnotationsQueryCtrl;\n    return this;\n  }\n\n  setQueryEditor(QueryEditor: ComponentType<QueryEditorProps<DSType, TQuery, TOptions>>) {\n    this.components.QueryEditor = QueryEditor;\n    return this;\n  }\n\n  /** @deprecated Use `setQueryEditor` instead. When using Explore `props.app` is equal to `CoreApp.Explore` */\n  setExploreQueryField(ExploreQueryField: ComponentType<QueryEditorProps<DSType, TQuery, TOptions>>) {\n    this.components.ExploreQueryField = ExploreQueryField;\n    return this;\n  }\n\n  /** @deprecated Use `setQueryEditor` instead. */\n  setExploreMetricsQueryField(ExploreQueryField: ComponentType<QueryEditorProps<DSType, TQuery, TOptions>>) {\n    this.components.ExploreMetricsQueryField = ExploreQueryField;\n    return this;\n  }\n\n  /** @deprecated Use `setQueryEditor` instead. */\n  setExploreLogsQueryField(ExploreQueryField: ComponentType<QueryEditorProps<DSType, TQuery, TOptions>>) {\n    this.components.ExploreLogsQueryField = ExploreQueryField;\n    return this;\n  }\n\n  setQueryEditorHelp(QueryEditorHelp: ComponentType<QueryEditorHelpProps<TQuery>>) {\n    this.components.QueryEditorHelp = QueryEditorHelp;\n    return this;\n  }\n\n  /**\n   * @deprecated prefer using `setQueryEditorHelp`\n   */\n  setExploreStartPage(ExploreStartPage: ComponentType<QueryEditorHelpProps<TQuery>>) {\n    return this.setQueryEditorHelp(ExploreStartPage);\n  }\n\n  /**\n   * @deprecated -- prefer using {@link StandardVariableSupport} or {@link CustomVariableSupport} or {@link DataSourceVariableSupport} in data source instead\n   */\n  setVariableQueryEditor(VariableQueryEditor: any) {\n    this.components.VariableQueryEditor = VariableQueryEditor;\n    return this;\n  }\n\n  setMetadataInspector(MetadataInspector: ComponentType<MetadataInspectorProps<DSType, TQuery, TOptions>>) {\n    this.components.MetadataInspector = MetadataInspector;\n    return this;\n  }\n\n  setComponentsFromLegacyExports(pluginExports: System.Module) {\n    throwIfAngular(pluginExports);\n\n    this.components.QueryCtrl = pluginExports.QueryCtrl;\n    this.components.AnnotationsQueryCtrl = pluginExports.AnnotationsQueryCtrl;\n    this.components.ExploreQueryField = pluginExports.ExploreQueryField;\n    this.components.QueryEditor = pluginExports.QueryEditor;\n    this.components.QueryEditorHelp = pluginExports.QueryEditorHelp;\n    this.components.VariableQueryEditor = pluginExports.VariableQueryEditor;\n  }\n}\n\nexport interface DataSourcePluginMeta<T extends KeyValue = {}> extends PluginMeta<T> {\n  builtIn?: boolean; // Is this for all\n  metrics?: boolean;\n  logs?: boolean;\n  annotations?: boolean;\n  alerting?: boolean;\n  tracing?: boolean;\n  mixed?: boolean;\n  hasQueryHelp?: boolean;\n  category?: string;\n  queryOptions?: PluginMetaQueryOptions;\n  sort?: number;\n  streaming?: boolean;\n  unlicensed?: boolean;\n  backend?: boolean;\n  isBackend?: boolean;\n  multiValueFilterOperators?: boolean;\n}\n\ninterface PluginMetaQueryOptions {\n  cacheTimeout?: boolean;\n  maxDataPoints?: boolean;\n  minInterval?: boolean;\n}\ninterface PluginQueryCachingConfig {\n  enabled?: boolean;\n  TTLMs?: number;\n}\n\nexport interface DataSourcePluginComponents<\n  DSType extends DataSourceApi<TQuery, TOptions>,\n  TQuery extends DataQuery = DataQuery,\n  TOptions extends DataSourceJsonData = DataSourceJsonData,\n  TSecureOptions = {},\n> {\n  /** @deprecated it will be removed in a future release */\n  QueryCtrl?: any;\n  /** @deprecated it will be removed in a future release */\n  AnnotationsQueryCtrl?: any;\n  VariableQueryEditor?: any;\n  QueryEditor?: ComponentType<QueryEditorProps<DSType, TQuery, TOptions>>;\n  /** @deprecated it will be removed in a future release and `QueryEditor` will be used instead. */\n  ExploreQueryField?: ComponentType<QueryEditorProps<DSType, TQuery, TOptions>>;\n  /** @deprecated it will be removed in a future release and `QueryEditor` will be used instead. */\n  ExploreMetricsQueryField?: ComponentType<QueryEditorProps<DSType, TQuery, TOptions>>;\n  /** @deprecated it will be removed in a future release and `QueryEditor` will be used instead. */\n  ExploreLogsQueryField?: ComponentType<QueryEditorProps<DSType, TQuery, TOptions>>;\n  QueryEditorHelp?: ComponentType<QueryEditorHelpProps<TQuery>>;\n  ConfigEditor?: ComponentType<DataSourcePluginOptionsEditorProps<TOptions, TSecureOptions>>;\n  MetadataInspector?: ComponentType<MetadataInspectorProps<DSType, TQuery, TOptions>>;\n}\n\n// Only exported for tests\nexport interface DataSourceConstructor<\n  DSType extends DataSourceApi<TQuery, TOptions>,\n  TQuery extends DataQuery = DataQuery,\n  TOptions extends DataSourceJsonData = DataSourceJsonData,\n> {\n  new (instanceSettings: DataSourceInstanceSettings<TOptions>, ...args: any[]): DSType;\n}\n\n// VariableSupport is hoisted up to its own type to fix the wonky intermittent\n// 'variables is references directly or indirectly' error\ntype VariableSupport<TQuery extends DataQuery, TOptions extends DataSourceJsonData> =\n  | StandardVariableSupport<DataSourceApi<TQuery, TOptions>>\n  | CustomVariableSupport<DataSourceApi<TQuery, TOptions>>\n  | DataSourceVariableSupport<DataSourceApi<TQuery, TOptions>>;\n\n/**\n * The main data source abstraction interface, represents an instance of a data source\n */\nabstract class DataSourceApi<\n  TQuery extends DataQuery = DataQuery,\n  TOptions extends DataSourceJsonData = DataSourceJsonData,\n  TQueryImportConfiguration extends Record<string, object> = {},\n> {\n  /**\n   *  Set in constructor\n   */\n  readonly name: string;\n\n  /**\n   *  Set in constructor\n   */\n  readonly id: number;\n\n  /**\n   *  Set in constructor\n   */\n  readonly type: string;\n\n  /**\n   *  Set in constructor\n   */\n  readonly uid: string;\n\n  /**\n   *  Set in constructor\n   */\n  readonly apiVersion?: string;\n\n  /**\n   *  min interval range\n   */\n  interval?: string;\n\n  constructor(instanceSettings: DataSourceInstanceSettings<TOptions>) {\n    this.name = instanceSettings.name;\n    this.id = instanceSettings.id;\n    this.type = instanceSettings.type;\n    this.meta = instanceSettings.meta;\n    this.cachingConfig = instanceSettings.cachingConfig;\n    this.uid = instanceSettings.uid;\n    this.apiVersion = instanceSettings.apiVersion;\n  }\n\n  /**\n   * @deprecated use DataSourceWithQueryImportSupport and DataSourceWithQueryExportSupport\n   */\n  async importQueries?(queries: DataQuery[], originDataSource: DataSourceApi<DataQuery>): Promise<TQuery[]>;\n\n  /**\n   * Returns configuration for importing queries from other data sources\n   */\n  getImportQueryConfiguration?(): TQueryImportConfiguration;\n\n  /**\n   * Initializes a datasource after instantiation\n   */\n  init?: () => void;\n\n  /**\n   * Query for data, and optionally stream results\n   */\n  abstract query(request: DataQueryRequest<TQuery>): Promise<DataQueryResponse> | Observable<DataQueryResponse>;\n\n  /**\n   * Test & verify datasource settings & connection details (returning TestingStatus)\n   *\n   * When verification fails - errors specific to the data source should be handled here and converted to\n   * a TestingStatus object. Unknown errors and HTTP errors can be re-thrown and will be handled here:\n   * public/app/features/datasources/state/actions.ts\n   */\n  abstract testDatasource(): Promise<TestDataSourceResponse>;\n\n  /**\n   * Optionally, you can implement this method to prevent certain queries from being executed.\n   * Return false to prevent the query from being executed.\n   */\n  filterQuery?(query: TQuery): boolean {\n    return true;\n  }\n\n  /**\n   *  Get hints for query improvements\n   */\n  getQueryHints?(query: TQuery, results: any[], ...rest: any): QueryHint[];\n\n  /**\n   * Convert a query to a simple text string\n   */\n  getQueryDisplayText?(query: TQuery): string;\n\n  /**\n   * Variable query action.\n   */\n  metricFindQuery?(query: any, options?: LegacyMetricFindQueryOptions): Promise<MetricFindValue[]>;\n\n  /**\n   * Get tag keys for adhoc filters\n   */\n  getTagKeys?(options?: DataSourceGetTagKeysOptions<TQuery>): Promise<GetTagResponse> | Promise<MetricFindValue[]>;\n\n  /**\n   * Get tag values for adhoc filters\n   */\n  getTagValues?(options: DataSourceGetTagValuesOptions<TQuery>): Promise<GetTagResponse> | Promise<MetricFindValue[]>;\n\n  /**\n   * Set after constructor call, as the data source instance is the most common thing to pass around\n   * we attach the components to this instance for easy access\n   */\n  components?: DataSourcePluginComponents<DataSourceApi<TQuery, TOptions>, TQuery, TOptions>;\n\n  /**\n   * static information about the datasource\n   */\n  meta: DataSourcePluginMeta;\n\n  /**\n   * Information about the datasource's query caching configuration\n   * When the caching feature is disabled, this config will always be falsy\n   */\n  cachingConfig?: PluginQueryCachingConfig;\n\n  /**\n   * Used by alerting to check if query contains template variables\n   */\n  targetContainsTemplate?(query: TQuery): boolean;\n\n  /**\n   * Used in explore\n   */\n  modifyQuery?(query: TQuery, action: QueryFixAction): TQuery;\n\n  /** Get an identifier object for this datasource instance */\n  getRef(): DataSourceRef {\n    const ref: DataSourceRef = { type: this.type, uid: this.uid };\n    if (this.apiVersion) {\n      ref.apiVersion = this.apiVersion;\n    }\n    return ref;\n  }\n\n  /**\n   * Used in explore\n   */\n  languageProvider?: any;\n\n  getVersion?(optionalOptions?: any): Promise<string>;\n\n  interpolateVariablesInQueries?(queries: TQuery[], scopedVars: ScopedVars, filters?: AdHocVariableFilter[]): TQuery[];\n\n  /**\n   * An annotation processor allows explicit control for how annotations are managed.\n   *\n   * It is only necessary to configure an annotation processor if the default behavior is not desirable\n   */\n  annotations?: AnnotationSupport<TQuery>;\n\n  /**\n   * Can be optionally implemented to allow datasource to be a source of annotations for dashboard.\n   * This function will only be called if an angular {@link AnnotationsQueryCtrl} is configured and\n   * the {@link annotations} is undefined\n   *\n   * @deprecated -- prefer using {@link AnnotationSupport}\n   */\n  annotationQuery?(options: AnnotationQueryRequest<TQuery>): Promise<AnnotationEvent[]>;\n\n  /**\n   * Defines new variable support\n   * @alpha -- experimental\n   */\n  variables?: VariableSupport<TQuery, TOptions>;\n\n  /*\n   * Optionally, use this method to set default values for a query\n   * @alpha -- experimental\n   */\n  getDefaultQuery?(app: CoreApp): Partial<TQuery>;\n}\n\n/**\n * Options argument to DataSourceAPI.getTagKeys\n */\nexport interface DataSourceGetTagKeysOptions<TQuery extends DataQuery = DataQuery> {\n  /**\n   * The other existing filters or base filters. New in v10.3\n   */\n  filters: AdHocVariableFilter[];\n  /**\n   * Context time range. New in v10.3\n   */\n  timeRange?: TimeRange;\n  queries?: TQuery[];\n  scopes?: Scope[] | undefined;\n}\n\n/**\n * Options argument to DataSourceAPI.getTagValues\n */\nexport interface DataSourceGetTagValuesOptions<TQuery extends DataQuery = DataQuery> {\n  key: string;\n  /**\n   * The other existing filters or base filters. New in v10.3\n   */\n  filters: AdHocVariableFilter[];\n  /**\n   * Context time range. New in v10.3\n   */\n  timeRange?: TimeRange;\n  queries?: TQuery[];\n  scopes?: Scope[] | undefined;\n}\n\nexport interface MetadataInspectorProps<\n  DSType extends DataSourceApi<TQuery, TOptions>,\n  TQuery extends DataQuery = DataQuery,\n  TOptions extends DataSourceJsonData = DataSourceJsonData,\n> {\n  datasource: DSType;\n\n  // All Data from this DataSource\n  data: DataFrame[];\n}\n\nexport interface LegacyMetricFindQueryOptions {\n  searchFilter?: string;\n  scopedVars?: ScopedVars;\n  range?: TimeRange;\n  variable?: { name: string };\n}\n\nexport interface QueryEditorProps<\n  DSType extends DataSourceApi<TQuery, TOptions>,\n  TQuery extends DataQuery = DataQuery,\n  TOptions extends DataSourceJsonData = DataSourceJsonData,\n  TVQuery extends DataQuery = TQuery,\n> {\n  datasource: DSType;\n  query: TVQuery;\n  onRunQuery: () => void;\n  onChange: (value: TVQuery) => void;\n  onBlur?: () => void;\n  onAddQuery?: (query: TQuery) => void;\n  /**\n   * Contains query response filtered by refId of QueryResultBase and possible query error\n   */\n  data?: PanelData;\n  range?: TimeRange;\n  history?: Array<HistoryItem<TQuery>>;\n  queries?: DataQuery[];\n  app?: CoreApp;\n}\n\n// TODO: not really needed but used as type in some data sources and in DataQueryRequest\nexport enum ExploreMode {\n  Logs = 'Logs',\n  Metrics = 'Metrics',\n  Tracing = 'Tracing',\n}\n\nexport interface QueryEditorHelpProps<TQuery extends DataQuery = DataQuery> {\n  datasource: DataSourceApi<TQuery>;\n  query: TQuery;\n  onClickExample: (query: TQuery) => void;\n  exploreId?: any;\n}\n\n/**\n * Starting in v6.2 DataFrame can represent both TimeSeries and TableData\n */\nexport type LegacyResponseData = TimeSeries | TableData | any;\n\nexport type DataQueryResponseData = DataFrame | DataFrameDTO | LegacyResponseData;\n\nexport interface DataQueryResponse {\n  /**\n   * The response data.  When streaming, this may be empty\n   * or a partial result set\n   */\n  data: DataQueryResponseData[];\n\n  /**\n   * When returning multiple partial responses or streams\n   * Use this key to inform Grafana how to combine the partial responses\n   * Multiple responses with same key are replaced (latest used)\n   */\n  key?: string;\n\n  /**\n   * Optionally include error info along with the response data\n   * @deprecated use errors instead -- will be removed in Grafana 10+\n   */\n  error?: DataQueryError;\n\n  /**\n   * Optionally include multiple errors for different targets\n   */\n  errors?: DataQueryError[];\n\n  /**\n   * Use this to control which state the response should have\n   * Defaults to LoadingState.Done if state is not defined\n   */\n  state?: LoadingState;\n\n  /**\n   * traceIds related to the response, if available\n   */\n  traceIds?: string[];\n}\n\nexport interface TestDataSourceResponse {\n  status: string;\n  message: string;\n  error?: Error;\n  details?: { message?: string; verboseMessage?: string };\n}\n\nexport enum DataQueryErrorType {\n  Cancelled = 'cancelled',\n  Timeout = 'timeout',\n  Unknown = 'unknown',\n}\n\nexport interface DataQueryError {\n  data?: {\n    /**\n     * Short information about the error\n     */\n    message?: string;\n    /**\n     * Detailed information about the error. Only returned when app_mode is development.\n     */\n    error?: string;\n  };\n  message?: string;\n  status?: number;\n  statusText?: string;\n  refId?: string;\n  traceId?: string;\n  type?: DataQueryErrorType;\n}\n\nexport interface DataQueryRequest<TQuery extends DataQuery = DataQuery> {\n  requestId: string; // Used to identify results and optionally cancel the request in backendSrv\n\n  interval: string;\n  intervalMs: number;\n  maxDataPoints?: number;\n  range: TimeRange;\n  scopedVars: ScopedVars;\n  targets: TQuery[];\n  timezone: string;\n  app: CoreApp | string;\n\n  cacheTimeout?: string | null;\n  queryCachingTTL?: number | null;\n  skipQueryCache?: boolean;\n  rangeRaw?: RawTimeRange;\n  timeInfo?: string; // The query time description (blue text in the upper right)\n  panelId?: number;\n  panelName?: string;\n  panelPluginId?: string;\n  dashboardUID?: string;\n  headers?: Record<string, string>;\n\n  /** Filters to dynamically apply to all queries */\n  filters?: AdHocVariableFilter[];\n  groupByKeys?: string[];\n\n  // Request Timing\n  startTime: number;\n  endTime?: number;\n\n  // Explore state used by various datasources\n  liveStreaming?: boolean;\n\n  // Make it possible to hide support queries from the inspector\n  hideFromInspector?: boolean;\n\n  // Used to correlate multiple related requests\n  queryGroupId?: string;\n\n  scopes?: Scope[] | undefined;\n}\n\nexport interface DataQueryTimings {\n  dataProcessingTime: number;\n}\n\nexport interface QueryFix {\n  title?: string;\n  label: string;\n  action?: QueryFixAction;\n}\n\nexport type QueryFixType = 'ADD_FILTER' | 'ADD_FILTER_OUT' | 'ADD_STRING_FILTER' | 'ADD_STRING_FILTER_OUT';\nexport interface QueryFixAction {\n  query?: string;\n  preventSubmit?: boolean;\n  /**\n   * The type of action to perform. Will be passed to the data source to handle.\n   */\n  type: QueryFixType | string;\n  /**\n   * A key value map of options that will be passed. Usually used to pass e.g. the label and value.\n   */\n  options?: KeyValue<string>;\n  /**\n   * An optional single row data frame containing the row that triggered the QueryFixAction.\n   */\n  frame?: DataFrame;\n}\n\nexport interface QueryHint {\n  type: string;\n  label: string;\n  fix?: QueryFix;\n}\n\nexport interface MetricFindValue {\n  text: string;\n  value?: string | number;\n  group?: string;\n  expandable?: boolean;\n}\n\nexport interface DataSourceJsonData {\n  authType?: string;\n  defaultRegion?: string;\n  profile?: string;\n  manageAlerts?: boolean;\n  alertmanagerUid?: string;\n  disableGrafanaCache?: boolean;\n}\n\n/**\n * Data Source instance edit model.  This is returned from:\n *  /api/datasources\n */\nexport interface DataSourceSettings<T extends DataSourceJsonData = DataSourceJsonData, S = {}>\n  extends WithAccessControlMetadata {\n  id: number;\n  uid: string;\n  orgId: number;\n  name: string;\n  typeLogoUrl: string;\n  type: string;\n  typeName: string;\n  access: string;\n  url: string;\n  user: string;\n  /**\n   *  @deprecated -- use jsonData to store information related to database.\n   *  This field should only be used by Elasticsearch and Influxdb.\n   */\n  database: string;\n  basicAuth: boolean;\n  basicAuthUser: string;\n  isDefault: boolean;\n  jsonData: T;\n  secureJsonData?: S;\n  secureJsonFields: KeyValue<boolean>;\n  readOnly: boolean;\n  withCredentials: boolean;\n  version?: number;\n  apiVersion?: string;\n}\n\n/**\n * Frontend settings model that is passed to Datasource constructor. This differs a bit from the model above\n * as this data model is available to every user who has access to a data source (Viewers+).  This is loaded\n * in bootData (on page load), or from: /api/frontend/settings\n */\nexport interface DataSourceInstanceSettings<T extends DataSourceJsonData = DataSourceJsonData> {\n  id: number;\n  uid: string;\n  type: string;\n  name: string;\n  apiVersion?: string;\n  meta: DataSourcePluginMeta;\n  cachingConfig?: PluginQueryCachingConfig;\n  readOnly: boolean;\n  url?: string;\n  jsonData: T;\n  username?: string;\n  password?: string; // when access is direct, for some legacy datasources\n  /**\n   *  @deprecated -- use jsonData to store information related to database.\n   *  This field should only be used by Elasticsearch and Influxdb.\n   */\n  database?: string;\n  isDefault?: boolean;\n  access: 'direct' | 'proxy'; // Currently we support 2 options - direct (browser) and proxy (server)\n\n  /**\n   * This is the full Authorization header if basic auth is enabled.\n   * Only available here when access is Browser (direct), when access is Server (proxy)\n   * The basic auth header, username & password is never exposed to browser/Frontend\n   * so this will be empty then.\n   */\n  basicAuth?: string;\n  withCredentials?: boolean;\n\n  /** When the name+uid are based on template variables, maintain access to the real values */\n  rawRef?: DataSourceRef;\n}\n\n/**\n * @deprecated -- use {@link DataSourceInstanceSettings} instead\n */\nexport interface DataSourceSelectItem {\n  name: string;\n  value: string | null;\n  meta: DataSourcePluginMeta;\n}\n\n/**\n * Options passed to the datasource.annotationQuery method. See docs/plugins/developing/datasource.md\n *\n * @deprecated -- use {@link AnnotationSupport}\n */\nexport interface AnnotationQueryRequest<MoreOptions = {}> {\n  range: TimeRange;\n  rangeRaw: RawTimeRange;\n  // Should be DataModel but cannot import that here from the main app. Needs to be moved to package first.\n  dashboard: any;\n  annotation: AnnotationQuery;\n}\n\nexport interface HistoryItem<TQuery extends DataQuery = DataQuery> {\n  ts: number;\n  query: TQuery;\n}\n\nexport interface GetTagResponse {\n  data: MetricFindValue[];\n  error?: DataQueryError;\n}\n\nabstract class LanguageProvider {\n  abstract datasource: DataSourceApi<any, any>;\n  abstract request: (url: string, params?: any) => Promise<any>;\n\n  /**\n   * Returns startTask that resolves with a task list when main syntax is loaded.\n   * Task list consists of secondary promises that load more detailed language features.\n   */\n  abstract start: (timeRange?: TimeRange) => Promise<Array<Promise<any>>>;\n  startTask?: Promise<any[]>;\n}\n\n//@ts-ignore\nLanguageProvider = makeClassES5Compatible(LanguageProvider);\nexport { LanguageProvider };\n\n//@ts-ignore\nDataSourceApi = makeClassES5Compatible(DataSourceApi);\n\nexport { DataSourceApi };\n","import { ComponentType } from 'react';\n\nimport { throwIfAngular } from '../utils/throwIfAngular';\n\nimport { KeyValue } from './data';\nimport { NavModel } from './navModel';\nimport { PluginMeta, GrafanaPlugin, PluginIncludeType } from './plugin';\nimport {\n  PluginExtensionExposedComponentConfig,\n  PluginExtensionAddedComponentConfig,\n  PluginExtensionAddedLinkConfig,\n  PluginExtensionAddedFunctionConfig,\n} from './pluginExtensions';\n\n/**\n * @public\n * The app container that is loading another plugin (panel or query editor)\n * */\nexport enum CoreApp {\n  CloudAlerting = 'cloud-alerting',\n  UnifiedAlerting = 'unified-alerting',\n  Dashboard = 'dashboard',\n  Explore = 'explore',\n  Correlations = 'correlations',\n  Unknown = 'unknown',\n  PanelEditor = 'panel-editor',\n  PanelViewer = 'panel-viewer',\n}\n\nexport interface AppRootProps<T extends KeyValue = KeyValue> {\n  meta: AppPluginMeta<T>;\n  /**\n   * base URL segment for an app, /app/pluginId\n   */\n  basename: string; // The URL path to this page\n\n  /**\n   * Pass the nav model to the container... is there a better way?\n   * @deprecated Use PluginPage component exported from @grafana/runtime instead\n   */\n  onNavChanged: (nav: NavModel) => void;\n\n  /**\n   * The URL query parameters\n   * @deprecated Use react-router instead\n   */\n  query: KeyValue;\n\n  /**\n   * The URL path to this page\n   * @deprecated Use react-router instead\n   */\n  path: string;\n}\n\nexport interface AppPluginMeta<T extends KeyValue = KeyValue> extends PluginMeta<T> {\n  // TODO anything specific to apps?\n}\n\nexport class AppPlugin<T extends KeyValue = KeyValue> extends GrafanaPlugin<AppPluginMeta<T>> {\n  private _exposedComponentConfigs: PluginExtensionExposedComponentConfig[] = [];\n  private _addedComponentConfigs: PluginExtensionAddedComponentConfig[] = [];\n  private _addedLinkConfigs: PluginExtensionAddedLinkConfig[] = [];\n  private _addedFunctionConfigs: PluginExtensionAddedFunctionConfig[] = [];\n\n  // Content under: /a/${plugin-id}/*\n  root?: ComponentType<AppRootProps<T>>;\n\n  /**\n   * Called after the module has loaded, and before the app is used.\n   * This function may be called multiple times on the same instance.\n   * The first time, `this.meta` will be undefined\n   */\n  init(meta: AppPluginMeta<T>) {}\n\n  /**\n   * Set the component displayed under:\n   *   /a/${plugin-id}/*\n   *\n   * If the NavModel is configured, the page will have a managed frame, otheriwse it has full control.\n   */\n  setRootPage(root: ComponentType<AppRootProps<T>>) {\n    this.root = root;\n    return this;\n  }\n\n  setComponentsFromLegacyExports(pluginExports: System.Module) {\n    throwIfAngular(pluginExports);\n\n    if (this.meta && this.meta.includes) {\n      for (const include of this.meta.includes) {\n        if (include.type === PluginIncludeType.page && include.component) {\n          const exp = pluginExports[include.component];\n\n          if (!exp) {\n            console.warn('App Page uses unknown component: ', include.component, this.meta);\n            continue;\n          }\n        }\n      }\n    }\n  }\n\n  get exposedComponentConfigs() {\n    return this._exposedComponentConfigs;\n  }\n\n  get addedComponentConfigs() {\n    return this._addedComponentConfigs;\n  }\n\n  get addedLinkConfigs() {\n    return this._addedLinkConfigs;\n  }\n\n  get addedFunctionConfigs() {\n    return this._addedFunctionConfigs;\n  }\n\n  addLink<Context extends object>(linkConfig: PluginExtensionAddedLinkConfig<Context>) {\n    this._addedLinkConfigs.push(linkConfig as PluginExtensionAddedLinkConfig);\n\n    return this;\n  }\n\n  addComponent<Props = {}>(addedComponentConfig: PluginExtensionAddedComponentConfig<Props>) {\n    this._addedComponentConfigs.push(addedComponentConfig as PluginExtensionAddedComponentConfig);\n\n    return this;\n  }\n\n  addFunction<Signature>(addedFunctionConfig: PluginExtensionAddedFunctionConfig<Signature>) {\n    this._addedFunctionConfigs.push(addedFunctionConfig);\n\n    return this;\n  }\n\n  exposeComponent<Props = {}>(componentConfig: PluginExtensionExposedComponentConfig<Props>) {\n    this._exposedComponentConfigs.push(componentConfig as PluginExtensionExposedComponentConfig);\n\n    return this;\n  }\n}\n\n/**\n * Defines life cycle of a feature\n * @internal\n */\nexport enum FeatureState {\n  /** @deprecated in favor of experimental */\n  alpha = 'alpha',\n  /** @deprecated in favor of preview */\n  beta = 'beta',\n  /** used to mark experimental features with high/unknown risk */\n  experimental = 'experimental',\n  /** used to mark features that are in public preview with medium/hight risk */\n  privatePreview = 'private preview',\n  /** used to mark features that are in public preview with low/medium risk, or as a shared badge for public and private previews */\n  preview = 'preview',\n  /** used to mark new GA features */\n  new = 'new',\n}\n","declare global {\n  interface Array<T> {\n    /** @deprecated Use [idx]. This only exists to help migrate Vector to Array */\n    get(idx: number): T;\n    /** @deprecated Use [idx]. This only exists to help migrate Vector to Array */\n    set(idx: number, value: T): void;\n    /** @deprecated Use .push(value). This only exists to help migrate Vector to Array */\n    add(value: T): void;\n    /** @deprecated this is not necessary.  This only exists to help migrate Vector to Array */\n    toArray(): T[];\n  }\n}\n\n// JS original sin\n// this if condition is because Jest will re-exec this block multiple times (in a browser this only runs once)\nexport function patchArrayVectorProrotypeMethods() {\n  if (!Object.getOwnPropertyDescriptor(Array.prototype, 'toArray')) {\n    Object.defineProperties(Array.prototype, {\n      get: {\n        value: function (idx: number) {\n          return this[idx];\n        },\n        writable: true,\n        enumerable: false,\n        configurable: true,\n      },\n      set: {\n        value: function (idx: number, value: unknown) {\n          this[idx] = value;\n        },\n        writable: true,\n        enumerable: false,\n        configurable: true,\n      },\n      add: {\n        value: function (value: unknown) {\n          this.push(value);\n        },\n        writable: true,\n        enumerable: false,\n        configurable: true,\n      },\n      toArray: {\n        value: function () {\n          return this;\n        },\n        writable: true,\n        enumerable: false,\n        configurable: true,\n      },\n    });\n  }\n}\n//this function call is intentional\npatchArrayVectorProrotypeMethods();\n","import { ComponentType } from 'react';\n\nimport { LinkTarget } from './dataLink';\nimport { IconName } from './icon';\n\nexport interface NavLinkDTO {\n  id?: string;\n  text: string;\n  subTitle?: string;\n  icon?: IconName;\n  img?: string;\n  url?: string;\n  target?: LinkTarget;\n  sortWeight?: number;\n  hideFromTabs?: boolean;\n  roundIcon?: boolean;\n  isNew?: boolean;\n  /**\n   * This is true for some sections that have no children (but is still a section)\n   **/\n  isSection?: boolean;\n  children?: NavLinkDTO[];\n  highlightText?: string;\n  highlightId?: string;\n  emptyMessageId?: string;\n  // The ID of the plugin that registered the page (in case it was registered by a plugin, otherwise left empty)\n  pluginId?: string;\n  // Whether the page is used to create a new resource. We may place these in a different position in the UI.\n  isCreateAction?: boolean;\n  // Optional keywords to match on when searching (e.g. in the CommandPalette)\n  keywords?: string[];\n}\n\nexport interface NavModelItem extends NavLinkDTO {\n  children?: NavModelItem[];\n  active?: boolean;\n  parentItem?: NavModelItem;\n  onClick?: () => void;\n  tabSuffix?: ComponentType<{ className?: string }>;\n  tabCounter?: number;\n  hideFromBreadcrumbs?: boolean;\n  emptyMessage?: string;\n}\n\n/**\n *  Interface used to describe  different kinds of page titles and page navigation. Navmodels are usually generated in the backend and stored in Redux.\n */\nexport interface NavModel {\n  /**\n   *  Main page. that wraps the navigation. Generate the `children` property generate tabs when used with the Page component.\n   */\n  main: NavModelItem;\n  /**\n   *   This is the current active tab/navigation.\n   */\n  node: NavModelItem;\n}\n\nexport type NavIndex = { [s: string]: NavModelItem };\n\nexport enum PageLayoutType {\n  Standard,\n  Canvas,\n  Custom,\n}\n","import { Observable } from 'rxjs';\n\nimport { DataQuery, LogsSortOrder } from '@grafana/schema';\n\nimport { BusEventWithPayload } from '../events/types';\n\nimport { ScopedVars } from './ScopedVars';\nimport { KeyValue, Labels } from './data';\nimport { DataFrame } from './dataFrame';\nimport { DataQueryRequest, DataQueryResponse, DataSourceApi, QueryFixAction, QueryFixType } from './datasource';\nimport { AbsoluteTimeRange } from './time';\nexport { LogsDedupStrategy, LogsSortOrder } from '@grafana/schema';\n\n/**\n * Mapping of log level abbreviation to canonical log level.\n * Supported levels are reduce to limit color variation.\n */\nexport enum LogLevel {\n  emerg = 'critical',\n  fatal = 'critical',\n  alert = 'critical',\n  crit = 'critical',\n  critical = 'critical',\n  warn = 'warning',\n  warning = 'warning',\n  err = 'error',\n  eror = 'error',\n  error = 'error',\n  info = 'info',\n  information = 'info',\n  informational = 'info',\n  notice = 'info',\n  dbug = 'debug',\n  debug = 'debug',\n  trace = 'trace',\n  unknown = 'unknown',\n}\n\n/**\n * Mapping of log level abbreviation to canonical log level.\n * Supported levels are reduce to limit color variation.\n */\nexport const NumericLogLevel: Record<string, LogLevel> = {\n  '0': LogLevel.critical,\n  '1': LogLevel.critical,\n  '2': LogLevel.critical,\n  '3': LogLevel.error,\n  '4': LogLevel.warning,\n  '5': LogLevel.info,\n  '6': LogLevel.info,\n  '7': LogLevel.debug,\n};\n\n// Used for meta information such as common labels or returned log rows in logs view in Explore\nexport enum LogsMetaKind {\n  Number,\n  String,\n  LabelsMap,\n  Error,\n}\n\nexport interface LogsMetaItem {\n  label: string;\n  value: string | number | Labels;\n  kind: LogsMetaKind;\n}\n\nexport interface LogRowModel {\n  // Index of the field from which the entry has been created so that we do not show it later in log row details.\n  entryFieldIndex: number;\n\n  // Index of the row in the dataframe. As log rows can be stitched from multiple dataFrames, this does not have to be\n  // the same as rows final index when rendered.\n  rowIndex: number;\n\n  // The value of the dataframe's id field, if it exists\n  rowId?: string;\n\n  // Full DataFrame from which we parsed this log.\n  // TODO: refactor this so we do not need to pass whole dataframes in addition to also parsed data.\n  dataFrame: DataFrame;\n  duplicates?: number;\n\n  // Actual log line\n  entry: string;\n  hasAnsi: boolean;\n  hasUnescapedContent: boolean;\n  labels: Labels;\n  logLevel: LogLevel;\n  raw: string;\n  searchWords?: string[];\n  timeFromNow: string;\n  timeEpochMs: number;\n  // timeEpochNs stores time with nanosecond-level precision,\n  // as millisecond-level precision is usually not enough for proper sorting of logs\n  timeEpochNs: string;\n  timeLocal: string;\n  timeUtc: string;\n  uid: string;\n  uniqueLabels?: Labels;\n  datasourceType?: string;\n}\n\nexport interface LogsModel {\n  hasUniqueLabels: boolean;\n  meta?: LogsMetaItem[];\n  rows: LogRowModel[];\n  series?: DataFrame[];\n  // visibleRange is time range for histogram created from log results\n  visibleRange?: AbsoluteTimeRange;\n  queries?: DataQuery[];\n  bucketSize?: number;\n}\n\nexport interface LogSearchMatch {\n  start: number;\n  length: number;\n  text: string;\n}\n\nexport interface LogLabelStatsModel {\n  active?: boolean;\n  count: number;\n  proportion: number;\n  value: string;\n}\n\nexport enum LogsDedupDescription {\n  none = 'No de-duplication',\n  exact = 'De-duplication of successive lines that are identical, ignoring ISO datetimes.',\n  numbers = 'De-duplication of successive lines that are identical when ignoring numbers, e.g., IP addresses, latencies.',\n  signature = 'De-duplication of successive lines that have identical punctuation and whitespace.',\n}\n\nexport interface LogRowContextOptions {\n  direction?: LogRowContextQueryDirection;\n  limit?: number;\n  scopedVars?: ScopedVars;\n}\n\nexport enum LogRowContextQueryDirection {\n  Backward = 'BACKWARD',\n  Forward = 'FORWARD',\n}\n\n/**\n * Data sources that allow showing context rows around the provided LowRowModel should implement this method.\n * This will enable \"context\" button in Logs Panel.\n */\nexport interface DataSourceWithLogsContextSupport<TQuery extends DataQuery = DataQuery> {\n  /**\n   * Retrieve context for a given log row\n   */\n  getLogRowContext: (row: LogRowModel, options?: LogRowContextOptions, query?: TQuery) => Promise<DataQueryResponse>;\n\n  /**\n   * Retrieve the context query object for a given log row. This is currently used to open LogContext queries in a split view and in a new browser tab.\n   * The `cacheFilters` parameter can be used to force a refetch of the cached applied filters. Default value `true`.\n   */\n  getLogRowContextQuery?: (\n    row: LogRowModel,\n    options?: LogRowContextOptions,\n    query?: TQuery,\n    cacheFilters?: boolean\n  ) => Promise<TQuery | null>;\n\n  /**\n   * @deprecated Deprecated since 10.3. To display the context option and support the feature implement DataSourceWithLogsContextSupport interface instead.\n   */\n  showContextToggle?(row?: LogRowModel): boolean;\n\n  /**\n   * This method can be used to display a custom UI in the context view.\n   * @alpha\n   * @internal\n   */\n  getLogRowContextUi?(\n    row: LogRowModel,\n    runContextQuery?: () => void,\n    origQuery?: TQuery,\n    scopedVars?: ScopedVars\n  ): React.ReactNode;\n}\n\nexport const hasLogsContextSupport = (datasource: unknown): datasource is DataSourceWithLogsContextSupport => {\n  if (!datasource || typeof datasource !== 'object') {\n    return false;\n  }\n\n  return 'getLogRowContext' in datasource;\n};\n\n/**\n * Types of supplementary queries that can be run in Explore.\n * @internal\n */\nexport enum SupplementaryQueryType {\n  LogsVolume = 'LogsVolume',\n  LogsSample = 'LogsSample',\n}\n\n/**\n * @internal\n */\nexport type SupplementaryQueryOptions = LogsVolumeOption | LogsSampleOptions;\n\n/**\n * @internal\n */\nexport type LogsVolumeOption = {\n  type: SupplementaryQueryType.LogsVolume;\n  field?: string;\n};\n\n/**\n * @internal\n */\nexport type LogsSampleOptions = {\n  type: SupplementaryQueryType.LogsSample;\n  limit?: number;\n};\n\n/**\n * Types of logs volume responses. A data source may return full range histogram (based on selected range)\n * or limited (based on returned results). This information is attached to DataFrame.meta.custom object.\n * @internal\n */\nexport enum LogsVolumeType {\n  FullRange = 'FullRange',\n  Limited = 'Limited',\n}\n\n/**\n * Custom meta information required by Logs Volume responses\n */\nexport type LogsVolumeCustomMetaData = {\n  absoluteRange: AbsoluteTimeRange;\n  logsVolumeType: LogsVolumeType;\n  datasourceName: string;\n  sourceQuery: DataQuery;\n};\n\n/**\n * Data sources that support supplementary queries in Explore.\n * This will enable users to see additional data when running original queries.\n * Supported supplementary queries are defined in SupplementaryQueryType enum.\n */\nexport interface DataSourceWithSupplementaryQueriesSupport<TQuery extends DataQuery> {\n  /**\n   * Returns an observable that will be used to fetch supplementary data based on the provided\n   * supplementary query type and original request.\n   * @deprecated Use getSupplementaryQueryRequest() instead\n   */\n  getDataProvider?(\n    type: SupplementaryQueryType,\n    request: DataQueryRequest<TQuery>\n  ): Observable<DataQueryResponse> | undefined;\n  /**\n   * Receives a SupplementaryQueryType and a DataQueryRequest and returns a new DataQueryRequest to fetch supplementary data.\n   * If provided type or request is not suitable for a supplementary data request, returns undefined.\n   */\n  getSupplementaryRequest?(\n    type: SupplementaryQueryType,\n    request: DataQueryRequest<TQuery>,\n    options?: SupplementaryQueryOptions\n  ): DataQueryRequest<TQuery> | undefined;\n  /**\n   * Returns supplementary query types that data source supports.\n   */\n  getSupportedSupplementaryQueryTypes(): SupplementaryQueryType[];\n  /**\n   * Returns a supplementary query to be used to fetch supplementary data based on the provided type and original query.\n   * If the provided query is not suitable for the provided supplementary query type, undefined should be returned.\n   */\n  getSupplementaryQuery(options: SupplementaryQueryOptions, originalQuery: TQuery): TQuery | undefined;\n}\n\nexport const hasSupplementaryQuerySupport = <TQuery extends DataQuery>(\n  datasource: DataSourceApi | (DataSourceApi & DataSourceWithSupplementaryQueriesSupport<TQuery>),\n  type: SupplementaryQueryType\n): datasource is DataSourceApi & DataSourceWithSupplementaryQueriesSupport<TQuery> => {\n  if (!datasource) {\n    return false;\n  }\n\n  return (\n    ('getDataProvider' in datasource || 'getSupplementaryRequest' in datasource) &&\n    'getSupplementaryQuery' in datasource &&\n    'getSupportedSupplementaryQueryTypes' in datasource &&\n    datasource.getSupportedSupplementaryQueryTypes().includes(type)\n  );\n};\n\nexport const hasLogsContextUiSupport = (datasource: unknown): datasource is DataSourceWithLogsContextSupport => {\n  if (!datasource || typeof datasource !== 'object') {\n    return false;\n  }\n\n  return 'getLogRowContextUi' in datasource;\n};\n\nexport interface QueryFilterOptions extends KeyValue<string> {}\nexport interface ToggleFilterAction {\n  type: 'FILTER_FOR' | 'FILTER_OUT';\n  options: QueryFilterOptions;\n  frame?: DataFrame;\n}\n/**\n * Data sources that support toggleable filters through `toggleQueryFilter`, and displaying the active\n * state of filters through `queryHasFilter`, in the Log Details component in Explore.\n * @internal\n * @alpha\n */\nexport interface DataSourceWithToggleableQueryFiltersSupport<TQuery extends DataQuery> {\n  /**\n   * Toggle filters on and off from query.\n   * If the filter is already present, it should be removed.\n   * If the opposite filter is present, it should be replaced.\n   */\n  toggleQueryFilter(query: TQuery, filter: ToggleFilterAction): TQuery;\n\n  /**\n   * Given a query, determine if it has a filter that matches the options.\n   */\n  queryHasFilter(query: TQuery, filter: QueryFilterOptions): boolean;\n}\n\n/**\n * @internal\n */\nexport const hasToggleableQueryFiltersSupport = <TQuery extends DataQuery>(\n  datasource: unknown\n): datasource is DataSourceWithToggleableQueryFiltersSupport<TQuery> => {\n  return (\n    datasource != null &&\n    typeof datasource === 'object' &&\n    'toggleQueryFilter' in datasource &&\n    'queryHasFilter' in datasource\n  );\n};\n\n/**\n * Data sources that support query modification actions from Log Details (ADD_FILTER, ADD_FILTER_OUT),\n * and Popover Menu (ADD_STRING_FILTER, ADD_STRING_FILTER_OUT) in Explore.\n * @internal\n * @alpha\n */\nexport interface DataSourceWithQueryModificationSupport<TQuery extends DataQuery> {\n  /**\n   * Given a query, applies a query modification `action`, returning the updated query.\n   * Explore currently supports the following action types:\n   * - ADD_FILTER: adds a <key, value> filter to the query.\n   * - ADD_FILTER_OUT: adds a negative <key, value> filter to the query.\n   * - ADD_STRING_FILTER: adds a string filter to the query.\n   * - ADD_STRING_FILTER_OUT: adds a negative string filter to the query.\n   */\n  modifyQuery(query: TQuery, action: QueryFixAction): TQuery;\n\n  /**\n   * Returns a list of supported action types for `modifyQuery()`.\n   */\n  getSupportedQueryModifications(): Array<QueryFixType | string>;\n}\n\n/**\n * @internal\n */\nexport const hasQueryModificationSupport = <TQuery extends DataQuery>(\n  datasource: unknown\n): datasource is DataSourceWithQueryModificationSupport<TQuery> => {\n  return (\n    datasource != null &&\n    typeof datasource === 'object' &&\n    'modifyQuery' in datasource &&\n    'getSupportedQueryModifications' in datasource\n  );\n};\n\nexport interface LogSortOrderChangePayload {\n  order: LogsSortOrder;\n}\n\nexport class LogSortOrderChangeEvent extends BusEventWithPayload<LogSortOrderChangePayload> {\n  static type = 'logs-sort-order-change';\n}\n","import { ComponentType } from 'react';\nimport { Observable } from 'rxjs';\n\nimport { AnnotationQuery as SchemaAnnotationQuery, DataQuery } from '@grafana/schema';\n\nimport { DataFrame } from './dataFrame';\nimport { QueryEditorProps } from './datasource';\n\n/**\n * This JSON object is stored in the dashboard json model.\n */\nexport interface AnnotationQuery<TQuery extends DataQuery = DataQuery> extends SchemaAnnotationQuery<TQuery> {\n  snapshotData?: any;\n\n  // Convert a dataframe to an AnnotationEvent\n  mappings?: AnnotationEventMappings;\n\n  // When using the 'grafana' datasource, this may be dashboard\n  type?: string;\n\n  // Sadly plugins can set any property directly on the main object\n  [key: string]: any;\n}\n\nexport interface AnnotationEvent {\n  id?: string;\n  annotation?: any;\n  dashboardId?: number;\n  /** May be null if it isn't set via the HTTP API */\n  dashboardUID?: string | null;\n  panelId?: number;\n  userId?: number;\n  login?: string;\n  email?: string;\n  avatarUrl?: string;\n  time?: number;\n  timeEnd?: number;\n  isRegion?: boolean;\n  title?: string;\n  text?: string;\n  type?: string;\n  tags?: string[];\n  color?: string;\n  alertId?: number;\n  newState?: string;\n\n  // Currently used to merge annotations from alerts and dashboard\n  source?: any; // source.type === 'dashboard' -- should be AnnotationQuery\n}\n\nexport interface AnnotationEventUIModel {\n  id?: string;\n  from: number;\n  to: number;\n  tags: string[];\n  description: string;\n}\n\n/**\n * @alpha -- any value other than `field` is experimental\n */\nexport enum AnnotationEventFieldSource {\n  Field = 'field', // Default -- find the value with a matching key\n  Text = 'text', // Write a constant string into the value\n  Skip = 'skip', // Do not include the field\n}\n\nexport interface AnnotationEventFieldMapping {\n  source?: AnnotationEventFieldSource; // defaults to 'field'\n  value?: string;\n  regex?: string;\n}\n\nexport type AnnotationEventMappings = Partial<Record<keyof AnnotationEvent, AnnotationEventFieldMapping>>;\ntype AnnotationQueryEditorProps<TQuery extends DataQuery> = QueryEditorProps<any, TQuery> & {\n  // Needs to be optional otherwise component not using these cannot be used, even though they are passed on and can be\n  // just ignored if not used.\n  annotation?: AnnotationQuery<TQuery>;\n  onAnnotationChange?: (annotation: AnnotationQuery<TQuery>) => void;\n};\n\n/**\n * Since Grafana 7.2\n *\n * This offers a generic approach to annotation processing\n */\nexport interface AnnotationSupport<TQuery extends DataQuery = DataQuery, TAnno = AnnotationQuery<TQuery>> {\n  /**\n   * This hook lets you manipulate any existing stored values before running them though the processor.\n   * This is particularly helpful when dealing with migrating old formats.  ie query as a string vs object.\n   */\n  prepareAnnotation?(json: any): TAnno;\n\n  /**\n   * Convert the stored JSON model to a standard datasource query object.\n   * This query will be executed in the datasource and the results converted into events.\n   * Returning an undefined result will quietly skip query execution\n   */\n  prepareQuery?(anno: TAnno): TQuery | undefined;\n\n  /**\n   * When the standard frame > event processing is insufficient, this allows explicit control of the mappings\n   */\n  processEvents?(anno: TAnno, data: DataFrame[]): Observable<AnnotationEvent[] | undefined>;\n\n  /**\n   * Specify a custom QueryEditor for the annotation page. If not specified, the standard one will be used\n   */\n  QueryEditor?: ComponentType<AnnotationQueryEditorProps<TQuery>>;\n\n  /**\n   * Define this method if you want to pre-populate the editor with a default query\n   */\n  getDefaultQuery?(): Partial<TQuery>;\n}\n","import {\n  DataQuery as SchemaDataQuery,\n  DataSourceRef as SchemaDataSourceRef,\n  DataTopic as SchemaDataTopic,\n} from '@grafana/schema';\n\n/**\n * @deprecated use the type from @grafana/schema\n */\nexport interface DataQuery extends SchemaDataQuery {}\n\n/**\n * @deprecated use the type from @grafana/schema\n */\nexport interface DataSourceRef extends SchemaDataSourceRef {}\n\n/**\n * Attached to query results (not persisted)\n *\n * @deprecated use the type from @grafana/schema\n */\nexport { SchemaDataTopic as DataTopic };\n\n/**\n * Abstract representation of any label-based query\n * @internal\n */\nexport interface AbstractQuery extends SchemaDataQuery {\n  labelMatchers: AbstractLabelMatcher[];\n}\n\n/**\n * @internal\n */\nexport enum AbstractLabelOperator {\n  Equal = 'Equal',\n  NotEqual = 'NotEqual',\n  EqualRegEx = 'EqualRegEx',\n  NotEqualRegEx = 'NotEqualRegEx',\n}\n\n/**\n * @internal\n */\nexport type AbstractLabelMatcher = {\n  name: string;\n  value: string;\n  operator: AbstractLabelOperator;\n};\n\n/**\n * @internal\n */\nexport interface DataSourceWithQueryImportSupport<TQuery extends SchemaDataQuery> {\n  importFromAbstractQueries(labelBasedQuery: AbstractQuery[]): Promise<TQuery[]>;\n}\n\n/**\n * @internal\n */\nexport interface DataSourceWithQueryExportSupport<TQuery extends SchemaDataQuery> {\n  exportToAbstractQueries(query: TQuery[]): Promise<AbstractQuery[]>;\n}\n\n/**\n * @internal\n */\nexport const hasQueryImportSupport = <TQuery extends SchemaDataQuery>(\n  datasource: unknown\n): datasource is DataSourceWithQueryImportSupport<TQuery> => {\n  if (!datasource || typeof datasource !== 'object') {\n    return false;\n  }\n\n  return 'importFromAbstractQueries' in datasource;\n};\n\n/**\n * @internal\n */\nexport const hasQueryExportSupport = <TQuery extends SchemaDataQuery>(\n  datasource: unknown\n): datasource is DataSourceWithQueryExportSupport<TQuery> => {\n  if (!datasource || typeof datasource !== 'object') {\n    return false;\n  }\n  return 'exportToAbstractQueries' in datasource;\n};\n","import { DataTransformerConfig } from '@grafana/schema';\n\nimport { FieldConfigSource } from './fieldOverrides';\nimport { DataQuery, DataSourceRef } from './query';\n\nexport enum DashboardCursorSync {\n  Off,\n  Crosshair,\n  Tooltip,\n}\n\n/**\n * @public\n */\nexport interface PanelModel<TOptions = any, TCustomFieldConfig = any> {\n  /** ID of the panel within the current dashboard */\n  id: number;\n\n  /** The panel type */\n  type: string;\n\n  /** Panel title */\n  title?: string;\n\n  /** Description */\n  description?: string;\n\n  /** Panel options */\n  options: TOptions;\n\n  /** Field options configuration */\n  fieldConfig: FieldConfigSource<TCustomFieldConfig>;\n\n  /** Version of the panel plugin */\n  pluginVersion?: string;\n\n  /** The datasource used in all targets */\n  datasource?: DataSourceRef | null;\n\n  /** The queries in a panel */\n  targets?: DataQuery[];\n\n  /** Optionally process data after query */\n  transformations?: DataTransformerConfig[];\n\n  /** alerting v1 object */\n  alert?: any;\n}\n","import { ScopedVars } from './ScopedVars';\nimport { ExploreCorrelationHelperData, ExplorePanelsState } from './explore';\nimport { InterpolateFunction } from './panel';\nimport { DataQuery } from './query';\nimport { TimeRange } from './time';\n\n/**\n * Callback info for DataLink click events\n */\nexport interface DataLinkClickEvent<T = any> {\n  origin: T;\n  replaceVariables: InterpolateFunction | undefined;\n  e?: any; // mouse|react event\n}\n\n/**\n * Data Links can be created by data source plugins or correlations.\n * Origin is set in DataLink object and indicates where the link was created.\n */\nexport enum DataLinkConfigOrigin {\n  Datasource = 'Datasource',\n  Correlations = 'Correlations',\n  ExploreCorrelationsEditor = 'CorrelationsEditor',\n}\n\n/**\n * Link configuration. The values may contain variables that need to be\n * processed before showing the link to user.\n *\n * TODO: <T extends DataQuery> is not strictly true for internal links as we do not need refId for example but all\n *  data source defined queries extend this so this is more for documentation.\n */\nexport interface DataLink<T extends DataQuery = any> {\n  title: string;\n  targetBlank?: boolean;\n\n  // 3: The URL if others did not set it first\n  url: string;\n\n  // 2: If exists, use this to construct the URL\n  // Not saved in JSON/DTO\n  onBuildUrl?: (event: DataLinkClickEvent) => string;\n\n  // 1: If exists, handle click directly\n  // Not saved in JSON/DTO\n  onClick?: (event: DataLinkClickEvent) => void;\n\n  // If dataLink represents internal link this has to be filled. Internal link is defined as a query in a particular\n  // data source that we want to show to the user. Usually this results in a link to explore but can also lead to\n  // more custom onClick behaviour if needed.\n  // @internal and subject to change in future releases\n  internal?: InternalDataLink<T>;\n\n  origin?: DataLinkConfigOrigin;\n  meta?: {\n    correlationData?: ExploreCorrelationHelperData;\n    transformations?: DataLinkTransformationConfig[];\n  };\n\n  oneClick?: boolean;\n}\n\n/**\n * We provide tooltips with information about these to guide the user, please\n * check for validity when adding more transformation types.\n *\n * @internal\n */\nexport enum SupportedTransformationType {\n  Regex = 'regex',\n  Logfmt = 'logfmt',\n}\n\n/** @internal */\nexport interface DataLinkTransformationConfig {\n  type: SupportedTransformationType;\n  field?: string;\n  expression?: string;\n  mapValue?: string;\n}\n\n/** @internal */\nexport interface InternalDataLink<T extends DataQuery = any> {\n  query: T | ((options: { replaceVariables: InterpolateFunction; scopedVars: ScopedVars }) => T);\n  datasourceUid: string;\n  datasourceName: string; // used as a title if `DataLink.title` is empty\n  panelsState?: ExplorePanelsState;\n  range?: TimeRange;\n}\n\nexport type LinkTarget = '_blank' | '_self' | undefined;\n\n/**\n * Processed Link Model. The values are ready to use\n */\nexport interface LinkModel<T = any> {\n  href: string;\n  title: string;\n  target: LinkTarget;\n  origin: T;\n\n  // When a click callback exists, this is passed the raw mouse|react event\n  onClick?: (e: any, origin?: any) => void;\n  oneClick?: boolean;\n}\n\n/**\n * Provides a way to produce links on demand\n *\n * TODO: ScopedVars in in GrafanaUI package!\n */\nexport interface LinkModelSupplier<T extends object> {\n  getLinks(replaceVariables?: InterpolateFunction): Array<LinkModel<T>>;\n}\n\nexport enum VariableOrigin {\n  Series = 'series',\n  Field = 'field',\n  Fields = 'fields',\n  Value = 'value',\n  BuiltIn = 'built-in',\n  Template = 'template',\n}\n\nexport interface VariableSuggestion {\n  value: string;\n  label: string;\n  documentation?: string;\n  origin: VariableOrigin;\n}\n\nexport enum VariableSuggestionsScope {\n  Values = 'values',\n}\n\nexport enum OneClickMode {\n  Action = 'action',\n  Link = 'link',\n  Off = 'off',\n}\n","import { ScopedVars } from './ScopedVars';\nimport { DataFrame, Field, ValueLinkConfig } from './dataFrame';\nimport { InterpolateFunction } from './panel';\nimport { SelectableValue } from './select';\n\nexport enum ActionType {\n  Fetch = 'fetch',\n}\n\nexport interface Action {\n  type: ActionType;\n  title: string;\n\n  // Options for the selected type\n  // Currently this is required because there is only one valid type (fetch)\n  // once multiple types are valid, usage of this will need to be optional\n  [ActionType.Fetch]: FetchOptions;\n  confirmation?: string;\n  oneClick?: boolean;\n}\n\n/**\n * Processed Action Model. The values are ready to use\n */\nexport interface ActionModel<T = any> {\n  title: string;\n  onClick: (event: any, origin?: any) => void;\n  confirmation?: string;\n  oneClick?: boolean;\n}\n\ninterface FetchOptions {\n  method: HttpRequestMethod;\n  url: string;\n  body?: string;\n  queryParams?: Array<[string, string]>;\n  headers?: Array<[string, string]>;\n}\n\nexport enum HttpRequestMethod {\n  POST = 'POST',\n  PUT = 'PUT',\n  GET = 'GET',\n}\n\nexport const httpMethodOptions: SelectableValue[] = [\n  { label: HttpRequestMethod.POST, value: HttpRequestMethod.POST },\n  { label: HttpRequestMethod.PUT, value: HttpRequestMethod.PUT },\n  { label: HttpRequestMethod.GET, value: HttpRequestMethod.GET },\n];\n\nexport const contentTypeOptions: SelectableValue[] = [\n  { label: 'application/json', value: 'application/json' },\n  { label: 'text/plain', value: 'text/plain' },\n  { label: 'application/xml', value: 'application/xml' },\n  { label: 'application/x-www-form-urlencoded', value: 'application/x-www-form-urlencoded' },\n];\n\nexport const defaultActionConfig: Action = {\n  type: ActionType.Fetch,\n  title: '',\n  fetch: {\n    url: '',\n    method: HttpRequestMethod.POST,\n    body: '{}',\n    queryParams: [],\n    headers: [['Content-Type', 'application/json']],\n  },\n};\n\nexport type ActionsArgs = {\n  frame: DataFrame;\n  field: Field;\n  fieldScopedVars: ScopedVars;\n  replaceVariables: InterpolateFunction;\n  actions: Action[];\n  config: ValueLinkConfig;\n};\n","export const GAUGE_DEFAULT_MINIMUM = 0;\nexport const GAUGE_DEFAULT_MAXIMUM = 100;\nexport const DEFAULT_SAML_NAME = 'SAML';\n","import { FunctionalVector } from './FunctionalVector';\n\ninterface CircularOptions<T> {\n  buffer?: T[];\n  append?: 'head' | 'tail';\n  capacity?: number;\n}\n\n/**\n * Circular vector uses a single buffer to capture a stream of values\n * overwriting the oldest value on add.\n *\n * This supports adding to the 'head' or 'tail' and will grow the buffer\n * to match a configured capacity.\n *\n * @public\n * @deprecated use a simple Arrays\n */\nexport class CircularVector<T = any> extends FunctionalVector<T> {\n  private buffer: T[];\n  private index: number;\n  private capacity: number;\n  private tail: boolean;\n\n  constructor(options: CircularOptions<T>) {\n    super();\n\n    this.buffer = options.buffer || [];\n    this.capacity = this.buffer.length;\n    this.tail = 'head' !== options.append;\n    this.index = 0;\n\n    this.add = this.getAddFunction();\n    if (options.capacity) {\n      this.setCapacity(options.capacity);\n    }\n    return new Proxy(this, {\n      get(target: CircularVector<T>, property: string, receiver: CircularVector<T>) {\n        if (typeof property !== 'symbol') {\n          const idx = +property;\n          if (String(idx) === property) {\n            return target.get(idx);\n          }\n        }\n        return Reflect.get(target, property, receiver);\n      },\n      set(target: CircularVector<T>, property: string, value: T, receiver: CircularVector<T>) {\n        if (typeof property !== 'symbol') {\n          const idx = +property;\n          if (String(idx) === property) {\n            target.set(idx, value);\n            return true;\n          }\n        }\n        return Reflect.set(target, property, value, receiver);\n      },\n    });\n  }\n\n  /**\n   * This gets the appropriate add function depending on the buffer state:\n   *  * head vs tail\n   *  * growing buffer vs overwriting values\n   */\n  private getAddFunction(): (value: T) => void {\n    // When we are not at capacity, it should actually modify the buffer\n    if (this.capacity > this.buffer.length) {\n      if (this.tail) {\n        return (value: T) => {\n          this.buffer.push(value);\n          if (this.buffer.length >= this.capacity) {\n            this.add = this.getAddFunction();\n          }\n        };\n      } else {\n        return (value: T) => {\n          this.buffer.unshift(value);\n          if (this.buffer.length >= this.capacity) {\n            this.add = this.getAddFunction();\n          }\n        };\n      }\n    }\n\n    if (this.tail) {\n      return (value: T) => {\n        this.buffer[this.index] = value;\n        this.index = (this.index + 1) % this.buffer.length;\n      };\n    }\n\n    // Append values to the head\n    return (value: T) => {\n      let idx = this.index - 1;\n      if (idx < 0) {\n        idx = this.buffer.length - 1;\n      }\n      this.buffer[idx] = value;\n      this.index = idx;\n    };\n  }\n\n  setCapacity(v: number) {\n    if (this.capacity === v) {\n      return;\n    }\n    // Make a copy so it is in order and new additions can be at the head or tail\n    const copy = this.toArray();\n    if (v > this.length) {\n      this.buffer = copy;\n    } else if (v < this.capacity) {\n      // Shrink the buffer\n      const delta = this.length - v;\n      if (this.tail) {\n        this.buffer = copy.slice(delta, copy.length); // Keep last items\n      } else {\n        this.buffer = copy.slice(0, copy.length - delta); // Keep first items\n      }\n    }\n    this.capacity = v;\n    this.index = 0;\n    this.add = this.getAddFunction();\n  }\n\n  setAppendMode(mode: 'head' | 'tail') {\n    const tail = 'head' !== mode;\n    if (tail !== this.tail) {\n      this.buffer = this.toArray().reverse();\n      this.index = 0;\n      this.tail = tail;\n      this.add = this.getAddFunction();\n    }\n  }\n\n  reverse() {\n    return this.buffer.reverse();\n  }\n\n  get(index: number) {\n    return this.buffer[(index + this.index) % this.buffer.length];\n  }\n\n  set(index: number, value: T) {\n    this.buffer[(index + this.index) % this.buffer.length] = value;\n  }\n\n  get length() {\n    return this.buffer.length;\n  }\n}\n","const notice = 'ArrayVector is deprecated and will be removed in Grafana 11. Please use plain arrays for field.values.';\nlet notified = false;\n\n/**\n * @public\n *\n * @deprecated use a simple Array<T>\n */\nexport class ArrayVector<T = unknown> extends Array<T> {\n  get buffer() {\n    return this;\n  }\n\n  set buffer(values: T[]) {\n    this.length = 0;\n\n    const len = values?.length;\n\n    if (len) {\n      let chonkSize = 65e3;\n      let numChonks = Math.ceil(len / chonkSize);\n\n      for (let chonkIdx = 0; chonkIdx < numChonks; chonkIdx++) {\n        this.push.apply(this, values.slice(chonkIdx * chonkSize, (chonkIdx + 1) * chonkSize));\n      }\n    }\n  }\n\n  /**\n   * ArrayVector is deprecated and should not be used. If you get a Typescript error here, use plain arrays for field.values.\n   */\n  // `never` is used to force a build-type error from Typescript to encourage developers to move away from using this\n  constructor(buffer: never) {\n    super();\n    this.buffer = buffer ?? [];\n\n    if (!notified) {\n      console.warn(notice);\n      notified = true;\n    }\n  }\n\n  toJSON(): T[] {\n    return [...this]; // copy to avoid circular reference (only for jest)\n  }\n}\n","import { CircularVector } from '../vector/CircularVector';\n\nimport { MutableDataFrame } from './MutableDataFrame';\n\ninterface CircularOptions {\n  append?: 'head' | 'tail';\n  capacity?: number;\n}\n\n/**\n * This dataframe can have values constantly added, and will never\n * exceed the given capacity\n */\nexport class CircularDataFrame<T = any> extends MutableDataFrame<T> {\n  constructor(options: CircularOptions) {\n    super(undefined, (buffer) => {\n      return new CircularVector({\n        ...options,\n        buffer,\n      });\n    });\n  }\n}\n","import { WithAccessControlMetadata } from '../types/accesscontrol';\nimport { CurrentUserDTO } from '../types/config';\n\nexport interface CurrentUser extends Omit<CurrentUserDTO, 'lightTheme'> {}\n\nexport function userHasPermission(action: string, user: CurrentUser): boolean {\n  return !!user.permissions?.[action];\n}\n\nexport function userHasPermissionInMetadata(action: string, object: WithAccessControlMetadata): boolean {\n  return !!object.accessControl?.[action];\n}\n\nexport function userHasAllPermissions(actions: string[], user: CurrentUser) {\n  return actions.every((action) => userHasPermission(action, user));\n}\n\nexport function userHasAnyPermission(actions: string[], user: CurrentUser) {\n  return actions.some((action) => userHasPermission(action, user));\n}\n"],"names":["moment","toDuration","FieldType","isNumber","PluginState","PluginType","PluginSignatureStatus","PluginSignatureType","PluginErrorCode","PluginLoadingStrategy","PluginIncludeType","v","MatcherID","FieldMatcherID","FrameMatcherID","ValueMatcherID","LoadingState","NullValueMode","ReducerID","values","calculateStdDev","ComparisonOperation","camelCase","ByNamesMatcherMode","_a","frame","isArray","isString","isBoolean","field","timeField","data","DataTransformerID","JoinMode","map","joinFieldMatcher","join","tableFieldValIdx","StreamingFrameAction","_b","value","isEqual","xss","DOMPurify","braintreeSanitizeUrl","marked","mangle","EventEmitter","Observable","filter","tinycolor","alpha","FieldColorModeId","ThresholdsMode","interpolateRgbBasis","stringHash","keyValue","defaultTimeZone","isEmpty","isDate","dateTime","lowerCase","toNumber","MappingType","SpecialValueMatch","LegacyMappingType","format","duration","clamp","toString","cloneDeep","min","max","unset","set","get","VariableFormatID","useRef","usePrevious","useMemo","FieldNamePickerBaseNameMode","DocsId","merge","timer","mapTo","takeUntil","CSVHeaderStyle","Papa","defaults","BinaryOperationID","UnaryOperationID","NodeGraphDataFrameFieldNames","SortOrder","useState","useEffect","operator","outFrames","_c","_d","_e","_f","_g","right","TransformationApplicabilityLevels","SpecialValue","MINIMUM_FIELDS_REQUIRED","shouldGroupOnField","shouldCalculateField","size","GrafanaThemeType","DataFrameType","outerJoinDataFrames","copyFieldStructure","omit","index","clone","TransformerCategory","mergeMap","of","createContext","dateMath.parse","dateMath.isMathString","InternalTimeZones","memoize","groups","group","all","isAfter","intervalToDuration","add","LayoutModes","FieldConfigProperty","mergeWith","isObject","jsx","useContext","AlertState","VariableSupportType","OrgRole","VariableRefresh","VariableSort","VariableHide","LiveChannelScope","LiveChannelType","LiveChannelConnectionState","LiveChannelEventType","PluginExtensionTypes","PluginExtensionPoints","VizOrientation","VisualizationSuggestionScore","defaultsDeep","ExploreMode","DataQueryErrorType","CoreApp","FeatureState","PageLayoutType","LogLevel","LogsMetaKind","LogsDedupDescription","LogRowContextQueryDirection","SupplementaryQueryType","LogsVolumeType","AnnotationEventFieldSource","AbstractLabelOperator","DashboardCursorSync","DataLinkConfigOrigin","SupportedTransformationType","VariableOrigin","VariableSuggestionsScope","OneClickMode","HttpRequestMethod"],"mappings":"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AAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,WAAA,KAAM,CAAA,GAAA,KAAA;AA3HI,EAAAA,OAAAA,UAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA;AA8HI,SAAA,sBAAA,CAAuB,IAAe,QAAgC,EAAA;AACpF,EAAA,OAAO,EAAO,KAAA,OAAA,gBAAmB,EAAO,KAAA,eAAA,wBAA2B,EAAO,KAAA,aAAA,qBACtE,SAAU,CAAA,MAAA,GACV,EAAO,KAAA,WAAA,oBAAuB,EAAO,KAAA,WAAA,mBACnC,UAAU,OACV,GAAA,QAAA;AACR;AAEO,SAAS,YAAY,EAA6B,EAAA;AACvD,EAAA,OAAO,MAAO,CAAA,IAAA,CAAK,SAAS,CAAA,CAAE,SAAS,EAAE,CAAA;AAC3C;AAuBO,SAAS,YAAY,OAAyC,EAAA;AAtKrE,EAAA,IAAA,EAAA;AAuKE,EAAM,MAAA,EAAE,KAAO,EAAA,QAAA,EAAa,GAAA,OAAA;AAE5B,EAAA,IAAI,CAAC,KAAS,IAAA,CAAC,QAAY,IAAA,QAAA,CAAS,SAAS,CAAG,EAAA;AAC9C,IAAA,OAAO,EAAC;AAAA;AAGV,EAAI,IAAA,CAAA,EAAA,GAAA,KAAA,CAAM,KAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,KAAO,EAAA;AAEtB,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,KAAA,MAAW,KAAK,QAAU,EAAA;AACxB,MAAA,IAAI,CAAC,KAAM,CAAA,KAAA,CAAM,KAAM,CAAA,cAAA,CAAe,CAAC,CAAG,EAAA;AACxC,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA;AAChB;AAEF,IAAI,IAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AACtB,MAAO,OAAA;AAAA,QACL,GAAG,MAAM,KAAM,CAAA;AAAA,OACjB;AAAA;AACF;AAEF,EAAI,IAAA,CAAC,MAAM,KAAO,EAAA;AAChB,IAAA,KAAA,CAAM,QAAQ,EAAC;AAAA;AAGjB,EAAM,MAAA,KAAA,GAAQ,aAAc,CAAA,IAAA,CAAK,QAAQ,CAAA;AAIzC,EAAA,MAAM,OAAO,KAAM,CAAA,MAAA;AACnB,EAAI,IAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,GAAS,CAAG,EAAA;AAC3B,IAAA,MAAM,KAAoB,GAAA,EAAE,GAAG,KAAA,CAAM,MAAM,KAAM,EAAA;AACjD,IAAA,KAAA,MAAW,WAAW,KAAO,EAAA;AAC3B,MAAA,KAAA,CAAM,QAAQ,EAAE,CAAA,GAAI,QAAQ,gBAAqB,KAAA,IAAA,GAAO,QAAQ,gBAAmB,GAAA,IAAA;AAAA;AAErF,IAAQ,OAAA,KAAA,CAAM,MAAM,KAAQ,GAAA,KAAA;AAAA;AAI9B,EAAA,MAAM,EAAE,aAAA,GAAgB,aAAc,CAAA,MAAA,KAAW,KAAM,CAAA,MAAA;AAEvD,EAAM,MAAA,WAAA,GAAc,kBAAkB,aAAc,CAAA,MAAA;AACpD,EAAM,MAAA,UAAA,GAAa,kBAAkB,aAAc,CAAA,MAAA;AAGnD,EAAA,IAAI,MAAM,MAAW,KAAA,CAAA,IAAK,KAAM,CAAA,CAAC,EAAE,MAAQ,EAAA;AACzC,IAAA,MAAMC,UAAS,KAAM,CAAA,CAAC,EAAE,MAAO,CAAA,KAAA,EAAO,aAAa,UAAU,CAAA;AAC7D,IAAA,KAAA,CAAM,MAAM,KAAQ,GAAA;AAAA,MAClB,GAAG,MAAM,KAAM,CAAA,KAAA;AAAA,MACf,GAAGA;AAAA,KACL;AACA,IAAOA,OAAAA,OAAAA;AAAA;AAIT,EAAA,IAAI,MAAS,GAAA,eAAA,CAAgB,KAAO,EAAA,WAAA,EAAa,UAAU,CAAA;AAE3D,EAAA,KAAA,MAAW,WAAW,KAAO,EAAA;AAC3B,IAAA,IAAI,CAAC,MAAO,CAAA,cAAA,CAAe,QAAQ,EAAE,CAAA,IAAK,QAAQ,MAAQ,EAAA;AACxD,MAAS,MAAA,GAAA;AAAA,QACP,GAAG,MAAA;AAAA,QACH,GAAG,OAAA,CAAQ,MAAO,CAAA,KAAA,EAAO,aAAa,UAAU;AAAA,OAClD;AAAA;AACF;AAGF,EAAA,KAAA,CAAM,MAAM,KAAQ,GAAA;AAAA,IAClB,GAAG,MAAM,KAAM,CAAA,KAAA;AAAA,IACf,GAAG;AAAA,GACL;AACA,EAAO,OAAA,MAAA;AACT;AAQa,MAAA,aAAA,GAAgB,IAAI,QAAA,CAA2B,MAAM;AAAA,EAChE;AAAA,IACE,EAAI,EAAA,aAAA;AAAA,IACJ,IAAM,EAAA,QAAA;AAAA,IACN,WAAa,EAAA,0CAAA;AAAA,IACb,QAAU,EAAA,IAAA;AAAA,IACV,QAAA,EAAU,CAAC,SAAS,CAAA;AAAA,IACpB,MAAQ,EAAA,oBAAA;AAAA,IACR,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,MAAA;AAAA,IACJ,IAAM,EAAA,MAAA;AAAA,IACN,WAAa,EAAA,YAAA;AAAA,IACb,QAAU,EAAA,IAAA;AAAA,IACV,MAAQ,EAAA,aAAA;AAAA,IACR,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,cAAA;AAAA,IACJ,IAAM,EAAA,SAAA;AAAA,IACN,WAAa,EAAA,2CAAA;AAAA,IACb,QAAU,EAAA,IAAA;AAAA,IACV,MAAQ,EAAA,qBAAA;AAAA,IACR,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,OAAA;AAAA,IACJ,IAAM,EAAA,OAAA;AAAA,IACN,WAAa,EAAA,aAAA;AAAA,IACb,QAAU,EAAA,IAAA;AAAA,IACV,MAAQ,EAAA,cAAA;AAAA,IACR,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,EAAE,EAAI,EAAA,KAAA,YAAe,IAAM,EAAA,KAAA,EAAO,aAAa,eAAiB,EAAA,QAAA,EAAU,IAAM,EAAA,cAAA,EAAgB,IAAK,EAAA;AAAA,EACrG,EAAE,EAAI,EAAA,KAAA,YAAe,IAAM,EAAA,KAAA,EAAO,aAAa,eAAiB,EAAA,QAAA,EAAU,IAAM,EAAA,cAAA,EAAgB,IAAK,EAAA;AAAA,EACrG;AAAA,IACE,EAAI,EAAA,MAAA;AAAA,IACJ,IAAM,EAAA,MAAA;AAAA,IACN,WAAa,EAAA,eAAA;AAAA,IACb,QAAU,EAAA,IAAA;AAAA,IACV,QAAA,EAAU,CAAC,KAAK,CAAA;AAAA,IAChB,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,QAAA;AAAA,IACJ,IAAM,EAAA,QAAA;AAAA,IACN,WAAa,EAAA,cAAA;AAAA,IACb,QAAU,EAAA,KAAA;AAAA,IACV,MAAQ,EAAA,eAAA;AAAA,IACR,QAAA,EAAU,CAAC,QAAQ,CAAA;AAAA,IACnB,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,UAAA;AAAA,IACJ,IAAM,EAAA,UAAA;AAAA,IACN,WAAa,EAAA,mCAAA;AAAA,IACb,QAAU,EAAA,KAAA;AAAA,IACV,MAAQ,EAAAC,iBAAA;AAAA,IACR,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,QAAA;AAAA,IACJ,IAAM,EAAA,QAAA;AAAA,IACN,WAAa,EAAA,6CAAA;AAAA,IACb,QAAU,EAAA,KAAA;AAAA,IACV,MAAQ,EAAAA,iBAAA;AAAA,IACR,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,KAAA;AAAA,IACJ,IAAM,EAAA,OAAA;AAAA,IACN,WAAa,EAAA,uBAAA;AAAA,IACb,gBAAkB,EAAA,CAAA;AAAA,IAClB,QAAU,EAAA,IAAA;AAAA,IACV,QAAA,EAAU,CAAC,OAAO,CAAA;AAAA,IAClB,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,OAAA;AAAA,IACJ,IAAM,EAAA,OAAA;AAAA,IACN,WAAa,EAAA,8BAAA;AAAA,IACb,gBAAkB,EAAA,CAAA;AAAA,IAClB,QAAU,EAAA,IAAA;AAAA,IACV,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,OAAA;AAAA,IACJ,IAAM,EAAA,OAAA;AAAA,IACN,WAAa,EAAA,+CAAA;AAAA,IACb,QAAU,EAAA,IAAA;AAAA,IACV,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,OAAA;AAAA,IACJ,IAAM,EAAA,OAAA;AAAA,IACN,WAAa,EAAA,4BAAA;AAAA,IACb,QAAU,EAAA,IAAA;AAAA,IACV,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,MAAA;AAAA,IACJ,IAAM,EAAA,MAAA;AAAA,IACN,WAAa,EAAA,iCAAA;AAAA,IACb,QAAU,EAAA,IAAA;AAAA,IACV,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,MAAA;AAAA,IACJ,IAAM,EAAA,YAAA;AAAA,IACN,WAAa,EAAA,0CAAA;AAAA,IACb,QAAU,EAAA,IAAA;AAAA,IACV,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,QAAA;AAAA,IACJ,IAAM,EAAA,kBAAA;AAAA,IACN,WAAa,EAAA,wBAAA;AAAA,IACb,QAAU,EAAA,IAAA;AAAA,IACV,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,WAAA;AAAA,IACJ,IAAM,EAAA,WAAA;AAAA,IACN,WAAa,EAAA,qBAAA;AAAA,IACb,gBAAkB,EAAA,KAAA;AAAA,IAClB,QAAU,EAAA,IAAA;AAAA,IACV,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,WAAA;AAAA,IACJ,IAAM,EAAA,WAAA;AAAA,IACN,WAAa,EAAA,qBAAA;AAAA,IACb,gBAAkB,EAAA,IAAA;AAAA,IAClB,QAAU,EAAA,IAAA;AAAA,IACV,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,aAAA;AAAA,IACJ,IAAM,EAAA,cAAA;AAAA,IACN,WAAa,EAAA,mCAAA;AAAA,IACb,QAAU,EAAA,KAAA;AAAA,IACV,MAAQ,EAAA,oBAAA;AAAA,IACR,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,eAAA;AAAA,IACJ,IAAM,EAAA,gBAAA;AAAA,IACN,WAAa,EAAA,2BAAA;AAAA,IACb,QAAU,EAAA,KAAA;AAAA,IACV,MAAQ,EAAA,sBAAA;AAAA,IACR,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,UAAA;AAAA,IACJ,IAAM,EAAA,oBAAA;AAAA,IACN,WAAa,EAAA,qDAAA;AAAA,IACb,QAAU,EAAA,IAAA;AAAA,IACV,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,WAAA;AAAA,IACJ,IAAM,EAAA,YAAA;AAAA,IACN,WAAa,EAAA,kCAAA;AAAA,IACb,QAAU,EAAA,KAAA;AAAA,IACV,MAAA,EAAQ,CAAC,KAAkB,MAAA,EAAE,WAAW,CAAC,GAAG,KAAM,CAAA,MAAM,CAAE,EAAA,CAAA;AAAA,IAC1D,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA;AAAA,IACE,EAAI,EAAA,cAAA;AAAA,IACJ,IAAM,EAAA,mBAAA;AAAA,IACN,WAAa,EAAA,yCAAA;AAAA,IACb,QAAU,EAAA,KAAA;AAAA,IACV,MAAA,EAAQ,CAAC,KAAkB,MAAA;AAAA,MACzB,cAAc,CAAC,GAAG,IAAI,GAAI,CAAA,KAAA,CAAM,MAAM,CAAC;AAAA,KACzC,CAAA;AAAA,IACA,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,GAAG,uBAAwB;AAC7B,CAAC;AAGD,MAAM,0BAA0B,CAAC,WAAA,GAAc,CAAC,GAAG,MAAM,IAAK,CAAA,EAAE,MAAQ,EAAA,EAAA,IAAM,CAAC,CAAA,EAAG,MAAM,CAAI,GAAA,CAAC,CAAC,CAAM,KAAA;AAClG,EAAA,MAAM,qBAAyC,EAAC;AAChD,EAAA,MAAM,MAAM,CAAC,CAAA,KACX,IAAI,CAAK,IAAA,CAAA,GAAI,KAAK,IAAO,GAAA,CAAA,GAAI,OAAO,CAAI,GAAA,IAAA,GAAO,IAAI,EAAO,KAAA,CAAA,GAAI,OAAO,CAAI,GAAA,EAAA,KAAO,IAAI,IAAO,GAAA,IAAA;AAE7F,EAAY,WAAA,CAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AACzB,IAAA,MAAM,aAAa,CAAI,GAAA,GAAA;AACvB,IAAM,MAAA,EAAA,GAAK,IAAI,CAAC,CAAA,CAAA;AAChB,IAAA,MAAM,OAAO,CAAG,EAAA,CAAC,CAAG,EAAA,GAAA,CAAI,CAAC,CAAC,CAAA,EAAA,CAAA;AAC1B,IAAA,MAAM,cAAc,CAAG,EAAA,CAAC,CAAG,EAAA,GAAA,CAAI,CAAC,CAAC,CAAA,iBAAA,CAAA;AAEjC,IAAA,kBAAA,CAAmB,IAAK,CAAA;AAAA,MACtB,EAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAU,EAAA,KAAA;AAAA,MACV,MAAQ,EAAA,CAAC,KAAc,EAAA,WAAA,EAAsB,UAAoC,KAAA;AAC/E,QAAO,OAAA,EAAE,CAAC,EAAE,GAAG,oBAAoB,KAAO,EAAA,UAAA,EAAY,WAAa,EAAA,UAAU,CAAE,EAAA;AAAA,OACjF;AAAA,MACA,cAAgB,EAAA;AAAA,KACjB,CAAA;AAAA,GACF,CAAA;AACD,EAAO,OAAA,kBAAA;AACT,CAAA;AAGO,MAAM,YAA2B,GAAA;AAAA,EACtC,GAAK,EAAA,CAAA;AAAA,EACL,GAAA,EAAK,CAAC,MAAO,CAAA,SAAA;AAAA,EACb,KAAK,MAAO,CAAA,SAAA;AAAA,EACZ,QAAQ,MAAO,CAAA,SAAA;AAAA,EACf,IAAM,EAAA,IAAA;AAAA,EACN,IAAM,EAAA,IAAA;AAAA,EACN,KAAO,EAAA,IAAA;AAAA,EACP,WAAa,EAAA,IAAA;AAAA,EACb,YAAc,EAAA,IAAA;AAAA,EACd,KAAO,EAAA,CAAA;AAAA,EACP,YAAc,EAAA,CAAA;AAAA,EACd,SAAW,EAAA,IAAA;AAAA,EACX,SAAW,EAAA,IAAA;AAAA,EACX,KAAO,EAAA,IAAA;AAAA,EACP,IAAM,EAAA,IAAA;AAAA,EACN,KAAO,EAAA,CAAA;AAAA,EACP,MAAM,MAAO,CAAA,SAAA;AAAA,EACb,QAAU,EAAA,CAAA;AAAA;AAAA,EAEV,eAAiB,EAAA;AACnB;AAEgB,SAAA,eAAA,CAAgB,KAAc,EAAA,WAAA,EAAsB,UAAiC,EAAA;AACnG,EAAM,MAAA,KAAA,GAAoB,EAAE,GAAG,YAAa,EAAA;AAE5C,EAAA,MAAM,OAAO,KAAM,CAAA,MAAA;AAGnB,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,MAAM,gBAAgB,KAAM,CAAA,IAAA,KAAS,UAAU,MAAU,IAAA,KAAA,CAAM,SAAS,SAAU,CAAA,IAAA;AAElF,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,IAAI,IAAA,YAAA,GAAe,KAAK,CAAC,CAAA;AAEzB,IAAA,IAAI,MAAM,CAAG,EAAA;AACX,MAAA,KAAA,CAAM,KAAQ,GAAA,YAAA;AAAA;AAGhB,IAAA,KAAA,CAAM,IAAO,GAAA,YAAA;AAEb,IAAA,IAAI,gBAAgB,IAAM,EAAA;AACxB,MAAA,IAAI,WAAa,EAAA;AACf,QAAA;AAAA;AAEF,MAAA,IAAI,UAAY,EAAA;AACd,QAAe,YAAA,GAAA,CAAA;AAAA;AACjB;AAGF,IAAM,KAAA,CAAA,KAAA,EAAA;AAEN,IAAA,IAAI,gBAAgB,IAAQ,IAAA,CAAC,MAAO,CAAA,KAAA,CAAM,YAAY,CAAG,EAAA;AAEvD,MAAM,MAAA,OAAA,GAAU,MAAM,YAAiB,KAAA,IAAA;AACvC,MAAA,IAAI,OAAS,EAAA;AACX,QAAA,KAAA,CAAM,YAAe,GAAA,YAAA;AAAA;AAGvB,MAAA,IAAI,aAAe,EAAA;AACjB,QAAA,KAAA,CAAM,GAAO,IAAA,YAAA;AACb,QAAA,KAAA,CAAM,SAAY,GAAA,KAAA;AAClB,QAAM,KAAA,CAAA,YAAA,EAAA;AAEN,QAAA,IAAI,CAAC,OAAS,EAAA;AACZ,UAAM,MAAA,IAAA,GAAO,eAAe,KAAM,CAAA,WAAA;AAClC,UAAI,IAAA,KAAA,CAAM,OAAO,IAAM,EAAA;AACrB,YAAA,KAAA,CAAM,IAAO,GAAA,IAAA;AAAA;AAGf,UAAI,IAAA,KAAA,CAAM,cAAe,YAAc,EAAA;AAErC,YAAA,KAAA,CAAM,eAAkB,GAAA,KAAA;AAAA,WACnB,MAAA;AACL,YAAA,IAAI,MAAM,eAAiB,EAAA;AACzB,cAAA,KAAA,CAAM,KAAS,IAAA,IAAA;AAAA;AAEjB,YAAA,KAAA,CAAM,eAAkB,GAAA,IAAA;AAAA;AAC1B;AAGF,QAAI,IAAA,YAAA,GAAe,MAAM,GAAK,EAAA;AAC5B,UAAA,KAAA,CAAM,GAAM,GAAA,YAAA;AAAA;AAGd,QAAI,IAAA,YAAA,GAAe,MAAM,GAAK,EAAA;AAC5B,UAAA,KAAA,CAAM,GAAM,GAAA,YAAA;AAAA;AAGd,QAAA,IAAI,YAAe,GAAA,KAAA,CAAM,MAAU,IAAA,YAAA,GAAe,CAAG,EAAA;AACnD,UAAA,KAAA,CAAM,MAAS,GAAA,YAAA;AAAA;AACjB;AAGF,MAAA,IAAI,iBAAiB,CAAG,EAAA;AACtB,QAAA,KAAA,CAAM,SAAY,GAAA,KAAA;AAAA;AAGpB,MAAA,KAAA,CAAM,WAAc,GAAA,YAAA;AAAA;AACtB;AAGF,EAAA,IAAI,KAAM,CAAA,GAAA,KAAQ,CAAC,MAAA,CAAO,SAAW,EAAA;AACnC,IAAA,KAAA,CAAM,GAAM,GAAA,IAAA;AAAA;AAGd,EAAI,IAAA,KAAA,CAAM,GAAQ,KAAA,MAAA,CAAO,SAAW,EAAA;AAClC,IAAA,KAAA,CAAM,GAAM,GAAA,IAAA;AAAA;AAGd,EAAI,IAAA,KAAA,CAAM,IAAS,KAAA,MAAA,CAAO,SAAW,EAAA;AACnC,IAAA,KAAA,CAAM,IAAO,GAAA,IAAA;AAAA;AAGf,EAAI,IAAA,KAAA,CAAM,eAAe,CAAG,EAAA;AAC1B,IAAM,KAAA,CAAA,IAAA,GAAO,KAAM,CAAA,GAAA,GAAO,KAAM,CAAA,YAAA;AAAA;AAGlC,EAAA,IAAI,MAAM,SAAW,EAAA;AACnB,IAAA,KAAA,CAAM,SAAY,GAAA,KAAA;AAAA;AAGpB,EAAA,IAAI,KAAM,CAAA,GAAA,KAAQ,IAAQ,IAAA,KAAA,CAAM,QAAQ,IAAM,EAAA;AAC5C,IAAM,KAAA,CAAA,KAAA,GAAQ,KAAM,CAAA,GAAA,GAAM,KAAM,CAAA,GAAA;AAAA;AAGlC,EAAA,IAAIjB,gBAAS,KAAM,CAAA,YAAY,KAAKA,eAAS,CAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AAC/D,IAAM,KAAA,CAAA,IAAA,GAAO,KAAM,CAAA,WAAA,GAAc,KAAM,CAAA,YAAA;AAAA;AAGzC,EAAA,IAAIA,gBAAS,KAAM,CAAA,YAAY,KAAKA,eAAS,CAAA,KAAA,CAAM,IAAI,CAAG,EAAA;AACxD,IAAA,KAAA,CAAM,QAAY,GAAA,KAAA,CAAM,IAAO,GAAA,KAAA,CAAM,YAAgB,GAAA,GAAA;AAAA;AAGvD,EAAO,OAAA,KAAA;AACT;AAEA,SAAS,cAAA,CAAe,KAAc,EAAA,WAAA,EAAsB,UAAiC,EAAA;AAC3F,EAAA,OAAO,EAAE,KAAA,EAAO,KAAM,CAAA,MAAA,CAAO,CAAC,CAAE,EAAA;AAClC;AAEA,SAAS,qBAAA,CAAsB,KAAc,EAAA,WAAA,EAAsB,UAAiC,EAAA;AAClG,EAAA,MAAM,OAAO,KAAM,CAAA,MAAA;AACnB,EAAA,KAAA,IAAS,GAAM,GAAA,CAAA,EAAG,GAAM,GAAA,IAAA,CAAK,QAAQ,GAAO,EAAA,EAAA;AAC1C,IAAM,MAAA,CAAA,GAAI,KAAK,GAAG,CAAA;AAClB,IAAA,IAAI,KAAK,IAAQ,IAAA,CAAC,MAAO,CAAA,KAAA,CAAM,CAAC,CAAG,EAAA;AACjC,MAAO,OAAA,EAAE,cAAc,CAAE,EAAA;AAAA;AAC3B;AAEF,EAAO,OAAA,EAAE,cAAc,IAAK,EAAA;AAC9B;AAEA,SAAS,aAAA,CAAc,KAAc,EAAA,WAAA,EAAsB,UAAiC,EAAA;AAC1F,EAAA,MAAM,OAAO,KAAM,CAAA,MAAA;AACnB,EAAA,OAAO,EAAE,IAAM,EAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAC,CAAE,EAAA;AACvC;AAEA,SAAS,oBAAA,CAAqB,KAAc,EAAA,WAAA,EAAsB,UAAiC,EAAA;AACjG,EAAA,MAAM,OAAO,KAAM,CAAA,MAAA;AACnB,EAAI,IAAA,GAAA,GAAM,KAAK,MAAS,GAAA,CAAA;AACxB,EAAA,OAAO,OAAO,CAAG,EAAA;AACf,IAAM,MAAA,CAAA,GAAI,KAAK,GAAK,EAAA,CAAA;AACpB,IAAA,IAAI,KAAK,IAAQ,IAAA,CAAC,MAAO,CAAA,KAAA,CAAM,CAAC,CAAG,EAAA;AACjC,MAAO,OAAA,EAAE,aAAa,CAAE,EAAA;AAAA;AAC1B;AAEF,EAAO,OAAA,EAAE,aAAa,IAAK,EAAA;AAC7B;AAGA,SAASiB,iBAAA,CAAgB,KAAc,EAAA,WAAA,EAAsB,UAAiC,EAAA;AAE5F,EAAI,IAAA,EAAE,MAAM,IAAS,KAAA,SAAA,CAAU,UAAU,KAAM,CAAA,IAAA,KAAS,UAAU,IAAO,CAAA,EAAA;AACvE,IAAA,OAAO,EAAE,QAAA,EAAU,CAAG,EAAA,MAAA,EAAQ,CAAE,EAAA;AAAA;AAGlC,EAAA,IAAI,SAAY,GAAA,CAAA;AAChB,EAAA,IAAI,WAAc,GAAA,CAAA;AAClB,EAAA,IAAI,mBAAsB,GAAA,CAAA;AAC1B,EAAA,MAAM,OAAO,KAAM,CAAA,MAAA;AACnB,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,IAAM,MAAA,YAAA,GAAe,KAAK,CAAC,CAAA;AAC3B,IAAA,IAAI,gBAAgB,IAAM,EAAA;AACxB,MAAA,mBAAA,EAAA;AACA,MAAA,IAAI,QAAW,GAAA,WAAA;AACf,MAAA,WAAA,IAAA,CAAgB,eAAe,QAAY,IAAA,mBAAA;AAC3C,MAAc,SAAA,IAAA,CAAA,YAAA,GAAe,aAAa,YAAe,GAAA,WAAA,CAAA;AAAA;AAC3D;AAEF,EAAA,IAAI,sBAAsB,CAAG,EAAA;AAC3B,IAAA,MAAM,WAAW,SAAY,GAAA,mBAAA;AAC7B,IAAA,OAAO,EAAE,QAAU,EAAA,MAAA,EAAQ,IAAK,CAAA,IAAA,CAAK,QAAQ,CAAE,EAAA;AAAA;AAEjD,EAAA,OAAO,EAAE,QAAA,EAAU,CAAG,EAAA,MAAA,EAAQ,CAAE,EAAA;AAClC;AAEA,SAAS,oBAAA,CAAqB,KAAc,EAAA,WAAA,EAAsB,UAAiC,EAAA;AACjG,EAAA,MAAM,OAAO,KAAM,CAAA,MAAA;AACnB,EAAA,IAAI,KAAQ,GAAA,CAAA;AACZ,EAAA,IAAI,KAAQ,GAAA,IAAA;AACZ,EAAA,IAAI,IAAO,GAAA,IAAA;AACX,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,IAAI,IAAA,YAAA,GAAe,KAAK,CAAC,CAAA;AACzB,IAAA,IAAI,iBAAiB,IAAM,EAAA;AACzB,MAAA,IAAI,WAAa,EAAA;AACf,QAAA;AAAA;AAEF,MAAA,IAAI,UAAY,EAAA;AACd,QAAe,YAAA,GAAA,CAAA;AAAA;AACjB;AAEF,IAAI,IAAA,CAAC,KAAS,IAAA,IAAA,KAAS,YAAc,EAAA;AACnC,MAAA,KAAA,EAAA;AAAA;AAEF,IAAQ,KAAA,GAAA,KAAA;AACR,IAAO,IAAA,GAAA,YAAA;AAAA;AAGT,EAAO,OAAA,EAAE,aAAa,KAAM,EAAA;AAC9B;AAEA,SAAS,sBAAA,CAAuB,KAAc,EAAA,WAAA,EAAsB,UAAiC,EAAA;AACnG,EAAA,MAAM,OAAO,KAAM,CAAA,MAAA;AACnB,EAAM,MAAA,QAAA,uBAAe,GAAI,EAAA;AACzB,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,IAAI,IAAA,YAAA,GAAe,KAAK,CAAC,CAAA;AACzB,IAAA,IAAI,iBAAiB,IAAM,EAAA;AACzB,MAAA,IAAI,WAAa,EAAA;AACf,QAAA;AAAA;AAEF,MAAA,IAAI,UAAY,EAAA;AACd,QAAe,YAAA,GAAA,CAAA;AAAA;AACjB;AAEF,IAAA,QAAA,CAAS,IAAI,YAAY,CAAA;AAAA;AAE3B,EAAO,OAAA,EAAE,aAAe,EAAA,QAAA,CAAS,IAAK,EAAA;AACxC;AAEA,SAAS,mBAAoB,CAAA,KAAA,EAAc,UAAoB,EAAA,WAAA,EAAsB,UAA6B,EAAA;AAChH,EAAA,IAAI,OAAO,KAAM,CAAA,MAAA;AAEjB,EAAA,IAAI,WAAa,EAAA;AACf,IAAA,IAAA,GAAO,IAAK,CAAA,MAAA,CAAO,CAAC,KAAA,KAAU,UAAU,IAAI,CAAA;AAAA;AAE9C,EAAA,IAAI,UAAY,EAAA;AACd,IAAA,IAAA,GAAO,KAAK,GAAI,CAAA,CAAC,UAAW,KAAU,KAAA,IAAA,GAAO,IAAI,KAAM,CAAA;AAAA;AAGzD,EAAM,MAAA,MAAA,GAAS,KAAK,KAAM,EAAA,CAAE,KAAK,CAAC,CAAA,EAAG,CAAM,KAAA,CAAA,GAAI,CAAC,CAAA;AAChD,EAAA,MAAM,QAAQ,IAAK,CAAA,KAAA,CAAA,CAAO,MAAO,CAAA,MAAA,GAAS,KAAK,UAAU,CAAA;AACzD,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,eAAA,CAAgB,KAAsB,EAAA,WAAA,EAAsB,UAAiC,EAAA;AACpG,EAAA,MAAM,UAAoB,EAAC;AAE3B,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,KAAM,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAC5C,IAAI,IAAA,YAAA,GAAe,KAAM,CAAA,MAAA,CAAO,CAAC,CAAA;AAEjC,IAAA,IAAI,gBAAgB,IAAM,EAAA;AACxB,MAAA,IAAI,WAAa,EAAA;AACf,QAAA;AAAA;AAEF,MAAA,IAAI,UAAY,EAAA;AACd,QAAe,YAAA,GAAA,CAAA;AAAA;AACjB;AAGF,IAAA,OAAA,CAAQ,KAAK,YAAY,CAAA;AAAA;AAG3B,EAAA,OAAA,CAAQ,IAAK,CAAA,CAAC,CAAG,EAAA,CAAA,KAAM,IAAI,CAAC,CAAA;AAE5B,EAAA,MAAM,GAAM,GAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,SAAS,CAAC,CAAA;AAEzC,EAAI,IAAA,OAAA,CAAQ,MAAS,GAAA,CAAA,KAAM,CAAG,EAAA;AAC5B,IAAO,OAAA,EAAE,SAAS,OAAQ,CAAA,GAAA,GAAM,CAAC,CAAI,GAAA,OAAA,CAAQ,GAAG,CAAA,IAAK,CAAE,EAAA;AAAA,GAClD,MAAA;AACL,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAQ,CAAA,GAAG,CAAE,EAAA;AAAA;AAElC;;AC1tBgB,SAAA,aAAA,CACd,IACA,EAAA,EAAA,EACA,KACA,EAAA;AAEA,EAAI,IAAA,IAAA,IAAQ,IAAQ,IAAA,KAAA,IAAS,IAAM,EAAA;AACjC,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAO,IAAA,GAAA,MAAA;AAAA;AAET,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAQ,KAAA,GAAA,MAAA;AAAA;AAEV,IAAA,IAAI,EAAO,KAAAC,0BAAA,CAAoB,GAAO,IAAA,EAAA,KAAOA,2BAAoB,GAAK,EAAA;AACpE,MAAA,EAAA,GAAKA,0BAAoB,CAAA,EAAA;AAAA;AAC3B;AAGF,EAAA,QAAQ,EAAI;AAAA,IACV,KAAKA,0BAAoB,CAAA,EAAA;AACvB,MAAA,OAAO,CAAG,EAAA,IAAI,CAAO,CAAA,KAAA,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,IAC/B,KAAKA,0BAAoB,CAAA,GAAA;AACvB,MAAA,OAAO,CAAG,EAAA,IAAI,CAAO,CAAA,KAAA,CAAA,EAAG,KAAK,CAAA,CAAA;AAAA,IAC/B,KAAKA,0BAAoB,CAAA,EAAA;AACvB,MAAA,OAAO,IAAO,GAAA,KAAA;AAAA,IAChB,KAAKA,0BAAoB,CAAA,GAAA;AACvB,MAAA,OAAO,IAAQ,IAAA,KAAA;AAAA,IACjB,KAAKA,0BAAoB,CAAA,EAAA;AACvB,MAAA,OAAO,IAAO,GAAA,KAAA;AAAA,IAChB,KAAKA,0BAAoB,CAAA,GAAA;AACvB,MAAA,OAAO,IAAQ,IAAA,KAAA;AAAA,IACjB;AACE,MAAO,OAAA,KAAA;AAAA;AAEb;;ACzBA,SAAS,iBAAiB,CAAc,EAAA;AACtC,EAAA,OAAO,CAAM,KAAA,SAAA,CAAU,SAAa,IAAA,CAAA,KAAM,SAAU,CAAA,SAAA;AACtD;AAEO,MAAM,qBAAmE,GAAA;AAAA,EAC9E,IAAI,cAAe,CAAA,OAAA;AAAA,EACnB,IAAM,EAAA,oBAAA;AAAA,EACN,WAAa,EAAA,yDAAA;AAAA;AAAA,EAGb,cAAgB,EAAA;AAAA,IACd,SAAS,SAAU,CAAA,SAAA;AAAA,IACnB,IAAIA,0BAAoB,CAAA,GAAA;AAAA,IACxB,KAAO,EAAA;AAAA,GACT;AAAA,EAEA,GAAA,EAAK,CAAC,KAAU,KAAA;AACd,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,OAAS,EAAA;AAC5B,MAAA,OAAO,MAAM,KAAA;AAAA;AAEf,IAAA,IAAI,EAAE,OAAA,EAAS,EAAI,EAAA,KAAA,EAAU,GAAA,KAAA;AAC7B,IAAM,MAAA,SAAA,GAAY,iBAAiB,OAAO,CAAA;AAC1C,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAA,EAAA,GAAKA,0BAAoB,CAAA,EAAA;AAAA;AAE3B,IAAO,OAAA,CAAC,KAAc,EAAA,KAAA,EAAkB,SAA2B,KAAA;AACjE,MAAA,MAAM,OAAO,WAAY,CAAA;AAAA,QACvB,KAAA;AAAA,QACA,QAAA,EAAU,CAAC,OAAO;AAAA,OACnB,EAAE,OAAO,CAAA;AAEV,MAAA,IAAI,SAAW,EAAA;AACb,QAAA,OAAO,QAAQ,IAAI,CAAA;AAAA;AAErB,MAAO,OAAA,aAAA,CAAc,IAAM,EAAA,EAAA,EAAK,KAAK,CAAA;AAAA,KACvC;AAAA,GACF;AAAA,EAEA,qBAAA,EAAuB,CAAC,KAAU,KAAA;AAChC,IAAO,OAAA,CAAA,UAAA,EAAa,MAAM,OAAO,CAAA,CAAA,CAAA;AAAA;AAErC,CAAA;;ACvDA,MAAM,YAAA,GAAe,CAAC,GAAK,EAAA,GAAA,EAAK,KAAK,GAAK,EAAA,GAAA,EAAK,KAAK,IAAM,EAAA,GAAA,EAAK,KAAK,GAAK,EAAA,GAAA,EAAK,KAAK,GAAK,EAAA,GAAA,EAAK,KAAK,GAAK,EAAA,GAAA,EAAK,KAAK,GAAG,CAAA;AACpH,MAAM,cAAiB,GAAA,MAAA,GAAS,YAAa,CAAA,IAAA,CAAK,IAAI,CAAI,GAAA,IAAA;AAC1D,MAAM,iBAAoB,GAAA,IAAI,MAAO,CAAA,cAAA,EAAgB,GAAG,CAAA;AACxD,MAAM,mBAAsB,GAAA,IAAI,MAAO,CAAA,QAAA,GAAW,gBAAgB,GAAG,CAAA;AAE9D,SAAS,qBAAqB,KAAe,EAAA;AAClD,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAO,OAAA,KAAA;AAAA;AAGT,EAAO,OAAA,KAAA,CAAM,OAAQ,CAAA,iBAAA,EAAmB,MAAM,CAAA;AAChD;AAEO,SAAS,wBAAwB,KAAe,EAAA;AACrD,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAO,OAAA,KAAA;AAAA;AAGT,EAAO,OAAA,KAAA,CAAM,OAAQ,CAAA,mBAAA,EAAqB,IAAI,CAAA;AAChD;AAEO,SAAS,oBAAoB,GAAsB,EAAA;AACxD,EAAA,IAAI,CAAC,GAAK,EAAA;AACR,IAAO,OAAA,KAAA;AAAA;AAGT,EAAO,OAAA,GAAA,CAAI,CAAC,CAAM,KAAA,GAAA;AACpB;AAEO,SAAS,gBAAgB,GAAqB,EAAA;AACnD,EAAI,IAAA,CAAC,mBAAoB,CAAA,GAAG,CAAG,EAAA;AAC7B,IAAA,OAAO,IAAI,MAAA,CAAO,CAAI,CAAA,EAAA,GAAG,CAAG,CAAA,CAAA,CAAA;AAAA;AAG9B,EAAA,MAAM,QAAQ,GAAI,CAAA,KAAA,CAAM,IAAI,MAAA,CAAO,uBAAuB,CAAC,CAAA;AAE3D,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAA,MAAM,IAAI,KAAA,CAAM,CAAI,CAAA,EAAA,GAAG,CAAsC,oCAAA,CAAA,CAAA;AAAA;AAG/D,EAAA,OAAO,IAAI,MAAO,CAAA,KAAA,CAAM,CAAC,CAAG,EAAA,KAAA,CAAM,CAAC,CAAC,CAAA;AACtC;AAEO,SAAS,WAAW,GAAqB,EAAA;AAC9C,EAAA,IAAI,CAAC,GAAK,EAAA;AACR,IAAO,OAAA,CAAA;AAAA;AAGT,EAAM,MAAA,EAAA,GAAK,QAAS,CAAA,GAAA,EAAK,EAAE,CAAA;AAC3B,EAAA,MAAM,OAAO,GAAI,CAAA,KAAA,CAAM,MAAO,CAAA,EAAE,EAAE,MAAM,CAAA;AACxC,EAAA,MAAM,CAAI,GAAA,GAAA;AACV,EAAA,MAAM,IAAI,CAAI,GAAA,EAAA;AACd,EAAA,MAAM,IAAI,CAAI,GAAA,EAAA;AACd,EAAA,MAAM,IAAI,CAAI,GAAA,EAAA;AAEd,EAAA,QAAQ,IAAM;AAAA,IACZ,KAAK,GAAA;AACH,MAAA,OAAO,EAAK,GAAA,CAAA;AAAA,IACd,KAAK,GAAA;AACH,MAAA,OAAO,EAAK,GAAA,CAAA;AAAA,IACd,KAAK,GAAA;AACH,MAAA,OAAO,EAAK,GAAA,CAAA;AAAA,IACd,KAAK,GAAA;AACH,MAAA,OAAO,EAAK,GAAA,CAAA;AAAA,IACd;AACE,MAAA,IAAI,CAAC,IAAM,EAAA;AACT,QAAO,OAAA,KAAA,CAAM,EAAE,CAAA,GAAI,CAAI,GAAA,EAAA;AAAA;AAEzB,MAAM,MAAA,IAAI,KAAM,CAAA,sBAAA,GAAyB,IAAI,CAAA;AAAA;AAEnD;AAEO,SAAS,eAAe,KAA0C,EAAA;AACvE,EAAA,IAAI,UAAU,IAAQ,IAAA,KAAA,KAAU,UAAa,MAAO,CAAA,QAAA,CAAS,KAAK,CAAG,EAAA;AACnE,IAAA,OAAO,MAAM,QAAS,EAAA;AAAA;AAExB,EAAO,OAAA,EAAA;AACT;AAEO,SAAS,qBAAqB,KAAmC,EAAA;AACtE,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAO,OAAA,KAAA,CAAA;AAAA;AAET,EAAM,MAAA,CAAA,GAAI,QAAS,CAAA,KAAA,EAAO,EAAE,CAAA;AAC5B,EAAO,OAAA,KAAA,CAAM,CAAC,CAAA,GAAI,KAAY,CAAA,GAAA,CAAA;AAChC;AAEO,SAAS,mBAAmB,KAAmC,EAAA;AACpE,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAO,OAAA,KAAA,CAAA;AAAA;AAET,EAAM,MAAA,CAAA,GAAI,WAAW,KAAK,CAAA;AAC1B,EAAO,OAAA,KAAA,CAAM,CAAC,CAAA,GAAI,KAAY,CAAA,GAAA,CAAA;AAChC;AAEO,SAAS,aAAa,MAAgB,EAAA;AAC3C,EAAM,MAAA,GAAA,GAAMC,iBAAU,MAAM,CAAA;AAC5B,EAAO,OAAA,GAAA,CAAI,OAAO,CAAC,CAAA,CAAE,aAAgB,GAAA,GAAA,CAAI,UAAU,CAAC,CAAA;AACtD;AAEO,SAAS,YAAY,KAAuB,EAAA;AACjD,EAAO,OAAA,KAAA,CAAM,OAAQ,CAAA,uBAAA,EAAyB,MAAM,CAAA;AACtD;;ACtFY,IAAA,kBAAA,qBAAAC,mBAAL,KAAA;AACL,EAAAA,oBAAA,SAAU,CAAA,GAAA,SAAA;AACV,EAAAA,oBAAA,SAAU,CAAA,GAAA,SAAA;AAFA,EAAAA,OAAAA,mBAAAA;AAAA,CAAA,EAAA,kBAAA,IAAA,EAAA;AAkBZ,MAAM,gBAA6C,GAAA;AAAA,EACjD,IAAI,cAAe,CAAA,MAAA;AAAA,EACnB,IAAM,EAAA,YAAA;AAAA,EACN,WAAa,EAAA,sBAAA;AAAA,EACb,cAAgB,EAAA,EAAA;AAAA,EAEhB,GAAA,EAAK,CAAC,IAA+B,KAAA;AACnC,IAAA,MAAM,WAAc,mBAAA,IAAI,GAAY,CAAA,CAAC,IAAI,CAAC,CAAA;AAE1C,IAAM,MAAA,QAAA,GAAW,kBAAkB,WAAW,CAAA;AAE9C,IAAO,OAAA,CAAC,KAAc,EAAA,KAAA,EAAkB,SAA2B,KAAA;AACjE,MAAA,OACE,IAAS,KAAA,KAAA,CAAM,IACf,IAAA,IAAA,KAAS,oBAAoB,KAAO,EAAA,KAAA,EAAO,SAAS,CAAA,IACpD,QAAQ,QAAY,IAAA,QAAA,CAAS,KAAO,EAAA,KAAA,EAAO,SAAS,CAAC,CAAA;AAAA,KAEzD;AAAA,GACF;AAAA,EAEA,qBAAA,EAAuB,CAAC,IAAiB,KAAA;AACvC,IAAA,OAAO,eAAe,IAAI,CAAA,CAAA;AAAA;AAE9B,CAAA;AAEA,MAAM,yBAAqE,GAAA;AAAA,EACzE,IAAI,cAAe,CAAA,OAAA;AAAA,EACnB,IAAM,EAAA,aAAA;AAAA,EACN,WAAa,EAAA,wCAAA;AAAA,EACb,cAAgB,EAAA;AAAA,IACd,IAAM,EAAA,SAAA;AAAA,IACN,OAAO;AAAC,GACV;AAAA,EAEA,GAAA,EAAK,CAAC,OAAiD,KAAA;AACrD,IAAA,MAAM,EAAE,KAAA,EAAO,IAAO,GAAA,SAAA,gBAA+B,GAAA,OAAA;AACrD,IAAA,MAAM,WAAc,GAAA,IAAI,GAAY,CAAA,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,EAAE,CAAA;AAE/C,IAAM,MAAA,QAAA,GAAW,kBAAkB,WAAW,CAAA;AAE9C,IAAA,MAAM,OAAU,GAAA,CAAC,KAAc,EAAA,KAAA,EAAkB,MAAwB,KAAA;AACvE,MAAA,OACE,YAAY,GAAI,CAAA,KAAA,CAAM,IAAI,CAC1B,IAAA,WAAA,CAAY,IAAI,mBAAoB,CAAA,KAAA,EAAO,OAAO,MAAM,CAAC,KACzD,OAAQ,CAAA,QAAA,IAAY,SAAS,KAAO,EAAA,KAAA,EAAO,MAAM,CAAC,CAAA;AAAA,KAEtD;AAEA,IAAA,IAAI,SAAS,SAA4B,gBAAA;AACvC,MAAO,OAAA,CAAC,KAAc,EAAA,KAAA,EAAkB,MAAwB,KAAA;AAC9D,QAAA,OAAO,CAAC,OAAA,CAAQ,KAAO,EAAA,KAAA,EAAO,MAAM,CAAA;AAAA,OACtC;AAAA;AAEF,IAAO,OAAA,OAAA;AAAA,GACT;AAAA,EAEA,qBAAA,EAAuB,CAAC,OAA2C,KAAA;AACjE,IAAM,MAAA,EAAE,KAAO,EAAA,IAAA,EAAS,GAAA,OAAA;AACxB,IAAA,MAAM,WAAe,GAAA,CAAA,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,EAAC,EAAG,KAAK,IAAI,CAAA;AAC3C,IAAA,IAAI,SAAS,SAA4B,gBAAA;AACvC,MAAA,OAAO,eAAe,WAAW,CAAA,CAAA;AAAA;AAEnC,IAAA,OAAO,WAAW,WAAW,CAAA,CAAA;AAAA;AAEjC,CAAA;AAMO,SAAS,kBAAkB,MAAqB,EAAA;AA1GvD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA2GE,EAAA,IAAI,QAAqC,GAAA,KAAA,CAAA;AAKzC,EAAA,MAAM,sBAAsB,EAAgB,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,eAAA,KAAhB,mBAAiC,QAAjC,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA2C,mBAA3C,IAA2D,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,yBAAA;AACvF,EAAA,IAAI,kBAAoB,EAAA;AACtB,IAAI,IAAA,MAAA,CAAO,GAAI,CAAA,4BAA4B,CAAG,EAAA;AAC5C,MAAW,QAAA,GAAA,CAAC,OAAc,KAAqB,KAAA;AAnHrD,QAAAC,IAAAA,GAAAA;AAoHQ,QACE,OAAA,OAAA,CAAQ,MAAM,MAAM,CAAA;AAAA,QAAA,CAAA,CACpBA,MAAA,KAAM,CAAA,MAAA,KAAN,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,GAAAA,CAAc,cAAa,KAAM,CAAA,IAAA;AAAA,OAErC;AAAA,KACF,MAAA,IAAW,OAAO,GAAI,CAAA,MAAM,KAAK,MAAO,CAAA,GAAA,CAAI,MAAM,CAAG,EAAA;AACnD,MAAW,QAAA,GAAA,CAAC,OAAc,KAAqB,KAAA;AA1HrD,QAAAA,IAAAA,GAAAA;AA2HQ,QAAOA,OAAAA,CAAAA,CAAAA,GAAAA,GAAA,MAAM,IAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,IAAY,WAAe,KAAA,IAAA,IAAQ,KAAM,CAAA,IAAA,KAAS,SAAU,CAAA,IAAA;AAAA,OACrE;AAAA;AACF;AAGF,EAAO,OAAA,QAAA;AACT;AAEA,MAAM,sBAAmD,GAAA;AAAA,EACvD,IAAI,cAAe,CAAA,QAAA;AAAA,EACnB,IAAM,EAAA,sBAAA;AAAA,EACN,WAAa,EAAA,gDAAA;AAAA,EACb,cAAgB,EAAA,MAAA;AAAA,EAEhB,GAAA,EAAK,CAAC,OAAkC,KAAA;AACtC,IAAM,MAAA,MAAA,GAAS,eAAe,OAAO,CAAA;AAErC,IAAO,OAAA,CAAC,KAAc,EAAA,KAAA,EAAkB,SAA2B,KAAA;AACjE,MAAA,MAAM,WAAc,GAAA,mBAAA,CAAoB,KAAO,EAAA,KAAA,EAAO,SAAS,CAAA;AAC/D,MAAA,OAAO,CAAC,CAAC,MAAU,IAAA,MAAA,CAAO,KAAK,WAAW,CAAA;AAAA,KAC5C;AAAA,GACF;AAAA,EAEA,qBAAA,EAAuB,CAAC,OAA4B,KAAA;AAClD,IAAA,OAAO,0BAA0B,OAAO,CAAA,CAAA;AAAA;AAE5C,CAAA;AAOA,MAAM,oBAAiD,GAAA;AAAA,EACrD,IAAI,cAAe,CAAA,YAAA;AAAA,EACnB,IAAM,EAAA,uBAAA;AAAA,EACN,WAAa,EAAA,qDAAA;AAAA,EACb,cAAgB,EAAA,EAAA;AAAA,EAEhB,GAAA,EAAK,CAAC,KAAgC,KAAA;AACpC,IAAO,OAAA,CAAC,KAAc,EAAA,KAAA,EAAkB,SAA2B,KAAA;AACjE,MAAA,OAAO,MAAM,KAAU,KAAA,KAAA;AAAA,KACzB;AAAA,GACF;AAAA,EAEA,qBAAA,EAAuB,CAAC,KAA0B,KAAA;AAChD,IAAA,OAAO,wDAAwD,KAAK,CAAA,CAAA;AAAA;AAExE,CAAA;AAEA,MAAM,4BAA8E,GAAA;AAAA,EAClF,IAAI,cAAe,CAAA,eAAA;AAAA,EACnB,IAAM,EAAA,+BAAA;AAAA,EACN,WAAa,EAAA,+DAAA;AAAA,EACb,cAAgB,EAAA;AAAA,IACd,OAAS,EAAA,MAAA;AAAA,IACT,OAAO;AAAC,GACV;AAAA,EAEA,GAAA,EAAK,CAAC,OAAuD,KAAA;AAtL/D,IAAA,IAAA,EAAA;AAuLI,IAAA,MAAM,aAAgB,GAAA,sBAAA,CAAuB,GAAI,CAAA,CAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,YAAW,EAAE,CAAA;AACvE,IAAM,MAAA,YAAA,GAAe,0BAA0B,GAAI,CAAA;AAAA,MACjD,IAAM,EAAA,SAAA;AAAA,MACN,KAAO,EAAA,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,KAAT,KAAA,IAAA,GAAA,EAAA,GAAkB;AAAC,KAC3B,CAAA;AAED,IAAO,OAAA,CAAC,KAAc,EAAA,KAAA,EAAkB,SAA2B,KAAA;AACjE,MAAO,OAAA,YAAA,CAAa,OAAO,KAAO,EAAA,SAAS,KAAK,aAAc,CAAA,KAAA,EAAO,OAAO,SAAS,CAAA;AAAA,KACvF;AAAA,GACF;AAAA,EAEA,qBAAA,EAAuB,CAAC,OAAiD,KAAA;AAlM3E,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAmMI,IAAM,MAAA,OAAA,GAAA,CAAU,EAAS,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,OAAA,KAAT,IAAoB,GAAA,EAAA,GAAA,EAAA;AACpC,IAAA,MAAM,SAAQ,EAAS,GAAA,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,KAAA,KAAT,IAAgB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAK,SAArB,IAA6B,GAAA,EAAA,GAAA,EAAA;AAC3C,IAAO,OAAA,CAAA,uBAAA,EAA0B,OAAO,CAAA,WAAA,EAAc,KAAK,CAAA,CAAA;AAAA;AAE/D,CAAA;AAEA,MAAM,cAAA,GAAiB,CAAC,OAAyC,KAAA;AAC/D,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAO,OAAA,KAAA,CAAA;AAAA;AAGT,EAAI,IAAA;AACF,IAAA,OAAO,gBAAgB,OAAO,CAAA;AAAA,WACvB,KAAO,EAAA;AACd,IAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AACnB,IAAO,OAAA,KAAA,CAAA;AAAA;AAEX,CAAA;AAGA,MAAM,gBAA6C,GAAA;AAAA,EACjD,IAAI,cAAe,CAAA,MAAA;AAAA,EACnB,IAAM,EAAA,YAAA;AAAA,EACN,WAAa,EAAA,sBAAA;AAAA,EACb,cAAgB,EAAA,MAAA;AAAA,EAEhB,GAAA,EAAK,CAAC,OAAoB,KAAA;AACxB,IAAM,MAAA,KAAA,GAAQ,gBAAgB,OAAO,CAAA;AACrC,IAAA,OAAO,CAAC,KAAqB,KAAA;AAC3B,MAAA,OAAO,KAAM,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA,IAAQ,EAAE,CAAA;AAAA,KACpC;AAAA,GACF;AAAA,EAEA,qBAAA,EAAuB,CAAC,OAAoB,KAAA;AAC1C,IAAA,OAAO,eAAe,OAAO,CAAA,CAAA;AAAA;AAEjC,CAAA;AAKO,SAAS,oBAA2C,GAAA;AACzD,EAAO,OAAA;AAAA,IACL,gBAAA;AAAA,IACA,sBAAA;AAAA,IACA,yBAAA;AAAA,IACA,4BAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,oBAA2C,GAAA;AACzD,EAAA,OAAO,CAAC,gBAAgB,CAAA;AAC1B;;AClPA,MAAM,eAAqD,GAAA;AAAA,EACzD,IAAI,SAAU,CAAA,QAAA;AAAA,EACd,IAAM,EAAA,KAAA;AAAA,EACN,WAAa,EAAA,wBAAA;AAAA,EACb,iBAAmB,EAAA,IAAA;AAAA,EACnB,gBAAgB,EAAC;AAAA;AAAA,EAEjB,GAAA,EAAK,CAAC,OAA6B,KAAA;AACjC,IAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,MAAW,KAAA;AACvC,MAAA,OAAO,gBAAgB,MAAM,CAAA;AAAA,KAC9B,CAAA;AACD,IAAO,OAAA,CAAC,KAAc,EAAA,KAAA,EAAkB,SAA2B,KAAA;AACjE,MAAA,KAAA,MAAW,SAAS,QAAU,EAAA;AAC5B,QAAA,IAAI,KAAM,CAAA,KAAA,EAAO,KAAO,EAAA,SAAS,CAAG,EAAA;AAClC,UAAO,OAAA,IAAA;AAAA;AACT;AAEF,MAAO,OAAA,KAAA;AAAA,KACT;AAAA,GACF;AAAA,EAEA,qBAAA,EAAuB,CAAC,OAA6B,KAAA;AACnD,IAAA,IAAI,IAAO,GAAA,EAAA;AACX,IAAA,KAAA,MAAW,OAAO,OAAS,EAAA;AACzB,MAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,QAAQ,IAAA,IAAA,MAAA;AAAA;AAEV,MAAA,MAAM,OAAU,GAAA,aAAA,CAAc,GAAI,CAAA,GAAA,CAAI,EAAE,CAAA;AACxC,MAAA,IAAA,IAAQ,QAAQ,qBAAwB,GAAA,OAAA,CAAQ,qBAAsB,CAAA,GAAG,IAAI,OAAQ,CAAA,IAAA;AAAA;AAEvF,IAAO,OAAA,IAAA;AAAA;AAEX,CAAA;AAEA,MAAM,eAAqD,GAAA;AAAA,EACzD,IAAI,SAAU,CAAA,QAAA;AAAA,EACd,IAAM,EAAA,KAAA;AAAA,EACN,WAAa,EAAA,wBAAA;AAAA,EACb,iBAAmB,EAAA,IAAA;AAAA,EACnB,gBAAgB,EAAC;AAAA;AAAA,EAEjB,GAAA,EAAK,CAAC,OAA6B,KAAA;AACjC,IAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,MAAW,KAAA;AACvC,MAAA,OAAO,iBAAiB,MAAM,CAAA;AAAA,KAC/B,CAAA;AACD,IAAA,OAAO,CAAC,KAAqB,KAAA;AAC3B,MAAA,KAAA,MAAW,SAAS,QAAU,EAAA;AAC5B,QAAI,IAAA,KAAA,CAAM,KAAK,CAAG,EAAA;AAChB,UAAO,OAAA,IAAA;AAAA;AACT;AAEF,MAAO,OAAA,KAAA;AAAA,KACT;AAAA,GACF;AAAA,EAEA,qBAAA,EAAuB,CAAC,OAA6B,KAAA;AACnD,IAAA,IAAI,IAAO,GAAA,EAAA;AACX,IAAA,KAAA,MAAW,OAAO,OAAS,EAAA;AACzB,MAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,QAAQ,IAAA,IAAA,MAAA;AAAA;AAEV,MAAA,MAAM,OAAU,GAAA,aAAA,CAAc,GAAI,CAAA,GAAA,CAAI,EAAE,CAAA;AACxC,MAAA,IAAA,IAAQ,QAAQ,qBAAwB,GAAA,OAAA,CAAQ,qBAAsB,CAAA,GAAG,IAAI,OAAQ,CAAA,IAAA;AAAA;AAEvF,IAAO,OAAA,IAAA;AAAA;AAEX,CAAA;AAEA,MAAM,gBAAsD,GAAA;AAAA,EAC1D,IAAI,SAAU,CAAA,QAAA;AAAA,EACd,IAAM,EAAA,KAAA;AAAA,EACN,WAAa,EAAA,0BAAA;AAAA,EACb,iBAAmB,EAAA,IAAA;AAAA,EACnB,gBAAgB,EAAC;AAAA;AAAA,EAEjB,GAAA,EAAK,CAAC,OAA6B,KAAA;AACjC,IAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,MAAW,KAAA;AACvC,MAAA,OAAO,gBAAgB,MAAM,CAAA;AAAA,KAC9B,CAAA;AACD,IAAO,OAAA,CAAC,KAAc,EAAA,KAAA,EAAkB,SAA2B,KAAA;AACjE,MAAA,KAAA,MAAW,SAAS,QAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,KAAA,CAAM,KAAO,EAAA,KAAA,EAAO,SAAS,CAAG,EAAA;AACnC,UAAO,OAAA,KAAA;AAAA;AACT;AAEF,MAAO,OAAA,IAAA;AAAA,KACT;AAAA,GACF;AAAA,EAEA,qBAAA,EAAuB,CAAC,OAA6B,KAAA;AACnD,IAAA,IAAI,IAAO,GAAA,EAAA;AACX,IAAA,KAAA,MAAW,OAAO,OAAS,EAAA;AACzB,MAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,QAAQ,IAAA,IAAA,OAAA;AAAA;AAEV,MAAA,MAAM,OAAU,GAAA,aAAA,CAAc,GAAI,CAAA,GAAA,CAAI,EAAE,CAAA;AACxC,MAAA,IAAA,IAAQ,QAAQ,qBAAwB,GAAA,OAAA,CAAQ,qBAAsB,CAAA,GAAG,IAAI,OAAQ,CAAA,IAAA;AAAA;AAEvF,IAAO,OAAA,IAAA;AAAA;AAEX,CAAA;AAEA,MAAM,gBAAsD,GAAA;AAAA,EAC1D,IAAI,SAAU,CAAA,QAAA;AAAA,EACd,IAAM,EAAA,KAAA;AAAA,EACN,WAAa,EAAA,0BAAA;AAAA,EACb,iBAAmB,EAAA,IAAA;AAAA,EACnB,gBAAgB,EAAC;AAAA;AAAA,EAEjB,GAAA,EAAK,CAAC,OAA6B,KAAA;AACjC,IAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,MAAW,KAAA;AACvC,MAAA,OAAO,iBAAiB,MAAM,CAAA;AAAA,KAC/B,CAAA;AACD,IAAA,OAAO,CAAC,KAAqB,KAAA;AAC3B,MAAA,KAAA,MAAW,SAAS,QAAU,EAAA;AAC5B,QAAI,IAAA,CAAC,KAAM,CAAA,KAAK,CAAG,EAAA;AACjB,UAAO,OAAA,KAAA;AAAA;AACT;AAEF,MAAO,OAAA,IAAA;AAAA,KACT;AAAA,GACF;AAAA,EAEA,qBAAA,EAAuB,CAAC,OAA6B,KAAA;AACnD,IAAA,IAAI,IAAO,GAAA,EAAA;AACX,IAAA,KAAA,MAAW,OAAO,OAAS,EAAA;AACzB,MAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,QAAQ,IAAA,IAAA,OAAA;AAAA;AAEV,MAAA,MAAM,OAAU,GAAA,aAAA,CAAc,GAAI,CAAA,GAAA,CAAI,EAAE,CAAA;AACxC,MAAA,IAAA,IAAQ,QAAQ,qBAAwB,GAAA,OAAA,CAAQ,qBAAsB,CAAA,GAAG,IAAI,OAAQ,CAAA,IAAA;AAAA;AAEvF,IAAO,OAAA,IAAA;AAAA;AAEX,CAAA;AAEA,MAAM,eAAmD,GAAA;AAAA,EACvD,IAAI,SAAU,CAAA,WAAA;AAAA,EACd,IAAM,EAAA,KAAA;AAAA,EACN,WAAa,EAAA,wBAAA;AAAA,EACb,iBAAmB,EAAA,IAAA;AAAA,EAEnB,GAAA,EAAK,CAAC,MAA0B,KAAA;AAC9B,IAAM,MAAA,KAAA,GAAQ,gBAAgB,MAAM,CAAA;AACpC,IAAO,OAAA,CAAC,KAAc,EAAA,KAAA,EAAkB,SAA2B,KAAA;AACjE,MAAA,OAAO,CAAC,KAAA,CAAM,KAAO,EAAA,KAAA,EAAO,SAAS,CAAA;AAAA,KACvC;AAAA,GACF;AAAA,EAEA,qBAAA,EAAuB,CAAC,OAA2B,KAAA;AACjD,IAAA,MAAM,OAAU,GAAA,aAAA,CAAc,GAAI,CAAA,OAAA,CAAQ,EAAE,CAAA;AAC5C,IAAM,MAAA,IAAA,GAAO,QAAQ,qBAAwB,GAAA,OAAA,CAAQ,sBAAsB,OAAQ,CAAA,OAAO,IAAI,OAAQ,CAAA,IAAA;AACtG,IAAA,OAAO,MAAS,GAAA,IAAA;AAAA;AAEpB,CAAA;AAEA,MAAM,eAAmD,GAAA;AAAA,EACvD,IAAI,SAAU,CAAA,WAAA;AAAA,EACd,IAAM,EAAA,KAAA;AAAA,EACN,WAAa,EAAA,wBAAA;AAAA,EACb,iBAAmB,EAAA,IAAA;AAAA,EAEnB,GAAA,EAAK,CAAC,MAA0B,KAAA;AAC9B,IAAM,MAAA,KAAA,GAAQ,iBAAiB,MAAM,CAAA;AACrC,IAAA,OAAO,CAAC,KAAqB,KAAA;AAC3B,MAAO,OAAA,CAAC,MAAM,KAAK,CAAA;AAAA,KACrB;AAAA,GACF;AAAA,EAEA,qBAAA,EAAuB,CAAC,OAA2B,KAAA;AACjD,IAAA,MAAM,OAAU,GAAA,aAAA,CAAc,GAAI,CAAA,OAAA,CAAQ,EAAE,CAAA;AAC5C,IAAM,MAAA,IAAA,GAAO,QAAQ,qBAAwB,GAAA,OAAA,CAAQ,sBAAsB,OAAQ,CAAA,OAAO,IAAI,OAAQ,CAAA,IAAA;AACtG,IAAA,OAAO,MAAS,GAAA,IAAA;AAAA;AAEpB,CAAA;AAEa,MAAA,kBAAA,GAAqB,CAAC,KAAiB,KAAA;AAClD,EAAO,OAAA,IAAA;AACT,CAAA;AAEA,MAAM,kBAAA,GAAqB,CAAC,KAAqB,KAAA;AAC/C,EAAO,OAAA,IAAA;AACT,CAAA;AAEA,MAAM,iBAAA,GAAoB,CAAC,KAAiB,KAAA;AAC1C,EAAO,OAAA,KAAA;AACT,CAAA;AAEa,MAAA,mBAAA,GAAsB,CAAC,KAAiB,KAAA;AACnD,EAAO,OAAA,KAAA,CAAM,SAAS,SAAU,CAAA,IAAA;AAClC,CAAA;AAEA,MAAM,iBAAA,GAAoB,CAAC,KAAqB,KAAA;AAC9C,EAAO,OAAA,KAAA;AACT,CAAA;AAEA,MAAM,sBAA2C,GAAA;AAAA,EAC/C,IAAI,SAAU,CAAA,WAAA;AAAA,EACd,IAAM,EAAA,YAAA;AAAA,EACN,WAAa,EAAA,cAAA;AAAA,EAEb,GAAA,EAAK,CAAC,OAAY,KAAA;AAChB,IAAO,OAAA,kBAAA;AAAA,GACT;AAAA,EAEA,qBAAA,EAAuB,CAAC,QAAa,KAAA;AACnC,IAAO,OAAA,QAAA;AAAA;AAEX,CAAA;AAEA,MAAM,sBAA2C,GAAA;AAAA,EAC/C,IAAI,SAAU,CAAA,WAAA;AAAA,EACd,IAAM,EAAA,YAAA;AAAA,EACN,WAAa,EAAA,cAAA;AAAA,EAEb,GAAA,EAAK,CAAC,OAAY,KAAA;AAChB,IAAO,OAAA,kBAAA;AAAA,GACT;AAAA,EAEA,qBAAA,EAAuB,CAAC,QAAa,KAAA;AACnC,IAAO,OAAA,QAAA;AAAA;AAEX,CAAA;AAEA,MAAM,qBAA0C,GAAA;AAAA,EAC9C,IAAI,SAAU,CAAA,UAAA;AAAA,EACd,IAAM,EAAA,WAAA;AAAA,EACN,WAAa,EAAA,aAAA;AAAA,EACb,iBAAmB,EAAA,IAAA;AAAA,EAEnB,GAAA,EAAK,CAAC,OAAY,KAAA;AAChB,IAAO,OAAA,iBAAA;AAAA,GACT;AAAA,EAEA,qBAAA,EAAuB,CAAC,QAAa,KAAA;AACnC,IAAO,OAAA,OAAA;AAAA;AAEX,CAAA;AAEA,MAAM,qBAA0C,GAAA;AAAA,EAC9C,IAAI,SAAU,CAAA,UAAA;AAAA,EACd,IAAM,EAAA,WAAA;AAAA,EACN,WAAa,EAAA,aAAA;AAAA,EAEb,GAAA,EAAK,CAAC,OAAY,KAAA;AAChB,IAAO,OAAA,iBAAA;AAAA,GACT;AAAA,EAEA,qBAAA,EAAuB,CAAC,QAAa,KAAA;AACnC,IAAO,OAAA,OAAA;AAAA;AAEX,CAAA;AAEO,SAAS,yBAAgD,GAAA;AAC9D,EAAA,OAAO,CAAC,eAAA,EAAiB,gBAAkB,EAAA,eAAA,EAAiB,wBAAwB,qBAAqB,CAAA;AAC3G;AAEO,SAAS,yBAAgD,GAAA;AAC9D,EAAA,OAAO,CAAC,eAAA,EAAiB,gBAAkB,EAAA,eAAA,EAAiB,wBAAwB,qBAAqB,CAAA;AAC3G;;AClQA,MAAM,YAAyC,GAAA;AAAA,EAC7C,IAAI,cAAe,CAAA,OAAA;AAAA,EACnB,IAAM,EAAA,aAAA;AAAA,EACN,WAAa,EAAA,iBAAA;AAAA,EACb,cAAgB,EAAA,GAAA;AAAA,EAEhB,GAAA,EAAK,CAAC,OAAoB,KAAA;AACxB,IAAA,IAAI,KAAuB,GAAA,IAAA;AAE3B,IAAI,IAAA,mBAAA,CAAoB,OAAO,CAAG,EAAA;AAChC,MAAI,IAAA;AACF,QAAA,KAAA,GAAQ,gBAAgB,OAAO,CAAA;AAAA,eACxB,KAAO,EAAA;AACd,QAAA,IAAI,iBAAiB,KAAO,EAAA;AAC1B,UAAQ,OAAA,CAAA,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA;AAC5B;AACF,KAGO,MAAA,IAAA,OAAA,CAAQ,QAAS,CAAA,GAAG,CAAG,EAAA;AAE9B,MAAM,MAAA,YAAA,GAAe,QAAQ,KAAM,CAAA,GAAG,EAAE,GAAI,CAAA,oBAAoB,CAAE,CAAA,IAAA,CAAK,GAAG,CAAA;AAC1E,MAAA,KAAA,GAAQ,IAAI,MAAA,CAAO,CAAO,IAAA,EAAA,YAAY,CAAI,EAAA,CAAA,CAAA;AAAA;AAG5C,IAAA,OAAO,CAAC,KAAqB,KAAA;AAhCjC,MAAA,IAAA,EAAA;AAiCM,MAAA,OAAA,CAAO,oCAAO,IAAK,CAAA,KAAA,CAAM,SAAS,EAA3B,CAAA,KAAA,IAAA,GAAA,EAAA,GAAkC,MAAM,KAAU,KAAA,OAAA;AAAA,KAC3D;AAAA,GACF;AAAA,EAEA,qBAAA,EAAuB,CAAC,OAAoB,KAAA;AAC1C,IAAA,OAAO,UAAU,OAAO,CAAA,CAAA;AAAA;AAE5B,CAAA;AAEO,SAAS,gBAAuC,GAAA;AACrD,EAAA,OAAO,CAAC,YAAY,CAAA;AACtB;;ACvCA,MAAM,iBAAsC,GAAA;AAAA,EAC1C,IAAI,cAAe,CAAA,KAAA;AAAA,EACnB,IAAM,EAAA,aAAA;AAAA,EACN,WAAa,EAAA,8BAAA;AAAA,EAEb,GAAA,EAAK,CAAC,IAAoB,KAAA;AACxB,IAAO,OAAA,CAAC,KAAc,EAAA,KAAA,EAAkB,SAA2B,KAAA;AACjE,MAAO,OAAA,KAAA,KAAU,KAAM,CAAA,MAAA,CAAO,CAAC,CAAA;AAAA,KACjC;AAAA,GACF;AAAA,EAEA,uBAAuB,MAAM;AAC3B,IAAO,OAAA,CAAA,WAAA,CAAA;AAAA;AAEX,CAAA;AAEA,MAAM,qBAA0C,GAAA;AAAA,EAC9C,IAAI,cAAe,CAAA,cAAA;AAAA,EACnB,IAAM,EAAA,kBAAA;AAAA,EACN,WAAa,EAAA,yCAAA;AAAA,EAEb,GAAA,EAAK,CAAC,IAAoB,KAAA;AACxB,IAAO,OAAA,CAAC,KAAc,EAAA,KAAA,EAAkB,SAA2B,KAAA;AACjE,MAAA,OAAO,KAAM,CAAA,IAAA,KAAS,SAAU,CAAA,IAAA,IAAQ,KAAU,KAAA,KAAA,CAAM,MAAO,CAAA,IAAA,CAAK,CAAC,CAAA,KAAM,CAAE,CAAA,IAAA,KAAS,UAAU,IAAI,CAAA;AAAA,KACtG;AAAA,GACF;AAAA,EAEA,uBAAuB,MAAM;AAC3B,IAAO,OAAA,CAAA,gBAAA,CAAA;AAAA;AAEX,CAAA;AAKO,SAAS,sBAA6C,GAAA;AAC3D,EAAO,OAAA,CAAC,mBAAmB,qBAAqB,CAAA;AAClD;;ACpCA,MAAM,mBAAkE,GAAA;AAAA,EACtE,IAAI,cAAe,CAAA,KAAA;AAAA,EACnB,IAAM,EAAA,UAAA;AAAA,EACN,WAAa,EAAA,8DAAA;AAAA,EACb,GAAA,EAAK,CAAC,OAAY,KAAA;AAChB,IAAO,OAAA,CAAC,YAAoB,KAAiB,KAAA;AAC3C,MAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AAErC,MAAA,OAAO,SAAS,OAAQ,CAAA,KAAA;AAAA,KAC1B;AAAA,GACF;AAAA,EACA,uBAAuB,MAAM;AAC3B,IAAO,OAAA,CAAA,qCAAA,CAAA;AAAA,GACT;AAAA,EACA,cAAc,MAAM,IAAA;AAAA,EACpB,iBAAmB,EAAA,OAAO,EAAE,KAAA,EAAO,EAAG,EAAA;AACxC,CAAA;AAEA,MAAM,sBAAqE,GAAA;AAAA,EACzE,IAAI,cAAe,CAAA,QAAA;AAAA,EACnB,IAAM,EAAA,cAAA;AAAA,EACN,WAAa,EAAA,kEAAA;AAAA,EACb,GAAA,EAAK,CAAC,OAAY,KAAA;AAChB,IAAO,OAAA,CAAC,YAAoB,KAAiB,KAAA;AAC3C,MAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AAErC,MAAA,OAAO,SAAS,OAAQ,CAAA,KAAA;AAAA,KAC1B;AAAA,GACF;AAAA,EACA,uBAAuB,MAAM;AAC3B,IAAO,OAAA,CAAA,yCAAA,CAAA;AAAA,GACT;AAAA,EACA,cAAc,MAAM,IAAA;AAAA,EACpB,iBAAmB,EAAA,OAAO,EAAE,KAAA,EAAO,EAAG,EAAA;AACxC,CAAA;AAEO,MAAM,qBAAwB,GAAA,MAA0B,CAAC,mBAAA,EAAqB,sBAAsB,CAAA;;ACpC3G,MAAM,kBAA4D,GAAA;AAAA,EAChE,IAAI,cAAe,CAAA,MAAA;AAAA,EACnB,IAAM,EAAA,SAAA;AAAA,EACN,WAAa,EAAA,4CAAA;AAAA,EACb,KAAK,MAAM;AACT,IAAO,OAAA,CAAC,YAAoB,KAAiB,KAAA;AAC3C,MAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AACrC,MAAA,OAAO,KAAS,IAAA,IAAA;AAAA,KAClB;AAAA,GACF;AAAA,EACA,uBAAuB,MAAM;AAC3B,IAAO,OAAA,CAAA,qCAAA,CAAA;AAAA,GACT;AAAA,EACA,cAAc,MAAM,IAAA;AAAA,EACpB,iBAAA,EAAmB,OAAO,EAAC;AAC7B,CAAA;AAEA,MAAM,qBAA+D,GAAA;AAAA,EACnE,IAAI,cAAe,CAAA,SAAA;AAAA,EACnB,IAAM,EAAA,aAAA;AAAA,EACN,WAAa,EAAA,gDAAA;AAAA,EACb,KAAK,MAAM;AACT,IAAO,OAAA,CAAC,YAAoB,KAAiB,KAAA;AAC3C,MAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AACrC,MAAA,OAAO,KAAS,IAAA,IAAA;AAAA,KAClB;AAAA,GACF;AAAA,EACA,uBAAuB,MAAM;AAC3B,IAAO,OAAA,CAAA,yCAAA,CAAA;AAAA,GACT;AAAA,EACA,cAAc,MAAM,IAAA;AAAA,EACpB,iBAAA,EAAmB,OAAO,EAAC;AAC7B,CAAA;AAEO,MAAM,oBAAuB,GAAA,MAA0B,CAAC,kBAAA,EAAoB,qBAAqB,CAAA;;AClCxG,MAAM,qBAAoE,GAAA;AAAA,EACxE,IAAI,cAAe,CAAA,OAAA;AAAA,EACnB,IAAM,EAAA,YAAA;AAAA,EACN,WAAa,EAAA,gDAAA;AAAA,EACb,GAAA,EAAK,CAAC,OAAY,KAAA;AAChB,IAAO,OAAA,CAAC,YAAoB,KAAiB,KAAA;AAC3C,MAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AACrC,MAAI,IAAA,KAAA,CAAM,KAAK,CAAG,EAAA;AAChB,QAAO,OAAA,KAAA;AAAA;AAET,MAAA,OAAO,QAAQ,OAAQ,CAAA,KAAA;AAAA,KACzB;AAAA,GACF;AAAA,EACA,qBAAA,EAAuB,CAAC,OAAY,KAAA;AAClC,IAAO,OAAA,CAAA,oDAAA,EAAuD,QAAQ,KAAK,CAAA,CAAA,CAAA;AAAA,GAC7E;AAAA,EACA,YAAc,EAAA,CAAC,KAAU,KAAA,KAAA,CAAM,SAAS,SAAU,CAAA,MAAA;AAAA,EAClD,iBAAmB,EAAA,OAAO,EAAE,KAAA,EAAO,CAAE,EAAA;AACvC,CAAA;AAEA,MAAM,4BAA2E,GAAA;AAAA,EAC/E,IAAI,cAAe,CAAA,cAAA;AAAA,EACnB,IAAM,EAAA,qBAAA;AAAA,EACN,WAAa,EAAA,4DAAA;AAAA,EACb,GAAA,EAAK,CAAC,OAAY,KAAA;AAChB,IAAO,OAAA,CAAC,YAAoB,KAAiB,KAAA;AAC3C,MAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AACrC,MAAI,IAAA,KAAA,CAAM,KAAK,CAAG,EAAA;AAChB,QAAO,OAAA,KAAA;AAAA;AAET,MAAA,OAAO,SAAS,OAAQ,CAAA,KAAA;AAAA,KAC1B;AAAA,GACF;AAAA,EACA,qBAAA,EAAuB,CAAC,OAAY,KAAA;AAClC,IAAO,OAAA,CAAA,gEAAA,EAAmE,QAAQ,KAAK,CAAA,CAAA,CAAA;AAAA,GACzF;AAAA,EACA,YAAc,EAAA,CAAC,KAAU,KAAA,KAAA,CAAM,SAAS,SAAU,CAAA,MAAA;AAAA,EAClD,iBAAmB,EAAA,OAAO,EAAE,KAAA,EAAO,CAAE,EAAA;AACvC,CAAA;AAEA,MAAM,mBAAkE,GAAA;AAAA,EACtE,IAAI,cAAe,CAAA,KAAA;AAAA,EACnB,IAAM,EAAA,UAAA;AAAA,EACN,WAAa,EAAA,8CAAA;AAAA,EACb,GAAA,EAAK,CAAC,OAAY,KAAA;AAChB,IAAO,OAAA,CAAC,YAAoB,KAAiB,KAAA;AAC3C,MAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AACrC,MAAI,IAAA,KAAA,CAAM,KAAK,CAAG,EAAA;AAChB,QAAO,OAAA,KAAA;AAAA;AAET,MAAA,OAAO,QAAQ,OAAQ,CAAA,KAAA;AAAA,KACzB;AAAA,GACF;AAAA,EACA,qBAAA,EAAuB,CAAC,OAAY,KAAA;AAClC,IAAO,OAAA,CAAA,kDAAA,EAAqD,QAAQ,KAAK,CAAA,CAAA,CAAA;AAAA,GAC3E;AAAA,EACA,YAAc,EAAA,CAAC,KAAU,KAAA,KAAA,CAAM,SAAS,SAAU,CAAA,MAAA;AAAA,EAClD,iBAAmB,EAAA,OAAO,EAAE,KAAA,EAAO,CAAE,EAAA;AACvC,CAAA;AAEA,MAAM,0BAAyE,GAAA;AAAA,EAC7E,IAAI,cAAe,CAAA,YAAA;AAAA,EACnB,IAAM,EAAA,mBAAA;AAAA,EACN,WAAa,EAAA,uDAAA;AAAA,EACb,GAAA,EAAK,CAAC,OAAY,KAAA;AAChB,IAAO,OAAA,CAAC,YAAoB,KAAiB,KAAA;AAC3C,MAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AACrC,MAAI,IAAA,KAAA,CAAM,KAAK,CAAG,EAAA;AAChB,QAAO,OAAA,KAAA;AAAA;AAET,MAAA,OAAO,SAAS,OAAQ,CAAA,KAAA;AAAA,KAC1B;AAAA,GACF;AAAA,EACA,qBAAA,EAAuB,CAAC,OAAY,KAAA;AAClC,IAAO,OAAA,CAAA,2DAAA,EAA8D,QAAQ,KAAK,CAAA,CAAA,CAAA;AAAA,GACpF;AAAA,EACA,YAAc,EAAA,CAAC,KAAU,KAAA,KAAA,CAAM,SAAS,SAAU,CAAA,MAAA;AAAA,EAClD,iBAAmB,EAAA,OAAO,EAAE,KAAA,EAAO,CAAE,EAAA;AACvC,CAAA;AAEO,MAAM,0BAA0B,MAA0B;AAAA,EAC/D,qBAAA;AAAA,EACA,4BAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA;;ACrFA,MAAM,qBAAoE,GAAA;AAAA,EACxE,IAAI,cAAe,CAAA,OAAA;AAAA,EACnB,IAAM,EAAA,YAAA;AAAA,EACN,WAAa,EAAA,wDAAA;AAAA,EACb,GAAA,EAAK,CAAC,OAAY,KAAA;AAChB,IAAO,OAAA,CAAC,YAAoB,KAAiB,KAAA;AAC3C,MAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AACrC,MAAI,IAAA,KAAA,CAAM,KAAK,CAAG,EAAA;AAChB,QAAO,OAAA,KAAA;AAAA;AAET,MAAA,OAAO,KAAQ,GAAA,OAAA,CAAQ,IAAQ,IAAA,KAAA,GAAQ,OAAQ,CAAA,EAAA;AAAA,KACjD;AAAA,GACF;AAAA,EACA,qBAAA,EAAuB,CAAC,OAAY,KAAA;AAClC,IAAA,OAAO,CAAiD,8CAAA,EAAA,OAAA,CAAQ,IAAI,CAAA,KAAA,EAAQ,QAAQ,EAAE,CAAA,CAAA,CAAA;AAAA,GACxF;AAAA,EACA,YAAc,EAAA,CAAC,KAAU,KAAA,KAAA,CAAM,SAAS,SAAU,CAAA,MAAA;AAAA,EAClD,mBAAmB,OAAO,EAAE,IAAM,EAAA,CAAA,EAAG,IAAI,GAAI,EAAA;AAC/C,CAAA;AAEa,MAAA,qBAAA,GAAwB,MAA0B,CAAC,qBAAqB,CAAA;;ACpBrF,MAAM,iBAAwE,GAAA;AAAA,EAC5E,IAAI,cAAe,CAAA,KAAA;AAAA,EACnB,IAAM,EAAA,OAAA;AAAA,EACN,WAAa,EAAA,2CAAA;AAAA,EACb,GAAA,EAAK,CAAC,OAAY,KAAA;AAChB,IAAA,MAAM,KAAQ,GAAA,IAAI,MAAO,CAAA,OAAA,CAAQ,KAAK,CAAA;AAEtC,IAAO,OAAA,CAAC,YAAoB,KAAiB,KAAA;AAC3C,MAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AACrC,MAAO,OAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,KACzB;AAAA,GACF;AAAA,EACA,qBAAA,EAAuB,CAAC,OAAY,KAAA;AAClC,IAAO,OAAA,CAAA,sDAAA,EAAyD,QAAQ,KAAK,CAAA,CAAA;AAAA,GAC/E;AAAA,EACA,cAAc,MAAM,IAAA;AAAA,EACpB,iBAAmB,EAAA,OAAO,EAAE,KAAA,EAAO,IAAK,EAAA;AAC1C,CAAA;AAEa,MAAA,oBAAA,GAAuB,MAA0B,CAAC,iBAAiB,CAAA;;ACnBhF,MAAM,kBAAiE,GAAA;AAAA,EACrE,IAAI,cAAe,CAAA,SAAA;AAAA,EACnB,IAAM,EAAA,oBAAA;AAAA,EACN,WAAa,EAAA,oEAAA;AAAA,EACb,GAAA,EAAK,CAAC,OAAY,KAAA;AAChB,IAAO,OAAA,CAAC,YAAoB,KAAiB,KAAA;AAC3C,MAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AACrC,MAAA,OACG,SACC,OAAQ,CAAA,KAAA,IACR,OAAO,KAAA,KAAU,YACjB,KAAM,CAAA,WAAA,EAAc,CAAA,QAAA,CAAS,QAAQ,KAAM,CAAA,WAAA,EAAa,CAAA,IAC1D,QAAQ,KAAU,KAAA,EAAA;AAAA,KAEtB;AAAA,GACF;AAAA,EACA,uBAAuB,MAAM;AAC3B,IAAO,OAAA,CAAA,qDAAA,CAAA;AAAA,GACT;AAAA,EACA,YAAc,EAAA,CAAC,KAAU,KAAA,KAAA,CAAM,SAAS,SAAU,CAAA,MAAA;AAAA,EAClD,iBAAmB,EAAA,OAAO,EAAE,KAAA,EAAO,EAAG,EAAA;AACxC,CAAA;AAEA,MAAM,0BAAyE,GAAA;AAAA,EAC7E,IAAI,cAAe,CAAA,YAAA;AAAA,EACnB,IAAM,EAAA,4BAAA;AAAA,EACN,WAAa,EAAA,wEAAA;AAAA,EACb,GAAA,EAAK,CAAC,OAAY,KAAA;AAChB,IAAO,OAAA,CAAC,YAAoB,KAAiB,KAAA;AAC3C,MAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AACrC,MAAA,OACE,OAAO,KAAU,KAAA,QAAA,IACjB,OAAQ,CAAA,KAAA,IACR,SACA,OAAQ,CAAA,KAAA,KAAU,EAClB,IAAA,CAAC,MAAM,WAAY,EAAA,CAAE,SAAS,OAAQ,CAAA,KAAA,CAAM,aAAa,CAAA;AAAA,KAE7D;AAAA,GACF;AAAA,EACA,uBAAuB,MAAM;AAC3B,IAAO,OAAA,CAAA,yDAAA,CAAA;AAAA,GACT;AAAA,EACA,YAAc,EAAA,CAAC,KAAU,KAAA,KAAA,CAAM,SAAS,SAAU,CAAA,MAAA;AAAA,EAClD,iBAAmB,EAAA,OAAO,EAAE,KAAA,EAAO,EAAG,EAAA;AACxC,CAAA;AAEO,MAAM,yBAA4B,GAAA,MAA0B,CAAC,kBAAA,EAAoB,0BAA0B,CAAA;;ACvBrG,MAAA,aAAA,GAAgB,IAAI,QAAA,CAA2B,MAAM;AAChE,EAAO,OAAA;AAAA,IACL,GAAG,yBAA0B,EAAA;AAAA;AAAA,IAC7B,GAAG,oBAAqB,EAAA;AAAA;AAAA,IACxB,GAAG,oBAAqB,EAAA;AAAA;AAAA,IACxB,GAAG,sBAAuB,EAAA;AAAA;AAAA,IAC1B;AAAA;AAAA,GACF;AACF,CAAC;AAMY,MAAA,aAAA,GAAgB,IAAI,QAAA,CAA2B,MAAM;AAChE,EAAO,OAAA;AAAA,IACL,GAAG,yBAA0B,EAAA;AAAA;AAAA,IAC7B,GAAG,oBAAqB,EAAA;AAAA;AAAA,IACxB,GAAG,gBAAiB;AAAA;AAAA,GACtB;AACF,CAAC;AAMY,MAAA,aAAA,GAAgB,IAAI,QAAA,CAA2B,MAAM;AAChE,EAAO,OAAA;AAAA,IACL,GAAG,oBAAqB,EAAA;AAAA,IACxB,GAAG,uBAAwB,EAAA;AAAA,IAC3B,GAAG,qBAAsB,EAAA;AAAA,IACzB,GAAG,yBAA0B,EAAA;AAAA,IAC7B,GAAG,qBAAsB,EAAA;AAAA,IACzB,GAAG,oBAAqB;AAAA,GAC1B;AACF,CAAC;AAOM,SAAS,gBAAgB,MAAqC,EAAA;AACnE,EAAA,MAAM,IAAO,GAAA,aAAA,CAAc,GAAI,CAAA,MAAA,CAAO,EAAE,CAAA;AACxC,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAA,MAAM,IAAI,KAAA,CAAM,yBAA4B,GAAA,MAAA,CAAO,EAAE,CAAA;AAAA;AAEvD,EAAO,OAAA,IAAA,CAAK,GAAI,CAAA,MAAA,CAAO,OAAO,CAAA;AAChC;AAOO,SAAS,iBAAiB,MAAqC,EAAA;AACpE,EAAA,MAAM,IAAO,GAAA,aAAA,CAAc,GAAI,CAAA,MAAA,CAAO,EAAE,CAAA;AACxC,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAA,MAAM,IAAI,KAAA,CAAM,yBAA4B,GAAA,MAAA,CAAO,EAAE,CAAA;AAAA;AAEvD,EAAO,OAAA,IAAA,CAAK,GAAI,CAAA,MAAA,CAAO,OAAO,CAAA;AAChC;AAOO,SAAS,gBAAgB,MAAqC,EAAA;AACnE,EAAA,MAAM,IAAO,GAAA,aAAA,CAAc,GAAI,CAAA,MAAA,CAAO,EAAE,CAAA;AACxC,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAA,MAAM,IAAI,KAAA,CAAM,yBAA4B,GAAA,MAAA,CAAO,EAAE,CAAA;AAAA;AAEvD,EAAO,OAAA,IAAA,CAAK,GAAI,CAAA,MAAA,CAAO,OAAO,CAAA;AAChC;;AClGA,MAAM,WAAc,GAAA,6BAAA;AAOb,SAAS,YAAY,MAAwB,EAAA;AAClD,EAAA,MAAM,cAAsB,EAAC;AAC7B,EAAA,MAAA,CAAO,QAAQ,WAAa,EAAA,CAAC,CAAG,EAAA,GAAA,EAAK,UAAU,KAAU,KAAA;AACvD,IAAA,WAAA,CAAY,GAAG,CAAI,GAAA,KAAA;AACnB,IAAO,OAAA,EAAA;AAAA,GACR,CAAA;AACD,EAAO,OAAA,WAAA;AACT;AAKO,SAAS,iBAAiB,UAA8B,EAAA;AAC7D,EAAA,OAAO,UAAW,CAAA,MAAA;AAAA,IAChB,CAAC,KAAK,MAAW,KAAA;AACf,MAAA,IAAI,CAAC,MAAQ,EAAA;AACX,QAAM,MAAA,IAAI,MAAM,2CAA2C,CAAA;AAAA;AAG7D,MAAA,MAAA,CAAO,IAAK,CAAA,MAAM,CAAE,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACnC,QAAI,IAAA,GAAA,CAAI,GAAG,CAAM,KAAA,KAAA,CAAA,IAAa,IAAI,GAAG,CAAA,KAAM,MAAO,CAAA,GAAG,CAAG,EAAA;AACtD,UAAA,OAAO,IAAI,GAAG,CAAA;AAAA;AAChB,OACD,CAAA;AAED,MAAA,MAAA,CAAO,IAAK,CAAA,GAAG,CAAE,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AAChC,QAAI,IAAA,MAAA,CAAO,GAAG,CAAA,KAAM,KAAW,CAAA,EAAA;AAC7B,UAAA,OAAO,IAAI,GAAG,CAAA;AAAA;AAChB,OACD,CAAA;AACD,MAAO,OAAA,GAAA;AAAA,KACT;AAAA,IACA,EAAE,GAAG,UAAW,CAAA,CAAC,CAAE;AAAA,GACrB;AACF;AAKgB,SAAA,gBAAA,CAAiB,QAA4B,YAA8B,EAAA;AACzF,EAAM,MAAA,cAAA,GAAyB,EAAE,GAAG,MAAO,EAAA;AAC3C,EAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAE,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACzC,IAAA,OAAO,eAAe,GAAG,CAAA;AAAA,GAC1B,CAAA;AACD,EAAO,OAAA,cAAA;AACT;AAKgB,SAAA,cAAA,CAAe,QAAgB,OAA2B,EAAA;AACxE,EAAA,IAAI,CAAC,MAAQ,EAAA;AACX,IAAO,OAAA,IAAA;AAAA;AAET,EAAA,KAAA,MAAW,CAAC,GAAK,EAAA,KAAK,KAAK,MAAO,CAAA,OAAA,CAAQ,MAAM,CAAG,EAAA;AACjD,IAAA,IAAI,CAAC,OAAA,IAAW,OAAQ,CAAA,GAAG,MAAM,KAAO,EAAA;AACtC,MAAO,OAAA,KAAA;AAAA;AACT;AAEF,EAAO,OAAA,IAAA;AACT;AAKO,SAAS,YAAa,CAAA,MAAA,EAAgB,YAAe,GAAA,EAAA,EAAI,aAAiC,EAAA;AAC/F,EAAA,IAAI,CAAC,MAAU,IAAA,MAAA,CAAO,KAAK,MAAM,CAAA,CAAE,WAAW,CAAG,EAAA;AAC/C,IAAO,OAAA,YAAA;AAAA;AAET,EAAA,MAAM,SAAY,GAAA,MAAA,CAAO,IAAK,CAAA,MAAM,EAAE,IAAK,EAAA;AAC3C,EAAA,MAAM,aAAgB,GAAA,SAAA,CAAU,GAAI,CAAA,CAAC,QAAQ,CAAG,EAAA,GAAG,CAAK,EAAA,EAAA,MAAA,CAAO,GAAG,CAAC,CAAG,CAAA,CAAA,CAAA,CAAE,KAAK,IAAI,CAAA;AACjF,EAAA,IAAI,aAAe,EAAA;AACjB,IAAO,OAAA,aAAA;AAAA;AAET,EAAA,OAAO,CAAC,GAAK,EAAA,aAAA,EAAe,GAAG,CAAA,CAAE,KAAK,EAAE,CAAA;AAC1C;;ACzEgB,SAAA,mBAAA,CAAoB,OAAkB,KAAgB,EAAA;AACpE,EAAA,IAAI,MAAM,IAAM,EAAA;AACd,IAAA,OAAO,KAAM,CAAA,IAAA;AAAA;AAGf,EAAA,MAAM,kBAA4B,EAAC;AACnC,EAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,IAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,IAAM,EAAA;AACjC,MAAA;AAAA;AAIF,IAAI,IAAA,eAAA,CAAgB,SAAS,CAAG,EAAA;AAC9B,MAAA;AAAA;AAGF,IAAA,eAAA,CAAgB,IAAK,CAAA,mBAAA,CAAoB,KAAO,EAAA,KAAK,CAAC,CAAA;AAAA;AAIxD,EAAI,IAAA,eAAA,CAAgB,WAAW,CAAG,EAAA;AAChC,IAAA,OAAO,gBAAgB,CAAC,CAAA;AAAA;AAI1B,EAAA,IAAI,KAAU,KAAA,KAAA,CAAA,IAAa,KAAM,CAAA,MAAA,CAAO,SAAS,CAAG,EAAA;AAClD,IAAA,OAAO,MAAM,MACV,CAAA,MAAA,CAAO,CAAC,CAAM,KAAA,CAAA,CAAE,SAAS,SAAU,CAAA,IAAI,EACvC,GAAI,CAAA,CAAC,MAAM,mBAAoB,CAAA,CAAA,EAAG,KAAK,CAAC,CAAA,CACxC,KAAK,IAAI,CAAA;AAAA;AAGd,EAAA,IAAI,MAAM,KAAO,EAAA;AACf,IAAO,OAAA,CAAA,QAAA,EAAW,MAAM,KAAK,CAAA,CAAA,CAAA;AAAA;AAG/B,EAAA,OAAO,WAAW,KAAK,CAAA,CAAA,CAAA;AACzB;AAEO,SAAS,uBAAuB,MAAqB,EAAA;AAC1D,EAAO,MAAA,CAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AACxB,IAAM,KAAA,CAAA,MAAA,CAAO,OAAQ,CAAA,CAAC,KAAU,KAAA;AAC9B,MAAoB,mBAAA,CAAA,KAAA,EAAO,OAAO,MAAM,CAAA;AAAA,KACzC,CAAA;AAAA,GACF,CAAA;AACH;AAiDgB,SAAA,mBAAA,CAAoB,KAAc,EAAA,KAAA,EAAmB,SAAiC,EAAA;AA5GtG,EAAA,IAAA,EAAA,EAAA,EAAA;AA6GE,EAAM,MAAA,aAAA,GAAA,CAAgB,EAAM,GAAA,KAAA,CAAA,KAAA,KAAN,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAA;AACnC,EAAA,MAAM,cAAiB,GAAA,OAAA,CAAQ,SAAa,IAAA,SAAA,CAAU,SAAS,CAAC,CAAA;AAEhE,EAAA,IAAI,aAAiB,IAAA,cAAA,MAAA,CAAmB,EAAM,GAAA,KAAA,CAAA,KAAA,KAAN,mBAAa,cAAgB,CAAA,EAAA;AACnE,IAAO,OAAA,aAAA;AAAA;AAGT,EAAA,MAAM,WAAc,GAAA,yBAAA,CAA0B,KAAO,EAAA,KAAA,EAAO,SAAS,CAAA;AACrE,EAAM,KAAA,CAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,IAAS,EAAC;AAC9B,EAAA,KAAA,CAAM,MAAM,WAAc,GAAA,WAAA;AAC1B,EAAA,KAAA,CAAM,MAAM,cAAiB,GAAA,cAAA;AAE7B,EAAO,OAAA,WAAA;AACT;AAKgB,SAAA,yBAAA,CAA0B,KAAc,EAAA,KAAA,EAAmB,SAAiC,EAAA;AA/H5G,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAgIE,EAAM,MAAA,cAAA,GAAA,CAAA,CAAiB,WAAM,MAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAc,kBAAe,EAAM,GAAA,KAAA,CAAA,MAAA,KAAN,mBAAc,WAAY,CAAA,MAAA,CAAA;AAC9E,EAAA,MAAM,qBAAqB,OAAQ,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,SAAP,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAA,KAAb,mBAA0B,gBAAgB,CAAA;AAC7E,EAAA,IAAI,WAAc,GAAA,cAAA,GAAiB,KAAM,CAAA,MAAA,CAAQ,cAAe,KAAM,CAAA,IAAA;AAEtE,EAAA,IAAI,cAAgB,EAAA;AAClB,IAAO,OAAA,kBAAA,GAAqB,CAAG,EAAA,WAAW,CAAkB,aAAA,CAAA,GAAA,WAAA;AAAA;AAG9D,EAAA,IAAI,KAAS,KAAA,CAAA,EAAA,GAAA,KAAA,CAAM,MAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAc,iBAAmB,CAAA,EAAA;AAC5C,IAAA,OAAO,qBAAqB,CAAG,EAAA,KAAA,CAAM,OAAO,iBAAiB,CAAA,aAAA,CAAA,GAAkB,MAAM,MAAO,CAAA,iBAAA;AAAA;AAM9F,EAAA,IAAI,MAAM,IAAS,KAAA,SAAA,CAAU,IAAQ,IAAA,CAAC,MAAM,MAAQ,EAAA;AAClD,IAAA,OAAO,WAAe,IAAA,IAAA,GAAA,WAAA,GAAA,2BAAA;AAAA;AAGxB,EAAA,IAAI,QAAkB,EAAC;AACvB,EAAA,IAAI,gBAAmB,GAAA,KAAA;AAEvB,EAAI,IAAA,SAAA,IAAa,SAAU,CAAA,MAAA,GAAS,CAAG,EAAA;AACrC,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,SAAA,CAAU,QAAQ,CAAK,EAAA,EAAA;AACzC,MAAMC,MAAAA,MAAAA,GAAQ,UAAU,CAAC,CAAA;AACzB,MAAA,IAAIA,OAAM,IAAS,KAAA,SAAA,CAAU,CAAI,GAAA,CAAC,EAAE,IAAM,EAAA;AACxC,QAAmB,gBAAA,GAAA,IAAA;AACnB,QAAA;AAAA;AACF;AACF;AAGF,EAAA,IAAI,cAAiB,GAAA,KAAA;AACrB,EAAA,IAAI,WAAc,GAAA,KAAA;AAElB,EAAI,IAAA,gBAAA,KAAoB,+BAAO,IAAM,CAAA,EAAA;AACnC,IAAM,KAAA,CAAA,IAAA,CAAK,MAAM,IAAI,CAAA;AACrB,IAAiB,cAAA,GAAA,IAAA;AAAA;AAGnB,EAAA,IAAI,KAAM,CAAA,IAAA,IAAQ,KAAM,CAAA,IAAA,KAAS,4BAA8B,EAAA;AAC7D,IAAM,KAAA,CAAA,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA;AAGvB,EAAI,IAAA,KAAA,CAAM,UAAU,KAAO,EAAA;AACzB,IAAA,IAAI,eAAkB,GAAA,kBAAA,CAAmB,SAAa,IAAA,IAAA,GAAA,SAAA,GAAA,CAAC,KAAK,CAAC,CAAA;AAE7D,IAAA,IAAI,CAAC,eAAiB,EAAA;AACpB,MAAI,IAAA,SAAA,GAAY,YAAa,CAAA,KAAA,CAAM,MAAM,CAAA;AACzC,MAAA,IAAI,SAAW,EAAA;AACb,QAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AACpB,QAAc,WAAA,GAAA,IAAA;AAAA;AAChB,KACS,MAAA,IAAA,KAAA,CAAM,MAAO,CAAA,eAAe,CAAG,EAAA;AACxC,MAAA,KAAA,CAAM,IAAK,CAAA,KAAA,CAAM,MAAO,CAAA,eAAe,CAAC,CAAA;AACxC,MAAc,WAAA,GAAA,IAAA;AAAA;AAChB;AAIF,EAAA,IAAI,SAAS,CAAC,cAAA,IAAkB,CAAC,WAAe,IAAA,KAAA,CAAM,SAAS,4BAA8B,EAAA;AAC3F,IAAA,IAAI,KAAM,CAAA,IAAA,IAAQ,KAAM,CAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACvC,MAAM,KAAA,CAAA,IAAA,CAAK,MAAM,IAAI,CAAA;AACrB,MAAiB,cAAA,GAAA,IAAA;AAAA;AACnB;AAGF,EAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,IAAc,WAAA,GAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,GAC9B,MAAA,IAAW,MAAM,IAAM,EAAA;AACrB,IAAA,WAAA,GAAc,KAAM,CAAA,IAAA;AAAA,GACf,MAAA;AACL,IAAc,WAAA,GAAA,4BAAA;AAAA;AAIhB,EAAI,IAAA,WAAA,KAAgB,MAAM,IAAM,EAAA;AAC9B,IAAc,WAAA,GAAA,kBAAA,CAAmB,OAAO,KAAK,CAAA;AAAA;AAG/C,EAAA,IAAI,kBAAoB,EAAA;AACtB,IAAA,WAAA,GAAc,GAAG,WAAW,CAAA,aAAA,CAAA;AAAA;AAE9B,EAAO,OAAA,WAAA;AACT;AAEgB,SAAA,kBAAA,CAAmB,OAAc,KAAmB,EAAA;AAClE,EAAA,IAAI,SAAY,GAAA,CAAA;AAChB,EAAA,IAAI,SAAY,GAAA,KAAA;AAEhB,EAAA,IAAI,KAAO,EAAA;AACT,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,KAAM,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAC5C,MAAM,MAAA,UAAA,GAAa,KAAM,CAAA,MAAA,CAAO,CAAC,CAAA;AAEjC,MAAA,IAAI,UAAU,UAAY,EAAA;AACxB,QAAY,SAAA,GAAA,IAAA;AAEZ,QAAA,IAAI,YAAY,CAAG,EAAA;AACjB,UAAA,SAAA,EAAA;AACA,UAAA;AAAA;AACF,OACS,MAAA,IAAA,KAAA,CAAM,IAAS,KAAA,UAAA,CAAW,IAAM,EAAA;AACzC,QAAA,SAAA,EAAA;AAEA,QAAA,IAAI,SAAW,EAAA;AACb,UAAA;AAAA;AACF;AACF;AACF;AAGF,EAAA,IAAI,SAAW,EAAA;AACb,IAAA,OAAO,CAAG,EAAA,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA;AAGnC,EAAA,OAAO,KAAM,CAAA,IAAA;AACf;AAKA,SAAS,mBAAmB,MAAoC,EAAA;AAC9D,EAAA,IAAI,UAA4B,GAAA,IAAA;AAEhC,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AACtC,IAAM,MAAA,KAAA,GAAQ,OAAO,CAAC,CAAA;AAEtB,IAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,MAAI,IAAA,CAAC,MAAM,MAAQ,EAAA;AACjB,QAAA;AAAA;AAIF,MAAW,KAAA,MAAA,QAAA,IAAY,MAAM,MAAQ,EAAA;AACnC,QAAA,IAAI,eAAe,IAAM,EAAA;AACvB,UAAa,UAAA,GAAA,QAAA;AAAA,SACf,MAAA,IAAW,aAAa,UAAY,EAAA;AAClC,UAAO,OAAA,IAAA;AAAA;AACT;AACF;AACF;AAGF,EAAO,OAAA,UAAA;AACT;;ACtQO,MAAM,cAA6C,CAAA;AAAA,EAOxD,WAAA,CAAY,QAAa,KAAkB,EAAA;AAN3C,IAAA,IAAA,CAAA,MAAA,GAAkB,EAAC;AACnB,IAAS,IAAA,CAAA,MAAA,GAAA,CAAA;AAMP,IAAO,OAAA,gBAAA,CAAiB,QAAQ,KAAK,CAAA;AAAA;AAEzC;AASgB,SAAA,gBAAA,CAAiB,QAAoD,KAA6B,EAAA;AAChH,EAAA,MAAM,EAAgB,GAAA;AAAA,IACpB,QAAQ,EAAC;AAAA,IACT,QAAQ,MAAO,CAAA;AAAA,GACjB;AACA,EAAI,IAAA,EAAC,iCAAQ,MAAQ,CAAA,EAAA;AACnB,IAAO,OAAA,EAAA;AAAA;AAKT,EAAA,IAAI,KAAO,EAAA;AACT,IAAI,IAAA,CAAC,aAAc,CAAA,MAAM,CAAG,EAAA;AAC1B,MAAM,MAAA,IAAI,MAAM,mCAAmC,CAAA;AAAA;AAGrD,IAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACxB,MAAA,EAAA,CAAG,MAAO,CAAA,IAAA;AAAA,QACR,mBAAA;AAAA,UACE,IAAA;AAAA,UACA,MAAA,CAAO,IAAI,CAAC,CAAA,KAAO,IAAI,CAAE,CAAA,IAAI,IAAI,CAAE;AAAA;AACrC,OACF;AAAA;AAEF,IAAO,OAAA,EAAA;AAAA;AAGT,EAAA,MAAM,YAAe,GAAA,MAAA,CAAO,IAAK,CAAA,CAAC,MAAM,CAAC,CAAA;AAIzC,EAAA,IAAI,iBAAiB,IAAM,EAAA;AACzB,IAAO,OAAA,EAAA;AAAA;AAIT,EAAI,IAAA,aAAA,CAAc,MAAM,CAAG,EAAA;AAGzB,IAAA,MAAM,KAAQ,GAAA,MAAA,CAAO,IAAK,CAAA,CAAC,MAAM,CAAC,CAAA;AAClC,IAAG,EAAA,CAAA,MAAA,GAAS,OAAO,IAAK,CAAA,KAAA,IAAS,EAAE,CAAA,CAAE,GAAI,CAAA,CAAC,IAAS,KAAA;AACjD,MAAO,OAAA,mBAAA;AAAA,QACL,IAAA;AAAA,QACA,MAAA,CAAO,IAAI,CAAC,CAAA,KAAO,IAAI,CAAE,CAAA,IAAI,IAAI,CAAE;AAAA,OACrC;AAAA,KACD,CAAA;AAAA,GACI,MAAA;AAEL,IAAA,EAAA,CAAG,MAAO,CAAA,IAAA,CAAK,mBAAoB,CAAA,4BAAA,EAA8B,MAAM,CAAC,CAAA;AAAA;AAE1E,EAAO,OAAA,EAAA;AACT;AAEA,SAAS,mBAAA,CAAoB,MAAc,MAA0B,EAAA;AAlFrE,EAAA,IAAA,EAAA;AAmFE,EAAM,MAAA,CAAA,GAAI,EAAE,IAAM,EAAA,MAAA,EAAQ,EAAI,EAAA,MAAA,EAAQ,IAAM,EAAA,SAAA,CAAU,KAAM,EAAA;AAC5D,EAAA,CAAA,CAAE,IAAO,GAAA,CAAA,EAAA,GAAA,sBAAA,CAAuB,CAAC,CAAA,KAAxB,YAA6B,SAAU,CAAA,KAAA;AAChD,EAAO,OAAA,CAAA;AACT;AAEA,SAAS,cAAc,GAA0E,EAAA;AAC/F,EAAA,MAAM,KAAQ,GAAA,GAAA,CAAI,IAAK,CAAA,CAAC,MAAM,CAAC,CAAA;AAC/B,EAAA,OAAO,GAAI,CAAA,MAAA,GAAS,CAAK,IAAA,OAAO,KAAU,KAAA,QAAA;AAC5C;;AC6BA,MAAM,UAAuE,GAAA;AAAA,EAC3E,GAAK,EAAA,QAAA;AAAA,EACL,MAAQ,EAAA,CAAA,QAAA;AAAA,EACR,KAAO,EAAA,KAAA,CAAA;AAAA,EACP,GAAK,EAAA;AACP,CAAA;AAKgB,SAAA,wBAAA,CAAyB,QAAgC,MAAqB,EAAA;AAC5F,EAAI,IAAA,GAAA;AACJ,EAAA,KAAK,OAAO,MAAQ,EAAA;AAClB,IAAM,MAAA,IAAA,GAAO,WAAW,GAAG,CAAA;AAC3B,IAAW,KAAA,MAAA,GAAA,IAAO,MAAO,CAAA,GAAG,CAAI,EAAA;AAC9B,MAAI,IAAA,GAAA,GAAM,OAAO,MAAQ,EAAA;AACvB,QAAA,MAAA,CAAO,GAAG,CAAI,GAAA,IAAA;AAAA;AAChB;AACF;AAEJ;AAKgB,SAAA,qBAAA,CAAsB,QAAkB,MAAqB,EAAA;AAC3E,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AACtC,IAAA,MAAA,CAAO,CAAC,CAAI,GAAA,MAAA,CAAO,OAAO,MAAO,CAAA,CAAC,CAAC,CAAC,CAAA;AAAA;AAExC;AAEA,SAAS,cAAA,CAAe,MAAc,MAAgC,EAAA;AACpE,EAAA,KAAA,MAAW,KAAK,MAAQ,EAAA;AACtB,IAAA,IAAI,KAAK,IAAM,EAAA;AACb,MAAO,OAAA,8BAAA,CAA+B,MAAM,CAAC,CAAA;AAAA;AAC/C;AAEF,EAAA,OAAO,SAAU,CAAA,KAAA;AACnB;AAOO,SAAS,kBAAkB,GAA+B,EAAA;AAC/D,EAAM,MAAA,EAAE,MAAQ,EAAA,IAAA,EAAS,GAAA,GAAA;AAEzB,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAA,CAAO,MAAQ,EAAA;AAC7B,IAAM,MAAA,IAAI,MAAM,gCAAgC,CAAA;AAAA;AAIlD,EAAA,MAAM,MAAS,GAAA,IAAA,GAAO,IAAK,CAAA,MAAA,CAAO,OAAO,CAAC,GAAA,EAAK,IAAS,KAAA,IAAA,CAAK,IAAI,GAAK,EAAA,IAAA,CAAK,MAAM,CAAA,EAAG,CAAC,CAAI,GAAA,CAAA;AACzF,EAAA,MAAM,SAAS,MAAO,CAAA,MAAA,CAAO,GAAI,CAAA,CAAC,GAAG,KAAU,KAAA;AA9KjD,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA+KI,IAAA,IAAI,SAAS,IAAO,GAAA,IAAA,CAAK,MAAO,CAAA,KAAK,IAAI,EAAC;AAC1C,IAAA,IAAI,UAAU,MAAO,CAAA,MAAA;AACrB,IAAA,IAAI,OAAO,CAAE,CAAA,IAAA;AAEb,IAAA,IAAI,YAAY,MAAQ,EAAA;AACtB,MAAA,MAAA,CAAO,MAAS,GAAA,MAAA;AAEhB,MAAO,MAAA,CAAA,IAAA,CAAK,QAAW,OAAO,CAAA;AAAA;AAGhC,IAAI,IAAA,QAAA,GAAA,CAAW,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,QAAA,KAAN,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,CAAA;AAEhC,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,wBAAA,CAAyB,UAAU,MAAM,CAAA;AAAA;AAG3C,IAAI,IAAA,KAAA,GAAA,CAAQ,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,KAAA,KAAN,IAAc,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,CAAA;AAE1B,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,qBAAA,CAAsB,OAAO,MAAM,CAAA;AACnC,MAAA,IAAA,GAAO,SAAU,CAAA,MAAA;AAAA;AAGnB,IAAM,MAAA,KAAA,GAAA,CAAQ,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,KAAA,KAAN,IAAc,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,CAAA;AAI5B,IAAA,MAAM,cAA+D,GAAA;AAAA,MACnE,GAAG,CAAA;AAAA,MACH,IAAM,EAAA,IAAA,IAAA,IAAA,GAAA,IAAA,GAAQ,cAAe,CAAA,CAAA,CAAE,MAAM,MAAM,CAAA;AAAA,MAC3C,MAAQ,EAAA,CAAA,EAAA,GAAA,CAAA,CAAE,MAAF,KAAA,IAAA,GAAA,EAAA,GAAY,EAAC;AAAA,MACrB,MAAQ,EAAA,MAAA;AAAA;AAAA,MAER,QAAA,EAAU,8BAAY;AAAC,KACzB;AAEA,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAA,cAAA,CAAe,KAAQ,GAAA,KAAA;AAAA;AAGzB,IAAO,OAAA,cAAA;AAAA,GACR,CAAA;AAED,EAAO,OAAA;AAAA,IACL,GAAG,MAAA;AAAA,IACH,MAAA;AAAA,IACA;AAAA,GACF;AACF;AAOO,SAAS,gBAAgB,KAAiC,EAAA;AAC/D,EAAA,MAAM,IAAsB,GAAA;AAAA,IAC1B,QAAQ;AAAC,GACX;AAEA,EAAA,MAAM,WAAmC,EAAC;AAC1C,EAAA,IAAI,QAAW,GAAA,KAAA;AAEf,EAAA,MAAM,MAA0B,GAAA;AAAA,IAC9B,OAAO,KAAM,CAAA,KAAA;AAAA,IACb,MAAM,KAAM,CAAA,IAAA;AAAA,IACZ,MAAM,KAAM,CAAA,IAAA;AAAA,IACZ,MAAQ,EAAA,KAAA,CAAM,MAAO,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA;AAC9B,MAAA,MAAM,EAAE,MAAQ,EAAA,KAAA,EAAO,OAAO,OAAS,EAAA,GAAG,QAAW,GAAA,CAAA;AACrD,MAAA,IAAI,cAAc,MAAQ,EAAA;AACxB,QAAA,OAAO,MAAO,CAAA,QAAA;AAAA;AAEhB,MAAK,IAAA,CAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAEvB,MAAA,IAAI,SAAS,IAAM,EAAA;AACjB,QAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AACnB,QAAW,QAAA,GAAA,IAAA;AAAA,OACN,MAAA;AACL,QAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA;AAGpB,MAAO,OAAA,MAAA;AAAA,KACR;AAAA,GACH;AAEA,EAAA,IAAI,QAAU,EAAA;AACZ,IAAA,IAAA,CAAK,KAAQ,GAAA,QAAA;AAAA;AAGf,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA;AAAA,GACF;AACF;;ACnPA,SAAS,wBAAwB,KAA6B,EAAA;AAC5D,EAAA,MAAM,MAAS,GAAA,KAAA,CAAM,OAAQ,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA;AAEtC,IAAA,MAAM,EAAE,IAAA,EAAM,IAAM,EAAA,GAAG,MAAS,GAAA,CAAA;AAChC,IAAA,MAAM,SAAoB,EAAC;AAC3B,IAAO,OAAA;AAAA,MACL,IAAA,EAAA,CAAM,IAAM,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,MAAA,IAAS,IAAO,GAAA,CAAA;AAAA;AAAA,MAC5B,MAAA,EAAS,QAAQ,EAAC;AAAA,MAClB,MAAA;AAAA,MACA,IAAA,EAAM,IAAQ,IAAA,MAAA,CAAO,MAAO,CAAA,SAAS,EAAE,QAAS,CAAA,IAAiB,CAAK,GAAA,IAAA,GAAqB,SAAU,CAAA;AAAA,KACvG;AAAA,GACD,CAAA;AAED,EAAA,IAAI,CAACC,cAAA,CAAQ,KAAM,CAAA,IAAI,CAAG,EAAA;AACxB,IAAA,MAAM,IAAI,KAAM,CAAA,CAAA,qCAAA,EAAwC,OAAO,KAAA,CAAM,IAAI,CAAG,CAAA,CAAA,CAAA;AAAA;AAG9E,EAAW,KAAA,MAAA,GAAA,IAAO,MAAM,IAAM,EAAA;AAC5B,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AACtC,MAAA,MAAA,CAAO,CAAC,CAAE,CAAA,MAAA,CAAO,IAAK,CAAA,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA;AAC9B;AAGF,EAAA,KAAA,MAAW,KAAK,MAAQ,EAAA;AACtB,IAAI,IAAA,CAAA,CAAE,IAAS,KAAA,SAAA,CAAU,KAAO,EAAA;AAC9B,MAAM,MAAA,CAAA,GAAI,uBAAuB,CAAC,CAAA;AAClC,MAAA,IAAI,CAAG,EAAA;AACL,QAAA,CAAA,CAAE,IAAO,GAAA,CAAA;AAAA;AACX;AACF;AAGF,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,OAAO,KAAM,CAAA,KAAA;AAAA,IACb,MAAM,KAAM,CAAA,IAAA;AAAA,IACZ,MAAM,KAAM,CAAA,IAAA;AAAA,IACZ,MAAA,EAAQ,MAAM,IAAK,CAAA;AAAA,GACrB;AACF;AAEA,SAAS,6BAA6B,UAAmC,EAAA;AACvE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,SAA4B,EAAC;AAGnC,EAAM,MAAA,MAAA,GAAS,UAAW,CAAA,UAAA,IAAe,UAAmB,CAAA,MAAA;AAC5D,EAAA,KAAA,MAAW,SAAS,MAAQ,EAAA;AAC1B,IAAO,MAAA,CAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAAC,CAAA;AACpB,IAAM,KAAA,CAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAAW,CAAA;AAAA;AAG/B,EAAA,MAAM,MAAS,GAAA;AAAA,IACb;AAAA,MACE,IAAM,EAAA,2BAAA;AAAA,MACN,MAAM,SAAU,CAAA,IAAA;AAAA,MAChB,QAAQ,EAAC;AAAA,MACT,MAAQ,EAAA;AAAA,KACV;AAAA,IACA;AAAA,MACE,IAAM,EAAA,4BAAA;AAAA,MACN,MAAM,SAAU,CAAA,MAAA;AAAA,MAChB,MAAQ,EAAA;AAAA,QACN,MAAM,UAAW,CAAA;AAAA,OACnB;AAAA,MACA,MAAA;AAAA,MACA,QAAQ,UAAW,CAAA;AAAA;AACrB,GACF;AAEA,EAAA,IAAI,WAAW,KAAO,EAAA;AACpB,IAAC,MAAO,CAAA,CAAC,CAAE,CAAA,MAAA,CAAuB,oBAAoB,UAAW,CAAA,KAAA;AAAA;AAGnE,EAAO,OAAA;AAAA,IACL,IAAA,EAAM,UAAW,CAAA,MAAA,IAAW,UAAmB,CAAA,IAAA;AAAA,IAC/C,OAAO,UAAW,CAAA,KAAA;AAAA,IAClB,MAAM,UAAW,CAAA,IAAA;AAAA,IACjB,MAAA;AAAA,IACA,QAAQ,MAAO,CAAA;AAAA,GACjB;AACF;AAMA,SAAS,8BAA8B,WAAuC,EAAA;AAC5E,EAAA,MAAM,IAAwB,EAAC;AAC/B,EAAA,MAAM,IAAwB,EAAC;AAE/B,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,WAAY,CAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AAChD,IAAM,MAAA,GAAA,GAAM,WAAY,CAAA,IAAA,CAAK,CAAC,CAAA;AAC9B,IAAE,CAAA,CAAA,IAAA,CAAK,GAAI,CAAA,CAAC,CAAC,CAAA;AACb,IAAE,CAAA,CAAA,IAAA,CAAK,GAAI,CAAA,CAAC,CAAC,CAAA;AAAA;AAGf,EAAO,OAAA;AAAA,IACL,MAAM,WAAY,CAAA,KAAA;AAAA,IAClB,MAAQ,EAAA;AAAA,MACN;AAAA,QACE,IAAA,EAAM,YAAY,KAAS,IAAA,4BAAA;AAAA,QAC3B,MAAM,SAAU,CAAA,MAAA;AAAA,QAChB,QAAQ,EAAC;AAAA,QACT,MAAQ,EAAA;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAM,EAAA,2BAAA;AAAA,QACN,MAAM,SAAU,CAAA,IAAA;AAAA,QAChB,MAAQ,EAAA;AAAA,UACN,IAAM,EAAA;AAAA,SACR;AAAA,QACA,MAAQ,EAAA;AAAA;AACV,KACF;AAAA,IACA,QAAQ,CAAE,CAAA;AAAA,GACZ;AACF;AAEA,SAAS,mCAAmC,UAAmC,EAAA;AAC7E,EAAA,MAAM,MAAkB,GAAA;AAAA,IACtB;AAAA,MACE,MAAM,UAAW,CAAA,MAAA;AAAA,MACjB,MAAM,SAAU,CAAA,KAAA;AAAA,MAChB,QAAQ,UAAW,CAAA,IAAA;AAAA,MACnB,MAAQ,EAAA;AAAA,QACN,MAAM,UAAW,CAAA,IAAA;AAAA,QACjB,YAAa,UAAmB,CAAA;AAAA,OAClC;AAAA,MACA,QAAQ;AAAC;AACX,GACF;AAEA,EAAW,KAAA,MAAA,KAAA,IAAS,WAAW,UAAY,EAAA;AACzC,IAAA,MAAA,CAAO,CAAC,CAAA,CAAE,MAAO,CAAA,IAAA,CAAK,KAAK,CAAA;AAAA;AAG7B,EAAO,OAAA;AAAA,IACL,MAAM,UAAW,CAAA,MAAA;AAAA,IACjB,OAAO,UAAW,CAAA,MAAA;AAAA,IAClB,IAAA,EAAM,EAAE,IAAA,EAAM,IAAK,EAAA;AAAA,IACnB,MAAA;AAAA,IACA,MAAA,EAAQ,WAAW,UAAW,CAAA;AAAA,GAChC;AACF;AAIA,MAAM,MAAS,GAAA,oDAAA;AAKC,SAAA,8BAAA,CAA+B,MAAc,CAAuB,EAAA;AAClF,EAAA,IAAI,IAAM,EAAA;AACR,IAAA,IAAA,GAAO,KAAK,WAAY,EAAA;AACxB,IAAI,IAAA,IAAA,KAAS,MAAU,IAAA,IAAA,KAAS,MAAQ,EAAA;AACtC,MAAA,OAAO,SAAU,CAAA,IAAA;AAAA;AACnB;AAEF,EAAA,OAAO,wBAAwB,CAAC,CAAA;AAClC;AAKO,SAAS,sBAAsB,CAAuB,EAAA;AAC3D,EAAA,IAAI,CAAa,YAAA,IAAA,IAAQ,UAAW,CAAA,CAAC,CAAG,EAAA;AACtC,IAAA,OAAO,SAAU,CAAA,IAAA;AAAA;AAGnB,EAAI,IAAAvB,eAAA,CAAS,CAAC,CAAG,EAAA;AACf,IAAA,OAAO,SAAU,CAAA,MAAA;AAAA;AAGnB,EAAI,IAAAwB,eAAA,CAAS,CAAC,CAAG,EAAA;AACf,IAAA,OAAO,SAAU,CAAA,MAAA;AAAA;AAGnB,EAAI,IAAAC,gBAAA,CAAU,CAAC,CAAG,EAAA;AAChB,IAAA,OAAO,SAAU,CAAA,OAAA;AAAA;AAGnB,EAAA,OAAO,SAAU,CAAA,KAAA;AACnB;AAOO,SAAS,wBAAwB,CAAuB,EAAA;AAC7D,EAAA,IAAI,CAAa,YAAA,IAAA,IAAQ,UAAW,CAAA,CAAC,CAAG,EAAA;AACtC,IAAA,OAAO,SAAU,CAAA,IAAA;AAAA;AAGnB,EAAI,IAAAzB,eAAA,CAAS,CAAC,CAAG,EAAA;AACf,IAAA,OAAO,SAAU,CAAA,MAAA;AAAA;AAGnB,EAAI,IAAAwB,eAAA,CAAS,CAAC,CAAG,EAAA;AACf,IAAI,IAAA,MAAA,CAAO,IAAK,CAAA,CAAC,CAAG,EAAA;AAClB,MAAA,OAAO,SAAU,CAAA,MAAA;AAAA;AAGnB,IAAI,IAAA,CAAA,KAAM,MAAU,IAAA,CAAA,KAAM,MAAU,IAAA,CAAA,KAAM,MAAU,IAAA,CAAA,KAAM,OAAW,IAAA,CAAA,KAAM,OAAW,IAAA,CAAA,KAAM,OAAS,EAAA;AACnG,MAAA,OAAO,SAAU,CAAA,OAAA;AAAA;AAGnB,IAAA,OAAO,SAAU,CAAA,MAAA;AAAA;AAGnB,EAAI,IAAAC,gBAAA,CAAU,CAAC,CAAG,EAAA;AAChB,IAAA,OAAO,SAAU,CAAA,OAAA;AAAA;AAGnB,EAAA,OAAO,SAAU,CAAA,KAAA;AACnB;AAKO,SAAS,uBAAuB,KAAqC,EAAA;AAE1E,EAAA,IAAI,MAAM,IAAM,EAAA;AACd,IAAM,MAAA,IAAA,GAAO,KAAM,CAAA,IAAA,CAAK,WAAY,EAAA;AACpC,IAAI,IAAA,IAAA,KAAS,MAAU,IAAA,IAAA,KAAS,MAAQ,EAAA;AACtC,MAAA,OAAO,SAAU,CAAA,IAAA;AAAA;AACnB;AAIF,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,KAAM,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAC5C,IAAM,MAAA,CAAA,GAAI,KAAM,CAAA,MAAA,CAAO,CAAC,CAAA;AACxB,IAAA,IAAI,KAAK,IAAM,EAAA;AACb,MAAA,OAAO,wBAAwB,CAAC,CAAA;AAAA;AAClC;AAIF,EAAO,OAAA,KAAA,CAAA;AACT;AAQO,MAAM,eAAkB,GAAA,CAAC,MAAmB,EAAA,YAAA,GAAe,KAAqB,KAAA;AACrF,EAAW,KAAA,MAAA,KAAA,IAAS,OAAO,MAAQ,EAAA;AACjC,IAAA,IAAI,CAAC,KAAM,CAAA,IAAA,IAAQ,MAAM,IAAS,KAAA,SAAA,CAAU,SAAS,YAAc,EAAA;AAEjE,MAAO,OAAA;AAAA,QACL,GAAG,MAAA;AAAA,QACH,MAAQ,EAAA,MAAA,CAAO,MAAO,CAAA,GAAA,CAAI,CAACC,MAAU,KAAA;AACnC,UAAA,IAAIA,OAAM,IAAQA,IAAAA,MAAAA,CAAM,SAAS,SAAU,CAAA,KAAA,IAAS,CAAC,YAAc,EAAA;AACjE,YAAOA,OAAAA,MAAAA;AAAA;AAGT,UAAO,OAAA;AAAA,YACL,GAAGA,MAAAA;AAAA,YACH,IAAM,EAAA,sBAAA,CAAuBA,MAAK,CAAA,IAAK,SAAU,CAAA;AAAA,WACnD;AAAA,SACD;AAAA,OACH;AAAA;AACF;AAGF,EAAO,OAAA,MAAA;AACT;AAEa,MAAA,WAAA,GAAc,CAAC,IAAqC,KAAA,OAAA,CAAQ,QAAQ,IAAK,CAAA,cAAA,CAAe,SAAS,CAAC;AAElG,MAAA,WAAA,GAAc,CAAC,IAAqC,KAAA,OAAA,CAAQ,QAAQ,IAAK,CAAA,cAAA,CAAe,QAAQ,CAAC;AAEjG,MAAA,oBAAA,GAAuB,CAAC,IAAA,KACnC,OAAQ,CAAA,WAAA,CAAY,IAAI,CAAK,IAAA,IAAA,CAAK,cAAe,CAAA,OAAO,CAAC;AAKpD,SAAS,YAAY,IAAsB,EAAA;AAnTlD,EAAA,IAAA,EAAA,EAAA,EAAA;AAoTE,EAAA,IAAI,YAAY,IAAM,EAAA;AAEpB,IAAI,IAAA,QAAA,IAAY,UAAQ,EAAK,GAAA,CAAA,EAAA,GAAA,IAAA,CAAA,MAAA,CAAO,CAAC,CAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAgB,MAAhB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAwB,GAAK,CAAA,EAAA;AACnD,MAAO,OAAA,IAAA;AAAA;AAIT,IAAA,OAAO,gBAAgB,IAAI,CAAA;AAAA;AAI7B,EAAA,IAAI,KAAK,cAAe,CAAA,MAAM,CAAK,IAAA,IAAA,CAAK,SAAS,MAAQ,EAAA;AACvD,IAAA,OAAO,mCAAmC,IAAI,CAAA;AAAA;AAGhD,EAAA,IAAI,KAAK,cAAe,CAAA,YAAY,KAAK,IAAK,CAAA,cAAA,CAAe,QAAQ,CAAG,EAAA;AACtE,IAAA,OAAO,6BAA6B,IAAI,CAAA;AAAA;AAG1C,EAAI,IAAA,IAAA,CAAK,cAAe,CAAA,MAAM,CAAG,EAAA;AAC/B,IAAI,IAAA,IAAA,CAAK,cAAe,CAAA,QAAQ,CAAG,EAAA;AACjC,MAAA,OAAO,kBAAkB,IAAI,CAAA;AAAA;AAE/B,IAAA,OAAO,8BAA8B,IAAI,CAAA;AAAA;AAG3C,EAAI,IAAA,IAAA,CAAK,cAAe,CAAA,SAAS,CAAG,EAAA;AAClC,IAAA,OAAO,wBAAwB,IAAI,CAAA;AAAA;AAGrC,EAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,IAAI,CAAG,EAAA;AACvB,IAAA,OAAO,iBAAiB,IAAI,CAAA;AAAA;AAG9B,EAAQ,OAAA,CAAA,IAAA,CAAK,mBAAmB,IAAI,CAAA;AACpC,EAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA;AAC3C;AAEa,MAAA,oBAAA,GAAuB,CAAC,KAA6C,KAAA;AAChF,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA;AAEnB,EAAA,MAAM,WAAW,KAAM,CAAA,MAAA;AACvB,EAAA,MAAM,OAAoB,EAAC;AAE3B,EAAI,IAAA,MAAA,CAAO,WAAW,CAAG,EAAA;AACvB,IAAA,MAAM,EAAE,SAAA,EAAW,SAAU,EAAA,GAAI,aAAa,KAAK,CAAA;AACnD,IAAA,IAAI,SAAW,EAAA;AACb,MAAM,MAAA,UAAA,GAAa,SAAc,KAAA,CAAA,GAAI,CAAI,GAAA,CAAA;AACzC,MAAM,MAAA,UAAA,GAAa,OAAO,UAAU,CAAA;AACpC,MAAMC,MAAAA,UAAAA,GAAY,OAAO,SAAU,CAAA;AAGnC,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,QAAA,EAAU,CAAK,EAAA,EAAA;AACjC,QAAA,IAAA,CAAK,IAAK,CAAA;AAAA,UACR,UAAA,CAAW,OAAO,CAAC,CAAA;AAAA;AAAA,UACnBA,UAAAA,CAAU,OAAO,CAAC;AAAA;AAAA,SACnB,CAAA;AAAA;AAGH,MAAO,OAAA;AAAA,QACL,OAAO,KAAM,CAAA,IAAA;AAAA,QACb,MAAA,EAAQ,mBAAoB,CAAA,UAAA,EAAY,KAAK,CAAA;AAAA,QAC7C,UAAY,EAAA,IAAA;AAAA,QACZ,IAAA,EAAM,OAAO,CAAC,CAAA,CAAE,SAAS,MAAO,CAAA,CAAC,CAAE,CAAA,MAAA,CAAO,IAAO,GAAA,KAAA,CAAA;AAAA,QACjD,OAAO,KAAM,CAAA,KAAA;AAAA,QACb,MAAM,KAAM,CAAA;AAAA,OACd;AAAA;AACF;AAGF,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,QAAA,EAAU,CAAK,EAAA,EAAA;AACjC,IAAA,MAAM,MAAiB,EAAC;AACxB,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AACtC,MAAA,GAAA,CAAI,KAAK,MAAO,CAAA,CAAC,CAAE,CAAA,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA;AAE9B,IAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA;AAGf,EAAA,IAAI,KAAM,CAAA,IAAA,IAAQ,KAAM,CAAA,IAAA,CAAK,IAAM,EAAA;AACjC,IAAO,OAAA;AAAA,MACL,KAAO,EAAA,MAAA,CAAO,CAAC,CAAA,CAAE,QAAQ,KAAM,CAAA,IAAA;AAAA,MAC/B,MAAQ,EAAA,MAAA,CAAO,CAAC,CAAA,CAAE,QAAQ,KAAM,CAAA,IAAA;AAAA,MAChC,UAAA,EAAY,MAAO,CAAA,CAAC,CAAE,CAAA,MAAA;AAAA,MACtB,UAAA,EAAY,OAAO,CAAC,CAAA,CAAE,SAAS,MAAO,CAAA,CAAC,CAAE,CAAA,MAAA,CAAO,UAAa,GAAA,KAAA,CAAA;AAAA,MAC7D,IAAM,EAAA;AAAA,KACR;AAAA;AAGF,EAAO,OAAA;AAAA,IACL,OAAS,EAAA,MAAA,CAAO,GAAI,CAAA,CAAC,CAAM,KAAA;AACzB,MAAM,MAAA,EAAE,IAAM,EAAA,MAAA,EAAW,GAAA,CAAA;AACzB,MAAA,IAAI,MAAQ,EAAA;AAEV,QAAM,MAAA,EAAE,GAAG,MAAA,EAAW,GAAA,MAAA;AACtB,QAAC,OAAkB,IAAO,GAAA,IAAA;AAC1B,QAAO,OAAA,MAAA;AAAA;AAET,MAAO,OAAA,EAAE,MAAM,IAAK,EAAA;AAAA,KACrB,CAAA;AAAA,IACD,IAAM,EAAA,OAAA;AAAA,IACN,OAAO,KAAM,CAAA,KAAA;AAAA,IACb,MAAM,KAAM,CAAA,IAAA;AAAA,IACZ;AAAA,GACF;AACF;AAEO,SAAS,aAAc,CAAA,IAAA,EAAiB,SAAoB,EAAA,OAAA,GAAU,KAAkB,EAAA;AAC7F,EAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,MAAA,CAAO,SAAU,CAAA;AACpC,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAO,OAAA,IAAA;AAAA;AAIT,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,IAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA;AAGd,EAAM,MAAA,aAAA,GAAgB,kBAAmB,CAAA,KAAA,EAAO,OAAO,CAAA;AACvD,EAAA,KAAA,CAAM,KAAK,aAAa,CAAA;AAExB,EAAO,OAAA;AAAA,IACL,GAAG,IAAA;AAAA,IACH,MAAQ,EAAA,IAAA,CAAK,MAAO,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA;AAC7B,MAAA,MAAM,IAAO,GAAA;AAAA,QACX,GAAG,CAAA;AAAA,QACH,MAAQ,EAAA,CAAA,CAAE,MAAO,CAAA,GAAA,CAAI,CAAC,CAAA,EAAG,CAAM,KAAA,CAAA,CAAE,MAAO,CAAA,KAAA,CAAM,CAAC,CAAC,CAAC;AAAA,OACnD;AAGA,MAAM,MAAA,EAAE,OAAU,GAAA,CAAA;AAClB,MAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,QAAK,IAAA,CAAA,KAAA,GAAQ,KAAM,CAAA,GAAA,CAAI,CAAC,CAAA,EAAG,MAAM,KAAM,CAAA,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;AAAA;AAElD,MAAO,OAAA,IAAA;AAAA,KACR;AAAA,GACH;AACF;AAKO,SAAS,iBAAiB,IAA4B,EAAA;AAC3D,EAAO,OAAA;AAAA,IACL,GAAG,IAAA;AAAA,IACH,MAAQ,EAAA,IAAA,CAAK,MAAO,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA;AAC7B,MAAA,MAAM,MAAS,GAAA,CAAC,GAAG,CAAA,CAAE,MAAM,CAAA;AAC3B,MAAA,MAAA,CAAO,OAAQ,EAAA;AAEf,MAAA,MAAM,IAAO,GAAA;AAAA,QACX,GAAG,CAAA;AAAA,QACH;AAAA,OACF;AAGA,MAAM,MAAA,EAAE,OAAU,GAAA,CAAA;AAClB,MAAA,IAAI,UAAU,KAAW,CAAA,EAAA;AACvB,QAAM,MAAA,QAAA,GAAW,CAAC,GAAG,KAAK,CAAA;AAC1B,QAAA,QAAA,CAAS,OAAQ,EAAA;AACjB,QAAA,IAAA,CAAK,KAAQ,GAAA,QAAA;AAAA;AAEf,MAAO,OAAA,IAAA;AAAA,KACR;AAAA,GACH;AACF;AAKgB,SAAA,eAAA,CAAgB,MAAiB,GAAwB,EAAA;AACvE,EAAA,MAAM,SAAoB,EAAC;AAC3B,EAAW,KAAA,MAAA,KAAA,IAAS,KAAK,MAAQ,EAAA;AAC/B,IAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,MAAO,CAAA,GAAG,CAAC,CAAA;AAAA;AAE/B,EAAO,OAAA,MAAA;AACT;AAKO,SAAS,eAAe,IAA+B,EAAA;AAC5D,EAAA,OAAO,uBAAuB,IAAI,CAAA;AACpC;AAEgB,SAAA,sBAAA,CAAuB,MAAiB,cAAsD,EAAA;AAC5G,EAAA,MAAM,iBAAiB,cAAiB,GAAA,IAAA,CAAK,OAAO,MAAO,CAAA,cAAc,IAAI,IAAK,CAAA,MAAA;AAClF,EAAA,MAAM,MAAqB,GAAA,cAAA,CAAe,GAAI,CAAA,CAAC,CAAM,KAAA;AACnD,IAAA,IAAI,SAAS,CAAE,CAAA,MAAA;AACf,IAAO,OAAA;AAAA,MACL,MAAM,CAAE,CAAA,IAAA;AAAA,MACR,MAAM,CAAE,CAAA,IAAA;AAAA,MACR,QAAQ,CAAE,CAAA,MAAA;AAAA,MACV,MAAA;AAAA,MACA,QAAQ,CAAE,CAAA;AAAA,KACZ;AAAA,GACD,CAAA;AAED,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,OAAO,IAAK,CAAA,KAAA;AAAA,IACZ,MAAM,IAAK,CAAA,IAAA;AAAA,IACX,MAAM,IAAK,CAAA;AAAA,GACb;AACF;AAEa,MAAA,YAAA,GAAe,CAAC,MAAiE,KAAA;AAC5F,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,MAAO,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAC7C,IAAA,IAAI,OAAO,MAAO,CAAA,CAAC,CAAE,CAAA,IAAA,KAAS,UAAU,IAAM,EAAA;AAC5C,MAAO,OAAA;AAAA,QACL,SAAA,EAAW,MAAO,CAAA,MAAA,CAAO,CAAC,CAAA;AAAA,QAC1B,SAAW,EAAA;AAAA,OACb;AAAA;AACF;AAEF,EAAA,OAAO,EAAC;AACV;AAEA,SAAS,sBAAsB,IAAwC,EAAA;AACrE,EAAA,MAAM,SAAY,GAAA,eAAA,CAAgB,WAAY,CAAA,IAAI,CAAC,CAAA;AAEnD,EAAA,IAAI,SAAU,CAAA,MAAA,IAAU,SAAU,CAAA,MAAA,CAAO,MAAQ,EAAA;AAE/C,IAAW,KAAA,MAAA,KAAA,IAAS,UAAU,MAAQ,EAAA;AACpC,MAAA,KAAA,CAAM,KAAQ,GAAA,IAAA;AAAA;AAChB;AAGF,EAAO,OAAA,SAAA;AACT;AAOO,SAAS,uBAAuB,OAAgD,EAAA;AACrF,EAAA,IAAI,CAAC,OAAA,IAAW,CAACJ,cAAA,CAAQ,OAAO,CAAG,EAAA;AACjC,IAAA,OAAO,EAAC;AAAA;AAGV,EAAA,OAAO,QAAQ,GAAI,CAAA,CAAC,IAAS,KAAA,qBAAA,CAAsB,IAAI,CAAC,CAAA;AAC1D;AAMgB,SAAA,mBAAA,CAAoB,MAAiB,UAAmC,EAAA;AACtF,EAAM,MAAA,EAAE,MAAQ,EAAA,WAAA,EAAgB,GAAA,IAAA;AAGhC,EAAA,IAAI,KAAK,KAAU,KAAA,YAAA,CAAa,OAAW,IAAA,MAAA,CAAO,WAAW,CAAG,EAAA;AAC9D,IAAA,IAAI,CAAC,UAAY,EAAA;AACf,MAAa,UAAA,GAAA,IAAA;AAAA;AAGf,IAAO,OAAA;AAAA,MACL,GAAG,UAAA;AAAA,MACH,OAAO,YAAa,CAAA,OAAA;AAAA,MACpB,SAAS,IAAK,CAAA;AAAA,KAChB;AAAA;AAIF,EAAM,MAAA,SAAA,GAAY,YAAY,GAAI,EAAA;AAClC,EAAA,MAAM,sBAAsB,MAAO,CAAA,GAAA,CAAI,CAACK,KAAS,KAAA,qBAAA,CAAsBA,KAAI,CAAC,CAAA;AAC5E,EAAM,MAAA,oBAAA,GAAuB,uBAAuB,WAAW,CAAA;AAC/D,EAAM,MAAA,QAAA,GAAW,YAAY,GAAI,EAAA;AAEjC,EAAO,OAAA;AAAA,IACL,GAAG,IAAA;AAAA,IACH,MAAQ,EAAA,mBAAA;AAAA,IACR,WAAa,EAAA,oBAAA;AAAA,IACb,OAAS,EAAA,EAAE,kBAAoB,EAAA,QAAA,GAAW,SAAU;AAAA,GACtD;AACF;AAMO,SAAS,gBAAgB,KAAoC,EAAA;AAClE,EAAA,IAAI,MAAS,GAAA,CAAA;AACb,EAAA,MAAM,SAAS,KAAM,CAAA,MAAA,CAAO,GAAI,CAAA,CAAC,GAAG,GAAQ,KAAA;AA/kB9C,IAAA,IAAA,EAAA;AAglBI,IAAA,MAAM,EAAE,KAAA,EAAO,GAAG,KAAA,EAAU,GAAA,CAAA;AAC5B,IAAI,IAAA,CAAC,MAAM,IAAM,EAAA;AACf,MAAM,KAAA,CAAA,IAAA,GAAO,CAAS,MAAA,EAAA,GAAA,GAAM,CAAC,CAAA,CAAA;AAAA;AAE/B,IAAI,IAAA,CAAC,MAAM,MAAQ,EAAA;AACjB,MAAA,KAAA,CAAM,SAAS,EAAC;AAAA;AAElB,IAAI,IAAA,CAAC,MAAM,MAAQ,EAAA;AACjB,MAAM,KAAA,CAAA,MAAA,GAAS,IAAI,KAAA,CAAM,MAAM,CAAA;AAAA,KACtB,MAAA,IAAA,KAAA,CAAM,MAAO,CAAA,MAAA,GAAS,MAAQ,EAAA;AACvC,MAAA,MAAA,GAAS,MAAM,MAAO,CAAA,MAAA;AAAA;AAExB,IAAI,IAAA,CAAC,MAAM,IAAM,EAAA;AACf,MAAA,KAAA,CAAM,IAAO,GAAA,CAAA,EAAA,GAAA,sBAAA,CAAuB,KAAc,CAAA,KAArC,YAA0C,SAAU,CAAA,KAAA;AAAA;AAEnE,IAAO,OAAA,KAAA;AAAA,GACR,CAAA;AAED,EAAO,OAAA;AAAA,IACL,GAAG,KAAA;AAAA,IACH,MAAA;AAAA,IACA;AAAA,GACF;AACF;;ACvmBY,IAAA,iBAAA,qBAAAC,kBAAL,KAAA;AACL,EAAAA,mBAAA,QAAS,CAAA,GAAA,QAAA;AAET,EAAAA,mBAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,mBAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,mBAAA,UAAW,CAAA,GAAA,UAAA;AACX,EAAAA,mBAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,mBAAA,gBAAiB,CAAA,GAAA,gBAAA;AAEjB,EAAAA,mBAAA,iBAAkB,CAAA,GAAA,iBAAA;AAClB,EAAAA,mBAAA,cAAe,CAAA,GAAA,cAAA;AACf,EAAAA,mBAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,mBAAA,aAAc,CAAA,GAAA,aAAA;AACd,EAAAA,mBAAA,gBAAiB,CAAA,GAAA,gBAAA;AACjB,EAAAA,mBAAA,cAAe,CAAA,GAAA,cAAA;AACf,EAAAA,mBAAA,oBAAqB,CAAA,GAAA,oBAAA;AACrB,EAAAA,mBAAA,cAAe,CAAA,GAAA,cAAA;AACf,EAAAA,mBAAA,eAAgB,CAAA,GAAA,eAAA;AAChB,EAAAA,mBAAA,eAAgB,CAAA,GAAA,eAAA;AAChB,EAAAA,mBAAA,eAAgB,CAAA,GAAA,eAAA;AAChB,EAAAA,mBAAA,MAAO,CAAA,GAAA,MAAA;AACP,EAAAA,mBAAA,eAAgB,CAAA,GAAA,eAAA;AAChB,EAAAA,mBAAA,SAAU,CAAA,GAAA,SAAA;AACV,EAAAA,mBAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,mBAAA,WAAY,CAAA,GAAA,WAAA;AACZ,EAAAA,mBAAA,gBAAiB,CAAA,GAAA,gBAAA;AACjB,EAAAA,mBAAA,cAAe,CAAA,GAAA,cAAA;AACf,EAAAA,mBAAA,mBAAoB,CAAA,GAAA,mBAAA;AACpB,EAAAA,mBAAA,kBAAmB,CAAA,GAAA,kBAAA;AACnB,EAAAA,mBAAA,aAAc,CAAA,GAAA,aAAA;AACd,EAAAA,mBAAA,SAAU,CAAA,GAAA,SAAA;AACV,EAAAA,mBAAA,SAAU,CAAA,GAAA,SAAA;AACV,EAAAA,mBAAA,aAAc,CAAA,GAAA,aAAA;AACd,EAAAA,mBAAA,cAAe,CAAA,GAAA,cAAA;AACf,EAAAA,mBAAA,eAAgB,CAAA,GAAA,eAAA;AAChB,EAAAA,mBAAA,kBAAmB,CAAA,GAAA,kBAAA;AACnB,EAAAA,mBAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,mBAAA,mBAAoB,CAAA,GAAA,mBAAA;AACpB,EAAAA,mBAAA,iBAAkB,CAAA,GAAA,iBAAA;AAClB,EAAAA,mBAAA,WAAY,CAAA,GAAA,WAAA;AACZ,EAAAA,mBAAA,YAAa,CAAA,GAAA,YAAA;AACb,EAAAA,mBAAA,cAAe,CAAA,GAAA,cAAA;AACf,EAAAA,mBAAA,YAAa,CAAA,GAAA,YAAA;AACb,EAAAA,mBAAA,oBAAqB,CAAA,GAAA,oBAAA;AA3CX,EAAAA,OAAAA,kBAAAA;AAAA,CAAA,EAAA,iBAAA,IAAA,EAAA;;ACUA,IAAA,QAAA,qBAAAC,SAAL,KAAA;AACL,EAAAA,UAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,UAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,UAAA,cAAe,CAAA,GAAA,cAAA;AAHL,EAAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA,CAAA;AAWL,MAAM,sBAA6E,GAAA;AAAA,EACxF,IAAI,iBAAkB,CAAA,WAAA;AAAA,EACtB,QAAA,EAAU,CAAC,iBAAA,CAAkB,eAAe,CAAA;AAAA,EAC5C,IAAM,EAAA,eAAA;AAAA,EACN,WACE,EAAA,8LAAA;AAAA,EACF,cAAgB,EAAA;AAAA,IACd,OAAS,EAAA,KAAA,CAAA;AAAA;AAAA,IACT,IAAM,EAAA,OAAA;AAAA,GACR;AAAA,EAEA,UAAU,CAAC,OAAA,EAAS,QAAQ,CAAC,MAAA,KAC3B,OAAO,IAAK,CAAAC,aAAA,CAAI,CAAC,IAAA,KAAS,uBAAuB,WAAY,CAAA,OAAA,EAAS,GAAG,CAAE,CAAA,IAAI,CAAC,CAAC,CAAA;AAAA,EAEnF,WAAA,EAAa,CAAC,OAAA,EAA6B,GAA8B,KAAA;AACvE,IAAA,IAAI,MAAmC,GAAA,KAAA,CAAA;AACvC,IAAA,OAAO,CAAC,IAAsB,KAAA;AAC5B,MAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,QAAI,IAAA,OAAA,CAAQ,OAAW,IAAA,CAAC,MAAQ,EAAA;AAC9B,UAAA,MAAA,GAAS,cAAc,GAAI,CAAA,cAAA,CAAe,MAAM,CAAE,CAAA,GAAA,CAAI,QAAQ,OAAO,CAAA;AAAA;AAEvE,QAAM,MAAA,MAAA,GAAS,eAAe,EAAE,MAAA,EAAQ,MAAM,MAAQ,EAAA,IAAA,EAAM,OAAQ,CAAA,IAAA,EAAM,CAAA;AAC1E,QAAA,IAAI,MAAQ,EAAA;AACV,UAAA,MAAA,CAAO,KAAQ,GAAA,CAAA,EAAG,iBAAkB,CAAA,WAAW,IAAI,IAAK,CAAA,GAAA,CAAI,CAAC,KAAA,KAAU,KAAM,CAAA,KAAK,CAAE,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAC7F,UAAA,OAAO,CAAC,MAAM,CAAA;AAAA;AAChB;AAEF,MAAO,OAAA,IAAA;AAAA,KACT;AAAA;AAEJ,CAAA;;AC3CO,SAAS,kBAAkB,IAAiC,EAAA;AACjE,EAAA,MAAM,EAAE,SAAU,EAAA,GAAI,YAAa,CAAA,IAAA,CAAK,CAAC,CAAC,CAAA;AAC1C,EAAA,IAAI,SAAW,EAAA;AACb,IAAA,OAAO,cAAc,GAAI,CAAA,cAAA,CAAe,cAAc,CAAE,CAAA,GAAA,CAAI,EAAE,CAAA;AAAA;AAEhE,EAAA,IAAI,SAAmB,EAAC;AACxB,EAAA,KAAA,MAAW,CAAK,IAAA,IAAA,CAAK,CAAC,CAAA,CAAE,MAAQ,EAAA;AAC9B,IAAI,IAAA,CAAA,CAAE,IAAS,KAAA,SAAA,CAAU,MAAQ,EAAA;AAC/B,MAAO,MAAA,CAAA,IAAA,CAAK,EAAE,IAAI,CAAA;AAAA;AACpB;AAGF,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,KAAA,MAAW,CAAK,IAAA,IAAA,CAAK,CAAC,CAAA,CAAE,MAAQ,EAAA;AAC9B,MAAI,IAAA,CAAA,CAAE,IAAS,KAAA,SAAA,CAAU,MAAQ,EAAA;AAC/B,QAAM,KAAA,CAAA,IAAA,CAAK,EAAE,IAAI,CAAA;AAAA;AACnB;AAEF,IAAS,MAAA,GAAA,MAAA,CAAO,OAAO,CAAC,CAAA,KAAM,CAAC,KAAM,CAAA,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA;AAGlD,EAAO,OAAA,aAAA,CAAc,IAAI,cAAe,CAAA,MAAM,EAAE,GAAI,CAAA,MAAA,CAAO,CAAC,CAAC,CAAA;AAC/D;AA0CA,SAAS,eAAe,OAAoC,EAAA;AAzE5D,EAAA,IAAA,EAAA;AA0EE,EAAA,OAAA,CAAO,EAAQ,GAAA,OAAA,CAAA,MAAA,KAAR,IAAkB,GAAA,EAAA,GAAA,iBAAA,CAAkB,QAAQ,MAAM,CAAA;AAC3D;AAKgB,SAAA,cAAA,CAAe,OAAkB,QAAkB,EAAA;AACjE,EAAA,IAAI,YAAY,CAAG,EAAA;AACjB,IAAI,IAAA,WAAA,GAAc,KAAM,CAAA,MAAA,CAAO,QAAQ,CAAA;AAEvC,IAAI,IAAA,WAAA,CAAY,SAAS,SAAU,CAAA,MAAA,IAAU,CAAC,uBAAwB,CAAA,WAAA,CAAY,MAAM,CAAG,EAAA;AACzF,MAAQ,KAAA,GAAA,aAAA,CAAc,OAAO,QAAQ,CAAA;AAAA;AACvC;AAGF,EAAO,OAAA,KAAA;AACT;AAMO,SAAS,eAAe,OAA6C,EAAA;AAhG5E,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAiGE,EAAA,IAAI,EAAC,CAAA,EAAA,GAAA,OAAA,CAAQ,MAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAgB,MAAQ,CAAA,EAAA;AAC3B,IAAA;AAAA;AAGF,EAAA,MAAM,QACJ,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,QAAR,KAAA,IAAA,GAAA,EAAA,GACC,CAAC,KAAiB,KAAA;AAvGvB,IAAAV,IAAAA,GAAAA;AAwGM,IAAA,IAAI,aAAYA,GAAA,GAAA,KAAA,CAAM,MAAO,CAAA,MAAA,KAAb,gBAAAA,GAAqB,CAAA,SAAA;AACrC,IAAA,OAAO,SAAc,KAAA,IAAA,GAAO,WAAc,GAAA,SAAA,KAAc,KAAK,WAAc,GAAA,WAAA;AAAA,GAC7E;AAEF,EAAI,IAAA,OAAA,CAAQ,MAAO,CAAA,MAAA,KAAW,CAAG,EAAA;AAC/B,IAAI,IAAA,KAAA,GAAQ,OAAQ,CAAA,MAAA,CAAO,CAAC,CAAA;AAC5B,IAAA,IAAI,SAAY,GAAA,KAAA;AAEhB,IAAMW,MAAAA,iBAAAA,GAAmB,eAAe,OAAO,CAAA;AAC/C,IAAI,IAAA,SAAA,GAAY,SAAU,CAAA,MAAA,CAAO,SAAU,CAAA,CAAC,CAAMA,KAAAA,iBAAAA,CAAiB,CAAG,EAAA,SAAA,EAAW,OAAQ,CAAA,MAAM,CAAC,CAAA;AAEhG,IAAA,IAAI,QAAQ,iBAAmB,EAAA;AAC7B,MAAY,SAAA,GAAA;AAAA,QACV,GAAG,KAAA;AAAA,QACH,QAAQ,KAAM,CAAA,MAAA,CAAO,GAAI,CAAA,CAAC,GAAG,UAAe,KAAA;AAC1C,UAAM,MAAA,IAAA,GAAO,EAAE,GAAG,CAAE,EAAA;AACpB,UAAA,MAAM,MAAS,GAAA;AAAA,YACb,UAAY,EAAA,CAAA;AAAA,YACZ;AAAA,WACF;AACA,UAAA,IAAI,KAAK,KAAO,EAAA;AACd,YAAA,IAAA,CAAK,MAAM,MAAS,GAAA,MAAA;AAAA,WACf,MAAA;AACL,YAAK,IAAA,CAAA,KAAA,GAAQ,EAAE,MAAO,EAAA;AAAA;AAExB,UAAO,OAAA,IAAA;AAAA,SACR;AAAA,OACH;AAGA,MAAA,IAAI,YAAY,CAAG,EAAA;AACjB,QAAM,MAAA,SAAA,GAAY,SAAU,CAAA,MAAA,CAAO,SAAS,CAAA;AAC5C,QAAM,MAAA,MAAA,GAAS,UAAU,MAAO,CAAA,MAAA,CAAO,CAAC,CAAG,EAAA,GAAA,KAAQ,QAAQ,SAAS,CAAA;AACpE,QAAA,MAAA,CAAO,QAAQ,SAAS,CAAA;AACxB,QAAA,SAAA,CAAU,MAAS,GAAA,MAAA;AACnB,QAAY,SAAA,GAAA,CAAA;AAAA;AACd;AAGF,IAAA,IAAI,aAAa,CAAG,EAAA;AAClB,MAAY,SAAA,GAAA,cAAA,CAAe,WAAW,SAAS,CAAA;AAAA;AAGjD,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAI,IAAA,MAAA,GAAS,UAAU,MAAO,CAAA,MAAA;AAAA,QAC5B,CAAC,CAAG,EAAA,QAAA,KAAa,QAAa,KAAA,SAAA,IAAa,QAAQ,IAAM,CAAA,CAAA,EAAG,SAAW,EAAA,OAAA,CAAQ,MAAM;AAAA,OACvF;AAGA,MAAA,IAAI,UAAU,SAAW,EAAA;AACvB,QAAA,SAAA,CAAU,MAAS,GAAA,MAAA;AAAA,OACd,MAAA;AACL,QAAY,SAAA,GAAA;AAAA,UACV,GAAG,KAAA;AAAA,UACH;AAAA,SACF;AAAA;AACF;AAGF,IAAO,OAAA,SAAA;AAAA;AAGT,EAAA,MAAM,YAA8B,EAAC;AACrC,EAAA,MAAM,UAAyB,EAAC;AAChC,EAAA,MAAM,iBAA0B,EAAC;AAEjC,EAAA,MAAM,6BAAyC,EAAC;AAEhD,EAAA,IAAI,WAAc,GAAA,CAAA;AAClB,EAAM,MAAA,gBAAA,GAAmB,eAAe,OAAO,CAAA;AAE/C,EAAA,KAAA,IAAS,aAAa,CAAG,EAAA,UAAA,GAAa,OAAQ,CAAA,MAAA,CAAO,QAAQ,UAAc,EAAA,EAAA;AACzE,IAAM,MAAA,KAAA,GAAQ,OAAQ,CAAA,MAAA,CAAO,UAAU,CAAA;AAEvC,IAAA,IAAI,CAAC,KAAS,IAAA,EAAA,CAAC,EAAM,GAAA,KAAA,CAAA,MAAA,KAAN,mBAAc,MAAQ,CAAA,EAAA;AACnC,MAAA;AAAA;AAGF,IAAM,MAAA,cAAA,GAAiC,CAAC,WAAW,CAAA;AACnD,IAAA,IAAIC,KAA0B,GAAA,KAAA,CAAA;AAC9B,IAAA,IAAI,SAAkB,EAAC;AACvB,IAAA,IAAI,mBAAmB,EAAC;AAExB,IAAA,KAAA,IAAS,aAAa,CAAG,EAAA,UAAA,GAAa,KAAM,CAAA,MAAA,CAAO,QAAQ,UAAc,EAAA,EAAA;AACvE,MAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AACrC,MAAM,KAAA,CAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,IAAS,EAAC;AAE9B,MAAA,IAAI,CAACA,KAAQ,IAAA,gBAAA,CAAiB,OAAO,KAAO,EAAA,OAAA,CAAQ,MAAM,CAAG,EAAA;AAC3D,QAAAA,KAAO,GAAA,KAAA;AAAA,OACF,MAAA;AACL,QAAI,IAAA,OAAA,CAAQ,QAAQ,CAAC,OAAA,CAAQ,KAAK,KAAO,EAAA,KAAA,EAAO,OAAQ,CAAA,MAAM,CAAG,EAAA;AAC/D,UAAA;AAAA;AAIF,QAAe,cAAA,CAAA,IAAA,CAAK,QAAS,CAAA,KAAK,CAAC,CAAA;AAEnC,QAAA,IAAI,MAAS,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,MAAN,KAAA,IAAA,GAAA,EAAA,GAAgB,EAAC;AAC9B,QAAA,IAAI,OAAO,KAAM,CAAA,IAAA;AACjB,QAAA,IAAI,MAAM,IAAM,EAAA;AACd,UAAI,IAAA,KAAA,CAAM,SAAS,4BAA8B,EAAA;AAC/C,YAAA,IAAA,GAAO,KAAM,CAAA,IAAA;AAAA,WACf,MAAA,IAAW,MAAO,CAAA,IAAA,IAAQ,IAAM,EAAA;AAE9B,YAAA,MAAA,GAAS,EAAE,GAAG,MAAQ,EAAA,IAAA,EAAM,MAAM,IAAK,EAAA;AAAA;AACzC;AAGF,QAAA,MAAA,CAAO,IAAK,CAAA;AAAA,UACV,GAAG,KAAA;AAAA,UACH,IAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA;AAGH,MAAA,IAAI,QAAQ,iBAAmB,EAAA;AAC7B,QAAA,KAAA,CAAM,MAAM,MAAS,GAAA;AAAA,UACnB,UAAA;AAAA,UACA;AAAA,SACF;AAAA;AACF;AAGF,IAAA,IAAI,CAACA,KAAM,EAAA;AACT,MAAA;AAAA;AAGF,IAAI,IAAA,cAAA,CAAe,WAAW,CAAG,EAAA;AAC/B,MAAA,cAAA,CAAe,KAAKA,KAAI,CAAA;AAAA;AAG1B,IAAA,SAAA,CAAU,KAAK,cAAc,CAAA;AAC7B,IAAM,MAAA,CAAA,GAAiB,CAACA,KAAAA,CAAK,MAAM,CAAA;AAEnC,IAAA,KAAA,MAAW,SAAS,MAAQ,EAAA;AAC1B,MAAE,CAAA,CAAA,IAAA,CAAK,MAAM,MAAM,CAAA;AACnB,MAAA,cAAA,CAAe,KAAK,KAAK,CAAA;AACzB,MAAI,IAAA,CAAC,QAAQ,gBAAkB,EAAA;AAE7B,QAAO,CAAA,EAAA,GAAA,KAAA,CAAM,UAAb,IAAoB,GAAA,IAAA,GAAA,OAAA,EAAA,CAAA,WAAA;AAAA;AAGtB,MAAA,gBAAA,CAAiB,KAAK,WAAW,CAAA;AACjC,MAAA,WAAA,EAAA;AAAA;AAGF,IAAA,0BAAA,CAA2B,KAAK,gBAAgB,CAAA;AAChD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA;AAGhB,EAAA,IAAI,SAA2D,EAAC;AAEhE,EAAI,IAAA,OAAA,CAAQ,IAAS,KAAA,QAAA,CAAS,YAAc,EAAA;AAC1C,IAAA,MAAA,GAAS,gBAAiB,CAAA,OAAA,EAAS,0BAA4B,EAAA,cAAA,CAAe,MAAiB,CAAA;AAAA,GACtF,MAAA,IAAA,OAAA,CAAQ,IAAS,KAAA,QAAA,CAAS,KAAO,EAAA;AAC1C,IAAA,MAAA,GAAS,UAAU,OAAO,CAAA;AAAA,GACrB,MAAA;AACL,IAAA,MAAA,GAAS,IAAK,CAAA,OAAA,EAAS,SAAW,EAAA,OAAA,CAAQ,IAAI,CAAA;AAAA;AAGhD,EAAO,OAAA;AAAA;AAAA,IAEL,QAAQ,MAAO,CAAA,CAAC,IAAI,MAAO,CAAA,CAAC,EAAE,MAAS,GAAA,CAAA;AAAA,IACvC,MAAQ,EAAA,cAAA,CAAe,GAAI,CAAA,CAAC,GAAG,KAAW,MAAA;AAAA,MACxC,GAAG,CAAA;AAAA,MACH,MAAA,EAAQ,OAAO,KAAK;AAAA,KACpB,CAAA;AAAA,GACJ;AACF;AAMA,SAAS,gBACP,CAAA,MAAA,EACA,0BACA,EAAA,cAAA,EACA,SACA,EAAA;AAGA,EAAA,IAAI,gBAA8E,EAAC;AAInF,EAAA,KAAA,IAAS,QAAW,GAAA,CAAA,EAAG,QAAW,GAAA,MAAA,CAAO,QAAQ,QAAY,EAAA,EAAA;AAE3D,IAAI,IAAA,KAAA,GAAQ,OAAO,QAAQ,CAAA;AAE3B,IAAI,IAAA,gBAAA,GAAmB,MAAM,CAAC,CAAA;AAG9B,IAAA,KAAA,IAAS,cAAiB,GAAA,CAAA,EAAG,cAAiB,GAAA,MAAA,CAAO,QAAQ,cAAkB,EAAA,EAAA;AAE7E,MAAA,IAAI,mBAAmB,QAAU,EAAA;AAC/B,QAAA;AAAA;AAGF,MAAI,IAAA,UAAA,GAAa,OAAO,cAAc,CAAA;AACtC,MAAI,IAAA,qBAAA,GAAwB,WAAW,CAAC,CAAA;AAGxC,MAAA,KAAA,IACM,uBAA0B,GAAA,CAAA,EAC9B,uBAA0B,GAAA,gBAAA,CAAiB,QAC3C,uBACA,EAAA,EAAA;AAQA,QAAM,MAAA,gBAAA,GAAmB,iBAAiB,uBAAuB,CAAA;AACjE,QAAA,MAAM,iBAAiB,cAAiB,GAAA,CAAA;AACxC,QAAI,IAAA,SAAA,GAAuD,CAAC,gBAAgB,CAAA,CAAE,OAAO,IAAI,KAAA,CAAM,cAAc,CAAC,CAAA;AAE9G,QAAA,IAAI,gBAAmB,GAAA,CAAA;AACvB,QAAA,KAAA,IAAS,SAAY,GAAA,CAAA,EAAG,SAAY,GAAA,KAAA,CAAM,QAAQ,SAAa,EAAA,EAAA;AAC7D,UAAA,MAAM,UAAa,GAAA,0BAAA,CAA2B,QAAQ,CAAA,CAAE,gBAAgB,CAAA;AACxE,UAAA,SAAA,CAAU,UAAU,CAAA,GAAI,KAAM,CAAA,SAAS,EAAE,uBAAuB,CAAA;AAChE,UAAA,gBAAA,EAAA;AAAA;AAGF,QAAA,KAAA,IAAS,mBAAsB,GAAA,CAAA,EAAG,mBAAsB,GAAA,qBAAA,CAAsB,QAAQ,mBAAuB,EAAA,EAAA;AAC3G,UAAA,IAAI,gBAAiB,CAAA,uBAAuB,CAAM,KAAA,qBAAA,CAAsB,mBAAmB,CAAG,EAAA;AAC5F,YAAA,IAAIC,iBAAmB,GAAA,CAAA;AACvB,YAAA,KAAA,IAAS,SAAY,GAAA,CAAA,EAAG,SAAY,GAAA,UAAA,CAAW,QAAQ,SAAa,EAAA,EAAA;AAClE,cAAA,MAAM,UAAa,GAAA,0BAAA,CAA2B,cAAc,CAAA,CAAEA,iBAAgB,CAAA;AAC9E,cAAA,SAAA,CAAU,UAAU,CAAA,GAAI,UAAW,CAAA,SAAS,EAAE,mBAAmB,CAAA;AACjE,cAAAA,iBAAAA,EAAAA;AAAA;AAGF,YAAA;AAAA;AACF;AAIF,QAAA,aAAA,CAAc,IAAK,CAAA,SAAA,CAAU,SAAS,CAAC,CAAI,GAAA,SAAA;AAAA;AAC7C;AACF;AAIF,EAAA,IAAI,OAAyD,EAAC;AAC9D,EAAA,KAAA,IAAS,KAAQ,GAAA,CAAA,EAAG,KAAQ,GAAA,cAAA,EAAgB,KAAS,EAAA,EAAA;AACnD,IAAA,IAAA,CAAK,IAAK,CAAA,IAAI,KAAM,CAAA,CAAC,CAAC,CAAA;AAAA;AAGxB,EAAA,KAAA,IAAS,OAAO,aAAe,EAAA;AAC7B,IAAM,MAAA,GAAA,GAAM,cAAc,GAAG,CAAA;AAE7B,IAAA,KAAA,IAAS,MAAS,GAAA,CAAA,EAAG,MAAS,GAAA,GAAA,CAAI,QAAQ,MAAU,EAAA,EAAA;AAClD,MAAA,IAAA,CAAK,MAAM,CAAA,CAAE,IAAK,CAAA,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA;AAC/B;AAGF,EAAO,OAAA,IAAA;AACT;AAmBA,SAAS,UAAU,MAAyE,EAAA;AAC1F,EAAA,MAAM,eAAiE,EAAC;AAGxE,EAAA,MAAM,UAAa,GAAA,CACjB,aACA,EAAA,YAAA,EACA,UACG,KAAA;AACH,IAAI,IAAA,YAAA,KAAiB,cAAc,MAAQ,EAAA;AAEzC,MAAA,YAAA,CAAa,KAAK,UAAU,CAAA;AAC5B,MAAA;AAAA;AAGF,IAAM,MAAA,YAAA,GAAe,cAAc,YAAY,CAAA;AAC/C,IAAA,MAAM,CAAC,OAAA,EAAS,GAAG,OAAO,CAAI,GAAA,YAAA;AAE9B,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,OAAA,CAAQ,QAAQ,CAAK,EAAA,EAAA;AACvC,MAAM,MAAA,KAAA,GAAQ,QAAQ,CAAC,CAAA;AAEvB,MAAA,IAAI,YAAiB,KAAA,CAAA,IAAK,UAAW,CAAA,QAAA,CAAS,KAAK,CAAG,EAAA;AACpD,QAAM,MAAA,MAAA,GAAS,CAAC,GAAG,UAAU,CAAA;AAE7B,QAAA,IAAI,iBAAiB,CAAG,EAAA;AACtB,UAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA;AAGnB,QAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,OAAA,CAAQ,QAAQ,CAAK,EAAA,EAAA;AACvC,UAAA,MAAA,CAAO,IAAK,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA;AAI3B,QAAW,UAAA,CAAA,aAAA,EAAe,YAAe,GAAA,CAAA,EAAG,MAAM,CAAA;AAAA;AACpD;AACF,GACF;AAGA,EAAW,UAAA,CAAA,MAAA,EAAQ,CAAG,EAAA,EAAE,CAAA;AAGxB,EAAI,IAAA,YAAA,CAAa,WAAW,CAAG,EAAA;AAC7B,IAAM,MAAA,UAAA,GAAa,MAAO,CAAA,MAAA,CAAO,CAAC,KAAA,EAAO,UAAU,KAAS,IAAA,KAAA,CAAM,MAAS,GAAA,CAAA,CAAA,EAAI,CAAC,CAAA;AAChF,IAAO,OAAA,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,YAAc,EAAA,MAAM,EAAE,CAAA;AAAA;AAKpD,EAAA,OAAO,YAAa,CAAA,CAAC,CAAE,CAAA,GAAA,CAAI,CAAC,CAAG,EAAA,QAAA,KAAa,YAAa,CAAA,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAI,CAAA,QAAQ,CAAC,CAAC,CAAA;AACtF;AAyBO,MAAM,WAAc,GAAA,CAAA;AACpB,MAAM,WAAc,GAAA,CAAA;AACpB,MAAM,WAAc,GAAA,CAAA;AAK3B,SAAS,UAAA,CAAW,KAA6B,EAAA,QAAA,EAAoB,UAAoB,EAAA;AACvF,EAAS,KAAA,IAAA,CAAA,GAAI,GAAG,EAAI,EAAA,WAAA,GAAc,IAAI,CAAI,GAAA,QAAA,CAAS,QAAQ,CAAK,EAAA,EAAA;AAC9D,IAAI,IAAA,OAAA,GAAU,SAAS,CAAC,CAAA;AAExB,IAAA,IAAI,UAAU,WAAa,EAAA;AACzB,MAAA,EAAA,GAAK,OAAU,GAAA,CAAA;AACf,MAAA,OAAO,EAAM,IAAA,CAAA,IAAK,KAAM,CAAA,EAAE,KAAK,IAAM,EAAA;AACnC,QAAA,KAAA,CAAM,IAAI,CAAI,GAAA,IAAA;AAAA;AAGhB,MAAA,EAAA,GAAK,OAAU,GAAA,CAAA;AACf,MAAA,OAAO,EAAK,GAAA,UAAA,IAAc,KAAM,CAAA,EAAE,KAAK,IAAM,EAAA;AAC3C,QAAO,KAAA,CAAA,WAAA,GAAc,IAAK,CAAI,GAAA,IAAA;AAAA;AAChC;AACF;AAEJ;AAGO,SAAS,IAAK,CAAA,MAAA,EAAuB,SAAwB,EAAA,IAAA,GAAiB,SAAS,KAAO,EAAA;AACnG,EAAI,IAAA,KAAA,uBAAyB,GAAI,EAAA;AAEjC,EAAA,KAAA,IAAS,EAAK,GAAA,CAAA,EAAG,EAAK,GAAA,MAAA,CAAO,QAAQ,EAAM,EAAA,EAAA;AACzC,IAAI,IAAA,CAAA,GAAI,OAAO,EAAE,CAAA;AACjB,IAAI,IAAA,EAAA,GAAK,EAAE,CAAC,CAAA;AACZ,IAAA,IAAI,MAAM,EAAG,CAAA,MAAA;AAEb,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,GAAA,EAAK,CAAK,EAAA,EAAA;AAC5B,MAAM,KAAA,CAAA,GAAA,CAAI,EAAG,CAAA,CAAC,CAAC,CAAA;AAAA;AACjB;AAGF,EAAA,IAAI,IAAO,GAAA,CAAC,KAAM,CAAA,IAAA,CAAK,KAAK,CAAA,CAAE,IAAK,CAAA,CAAC,CAAG,EAAA,CAAA,KAAM,CAAI,GAAA,CAAC,CAAC,CAAA;AAEnD,EAAI,IAAA,UAAA,GAAa,IAAK,CAAA,CAAC,CAAE,CAAA,MAAA;AAEzB,EAAI,IAAA,KAAA,uBAAY,GAAI,EAAA;AAEpB,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,UAAA,EAAY,CAAK,EAAA,EAAA;AACnC,IAAA,KAAA,CAAM,IAAI,IAAK,CAAA,CAAC,CAAE,CAAA,CAAC,GAAG,CAAC,CAAA;AAAA;AAGzB,EAAA,KAAA,IAAS,EAAK,GAAA,CAAA,EAAG,EAAK,GAAA,MAAA,CAAO,QAAQ,EAAM,EAAA,EAAA;AACzC,IAAI,IAAA,CAAA,GAAI,OAAO,EAAE,CAAA;AACjB,IAAI,IAAA,EAAA,GAAK,EAAE,CAAC,CAAA;AAEZ,IAAA,KAAA,IAAS,EAAK,GAAA,CAAA,EAAG,EAAK,GAAA,CAAA,CAAE,QAAQ,EAAM,EAAA,EAAA;AACpC,MAAI,IAAA,EAAA,GAAK,EAAE,EAAE,CAAA;AAEb,MAAA,IAAI,KAAQ,GAAA,KAAA,CAAM,UAAU,CAAA,CAAE,KAAK,KAAS,CAAA,CAAA;AAE5C,MAAA,IAAI,WAAW,SAAY,GAAA,SAAA,CAAU,EAAE,CAAA,CAAE,EAAE,CAAI,GAAA,WAAA;AAE/C,MAAA,IAAI,WAAW,EAAC;AAEhB,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,EAAA,CAAG,QAAQ,CAAK,EAAA,EAAA;AAClC,QAAI,IAAA,IAAA,GAAO,GAAG,CAAC,CAAA;AACf,QAAA,IAAI,UAAa,GAAA,KAAA,CAAM,GAAI,CAAA,EAAA,CAAG,CAAC,CAAC,CAAA;AAEhC,QAAA,IAAI,SAAS,IAAM,EAAA;AACjB,UAAA,IAAI,aAAa,WAAa,EAAA;AAC5B,YAAA,KAAA,CAAM,UAAU,CAAI,GAAA,IAAA;AAEpB,YAAA,IAAI,aAAa,WAAa,EAAA;AAC5B,cAAA,QAAA,CAAS,KAAK,UAAU,CAAA;AAAA;AAC1B;AACF,SACK,MAAA;AACL,UAAA,KAAA,CAAM,UAAU,CAAI,GAAA,IAAA;AAAA;AACtB;AAGF,MAAW,UAAA,CAAA,KAAA,EAAO,UAAU,UAAU,CAAA;AAEtC,MAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA;AACjB;AAGF,EAAO,OAAA,IAAA;AACT;AAIgB,SAAA,uBAAA,CAAwB,IAAiB,EAAA,OAAA,GAAU,EAAI,EAAA;AACrE,EAAA,MAAM,MAAM,IAAK,CAAA,MAAA;AAGjB,EAAA,IAAI,OAAO,CAAG,EAAA;AACZ,IAAO,OAAA,IAAA;AAAA;AAIT,EAAA,IAAI,QAAW,GAAA,CAAA;AACf,EAAA,IAAI,UAAU,GAAM,GAAA,CAAA;AAEpB,EAAA,OAAO,QAAY,IAAA,OAAA,IAAW,IAAK,CAAA,QAAQ,KAAK,IAAM,EAAA;AACpD,IAAA,QAAA,EAAA;AAAA;AAGF,EAAA,OAAO,OAAW,IAAA,QAAA,IAAY,IAAK,CAAA,OAAO,KAAK,IAAM,EAAA;AACnD,IAAA,OAAA,EAAA;AAAA;AAIF,EAAA,IAAI,WAAW,QAAU,EAAA;AACvB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAM,MAAA,MAAA,GAAS,IAAK,CAAA,GAAA,CAAI,CAAG,EAAA,IAAA,CAAK,OAAO,OAAU,GAAA,QAAA,GAAW,CAAK,IAAA,OAAO,CAAC,CAAA;AAEzE,EAAS,KAAA,IAAA,OAAA,GAAU,IAAK,CAAA,QAAQ,CAAG,EAAA,CAAA,GAAI,WAAW,MAAQ,EAAA,CAAA,IAAK,OAAS,EAAA,CAAA,IAAK,MAAQ,EAAA;AACnF,IAAM,MAAA,CAAA,GAAI,KAAK,CAAC,CAAA;AAEhB,IAAI,IAAA,CAAA,IAAK,IAAQ,IAAA,OAAA,IAAW,IAAM,EAAA;AAChC,MAAA,IAAI,KAAK,OAAS,EAAA;AAChB,QAAO,OAAA,KAAA;AAAA;AAGT,MAAU,OAAA,GAAA,CAAA;AAAA;AACZ;AAGF,EAAO,OAAA,IAAA;AACT;;ACzkBgB,SAAA,kBAAA,CAAmB,cAAsB,SAA2B,EAAA;AAClF,EAAA,MAAM,UAAa,GAAA,sBAAA;AACnB,EAAA,OAAO,YAAa,CAAA,OAAA,CAAQ,UAAY,EAAA,CAAC,CAAG,EAAA,EAAA,KAAQ,SAAU,CAAA,EAAE,CAAI,GAAA,SAAA,CAAU,EAAE,CAAA,GAAI,EAAG,CAAA;AACzF;;ACUY,IAAA,oBAAA,qBAAAC,qBAAL,KAAA;AACL,EAAAA,sBAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,sBAAA,SAAU,CAAA,GAAA,SAAA;AAFA,EAAAA,OAAAA,qBAAAA;AAAA,CAAA,EAAA,oBAAA,IAAA,EAAA;AA6BZ,MAAM,uBAA0B,GAAA,UAAA;AAyBzB,MAAM,mBAAA,GAAN,MAAM,mBAAwC,CAAA;AAAA,EAqB3C,YAAmB,OAAgC,EAAA;AAAhC,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAlB3B,IAAA,IAAA,CAAA,IAAA,GAAwB,EAAC;AAEzB,IAAA,IAAA,CAAA,MAAA,GAAkB,EAAC;AACnB,IAAS,IAAA,CAAA,MAAA,GAAA,CAAA;AAET,IAAA,IAAA,CAAQ,eAA8B,EAAC;AACvC,IAAA,IAAA,CAAQ,cAAiB,GAAA,CAAA,CAAA;AACzB,IAAA,IAAA,CAAQ,QAAW,GAAA,CAAA;AAGnB;AAAA,IAAQ,IAAA,CAAA,MAAA,uBAA0B,GAAI,EAAA;AACtC,IAAA,IAAA,CAAS,UAA+B,GAAA;AAAA,MACtC,aAAe,EAAA,IAAA;AAAA,MACf,MAAQ,EAAA,CAAA;AAAA,MACR,MAAQ,EAAA,SAAA;AAAA,MACR,MAAQ,EAAA;AAAA,KACV;AAcA,IAAY,IAAA,CAAA,SAAA,GAAA,CACV,cACA,EAAA,eAAA,EACA,UAGiC,KAAA;AA7GrC,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA8GI,MAAA,MAAM,OAAU,GAAA,eAAA,GAAkB,MAAO,CAAA,MAAA,CAAO,EAAI,EAAA,EAAE,GAAG,IAAA,CAAK,OAAS,EAAA,GAAG,eAAgB,EAAC,IAAI,IAAK,CAAA,OAAA;AACpG,MAAM,MAAA,YAAA,GAAe,sBAAuB,CAAA,IAAA,EAAM,cAAc,CAAA;AAEhE,MAAA,MAAM,qBAAwB,GAAA,wBAAA;AAAA,QAC5B,YAAa,CAAA,MAAA,CAAO,GAAI,CAAA,CAAC,CAAG,KAAA;AAlHlC,UAAAd,IAAAA,GAAAA;AAkHqC,UAAA,OAAA,CAAAA,GAAA,GAAA,CAAA,CAAE,MAAF,KAAA,IAAA,GAAAA,MAAY,EAAC;AAAA,SAAC,CAAA;AAAA,QAC7C,QAAO,UAAY,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,SAAA,CAAA,KAAc,QAAW,GAAA,IAAA,CAAK,GAAI,CAAA,UAAA,CAAW,SAAW,EAAA,OAAA,CAAQ,SAAS,CAAA,GAAI,OAAQ,CAAA,SAAA;AAAA,QACxG,IAAK,CAAA,cAAA;AAAA,QACL,OAAQ,CAAA;AAAA,OACV;AAEA,MAAA,YAAA,CAAa,MAAS,GAAA,YAAA,CAAa,MAAO,CAAA,GAAA,CAAI,CAAC,CAAG,KAAA;AAxHtD,QAAAA,IAAAA,GAAAA;AAwH0D,QAAA,OAAA;AAAA,UACpD,GAAG,CAAA;AAAA,UACH,SAAQA,GAAA,GAAA,CAAA,CAAE,MAAF,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,IAAU,KAAM,CAAA,qBAAA;AAAA,SAC1B;AAAA,OAAE,CAAA;AAEF,MAAM,MAAA,MAAA,GAAA,CAAS,8BAAa,MAAO,CAAA,CAAC,MAArB,IAAwB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,KAAxB,IAAgC,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,KAAhC,IAA0C,GAAA,EAAA,GAAA,CAAA;AAEzD,MAAO,OAAA;AAAA,QACL,GAAG,YAAA;AAAA;AAAA,QAEH,QAAQ,IAAK,CAAA,MAAA;AAAA,QACb,cAAc,IAAK,CAAA,YAAA;AAAA,QAEnB,MAAM,IAAK,CAAA,IAAA;AAAA,QACX,OAAO,IAAK,CAAA,KAAA;AAAA,QACZ,MAAM,IAAK,CAAA,IAAA;AAAA,QACX,MAAA;AAAA,QACA,gBAAgB,IAAK,CAAA,cAAA;AAAA,QACrB,UAAU,IAAK,CAAA,QAAA;AAAA,QACf,YAAY,IAAK,CAAA,UAAA;AAAA,QACjB;AAAA,OACF;AAAA,KACF;AAEA,IAAQ,IAAA,CAAA,kBAAA,GAAqB,CAAC,UAA8D,KAAA;AAC1F,MAAA,IAAA,CAAK,OAAO,UAAW,CAAA,IAAA;AACvB,MAAA,IAAA,CAAK,QAAQ,UAAW,CAAA,KAAA;AACxB,MAAA,IAAA,CAAK,OAAO,UAAW,CAAA,IAAA;AACvB,MAAA,IAAA,CAAK,SAAS,UAAW,CAAA,MAAA;AACzB,MAAA,IAAA,CAAK,SAAS,UAAW,CAAA,MAAA;AACzB,MAAA,IAAA,CAAK,eAAe,UAAW,CAAA,YAAA;AAC/B,MAAA,IAAA,CAAK,iBAAiB,UAAW,CAAA,cAAA;AACjC,MAAA,IAAA,CAAK,WAAW,UAAW,CAAA,QAAA;AAC3B,MAAK,IAAA,CAAA,UAAA,CAAW,MAAS,GAAA,UAAA,CAAW,UAAW,CAAA,MAAA;AAC/C,MAAK,IAAA,CAAA,UAAA,CAAW,MAAS,GAAA,UAAA,CAAW,UAAW,CAAA,MAAA;AAC/C,MAAA,IAAA,CAAK,WAAW,MAAS,GAAA,SAAA;AACzB,MAAA,IAAA,CAAK,WAAW,aAAgB,GAAA,IAAA;AAChC,MAAA,IAAA,CAAK,MAAS,GAAA,UAAA,CAAW,MAAO,CAAA,GAAA,CAAI,CAAC,CAAG,KAAA;AA7J5C,QAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA6JgD,QAAA,OAAA;AAAA,UAC1C,GAAG,CAAA;AAAA,UACH,IAAM,EAAA,CAAA,EAAA,GAAA,CAAA,CAAE,IAAF,KAAA,IAAA,GAAA,EAAA,GAAU,SAAU,CAAA,KAAA;AAAA,UAC1B,MAAQ,EAAA,CAAA,EAAA,GAAA,CAAA,CAAE,MAAF,KAAA,IAAA,GAAA,EAAA,GAAY,EAAC;AAAA,UACrB,MAAQ,EAAA,CAAA,EAAA,GAAA,CAAA,CAAE,MAAF,KAAA,IAAA,GAAA,EAAA,GAAY;AAAC,SACvB;AAAA,OAAE,CAAA;AAEF,MAAA,gCAAA;AAAA,QACE,KAAK,MAAO,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA;AAAA,QAC/B,KAAK,OAAQ,CAAA,SAAA;AAAA,QACb,IAAK,CAAA,cAAA;AAAA,QACL,KAAK,OAAQ,CAAA;AAAA,OACf;AAAA,KACF;AAqBA,IAAA,IAAA,CAAA,aAAA,GAAgB,CAAC,EAAE,SAAW,EAAA,QAAA,EAAsC,KAAA;AAClE,MAAA,MAAM,eAAkB,GAAA,SAAA,IAAa,IAAK,CAAA,OAAA,CAAQ,SAAY,GAAA,SAAA;AAC9D,MAAA,MAAM,gBAAmB,GAAA,QAAA,IAAY,IAAK,CAAA,OAAA,CAAQ,QAAW,GAAA,QAAA;AAC7D,MAAA,MAAM,mCAAsC,GAAA,QAAA,IAAY,IAAK,CAAA,OAAA,CAAQ,QAAa,KAAA,QAAA;AAClF,MAAO,OAAA,OAAA,CAAQ,eAAmB,IAAA,gBAAA,IAAoB,mCAAmC,CAAA;AAAA,KAC3F;AAEA,IAAA,IAAA,CAAA,MAAA,GAAS,CAAC,EAAE,SAAW,EAAA,QAAA,EAA+C,KAAA;AACpE,MAAA,IAAI,QAAU,EAAA;AACZ,QAAI,IAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,KAAa,QAAU,EAAA;AACtC,UAAA,IAAA,CAAK,QAAQ,QAAW,GAAA,QAAA;AAAA,SACnB,MAAA;AACL,UAAA,IAAA,CAAK,QAAQ,QAAW,GAAA,IAAA,CAAK,IAAI,QAAU,EAAA,IAAA,CAAK,QAAQ,QAAQ,CAAA;AAAA;AAClE;AAEF,MAAK,IAAA,CAAA,OAAA,CAAQ,YAAY,IAAK,CAAA,GAAA,CAAI,KAAK,OAAQ,CAAA,SAAA,EAAW,gCAAa,CAAC,CAAA;AAAA,KAC1E;AAsKA,IAAA,IAAA,CAAA,aAAA,GAAgB,CAAC,MAAwB,KAAA;AArX3C,MAAA,IAAA,EAAA,EAAA,EAAA;AAsXI,MAAI,IAAA,EAAC,iCAAQ,MAAQ,CAAA,EAAA;AACnB,QAAA;AAAA;AAGF,MAAK,IAAA,CAAA,UAAA,CAAW,MAAS,GAAA,IAAA,CAAK,OAAQ,CAAA,MAAA;AACtC,MAAA,IAAA,CAAK,UAAW,CAAA,MAAA,EAAA;AAChB,MAAA,IAAA,CAAK,UAAW,CAAA,MAAA,GAAS,MAAO,CAAA,CAAC,CAAE,CAAA,MAAA;AACnC,MAAA,IAAA,CAAK,WAAW,aAAgB,GAAA,KAAA;AAEhC,MAAI,IAAA,IAAA,CAAK,OAAQ,CAAA,MAAA,KAAW,QAA6B,eAAA;AACvD,QAAA,QAAA;AAAA,UACE,KAAK,MAAO,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA;AAAA,UAC/B,MAAA;AAAA,UACA,KAAK,OAAQ,CAAA,SAAA;AAAA,UACb,IAAK,CAAA,cAAA;AAAA,UACL,KAAK,OAAQ,CAAA;AAAA,SACf;AAAA,OACK,MAAA;AACL,QAAO,MAAA,CAAA,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAM,KAAA;AACvB,UAAI,IAAA,IAAA,CAAK,MAAO,CAAA,CAAC,CAAG,EAAA;AAClB,YAAK,IAAA,CAAA,MAAA,CAAO,CAAC,CAAA,CAAE,MAAS,GAAA,CAAA;AAAA;AAC1B,SACD,CAAA;AAED,QAAA,gCAAA;AAAA,UACE,KAAK,MAAO,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA;AAAA,UAC/B,KAAK,OAAQ,CAAA,SAAA;AAAA,UACb,IAAK,CAAA,cAAA;AAAA,UACL,KAAK,OAAQ,CAAA;AAAA,SACf;AAAA;AAEF,MAAA,MAAM,aAAY,EAAK,GAAA,CAAA,EAAA,GAAA,IAAA,CAAA,MAAA,KAAL,IAAc,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAA,CAAA,KAAd,mBAAkB,MAAO,CAAA,MAAA;AAC3C,MAAA,IAAI,cAAc,KAAW,CAAA,EAAA;AAC3B,QAAA,IAAA,CAAK,MAAS,GAAA,SAAA;AAAA;AAChB,KACF;AAEA,IAAA,IAAA,CAAA,sBAAA,GAAyB,MAAM;AAC7B,MAAK,IAAA,CAAA,MAAA,CAAO,OAAQ,CAAA,CAAC,CAAM,KAAA;AA5Z/B,QAAA,IAAA,EAAA;AA6ZM,QAAA,CAAA,CAAE,KAAQ,GAAA;AAAA,UACR,GAAI,CAAA,EAAA,GAAA,CAAA,CAAE,KAAF,KAAA,IAAA,GAAA,EAAA,GAAW,EAAC;AAAA,UAChB,KAAO,EAAA,KAAA,CAAA;AAAA,UACP,KAAO,EAAA,KAAA;AAAA,SACT;AAAA,OACD,CAAA;AAAA,KACH;AAEA,IAAA,IAAA,CAAA,uBAAA,GAA0B,CAAC,cACzB,KAAA,IAAA,CAAK,OACF,GAAI,CAAA,CAAC,GAAG,KAAW,KAAA,cAAA,CAAe,CAAC,CAAA,GAAI,QAAQ,KAAU,CAAA,CAAA,CACzD,OAAO,CAAC,GAAA,KAAQ,QAAQ,KAAS,CAAA,CAAA;AAEtC,IAAA,IAAA,CAAA,uBAAA,GAA0B,MACxB,IAAA,CAAK,MAAO,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA;AACrB,MAAA,MAAM,SAAS,CAAE,CAAA,MAAA;AACjB,MAAO,OAAA,MAAA,CAAO,MAAM,IAAK,CAAA,GAAA,CAAI,OAAO,MAAS,GAAA,IAAA,CAAK,UAAW,CAAA,MAAM,CAAC,CAAA;AAAA,KACrE,CAAA;AAEH,IAAA,IAAA,CAAA,mBAAA,GAAsB,MAAM,OAAA,CAAQ,IAAK,CAAA,UAAA,CAAW,MAAM,CAAA;AAyC1D,IAAA,IAAA,CAAA,UAAA,GAAa,MAAuC,IAAK,CAAA,OAAA;AA5XvD,IAAO,MAAA,CAAA,cAAA,CAAe,MAAM,QAAU,EAAA;AAAA,MACpC,UAAY,EAAA;AAAA,KACb,CAAA;AAGD,IAAO,MAAA,CAAA,cAAA,CAAe,MAAM,QAAU,EAAA;AAAA,MACpC,UAAY,EAAA;AAAA,KACb,CAAA;AAAA;AACH,EAsFA,IAAY,aAAgB,GAAA;AAC1B,IAAO,OAAA,IAAA,CAAK,QAAQ,MAAW,KAAA,SAAA;AAAA;AACjC;AAAA;AAAA;AAAA;AAAA,EAwBA,KAAK,GAAsC,EAAA;AACzC,IAAM,MAAA,EAAE,MAAQ,EAAA,IAAA,EAAS,GAAA,GAAA;AAEzB,IAAA,IAAA,CAAK,UAAW,CAAA,MAAA,EAAA;AAChB,IAAA,IAAA,CAAK,WAAW,MAAS,GAAA,CAAA;AACzB,IAAA,IAAA,CAAK,WAAW,aAAgB,GAAA,KAAA;AAEhC,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,IAAA,CAAK,QAAW,GAAA,CAAA;AAChB,MAAK,IAAA,CAAA,cAAA,GAAiB,OAAO,MAAO,CAAA,SAAA,CAAU,CAAC,CAAM,KAAA,CAAA,CAAE,IAAS,KAAA,SAAA,CAAU,IAAI,CAAA;AAC9E,MAAM,MAAA,UAAA,GAAa,MAAO,CAAA,MAAA,CAAO,CAAC,CAAA;AAClC,MAAA,IACE,IAAK,CAAA,cAAA,KAAmB,CACxB,IAAA,UAAA,CAAW,IAAS,KAAA,SAAA,CAAU,MAC7B,KAAA,UAAA,CAAW,IAAS,KAAA,QAAA,IAAY,UAAW,CAAA,IAAA,KAAS,QACrD,CAAA,EAAA;AACA,QAAA,IAAA,CAAK,QAAW,GAAA,CAAA;AAChB,QAAA,IAAA,CAAK,cAAiB,GAAA,CAAA;AAAA;AAGxB,MAAM,MAAA,gBAAA,GAAmB,KAAK,QAAa,KAAA,CAAA,gBAAkB,OAAO,MAAO,CAAA,KAAA,CAAM,CAAC,CAAA,GAAI,MAAO,CAAA,MAAA;AAE7F,MAAA,IAAA,CAAK,QAAQ,MAAO,CAAA,KAAA;AACpB,MAAA,IAAI,OAAO,IAAM,EAAA;AACf,QAAA,IAAA,CAAK,IAAO,GAAA,EAAE,GAAG,MAAA,CAAO,IAAK,EAAA;AAAA;AAG/B,MAAM,MAAA,EAAE,iBAAkB,EAAA,GAAI,IAAK,CAAA,OAAA;AACnC,MAAA,IAAI,gBAAiB,CAAA,IAAA,CAAK,YAAc,EAAA,gBAAgB,CAAG,EAAA;AACzD,QAAA,MAAM,MAAM,gBAAiB,CAAA,MAAA;AAC7B,QAAA,IAAA,CAAK,MAAO,CAAA,OAAA,CAAQ,CAAC,CAAA,EAAG,GAAQ,KAAA;AAnPxC,UAAA,IAAA,EAAA;AAoPU,UAAM,MAAA,EAAA,GAAK,gBAAiB,CAAA,GAAA,GAAM,GAAG,CAAA;AACrC,UAAA,CAAA,CAAE,MAAS,GAAA,CAAA,EAAA,GAAA,EAAA,CAAG,MAAH,KAAA,IAAA,GAAA,EAAA,GAAa,EAAC;AACzB,UAAA,CAAA,CAAE,SAAS,EAAG,CAAA,MAAA;AAAA,SACf,CAAA;AACD,QAAA,IAAI,iBAAmB,EAAA;AACrB,UAAK,IAAA,CAAA,MAAA,CAAO,OAAQ,CAAA,CAAC,CAAM,KAAA;AACzB,YAAM,MAAA,MAAA,GAAS,EAAE,CAAC,uBAAuB,GAAG,CAAE,CAAA,IAAA,EAAM,GAAG,CAAA,CAAE,MAAO,EAAA;AAChE,YAAA,CAAA,CAAE,MAAO,CAAA,iBAAA,GAAoB,kBAAmB,CAAA,iBAAA,EAAmB,MAAM,CAAA;AAAA,WAC1E,CAAA;AAAA;AACH,OACK,MAAA;AACL,QAAA,IAAA,CAAK,WAAW,aAAgB,GAAA,IAAA;AAChC,QAAM,MAAA,MAAA,GAAS,KAAK,QAAa,KAAA,CAAA;AACjC,QAAA,IAAA,CAAK,MAAS,GAAA,gBAAA,CAAiB,GAAI,CAAA,CAAC,CAAM,KAAA;AAjQlD,UAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAkQU,UAAA,MAAM,MAAS,GAAA,CAAA,EAAA,GAAA,CAAA,CAAE,MAAF,KAAA,IAAA,GAAA,EAAA,GAAY,EAAC;AAC5B,UAAA,IAAI,iBAAmB,EAAA;AACrB,YAAM,MAAA,MAAA,GAAS,EAAE,CAAC,uBAAuB,GAAG,CAAE,CAAA,IAAA,EAAM,GAAG,CAAA,CAAE,MAAO,EAAA;AAChE,YAAO,MAAA,CAAA,iBAAA,GAAoB,kBAAmB,CAAA,iBAAA,EAAmB,MAAM,CAAA;AAAA;AAEzE,UAAO,OAAA;AAAA,YACL,MAAA;AAAA,YACA,MAAM,CAAE,CAAA,IAAA;AAAA,YACR,QAAQ,CAAE,CAAA,MAAA;AAAA,YACV,IAAM,EAAA,CAAA,EAAA,GAAA,CAAA,CAAE,IAAF,KAAA,IAAA,GAAA,EAAA,GAAU,SAAU,CAAA,KAAA;AAAA;AAAA,YAE1B,MAAA,EAAQ,MACH,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAO,CAAA,IAAA,CAAK,CAAC,EAAA,KAAO,EAAG,CAAA,IAAA,KAAS,CAAE,CAAA,IAAA,IAAQ,CAAE,CAAA,IAAA,KAAS,GAAG,IAAI,CAAA,KAAjE,IAAoE,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,KAApE,IACD,GAAA,EAAA,GAAA,KAAA,CAAM,IAAK,CAAA,MAAM,CAAE,CAAA,IAAA,CAAK,KAAS,CAAA,CAAA,GACjC;AAAC,WACP;AAAA,SACD,CAAA;AAAA;AAGH,MAAA,IAAA,CAAK,YAAe,GAAA,gBAAA;AAAA;AAGtB,IAAI,IAAA,IAAA,IAAQ,KAAK,MAAO,CAAA,MAAA,IAAU,KAAK,MAAO,CAAA,CAAC,EAAE,MAAQ,EAAA;AACvD,MAAI,IAAA,EAAE,MAAQ,EAAA,QAAA,EAAa,GAAA,IAAA;AAE3B,MAAA,IAAI,QAAU,EAAA;AACZ,QAAS,QAAA,CAAA,OAAA,CAAQ,CAAC,IAAA,EAAM,CAAM,KAAA;AAC5B,UAAA,IAAI,IAAM,EAAA;AACR,YAAyB,wBAAA,CAAA,IAAA,EAAM,MAAO,CAAA,CAAC,CAAC,CAAA;AAAA;AAE1C,SACD,CAAA;AAAA;AAGH,MAAI,IAAA,IAAA,CAAK,aAAa,CAAiB,eAAA;AAErC,QAAM,MAAA,aAAA,GAAgB,UAAU,MAAM,CAAA;AAGtC,QAAW,KAAA,MAAA,KAAA,IAAS,aAAc,CAAA,IAAA,EAAQ,EAAA;AACxC,UAAA,IAAI,CAAC,IAAA,CAAK,MAAO,CAAA,GAAA,CAAI,KAAK,CAAG,EAAA;AAC3B,YAAA,IAAA,CAAK,WAAW,aAAgB,GAAA,IAAA;AAChC,YAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA;AACrB;AAIF,QAAI,IAAA,UAAA,GAAa,MAAM,IAAK,CAAA,YAAA,CAAa,MAAM,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAExD,QAAA,IAAI,SAAwB,EAAC;AAC7B,QAAK,IAAA,CAAA,MAAA,CAAO,OAAQ,CAAA,CAAC,KAAU,KAAA;AApTvC,UAAA,IAAA,EAAA;AAqTU,UAAA,MAAA,CAAO,MAAK,EAAc,GAAA,aAAA,CAAA,GAAA,CAAI,KAAK,CAAA,KAAvB,YAA4B,UAAU,CAAA;AAAA,SACnD,CAAA;AAED,QAAA,MAAA,GAAS,KAAK,MAAM,CAAA;AAAA;AAGtB,MAAA,IAAI,MAAO,CAAA,MAAA,KAAW,IAAK,CAAA,MAAA,CAAO,MAAQ,EAAA;AACxC,QAAI,IAAA,IAAA,CAAK,OAAO,MAAQ,EAAA;AACtB,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,kCAAA,EAAqC,IAAK,CAAA,MAAA,CAAO,MAAM,CAAA,YAAA,EAAe,OAAO,MAAM,CAAA,SAAA,EACjF,IAAK,CAAA,QAAA,KAAa,CACpB,cAAA,CAAA;AAAA,WACF;AAAA;AAGF,QAAA,IAAA,CAAK,MAAS,GAAA,MAAA,CAAO,GAAI,CAAA,CAAC,MAAM,GAAQ,KAAA;AACtC,UAAI,IAAA,IAAA,GAAO,SAAS,GAAG,CAAA,CAAA;AACvB,UAAA,IAAI,IAAO,GAAA,uBAAA,CAAwB,IAAK,CAAA,CAAC,CAAC,CAAA;AAC1C,UAAM,MAAA,MAAA,GAAS,QAAQ,CAAK,IAAA,IAAA,KAAS,UAAU,MAAW,IAAA,IAAA,CAAkB,CAAC,CAAI,GAAA,aAAA;AACjF,UAAA,IAAI,MAAQ,EAAA;AACV,YAAA,IAAA,GAAO,SAAU,CAAA,IAAA;AACjB,YAAO,IAAA,GAAA,MAAA;AAAA;AAGT,UAAO,OAAA;AAAA,YACL,IAAA;AAAA,YACA,IAAA;AAAA,YACA,QAAQ,EAAC;AAAA,YACT,QAAQ;AAAC,WACX;AAAA,SACD,CAAA;AAAA;AAGH,MAAA,IAAI,QAAW,GAAA,MAAA;AACf,MAAA,IAAA,CAAK,UAAW,CAAA,MAAA,GAAS,MAAO,CAAA,CAAC,CAAE,CAAA,MAAA;AAEnC,MAAA,IAAI,IAAK,CAAA,aAAA,IAAiB,CAAC,IAAA,CAAK,MAAQ,EAAA;AACtC,QAAA,IAAA,CAAK,WAAW,MAAS,GAAA,SAAA;AAAA,OACpB,MAAA;AACL,QAAA,IAAA,CAAK,WAAW,MAAS,GAAA,QAAA;AAGzB,QAAA,QAAA,GAAW,KAAK,MAAO,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA;AAC1C,QAAS,QAAA,CAAA,QAAA,EAAU,QAAQ,IAAK,CAAA,OAAA,CAAQ,WAAW,IAAK,CAAA,cAAA,EAAgB,IAAK,CAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA;AAG/F,MAAS,QAAA,CAAA,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAM,KAAA;AACzB,QAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,MAAA,CAAO,CAAC,CAAA;AAC3B,QAAM,MAAA,EAAE,OAAU,GAAA,KAAA;AAClB,QAAA,KAAA,CAAM,MAAS,GAAA,CAAA;AACf,QAAA,IAAI,KAAO,EAAA;AACT,UAAA,KAAA,CAAM,KAAQ,GAAA,KAAA,CAAA;AAAA;AAChB,OACD,CAAA;AAGD,MAAK,IAAA,CAAA,MAAA,GAAS,QAAS,CAAA,CAAC,CAAE,CAAA,MAAA;AAAA;AAG5B,IAAO,OAAA;AAAA,MACL,GAAG,IAAK,CAAA;AAAA,KACV;AAAA;AACF;AAAA,EAgEQ,SAAS,KAAe,EAAA;AAnblC,IAAA,IAAA,EAAA;AAobI,IAAM,MAAA,EAAE,iBAAkB,EAAA,GAAI,IAAK,CAAA,OAAA;AACnC,IAAM,MAAA,UAAA,GAAa,KAAK,MAAO,CAAA,IAAA;AAG/B,IAAM,MAAA,YAAA,GAAe,qBAAqB,KAAK,CAAA;AAE/C,IAAA,IAAI,eAAe,CAAG,EAAA;AAEpB,MAAA,IAAA,CAAK,MAAO,CAAA,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAM,KAAA;AAC5B,QAAA,IAAI,IAAI,CAAG,EAAA;AACT,UAAA,CAAA,CAAE,MAAS,GAAA,YAAA;AACX,UAAA,IAAI,iBAAmB,EAAA;AACrB,YAAM,MAAA,MAAA,GAAS,EAAE,CAAC,uBAAuB,GAAG,CAAE,CAAA,IAAA,EAAM,GAAG,YAAa,EAAA;AACpE,YAAA,CAAA,CAAE,MAAO,CAAA,iBAAA,GAAoB,kBAAmB,CAAA,iBAAA,EAAmB,MAAM,CAAA;AAAA;AAC3E;AACF,OACD,CAAA;AAAA,KACI,MAAA;AACL,MAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,IAAK,CAAA,YAAA,CAAa,QAAQ,CAAK,EAAA,EAAA;AACjD,QAAI,IAAA,KAAA,GAAQ,IAAK,CAAA,YAAA,CAAa,CAAC,CAAA;AAC/B,QAAA,MAAM,MAAS,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,MAAN,KAAA,IAAA,GAAA,EAAA,GAAgB,EAAC;AAChC,QAAA,IAAI,iBAAmB,EAAA;AACrB,UAAM,MAAA,MAAA,GAAS,EAAE,CAAC,uBAAuB,GAAG,KAAM,CAAA,IAAA,EAAM,GAAG,YAAa,EAAA;AACxE,UAAO,MAAA,CAAA,iBAAA,GAAoB,kBAAmB,CAAA,iBAAA,EAAmB,MAAM,CAAA;AAAA;AAEzE,QAAA,IAAA,CAAK,OAAO,IAAK,CAAA;AAAA,UACf,GAAG,KAAA;AAAA,UACH,MAAA;AAAA,UACA,MAAQ,EAAA,YAAA;AAAA,UACR,QAAQ,KAAM,CAAA,IAAA,CAAK,MAAM,CAAA,CAAE,KAAK,KAAS,CAAA;AAAA,SAC1C,CAAA;AAAA;AACH;AAGF,IAAK,IAAA,CAAA,MAAA,CAAO,IAAI,KAAK,CAAA;AAAA;AAIzB,CAAA;AApZa,mBAsGJ,CAAA,WAAA,GAAc,CAAC,UAA6C,KAAA;AACjE,EAAA,MAAM,KAAQ,GAAA,IAAI,mBAAmB,CAAA,UAAA,CAAW,OAAO,CAAA;AACvD,EAAA,KAAA,CAAM,mBAAmB,UAAU,CAAA;AACnC,EAAO,OAAA,KAAA;AACT,CAAA;AA1GW,mBAAA,CA4GJ,QAAQ,CAAC,IAAA,KACd,IAAI,mBAAmB,CAAA,wBAAA,CAAyB,IAAI,CAAC,CAAA;AA7G5C,mBA+GJ,CAAA,iBAAA,GAAoB,CAAC,KAAA,EAAsB,IAA8D,KAAA;AAC9G,EAAA,MAAM,kBAAqB,GAAA,IAAI,mBAAmB,CAAA,wBAAA,CAAyB,IAAI,CAAC,CAAA;AAChF,EAAA,kBAAA,CAAmB,KAAK,KAAK,CAAA;AAC7B,EAAO,OAAA,kBAAA;AACT,CAAA;AAnHK,IAAM,kBAAN,GAAA;AAsZA,SAAS,yBAAyB,IAA8D,EAAA;AA5dvG,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA6dE,EAAO,OAAA;AAAA,IACL,SAAA,EAAA,CAAW,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,SAAA,KAAN,IAAmB,GAAA,EAAA,GAAA,GAAA;AAAA,IAC9B,QAAA,EAAA,CAAU,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,QAAA,KAAN,IAAkB,GAAA,EAAA,GAAA,QAAA;AAAA,IAC5B,MAAA,EAAA,CAAQ,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,MAAA,KAAN,IAAgB,GAAA,EAAA,GAAA,QAAA;AAAA,IACxB,mBAAmB,IAAM,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA;AAAA,GAC3B;AACF;AAIO,SAAS,UAAU,KAAoB,EAAA;AAC5C,EAAA,IAAI,SAAY,GAAA,IAAI,GAAI,CAAA,KAAA,CAAM,CAAC,CAAC,CAAA;AAChC,EAAI,IAAA,MAAA,uBAAa,GAAI,EAAA;AAErB,EAAU,SAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACzB,IAAA,IAAI,IAAO,GAAA,KAAA,CAAM,KAAM,CAAA,MAAA,GAAS,CAAC,CAAA,CAC9B,IAAK,CAAA,IAAI,CACT,CAAA,GAAA,CAAI,MAAM,EAAE,CAAA;AAEf,IAAO,MAAA,CAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,GACrB,CAAA;AAED,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,MAAM,CAAC,CAAA,CAAE,QAAQ,CAAK,EAAA,EAAA;AACxC,IAAA,IAAI,QAAQ,MAAO,CAAA,GAAA,CAAI,MAAM,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA;AAClC,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AACrC,MAAM,KAAA,CAAA,CAAA,GAAI,CAAC,CAAE,CAAA,IAAA,CAAK,MAAM,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA;AAC/B;AAGF,EAAO,OAAA,MAAA;AACT;AAGO,SAAS,UAAW,CAAA,GAAA,EAAa,GAAe,EAAA,EAAA,EAAa,EAAa,EAAA;AAC/E,EAAI,IAAA,GAAA;AACJ,EAAA,EAAA,GAAK,EAAM,IAAA,CAAA;AACX,EAAK,EAAA,GAAA,EAAA,IAAM,IAAI,MAAS,GAAA,CAAA;AACxB,EAAA,IAAI,UAAU,EAAM,IAAA,UAAA;AAEpB,EAAO,OAAA,EAAA,GAAK,KAAK,CAAG,EAAA;AAClB,IAAM,GAAA,GAAA,OAAA,GAAW,KAAK,EAAO,IAAA,CAAA,GAAI,KAAK,KAAO,CAAA,CAAA,EAAA,GAAK,MAAM,CAAC,CAAA;AAEzD,IAAI,IAAA,GAAA,CAAI,GAAG,CAAA,GAAI,GAAK,EAAA;AAClB,MAAK,EAAA,GAAA,GAAA;AAAA,KACA,MAAA;AACL,MAAK,EAAA,GAAA,GAAA;AAAA;AACP;AAGF,EAAA,IAAI,MAAM,GAAI,CAAA,EAAE,KAAK,GAAI,CAAA,EAAE,IAAI,GAAK,EAAA;AAClC,IAAO,OAAA,EAAA;AAAA;AAGT,EAAO,OAAA,EAAA;AACT;AAEO,SAAS,qBAAqB,GAAqB,EAAA;AACxD,EAAI,IAAA,CAAC,IAAI,MAAQ,EAAA;AACf,IAAA,OAAO,EAAC;AAAA;AAEV,EAAA,IAAI,GAAI,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,GAAK,EAAA;AACzB,IAAA,OAAO,YAAY,GAAG,CAAA;AAAA;AAExB,EAAA,MAAM,eAAuB,EAAC;AAC9B,EAAA,GAAA,CAAI,KAAM,CAAA,GAAG,CAAE,CAAA,OAAA,CAAQ,CAAC,EAAO,KAAA;AAC7B,IAAM,MAAA,CAAC,KAAK,GAAG,CAAA,GAAI,GAAG,IAAK,EAAA,CAAE,MAAM,GAAG,CAAA;AACtC,IAAA,YAAA,CAAa,GAAG,CAAI,GAAA,GAAA;AAAA,GACrB,CAAA;AACD,EAAO,OAAA,YAAA;AACT;AAcA,SAAS,QAAA,CAAS,MAAmB,OAAsB,EAAA,SAAA,GAAY,UAAU,QAAW,GAAA,CAAA,EAAG,WAAW,QAAU,EAAA;AAClH,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,QAAQ,CAAC,CAAA,CAAE,QAAQ,CAAK,EAAA,EAAA;AAC1C,MAAA,IAAA,CAAK,CAAC,CAAE,CAAA,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA;AAC5B;AAGF,EAAA,OAAO,gCAAiC,CAAA,IAAA,EAAM,SAAW,EAAA,QAAA,EAAU,QAAQ,CAAA;AAC7E;AAEA,SAAS,iCAAiC,IAAmB,EAAA,SAAA,GAAY,UAAU,QAAW,GAAA,CAAA,EAAG,WAAW,QAAU,EAAA;AACpH,EAAA,MAAM,KAAQ,GAAA,wBAAA,CAAyB,IAAM,EAAA,SAAA,EAAW,UAAU,QAAQ,CAAA;AAE1E,EAAA,IAAI,KAAO,EAAA;AACT,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,MAAA,IAAA,CAAK,CAAC,CAAA,CAAE,MAAO,CAAA,CAAA,EAAG,KAAK,CAAA;AAAA;AACzB;AAGF,EAAO,OAAA,KAAA;AACT;AAEA,SAAS,yBAAyB,IAAmB,EAAA,SAAA,GAAY,UAAU,QAAW,GAAA,CAAA,EAAG,WAAW,QAAU,EAAA;AAtkB9G,EAAA,IAAA,EAAA;AAukBE,EAAA,IAAI,EAAC,CAAA,EAAA,GAAA,IAAA,CAAK,CAAC,CAAA,KAAN,mBAAS,MAAQ,CAAA,EAAA;AACpB,IAAO,OAAA,CAAA;AAAA;AAGT,EAAM,MAAA,IAAA,GAAO,IAAK,CAAA,CAAC,CAAE,CAAA,MAAA;AAErB,EAAA,IAAI,QAAW,GAAA,CAAA;AAEf,EAAA,IAAI,OAAO,SAAW,EAAA;AACpB,IAAA,QAAA,GAAW,IAAO,GAAA,SAAA;AAAA;AAGpB,EAAI,IAAA,QAAA,KAAa,QAAY,IAAA,QAAA,IAAY,CAAG,EAAA;AAC1C,IAAM,MAAA,WAAA,GAAc,KAAK,QAAQ,CAAA;AAEjC,IAAM,MAAA,GAAA,GAAM,YAAY,QAAQ,CAAA;AAChC,IAAM,MAAA,IAAA,GAAO,WAAY,CAAA,IAAA,GAAO,CAAC,CAAA;AAEjC,IAAI,IAAA,IAAA,GAAO,MAAM,QAAU,EAAA;AACzB,MAAA,QAAA,GAAW,UAAW,CAAA,IAAA,GAAO,QAAU,EAAA,WAAA,EAAa,QAAQ,CAAA;AAAA;AAC9D;AAGF,EAAO,OAAA,QAAA;AACT;AAEA,SAAS,gBAAA,CAAiB,GAAkB,CAA2B,EAAA;AACrE,EAAI,IAAA,CAAA,CAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAG,MAAW,MAAA,CAAA,CAAE,MAAQ,EAAA;AAC1B,IAAO,OAAA,KAAA;AAAA;AAET,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,CAAE,QAAQ,CAAK,EAAA,EAAA;AACjC,IAAM,MAAA,EAAA,GAAK,EAAE,CAAC,CAAA;AACd,IAAM,MAAA,EAAA,GAAK,EAAE,CAAC,CAAA;AACd,IAAA,IAAI,GAAG,IAAS,KAAA,EAAA,CAAG,QAAQ,EAAG,CAAA,IAAA,KAAS,GAAG,IAAM,EAAA;AAC9C,MAAO,OAAA,KAAA;AAAA;AACT;AAEF,EAAO,OAAA,IAAA;AACT;;ACtmBgB,SAAA,UAAA,CAAW,WAAkB,SAAyB,EAAA;AACpE,EAAI,IAAA,CAAC,SAAS,CAAI,GAAA,SAAA;AAClB,EAAI,IAAA,CAAC,SAAS,CAAI,GAAA,SAAA;AAElB,EAAA,IAAI,OAAO,SAAU,CAAA,MAAA;AACrB,EAAI,IAAA,MAAA,GAAS,UAAU,CAAC,CAAA;AACxB,EAAI,IAAA,IAAA,GAAO,SAAU,CAAA,IAAA,GAAO,CAAC,CAAA;AAE7B,EAAA,IAAI,OAAO,SAAU,CAAA,MAAA;AACrB,EAAI,IAAA,MAAA,GAAS,UAAU,CAAC,CAAA;AACxB,EAAI,IAAA,IAAA,GAAO,SAAU,CAAA,IAAA,GAAO,CAAC,CAAA;AAE7B,EAAI,IAAA,QAAA;AAEJ,EAAA,IAAI,IAAM,EAAA;AACR,IAAA,IAAI,IAAM,EAAA;AAER,MAAA,IAAI,SAAS,IAAM,EAAA;AACjB,QAAA,QAAA,GAAW,SAAU,CAAA,GAAA,CAAI,CAAC,CAAA,EAAG,CAAM,KAAA,SAAA,CAAU,CAAC,CAAA,CAAE,MAAO,CAAA,SAAA,CAAU,CAAC,CAAC,CAAC,CAAA;AAAA,OACtE,MAAA,IAES,OAAO,MAAQ,EAAA;AACtB,QAAA,QAAA,GAAW,SAAU,CAAA,GAAA,CAAI,CAAC,CAAA,EAAG,CAAM,KAAA,SAAA,CAAU,CAAC,CAAA,CAAE,MAAO,CAAA,SAAA,CAAU,CAAC,CAAC,CAAC,CAAA;AAAA,OAG7D,MAAA,IAAA,MAAA,IAAU,MAAU,IAAA,IAAA,IAAQ,IAAM,EAAA;AACzC,QAAW,QAAA,GAAA,SAAA;AAAA,OAGJ,MAAA,IAAA,MAAA,GAAS,MAAU,IAAA,IAAA,GAAO,IAAM,EAAA;AAEvC,QAAI,IAAA,QAAA,GAAW,UAAW,CAAA,MAAA,EAAQ,SAAS,CAAA;AAC3C,QAAA,QAAA,GAAW,SAAU,CAAA,QAAQ,CAAI,GAAA,MAAA,GAAS,WAAW,CAAI,GAAA,QAAA;AACzD,QAAI,IAAA,MAAA,GAAS,UAAW,CAAA,IAAA,EAAM,SAAS,CAAA;AACvC,QAAA,MAAA,GAAS,SAAU,CAAA,MAAM,CAAI,GAAA,IAAA,GAAO,SAAS,CAAI,GAAA,MAAA;AAEjD,QAAA,QAAA,GAAW,SAAU,CAAA,GAAA;AAAA,UAAI,CAAC,GAAG,CAC3B,KAAA,SAAA,CAAU,CAAC,CACR,CAAA,KAAA,CAAM,CAAG,EAAA,QAAQ,CACjB,CAAA,MAAA,CAAO,UAAU,CAAC,CAAC,EACnB,MAAO,CAAA,SAAA,CAAU,CAAC,CAAE,CAAA,KAAA,CAAM,MAAS,GAAA,CAAC,CAAC;AAAA,SAC1C;AAAA,OACF,MAAA,IAES,UAAU,MAAQ,EAAA;AACzB,QAAI,IAAA,GAAA,GAAM,UAAW,CAAA,MAAA,EAAQ,SAAS,CAAA;AACtC,QAAA,GAAA,GAAM,SAAU,CAAA,GAAG,CAAI,GAAA,MAAA,GAAS,MAAM,CAAI,GAAA,GAAA;AAC1C,QAAA,QAAA,GAAW,UAAU,GAAI,CAAA,CAAC,CAAG,EAAA,CAAA,KAAM,UAAU,CAAC,CAAA,CAAE,KAAM,CAAA,CAAA,EAAG,GAAG,CAAE,CAAA,MAAA,CAAO,SAAU,CAAA,CAAC,CAAC,CAAC,CAAA;AAAA,OACpF,MAAA,IAES,QAAQ,MAAQ,EAAA;AACvB,QAAI,IAAA,GAAA,GAAM,UAAW,CAAA,IAAA,EAAM,SAAS,CAAA;AACpC,QAAA,GAAA,GAAM,SAAU,CAAA,GAAG,CAAI,GAAA,IAAA,GAAO,MAAM,GAAM,GAAA,CAAA;AAC1C,QAAA,QAAA,GAAW,SAAU,CAAA,GAAA,CAAI,CAAC,CAAA,EAAG,MAAM,SAAU,CAAA,CAAC,CAAE,CAAA,MAAA,CAAO,UAAU,CAAC,CAAA,CAAE,KAAM,CAAA,GAAG,CAAC,CAAC,CAAA;AAAA;AACjF,KACK,MAAA;AACL,MAAW,QAAA,GAAA,SAAA;AAAA;AACb,GACK,MAAA;AACL,IAAA,IAAI,IAAM,EAAA;AACR,MAAW,QAAA,GAAA,SAAA;AAAA,KACN,MAAA;AACL,MAAW,QAAA,GAAA,CAAC,EAAE,CAAA;AAAA;AAChB;AAGF,EAAO,OAAA,QAAA;AACT;AAEgB,SAAA,SAAA,CAAU,KAAc,EAAA,QAAA,EAAkB,MAAuB,EAAA;AAC/E,EAAA,IAAI,CAAC,KAAA,EAAO,GAAG,IAAI,CAAI,GAAA,KAAA;AACvB,EAAI,IAAA,OAAA;AACJ,EAAI,IAAA,KAAA;AAGJ,EAAI,IAAA,KAAA,CAAM,CAAC,CAAA,GAAI,QAAU,EAAA;AACvB,IAAU,OAAA,GAAA,UAAA,CAAW,UAAU,KAAK,CAAA;AAEpC,IAAI,IAAA,KAAA,CAAM,OAAO,CAAA,GAAI,QAAU,EAAA;AAC7B,MAAA,OAAA,EAAA;AAAA;AACF;AAGF,EAAA,IAAI,KAAM,CAAA,KAAA,CAAM,MAAS,GAAA,CAAC,IAAI,MAAQ,EAAA;AACpC,IAAQ,KAAA,GAAA,UAAA,CAAW,QAAQ,KAAK,CAAA;AAEhC,IAAI,IAAA,KAAA,CAAM,KAAK,CAAA,GAAI,MAAQ,EAAA;AACzB,MAAA,KAAA,EAAA;AAAA;AACF;AAGF,EAAI,IAAA,OAAA,IAAW,IAAQ,IAAA,KAAA,IAAS,IAAM,EAAA;AACpC,IAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,CAAM,OAAW,IAAA,IAAA,GAAA,OAAA,GAAA,CAAA,EAAG,KAAK,CAAA;AACvC,IAAO,IAAA,GAAA,IAAA,CAAK,IAAI,CAAC,KAAA,KAAU,MAAM,KAAM,CAAA,OAAA,IAAA,IAAA,GAAA,OAAA,GAAW,CAAG,EAAA,KAAK,CAAC,CAAA;AAAA;AAG7D,EAAO,OAAA,CAAC,KAAO,EAAA,GAAG,IAAI,CAAA;AACxB;;ACxGA,IAAAA,IAAA,EAAAe,IAAA;AAIO,MAAe,gBAA8B,CAAA;AAAA,EAA7C,WAAA,GAAA;AAoGL;AAAA,IAAA,IAAA,CAACf,QAAsB,EAAC;AAAA;AAAA;AAAA,EA9FxB,CAAC,QAAyB,GAAA;AACxB,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,MAAM,MAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAClB;AACF,EAEA,GAAA,CAAI,OAAe,KAAgB,EAAA;AACjC,IAAM,MAAA,uBAAA;AAAA;AACR,EAEA,IAAI,KAAgB,EAAA;AAClB,IAAM,MAAA,uBAAA;AAAA;AACR,EAEA,QAAQ,IAAmB,EAAA;AACzB,IAAA,KAAA,MAAW,KAAK,IAAM,EAAA;AACpB,MAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAEZ,IAAA,OAAO,IAAK,CAAA,MAAA;AAAA;AACd;AAAA,EAGA,EAACe,IAAO,GAAA,MAAA,CAAA,QAAA,EAwEPf,IAAO,GAAA,MAAA,CAAA,WAAA,EAxEPe,MAAmB,GAAA;AAClB,IAAA,OAAO,KAAK,QAAS,EAAA;AAAA;AACvB,EAEA,QAAQ,QAA6D,EAAA;AACnE,IAAA,OAAO,UAAW,CAAA,IAAI,CAAE,CAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA;AAC1C,EAEA,IAAO,SAA2D,EAAA;AAChE,IAAA,OAAO,UAAW,CAAA,IAAI,CAAE,CAAA,GAAA,CAAI,SAAS,CAAA;AAAA;AACvC,EAEA,OAAO,SAAiE,EAAA;AACtE,IAAA,OAAO,UAAW,CAAA,IAAI,CAAE,CAAA,MAAA,CAAO,SAAS,CAAA;AAAA;AAC1C,EAEA,GAAG,KAA8B,EAAA;AAC/B,IAAO,OAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA;AACvB,EAEA,OAAe,GAAA;AACb,IAAA,MAAM,GAAM,GAAA,IAAI,KAAS,CAAA,IAAA,CAAK,MAAM,CAAA;AACpC,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA;AAAA;AAErB,IAAO,OAAA,GAAA;AAAA;AACT,EAEA,KAAK,SAAwC,EAAA;AAC3C,IAAA,OAAO,IAAK,CAAA,OAAA,EAAU,CAAA,IAAA,CAAK,SAAS,CAAA;AAAA;AACtC,EAEA,MAAc,GAAA;AACZ,IAAA,OAAO,KAAK,OAAQ,EAAA;AAAA;AACtB,EAQA,GAAqB,GAAA;AACnB,IAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA;AAAA;AAC3C,EAEA,UAAU,KAAuC,EAAA;AAC/C,IAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA;AAAA;AAC3C,EACA,OAAe,GAAA;AACb,IAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA;AAAA;AAC3C,EACA,KAAuB,GAAA;AACrB,IAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA;AAAA;AAC3C,EACA,KAAK,SAAwD,EAAA;AAC3D,IAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA;AAAA;AAC3C,EAEA,MAAA,CAAO,KAAe,EAAA,WAAA,EAAA,GAAwB,KAAiB,EAAA;AAC7D,IAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA;AAAA;AAC3C,EACA,WAAW,KAAoB,EAAA;AAC7B,IAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA;AAAA;AAC3C,EACA,IAAA,CAAK,KAAU,EAAA,KAAA,EAA4B,GAAgC,EAAA;AACzE,IAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA;AAAA;AAC3C,EACA,UAAA,CAAW,MAAgB,EAAA,KAAA,EAAe,GAAgC,EAAA;AACxE,IAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA;AAAA;AAC3C;AAAA;AAAA;AAAA,EAQA,KAAA,CAAM,OAA4B,GAA+B,EAAA;AAC/D,IAAA,OAAO,IAAK,CAAA,OAAA,EAAU,CAAA,KAAA,CAAM,OAAO,GAAG,CAAA;AAAA;AACxC,EACA,OAAA,CAAQ,eAAkB,SAAwC,EAAA;AAChE,IAAA,OAAO,IAAK,CAAA,OAAA,EAAU,CAAA,OAAA,CAAQ,eAAe,SAAS,CAAA;AAAA;AACxD,EACA,WAAA,CAAY,eAAkB,SAAwC,EAAA;AACpE,IAAA,OAAO,IAAK,CAAA,OAAA,EAAU,CAAA,WAAA,CAAY,eAAe,SAAS,CAAA;AAAA;AAC5D,EAGA,KAAA,CAAM,WAAgB,OAA4B,EAAA;AAChD,IAAA,OAAO,IAAK,CAAA,OAAA,EAAU,CAAA,KAAA,CAAM,WAAW,OAAO,CAAA;AAAA;AAChD,EACA,IAAA,CAAK,WAA6D,OAAwB,EAAA;AACxF,IAAA,OAAO,IAAK,CAAA,OAAA,EAAU,CAAA,IAAA,CAAK,WAAW,OAAO,CAAA;AAAA;AAC/C,EAIA,MAAA,CAAO,YAAqB,YAA2B,EAAA;AACrD,IAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA;AAAA;AAC3C,EAUA,WAAA,CAAY,YAAqB,YAA2B,EAAA;AAC1D,IAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA;AAAA;AAC3C,EAKA,IAAA,CAAK,WAA2D,OAA8B,EAAA;AAC5F,IAAA,OAAO,IAAK,CAAA,OAAA,EAAU,CAAA,IAAA,CAAK,WAAW,OAAO,CAAA;AAAA;AAC/C,EACA,SAAA,CAAU,WAA2D,OAAuB,EAAA;AAC1F,IAAA,OAAO,IAAK,CAAA,OAAA,EAAU,CAAA,SAAA,CAAU,WAAW,OAAO,CAAA;AAAA;AACpD,EACA,OAAyC,GAAA;AACvC,IAAO,OAAA,IAAA,CAAK,OAAQ,EAAA,CAAE,OAAQ,EAAA;AAAA;AAChC,EACA,IAAiC,GAAA;AAC/B,IAAO,OAAA,IAAA,CAAK,OAAQ,EAAA,CAAE,IAAK,EAAA;AAAA;AAC7B,EACA,MAA8B,GAAA;AAC5B,IAAO,OAAA,IAAA,CAAK,OAAQ,EAAA,CAAE,MAAO,EAAA;AAAA;AAC/B,EACA,QAAA,CAAS,eAAkB,SAAyC,EAAA;AAClE,IAAA,OAAO,IAAK,CAAA,OAAA,EAAU,CAAA,QAAA,CAAS,eAAe,SAAS,CAAA;AAAA;AACzD,EACA,OAAA,CACE,UACA,OACK,EAAA;AACL,IAAA,OAAO,IAAK,CAAA,OAAA,EAAU,CAAA,OAAA,CAAQ,UAAU,OAAO,CAAA;AAAA;AACjD,EACA,KAAuC,KAA+C,EAAA;AACpF,IAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA;AAAA;AAE7C;AAEA,MAAM,aAAoB,EAAC;AAOpB,SAAS,WAAc,MAA6B,EAAA;AACzD,EAAO,OAAA;AAAA,IACL,EAAE,MAAO,CAAA,QAAQ,CAAI,GAAA;AACnB,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AACtC,QAAM,MAAA,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA;AACpB,KACF;AAAA,IAEA,QAAQ,QAA6D,EAAA;AACnE,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AACtC,QAAA,QAAA,CAAS,MAAO,CAAA,GAAA,CAAI,CAAC,CAAA,EAAG,GAAG,UAAU,CAAA;AAAA;AACvC,KACF;AAAA,IAEA,IAAO,SAA2D,EAAA;AAChE,MAAA,MAAM,SAAc,EAAC;AACrB,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AACtC,QAAO,MAAA,CAAA,IAAA,CAAK,UAAU,MAAO,CAAA,GAAA,CAAI,CAAC,CAAG,EAAA,CAAA,EAAG,UAAU,CAAC,CAAA;AAAA;AAErD,MAAO,OAAA,MAAA;AAAA,KACT;AAAA;AAAA,IAGA,OAAO,SAAiE,EAAA;AACtE,MAAA,MAAM,SAAc,EAAC;AACrB,MAAA,IAAI,KAAQ,GAAA,CAAA;AACZ,MAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,QAAA,IAAI,SAAU,CAAA,GAAA,EAAK,KAAS,EAAA,EAAA,UAAU,CAAG,EAAA;AACvC,UAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AACjB;AAEF,MAAO,OAAA,MAAA;AAAA;AACT,GACF;AACF;;AC5MO,MAAM,sBAA8C,gBAAoB,CAAA;AAAA,EAO7E,YAAoB,IAAiB,EAAA;AACnC,IAAM,KAAA,EAAA;AADY,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AANpB,IAAA,IAAA,CAAQ,KAAQ,GAAA,CAAA;AAQd,IAAA,MAAM,MAAM,EAAC;AACb,IAAA,MAAM,SAAS,EAAC;AAEhB,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAC3C,MAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,MAAA,CAAO,CAAC,CAAA;AAC3B,MAAI,IAAA,CAAC,MAAM,IAAM,EAAA;AACf,QAAA;AAAA;AAGF,MAAO,MAAA,CAAA,KAAA,CAAM,IAAI,CAAI,GAAA,KAAA;AACrB,MAAA,MAAM,SAAS,MAAM,KAAA,CAAM,MAAO,CAAA,GAAA,CAAI,KAAK,KAAK,CAAA;AAEhD,MAAA,IAAI,CAAC,GAAA,CAAI,cAAe,CAAA,KAAA,CAAM,IAAI,CAAG,EAAA;AACnC,QAAO,MAAA,CAAA,cAAA,CAAe,GAAK,EAAA,KAAA,CAAM,IAAM,EAAA;AAAA,UACrC,UAAY,EAAA,IAAA;AAAA;AAAA,UACZ,GAAK,EAAA;AAAA,SACN,CAAA;AAAA;AAGH,MAAA,IAAI,CAAC,GAAI,CAAA,cAAA,CAAe,CAAE,CAAA,QAAA,EAAU,CAAG,EAAA;AACrC,QAAO,MAAA,CAAA,cAAA,CAAe,KAAK,CAAG,EAAA;AAAA,UAC5B,UAAY,EAAA,KAAA;AAAA;AAAA,UACZ,GAAK,EAAA;AAAA,SACN,CAAA;AAAA;AACH;AAGF,IAAA,IAAA,CAAK,GAAM,GAAA,GAAA;AACX,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AAAA;AAChB,EAEA,IAAI,SAAY,GAAA;AACd,IAAA,OAAO,IAAK,CAAA,IAAA;AAAA;AACd,EAEA,IAAI,MAAS,GAAA;AACX,IAAA,OAAO,KAAK,IAAK,CAAA,MAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA,EAMA,yBAAyB,QAAgD,EAAA;AACvE,IAAA,IAAI,CAAC,IAAK,CAAA,SAAA,IAAa,CAAC,IAAA,CAAK,UAAU,MAAQ,EAAA;AAC7C,MAAO,OAAA,KAAA,CAAA;AAAA;AAGT,IAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,SAAU,CAAA,MAAA,CAAO,QAAQ,CAAA;AAE5C,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,OAAS,EAAA;AAC5B,MAAO,OAAA,KAAA,CAAA;AAAA;AAGT,IAAA,OAAO,KAAM,CAAA,OAAA;AAAA;AACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,IAAI,GAAa,EAAA;AACf,IAAA,IAAA,CAAK,KAAQ,GAAA,GAAA;AACb,IAAA,OAAO,IAAK,CAAA,GAAA;AAAA;AACd,EAEA,OAAe,GAAA;AACb,IAAA,OAAO,IAAI,KAAM,CAAA,IAAA,CAAK,KAAK,MAAM,CAAA,CAC9B,KAAK,CAAC,CAAA,CACN,IAAI,CAAC,CAAA,EAAG,OAAO,EAAE,GAAG,KAAK,GAAI,CAAA,CAAC,GAAI,CAAA,CAAA;AAAA;AAEzC;;ACtGO,MAAM,UAAW,CAAA;AAAA,EAMtB,YAAY,IAAiB,EAAA;AAL7B,IAAA,IAAA,CAAA,MAAA,GAA2B,EAAC;AAE5B,IAAA,IAAA,CAAQ,cAAiD,EAAC;AAC1D,IAAA,IAAA,CAAQ,cAAmD,EAAC;AAG1D,IAAA,IAAA,CAAK,SAAS,IAAK,CAAA,MAAA,CAAO,GAAI,CAAA,CAAC,OAAO,GAAS,MAAA;AAAA,MAC7C,GAAG,KAAA;AAAA,MACH,KAAO,EAAA;AAAA,KACP,CAAA,CAAA;AAEF,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAC3C,MAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,MAAA,CAAO,CAAC,CAAA;AAE3B,MAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,KAAO,EAAA;AAClC,QAAM,MAAA,CAAA,GAAI,uBAAuB,KAAK,CAAA;AACtC,QAAA,IAAI,CAAG,EAAA;AACL,UAAA,KAAA,CAAM,IAAO,GAAA,CAAA;AAAA;AACf;AAEF,MAAA,IAAI,CAAC,IAAA,CAAK,WAAY,CAAA,KAAA,CAAM,IAAI,CAAG,EAAA;AACjC,QAAA,IAAA,CAAK,WAAY,CAAA,KAAA,CAAM,IAAI,CAAA,GAAI,EAAC;AAAA;AAElC,MAAA,IAAA,CAAK,WAAY,CAAA,KAAA,CAAM,IAAI,CAAA,CAAE,IAAK,CAAA;AAAA,QAChC,GAAG,KAAA;AAAA,QACH,KAAO,EAAA;AAAA,OACR,CAAA;AAED,MAAA,IAAI,IAAK,CAAA,WAAA,CAAY,KAAM,CAAA,IAAI,CAAG,EAAA;AAChC,QAAQ,OAAA,CAAA,IAAA,CAAK,sCAAwC,EAAA,KAAA,CAAM,IAAI,CAAA;AAAA,OAC1D,MAAA;AACL,QAAK,IAAA,CAAA,WAAA,CAAY,MAAM,IAAI,CAAA,GAAI,EAAE,GAAG,KAAA,EAAO,OAAO,CAAE,EAAA;AAAA;AACtD;AACF;AACF,EAEA,UAAU,IAAoC,EAAA;AAC5C,IAAA,IAAI,CAAC,IAAM,EAAA;AACT,MAAO,OAAA,CAAC,GAAG,IAAA,CAAK,MAAM,CAAA;AAAA;AAExB,IAAM,MAAA,MAAA,GAAS,IAAK,CAAA,WAAA,CAAY,IAAI,CAAA;AACpC,IAAA,IAAI,MAAQ,EAAA;AACV,MAAO,OAAA,CAAC,GAAG,MAAM,CAAA;AAAA;AAEnB,IAAA,OAAO,EAAC;AAAA;AACV,EAEA,eAAe,IAA0B,EAAA;AACvC,IAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,WAAA,CAAY,IAAI,CAAA;AACnC,IAAO,OAAA,KAAA,IAAS,MAAM,MAAS,GAAA,CAAA;AAAA;AACjC,EAEA,mBAAA,CAAoB,IAAiB,EAAA,aAAA,GAAgB,KAAmC,EAAA;AACtF,IAAM,MAAA,MAAA,GAAS,IAAK,CAAA,WAAA,CAAY,IAAI,CAAA;AACpC,IAAA,MAAM,UAAa,GAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,IAAK,CAAA,CAAC,KAAO,KAAA;AA/D5C,MAAA,IAAA,EAAA;AA+D+C,MAAA,OAAA,aAAA,IAAiB,EAAC,CAAA,EAAA,GAAA,KAAA,CAAM,MAAO,CAAA,MAAA,KAAb,IAAqB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAA;AAAA,KAAA,CAAA;AAClF,IAAO,OAAA,UAAA;AAAA;AACT,EAEA,cAAc,IAAuB,EAAA;AACnC,IAAA,OAAO,CAAC,CAAC,IAAK,CAAA,WAAA,CAAY,IAAI,CAAA;AAAA;AAChC,EAEA,uBAAA,CAAwB,MAAc,IAA0B,EAAA;AAC9D,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,WAAY,CAAA,IAAI,KAAK,IAAK,CAAA,WAAA,CAAY,IAAI,CAAA,CAAE,OAAO,CAAC,KAAA,KAAU,MAAM,IAAS,KAAA,IAAI,EAAE,MAAS,GAAA,CAAA;AAAA;AAC5G;AAAA;AAAA;AAAA,EAKA,eAAe,IAA0C,EAAA;AACvD,IAAO,OAAA,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA;AAC9B;AAAA;AAAA;AAAA,EAKA,gBAAA,CAAiB,OAAe,KAAiC,EAAA;AAC/D,IAAA,OAAO,OAAO,MAAO,CAAA,IAAA,CAAK,WAAW,CAAE,CAAA,MAAA,CAAO,CAAC,CAAM,KAAA;AACnD,MAAA,OAAO,CAAE,CAAA,MAAA,IAAU,CAAE,CAAA,MAAA,CAAO,KAAK,CAAM,KAAA,KAAA;AAAA,KACxC,CAAA;AAAA;AAEL;;ACvFgB,SAAA,eAAA,CAAgB,OAAgB,KAAc,EAAA;AAC5D,EAAI,IAAA,CAAC,MAAM,IAAM,EAAA;AACf,IAAA,IAAI,KAAM,CAAA,IAAA,KAAS,MAAU,IAAA,KAAA,CAAM,SAAS,MAAQ,EAAA;AAClD,MAAA,KAAA,CAAM,OAAO,SAAU,CAAA,IAAA;AAAA,KAClB,MAAA;AACL,MAAM,KAAA,CAAA,IAAA,GAAO,wBAAwB,KAAK,CAAA;AAAA;AAC5C;AAGF,EAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,MAAQ,EAAA;AACnC,IAAA,OAAO,CAACC,MAAkB,KAAA;AACxB,MAAA,OAAO,WAAWA,MAAK,CAAA;AAAA,KACzB;AAAA;AAIF,EAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,OAAS,EAAA;AACpC,IAAA,OAAO,CAACA,MAAkB,KAAA;AACxB,MAAO,OAAA,EAAEA,MAAM,CAAA,CAAC,CAAM,KAAA,GAAA,IAAOA,MAAM,CAAA,CAAC,CAAM,KAAA,GAAA,IAAOA,MAAM,CAAA,CAAC,CAAM,KAAA,GAAA,CAAA;AAAA,KAChE;AAAA;AAIF,EAAA,OAAO,CAACA,MAAkBA,KAAAA,MAAAA;AAC5B;;ACZO,MAAM,aAAgB,GAAA,KAAA;AAOtB,MAAM,yBAAkC,gBAAyC,CAAA;AAAA,EAStF,WAAA,CAAY,QAAmC,OAAgC,EAAA;AAC7E,IAAM,KAAA,EAAA;AANR,IAAA,IAAA,CAAA,MAAA,GAAyB,EAAC;AAE1B,IAAA,IAAA,CAAQ,QAAe,EAAC;AA2HxB,IAAA,IAAA,CAAQ,OAAsD,GAAA,KAAA,CAAA;AApH5D,IAAA,IAAA,CAAK,OAAU,GAAA,OAAA,GACX,OACA,GAAA,CAAC,MAAmB,KAAA;AAClB,MAAA,OAAO,0BAAU,EAAC;AAAA,KACpB;AAGJ,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,MAAM,EAAE,IAAA,EAAM,KAAO,EAAA,IAAA,EAAM,QAAW,GAAA,MAAA;AACtC,MAAA,IAAI,IAAM,EAAA;AACR,QAAA,IAAA,CAAK,IAAO,GAAA,IAAA;AAAA;AAEd,MAAA,IAAI,KAAO,EAAA;AACT,QAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA;AAEf,MAAA,IAAI,IAAM,EAAA;AACR,QAAA,IAAA,CAAK,IAAO,GAAA,IAAA;AAAA;AAEd,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,KAAA,MAAW,KAAK,MAAQ,EAAA;AACtB,UAAA,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA;AACjB;AACF;AAIF,IAAO,MAAA,CAAA,cAAA,CAAe,MAAM,QAAU,EAAA;AAAA,MACpC,UAAY,EAAA,IAAA;AAAA,MACZ,KAAK,MAAM;AACT,QAAA,OAAO,KAAK,KAAM,CAAA,MAAA;AAAA;AACpB,KACD,CAAA;AAAA;AACH;AAAA,EAGA,IAAI,MAAS,GAAA;AACX,IAAA,OAAO,KAAK,KAAM,CAAA,MAAA;AAAA;AACpB,EAEA,WAAA,CAAY,OAAgB,IAAsB,EAAA;AAChD,IAAA,OAAO,KAAK,QAAS,CAAA;AAAA,MACnB,MAAM,IAAQ,IAAA,EAAA;AAAA;AAAA,MACd,IAAA,EAAM,wBAAwB,KAAK;AAAA,KACpC,CAAA;AAAA;AACH,EAEA,QAAA,CAAS,GAAqB,WAA6B,EAAA;AACzD,IAAA,IAAI,MAA4B,GAAA,KAAA,CAAA;AAEhC,IAAA,IAAI,EAAE,MAAQ,EAAA;AACZ,MAAA,MAAA,GAAS,CAAE,CAAA,MAAA;AAAA;AAGb,IAAA,IAAI,OAAO,CAAE,CAAA,IAAA;AAEb,IAAA,IAAI,CAAC,IAAS,KAAA,MAAA,KAAW,EAAE,IAAQ,IAAA,MAAA,KAAW,EAAE,IAAO,CAAA,EAAA;AACrD,MAAA,IAAA,GAAO,SAAU,CAAA,IAAA;AAAA,KACZ,MAAA;AACL,MAAA,IAAI,CAAC,IAAA,IAAQ,MAAU,IAAA,MAAA,CAAO,MAAQ,EAAA;AACpC,QAAO,IAAA,GAAA,uBAAA,CAAwB,MAAO,CAAA,CAAC,CAAC,CAAA;AAAA;AAE1C,MAAA,IAAI,CAAC,IAAM,EAAA;AACT,QAAA,IAAA,GAAO,SAAU,CAAA,KAAA;AAAA;AACnB;AAIF,IAAA,IAAI,OAAO,CAAE,CAAA,IAAA;AACb,IAAA,IAAI,CAAC,IAAM,EAAA;AACT,MAAA,IAAA,GAAO,CAAS,MAAA,EAAA,IAAA,CAAK,MAAO,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AAAA;AAGxC,IAAA,MAAM,KAAe,GAAA;AAAA,MACnB,GAAG,CAAA;AAAA,MACH,IAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAA,EAAQ,CAAE,CAAA,MAAA,IAAU,EAAC;AAAA,MACrB,MAAA,EAAQ,IAAK,CAAA,OAAA,CAAQ,MAAM;AAAA,KAC7B;AAEA,IAAI,IAAA,IAAA,KAAS,UAAU,KAAO,EAAA;AAC5B,MAAA,IAAA,GAAO,uBAAuB,KAAK,CAAA;AACnC,MAAA,IAAI,IAAM,EAAA;AACR,QAAA,KAAA,CAAM,IAAO,GAAA,IAAA;AAAA;AACf;AAGF,IAAK,IAAA,CAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACtB,IAAA,IAAA,CAAK,KAAQ,GAAA,IAAA,CAAK,MAAO,CAAA,CAAC,CAAE,CAAA,MAAA;AAG5B,IAAA,IAAI,WAAa,EAAA;AACf,MAAO,OAAA,KAAA,CAAM,MAAO,CAAA,MAAA,GAAS,WAAa,EAAA;AACxC,QAAM,KAAA,CAAA,MAAA,CAAO,KAAK,aAAa,CAAA;AAAA;AACjC,KACK,MAAA;AACL,MAAA,IAAA,CAAK,QAAS,EAAA;AAAA;AAGhB,IAAO,OAAA,KAAA;AAAA;AACT,EAEA,QAAW,GAAA;AAET,IAAA,MAAM,SAAS,IAAK,CAAA,MAAA,CAAO,MAAO,CAAA,CAAC,GAAW,CAAM,KAAA;AAClD,MAAA,OAAO,IAAK,CAAA,GAAA,CAAI,CAAG,EAAA,CAAA,CAAE,OAAO,MAAM,CAAA;AAAA,OACjC,CAAC,CAAA;AAGJ,IAAW,KAAA,MAAA,KAAA,IAAS,KAAK,MAAQ,EAAA;AAC/B,MAAO,OAAA,KAAA,CAAM,MAAO,CAAA,MAAA,KAAW,MAAQ,EAAA;AACrC,QAAM,KAAA,CAAA,MAAA,CAAO,KAAK,aAAa,CAAA;AAAA;AACjC;AACF;AACF;AAAA;AAAA;AAAA,EAOA,SAAA,CAAU,OAAc,MAA4B,EAAA;AAClD,IAAI,IAAA,CAAC,KAAK,OAAS,EAAA;AACjB,MAAK,IAAA,CAAA,OAAA,uBAAc,GAA+B,EAAA;AAAA;AAEpD,IAAK,IAAA,CAAA,OAAA,CAAQ,GAAI,CAAA,KAAA,EAAO,MAAM,CAAA;AAC9B,IAAO,OAAA,MAAA;AAAA;AACT,EAEQ,UAAA,CAAW,OAAc,CAAW,EAAA;AApK9C,IAAA,IAAA,EAAA;AAqKI,IAAA,IAAI,CAAI,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,OAAL,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAc,GAAI,CAAA,KAAA,CAAA;AAC1B,IAAA,IAAI,CAAC,CAAG,EAAA;AACN,MAAA,CAAA,GAAI,KAAK,SAAU,CAAA,KAAA,EAAO,eAAgB,CAAA,CAAA,EAAG,KAAK,CAAC,CAAA;AAAA;AAErD,IAAA,OAAO,EAAE,CAAC,CAAA;AAAA;AACZ;AAAA;AAAA;AAAA,EAKA,UAAU,GAAgB,EAAA;AAExB,IAAA,KAAA,IAAS,IAAI,IAAK,CAAA,MAAA,CAAO,QAAQ,CAAI,GAAA,GAAA,CAAI,QAAQ,CAAK,EAAA,EAAA;AACpD,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,IAAA,EAAM,CAAS,MAAA,EAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAAA,QACpB,IAAM,EAAA,uBAAA,CAAwB,GAAI,CAAA,CAAC,CAAC;AAAA,OACrC,CAAA;AAAA;AAIH,IAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,MAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAC3C,QAAM,MAAA,CAAA,GAAI,IAAK,CAAA,MAAA,CAAO,CAAC,CAAA;AACvB,QAAA,IAAI,CAAC,CAAE,CAAA,IAAA,IAAQ,CAAE,CAAA,IAAA,KAAS,UAAU,KAAO,EAAA;AACzC,UAAA,CAAA,CAAE,IAAO,GAAA,uBAAA,CAAwB,GAAI,CAAA,CAAC,CAAC,CAAA;AAAA;AACzC;AACF;AAGF,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAC3C,MAAM,MAAA,CAAA,GAAI,IAAK,CAAA,MAAA,CAAO,CAAC,CAAA;AACvB,MAAI,IAAA,CAAA,GAAI,IAAI,CAAC,CAAA;AACb,MAAA,IAAI,EAAE,IAAS,KAAA,SAAA,CAAU,MAAU,IAAAb,eAAA,CAAS,CAAC,CAAG,EAAA;AAC9C,QAAI,CAAA,GAAA,IAAA,CAAK,UAAW,CAAA,CAAA,EAAG,CAAC,CAAA;AAAA;AAE1B,MAAE,CAAA,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA;AACjB;AACF;AAAA,EAGA,QAAQ,IAAmB,EAAA;AACzB,IAAA,KAAA,MAAW,KAAK,IAAM,EAAA;AACpB,MAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAEZ,IAAA,OAAO,IAAK,CAAA,MAAA;AAAA;AACd,EAEA,OAAU,GAAA;AACR,IAAW,KAAA,MAAA,KAAA,IAAS,KAAK,MAAQ,EAAA;AAC/B,MAAA,KAAA,CAAM,OAAO,OAAQ,EAAA;AAAA;AAEvB,IAAO,OAAA,IAAA;AAAA;AACT;AAAA;AAAA;AAAA,EAKA,IAAI,KAAgB,EAAA;AAElB,IAAA,MAAM,GAAM,GAAA,KAAA;AACZ,IAAW,KAAA,MAAA,KAAA,IAAS,KAAK,MAAQ,EAAA;AAC/B,MAAI,IAAA,GAAA,GAAM,GAAI,CAAA,KAAA,CAAM,IAAI,CAAA;AAExB,MAAA,IAAI,MAAM,IAAS,KAAA,SAAA,CAAU,MAAU,IAAAA,eAAA,CAAS,GAAG,CAAG,EAAA;AACpD,QAAM,GAAA,GAAA,IAAA,CAAK,UAAW,CAAA,KAAA,EAAO,GAAG,CAAA;AAAA;AAGlC,MAAA,IAAI,QAAQ,KAAW,CAAA,EAAA;AACrB,QAAM,GAAA,GAAA,aAAA;AAAA;AAGR,MAAM,KAAA,CAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA;AACvB;AACF,EAEA,GAAA,CAAI,OAAe,KAAU,EAAA;AAC3B,IAAI,IAAA,KAAA,GAAQ,KAAK,MAAQ,EAAA;AACvB,MAAM,MAAA,IAAI,MAAM,2CAA2C,CAAA;AAAA;AAG7D,IAAM,MAAA,GAAA,GAAO,SAAqC,EAAC;AACnD,IAAW,KAAA,MAAA,KAAA,IAAS,KAAK,MAAQ,EAAA;AAC/B,MAAA,KAAA,CAAM,MAAO,CAAA,KAAK,CAAI,GAAA,GAAA,CAAI,MAAM,IAAI,CAAA;AAAA;AACtC;AACF;AAAA;AAAA;AAAA,EAKA,IAAI,GAAgB,EAAA;AAClB,IAAA,MAAM,IAA6B,EAAC;AACpC,IAAW,KAAA,MAAA,KAAA,IAAS,KAAK,MAAQ,EAAA;AAC/B,MAAA,CAAA,CAAE,KAAM,CAAA,IAAI,CAAI,GAAA,KAAA,CAAM,OAAO,GAAG,CAAA;AAAA;AAElC,IAAO,OAAA,CAAA;AAAA;AACT;AAAA;AAAA;AAAA,EAKA,MAAS,GAAA;AACP,IAAA,OAAO,eAAe,IAAI,CAAA;AAAA;AAE9B;;AC5Pa,MAAA,eAAA,GAAkB,CAAI,IAAA,EAAc,OAA2C,KAAA;AAC1F,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA;AAAA,GACF;AACF;AAEa,MAAA,uBAAA,GAA0B,CAAI,SAA4B,KAAA;AACrE,EAAA,OAAO,SAAU,CAAA,OAAA;AACnB;AACa,MAAA,sBAAA,GAAyB,CAAI,SAAA,EAAyB,MAAmB,KAAA;AACpF,EAAO,OAAA,SAAA,CAAU,QAAQ,MAAM,CAAA;AACjC;AAEO,MAAM,qBAAwB,GAAA,CAAI,SAAyB,EAAA,MAAA,EAAgB,GAAgB,KAAA;AAChG,EAAA,OAAO,SAAU,CAAA,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAO,GAAG,CAAA;AAC7C;AAEO,MAAM,yBAA4B,GAAA,CAAI,SAAyB,EAAA,MAAA,EAAgB,GAAgB,KAAA;AACpG,EAAO,OAAA,SAAA,CAAU,QAAQ,GAAI,CAAA,CAAC,MAAM,CAAE,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA;AACnD;AAEO,MAAM,kBAAqB,GAAA,CAAI,UAA2B,EAAA,IAAA,KAAiB,WAAW,IAAI;;AClCjG,MAAM,oBAAuB,GAAA,GAAA;AAEtB,SAAS,kBAAkB,KAAkB,EAAA;AAElD,EAAI,IAAA,KAAA,CAAM,MAAO,CAAA,MAAA,GAAS,CAAG,EAAA;AAC3B,IAAO,OAAA,KAAA;AAAA;AAIT,EAAM,MAAA,WAAA,GAAc,MAAM,MAAO,CAAA,IAAA,CAAK,CAAC,KAAU,KAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,MAAM,CAAA;AAMhF,EAAA,IAAI,cAAiB,GAAA,KAAA;AACrB,EAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,IAAI,IAAA,iBAAA,CAAkB,KAAK,CAAG,EAAA;AAC5B,MAAiB,cAAA,GAAA,IAAA;AACjB,MAAA;AAAA;AACF;AAGF,EAAA,OAAO,kBAAkB,WAAgB,KAAA,KAAA,CAAA;AAC3C;AAEO,SAAS,mBAAmB,IAAmB,EAAA;AACpD,EAAO,OAAA,CAAC,KAAK,IAAK,CAAA,CAAC,UAAU,CAAC,iBAAA,CAAkB,KAAK,CAAC,CAAA;AACxD;AAUO,SAAS,kBAAkB,KAAc,EAAA;AAC9C,EAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,IAAM,EAAA;AACjC,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,IAAI,YAA8B,GAAA,IAAA;AAClC,EAAA,IAAI,aAAa,KAAM,CAAA,MAAA,CAAO,SAAS,oBAAuB,GAAA,oBAAA,GAAuB,MAAM,MAAO,CAAA,MAAA;AAGlG,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,UAAA,EAAY,CAAK,EAAA,EAAA;AACnC,IAAM,MAAA,IAAA,GAAO,KAAM,CAAA,MAAA,CAAO,CAAC,CAAA;AAK3B,IAAA,IAAI,YAAiB,KAAA,IAAA,IAAS,IAAS,KAAA,IAAA,IAAQ,OAAO,YAAe,EAAA;AACnE,MAAe,YAAA,GAAA,IAAA;AAAA,KACV,MAAA;AACL,MAAO,OAAA,KAAA;AAAA;AACT;AAGF,EAAO,OAAA,IAAA;AACT;AAMO,SAAS,uBAAuB,IAAmB,EAAA;AACxD,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,IAAA,MAAM,SAAY,GAAA,YAAA,CAAa,IAAK,CAAA,CAAC,CAAC,CAAA;AACtC,IAAA,IAAI,SAAU,CAAA,SAAA,KAAc,KAAa,CAAA,IAAA,SAAA,CAAU,cAAc,KAAW,CAAA,EAAA;AAC1E,MAAO,OAAA,IAAA;AAAA;AACT;AAEF,EAAO,OAAA,KAAA;AACT;AAMO,SAAS,aAAa,IAA0B,EAAA;AACrD,EAAO,OAAA,IAAA,CAAK,OAAO,IAAK,CAAA,CAAC,UAAU,KAAM,CAAA,IAAA,KAAS,UAAU,IAAI,CAAA;AAClE;AAOgB,SAAA,cAAA,CAAe,WAAsB,QAAkB,EAAA;AA9FvE,EAAA,IAAA,EAAA;AA+FE,EAAA,IAAA,CAAA,CAAI,EAAU,GAAA,SAAA,CAAA,IAAA,KAAV,IAAgB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,iBAAA,MAAsB,KAAW,CAAA,EAAA;AACnD,IAAO,OAAA,KAAA,CAAA;AAAA;AAET,EAAA,OAAO,SAAU,CAAA,IAAA,CAAK,iBAAkB,CAAA,GAAA,CAAI,CAAC,UAAe,KAAA,SAAA,CAAU,MAAO,CAAA,UAAU,EAAE,MAAO,CAAA,QAAQ,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AACrH;AAQgB,SAAA,MAAA,CAAO,WAAsB,GAA0C,EAAA;AACrF,EAAA,IAAI,eAAe,KAAO,EAAA;AACxB,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,GAAA,CAAI,QAAQ,CAAK,EAAA,EAAA;AACnC,MAAA,SAAA,CAAU,OAAO,CAAC,CAAA,CAAE,OAAO,IAAK,CAAA,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA;AACxC,GACK,MAAA;AACL,IAAW,KAAA,MAAA,KAAA,IAAS,UAAU,MAAQ,EAAA;AACpC,MAAA,KAAA,CAAM,MAAO,CAAA,IAAA,CAAK,GAAI,CAAA,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA;AACnC;AAEF,EAAI,IAAA;AACF,IAAU,SAAA,CAAA,MAAA,EAAA;AAAA,WACH,CAAG,EAAA;AAAA;AAKd;;AC9GgB,SAAA,0BAAA,CAA2B,CAAc,EAAA,CAAA,EAAc,UAA+B,EAAA;AAdtG,EAAA,IAAA,EAAA,EAAA,EAAA;AAeE,EAAA,IAAI,MAAM,CAAG,EAAA;AACX,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,IAAA,CAAA,CAAI,4BAAG,MAAH,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAW,cAAW,EAAG,GAAA,CAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,KAAH,mBAAW,MAAQ,CAAA,EAAA;AAC3C,IAAO,OAAA,KAAA;AAAA;AAGT,EAAI,IAAA,CAAA,CAAE,IAAS,KAAA,CAAA,CAAE,IAAM,EAAA;AACrB,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,CAAE,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AACxC,IAAM,MAAA,EAAA,GAAK,CAAE,CAAA,MAAA,CAAO,CAAC,CAAA;AACrB,IAAM,MAAA,EAAA,GAAK,CAAE,CAAA,MAAA,CAAO,CAAC,CAAA;AAErB,IAAA,IAAI,GAAG,IAAS,KAAA,EAAA,CAAG,QAAQ,EAAG,CAAA,IAAA,KAAS,GAAG,IAAM,EAAA;AAC9C,MAAO,OAAA,KAAA;AAAA;AAIT,IAAA,IAAI,UAAY,EAAA;AACd,MAAA;AAAA;AAIF,IAAI,IAAA,EAAA,CAAG,MAAU,IAAA,EAAA,CAAG,MAAU,IAAA,CAAC,eAAe,EAAG,CAAA,MAAA,EAAQ,EAAG,CAAA,MAAM,CAAG,EAAA;AACnE,MAAO,OAAA,KAAA;AAAA;AAGT,IAAA,MAAM,OAAO,EAAG,CAAA,MAAA;AAChB,IAAA,MAAM,OAAO,EAAG,CAAA,MAAA;AAEhB,IAAI,IAAA,MAAA,CAAO,KAAK,IAAI,CAAA,CAAE,WAAW,MAAO,CAAA,IAAA,CAAK,IAAI,CAAA,CAAE,MAAQ,EAAA;AACzD,MAAO,OAAA,KAAA;AAAA;AAGT,IAAI,IAAA,GAAA;AACJ,IAAA,KAAK,OAAO,IAAM,EAAA;AAChB,MAAI,IAAA,EAAE,OAAO,IAAO,CAAA,EAAA;AAClB,QAAO,OAAA,KAAA;AAAA;AAGT,MAAA,IAAI,QAAQ,UAAY,EAAA;AACtB,QAAA;AAAA;AAIF,MAAI,IAAA,CAACc,eAAQ,IAAK,CAAA,GAAG,GAAG,IAAK,CAAA,GAAG,CAAC,CAAG,EAAA;AAClC,QAAO,OAAA,KAAA;AAAA;AACT;AACF;AAGF,EAAO,OAAA,IAAA;AACT;AAOgB,SAAA,kBAAA,CAAsB,CAAQ,EAAA,CAAA,EAAQ,GAA8B,EAAA;AAClF,EAAA,IAAI,MAAM,CAAG,EAAA;AACX,IAAO,OAAA,IAAA;AAAA;AAET,EAAI,IAAA,CAAA,CAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAG,MAAW,OAAA,CAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAG,MAAQ,CAAA,EAAA;AAC3B,IAAO,OAAA,KAAA;AAAA;AAET,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,CAAE,QAAQ,CAAK,EAAA,EAAA;AACjC,IAAI,IAAA,CAAC,IAAI,CAAE,CAAA,CAAC,GAAG,CAAE,CAAA,CAAC,CAAC,CAAG,EAAA;AACpB,MAAO,OAAA,KAAA;AAAA;AACT;AAEF,EAAO,OAAA,IAAA;AACT;AAIA,MAAM,UAAkB,GAAA,CAAC,CAAG,EAAA,CAAA,KAAM,CAAM,KAAA,CAAA;AAOjC,SAAS,cAA6B,CAAA,CAAA,EAAM,CAAM,EAAA,GAAA,GAAW,UAAY,EAAA;AAC9E,EAAA,IAAI,MAAM,CAAG,EAAA;AACX,IAAO,OAAA,IAAA;AAAA;AAGT,EAAI,IAAA,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,WAAW,MAAO,CAAA,IAAA,CAAK,CAAC,CAAA,CAAE,MAAQ,EAAA;AACnD,IAAO,OAAA,KAAA;AAAA;AAGT,EAAI,IAAA,GAAA;AACJ,EAAA,KAAK,OAAO,CAAG,EAAA;AACb,IAAI,IAAA,CAAC,IAAI,CAAE,CAAA,GAAG,GAAG,CAAE,CAAA,GAAG,CAAC,CAAG,EAAA;AACxB,MAAO,OAAA,KAAA;AAAA;AACT;AAGF,EAAO,OAAA,IAAA;AACT;;ACjHa,MAAA,YAAA,GAAe,CAAC,OAAiC,KAAA;AAC5D,EAAS,KAAA,IAAA,GAAA,GAAM,KAAK,GAAO,EAAA,EAAA;AACzB,IAAM,MAAA,KAAA,GAAQ,SAAS,GAAG,CAAA;AAC1B,IAAI,IAAA,CAAC,QAAQ,IAAK,CAAA,CAAC,UAAU,KAAM,CAAA,KAAA,KAAU,KAAK,CAAG,EAAA;AACnD,MAAO,OAAA,KAAA;AAAA;AACT;AAEJ;AAEA,SAAS,SAAS,GAAqB,EAAA;AACrC,EAAA,MAAM,OAAU,GAAA,4BAAA;AAEhB,EAAI,IAAA,GAAA,GAAM,QAAQ,MAAQ,EAAA;AACxB,IAAA,OAAO,QAAQ,GAAG,CAAA;AAAA,GACb,MAAA;AACL,IAAA,OAAO,QAAS,CAAA,IAAA,CAAK,KAAM,CAAA,GAAA,GAAM,OAAQ,CAAA,MAAM,CAAI,GAAA,CAAC,CAAI,GAAA,OAAA,CAAQ,GAAM,GAAA,OAAA,CAAQ,MAAM,CAAA;AAAA;AAExF;;ACXO,SAAS,yBAA0B,CAAA;AAAA,EACxC,WAAA;AAAA,EACA;AACF,CAGG,EAAA;AACD,EAAA,MAAM,SAAsB,EAAC;AAC7B,EAAA,KAAA,MAAW,QAAQ,WAAa,EAAA;AAC9B,IAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,MAAA,MAAA,CAAO,IAAK,CAAA,GAAG,iBAAkB,CAAA,eAAA,EAAiB,IAAI,CAAC,CAAA;AAAA;AACzD;AAEF,EAAO,OAAA,MAAA;AACT;AAEA,MAAM,WAAA,GAAc,CAAC,MAA2B,KAAA;AAC9C,EAAO,OAAA,MAAA,CAAO,OAAQ,CAAA,0BAAA,EAA4B,EAAE,CAAA;AACtD,CAAA;AAKgB,SAAA,iBAAA,CAAkB,UAAkB,MAA6B,EAAA;AAE/E,EAAI,IAAA,CAAC,QAAY,IAAA,CAAC,MAAQ,EAAA;AACxB,IAAA,OAAO,EAAC;AAAA;AAGV,EAAA,MAAM,UAAuB,EAAC;AAC9B,EAAA,MAAM,EAAE,OAAS,EAAA,KAAA,KAAU,UAAW,CAAA,WAAA,CAAY,MAAM,CAAC,CAAA;AACzD,EAAI,IAAA,MAAA;AAEJ,EAAI,IAAA;AACF,IAAA,MAAA,GAAS,IAAI,MAAA,CAAO,CAAM,GAAA,EAAA,OAAO,KAAK,KAAK,CAAA;AAAA,WACpC,KAAO,EAAA;AACd,IAAO,OAAA,OAAA;AAAA;AAGT,EAAA,QAAA,CAAS,OAAQ,CAAA,MAAA,EAAQ,CAAC,SAAA,EAAA,GAAc,IAAS,KAAA;AAC/C,IAAA,IAAI,SAAW,EAAA;AACb,MAAA,MAAM,MAAS,GAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAC,CAAA;AACnC,MAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,QACX,IAAM,EAAA,SAAA;AAAA,QACN,KAAO,EAAA,MAAA;AAAA,QACP,QAAQ,SAAU,CAAA,MAAA;AAAA,QAClB,GAAA,EAAK,SAAS,SAAU,CAAA;AAAA,OACzB,CAAA;AAAA;AAEH,IAAO,OAAA,EAAA;AAAA,GACR,CAAA;AAED,EAAO,OAAA,OAAA;AACT;AAEA,MAAM,UAAa,GAAA,GAAA;AACnB,MAAM,YAAe,GAAA,kBAAA;AAKd,SAAS,WAAW,IAAkD,EAAA;AAC3E,EAAA,MAAM,KAAqB,mBAAA,IAAI,GAAI,CAAA,CAAC,GAAG,CAAC,CAAA;AAExC,EAAA,MAAM,UAAU,IAAK,CAAA,OAAA,CAAQ,YAAc,EAAA,CAAC,KAAK,KAAU,KAAA;AACzD,IAAM,MAAA,QAAA,GAAW,KAAM,CAAA,UAAA,CAAW,UAAU,CAAA;AAE5C,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,KAAM,CAAA,MAAA,EAAQ,EAAE,CAAG,EAAA;AACrC,MAAM,MAAA,IAAA,GAAO,KAAM,CAAA,MAAA,CAAO,CAAC,CAAA;AAC3B,MAAA,IAAI,YAAY,KAAM,CAAA,MAAA,CAAO,CAAI,GAAA,CAAC,MAAM,UAAY,EAAA;AAClD,QAAA,KAAA,CAAM,OAAO,IAAI,CAAA;AAAA,OACnB,MAAA,IAAW,SAAS,UAAY,EAAA;AAC9B,QAAA,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA;AAChB;AAEF,IAAO,OAAA,EAAA;AAAA,GACR,CAAA;AAED,EAAO,OAAA;AAAA,IACL,OAAA;AAAA,IACA,OAAO,KAAM,CAAA,IAAA,CAAK,KAAK,CAAA,CAAE,KAAK,EAAE;AAAA,GAClC;AACF;;ACzFA,MAAM,KAAA,GAAQ,OAAO,IAAK,CAAAC,cAAA,CAAI,SAAS,CAAE,CAAA,MAAA,CAAuB,CAAC,GAAA,EAAK,OAAY,KAAA;AAJlF,EAAA,IAAA,EAAA;AAKE,EAAI,GAAA,CAAA,OAAO,CAAI,GAAA,CAAA,EAAA,GAAAA,cAAA,CAAI,SAAU,CAAA,OAAO,MAArB,IAAwB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAO,CAAC,OAAA,EAAS,OAAO,CAAA,CAAA;AAC/D,EAAO,OAAA,GAAA;AACT,CAAA,EAAG,EAAE,CAAA;AAIL,KAAA,CAAM,MAAS,GAAA,CAAC,KAAO,EAAA,OAAA,EAAS,QAAQ,CAAA;AAExC,MAAM,0BAAA,GAA6B,IAAIA,cAAA,CAAI,SAAU,CAAA;AAAA;AAAA,EAEnD,SAAW,EAAA,SAAU,GAAK,EAAA,IAAA,EAAM,OAAO,WAAa,EAAA;AAClD,IAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,MAAO,OAAA,WAAA,GACH,CAAI,CAAA,EAAA,IAAI,CAAK,EAAA,EAAAA,cAAA,CAAI,gBAAgB,WAAY,CAAA,KAAK,CAAC,CAAC,CACpD,mDAAA,CAAA,GAAA,EAAA;AAAA;AAEN,IAAA;AAAA,GACF;AAAA,EACA,SAAW,EAAA,KAAA;AAAA,EACX,GAAK,EAAA;AAAA,IACH,SAAW,EAAA;AAAA,MACT,GAAGA,eAAI,sBAAuB,EAAA;AAAA,MAC9B,gBAAkB,EAAA,IAAA;AAAA,MAClB,WAAa,EAAA,IAAA;AAAA,MACb,YAAc,EAAA,IAAA;AAAA,MACd,WAAa,EAAA,IAAA;AAAA,MACb,aAAe,EAAA,IAAA;AAAA,MACf,WAAa,EAAA,IAAA;AAAA,MACb,GAAK,EAAA,IAAA;AAAA,MACL,KAAO,EAAA,IAAA;AAAA,MACP,iBAAmB,EAAA,IAAA;AAAA,MACnB,eAAiB,EAAA,IAAA;AAAA,MACjB,cAAgB,EAAA,IAAA;AAAA,MAChB,aAAe,EAAA,IAAA;AAAA,MACf,eAAiB,EAAA,IAAA;AAAA,MACjB,YAAc,EAAA;AAAA;AAChB;AAEJ,CAAC,CAAA;AAOM,SAAS,SAAS,iBAAmC,EAAA;AAC1D,EAAI,IAAA;AACF,IAAO,OAAAC,0BAAA,CAAU,SAAS,iBAAmB,EAAA;AAAA,MAC3C,YAAA,EAAc,EAAE,IAAA,EAAM,IAAK,EAAA;AAAA,MAC3B,WAAA,EAAa,CAAC,MAAA,EAAQ,OAAO;AAAA,KAC9B,CAAA;AAAA,WACM,KAAO,EAAA;AACd,IAAQ,OAAA,CAAA,KAAA,CAAM,iCAAiC,iBAAiB,CAAA;AAChE,IAAA,OAAO,WAAW,iBAAiB,CAAA;AAAA;AAEvC;AAEO,SAAS,wBAAwB,iBAAwC,EAAA;AAC9E,EAAO,OAAAA,0BAAA,CAAU,SAAS,iBAAmB,EAAA;AAAA,IAC3C,mBAAqB,EAAA,IAAA;AAAA,IACrB,QAAU,EAAA,CAAC,YAAc,EAAA,SAAA,EAAW,YAAY,SAAS,CAAA;AAAA,IACzD,QAAA,EAAU,CAAC,KAAA,EAAO,MAAQ,EAAA,SAAA,EAAW,OAAS,EAAA,MAAA,EAAQ,aAAe,EAAA,WAAA,EAAa,MAAQ,EAAA,SAAA,EAAW,MAAM,CAAA;AAAA,IAC3G,iBAAmB,EAAA;AAAA,GACpB,CAAA;AACH;AAEO,SAAS,qBAAqB,iBAAwC,EAAA;AAC3E,EAAA,OAAOA,2BAAU,QAAS,CAAA,iBAAA,EAAmB,EAAE,mBAAA,EAAqB,MAAM,CAAA;AAC5E;AASO,SAAS,yBAAyB,iBAAmC,EAAA;AAC1E,EAAI,IAAA;AACF,IAAO,OAAA,0BAAA,CAA2B,QAAQ,iBAAiB,CAAA;AAAA,WACpD,KAAO,EAAA;AACd,IAAQ,OAAA,CAAA,KAAA,CAAM,iCAAiC,iBAAiB,CAAA;AAChE,IAAO,OAAA,oCAAA;AAAA;AAEX;AAGO,SAAS,mBAAmB,iBAAmC,EAAA;AACpE,EAAO,OAAAA,0BAAA,CAAU,QAAS,CAAA,iBAAA,EAAmB,EAAE,YAAA,EAAc,EAAE,GAAA,EAAK,IAAM,EAAA,UAAA,EAAY,IAAK,EAAA,EAAG,CAAA;AAChG;AAGO,SAAS,YAAY,GAAqB,EAAA;AAC/C,EAAA,OAAOC,0BAAqB,GAAG,CAAA;AACjC;AAGO,SAAS,aAAa,KAAwB,EAAA;AACnD,EAAO,OAAA,kBAAA,CAAmB,KAAK,KAAK,CAAA;AACtC;AAGO,SAAS,WAAW,GAAqB,EAAA;AAC9C,EAAO,OAAA,MAAA,CAAO,GAAG,CACd,CAAA,OAAA,CAAQ,MAAM,OAAO,CAAA,CACrB,QAAQ,IAAM,EAAA,MAAM,EACpB,OAAQ,CAAA,IAAA,EAAM,MAAM,CACpB,CAAA,OAAA,CAAQ,MAAM,OAAO,CAAA,CACrB,OAAQ,CAAA,IAAA,EAAM,QAAQ,CAAA;AAC3B;AAEO,MAAM,QAAW,GAAA;AAAA,EACtB,UAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,wBAAA;AAAA,EACA,WAAA;AAAA,EACA,kBAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF;;ACxHA,IAAI,cAAiB,GAAA,KAAA;AAOrB,MAAM,eAAiC,GAAA;AAAA,EACrC,QAAU,EAAA,KAAA;AAAA,EACV,GAAK,EAAA,IAAA;AAAA,EACL,MAAQ,EAAA;AACV,CAAA;AAEgB,SAAA,cAAA,CAAe,KAAc,OAAyC,EAAA;AACpF,EAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,IAAOC,aAAA,CAAA,GAAA,CAAIC,qBAAQ,CAAA;AACnB,IAAAD,aAAA,CAAO,UAAW,CAAA,EAAE,GAAG,eAAA,EAAiB,CAAA;AACxC,IAAiB,cAAA,GAAA,IAAA;AAAA;AAGnB,EAAA,IAAI,IAAO,GAAA,KAAA,CAAA;AACX,EAAA,IAAI,mCAAS,MAAQ,EAAA;AACnB,IAAO,IAAA,GAAA;AAAA,MACL,GAAG,eAAA;AAAA,MACH,MAAQ,EAAA;AAAA,KACV;AAAA;AAEF,EAAA,MAAM,IAAO,GAAAA,aAAA,CAAO,GAAO,IAAA,EAAA,EAAI,IAAI,CAAA;AAInC,EAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,IAAM,MAAA,IAAI,MAAM,2CAA2C,CAAA;AAAA;AAG7D,EAAA,IAAI,mCAAS,UAAY,EAAA;AACvB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,OAAO,yBAAyB,IAAI,CAAA;AACtC;AAEgB,SAAA,uBAAA,CAAwB,KAAc,OAAyC,EAAA;AAC7F,EAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,IAAOA,aAAA,CAAA,GAAA,CAAIC,qBAAQ,CAAA;AACnB,IAAAD,aAAA,CAAO,UAAW,CAAA,EAAE,GAAG,eAAA,EAAiB,CAAA;AACxC,IAAiB,cAAA,GAAA,IAAA;AAAA;AAGnB,EAAM,MAAA,IAAA,GAAOA,aAAO,CAAA,GAAA,IAAO,EAAE,CAAA;AAI7B,EAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,IAAM,MAAA,IAAI,MAAM,2CAA2C,CAAA;AAAA;AAG7D,EAAA,IAAI,mCAAS,UAAY,EAAA;AACvB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,OAAO,yBAAyB,IAAI,CAAA;AACtC;;ACjEA,MAAM,QAAA,uBAA4B,GAAI,EAAA;AAE/B,SAAS,aAA4B,IAA2B,EAAA;AACrE,EAAI,IAAA,QAAA,CAAS,GAAI,CAAA,IAAI,CAAG,EAAA;AACtB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAgD,6CAAA,EAAA,IAAI,CAAG,CAAA,CAAA,CAAA;AAAA;AAGzE,EAAA,QAAA,CAAS,IAAI,IAAI,CAAA;AACjB,EAAA,OAAO,EAAE,IAAK,EAAA;AAChB;;ACKO,MAAe,YAAiC,CAAA;AAAA,EAQrD,WAAc,GAAA;AAEZ,IAAK,IAAA,CAAA,IAAA,GAAO,IAAK,CAAA,SAAA,CAAU,WAAY,CAAA,IAAA;AAAA;AACzC;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,IAAgB,EAAA;AACtB,IAAK,IAAA,CAAA,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACxB,IAAO,OAAA,IAAA;AAAA;AAEX;AAMO,MAAe,4BAA+B,YAAa,CAAA;AAAA,EAGhE,YAAY,OAAY,EAAA;AACtB,IAAM,KAAA,EAAA;AACN,IAAA,IAAA,CAAK,OAAU,GAAA,OAAA;AAAA;AAEnB;;AChCO,MAAM,WAA+C,CAAA;AAAA,EAI1D,WAAc,GAAA;AAFd,IAAQ,IAAA,CAAA,WAAA,uBAAkB,GAAoC,EAAA;AAG5D,IAAK,IAAA,CAAA,OAAA,GAAU,IAAIE,6BAAa,EAAA;AAAA;AAClC,EAEA,QAA4B,KAAgB,EAAA;AAC1C,IAAA,IAAA,CAAK,OAAQ,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA,EAAM,KAAK,CAAA;AAAA;AACrC,EAEA,SAAA,CAA8B,YAA6B,OAA6C,EAAA;AACtG,IAAO,OAAA,IAAA,CAAK,UAAU,UAAU,CAAA,CAAE,UAAU,EAAE,IAAA,EAAM,SAAS,CAAA;AAAA;AAC/D,EAEA,UAAyC,SAA2C,EAAA;AAClF,IAAO,OAAA,IAAIC,eAAc,CAAA,CAAC,QAAa,KAAA;AACrC,MAAM,MAAA,OAAA,GAAU,CAAC,KAAa,KAAA;AAC5B,QAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,OACrB;AAEA,MAAA,IAAA,CAAK,OAAQ,CAAA,EAAA,CAAG,SAAU,CAAA,IAAA,EAAM,OAAO,CAAA;AACvC,MAAK,IAAA,CAAA,WAAA,CAAY,GAAI,CAAA,OAAA,EAAS,QAAQ,CAAA;AAEtC,MAAA,OAAO,MAAM;AACX,QAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,SAAU,CAAA,IAAA,EAAM,OAAO,CAAA;AACxC,QAAK,IAAA,CAAA,WAAA,CAAY,OAAO,OAAO,CAAA;AAAA,OACjC;AAAA,KACD,CAAA;AAAA;AACH,EAEA,YAAA,CAAa,KAAaC,OAA6C,EAAA;AACrE,IAAA,OAAO,IAAI,cAAe,CAAA,CAAC,GAAG,CAAA,EAAG,MAAMA,OAAM,CAAA;AAAA;AAC/C;AAAA;AAAA;AAAA,EAKA,IAAA,CAAQ,OAA6B,OAAmB,EAAA;AAGtD,IAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,MAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,KAAA,EAAO,EAAE,IAAM,EAAA,KAAA,EAAO,SAAS,CAAA;AAAA,KAC5C,MAAA;AACL,MAAK,IAAA,CAAA,OAAA,CAAQ,KAAK,KAAM,CAAA,IAAA,EAAM,EAAE,IAAM,EAAA,KAAA,CAAM,IAAM,EAAA,OAAA,EAAS,CAAA;AAAA;AAC7D;AACF,EAEA,EAAA,CAAM,OAA6B,OAAgC,EAAA;AAIjE,IAAQ,OAAA,CAAA,OAAA,GAAU,CAAC,YAA2B,KAAA;AAC5C,MAAA,OAAA,CAAQ,aAAa,OAAO,CAAA;AAAA,KAC9B;AAEA,IAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,MAAA,IAAA,CAAK,OAAQ,CAAA,EAAA,CAAG,KAAO,EAAA,OAAA,CAAQ,OAAO,CAAA;AAAA,KACjC,MAAA;AACL,MAAA,IAAA,CAAK,OAAQ,CAAA,EAAA,CAAG,KAAM,CAAA,IAAA,EAAM,QAAQ,OAAO,CAAA;AAAA;AAC7C;AACF,EAEA,GAAA,CAAO,OAA6B,OAAgC,EAAA;AAClE,IAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,MAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,KAAO,EAAA,OAAA,CAAQ,OAAO,CAAA;AACvC,MAAA;AAAA;AAGF,IAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,KAAM,CAAA,IAAA,EAAM,QAAQ,OAAO,CAAA;AAAA;AAC9C,EAEA,kBAAqB,GAAA;AACnB,IAAA,IAAA,CAAK,QAAQ,kBAAmB,EAAA;AAChC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,CAAA,IAAK,KAAK,WAAa,EAAA;AACzC,MAAA,GAAA,CAAI,QAAS,EAAA;AACb,MAAK,IAAA,CAAA,WAAA,CAAY,OAAO,GAAG,CAAA;AAAA;AAC7B;AAEJ;AAKA,MAAM,cAAmC,CAAA;AAAA;AAAA,EAKvC,WAAA,CACS,IACC,EAAA,QAAA,EACRA,OACA,EAAA;AAHO,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACC,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAGR,IAAA,IAAA,CAAK,eAAeA,OAAA,IAAA,IAAA,GAAAA,OAAU,GAAA,EAAE,WAAW,KAAM,EAAA;AAAA;AACnD,EAEA,QAA4B,KAAgB,EAAA;AAC1C,IAAI,IAAA,CAAC,MAAM,MAAQ,EAAA;AACjB,MAAA,KAAA,CAAM,MAAS,GAAA,IAAA;AAAA;AAEjB,IAAK,IAAA,CAAA,QAAA,CAAS,QAAQ,KAAK,CAAA;AAAA;AAC7B,EAEA,OAA2B,KAAU,EAAA;AACnC,IAAI,IAAA,IAAA,CAAK,aAAa,SAAW,EAAA;AAC/B,MAAA,OAAO,MAAM,MAAW,KAAA,IAAA;AAAA;AAE1B,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,UAA8B,SAA2C,EAAA;AACvE,IAAA,OAAO,IAAK,CAAA,QAAA,CAAS,SAAU,CAAA,SAAS,CAAE,CAAA,IAAA,CAAKA,gBAAO,CAAA,IAAA,CAAK,MAAO,CAAA,IAAA,CAAK,IAAI,CAAC,CAAC,CAAA;AAAA;AAC/E;AAAA,EAGA,SAAA,CAA8B,YAA6B,OAA6C,EAAA;AACtG,IAAO,OAAA,IAAA,CAAK,UAAU,UAAU,CAAA,CAAE,UAAU,EAAE,IAAA,EAAM,SAAS,CAAA;AAAA;AAC/D,EAEA,kBAA2B,GAAA;AACzB,IAAA,IAAA,CAAK,SAAS,kBAAmB,EAAA;AAAA;AACnC;AAAA;AAAA;AAAA,EAKA,YAAA,CAAa,KAAaA,OAAsC,EAAA;AAC9D,IAAO,OAAA,IAAI,eAAe,CAAC,GAAG,KAAK,IAAM,EAAA,GAAG,CAAG,EAAA,IAAA,EAAMA,OAAM,CAAA;AAAA;AAE/D;;AC5HO,MAAM,uBAAuB,mBAAsC,CAAA;AAE1E;AAFa,cAAA,CACJ,IAAO,GAAA,YAAA;AAIT,MAAM,4BAA4B,YAAa,CAAA;AAEtD;AAFa,mBAAA,CACJ,IAAO,GAAA,kBAAA;AAIT,MAAM,wBAAwB,mBAAsC,CAAA;AAE3E;AAFa,eAAA,CACJ,IAAO,GAAA,aAAA;AAIT,MAAM,8BAA8B,mBAA8C,CAAA;AAEzF;AAFa,qBAAA,CACJ,IAAO,GAAA,kBAAA;AAaT,MAAM,6BAAgC,mBAAoD,CAAA;AAEjG;AAFa,oBAAA,CACJ,IAAO,GAAA,kBAAA;AAET,MAAM,sCAAsC,YAAa,CAAA;AAEhE;AAFa,6BAAA,CACJ,IAAO,GAAA,iCAAA;AAET,MAAM,gCAAgC,YAAa,CAAA;AAE1D;AAFa,uBAAA,CACJ,IAAO,GAAA,2BAAA;AAGT,MAAM,6BAA6B,YAAa,CAAA;AAEvD;AAFa,oBAAA,CACJ,IAAO,GAAA,wBAAA;AAGT,MAAM,+BAA+B,mBAAkD,CAAA;AAE9F;AAFa,sBAAA,CACJ,IAAO,GAAA,qBAAA;;ACvDhB,SAAS,KAAM,CAAA,KAAA,EAAe,GAAM,GAAA,CAAA,EAAG,MAAM,CAAG,EAAA;AAC9C,EAAI,IAAA,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,YAAc,EAAA;AACzC,IAAI,IAAA,KAAA,GAAQ,GAAO,IAAA,KAAA,GAAQ,GAAK,EAAA;AAC9B,MAAA,OAAA,CAAQ,MAAM,CAAsB,mBAAA,EAAA,KAAK,qBAAqB,GAAG,CAAA,EAAA,EAAK,GAAG,CAAI,EAAA,CAAA,CAAA;AAAA;AAC/E;AAGF,EAAA,OAAO,KAAK,GAAI,CAAA,IAAA,CAAK,IAAI,GAAK,EAAA,KAAK,GAAG,GAAG,CAAA;AAC3C;AAQO,SAAS,SAAS,KAAe,EAAA;AACtC,EAAQ,KAAA,GAAA,KAAA,CAAM,MAAM,CAAC,CAAA;AAErB,EAAM,MAAA,EAAA,GAAK,IAAI,MAAA,CAAO,CAAO,IAAA,EAAA,KAAA,CAAM,UAAU,CAAI,GAAA,CAAA,GAAI,CAAC,CAAA,CAAA,CAAA,EAAK,GAAG,CAAA;AAC9D,EAAI,IAAA,MAAA,GAAS,KAAM,CAAA,KAAA,CAAM,EAAE,CAAA;AAE3B,EAAA,IAAI,CAAC,MAAQ,EAAA;AACX,IAAO,OAAA,EAAA;AAAA;AAGT,EAAI,IAAA,MAAA,GAAS,KAAM,CAAA,IAAA,CAAK,MAAM,CAAA;AAE9B,EAAA,IAAI,MAAO,CAAA,CAAC,CAAE,CAAA,MAAA,KAAW,CAAG,EAAA;AAC1B,IAAA,MAAA,GAAS,MAAO,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,IAAI,CAAC,CAAA;AAAA;AAGlC,EAAA,OAAO,MACH,GAAA,CAAA,GAAA,EAAM,MAAO,CAAA,MAAA,KAAW,CAAI,GAAA,GAAA,GAAM,EAAE,CAAA,CAAA,EAAI,MACrC,CAAA,GAAA,CAAI,CAAC,CAAA,EAAG,KAAU,KAAA;AACjB,IAAA,OAAO,KAAQ,GAAA,CAAA,GAAI,QAAS,CAAA,CAAA,EAAG,EAAE,CAAI,GAAA,IAAA,CAAK,KAAO,CAAA,QAAA,CAAS,CAAG,EAAA,EAAE,CAAI,GAAA,GAAA,GAAO,GAAI,CAAI,GAAA,GAAA;AAAA,GACnF,CAAA,CACA,IAAK,CAAA,IAAI,CAAC,CACb,CAAA,CAAA,GAAA,EAAA;AACN;AAEA,SAAS,SAAS,GAAa,EAAA;AAC7B,EAAM,MAAA,GAAA,GAAM,GAAI,CAAA,QAAA,CAAS,EAAE,CAAA;AAC3B,EAAA,OAAO,GAAI,CAAA,MAAA,KAAW,CAAI,GAAA,CAAA,CAAA,EAAI,GAAG,CAAK,CAAA,GAAA,GAAA;AACxC;AAQO,SAAS,SAAS,KAAe,EAAA;AAEtC,EAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,GAAG,CAAA,KAAM,CAAG,EAAA;AAC5B,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,MAAM,EAAE,MAAA,EAAW,GAAA,cAAA,CAAe,KAAK,CAAA;AACvC,EAAO,OAAA,CAAA,CAAA,EAAI,MAAO,CAAA,GAAA,CAAI,CAAC,CAAA,KAAc,QAAS,CAAA,CAAC,CAAC,CAAA,CAAE,IAAK,CAAA,EAAE,CAAC,CAAA,CAAA;AAC5D;AAOO,SAAS,YAAY,KAAuB,EAAA;AACjD,EAAI,IAAA,KAAA,CAAM,CAAC,CAAA,KAAM,GAAK,EAAA;AACpB,IAAO,OAAA,KAAA;AAAA;AAET,EAAM,MAAA,MAAA,GAASC,2BAAU,KAAK,CAAA;AAC9B,EAAO,OAAA,MAAA,CAAO,UAAe,KAAA,CAAA,GAAI,OAAO,WAAY,EAAA,GAAI,OAAO,YAAa,EAAA;AAC9E;AAKO,SAAS,YAAY,KAAe,EAAA;AACzC,EAAI,IAAA,KAAA,CAAM,UAAW,CAAA,KAAK,CAAG,EAAA;AAC3B,IAAO,OAAA,KAAA;AAAA;AAGT,EAAO,OAAAA,0BAAA,CAAU,KAAK,CAAA,CAAE,WAAY,EAAA;AACtC;AAQO,SAAS,SAAS,KAAgC,EAAA;AACvD,EAAM,MAAA,KAAA,GAAQ,eAAe,KAAK,CAAA;AAClC,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA;AACnB,EAAM,MAAA,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,EAAM,MAAA,CAAA,GAAI,MAAO,CAAA,CAAC,CAAI,GAAA,GAAA;AACtB,EAAM,MAAA,CAAA,GAAI,MAAO,CAAA,CAAC,CAAI,GAAA,GAAA;AACtB,EAAA,MAAM,IAAI,CAAI,GAAA,IAAA,CAAK,GAAI,CAAA,CAAA,EAAG,IAAI,CAAC,CAAA;AAC/B,EAAM,MAAA,CAAA,GAAI,CAAC,CAAW,EAAA,CAAA,GAAA,CAAK,IAAI,CAAI,GAAA,EAAA,IAAM,OAAO,CAAI,GAAA,CAAA,GAAI,KAAK,GAAI,CAAA,IAAA,CAAK,IAAI,CAAI,GAAA,CAAA,EAAG,IAAI,CAAG,EAAA,CAAC,GAAG,CAAE,CAAA,CAAA;AAE9F,EAAA,IAAI,IAAO,GAAA,KAAA;AACX,EAAM,MAAA,GAAA,GAAM,CAAC,IAAK,CAAA,KAAA,CAAM,EAAE,CAAC,CAAA,GAAI,GAAG,CAAA,EAAG,IAAK,CAAA,KAAA,CAAM,EAAE,CAAC,CAAA,GAAI,GAAG,CAAG,EAAA,IAAA,CAAK,MAAM,CAAE,CAAA,CAAC,CAAI,GAAA,GAAG,CAAC,CAAA;AAEnF,EAAI,IAAA,KAAA,CAAM,SAAS,MAAQ,EAAA;AACzB,IAAQ,IAAA,IAAA,GAAA;AACR,IAAI,GAAA,CAAA,IAAA,CAAK,MAAO,CAAA,CAAC,CAAC,CAAA;AAAA;AAGpB,EAAA,OAAO,cAAe,CAAA,EAAE,IAAM,EAAA,MAAA,EAAQ,KAAK,CAAA;AAC7C;AAUO,SAAS,eAAe,KAAgD,EAAA;AAE7E,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,IAAI,KAAM,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,GAAK,EAAA;AAC3B,IAAO,OAAA,cAAA,CAAe,QAAS,CAAA,KAAK,CAAC,CAAA;AAAA;AAGvC,EAAM,MAAA,MAAA,GAAS,KAAM,CAAA,OAAA,CAAQ,GAAG,CAAA;AAChC,EAAA,MAAM,IAAO,GAAA,KAAA,CAAM,SAAU,CAAA,CAAA,EAAG,MAAM,CAAA;AAEtC,EAAI,IAAA,CAAC,KAAO,EAAA,MAAA,EAAQ,KAAO,EAAA,MAAA,EAAQ,OAAO,CAAE,CAAA,OAAA,CAAQ,IAAI,CAAA,KAAM,CAAI,CAAA,EAAA;AAChE,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,gBAAgB,KAAK,CAAA,kGAAA;AAAA,KACvB;AAAA;AAGF,EAAA,IAAI,SAAc,KAAM,CAAA,SAAA,CAAU,SAAS,CAAG,EAAA,KAAA,CAAM,SAAS,CAAC,CAAA;AAC9D,EAAI,IAAA,UAAA;AAEJ,EAAA,IAAI,SAAS,OAAS,EAAA;AACpB,IAAS,MAAA,GAAA,MAAA,CAAO,MAAM,GAAG,CAAA;AACzB,IAAA,UAAA,GAAa,OAAO,KAAM,EAAA;AAC1B,IAAI,IAAA,MAAA,CAAO,WAAW,CAAK,IAAA,MAAA,CAAO,CAAC,CAAE,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,GAAK,EAAA;AACtD,MAAA,MAAA,CAAO,CAAC,CAAI,GAAA,MAAA,CAAO,CAAC,CAAA,CAAE,MAAM,CAAC,CAAA;AAAA;AAE/B,IAAI,IAAA,CAAC,MAAQ,EAAA,YAAA,EAAc,SAAW,EAAA,cAAA,EAAgB,UAAU,CAAE,CAAA,OAAA,CAAQ,UAAU,CAAA,KAAM,CAAI,CAAA,EAAA;AAC5F,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,eAAe,UAAU,CAAA,0GAAA;AAAA,OAC3B;AAAA;AACF,GACK,MAAA;AACL,IAAS,MAAA,GAAA,MAAA,CAAO,MAAM,GAAG,CAAA;AAAA;AAG3B,EAAA,MAAA,GAAS,OAAO,GAAI,CAAA,CAAC,KAAkB,KAAA,UAAA,CAAW,KAAK,CAAC,CAAA;AACxD,EAAO,OAAA,EAAE,IAAM,EAAA,MAAA,EAAQ,UAAW,EAAA;AACpC;AAUO,SAAS,eAAe,KAAuB,EAAA;AACpD,EAAM,MAAA,EAAE,IAAM,EAAA,UAAA,EAAe,GAAA,KAAA;AAC7B,EAAA,IAAI,SAAS,KAAM,CAAA,MAAA;AAEnB,EAAA,IAAI,IAAK,CAAA,OAAA,CAAQ,KAAK,CAAA,KAAM,CAAI,CAAA,EAAA;AAE9B,IAAS,MAAA,GAAA,MAAA,CAAO,GAAI,CAAA,CAAC,CAAW,EAAA,CAAA,KAAe,CAAI,GAAA,CAAA,GAAI,QAAS,CAAA,CAAA,EAAG,EAAE,CAAA,GAAI,CAAE,CAAA;AAAA,GAClE,MAAA,IAAA,IAAA,CAAK,OAAQ,CAAA,KAAK,MAAM,CAAI,CAAA,EAAA;AACrC,IAAA,MAAA,CAAO,CAAC,CAAA,GAAI,CAAG,EAAA,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,CAAA;AACxB,IAAA,MAAA,CAAO,CAAC,CAAA,GAAI,CAAG,EAAA,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA;AAE1B,EAAA,IAAI,IAAK,CAAA,OAAA,CAAQ,OAAO,CAAA,KAAM,CAAI,CAAA,EAAA;AAChC,IAAA,MAAA,GAAS,GAAG,UAAU,CAAA,CAAA,EAAI,MAAO,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,GACrC,MAAA;AACL,IAAA,MAAA,GAAS,CAAG,EAAA,MAAA,CAAO,IAAK,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA;AAG/B,EAAO,OAAA,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAA;AAC1B;AAYgB,SAAA,gBAAA,CAAiB,UAAoB,EAAA,UAAA,EAAoB,MAAiB,EAAA;AACxF,EAAM,MAAA,IAAA,GAAO,aAAa,UAAU,CAAA;AACpC,EAAM,MAAA,IAAA,GAAO,YAAa,CAAA,UAAA,EAAY,MAAM,CAAA;AAC5C,EAAQ,OAAA,CAAA,IAAA,CAAK,GAAI,CAAA,IAAA,EAAM,IAAI,CAAA,GAAI,SAAS,IAAK,CAAA,GAAA,CAAI,IAAM,EAAA,IAAI,CAAI,GAAA,IAAA,CAAA;AACjE;AAYgB,SAAA,YAAA,CAAa,OAAe,UAAqB,EAAA;AAC/D,EAAM,MAAA,KAAA,GAAQ,eAAe,KAAK,CAAA;AAElC,EAAI,IAAA,GAAA,GAAM,KAAM,CAAA,IAAA,KAAS,KAAQ,GAAA,cAAA,CAAe,SAAS,KAAK,CAAC,CAAE,CAAA,MAAA,GAAS,KAAM,CAAA,MAAA;AAEhF,EAAI,IAAA,UAAA,IAAc,KAAM,CAAA,IAAA,KAAS,MAAQ,EAAA;AACvC,IAAM,MAAA,eAAA,GAAkB,eAAe,UAAU,CAAA;AACjD,IAAMC,MAAAA,MAAAA,GAAQ,IAAI,CAAC,CAAA;AACnB,IAAI,GAAA,CAAA,CAAC,CAAI,GAAA,GAAA,CAAI,CAAC,CAAA,GAAIA,SAAQ,eAAgB,CAAA,MAAA,CAAO,CAAC,CAAA,IAAK,CAAIA,GAAAA,MAAAA,CAAAA;AAC3D,IAAI,GAAA,CAAA,CAAC,CAAI,GAAA,GAAA,CAAI,CAAC,CAAA,GAAIA,SAAQ,eAAgB,CAAA,MAAA,CAAO,CAAC,CAAA,IAAK,CAAIA,GAAAA,MAAAA,CAAAA;AAC3D,IAAI,GAAA,CAAA,CAAC,CAAI,GAAA,GAAA,CAAI,CAAC,CAAA,GAAIA,SAAQ,eAAgB,CAAA,MAAA,CAAO,CAAC,CAAA,IAAK,CAAIA,GAAAA,MAAAA,CAAAA;AAAA;AAG7D,EAAA,MAAM,UAAa,GAAA,GAAA,CAAI,GAAI,CAAA,CAAC,GAAa,KAAA;AACvC,IAAI,IAAA,KAAA,CAAM,SAAS,OAAS,EAAA;AAC1B,MAAO,GAAA,IAAA,GAAA;AAAA;AAET,IAAA,OAAO,OAAO,OAAU,GAAA,GAAA,GAAM,KAAU,GAAA,CAAA,CAAA,GAAA,GAAM,SAAS,KAAU,KAAA,GAAA;AAAA,GAClE,CAAA;AAGD,EAAA,OAAO,MAAQ,CAAA,CAAA,MAAA,GAAS,UAAW,CAAA,CAAC,IAAI,MAAS,GAAA,UAAA,CAAW,CAAC,CAAA,GAAI,SAAS,UAAW,CAAA,CAAC,CAAG,EAAA,OAAA,CAAQ,CAAC,CAAC,CAAA;AACrG;AAUgB,SAAA,SAAA,CAAU,KAAe,EAAA,WAAA,GAAc,IAAM,EAAA;AAC3D,EAAO,OAAA,YAAA,CAAa,KAAK,CAAA,GAAI,GAAM,GAAA,MAAA,CAAO,OAAO,WAAW,CAAA,GAAI,OAAQ,CAAA,KAAA,EAAO,WAAW,CAAA;AAC5F;AAUgB,SAAA,KAAA,CAAM,OAAe,KAAe,EAAA;AAClD,EAAA,IAAI,UAAU,EAAI,EAAA;AAChB,IAAO,OAAA,SAAA;AAAA;AAGT,EAAA,KAAA,GAAQ,MAAM,KAAK,CAAA;AAGnB,EAAI,IAAA,KAAA,CAAM,CAAC,CAAA,KAAM,GAAK,EAAA;AACpB,IAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,MAAQ,KAAA,GAAA,KAAA,CAAM,SAAU,CAAA,CAAA,EAAG,CAAC,CAAA;AAAA,KAC9B,MAAA,IAAW,KAAM,CAAA,MAAA,IAAU,CAAG,EAAA;AAC5B,MAAA,IAAI,CAAI,GAAA,GAAA;AACR,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,EAAG,CAAK,EAAA,EAAA;AAC1B,QAAA,CAAA,IAAK,KAAM,CAAA,CAAC,CAAI,GAAA,KAAA,CAAM,CAAC,CAAA;AAAA;AAEzB,MAAQ,KAAA,GAAA,CAAA;AAAA;AAGV,IACE,OAAA,KAAA,GACA,IAAK,CAAA,KAAA,CAAM,KAAQ,GAAA,GAAG,CACnB,CAAA,QAAA,CAAS,EAAE,CAAA,CACX,QAAS,CAAA,CAAA,EAAG,GAAG,CAAA;AAAA,GAIb,MAAA,IAAA,KAAA,CAAM,CAAC,CAAA,KAAM,GAAK,EAAA;AAGzB,IAAA,OAAO,KAAM,CAAA,OAAA,CAAQ,GAAK,EAAA,CAAA,EAAA,EAAK,KAAK,CAAG,CAAA,CAAA,CAAA;AAAA,GAGhC,MAAA,IAAA,KAAA,CAAM,CAAC,CAAA,KAAM,GAAK,EAAA;AACzB,IAAO,OAAA,KAAA,CAAM,UAAU,CAAG,EAAA,KAAA,CAAM,YAAY,GAAG,CAAC,CAAI,GAAA,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,CAAA;AAAA;AAGhE,EAAM,MAAA,KAAA,GAAQ,eAAe,KAAK,CAAA;AAElC,EAAI,IAAA,KAAA,CAAM,SAAS,OAAS,EAAA;AAC1B,IAAA,KAAA,CAAM,MAAO,CAAA,CAAC,CAAI,GAAA,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA;AAAA,GACtB,MAAA;AACL,IAAM,KAAA,CAAA,MAAA,CAAO,CAAC,CAAI,GAAA,KAAA;AAAA;AAGpB,EAAA,OAAO,eAAe,KAAK,CAAA;AAC7B;AASgB,SAAA,MAAA,CAAO,OAAe,WAAqB,EAAA;AACzD,EAAM,MAAA,KAAA,GAAQ,eAAe,KAAK,CAAA;AAClC,EAAA,WAAA,GAAc,MAAM,WAAW,CAAA;AAE/B,EAAA,IAAI,KAAM,CAAA,IAAA,CAAK,OAAQ,CAAA,KAAK,MAAM,CAAI,CAAA,EAAA;AACpC,IAAM,KAAA,CAAA,MAAA,CAAO,CAAC,CAAA,IAAK,CAAI,GAAA,WAAA;AAAA,GACd,MAAA,IAAA,KAAA,CAAM,IAAK,CAAA,OAAA,CAAQ,KAAK,CAAA,KAAM,CAAM,CAAA,IAAA,KAAA,CAAM,IAAK,CAAA,OAAA,CAAQ,OAAO,CAAA,KAAM,CAAI,CAAA,EAAA;AACjF,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,EAAG,KAAK,CAAG,EAAA;AAC7B,MAAM,KAAA,CAAA,MAAA,CAAO,CAAC,CAAA,IAAK,CAAI,GAAA,WAAA;AAAA;AACzB;AAEF,EAAA,OAAO,eAAe,KAAK,CAAA;AAC7B;AASgB,SAAA,OAAA,CAAQ,OAAe,WAAqB,EAAA;AAC1D,EAAM,MAAA,KAAA,GAAQ,eAAe,KAAK,CAAA;AAClC,EAAA,WAAA,GAAc,MAAM,WAAW,CAAA;AAE/B,EAAA,IAAI,KAAM,CAAA,IAAA,CAAK,OAAQ,CAAA,KAAK,MAAM,CAAI,CAAA,EAAA;AACpC,IAAA,KAAA,CAAM,OAAO,CAAC,CAAA,IAAA,CAAM,MAAM,KAAM,CAAA,MAAA,CAAO,CAAC,CAAK,IAAA,WAAA;AAAA,aACpC,KAAM,CAAA,IAAA,CAAK,OAAQ,CAAA,KAAK,MAAM,CAAI,CAAA,EAAA;AAC3C,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,EAAG,KAAK,CAAG,EAAA;AAC7B,MAAA,KAAA,CAAM,OAAO,CAAC,CAAA,IAAA,CAAM,MAAM,KAAM,CAAA,MAAA,CAAO,CAAC,CAAK,IAAA,WAAA;AAAA;AAC/C,aACS,KAAM,CAAA,IAAA,CAAK,OAAQ,CAAA,OAAO,MAAM,CAAI,CAAA,EAAA;AAC7C,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,EAAG,KAAK,CAAG,EAAA;AAC7B,MAAA,KAAA,CAAM,OAAO,CAAC,CAAA,IAAA,CAAM,IAAI,KAAM,CAAA,MAAA,CAAO,CAAC,CAAK,IAAA,WAAA;AAAA;AAC7C;AAGF,EAAA,OAAO,eAAe,KAAK,CAAA;AAC7B;AAQO,MAAM,gBAAmB,GAAA;AAAA,EAC9B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF;;AClYY,IAAA,gBAAA,qBAAAC,iBAAL,KAAA;AACL,EAAAA,kBAAA,YAAa,CAAA,GAAA,YAAA;AACb,EAAAA,kBAAA,gBAAiB,CAAA,GAAA,iBAAA;AACjB,EAAAA,kBAAA,sBAAuB,CAAA,GAAA,yBAAA;AACvB,EAAAA,kBAAA,kBAAmB,CAAA,GAAA,mBAAA;AACnB,EAAAA,kBAAA,kBAAmB,CAAA,GAAA,mBAAA;AACnB,EAAAA,kBAAA,kBAAmB,CAAA,GAAA,mBAAA;AACnB,EAAAA,kBAAA,kBAAmB,CAAA,GAAA,mBAAA;AACnB,EAAAA,kBAAA,gBAAiB,CAAA,GAAA,iBAAA;AACjB,EAAAA,kBAAA,gBAAiB,CAAA,GAAA,iBAAA;AACjB,EAAAA,kBAAA,gBAAiB,CAAA,GAAA,iBAAA;AACjB,EAAAA,kBAAA,iBAAkB,CAAA,GAAA,kBAAA;AAClB,EAAAA,kBAAA,gBAAiB,CAAA,GAAA,iBAAA;AACjB,EAAAA,kBAAA,kBAAmB,CAAA,GAAA,mBAAA;AACnB,EAAAA,kBAAA,mBAAoB,CAAA,GAAA,oBAAA;AACpB,EAAAA,kBAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,kBAAA,QAAS,CAAA,GAAA,QAAA;AAhBC,EAAAA,OAAAA,iBAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA;AAoCL,MAAM,cAAiB,GAAA;;AC3BlB,IAAA,cAAA,qBAAAC,eAAL,KAAA;AACL,EAAAA,gBAAA,UAAW,CAAA,GAAA,UAAA;AAIX,EAAAA,gBAAA,YAAa,CAAA,GAAA,YAAA;AALH,EAAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;;ACRL,MAAM,iBAA+B,GAAA,EAAE,KAAO,EAAA,CAAA,EAAG,OAAO,cAAe,EAAA;AAE9D,SAAA,kBAAA,CAAmB,OAAe,UAAgD,EAAA;AAChG,EAAA,IAAI,CAAC,UAAA,IAAc,UAAW,CAAA,MAAA,KAAW,CAAG,EAAA;AAC1C,IAAO,OAAA,iBAAA;AAAA;AAGT,EAAI,IAAA,MAAA,GAAS,WAAW,CAAC,CAAA;AAEzB,EAAA,KAAA,MAAW,aAAa,UAAY,EAAA;AAClC,IAAI,IAAA,KAAA,IAAS,UAAU,KAAO,EAAA;AAC5B,MAAS,MAAA,GAAA,SAAA;AAAA,KACJ,MAAA;AACL,MAAA;AAAA;AACF;AAGF,EAAO,OAAA,MAAA;AACT;AAEgB,SAAA,0BAAA,CAA2B,KAAc,EAAA,KAAA,EAAe,OAA4B,EAAA;AAClG,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,KAAM,CAAA,MAAA;AAE7B,EAAI,IAAA,CAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,IAAS,MAAA,cAAA,CAAe,UAAY,EAAA;AAClD,IAAA,OAAO,kBAAmB,CAAA,OAAA,GAAU,GAAK,EAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,KAAK,CAAA;AAAA;AAG5D,EAAO,OAAA,kBAAA,CAAmB,KAAO,EAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,KAAK,CAAA;AACpD;AAKO,SAAS,eAAe,UAAyB,EAAA;AACtD,EAAO,OAAA,UAAA,CAAW,KAAK,CAAC,EAAA,EAAI,OAAO,EAAG,CAAA,KAAA,GAAQ,GAAG,KAAK,CAAA;AACxD;;ACrBgB,SAAA,kBAAA,CAAmB,OAAc,KAAuC,EAAA;AAlBxF,EAAA,IAAA,EAAA,EAAA,EAAA;AAmBE,EAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,OAAS,EAAA;AACpC,IAAO,OAAA,yBAAA,CAA0B,OAAO,KAAK,CAAA;AAAA;AAG/C,EAAM,MAAA,IAAA,GAAO,0BAA0B,KAAK,CAAA;AAC5C,EAAA,MAAM,QAAW,GAAA,IAAA,CAAK,aAAc,CAAA,KAAA,EAAO,KAAK,CAAA;AAChD,EAAA,MAAM,QAAO,EAAM,GAAA,CAAA,EAAA,GAAA,KAAA,CAAA,KAAA,KAAN,mBAAa,KAAb,KAAA,IAAA,GAAA,EAAA,GAAsB,kBAAkB,KAAK,CAAA;AAE1D,EAAA,OAAO,CAAC,KAAkB,KAAA;AACxB,IAAA,IAAI,OAAU,GAAA,CAAA;AAEd,IAAA,IAAI,UAAU,CAAW,QAAA,EAAA;AACvB,MAAW,OAAA,GAAA,CAAA,KAAA,GAAQ,IAAK,CAAA,GAAA,IAAQ,IAAK,CAAA,KAAA;AAErC,MAAI,IAAA,MAAA,CAAO,KAAM,CAAA,OAAO,CAAG,EAAA;AACzB,QAAU,OAAA,GAAA,CAAA;AAAA;AACZ;AAGF,IAAA,MAAM,SAAY,GAAA,0BAAA,CAA2B,KAAO,EAAA,KAAA,EAAO,OAAO,CAAA;AAElE,IAAO,OAAA;AAAA,MACL,OAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAO,EAAA,QAAA,CAAS,KAAO,EAAA,OAAA,EAAS,SAAS;AAAA,KAC3C;AAAA,GACF;AACF;AAEA,SAAS,yBAAA,CAA0B,OAAc,KAAuC,EAAA;AACtF,EAAA,MAAM,SAA6B,GAAA;AAAA,IACjC,KAAO,EAAA,KAAA,CAAM,aAAc,CAAA,cAAA,CAAe,OAAO,CAAA;AAAA,IACjD,OAAS,EAAA,CAAA;AAAA,IACT,SAAW,EAAA,KAAA;AAAA,GACb;AAEA,EAAA,MAAM,UAA8B,GAAA;AAAA,IAClC,KAAO,EAAA,KAAA,CAAM,aAAc,CAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IAC/C,OAAS,EAAA,CAAA;AAAA,IACT,SAAW,EAAA,KAAA;AAAA,GACb;AAEA,EAAM,MAAA,IAAA,GAAO,0BAA0B,KAAK,CAAA;AAC5C,EAAI,IAAA,IAAA,CAAK,YAAgB,IAAA,IAAA,CAAK,SAAW,EAAA;AACvC,IAAM,MAAA,MAAA,GAAS,IAAK,CAAA,SAAA,CAAU,KAAK,CAAA;AACnC,IAAA,SAAA,CAAU,KAAQ,GAAA,MAAA,CAAO,MAAO,CAAA,MAAA,GAAS,CAAC,CAAA;AAC1C,IAAW,UAAA,CAAA,KAAA,GAAQ,OAAO,CAAC,CAAA;AAAA;AAG7B,EAAA,OAAO,CAAC,KAAkB,KAAA;AACxB,IAAO,OAAA,OAAA,CAAQ,KAAK,CAAA,GAAI,SAAY,GAAA,UAAA;AAAA,GACtC;AACF;AAEO,SAAS,kBAAkB,KAA4B,EAAA;AAC5D,EAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,MAAQ,EAAA;AACnC,IAAA,OAAO,EAAE,GAAK,EAAA,CAAA,EAAG,GAAK,EAAA,GAAA,EAAK,OAAO,GAAI,EAAA;AAAA;AAIxC,EAAI,IAAA,GAAA,GAAM,MAAM,MAAO,CAAA,GAAA;AACvB,EAAI,IAAA,GAAA,GAAM,MAAM,MAAO,CAAA,GAAA;AAEvB,EAAA,IAAI,CAAClD,eAAS,CAAA,GAAG,KAAK,CAACA,eAAA,CAAS,GAAG,CAAG,EAAA;AACpC,IAAA,IAAI,KAAM,CAAA,MAAA,IAAU,KAAM,CAAA,MAAA,CAAO,MAAQ,EAAA;AACvC,MAAM,MAAA,KAAA,GAAQ,WAAY,CAAA,EAAE,KAAO,EAAA,QAAA,EAAU,CAAC,SAAA,CAAU,GAAK,EAAA,SAAA,CAAU,GAAG,CAAA,EAAG,CAAA;AAC7E,MAAI,IAAA,CAACA,eAAS,CAAA,GAAG,CAAG,EAAA;AAClB,QAAM,GAAA,GAAA,KAAA,CAAM,UAAU,GAAG,CAAA;AAAA;AAE3B,MAAI,IAAA,CAACA,eAAS,CAAA,GAAG,CAAG,EAAA;AAClB,QAAM,GAAA,GAAA,KAAA,CAAM,UAAU,GAAG,CAAA;AAAA;AAC3B,KACK,MAAA;AACL,MAAM,GAAA,GAAA,CAAA;AACN,MAAM,GAAA,GAAA,GAAA;AAAA;AACR;AAGF,EAAO,OAAA;AAAA,IACL,GAAA;AAAA,IACA,GAAA;AAAA,IACA,OAAO,GAAO,GAAA;AAAA,GAChB;AACF;AAKgB,SAAA,wBAAA,CAAyB,OAAc,KAA8B,EAAA;AA3GrF,EAAA,IAAA,EAAA;AA4GE,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA;AACnB,EAAI,IAAA,EAAE,GAAK,EAAA,GAAA,EAAQ,GAAA,MAAA;AAEnB,EAAA,IAAIA,eAAS,CAAA,GAAG,CAAK,IAAAA,eAAA,CAAS,GAAG,CAAG,EAAA;AAClC,IAAO,OAAA,MAAA;AAAA;AAGT,EAAA,IAAI,KAAS,IAAA,EAAA,CAAC,EAAM,GAAA,KAAA,CAAA,KAAA,KAAN,mBAAa,KAAO,CAAA,EAAA;AAChC,IAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,GAAG,iBAAA,CAAkB,KAAK,CAAE,EAAA;AAAA;AAGlD,EAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,GAAG,KAAA,CAAM,MAAM,KAAM,EAAA;AAC3C;;AC5Fa,MAAA,sBAAA,GAAyB,IAAI,QAAA,CAAyB,MAAM;AACvE,EAAO,OAAA;AAAA,IACL;AAAA,MACE,IAAI,gBAAiB,CAAA,KAAA;AAAA,MACrB,IAAM,EAAA,cAAA;AAAA,MACN,WAAa,EAAA,sBAAA;AAAA,MACb,aAAe,EAAA;AAAA,KACjB;AAAA,IACA;AAAA,MACE,IAAI,gBAAiB,CAAA,MAAA;AAAA,MACrB,IAAM,EAAA,mBAAA;AAAA,MACN,WAAa,EAAA,mCAAA;AAAA,MACb,aAAe,EAAA;AAAA,KACjB;AAAA,IACA;AAAA,MACE,IAAI,gBAAiB,CAAA,UAAA;AAAA,MACrB,IAAM,EAAA,iBAAA;AAAA,MACN,SAAW,EAAA,IAAA;AAAA,MACX,WAAa,EAAA,+BAAA;AAAA,MACb,aAAA,EAAe,CAAC,MAAA,EAAQ,KAAU,KAAA;AAChC,QAAO,OAAA,CAAC,MAAQ,EAAA,QAAA,EAAU,SAAc,KAAA;AACtC,UAAA,MAAM,gBAAgB,SAAa,IAAA,IAAA,GAAA,SAAA,GAAA,iBAAA;AACnC,UAAA,OAAO,KAAM,CAAA,aAAA,CAAc,cAAe,CAAA,aAAA,CAAc,KAAK,CAAA;AAAA,SAC/D;AAAA;AACF,KACF;AAAA,IACA,IAAI,oBAAqB,CAAA;AAAA,MACvB,IAAI,gBAAiB,CAAA,cAAA;AAAA,MACrB,IAAM,EAAA,iBAAA;AAAA,MACN,YAAc,EAAA,KAAA;AAAA,MACd,SAAW,EAAA,KAAA;AAAA,MACX,SAAA,EAAW,CAAC,KAAyB,KAAA;AACnC,QAAA,OAAO,MAAM,aAAc,CAAA,OAAA;AAAA;AAC7B,KACD,CAAA;AAAA,IACD,IAAI,oBAAqB,CAAA;AAAA,MACvB,IAAI,gBAAiB,CAAA,oBAAA;AAAA,MACrB,IAAM,EAAA,kCAAA;AAAA,MACN,YAAc,EAAA,KAAA;AAAA,MACd,SAAW,EAAA,KAAA;AAAA,MACX,aAAe,EAAA,IAAA;AAAA,MACf,SAAA,EAAW,CAAC,KAAyB,KAAA;AACnC,QAAO,OAAA,KAAA,CAAM,cAAc,OAAQ,CAAA,MAAA;AAAA,UACjC,CAAC,KAAA,KACC,gBAAiB,CAAA,KAAA,CAAM,cAAc,cAAe,CAAA,KAAK,CAAG,EAAA,KAAA,CAAM,MAAO,CAAA,UAAA,CAAW,OAAO,CAAA,IAC3F,MAAM,MAAO,CAAA;AAAA,SACjB;AAAA;AACF,KACD,CAAA;AAAA,IACD,IAAI,oBAAqB,CAAA;AAAA,MACvB,IAAI,gBAAiB,CAAA,gBAAA;AAAA,MACrB,IAAM,EAAA,kBAAA;AAAA,MACN,YAAc,EAAA,IAAA;AAAA,MACd,SAAW,EAAA,IAAA;AAAA,MACX,WAAW,CAAC,KAAA,KAAyB,CAAC,OAAA,EAAS,UAAU,KAAK;AAAA,KAC/D,CAAA;AAAA,IACD,IAAI,oBAAqB,CAAA;AAAA,MACvB,IAAI,gBAAiB,CAAA,gBAAA;AAAA,MACrB,IAAM,EAAA,kBAAA;AAAA,MACN,YAAc,EAAA,IAAA;AAAA,MACd,SAAW,EAAA,IAAA;AAAA,MACX,WAAW,CAAC,KAAA,KAAyB,CAAC,KAAA,EAAO,UAAU,OAAO;AAAA,KAC/D,CAAA;AAAA,IACD,IAAI,oBAAqB,CAAA;AAAA,MACvB,IAAI,gBAAiB,CAAA,gBAAA;AAAA,MACrB,IAAM,EAAA,iBAAA;AAAA,MACN,YAAc,EAAA,IAAA;AAAA,MACd,SAAW,EAAA,IAAA;AAAA,MACX,WAAW,CAAC,KAAA,KAAyB,CAAC,WAAA,EAAa,sBAAsB,UAAU;AAAA,KACpF,CAAA;AAAA,IACD,IAAI,oBAAqB,CAAA;AAAA,MACvB,IAAI,gBAAiB,CAAA,cAAA;AAAA,MACrB,IAAM,EAAA,YAAA;AAAA,MACN,YAAc,EAAA,IAAA;AAAA,MACd,SAAW,EAAA,IAAA;AAAA,MACX,SAAW,EAAA,CAAC,KAAyB,KAAA,CAAC,sBAAsB,UAAU;AAAA,KACvE,CAAA;AAAA,IACD,IAAI,oBAAqB,CAAA;AAAA,MACvB,IAAI,gBAAiB,CAAA,cAAA;AAAA,MACrB,IAAM,EAAA,aAAA;AAAA,MACN,YAAc,EAAA,IAAA;AAAA,MACd,SAAW,EAAA,IAAA;AAAA,MACX,SAAW,EAAA,CAAC,KAAyB,KAAA,CAAC,QAAQ,QAAQ;AAAA,KACvD,CAAA;AAAA,IACD,IAAI,oBAAqB,CAAA;AAAA,MACvB,IAAI,gBAAiB,CAAA,cAAA;AAAA,MACrB,IAAM,EAAA,aAAA;AAAA,MACN,YAAc,EAAA,IAAA;AAAA,MACd,SAAW,EAAA,IAAA;AAAA,MACX,SAAW,EAAA,CAAC,KAAyB,KAAA,CAAC,sBAAsB,WAAW;AAAA,KACxE,CAAA;AAAA,IACD,IAAI,oBAAqB,CAAA;AAAA,MACvB,IAAI,gBAAiB,CAAA,eAAA;AAAA,MACrB,IAAM,EAAA,OAAA;AAAA,MACN,YAAc,EAAA,IAAA;AAAA,MACd,SAAW,EAAA,IAAA;AAAA,MACX,SAAW,EAAA,CAAC,KAAyB,KAAA,CAAC,YAAY,WAAW;AAAA,KAC9D,CAAA;AAAA,IACD,IAAI,oBAAqB,CAAA;AAAA,MACvB,IAAI,gBAAiB,CAAA,cAAA;AAAA,MACrB,IAAM,EAAA,MAAA;AAAA,MACN,YAAc,EAAA,IAAA;AAAA,MACd,SAAW,EAAA,IAAA;AAAA,MACX,SAAW,EAAA,CAAC,KAAyB,KAAA,CAAC,YAAY,UAAU;AAAA,KAC7D,CAAA;AAAA,IACD,IAAI,oBAAqB,CAAA;AAAA,MACvB,IAAI,gBAAiB,CAAA,gBAAA;AAAA,MACrB,IAAM,EAAA,QAAA;AAAA,MACN,YAAc,EAAA,IAAA;AAAA,MACd,SAAW,EAAA,IAAA;AAAA,MACX,SAAW,EAAA,CAAC,KAAyB,KAAA,CAAC,YAAY,YAAY;AAAA,KAC/D,CAAA;AAAA,IACD,IAAI,oBAAqB,CAAA;AAAA,MACvB,IAAI,gBAAiB,CAAA,iBAAA;AAAA,MACrB,IAAM,EAAA,SAAA;AAAA,MACN,YAAc,EAAA,IAAA;AAAA,MACd,SAAW,EAAA,IAAA;AAAA,MACX,SAAW,EAAA,CAAC,KAAyB,KAAA,CAAC,YAAY,aAAa;AAAA,KAChE;AAAA,GACH;AACF,CAAC;AAYM,MAAM,oBAA+C,CAAA;AAAA,EAY1D,YAAY,OAAsC,EAAA;AAChD,IAAA,IAAA,CAAK,KAAK,OAAQ,CAAA,EAAA;AAClB,IAAA,IAAA,CAAK,OAAO,OAAQ,CAAA,IAAA;AACpB,IAAA,IAAA,CAAK,cAAc,OAAQ,CAAA,WAAA;AAC3B,IAAA,IAAA,CAAK,iBAAiB,OAAQ,CAAA,SAAA;AAC9B,IAAA,IAAA,CAAK,eAAe,OAAQ,CAAA,YAAA;AAC5B,IAAA,IAAA,CAAK,YAAY,OAAQ,CAAA,SAAA;AACzB,IAAA,IAAA,CAAK,gBAAgB,OAAQ,CAAA,aAAA;AAAA;AAC/B,EAEA,UAAU,KAAgC,EAAA;AACxC,IAAI,IAAA,CAAC,KAAK,cAAgB,EAAA;AACxB,MAAA,OAAO,EAAC;AAAA;AAGV,IAAA,IAAI,IAAK,CAAA,UAAA,IAAc,IAAK,CAAA,eAAA,KAAoB,KAAO,EAAA;AACrD,MAAA,OAAO,IAAK,CAAA,UAAA;AAAA;AAGd,IAAK,IAAA,CAAA,UAAA,GAAa,KAAK,cAAe,CAAA,KAAK,EAAE,GAAI,CAAA,KAAA,CAAM,cAAc,cAAc,CAAA;AACnF,IAAA,IAAA,CAAK,eAAkB,GAAA,KAAA;AAEvB,IAAA,OAAO,IAAK,CAAA,UAAA;AAAA;AACd,EAEQ,eAAkB,GAAA;AACxB,IAAI,IAAA,CAAC,KAAK,YAAc,EAAA;AACtB,MAAK,IAAA,CAAA,YAAA,GAAemD,iCAAoB,CAAA,IAAA,CAAK,UAAW,CAAA;AAAA;AAG1D,IAAA,OAAO,IAAK,CAAA,YAAA;AAAA;AACd,EAEA,aAAA,CAAc,OAAc,KAAsB,EAAA;AAChD,IAAM,MAAA,MAAA,GAAS,IAAK,CAAA,SAAA,CAAU,KAAK,CAAA;AAEnC,IAAA,IAAI,KAAK,SAAW,EAAA;AAClB,MAAA,IAAI,KAAK,YAAc,EAAA;AACrB,QAAO,OAAA,CAAC,CAAW,EAAA,OAAA,EAAiB,UAA2B,KAAA;AAC7D,UAAO,OAAA,IAAA,CAAK,eAAgB,EAAA,CAAE,OAAO,CAAA;AAAA,SACvC;AAAA,OACK,MAAA;AACL,QAAO,OAAA,CAAC,CAAW,EAAA,OAAA,EAAiB,UAA2B,KAAA;AAC7D,UAAA,OAAO,MAAO,CAAA,OAAA,IAAW,MAAO,CAAA,MAAA,GAAS,CAAE,CAAA,CAAA;AAAA,SAC7C;AAAA;AACF,KACF,MAAA,IAAW,KAAK,aAAe,EAAA;AAC7B,MAAO,OAAA,CAAC,CAAW,EAAA,QAAA,EAAkB,UAA2B,KAAA;AA3NtE,QAAA,IAAA,EAAA,EAAA,EAAA;AA4NQ,QAAA,OAAO,MAAO,CAAA,IAAA,CAAK,GAAI,CAAAC,2BAAA,CAAA,CAAW,iBAAM,KAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,WAAb,KAAA,IAAA,GAAA,EAAA,GAA4B,KAAM,CAAA,IAAI,CAAC,CAAA,GAAI,OAAO,MAAM,CAAA;AAAA,OAC5F;AAAA,KACK,MAAA;AACL,MAAO,OAAA,CAAC,CAAW,EAAA,QAAA,EAAkB,UAA2B,KAAA;AA/NtE,QAAA,IAAA,EAAA,EAAA,EAAA;AAgOQ,QAAA,MAAM,WAAc,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,KAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,gBAAb,IAA4B,GAAA,EAAA,GAAA,CAAA;AAChD,QAAO,OAAA,MAAA,CAAO,WAAc,GAAA,MAAA,CAAO,MAAM,CAAA;AAAA,OAC3C;AAAA;AACF;AAEJ;AAGO,SAAS,0BAA0B,KAA8B,EAAA;AAxOxE,EAAA,IAAA,EAAA,EAAA,EAAA;AAyOE,EAAO,OAAA,sBAAA,CAAuB,KAAI,EAAM,GAAA,CAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAO,UAAb,IAAoB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,KAApB,IAA4B,GAAA,EAAA,GAAA,gBAAA,CAAiB,UAAU,CAAA;AAC3F;AAGO,SAAS,kBAAkB,IAAkD,EAAA;AAClF,EAAA,OAAO,sBAAuB,CAAA,GAAA,CAAI,IAAQ,IAAA,IAAA,GAAA,IAAA,GAAA,gBAAA,CAAiB,UAAU,CAAA;AACvE;AAOgB,SAAA,mBAAA,CAAoB,OAAc,KAAuC,EAAA;AAtPzF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAuPE,EAAM,MAAA,IAAA,GAAO,0BAA0B,KAAK,CAAA;AAE5C,EAAI,IAAA,CAAC,KAAK,SAAW,EAAA;AACnB,IAAO,OAAA;AAAA,MACL,OAAO,IAAK,CAAA,aAAA,CAAc,OAAO,KAAK,CAAA,CAAE,GAAG,CAAC,CAAA;AAAA,MAC5C,SAAW,EAAA,iBAAA;AAAA,MACX,OAAS,EAAA;AAAA,KACX;AAAA;AAGF,EAAM,MAAA,KAAA,GAAQ,kBAAmB,CAAA,KAAA,EAAO,KAAK,CAAA;AAC7C,EAAA,MAAM,QAAO,EAAM,GAAA,CAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAO,KAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAoB,aAApB,IAAgC,GAAA,EAAA,GAAA,MAAA;AAC7C,EAAM,MAAA,KAAA,GAAQ,YAAY,EAAE,KAAA,EAAO,UAAU,CAAC,IAAI,GAAG,CAAA;AACrD,EAAA,MAAM,KAAQ,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAI,CAAA,KAAV,IAAe,GAAA,EAAA,GAAA,CAAA;AAE7B,EAAA,OAAO,MAAM,KAAK,CAAA;AACpB;AAEA,SAAS,aAAA,CAAc,OAAc,KAAsB,EAAA;AACzD,EAAA,OAAO,MAAM;AA1Qf,IAAA,IAAA,EAAA,EAAA,EAAA;AA2QI,IAAO,OAAA,KAAA,CAAM,cAAc,cAAe,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,OAAO,KAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAoB,UAApB,KAAA,IAAA,GAAA,EAAA,GAAkC,cAAc,CAAA;AAAA,GAC5F;AACF;AAEA,SAAS,cAAA,CAAe,OAAc,KAAsB,EAAA;AAC1D,EAAA,OAAO,MAAM;AAhRf,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAiRI,IAAM,MAAA,eAAA,GAA0B,MAAM,aAAc,CAAA,cAAA;AAAA,MAAA,CAClD,EAAM,GAAA,CAAA,EAAA,GAAA,KAAA,CAAA,MAAA,CAAO,KAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAoB,eAApB,IAAkC,GAAA,EAAA,GAAA;AAAA,KACpC;AAEA,IAAA,MAAM,MAAmB,GAAA;AAAA,MACvB;AAAA;AAAA,KACF;AAEA,IAAA,MAAM,WAAc,GAAA,CAAA;AACpB,IAAA,MAAM,UAAa,GAAA,EAAA;AACnB,IAAA,MAAM,SAAY,GAAA,EAAA;AAClB,IAAA,MAAM,WAAc,GAAA,EAAA;AAEpB,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,WAAA,EAAa,CAAK,EAAA,EAAA;AAEpC,MAAO,MAAA,CAAA,IAAA;AAAA,QACLL,0BAAU,CAAA,eAAe,CACtB,CAAA,IAAA,CAAM,CAAI,GAAA,WAAA,GAAe,UAAU,CAAA,CACnC,QAAU,CAAA,CAAA,GAAI,WAAe,GAAA,SAAS,EACtC,WAAY;AAAA,OACjB;AACA,MAAO,MAAA,CAAA,IAAA;AAAA,QACLA,0BAAU,CAAA,eAAe,CACtB,CAAA,IAAA,CAAK,EAAE,CAAI,GAAA,WAAA,CAAA,GAAe,UAAU,CAAA,CACpC,MAAQ,CAAA,CAAA,GAAI,WAAe,GAAA,WAAW,EACtC,WAAY;AAAA,OACjB;AAAA;AAGF,IAAA,MAAM,WAAc,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,KAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,gBAAb,IAA4B,GAAA,EAAA,GAAA,CAAA;AAChD,IAAO,OAAA,MAAA,CAAO,WAAc,GAAA,MAAA,CAAO,MAAM,CAAA;AAAA,GAC3C;AACF;;AC9SO,MAAM,mCAAmC,QAAkC,CAAA;AAAC;;ACmBnF,SAAS,SAAA,CAAU,MAAc,KAAwC,EAAA;AACvE,EAAA,IAAI,SAAS,MAAO,CAAA,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,CAAG,EAAA;AAC1C,IAAQ,IAAA,IAAA,GAAA,GAAM,YAAY,KAAK,CAAA;AAAA;AAEjC,EAAO,OAAA,IAAA;AACT;AAEA,SAAS,6BAAA,CAA8B,KAA+B,eAA2B,EAAA;AAC/F,EAAA,OAAO,kBAAmB,CAAA,GAAG,CAC1B,CAAA,OAAA,CAAQ,SAAS,GAAG,CAAA,CACpB,OAAQ,CAAA,OAAA,EAAS,GAAG,CAAA,CACpB,OAAQ,CAAA,MAAA,EAAQ,GAAG,CACnB,CAAA,OAAA,CAAQ,OAAS,EAAA,GAAG,CACpB,CAAA,OAAA,CAAQ,OAAS,EAAA,GAAG,EACpB,OAAQ,CAAA,MAAA,EAAQ,eAAkB,GAAA,KAAA,GAAQ,GAAG,CAAA,CAC7C,OAAQ,CAAA,UAAA,EAAY,SAAU,CAAG,EAAA;AAChC,IAAO,OAAA,GAAA,GAAM,EAAE,UAAW,CAAA,CAAC,EAAE,QAAS,CAAA,EAAE,EAAE,WAAY,EAAA;AAAA,GACvD,CAAA;AACL;AAOA,SAAS,WAAA,CAAY,CAAQ,EAAA,iBAAA,GAAoB,IAAM,EAAA;AACrD,EAAA,MAAM,IAAW,EAAC;AAClB,EAAA,MAAM,QAAW,GAAA,OAAA;AAEjB,EAAA,MAAM,gBAAmB,GAAA,iBAAA,GACrB,CAAC,KAAA,EAAiC,eAChC,KAAA,6BAAA,CAA8B,KAAO,EAAA,eAAe,CACtD,GAAA,CAAC,KAAiC,EAAA,CAAA,KAAe,mBAAmB,KAAK,CAAA;AAE7E,EAAM,MAAA,OAAA,GAAU,CAAC,GAAiB,KAAA;AAChC,IAAA,OAAO,MAAO,CAAA,SAAA,CAAU,QAAS,CAAA,IAAA,CAAK,GAAG,CAAM,KAAA,gBAAA;AAAA,GACjD;AAEA,EAAM,MAAA,GAAA,GAAM,CAAC,CAAA,EAAW,CAAW,KAAA;AACjC,IAAI,CAAA,GAAA,OAAO,CAAM,KAAA,UAAA,GAAa,CAAE,EAAA,GAAI,MAAM,IAAO,GAAA,EAAA,GAAK,CAAM,KAAA,KAAA,CAAA,GAAY,EAAK,GAAA,CAAA;AAC7E,IAAI,IAAA,OAAO,MAAM,SAAW,EAAA;AAC1B,MAAE,CAAA,CAAA,CAAA,CAAE,MAAM,CAAA,GAAI,gBAAiB,CAAA,CAAA,EAAG,IAAI,CAAI,GAAA,GAAA,GAAM,gBAAiB,CAAA,CAAA,EAAG,IAAI,CAAA;AAAA,KACnE,MAAA;AACL,MAAA,MAAM,iBAAiB,CAAI,GAAA,EAAA,GAAK,GAAM,GAAA,gBAAA,CAAiB,SAAS,IAAI,CAAA;AACpE,MAAA,CAAA,CAAE,EAAE,MAAM,CAAA,GAAI,gBAAiB,CAAA,CAAA,EAAG,IAAI,CAAI,GAAA,cAAA;AAAA;AAC5C,GACF;AAEA,EAAM,MAAA,WAAA,GAAc,CAAC,MAAA,EAAgB,GAAa,KAAA;AAChD,IAAA,IAAI,GAAG,GAAK,EAAA,GAAA;AAEZ,IAAA,IAAI,MAAQ,EAAA;AACV,MAAI,IAAA,OAAA,CAAQ,GAAG,CAAG,EAAA;AAChB,QAAA,KAAK,IAAI,CAAG,EAAA,GAAA,GAAM,IAAI,MAAQ,EAAA,CAAA,GAAI,KAAK,CAAK,EAAA,EAAA;AAC1C,UAAI,IAAA,QAAA,CAAS,IAAK,CAAA,MAAM,CAAG,EAAA;AACzB,YAAI,GAAA,CAAA,MAAA,EAAQ,GAAI,CAAA,CAAC,CAAC,CAAA;AAAA,WACb,MAAA;AACL,YAAY,WAAA,CAAA,MAAA,EAAQ,GAAI,CAAA,CAAC,CAAC,CAAA;AAAA;AAC5B;AACF,OACS,MAAA,IAAA,GAAA,IAAO,MAAO,CAAA,GAAG,MAAM,iBAAmB,EAAA;AACnD,QAAA,KAAK,OAAO,GAAK,EAAA;AACf,UAAA,WAAA,CAAY,SAAS,GAAM,GAAA,GAAA,GAAM,GAAK,EAAA,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA;AAChD,OACK,MAAA;AACL,QAAA,GAAA,CAAI,QAAQ,GAAG,CAAA;AAAA;AACjB,KACF,MAAA,IAAW,OAAQ,CAAA,GAAG,CAAG,EAAA;AACvB,MAAA,KAAK,IAAI,CAAG,EAAA,GAAA,GAAM,IAAI,MAAQ,EAAA,CAAA,GAAI,KAAK,CAAK,EAAA,EAAA;AAC1C,QAAA,GAAA,CAAI,IAAI,CAAC,CAAA,CAAE,MAAM,GAAI,CAAA,CAAC,EAAE,KAAK,CAAA;AAAA;AAC/B,KACK,MAAA;AACL,MAAA,KAAK,OAAO,GAAK,EAAA;AACf,QAAY,WAAA,CAAA,GAAA,EAAK,GAAI,CAAA,GAAG,CAAC,CAAA;AAAA;AAC3B;AAEF,IAAO,OAAA,CAAA;AAAA,GACT;AAEA,EAAA,OAAO,WAAY,CAAA,EAAA,EAAI,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AACpC;AAQA,SAAS,gBAAgB,MAAyB,EAAA;AAChD,EAAO,OAAA,WAAA,CAAY,QAAQ,KAAK,CAAA;AAClC;AAEA,SAAS,gBAAA,CAAiB,KAAa,cAAwB,EAAA;AAC7D,EAAA,IAAI,cAAmB,KAAA,KAAA,CAAA,IAAa,cAAmB,KAAA,IAAA,IAAQ,mBAAmB,EAAI,EAAA;AACpF,IAAM,MAAA,GAAA,GAAM,GAAI,CAAA,OAAA,CAAQ,GAAG,CAAA;AAC3B,IAAA,IAAI,QAAQ,CAAI,CAAA,EAAA;AACd,MAAI,IAAA,GAAA,CAAI,MAAS,GAAA,GAAA,GAAM,CAAG,EAAA;AACxB,QAAO,GAAA,IAAA,GAAA;AAAA;AACT,KACK,MAAA;AACL,MAAO,GAAA,IAAA,GAAA;AAAA;AAET,IAAO,GAAA,IAAA,cAAA;AAAA;AAGT,EAAO,OAAA,GAAA;AACT;AAKA,SAAS,kBAAkC,GAAA;AACzC,EAAA,MAAM,MAAS,GAAA,MAAA,CAAO,QAAS,CAAA,MAAA,CAAO,UAAU,CAAC,CAAA;AACjD,EAAM,MAAA,oBAAA,GAAuB,MAAO,CAAA,KAAA,CAAM,GAAG,CAAA;AAC7C,EAAA,MAAM,SAAsB,EAAC;AAC7B,EAAA,KAAA,MAAW,KAAK,oBAAsB,EAAA;AACpC,IAAM,MAAA,YAAA,GAAe,CAAE,CAAA,KAAA,CAAM,GAAG,CAAA;AAChC,IAAI,IAAA,YAAA,CAAa,SAAS,CAAG,EAAA;AAE3B,MAAA,MAAM,GAAM,GAAA,kBAAA,CAAmB,YAAa,CAAA,CAAC,CAAC,CAAA;AAC9C,MAAA,MAAM,KAAQ,GAAA,kBAAA,CAAmB,YAAa,CAAA,CAAC,CAAC,CAAA;AAChD,MAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,QAAA,MAAA,CAAO,GAAG,CAAI,GAAA,CAAC,GAAI,MAAO,CAAA,GAAG,GAAa,KAAK,CAAA;AAAA,OAC1C,MAAA;AACL,QAAO,MAAA,CAAA,GAAG,CAAI,GAAA,CAAC,KAAK,CAAA;AAAA;AACtB,KACF,MAAA,IAAW,YAAa,CAAA,MAAA,KAAW,CAAG,EAAA;AAEpC,MAAA,MAAM,GAAM,GAAA,kBAAA,CAAmB,YAAa,CAAA,CAAC,CAAC,CAAA;AAC9C,MAAA,MAAA,CAAO,GAAG,CAAI,GAAA,IAAA;AAAA;AAChB;AAEF,EAAO,OAAA,MAAA;AACT;AAOO,SAAS,cAAc,QAAkB,EAAA;AAC9C,EAAA,MAAM,MAAW,EAAC;AAClB,EAAA,MAAM,KAAS,GAAA,CAAA,QAAA,IAAY,EAAI,EAAA,KAAA,CAAM,GAAG,CAAA;AAExC,EAAA,KAAA,IAASM,aAAY,KAAO,EAAA;AAC1B,IAAI,IAAA,UAAA;AACJ,IAAI,IAAA,GAAA;AACJ,IAAI,IAAA,GAAA;AAEJ,IAAA,IAAIA,SAAU,EAAA;AACZ,MAAA,GAAA,GAAMA,SAAWA,GAAAA,SAAAA,CAAS,OAAQ,CAAA,KAAA,EAAO,KAAK,CAAA;AAC9C,MAAaA,UAAAA,GAAAA,SAAAA,CAAS,QAAQ,GAAG,CAAA;AAEjC,MAAA,IAAI,eAAe,CAAI,CAAA,EAAA;AACrB,QAAMA,GAAAA,GAAAA,SAAAA,CAAS,SAAU,CAAA,CAAA,EAAG,UAAU,CAAA;AACtC,QAAMA,GAAAA,GAAAA,SAAAA,CAAS,SAAU,CAAA,UAAA,GAAa,CAAC,CAAA;AAAA;AAGzC,MAAA,GAAA,GAAM,sBAAsB,GAAG,CAAA;AAE/B,MAAA,IAAI,QAAQ,KAAW,CAAA,EAAA;AACrB,QAAA,GAAA,GAAM,GAAQ,KAAA,KAAA,CAAA,GAAY,qBAAsB,CAAA,GAAa,CAAI,GAAA,IAAA;AAEjE,QAAI,IAAA,SAAA;AACJ,QAAA,IAAI,OAAO,GAAA,KAAQ,QAAY,IAAA,GAAA,KAAQ,EAAI,EAAA;AACzC,UAAA,SAAA,GAAY,GAAQ,KAAA,MAAA,IAAU,GAAQ,KAAA,OAAA,GAAU,QAAQ,MAAS,GAAA,GAAA;AAAA,SAC5D,MAAA;AACL,UAAY,SAAA,GAAA,GAAA;AAAA;AAGd,QAAA,IAAI,CAAC,GAAA,CAAI,cAAe,CAAA,GAAG,CAAG,EAAA;AAC5B,UAAA,GAAA,CAAI,GAAG,CAAA,GAAI,KAAM,CAAA,SAAS,IAAI,GAAM,GAAA,SAAA;AAAA,mBAC3B,KAAM,CAAA,OAAA,CAAQ,GAAI,CAAA,GAAG,CAAC,CAAG,EAAA;AAClC,UAAI,GAAA,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,GAAG,CAAA;AAAA,SACZ,MAAA;AACL,UAAI,GAAA,CAAA,GAAG,CAAI,GAAA,CAAC,GAAI,CAAA,GAAG,GAAG,KAAM,CAAA,SAAS,CAAI,GAAA,GAAA,GAAM,SAAS,CAAA;AAAA;AAC1D;AACF;AACF;AAGF,EAAO,OAAA,GAAA;AACT;AAEA,SAAS,sBAAsB,KAAmC,EAAA;AAChE,EAAI,IAAA;AACF,IAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,WACxB,CAAG,EAAA;AACV,IAAO,OAAA,KAAA,CAAA;AAAA;AAEX;AAEO,MAAM,OAAU,GAAA;AAAA,EACrB,SAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF;AAUgB,SAAA,wBAAA,CAAyB,UAAoC,OAA2B,EAAA;AACtG,EAAA,IAAI,YAAY,KAAW,CAAA,EAAA;AACzB,IAAA,OAAA,CAAQ,KAAK,2EAA2E,CAAA;AAAA;AAE1F,EAAO,OAAA,IAAA,CAAK,UAAU,QAAQ,CAAA;AAChC;AAOa,MAAA,UAAA,GAAa,CAAC,KAAkC,KAAA;AAC3D,EAAA,IAAI,OAAO,KAAM,CAAA,IAAA;AACjB,EAAI,IAAA,UAAA,CAAW,IAAI,CAAG,EAAA;AACpB,IAAO,IAAA,GAAA,IAAA,CAAK,OAAQ,EAAA,CAAE,QAAS,EAAA;AAAA;AAGjC,EAAA,IAAI,KAAK,KAAM,CAAA,EAAA;AACf,EAAI,IAAA,UAAA,CAAW,EAAE,CAAG,EAAA;AAClB,IAAK,EAAA,GAAA,EAAA,CAAG,OAAQ,EAAA,CAAE,QAAS,EAAA;AAAA;AAG7B,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA;AAAA,GACF;AACF;;ACzPA,IAAI,aAAA,GAAgB,EAAE,SAAA,EAAW,EAAG,EAAA;AACpC,IAAI,qBAAA;AACJ,IAAI,qBAAA;AAEJ,MAAM,aAAA,GAAgB,CAAC,KAAmC,KAAA;AACxD,EAAI,IAAA;AACF,IAAO,OAAA,IAAI,IAAI,KAAK,CAAA;AAAA,GACd,CAAA,OAAA,CAAA,EAAA;AACN,IAAO,OAAA,KAAA,CAAA;AAAA;AAEX,CAAA;AAOA,MAAM,gBAAA,GAAmB,CAAC,SAA8B,KAAA;AA1BxD,EAAA,IAAA,EAAA;AA4BE,EAAM,MAAA,SAAA,GAAY,cAAc,SAAS,CAAA;AACzC,EAAA,IAAI,SAAW,EAAA;AAGb,IAAA,IAAI,SAAU,CAAA,MAAA,KAAW,MAAO,CAAA,QAAA,CAAS,MAAQ,EAAA;AAC/C,MAAO,OAAA,SAAA;AAAA;AACT;AAGF,EAAM,MAAA,SAAA,GAAA,CAAY,EAAc,GAAA,aAAA,CAAA,SAAA,KAAd,IAA2B,GAAA,EAAA,GAAA,EAAA;AAC7C,EAAA,MAAM,eAAkB,GAAA,SAAA,CAAU,QAAS,CAAA,GAAG,IAAI,CAAI,GAAA,CAAA;AACtD,EAAM,MAAA,aAAA,GAAgB,SAAU,CAAA,UAAA,CAAW,MAAM,CAAA;AAEjD,EAAA,IAAI,cAAiB,GAAA,SAAA;AAErB,EAAA,IAAI,CAAC,SAAA,CAAU,UAAW,CAAA,GAAG,KAAK,aAAe,EAAA;AAC/C,IAAA,cAAA,GAAiB,CAAG,EAAA,MAAA,CAAO,QAAS,CAAA,MAAM,GAAG,SAAS,CAAA,CAAA;AAAA;AAMxD,EAAA,OAAO,UAAU,MAAS,GAAA,CAAA,KAAM,SAAU,CAAA,OAAA,CAAQ,iBAAiB,GAAG,CAAA,KAAM,CAAK,IAAA,SAAA,KAAc,kBAC3F,SAAU,CAAA,KAAA,CAAM,cAAe,CAAA,MAAA,GAAS,eAAe,CACvD,GAAA,SAAA;AACN,CAAA;AAOA,MAAM,aAAA,GAAgB,CAAC,GAAwB,KAAA;AAC7C,EAAI,IAAA,GAAA,CAAI,UAAW,CAAA,GAAG,CAAG,EAAA;AACvB,IAAA,OAAO,GAAG,aAAc,CAAA,SAAS,CAAG,EAAA,gBAAA,CAAiB,GAAG,CAAC,CAAA,CAAA;AAAA;AAE3D,EAAO,OAAA,GAAA;AACT,CAAA;AAQA,MAAM,gBAAA,GAAmB,CAAC,QAAA,EAAoB,oBAAsC,KAAA;AAClF,EAAA,MAAM,eAAe,OAAQ,CAAA,aAAA;AAAA,IAC3B,QAAA,CAAS,MAAO,CAAA,UAAA,CAAW,GAAG,CAAA,GAAI,SAAS,MAAO,CAAA,SAAA,CAAU,CAAC,CAAA,GAAI,QAAS,CAAA;AAAA,GAC5E;AACA,EAAA,KAAA,MAAW,OAAO,oBAAsB,EAAA;AAEtC,IAAA,IAAI,qBAAqB,GAAG,CAAA,KAAM,QAAQ,oBAAqB,CAAA,GAAG,MAAM,KAAW,CAAA,EAAA;AACjF,MAAA,OAAO,aAAa,GAAG,CAAA;AAAA,KAClB,MAAA;AACL,MAAa,YAAA,CAAA,GAAG,CAAI,GAAA,oBAAA,CAAqB,GAAG,CAAA;AAAA;AAC9C;AAEF,EAAA,OAAO,cAAc,OAAQ,CAAA,SAAA,CAAU,QAAS,CAAA,QAAA,EAAU,YAAY,CAAC,CAAA;AACzE,CAAA;AAMA,MAAM,kBAAA,GAAqB,CAAC,IAAA,EAAc,OAAoB,KAAA;AAC5D,EAAM,MAAA,eAAA,GAAkB,IAAI,eAAA,CAAgB,OAAO,CAAA;AAGnD,EAAI,IAAA;AACF,IAAM,MAAA,MAAA,GAAS,IAAI,GAAA,CAAI,IAAI,CAAA;AAC3B,IAAgB,eAAA,CAAA,OAAA,CAAQ,CAAC,GAAK,EAAA,GAAA,KAAQ,OAAO,YAAa,CAAA,GAAA,CAAI,GAAK,EAAA,GAAG,CAAC,CAAA;AACvE,IAAA,OAAO,MAAO,CAAA,IAAA;AAAA,GACR,CAAA,OAAA,CAAA,EAAA;AAEN,IAAM,MAAA,eAAA,GAAkB,IAAI,eAAA,CAAgB,IAAI,CAAA;AAChD,IAAgB,eAAA,CAAA,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAM,KAAA;AAChC,MAAgB,eAAA,CAAA,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,KACzB,CAAA;AACD,IAAO,OAAA,GAAA,GAAM,gBAAgB,QAAS,EAAA;AAAA;AAE1C,CAAA;AAQO,MAAM,YAAe,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ1B,UAAA,EAAY,CAAC,YAA2C,KAAA;AACtD,IAAA,aAAA,GAAgB,YAAa,CAAA,MAAA;AAC7B,IAAA,qBAAA,GAAwB,YAAa,CAAA,kBAAA;AACrC,IAAA,qBAAA,GAAwB,YAAa,CAAA,qBAAA;AAAA,GACvC;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EACA,uBAAuB,MAAM;AAC3B,IAAA,IAAI,CAAC,qBAAuB,EAAA;AAC1B,MAAO,OAAA,IAAA;AAAA;AAET,IAAO,OAAA,OAAA,CAAQ,WAAY,CAAA,qBAAA,EAAuB,CAAA;AAAA,GACpD;AAAA,EACA,qBAAA,EAAuB,CAAC,UAA4B,KAAA;AAClD,IAAA,IAAI,CAAC,qBAAuB,EAAA;AAC1B,MAAO,OAAA,IAAA;AAAA;AAET,IAAM,MAAA,MAAA,GAAS,sBAAsB,UAAU,CAAA;AAC/C,IAAO,OAAA,OAAA,CAAQ,YAAY,MAAM,CAAA;AAAA,GACnC;AAAA,EACA,gBAAA;AAAA,EACA,UAAA,EAAY,CAAC,GAAgB,KAAA;AAC3B,IAAA,OAAO,aAAc,CAAA,mBAAA,GAAsB,GAAM,GAAA,QAAA,CAAS,YAAY,GAAG,CAAA;AAAA;AAE7E;;AC1IO,MAAM,mBAAsB,GAAA;AAAA,EACjC,QAAU,EAAA,kBAAA;AAAA,EACV,aAAe,EAAA,QAAA;AAAA,EACf,WAAa,EAAA,MAAA;AAAA,EACb,WAAa,EAAA,iBAAA;AAAA,EACb,UAAY,EAAA,eAAA;AAAA,EACZ,SAAW,EAAA,cAAA;AAAA,EACX,SAAW,EAAA,cAAA;AAAA,EACX,YAAc,EAAA,iBAAA;AAAA,EACd,SAAW,EAAA,cAAA;AAAA,EACX,QAAU,EAAA,aAAA;AAAA;AAAA,EAEV,SAAW,EAAA;AACb;AAaO,SAAS,yBAAyB,OAAiD,EAAA;AArC1F,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAsCE,EAAM,MAAA,EAAE,WAAW,gBAAkB,EAAA,IAAA,EAAM,YAAY,KAAO,EAAA,KAAA,EAAO,cAAiB,GAAA,OAAA;AAEtF,EAAA,MAAM,KACJ,GAAA,QAAA,CAAO,EAAK,GAAA,IAAA,CAAA,QAAA,KAAL,mBAAe,KAAU,CAAA,KAAA,UAAA,GAC5B,IAAK,CAAA,QAAA,CAAS,MAAM,EAAE,gBAAA,EAAkB,UAAW,EAAC,IACpD,YAAa,CAAA,KAAA;AACnB,EAAA,MAAM,iBAAoB,GAAA,iBAAA,CAAkB,KAAO,EAAA,UAAA,EAAY,gBAAgB,CAAA;AAC/E,EAAA,MAAM,0BAA0B,iBAAkB,CAAA,CAAA,EAAA,GAAA,IAAA,CAAK,aAAL,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAA,EAAa,YAAY,gBAAgB,CAAA;AAC1G,EAAA,MAAM,8BAA8B,iBAAkB,CAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAL,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,eAAA,EAAiB,YAAY,gBAAgB,CAAA;AAC9G,EAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,KAAQ,GAAA,IAAA,CAAK,QAAQ,YAAa,CAAA,cAAA;AAErD,EAAO,OAAA;AAAA,IACL,KAAA,EAAO,gBAAiB,CAAA,KAAA,EAAO,UAAU,CAAA;AAAA;AAAA;AAAA,IAGzC,MAAM,oBAAqB,CAAA,YAAA,CAAa,aAAe,EAAA,iBAAA,EAAmB,OAAO,uBAAuB,CAAA;AAAA,IACxG,OAAA,EAAS,SACL,GAAA,CAAC,KAAU,KAAA;AAIT,MAAA,IAAI,MAAM,cAAgB,EAAA;AACxB,QAAA,KAAA,CAAM,cAAe,EAAA;AAAA;AAGvB,MAAU,SAAA,CAAA;AAAA,QACR,eAAe,YAAa,CAAA,aAAA;AAAA,QAC5B,OAAA,EAAS,CAAC,iBAAiB,CAAA;AAAA,QAC3B,WAAa,EAAA,uBAAA;AAAA,QACb,qBAAuB,EAAA,2BAAA;AAAA,QACvB;AAAA,OACD,CAAA;AAAA,KAEH,GAAA,KAAA,CAAA;AAAA,IACJ,MAAA,EAAA,CAAQ,IAAM,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,WAAA,IAAc,QAAW,GAAA,OAAA;AAAA,IACvC,MAAQ,EAAA;AAAA,GACV;AACF;AAKA,SAAS,oBACP,CAAA,aAAA,EACA,KACA,EAAA,KAAA,EACA,WACQ,EAAA;AACR,EAAA,OAAO,YAAa,CAAA,aAAA;AAAA,IAClB,CAAiB,cAAA,EAAA,kBAAA;AAAA,MACf,wBAAyB,CAAA;AAAA;AAAA;AAAA;AAAA,QAIvB,GAAA,CAAI,KAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAM,EAAE,KAAA,EAAO,WAAW,KAAM,CAAA,GAAG,CAAE,EAAA,GAAI,EAAC;AAAA,QACrD,UAAY,EAAA,aAAA;AAAA,QACZ,OAAA,EAAS,CAAC,KAAK,CAAA;AAAA,QACf;AAAA,OACD;AAAA,KACF,CAAA;AAAA,GACH;AACF;AAEA,SAAS,iBAAA,CACP,GACA,EAAA,UAAA,EACA,gBACe,EAAA;AACf,EAAA,IAAI,CAAC,GAAK,EAAA;AACR,IAAO,OAAA,GAAA;AAAA;AAET,EAAI,IAAA,OAAO,QAAQ,QAAU,EAAA;AAE3B,IAAO,OAAA,gBAAA,CAAiB,KAAK,UAAU,CAAA;AAAA;AAEzC,EAAA,MAAM,OAAO,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,SAAA,CAAU,GAAG,CAAC,CAAA;AAC3C,EAAO,OAAA,0BAAA,CAA2B,IAAM,EAAA,UAAA,EAAY,gBAAgB,CAAA;AACtE;AAEA,SAAS,0BAAA,CACP,GACA,EAAA,UAAA,EACA,gBACG,EAAA;AACH,EAAA,KAAA,MAAW,CAAK,IAAA,MAAA,CAAO,IAAK,CAAA,GAAG,CAAG,EAAA;AAGhC,IAAA,IAAI,OAAO,GAAA,CAAI,CAAC,CAAA,KAAM,QAAU,EAAA;AAE9B,MAAA,GAAA,CAAI,CAAC,CAAI,GAAA,gBAAA,CAAiB,GAAI,CAAA,CAAC,GAAG,UAAU,CAAA;AAAA,KAE9C,MAAA,IAAW,OAAO,GAAI,CAAA,CAAC,MAAM,QAAY,IAAA,GAAA,CAAI,CAAC,CAAA,KAAM,IAAM,EAAA;AAExD,MAAA,GAAA,CAAI,CAAC,CAAI,GAAA,0BAAA,CAA2B,IAAI,CAAC,CAAA,EAAG,YAAY,gBAAgB,CAAA;AAAA;AAC1E;AAEF,EAAO,OAAA,GAAA;AACT;;AC9EO,MAAM,eAAkB,GAAAC;AAQxB,MAAM,WAAc,GAAA;AAEpB,SAAS,mBAAiC,GAAA;AAC/C,EAAA,MAAM,MAAM,QAAS,EAAA;AAErB,EAAO,OAAA;AAAA,IACL,MAAM,QAAS,CAAA,GAAG,CAAE,CAAA,QAAA,CAAS,GAAG,MAAM,CAAA;AAAA,IACtC,EAAI,EAAA,GAAA;AAAA,IACJ,GAAK,EAAA,EAAE,IAAM,EAAA,QAAA,EAAU,IAAI,KAAM;AAAA,GACnC;AACF;AAOO,SAAS,2BAAiD,GAAA;AAC/D,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,GAAA;AAAA,IACN,EAAI,EAAA;AAAA,GACN;AACF;AAMgB,SAAA,aAAA,CAAc,MAAyB,EAAkC,EAAA;AACvF,EAAA,MAAM,eAAe,OAAO,IAAA,KAAS,QAAW,GAAA,QAAA,CAAS,IAAI,CAAI,GAAA,IAAA;AACjE,EAAA,MAAM,aAAa,OAAO,EAAA,KAAO,QAAW,GAAA,QAAA,CAAS,EAAE,CAAI,GAAA,EAAA;AAC3D,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,YAAA;AAAA,IACN,EAAI,EAAA,UAAA;AAAA,IACJ,GAAK,EAAA;AAAA,MACH,IAAM,EAAA,YAAA;AAAA,MACN,EAAI,EAAA;AAAA;AACN,GACF;AACF;;AC/DA,IAAI,0BAA4C,MAAM,eAAA;AAQzC,MAAA,mBAAA,GAAsB,CAAC,QAA+B,KAAA;AACjE,EAAA,uBAAA,GAA0B,QAAY,IAAA,IAAA,GAAA,QAAA,GAAA,uBAAA;AACxC;AASa,MAAA,WAAA,GAAc,CAA4B,OAA0B,KAAA;AA5DjF,EAAA,IAAA,EAAA;AA6DE,EAAA,IAAA,CAAI,mCAAS,QAAY,KAAA,CAACC,cAAQ,CAAA,OAAA,CAAQ,QAAQ,CAAG,EAAA;AACnD,IAAA,OAAO,OAAQ,CAAA,QAAA;AAAA;AAEjB,EAAO,OAAA,CAAA,EAAA,GAAA,uBAAA,OAAA,IAA6B,GAAA,EAAA,GAAA,eAAA;AACtC;;AClDA,MAAM,KAAA,GAAkB,CAAC,GAAK,EAAA,GAAA,EAAK,KAAK,GAAK,EAAA,GAAA,EAAK,GAAK,EAAA,GAAA,EAAK,GAAG,CAAA;AAE/D,MAAM,cAAA,GAAiB,CAAC,KAAyC,KAAA;AAC/D,EAAO,OAAA,KAAA,CAAM,SAAS,KAAK,CAAA;AAC7B,CAAA;AAMO,SAAS,aAAa,IAAyC,EAAA;AACpE,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,IAAI,OAAO,IAAA,KAAS,QAAa,KAAA,IAAA,CAAK,SAAU,CAAA,CAAA,EAAG,CAAC,CAAA,KAAM,KAAS,IAAA,IAAA,CAAK,QAAS,CAAA,IAAI,CAAI,CAAA,EAAA;AACvF,IAAO,OAAA,IAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,KAAA;AAAA;AAEX;AAUO,SAAS,KACd,CAAA,IAAA,EACA,OACA,EAAA,QAAA,EACA,oBACsB,EAAA;AACtB,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAO,OAAA,KAAA,CAAA;AAAA;AAET,EAAA,OAAO,WAAW,IAAM,EAAA,EAAE,OAAS,EAAA,QAAA,EAAU,sBAAsB,CAAA;AACrE;AA0BgB,SAAA,UAAA,CAAW,aAAuC,OAAkD,EAAA;AAClH,EAAI,IAAA,OAAO,gBAAgB,QAAU,EAAA;AACnC,IAAI,IAAA,UAAA,CAAW,WAAW,CAAG,EAAA;AAC3B,MAAO,OAAA,WAAA;AAAA;AAGT,IAAI,IAAAC,aAAA,CAAO,WAAW,CAAG,EAAA;AACvB,MAAA,OAAO,SAAS,WAAW,CAAA;AAAA;AAI7B,IAAO,OAAA,KAAA,CAAA;AAAA,GACF,MAAA;AACL,IAAI,IAAA,IAAA;AACJ,IAAA,IAAI,UAAa,GAAA,EAAA;AACjB,IAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AACZ,IAAA,IAAI,WAAc,GAAA,EAAA;AAElB,IAAA,IAAI,WAAY,CAAA,SAAA,CAAU,CAAG,EAAA,CAAC,MAAM,KAAO,EAAA;AACzC,MAAA,IAAA,GAAO,mBAAoB,CAAA,OAAA,CAAQ,QAAU,EAAA,OAAA,CAAQ,GAAG,CAAA;AACxD,MAAa,UAAA,GAAA,WAAA,CAAY,SAAU,CAAA,KAAA,CAAM,MAAM,CAAA;AAAA,KAC1C,MAAA;AACL,MAAQ,KAAA,GAAA,WAAA,CAAY,QAAQ,IAAI,CAAA;AAChC,MAAA,IAAI,UAAU,CAAI,CAAA,EAAA;AAChB,QAAc,WAAA,GAAA,WAAA;AACd,QAAa,UAAA,GAAA,EAAA;AAAA,OACR,MAAA;AACL,QAAc,WAAA,GAAA,WAAA,CAAY,SAAU,CAAA,CAAA,EAAG,KAAK,CAAA;AAC5C,QAAa,UAAA,GAAA,WAAA,CAAY,SAAU,CAAA,KAAA,GAAQ,CAAC,CAAA;AAAA;AAG9C,MAAO,IAAA,GAAA,QAAA,CAAS,aAAa,QAAQ,CAAA;AAAA;AAGvC,IAAI,IAAA,CAAC,WAAW,MAAQ,EAAA;AACtB,MAAO,OAAA,IAAA;AAAA;AAGT,IAAA,OAAO,cAAc,UAAY,EAAA,IAAA,EAAM,OAAQ,CAAA,OAAA,EAAS,QAAQ,oBAAoB,CAAA;AAAA;AAExF;AAOO,SAAS,QAAQ,IAAkC,EAAA;AACxD,EAAM,MAAA,IAAA,GAAO,MAAM,IAAI,CAAA;AACvB,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAO,OAAA,KAAA;AAAA;AAGT,EAAI,IAAA,UAAA,CAAW,IAAI,CAAG,EAAA;AACpB,IAAA,OAAO,KAAK,OAAQ,EAAA;AAAA;AAGtB,EAAO,OAAA,KAAA;AACT;AAQO,SAAS,aACd,CAAA,UAAA,EACA,IACA,EAAA,OAAA,EACA,uBAAuB,CACD,EAAA;AACtB,EAAA,MAAM,kBAAqB,GAAA,UAAA,CAAW,OAAQ,CAAA,KAAA,EAAO,EAAE,CAAA;AACvD,EAAM,MAAA,MAAA,GAAS,SAAS,IAAI,CAAA;AAC5B,EAAA,IAAI,CAAI,GAAA,CAAA;AACR,EAAA,MAAM,MAAM,kBAAmB,CAAA,MAAA;AAE/B,EAAA,OAAO,IAAI,GAAK,EAAA;AACd,IAAM,MAAA,CAAA,GAAI,kBAAmB,CAAA,MAAA,CAAO,CAAG,EAAA,CAAA;AACvC,IAAI,IAAA,IAAA;AACJ,IAAI,IAAA,GAAA;AACJ,IAAI,IAAA,UAAA;AACJ,IAAA,IAAI,QAAW,GAAA,KAAA;AAEf,IAAA,IAAI,MAAM,GAAK,EAAA;AACb,MAAO,IAAA,GAAA,CAAA;AAAA,KACT,MAAA,IAAW,MAAM,GAAK,EAAA;AACpB,MAAO,IAAA,GAAA,CAAA;AAAA,KACT,MAAA,IAAW,MAAM,GAAK,EAAA;AACpB,MAAO,IAAA,GAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAO,OAAA,KAAA,CAAA;AAAA;AAGT,IAAI,IAAA,KAAA,CAAM,SAAS,kBAAmB,CAAA,MAAA,CAAO,CAAC,CAAG,EAAA,EAAE,CAAC,CAAG,EAAA;AACrD,MAAM,GAAA,GAAA,CAAA;AAAA,KACR,MAAA,IAAW,kBAAmB,CAAA,MAAA,KAAW,CAAG,EAAA;AAC1C,MAAA,GAAA,GAAM,QAAS,CAAA,kBAAA,CAAmB,MAAO,CAAA,CAAC,GAAG,EAAE,CAAA;AAAA,KAC1C,MAAA;AACL,MAAA,MAAM,OAAU,GAAA,CAAA;AAChB,MAAO,OAAA,CAAC,MAAM,QAAS,CAAA,kBAAA,CAAmB,OAAO,CAAC,CAAA,EAAG,EAAE,CAAC,CAAG,EAAA;AACzD,QAAA,CAAA,EAAA;AACA,QAAA,IAAI,IAAI,EAAI,EAAA;AACV,UAAO,OAAA,KAAA,CAAA;AAAA;AACT;AAEF,MAAA,GAAA,GAAM,SAAS,kBAAmB,CAAA,SAAA,CAAU,OAAS,EAAA,CAAC,GAAG,EAAE,CAAA;AAAA;AAG7D,IAAA,IAAI,SAAS,CAAG,EAAA;AAEd,MAAA,IAAI,QAAQ,CAAG,EAAA;AACb,QAAO,OAAA,KAAA,CAAA;AAAA;AACT;AAGF,IAAa,UAAA,GAAA,kBAAA,CAAmB,OAAO,CAAG,EAAA,CAAA;AAE1C,IAAA,IAAI,eAAe,GAAK,EAAA;AACtB,MAAa,UAAA,GAAA,kBAAA,CAAmB,OAAO,CAAG,EAAA,CAAA;AAC1C,MAAW,QAAA,GAAA,IAAA;AAAA;AAGb,IAAA,MAAM,IAAO,GAAA,UAAA;AAEb,IAAI,IAAA,cAAA,CAAe,IAAI,CAAG,EAAA;AACxB,MAAA,IAAI,SAAS,CAAG,EAAA;AACd,QAAA,IAAI,QAAU,EAAA;AACZ,UAAc,aAAA,CAAA,oBAAA,EAAsB,MAAQ,EAAA,IAAA,EAAM,OAAO,CAAA;AAAA,SACpD,MAAA;AACL,UAAA,IAAI,OAAS,EAAA;AACX,YAAA,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,WACZ,MAAA;AACL,YAAA,MAAA,CAAO,QAAQ,IAAI,CAAA;AAAA;AACrB;AACF,OACF,MAAA,IAAW,SAAS,CAAG,EAAA;AACrB,QAAO,MAAA,CAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,OACtB,MAAA,IAAW,SAAS,CAAG,EAAA;AACrB,QAAO,MAAA,CAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA;AAC3B,KACK,MAAA;AACL,MAAO,OAAA,KAAA,CAAA;AAAA;AACT;AAEF,EAAO,OAAA,MAAA;AACT;AAEO,SAAS,aAAc,CAAA,YAAA,EAAsBC,SAAoB,EAAA,IAAA,EAAc,OAA8B,EAAA;AArOpH,EAAA,IAAA,EAAA,EAAA,EAAA;AAsOE,EAAA,QAAQ,IAAM;AAAA,IACZ,KAAK,GAAA;AACH,MAAA,IAAI,OAAS,EAAA;AACX,QAAc,CAAA,EAAA,GAAA,aAAA,CAAA,YAAA,EAAcA,WAAU,IAAM,EAAA,KAAK,MAAjD,IAAoD,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,CAAI,EAAI,EAAA,GAAA,CAAA,CAAK,KAAM,CAAA,GAAA,CAAA;AAAA,OAClE,MAAA;AACL,QAAAA,SAAS,CAAA,QAAA,CAAA,CAAU,gBAAiBA,CAAAA,SAAQ,CAAE,CAAA,KAAA,EAAU,GAAA,YAAA,GAAe,EAAM,IAAA,EAAA,EAAI,GAAG,CAAA,CAAE,QAAQ,GAAG,CAAA;AAAA;AAEnG,MAAOA,OAAAA,SAAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,IAAI,OAAS,EAAA;AACX,QAAc,CAAA,EAAA,GAAA,aAAA,CAAA,YAAA,EAAcA,WAAU,IAAM,EAAA,KAAK,MAAjD,IAAoD,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,CAAI,CAAG,EAAA,GAAA,CAAA,CAAK,KAAM,CAAA,GAAA,CAAA;AAAA,OACjE,MAAA;AAEL,QAAAA,SAAS,CAAA,QAAA,CAAA,CAAU,gBAAiBA,CAAAA,SAAQ,CAAE,CAAA,KAAA,EAAU,GAAA,YAAA,GAAe,EAAM,IAAA,CAAA,EAAG,GAAG,CAAA,CAAE,QAAQ,GAAG,CAAA;AAAA;AAElG,MAAOA,OAAAA,SAAAA;AAAA,IACT;AACE,MAAO,OAAA,KAAA,CAAA;AAAA;AAEb;;;;;;;;;;;;AC3OA,MAAM,0BAA6B,GAAA,qBAAA;AACnC,MAAM,6BAAgC,GAAA,yBAAA;AAE/B,MAAM,sBAAuB,CAAA;AAAA,EAA7B,WAAA,GAAA;AACL,IAAW,IAAA,CAAA,QAAA,GAAA,0BAAA;AACX,IAAa,IAAA,CAAA,UAAA,GAAA,6BAAA;AACb,IAAW,IAAA,CAAA,QAAA,GAAA;AAAA,MACT,WAAa,EAAA,cAAA;AAAA,MACb,MAAQ,EAAA,UAAA;AAAA,MACR,MAAQ,EAAA,OAAA;AAAA,MACR,IAAM,EAAA,aAAA;AAAA,MACN,GAAK,EAAA,OAAA;AAAA,MACL,KAAO,EAAA,SAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA;AAAA,EAEA,OAAO,QAAoC,EAAA;AACzC,IAAA,IAAA,CAAK,WAAW,QAAS,CAAA,QAAA;AACzB,IAAA,IAAA,CAAK,WAAW,QAAS,CAAA,QAAA;AAEzB,IAAA,IAAI,SAAS,gBAAkB,EAAA;AAC7B,MAAA,IAAA,CAAK,gBAAiB,EAAA;AAAA;AACxB;AACF,EAEA,gBAAmB,GAAA;AACjB,IAAA,IAAA,CAAK,WAAW,eAAgB,CAAA;AAAA,MAC9B,IAAM,EAAA,SAAA;AAAA,MACN,KAAO,EAAA,SAAA;AAAA,MACP,GAAK,EAAA,SAAA;AAAA,MACL,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA,SAAA;AAAA,MACR,MAAQ,EAAA;AAAA,KACT,CAAA;AAID,IAAA,IAAA,CAAK,UAAa,GAAA,IAAA,CAAK,QAAS,CAAA,OAAA,CAAQ,MAAM,QAAQ,CAAA;AAEtD,IAAA,IAAA,CAAK,SAAS,WAAc,GAAA,eAAA;AAAA,MAC1B,EAAE,MAAM,SAAW,EAAA,MAAA,EAAQ,WAAW,MAAQ,EAAA,SAAA,EAAW,QAAQ,KAAM,EAAA;AAAA,MACvE,IAAA;AAAA,MACA,KAAK,QAAS,CAAA;AAAA,KAChB,CAAE,OAAQ,CAAA,IAAA,EAAM,QAAQ,CAAA;AACxB,IAAA,IAAA,CAAK,SAAS,MAAS,GAAA,eAAA;AAAA,MACrB,EAAE,MAAM,SAAW,EAAA,MAAA,EAAQ,WAAW,MAAQ,EAAA,SAAA,EAAW,QAAQ,KAAM,EAAA;AAAA,MACvE,IAAA;AAAA,MACA,KAAK,QAAS,CAAA;AAAA,KAChB;AACA,IAAA,IAAA,CAAK,SAAS,MAAS,GAAA,eAAA;AAAA,MACrB,EAAE,IAAM,EAAA,SAAA,EAAW,MAAQ,EAAA,SAAA,EAAW,QAAQ,KAAM,EAAA;AAAA,MACpD,IAAA;AAAA,MACA,KAAK,QAAS,CAAA;AAAA,KAChB;AACA,IAAA,IAAA,CAAK,SAAS,IAAO,GAAA,eAAA;AAAA,MACnB,EAAE,KAAO,EAAA,SAAA,EAAW,GAAK,EAAA,SAAA,EAAW,MAAM,SAAW,EAAA,MAAA,EAAQ,SAAW,EAAA,MAAA,EAAQ,KAAM,EAAA;AAAA,MACtF,IAAA;AAAA,MACA,KAAK,QAAS,CAAA;AAAA,KAChB;AACA,IAAA,IAAA,CAAK,QAAS,CAAA,GAAA,GAAM,eAAgB,CAAA,EAAE,OAAO,SAAW,EAAA,GAAA,EAAK,SAAW,EAAA,MAAA,EAAQ,KAAM,EAAA,EAAG,IAAM,EAAA,IAAA,CAAK,SAAS,GAAG,CAAA;AAChH,IAAA,IAAA,CAAK,SAAS,KAAQ,GAAA,eAAA;AAAA,MACpB,EAAE,IAAM,EAAA,SAAA,EAAW,KAAO,EAAA,SAAA,EAAW,QAAQ,KAAM,EAAA;AAAA,MACnD,IAAA;AAAA,MACA,KAAK,QAAS,CAAA;AAAA,KAChB;AAAA;AACF,EAEA,iBAAiB,eAA2B,EAAA;AAC1C,IAAA,OAAO,CAAQ,KAAA,EAAA,eAAA,GAAkB,IAAK,CAAA,UAAA,GAAa,KAAK,QAAQ,CAAA,CAAA;AAAA;AAEpE;AASgB,SAAA,eAAA,CACd,OACA,EAAA,MAAA,EACA,QACQ,EAAA;AACR,EAAA,IAAI,kCAAoC,EAAA;AACtC,IAAA,OAAO,QAAY,IAAA,IAAA,GAAA,QAAA,GAAA,0BAAA;AAAA;AAGrB,EAAI,IAAA,CAAC,UAAU,SAAW,EAAA;AACxB,IAAS,MAAA,GAAA,CAAC,GAAG,SAAA,CAAU,SAAS,CAAA;AAAA;AAIlC,EAAA,MAAM,iBAAiB,IAAI,IAAA,CAAK,cAAe,CAAA,MAAA,IAAU,QAAW,OAAO,CAAA;AAC3E,EAAA,MAAM,KAAQ,GAAA,cAAA,CAAe,aAAc,iBAAA,IAAI,MAAM,CAAA;AACrD,EAAM,MAAA,MAAA,GAAS,cAAe,CAAA,eAAA,EAAkB,CAAA,MAAA;AAEhD,EAAA,MAAM,OAAqC,GAAA;AAAA,IACzC,IAAM,EAAA,MAAA;AAAA,IACN,KAAO,EAAA,IAAA;AAAA,IACP,GAAK,EAAA,IAAA;AAAA,IACL,IAAA,EAAM,SAAS,IAAO,GAAA,IAAA;AAAA,IACtB,MAAQ,EAAA,IAAA;AAAA,IACR,MAAQ,EAAA,IAAA;AAAA,IACR,OAAS,EAAA,KAAA;AAAA,IACT,GAAK,EAAA,GAAA;AAAA,IACL,SAAW,EAAA,GAAA;AAAA,IACX,YAAc,EAAA;AAAA,GAChB;AAEA,EAAA,OAAO,KAAM,CAAA,GAAA,CAAI,CAAC,IAAA,KAAS,OAAQ,CAAA,IAAA,CAAK,IAAI,CAAA,IAAK,IAAK,CAAA,KAAK,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AACtE;AAEa,MAAA,iBAAA,GAAoB,IAAI,sBAAuB;AAE5D,MAAM,mCAAmC,MAAe;AACtD,EAAA,OAAO,EAAE,gBAAoB,IAAA,IAAA,CAAA,IAAS,EAAE,eAAA,IAAmB,KAAK,cAAe,CAAA,SAAA,CAAA;AACjF,CAAA;;ACzFa,MAAA,aAAA,GAA4D,CAAC,KAAA,EAAO,OAAuB,KAAA;AACtG,EAAI,IAAA,UAAA,CAAW,KAAK,CAAG,EAAA;AACrB,IAAO,OAAA,KAAA;AAAA;AAGT,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAO,OAAA,WAAA,CAAY,OAAO,OAAO,CAAA;AAAA;AAGnC,EAAO,OAAA,WAAA,CAAY,OAAO,OAAO,CAAA;AACnC;AAEA,MAAM,WAAA,GAAc,CAAC,KAAA,EAAe,OAAmD,KAAA;AAtDvF,EAAA,IAAA,EAAA;AAuDE,EAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAA,KAAM,CAAI,CAAA,EAAA;AAC/B,IAAI,IAAA,CAAC,OAAQ,CAAA,KAAK,CAAG,EAAA;AACnB,MAAA,OAAO,QAAS,EAAA;AAAA;AAGlB,IAAM,MAAA,MAAA,GAAS,MAAM,KAAO,EAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,SAAS,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,QAAA,EAAU,mCAAS,oBAAoB,CAAA;AAC9F,IAAA,OAAO,UAAU,QAAS,EAAA;AAAA;AAG5B,EAAI,IAAA,QAAA,GAAW,YAAY,OAAO,CAAA;AAClC,EAAA,IAAI,MAAS,GAAA,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,MAAT,KAAA,IAAA,GAAA,EAAA,GAAmB,iBAAkB,CAAA,QAAA;AAClD,EAAI,IAAA,KAAA,CAAM,QAAS,CAAA,GAAG,CAAG,EAAA;AAIvB,IAAS,MAAA,GAAA,0BAAA;AACT,IAAW,QAAA,GAAA,KAAA;AAAA;AAGb,EAAA,MAAM,IAAO,GAAA5D,yBAAA,CAAO,EAAG,CAAA,IAAA,CAAK,QAAQ,CAAA;AAEpC,EAAI,IAAA,IAAA,IAAQ,KAAK,IAAM,EAAA;AACrB,IAAA,OAAO,mBAAoB,CAAA,IAAA,CAAK,IAAM,EAAA,KAAA,EAAO,MAAM,CAAA;AAAA;AAGrD,EAAQ,QAAA6D,gBAAA,CAAU,QAAQ,CAAG;AAAA,IAC3B,KAAK,KAAA;AACH,MAAO,OAAA,KAAA,CAAM,OAAO,MAAM,CAAA;AAAA,IAC5B;AACE,MAAO,OAAA,QAAA,CAAS,OAAO,MAAM,CAAA;AAAA;AAEnC,CAAA;AAEA,MAAM,WAAA,GAAc,CAAC,KAAA,EAAsB,OAAmD,KAAA;AAC5F,EAAA,MAAM,IAAO,GAAA,KAAA;AACb,EAAM,MAAA,QAAA,GAAW,YAAY,OAAO,CAAA;AACpC,EAAA,MAAM,IAAO,GAAA7D,yBAAA,CAAO,EAAG,CAAA,IAAA,CAAK,QAAQ,CAAA;AAEpC,EAAI,IAAA,IAAA,IAAQ,KAAK,IAAM,EAAA;AACrB,IAAO,OAAA,mBAAA,CAAoB,IAAK,CAAA,IAAA,EAAM,IAAI,CAAA;AAAA;AAG5C,EAAQ,QAAA6D,gBAAA,CAAU,QAAQ,CAAG;AAAA,IAC3B,KAAK,KAAA;AACH,MAAA,OAAO,MAAM,IAAI,CAAA;AAAA,IACnB;AACE,MAAA,OAAO,SAAS,IAAI,CAAA;AAAA;AAE1B,CAAA;;AChGO,SAAS,YAAY,KAAwB,EAAA;AAClD,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAO,OAAA,KAAA;AAAA;AAGT,EAAI,IAAA,KAAA,KAAU,MAAM,KAAU,KAAA,IAAA,IAAQ,UAAU,KAAa,CAAA,IAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,CAAG,EAAA;AACjF,IAAO,OAAA,GAAA;AAAA;AAGT,EAAI,IAAA,OAAO,UAAU,SAAW,EAAA;AAC9B,IAAA,OAAO,QAAQ,CAAI,GAAA,CAAA;AAAA;AAGrB,EAAA,OAAOC,gBAAS,KAAK,CAAA;AACvB;;AClBY,IAAA,WAAA,qBAAAC,YAAL,KAAA;AACL,EAAAA,aAAA,aAAc,CAAA,GAAA,OAAA;AACd,EAAAA,aAAA,aAAc,CAAA,GAAA,OAAA;AACd,EAAAA,aAAA,aAAc,CAAA,GAAA,OAAA;AACd,EAAAA,aAAA,cAAe,CAAA,GAAA,SAAA;AAJL,EAAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AA0EA,IAAA,iBAAA,qBAAAC,kBAAL,KAAA;AACL,EAAAA,mBAAA,MAAO,CAAA,GAAA,MAAA;AACP,EAAAA,mBAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,mBAAA,MAAO,CAAA,GAAA,MAAA;AACP,EAAAA,mBAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,mBAAA,YAAa,CAAA,GAAA,UAAA;AACb,EAAAA,mBAAA,OAAQ,CAAA,GAAA,OAAA;AANE,EAAAA,OAAAA,kBAAAA;AAAA,CAAA,EAAA,iBAAA,IAAA,EAAA;;ACjEI,SAAA,qBAAA,CAAsB,eAA+B,KAAuC,EAAA;AAZ5G,EAAA,IAAA,EAAA,EAAA,EAAA;AAaE,EAAA,KAAA,MAAW,MAAM,aAAe,EAAA;AAC9B,IAAA,QAAQ,GAAG,IAAM;AAAA,MACf,KAAK,WAAY,CAAA,WAAA;AACf,QAAA,IAAI,SAAS,IAAM,EAAA;AACjB,UAAA;AAAA;AAGF,QAAM,MAAA,MAAA,GAAS,EAAG,CAAA,OAAA,CAAQ,KAAK,CAAA;AAC/B,QAAA,IAAI,MAAQ,EAAA;AACV,UAAO,OAAA,MAAA;AAAA;AAGT,QAAA;AAAA,MAEF,KAAK,WAAY,CAAA,WAAA;AACf,QAAA,IAAI,SAAS,IAAM,EAAA;AACjB,UAAA;AAAA;AAGF,QAAM,MAAA,aAAA,GAAgB,WAAW,KAAK,CAAA;AACtC,QAAI,IAAA,KAAA,CAAM,aAAa,CAAG,EAAA;AACxB,UAAA;AAAA;AAGF,QAAA,MAAM,IAAO,GAAA,CAAA,EAAA,GAAA,EAAA,CAAG,OAAQ,CAAA,IAAA,KAAX,IAAmB,GAAA,EAAA,GAAA,CAAA,QAAA;AAEhC,QAAM,MAAA,SAAA,GAAY,CAAC,KAAA,CAAM,IAAI,CAAA;AAC7B,QAAI,IAAA,SAAA,IAAa,gBAAgB,IAAM,EAAA;AACrC,UAAA;AAAA;AAGF,QAAA,MAAM,EAAK,GAAA,CAAA,EAAA,GAAA,EAAA,CAAG,OAAQ,CAAA,EAAA,KAAX,IAAiB,GAAA,EAAA,GAAA,QAAA;AAE5B,QAAM,MAAA,OAAA,GAAU,CAAC,KAAA,CAAM,EAAE,CAAA;AACzB,QAAI,IAAA,OAAA,IAAW,gBAAgB,EAAI,EAAA;AACjC,UAAA;AAAA;AAGF,QAAA,OAAO,GAAG,OAAQ,CAAA,MAAA;AAAA,MAEpB,KAAK,WAAY,CAAA,WAAA;AACf,QAAA,IAAI,SAAS,IAAM,EAAA;AACjB,UAAA;AAAA;AAGF,QAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,UAAA;AAAA;AAGF,QAAA,MAAM,KAAQ,GAAA,eAAA,CAAgB,EAAG,CAAA,OAAA,CAAQ,OAAO,CAAA;AAChD,QAAI,IAAA,KAAA,CAAM,KAAM,CAAA,KAAK,CAAG,EAAA;AACtB,UAAA,MAAM,GAAM,GAAA,EAAE,GAAG,EAAA,CAAG,QAAQ,MAAO,EAAA;AAEnC,UAAI,IAAA,GAAA,CAAI,QAAQ,IAAM,EAAA;AACpB,YAAI,GAAA,CAAA,IAAA,GAAO,MAAM,OAAQ,CAAA,KAAA,EAAO,GAAG,OAAQ,CAAA,MAAA,CAAO,QAAQ,EAAE,CAAA;AAAA;AAG9D,UAAO,OAAA,GAAA;AAAA;AACT,MAEF,KAAK,WAAY,CAAA,YAAA;AACf,QAAS,QAAA,EAAA,CAAG,QAAgC,KAAO;AAAA,UACjD,KAAK,kBAAkB,IAAM,EAAA;AAC3B,YAAA,IAAI,SAAS,IAAM,EAAA;AACjB,cAAA,OAAO,GAAG,OAAQ,CAAA,MAAA;AAAA;AAEpB,YAAA;AAAA;AACF,UACA,KAAK,kBAAkB,GAAK,EAAA;AAC1B,YAAA,IAAI,OAAO,KAAA,KAAU,QAAY,IAAA,KAAA,CAAM,KAAK,CAAG,EAAA;AAC7C,cAAA,OAAO,GAAG,OAAQ,CAAA,MAAA;AAAA;AAEpB,YAAA;AAAA;AACF,UACA,KAAK,kBAAkB,UAAY,EAAA;AACjC,YAAA,IAAK,OAAO,KAAU,KAAA,QAAA,IAAY,MAAM,KAAK,CAAA,IAAM,SAAS,IAAM,EAAA;AAChE,cAAA,OAAO,GAAG,OAAQ,CAAA,MAAA;AAAA;AAEpB,YAAA;AAAA;AACF,UACA,KAAK,kBAAkB,IAAM,EAAA;AAC3B,YAAI,IAAA,KAAA,KAAU,IAAQ,IAAA,KAAA,KAAU,MAAQ,EAAA;AACtC,cAAA,OAAO,GAAG,OAAQ,CAAA,MAAA;AAAA;AAEpB,YAAA;AAAA;AACF,UACA,KAAK,kBAAkB,KAAO,EAAA;AAC5B,YAAI,IAAA,KAAA,KAAU,KAAS,IAAA,KAAA,KAAU,OAAS,EAAA;AACxC,cAAA,OAAO,GAAG,OAAQ,CAAA,MAAA;AAAA;AAEpB,YAAA;AAAA;AACF,UACA,KAAK,kBAAkB,KAAO,EAAA;AAC5B,YAAA,IAAI,UAAU,EAAI,EAAA;AAChB,cAAA,OAAO,GAAG,OAAQ,CAAA,MAAA;AAAA;AAEpB,YAAA;AAAA;AACF;AACF;AACJ;AAGF,EAAO,OAAA,IAAA;AACT;AAWY,IAAA,iBAAA,qBAAAC,kBAAL,KAAA;AACL,EAAAA,kBAAAA,CAAAA,kBAAAA,CAAA,iBAAc,CAAd,CAAA,GAAA,aAAA;AACA,EAAAA,kBAAAA,CAAAA,kBAAAA,CAAA,iBAAc,CAAd,CAAA,GAAA,aAAA;AAFU,EAAAA,OAAAA,kBAAAA;AAAA,CAAA,EAAA,iBAAA,IAAA,EAAA;AASI,SAAA,8BAAA,CAA+B,OAAY,kBAAuD,EAAA;AAxIlH,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAyIE,EAAA,MAAM,WAA2B,EAAC;AAGlC,EAAA,IAAI,cAAc,KAAM,CAAA,WAAA;AACxB,EAAI,IAAA,CAAC,MAAM,WAAa,EAAA;AACtB,IAAA,IAAI,KAAM,CAAA,SAAA,IAAa,KAAM,CAAA,SAAA,CAAU,MAAQ,EAAA;AAC7C,MAAc,WAAA,GAAA,CAAA;AAAA,KACL,MAAA,IAAA,KAAA,CAAM,SAAa,IAAA,KAAA,CAAM,UAAU,MAAQ,EAAA;AACpD,MAAc,WAAA,GAAA,CAAA;AAAA;AAChB;AAEF,EAAA,IAAI,gBAAgB,CAAG,EAAA;AACrB,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,KAAM,CAAA,SAAA,CAAU,QAAQ,CAAK,EAAA,EAAA;AAC/C,MAAM,MAAA,GAAA,GAAM,KAAM,CAAA,SAAA,CAAU,CAAC,CAAA;AAC7B,MAAS,QAAA,CAAA,IAAA;AAAA,QACP,6BAAA;AAAA,UACE;AAAA,YACE,GAAG,GAAA;AAAA,YACH,EAAI,EAAA,CAAA;AAAA;AAAA,YACJ,MAAM,WAAY,CAAA;AAAA,WACpB;AAAA,UAAA,CAAA,CACA,EAAM,GAAA,CAAA,EAAA,GAAA,KAAA,CAAA,WAAA,KAAN,IAAmB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAA,KAAnB,mBAA6B,UAAc,KAAA;AAAA;AAC7C,OACF;AAAA;AACF,GACF,MAAA,IAAW,gBAAgB,CAAG,EAAA;AAC5B,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,KAAM,CAAA,SAAA,CAAU,QAAQ,CAAK,EAAA,EAAA;AAC/C,MAAM,MAAA,GAAA,GAAM,KAAM,CAAA,SAAA,CAAU,CAAC,CAAA;AAC7B,MAAS,QAAA,CAAA,IAAA;AAAA,QACP,6BAAA;AAAA,UACE;AAAA,YACE,GAAG,GAAA;AAAA,YACH,EAAI,EAAA,CAAA;AAAA;AAAA,YACJ,MAAM,WAAY,CAAA;AAAA,WACpB;AAAA,UAAA,CAAA,CACA,EAAM,GAAA,CAAA,EAAA,GAAA,KAAA,CAAA,WAAA,KAAN,IAAmB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAA,KAAnB,mBAA6B,UAAc,KAAA;AAAA;AAC7C,OACF;AAAA;AACF;AAGF,EAAO,OAAA,QAAA;AACT;AAEA,SAAS,6BAAA,CAA8B,KAAU,UAA6C,EAAA;AAC5F,EAAA,MAAM,YAAsB,EAAE,IAAA,EAAM,YAAY,WAAa,EAAA,OAAA,EAAS,EAAG,EAAA;AACzE,EAAA,MAAM,cAA8B,EAAC;AAGrC,EAAA,IAAI,KAA4B,GAAA,KAAA,CAAA;AAChC,EAAM,MAAA,OAAA,GAAU,UAAW,CAAA,GAAA,CAAI,IAAI,CAAA;AACnC,EAAA,IAAI,UAAc,IAAA,CAAC,KAAM,CAAA,OAAO,CAAG,EAAA;AACjC,IAAA,MAAM,KAAQ,GAAA,kBAAA,CAAmB,OAAS,EAAA,UAAA,CAAW,KAAK,CAAA;AAC1D,IAAI,IAAA,KAAA,IAAS,MAAM,KAAO,EAAA;AACxB,MAAA,KAAA,GAAQ,KAAM,CAAA,KAAA;AAAA;AAChB;AAGF,EAAA,QAAQ,IAAI,IAAM;AAAA,IAChB,KAAK,CAAA;AAAA,IACL,KAAK,WAAY,CAAA,WAAA;AACf,MAAI,IAAA,GAAA,CAAI,SAAS,IAAM,EAAA;AACrB,QAAI,IAAA,GAAA,CAAI,UAAU,MAAQ,EAAA;AACxB,UAAA,WAAA,CAAY,IAAK,CAAA;AAAA,YACf,MAAM,WAAY,CAAA,YAAA;AAAA,YAClB,OAAS,EAAA;AAAA,cACP,OAAO,iBAAkB,CAAA,IAAA;AAAA,cACzB,MAAQ,EAAA,EAAE,IAAM,EAAA,GAAA,CAAI,MAAM,KAAM;AAAA;AAClC,WACD,CAAA;AAAA,SACI,MAAA;AACL,UAAA,SAAA,CAAU,OAAQ,CAAA,MAAA,CAAO,GAAI,CAAA,KAAK,CAAC,CAAI,GAAA;AAAA,YACrC,MAAM,GAAI,CAAA,IAAA;AAAA,YACV;AAAA,WACF;AAAA;AACF;AAEF,MAAA;AAAA,IACF,KAAK,CAAA;AAAA,IACL,KAAK,WAAY,CAAA,WAAA;AACf,MAAA,IAAI,GAAI,CAAA,IAAA,KAAS,MAAU,IAAA,GAAA,CAAI,OAAO,MAAQ,EAAA;AAC5C,QAAA,WAAA,CAAY,IAAK,CAAA;AAAA,UACf,MAAM,WAAY,CAAA,YAAA;AAAA,UAClB,OAAS,EAAA;AAAA,YACP,OAAO,iBAAkB,CAAA,IAAA;AAAA,YACzB,MAAQ,EAAA,EAAE,IAAM,EAAA,GAAA,CAAI,MAAM,KAAM;AAAA;AAClC,SACD,CAAA;AAAA,OACI,MAAA;AACL,QAAA,WAAA,CAAY,IAAK,CAAA;AAAA,UACf,MAAM,WAAY,CAAA,WAAA;AAAA,UAClB,OAAS,EAAA;AAAA,YACP,IAAA,EAAM,CAAC,GAAI,CAAA,IAAA;AAAA,YACX,EAAA,EAAI,CAAC,GAAI,CAAA,EAAA;AAAA,YACT,MAAQ,EAAA,EAAE,IAAM,EAAA,GAAA,CAAI,MAAM,KAAM;AAAA;AAClC,SACD,CAAA;AAAA;AAEH,MAAA;AAAA;AAGJ,EAAA,IAAI,OAAO,IAAK,CAAA,SAAA,CAAU,OAAO,CAAA,CAAE,SAAS,CAAG,EAAA;AAC7C,IAAA,WAAA,CAAY,QAAQ,SAAS,CAAA;AAAA;AAG/B,EAAA,OAAO,YAAY,CAAC,CAAA;AACtB;;AC/OgB,SAAA,SAAA,CAAU,MAAqB,QAAwC,EAAA;AACrF,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAEpB,EAAA,OAAO,EAAE,IAAM,EAAA,OAAA,CAAQ,MAAM,QAAQ,CAAA,EAAG,QAAQ,GAAI,EAAA;AACtD;AAEgB,SAAA,aAAA,CAAc,MAAqB,QAAwC,EAAA;AACzF,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAEpB,EAAO,OAAA,EAAE,MAAM,OAAQ,CAAA,GAAA,GAAM,MAAM,QAAQ,CAAA,EAAG,QAAQ,GAAI,EAAA;AAC5D;AAEgB,SAAA,OAAA,CAAQ,OAAsB,QAAwC,EAAA;AACpF,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAEpB,EAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,EAAO,QAAQ,CAAA;AACnC,EAAA,IAAI,MAAM,IAAK,CAAA,SAAA,CAAU,CAAG,EAAA,CAAC,MAAM,GAAK,EAAA;AACtC,IAAA,KAAA,CAAM,IAAO,GAAA,KAAA,GAAQ,KAAM,CAAA,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,GACtC,MAAA;AACL,IAAM,KAAA,CAAA,IAAA,GAAO,OAAO,KAAM,CAAA,IAAA;AAAA;AAE5B,EAAO,OAAA,KAAA;AACT;AAEgB,SAAA,KAAA,CAAM,OAAsB,QAAwC,EAAA;AAClF,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAEpB,EAAO,OAAA;AAAA,IACL,IAAA,EAAM,UAAW,CAAA,OAAA,CAAQ,KAAO,EAAA,QAAQ,CAAC,CAAE,CAAA,QAAA,CAAS,EAAE,CAAA,CAAE,WAAY;AAAA,GACtE;AACF;AAEgB,SAAA,GAAA,CAAI,OAAsB,QAAwC,EAAA;AAChF,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAEpB,EAAA,OAAO,EAAE,IAAM,EAAA,KAAA,CAAM,aAAc,CAAA,QAAA,IAAA,IAAA,GAAA,QAAA,GAAY,MAAS,CAAE,EAAA;AAC5D;;ACXO,MAAM,cAA+D,GAAA,CAAC,SAAW,EAAA,OAAA,KACtF,IAAK,CAAA,SAAA,EAAW,WAAY,CAAA,OAAO,CAAC,CAAA,CAAE,MAAO,CAAA,SAAA,CAAU,OAAO,CAAC;AAWpD,MAAA,iBAAA,GAAuC,CAAC,SAAA,EAAW,OAC9D,KAAA,IAAA,CAAK,WAAW,WAAY,CAAA,OAAO,CAAC,CAAA,CAAE,MAAO;AAYlC,MAAA,qBAAA,GAA2C,CAAC,SAAA,EAAW,OAClE,KAAA,IAAA,CAAK,WAAW,WAAY,CAAA,OAAO,CAAC,CAAA,CAAE,OAAQ;AAYzC,MAAM,6BAAmD,GAAA,CAAC,SAAW,EAAA,OAAA,KAC1E,KAAK,SAAW,EAAA,WAAA,CAAY,OAAO,CAAC,CAAE,CAAA,MAAA,CAAO,CAAG,EAAA,iBAAA,CAAkB,QAAQ,CAAI,EAAA,CAAA;AAWnE,MAAA,mBAAA,GAAyC,CAAC,SAAA,EAAW,OAChE,KAAA,IAAA,CAAK,SAAW,EAAA,WAAA,CAAY,OAAO,CAAC,CAAE,CAAA,MAAA,CAAO,GAAG;AAElD,MAAM,SAAA,GAAY,CAAsC,OAAwB,KAAA;AAvFhF,EAAA,IAAA,EAAA,EAAA,EAAA;AAwFE,EAAA,IAAI,mCAAS,aAAe,EAAA;AAC1B,IAAO,OAAA,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,MAAT,KAAA,IAAA,GAAA,EAAA,GAAmB,iBAAkB,CAAA,UAAA;AAAA;AAE9C,EAAO,OAAA,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,MAAT,KAAA,IAAA,GAAA,EAAA,GAAmB,iBAAkB,CAAA,QAAA;AAC9C,CAAA;AAEA,MAAM,IAAA,GAAO,CAAC,SAAA,EAA0B,QAA+B,KAAA;AACrE,EAAA,MAAM,IAAO,GAAA,SAAA;AACb,EAAA,MAAM,IAAO,GAAAjE,yBAAA,CAAO,EAAG,CAAA,IAAA,CAAK,QAAQ,CAAA;AAEpC,EAAI,IAAA,IAAA,IAAQ,KAAK,IAAM,EAAA;AACrB,IAAA,OAAO,iBAAiB,KAAM,CAAA,IAAI,CAAC,CAAE,CAAA,EAAA,CAAG,KAAK,IAAI,CAAA;AAAA;AAGnD,EAAA,QAAQ,QAAU;AAAA,IAChB,KAAK,KAAA;AACH,MAAO,OAAA,gBAAA,CAAiB,KAAM,CAAA,IAAI,CAAC,CAAA;AAAA,IACrC;AACE,MAAA,OAAO,gBAAiB,CAAA,KAAA,CAAM,IAAI,CAAC,EAAE,KAAM,EAAA;AAAA;AAEjD,CAAA;;ACrFA,MAAM,KAAQ,GAAA;AAAA,EACZ,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AACF,CAAA;AAEA,MAAM,oBAA2C,GAAA;AAAA,EAC/C,CAAC,oBAAgB,OAAA;AAAA,EACjB,CAAC,sBAAiB,MAAA;AAAA,EAClB,CAAC,oBAAgB,MAAA;AAAA,EACjB,CAAC,kBAAe,KAAA;AAAA,EAChB,CAAC,oBAAgB,IAAA;AAAA,EACjB,CAAC,wBAAkB,EAAA;AAAA,EACnB,CAAC,wBAAkB,CAAA;AAAA,EACnB,CAAC,kCAAuB;AAC1B,CAAA;AAEgB,SAAA,aAAA,CAAc,MAAc,QAAyC,EAAA;AACnF,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAGpB,EAAA,IAAI,IAAK,CAAA,GAAA,CAAI,IAAI,CAAA,GAAI,GAAM,EAAA;AACzB,IAAA,OAAO,EAAE,IAAM,EAAA,OAAA,CAAQ,MAAM,QAAQ,CAAA,EAAG,QAAQ,KAAM,EAAA;AAAA,GAC7C,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,GAAS,EAAA;AACnC,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,GAAM,EAAA,QAAA,EAAU,QAAK,CAAA;AAAA,GACxC,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,GAAY,EAAA;AACtC,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,GAAS,EAAA,QAAA,EAAU,KAAK,CAAA;AAAA,GAC3C,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,IAAa,EAAA;AACvC,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,GAAY,EAAA,QAAA,EAAU,IAAI,CAAA;AAAA,GAC7C,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,KAAe,EAAA;AACzC,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,IAAa,EAAA,QAAA,EAAU,MAAM,CAAA;AAAA,GAChD,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,MAAgB,EAAA;AAC1C,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,KAAe,EAAA,QAAA,EAAU,OAAO,CAAA;AAAA,GACvD,MAAA;AACL,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,MAAgB,EAAA,QAAA,EAAU,MAAM,CAAA;AAAA;AAEhE;AAEgB,SAAA,cAAA,CAAe,MAAc,QAAyC,EAAA;AACpF,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAGpB,EAAA,IAAI,IAAK,CAAA,GAAA,CAAI,IAAI,CAAA,GAAI,GAAM,EAAA;AACzB,IAAA,OAAO,EAAE,IAAM,EAAA,OAAA,CAAQ,MAAM,QAAQ,CAAA,EAAG,QAAQ,QAAM,EAAA;AAAA,GAC7C,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,GAAS,EAAA;AACnC,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,GAAM,EAAA,QAAA,EAAU,KAAK,CAAA;AAAA,GAC5C,MAAA;AACL,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,GAAS,EAAA,QAAA,EAAU,IAAI,CAAA;AAAA;AAEvD;AAEgB,SAAA,cAAA,CAAe,IAAc,EAAA,QAAA,EAAyB,cAA+C,EAAA;AACnH,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAGpB,EAAA,IAAI,IAAK,CAAA,GAAA,CAAI,IAAI,CAAA,GAAI,GAAM,EAAA;AACzB,IAAA,OAAO,EAAE,IAAM,EAAA,OAAA,CAAQ,MAAM,QAAQ,CAAA,EAAG,QAAQ,KAAM,EAAA;AAAA,GAC7C,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,GAAO,EAAA;AAEjC,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,GAAM,EAAA,QAAA,EAAU,IAAI,CAAA;AAAA,GACvC,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,IAAS,EAAA;AAEnC,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,GAAO,EAAA,QAAA,EAAU,MAAM,CAAA;AAAA,GAC1C,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,KAAU,EAAA;AAEpC,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,IAAS,EAAA,QAAA,EAAU,OAAO,CAAA;AAAA,GAC7C,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,OAAa,EAAA;AAEvC,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,KAAU,EAAA,QAAA,EAAU,MAAM,CAAA;AAAA;AAGxD,EAAA,OAAO,aAAc,CAAA,IAAA,GAAO,OAAa,EAAA,QAAA,EAAU,OAAO,CAAA;AAC5D;AAEgB,SAAA,SAAA,CAAU,MAAc,QAAyC,EAAA;AAC/E,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAIpB,EAAA,IAAI,SAAS,CAAG,EAAA;AACd,IAAA,OAAO,EAAE,IAAA,EAAM,GAAK,EAAA,MAAA,EAAQ,IAAK,EAAA;AAAA;AAInC,EAAA,IAAI,IAAK,CAAA,GAAA,CAAI,IAAI,CAAA,GAAI,IAAU,EAAA;AAC7B,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,GAAK,EAAA,QAAA,EAAU,KAAK,CAAA;AAAA;AAGlD,EAAA,IAAI,IAAK,CAAA,GAAA,CAAI,IAAI,CAAA,GAAI,IAAO,EAAA;AAC1B,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,GAAK,EAAA,QAAA,EAAU,QAAK,CAAA;AAAA;AAGlD,EAAA,IAAI,IAAK,CAAA,GAAA,CAAI,IAAI,CAAA,GAAI,CAAG,EAAA;AACtB,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,GAAK,EAAA,QAAA,EAAU,KAAK,CAAA;AAAA;AAGlD,EAAA,IAAI,IAAK,CAAA,GAAA,CAAI,IAAI,CAAA,GAAI,EAAI,EAAA;AACvB,IAAA,OAAO,EAAE,IAAM,EAAA,OAAA,CAAQ,MAAM,QAAQ,CAAA,EAAG,QAAQ,IAAK,EAAA;AAAA,GAC5C,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,IAAM,EAAA;AAEhC,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,EAAI,EAAA,QAAA,EAAU,MAAM,CAAA;AAAA,GACvC,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,KAAO,EAAA;AAEjC,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,IAAM,EAAA,QAAA,EAAU,OAAO,CAAA;AAAA,GAC1C,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,MAAQ,EAAA;AAElC,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,KAAO,EAAA,QAAA,EAAU,MAAM,CAAA;AAAA,GAC1C,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,OAAU,EAAA;AAEpC,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,MAAQ,EAAA,QAAA,EAAU,OAAO,CAAA;AAAA;AAGvD,EAAA,OAAO,aAAc,CAAA,IAAA,GAAO,QAAW,EAAA,QAAA,EAAU,OAAO,CAAA;AAC1D;AAEgB,SAAA,SAAA,CAAU,MAAc,QAAyC,EAAA;AAC/E,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAGpB,EAAA,IAAI,IAAK,CAAA,GAAA,CAAI,IAAI,CAAA,GAAI,EAAI,EAAA;AACvB,IAAA,OAAO,EAAE,IAAM,EAAA,OAAA,CAAQ,MAAM,QAAQ,CAAA,EAAG,QAAQ,MAAO,EAAA;AAAA,GAC9C,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,IAAM,EAAA;AAChC,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,EAAI,EAAA,QAAA,EAAU,OAAO,CAAA;AAAA,GACxC,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,KAAO,EAAA;AACjC,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,IAAM,EAAA,QAAA,EAAU,MAAM,CAAA;AAAA,GACzC,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,MAAQ,EAAA;AAClC,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,KAAO,EAAA,QAAA,EAAU,OAAO,CAAA;AAAA,GAC/C,MAAA;AACL,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,MAAW,EAAA,QAAA,EAAU,OAAO,CAAA;AAAA;AAE5D;AAEgB,SAAA,OAAA,CAAQ,MAAc,QAAyC,EAAA;AAC7E,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAGpB,EAAA,IAAI,IAAK,CAAA,GAAA,CAAI,IAAI,CAAA,GAAI,EAAI,EAAA;AACvB,IAAA,OAAO,EAAE,IAAM,EAAA,OAAA,CAAQ,MAAM,QAAQ,CAAA,EAAG,QAAQ,OAAQ,EAAA;AAAA,GAC/C,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,GAAK,EAAA;AAC/B,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,EAAI,EAAA,QAAA,EAAU,MAAM,CAAA;AAAA,GACvC,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,IAAM,EAAA;AAChC,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,GAAK,EAAA,QAAA,EAAU,OAAO,CAAA;AAAA,GAC7C,MAAA;AACL,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,IAAM,EAAA,QAAA,EAAU,OAAO,CAAA;AAAA;AAEvD;AAEgB,SAAA,MAAA,CAAO,MAAc,QAAyC,EAAA;AAC5E,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAGpB,EAAA,IAAI,IAAK,CAAA,GAAA,CAAI,IAAI,CAAA,GAAI,CAAG,EAAA;AACtB,IAAO,OAAA,aAAA,CAAc,IAAM,EAAA,QAAA,EAAU,MAAM,CAAA;AAAA,GAClC,MAAA,IAAA,IAAA,CAAK,GAAI,CAAA,IAAI,IAAI,GAAK,EAAA;AAC/B,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,CAAG,EAAA,QAAA,EAAU,OAAO,CAAA;AAAA,GAC3C,MAAA;AACL,IAAA,OAAO,aAAc,CAAA,IAAA,GAAO,GAAK,EAAA,QAAA,EAAU,OAAO,CAAA;AAAA;AAEtD;AAEgB,SAAA,UAAA,CAAW,IAAc,EAAA,QAAA,EAAwB,SAAqC,EAAA;AACpG,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAGpB,EAAA,IAAI,SAAS,CAAG,EAAA;AACd,IAAA,OAAO,EAAE,IAAM,EAAA,GAAA,EAAK,MAAQ,EAAA,GAAA,GAAM,YAAY,GAAI,EAAA;AAAA;AAGpD,EAAA,IAAI,OAAO,CAAG,EAAA;AACZ,IAAA,MAAM,CAAI,GAAA,UAAA,CAAW,CAAC,IAAA,EAAM,UAAU,SAAS,CAAA;AAC/C,IAAI,IAAA,CAAC,EAAE,MAAQ,EAAA;AACb,MAAA,CAAA,CAAE,MAAS,GAAA,EAAA;AAAA;AAEb,IAAA,CAAA,CAAE,MAAU,IAAA,MAAA;AACZ,IAAO,OAAA,CAAA;AAAA;AAKT,EAAQ,IAAA,IAAA,oBAAA,CAAqB,SAAS,CAAI,GAAA,GAAA;AAE1C,EAAA,MAAM,UAAU,EAAC;AAGjB,EAAA,IAAI,iBAAoB,GAAA,KAAA;AACxB,EAAA,IAAI,aAAgB,GAAA,CAAA;AAEpB,EAAI,IAAA,QAAA,KAAa,IAAQ,IAAA,QAAA,KAAa,KAAW,CAAA,EAAA;AAC/C,IAAgB,aAAA,GAAA,QAAA;AAAA;AAGlB,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,MAAM,MAAU,IAAA,aAAA,IAAiB,GAAG,CAAK,EAAA,EAAA;AAC3D,IAAA,MAAM,QAAW,GAAA,oBAAA,CAAqB,KAAM,CAAA,CAAC,CAAC,CAAI,GAAA,GAAA;AAClD,IAAA,MAAM,QAAQ,IAAO,GAAA,QAAA;AACrB,IAAI,IAAA,KAAA,IAAS,KAAK,iBAAmB,EAAA;AACnC,MAAoB,iBAAA,GAAA,IAAA;AACpB,MAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,KAAA,CAAM,KAAK,CAAA;AAC9B,MAAA,MAAM,OAAO,KAAM,CAAA,CAAC,CAAK,IAAA,KAAA,KAAU,IAAI,GAAM,GAAA,EAAA,CAAA;AAC7C,MAAQ,OAAA,CAAA,IAAA,CAAK,KAAQ,GAAA,GAAA,GAAM,IAAI,CAAA;AAC/B,MAAA,IAAA,GAAO,IAAO,GAAA,QAAA;AACd,MAAA,aAAA,EAAA;AAAA;AACF;AAGF,EAAA,OAAO,EAAE,IAAA,EAAM,OAAQ,CAAA,IAAA,CAAK,IAAI,CAAE,EAAA;AACpC;AAEgB,SAAA,OAAA,CAAQ,MAAc,QAAyC,EAAA;AAC7E,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAIpB,EAAA,IAAI,OAAO,GAAM,EAAA;AACf,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,KAAA,CAAM,IAAI,CAAA,CAAE,OAAO,WAAW;AAAA,KACtC;AAAA;AAIF,EAAA,IAAI,OAAO,GAAO,EAAA;AAChB,IAAA,IAAIkE,OAAS,GAAA,iBAAA;AACb,IAAA,IAAI,aAAa,CAAG,EAAA;AAClB,MAAAA,OAAS,GAAA,OAAA;AAAA;AAEX,IAAA,OAAO,EAAE,IAAM,EAAA,KAAA,CAAM,IAAI,CAAE,CAAA,MAAA,CAAOA,OAAM,CAAE,EAAA;AAAA;AAI5C,EAAA,IAAI,OAAO,IAAS,EAAA;AAClB,IAAA,IAAIA,OAAS,GAAA,uBAAA;AACb,IAAA,IAAI,aAAa,CAAG,EAAA;AAClB,MAAAA,OAAS,GAAA,OAAA;AAAA,KACX,MAAA,IAAW,aAAa,CAAG,EAAA;AACzB,MAAAA,OAAS,GAAA,aAAA;AAAA;AAEX,IAAA,OAAO,EAAE,IAAM,EAAA,KAAA,CAAM,IAAI,CAAE,CAAA,MAAA,CAAOA,OAAM,CAAE,EAAA;AAAA;AAG5C,EAAA,IAAI,MAAS,GAAA,uBAAA;AAEb,EAAM,MAAA,KAAA,GAAQ,CAAG,EAAA,IAAA,CAAK,KAAM,CAAAC,YAAA,CAAS,MAAM,cAAc,CAAA,CAAE,OAAQ,EAAC,CAAC,CAAA,CAAA,CAAA;AAErE,EAAA,IAAI,aAAa,CAAG,EAAA;AAClB,IAAS,MAAA,GAAA,EAAA;AAAA,GACX,MAAA,IAAW,aAAa,CAAG,EAAA;AACzB,IAAS,MAAA,GAAA,OAAA;AAAA,GACX,MAAA,IAAW,aAAa,CAAG,EAAA;AACzB,IAAS,MAAA,GAAA,aAAA;AAAA;AAGX,EAAM,MAAA,IAAA,GAAO,MAAS,GAAA,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,KAAM,CAAA,IAAI,CAAE,CAAA,MAAA,CAAO,MAAM,CAAC,CAAK,CAAA,GAAA,KAAA;AACjE,EAAA,OAAO,EAAE,IAAK,EAAA;AAChB;AAEgB,SAAA,wBAAA,CAAyB,MAAc,QAAwC,EAAA;AAC7F,EAAO,OAAA,UAAA,CAAW,IAAM,EAAA,QAAA,EAAU,aAAoB,mBAAA;AACxD;AAEgB,SAAA,mBAAA,CAAoB,MAAc,QAAwC,EAAA;AACxF,EAAO,OAAA,UAAA,CAAW,IAAM,EAAA,QAAA,EAAU,QAAe,cAAA;AACnD;AAEO,SAAS,gCAAgC,IAA8B,EAAA;AAC5E,EAAA,IAAI,OAAO,CAAG,EAAA;AACZ,IAAM,MAAA,CAAA,GAAI,+BAAgC,CAAA,CAAC,IAAI,CAAA;AAC/C,IAAI,IAAA,CAAC,EAAE,MAAQ,EAAA;AACb,MAAA,CAAA,CAAE,MAAS,GAAA,EAAA;AAAA;AAEb,IAAA,CAAA,CAAE,MAAU,IAAA,MAAA;AACZ,IAAO,OAAA,CAAA;AAAA;AAET,EAAA,MAAM,UAAU,EAAC;AACjB,EAAA,MAAM,QAAW,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA,GAAO,IAAI,CAAA;AACvC,EAAA,MAAM,UAAa,GAAA,IAAA,CAAK,KAAO,CAAA,IAAA,GAAO,OAAQ,EAAE,CAAA;AAChD,EAAA,MAAM,UAAa,GAAA,IAAA,CAAK,KAAO,CAAA,IAAA,GAAO,OAAQ,EAAE,CAAA;AAChD,EAAW,QAAA,GAAA,CAAA,GAAI,QAAQ,IAAK,CAAA,EAAA,GAAK,QAAQ,CAAI,GAAA,OAAA,CAAQ,IAAK,CAAA,GAAA,GAAM,QAAQ,CAAA;AACxE,EAAa,UAAA,GAAA,CAAA,GAAI,QAAQ,IAAK,CAAA,EAAA,GAAK,UAAU,CAAI,GAAA,OAAA,CAAQ,IAAK,CAAA,GAAA,GAAM,UAAU,CAAA;AAC9E,EAAa,UAAA,GAAA,CAAA,GAAI,QAAQ,IAAK,CAAA,EAAA,GAAK,UAAU,CAAI,GAAA,OAAA,CAAQ,IAAK,CAAA,GAAA,GAAM,UAAU,CAAA;AAC9E,EAAA,OAAO,EAAE,IAAA,EAAM,OAAQ,CAAA,IAAA,CAAK,GAAG,CAAE,EAAA;AACnC;AAEO,SAAS,oCAAoC,IAA8B,EAAA;AAChF,EAAA,IAAI,OAAO,CAAG,EAAA;AACZ,IAAM,MAAA,CAAA,GAAI,mCAAoC,CAAA,CAAC,IAAI,CAAA;AACnD,IAAI,IAAA,CAAC,EAAE,MAAQ,EAAA;AACb,MAAA,CAAA,CAAE,MAAS,GAAA,EAAA;AAAA;AAEb,IAAA,CAAA,CAAE,MAAU,IAAA,MAAA;AACZ,IAAO,OAAA,CAAA;AAAA;AAET,EAAA,IAAI,SAAY,GAAA,EAAA;AAChB,EAAA,MAAM,OAAU,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA,IAAQ,KAAK,IAAK,CAAA,CAAA;AAC7C,EAAA,IAAI,UAAU,CAAG,EAAA;AACf,IAAA,SAAA,GAAY,OAAU,GAAA,KAAA;AAAA;AAExB,EAAA,MAAM,SAAY,GAAA,+BAAA,CAAgC,IAAO,GAAA,OAAA,GAAU,KAAK,IAAI,CAAA;AAC5E,EAAA,OAAO,EAAE,IAAA,EAAM,SAAY,GAAA,SAAA,CAAU,IAAK,EAAA;AAC5C;AAEgB,SAAA,WAAA,CAAY,MAAc,QAAwC,EAAA;AAChF,EAAO,OAAA,SAAA,CAAU,IAAO,GAAA,GAAA,EAAK,QAAQ,CAAA;AACvC;AAEgB,SAAA,mBAAA,CAAoB,MAAc,QAAwC,EAAA;AACxF,EAAO,OAAA,OAAA,CAAQ,MAAM,QAAQ,CAAA;AAC/B;AAEgB,SAAA,cAAA,CAAe,MAAc,QAAwC,EAAA;AACnF,EAAO,OAAA,OAAA,CAAQ,IAAO,GAAA,GAAA,EAAM,QAAQ,CAAA;AACtC;AAEgB,SAAA,wBAAA,CAAyB,SAAiB,YAAuC,EAAA;AAC/F,EAAA,OAAO,CAAC,KAAA,EAAe,QAAwB,EAAA,cAAA,EAA8B,QAAwC,KAAA;AACnH,IAAA,IAAI,YAAc,EAAA;AAChB,MAAA,IAAI,QAAS,EAAA,CAAE,MAAO,CAAA,KAAA,EAAO,KAAK,CAAG,EAAA;AACnC,QAAO,OAAA;AAAA,UACL,MAAM,cAAe,CAAA,KAAA,EAAO,EAAE,MAAQ,EAAA,YAAA,EAAc,UAAU;AAAA,SAChE;AAAA;AACF;AAEF,IAAO,OAAA,EAAE,MAAM,cAAe,CAAA,KAAA,EAAO,EAAE,MAAQ,EAAA,OAAA,EAAS,QAAS,EAAC,CAAE,EAAA;AAAA,GACtE;AACF;AAEa,MAAA,aAAA,GAAgB,yBAAyB,qBAAqB,CAAA;AAC9D,MAAA,0BAAA,GAA6B,wBAAyB,CAAA,qBAAA,EAAuB,UAAU,CAAA;AACvF,MAAA,YAAA,GAAe,yBAAyB,sBAAsB,CAAA;AAC9D,MAAA,yBAAA,GAA4B,wBAAyB,CAAA,sBAAA,EAAwB,WAAW,CAAA;AAE9F,SAAS,wBAA2B,GAAA;AACzC,EAAO,OAAA,wBAAA;AAAA,IACL,eAAgB,CAAA;AAAA,MACd,IAAM,EAAA,SAAA;AAAA,MACN,KAAO,EAAA,SAAA;AAAA,MACP,GAAK,EAAA,SAAA;AAAA,MACL,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA,SAAA;AAAA,MACR,MAAQ,EAAA;AAAA,KACT;AAAA,GACH;AACF;AAEO,SAAS,qCAAwC,GAAA;AACtD,EAAO,OAAA,wBAAA;AAAA,IACL,eAAgB,CAAA;AAAA,MACd,IAAM,EAAA,SAAA;AAAA,MACN,KAAO,EAAA,SAAA;AAAA,MACP,GAAK,EAAA,SAAA;AAAA,MACL,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA,SAAA;AAAA,MACR,MAAQ,EAAA;AAAA,KACT,CAAA;AAAA,IACD,eAAgB,CAAA;AAAA,MACd,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA,SAAA;AAAA,MACR,MAAQ,EAAA;AAAA,KACT;AAAA,GACH;AACF;AAEO,SAAS,uBACd,CAAA,KAAA,EACA,QACA,EAAA,cAAA,EACA,UACA,MACgB,EAAA;AAChB,EAAO,OAAA;AAAA,IACL,IAAA,EAAM,eAAe,KAAO,EAAA;AAAA,MAC1B,MAAQ,EAAA,MAAA,GAAS,iBAAkB,CAAA,UAAA,GAAa,iBAAkB,CAAA,QAAA;AAAA,MAClE;AAAA,KACD;AAAA,GACH;AACF;AAEO,SAAS,eACd,CAAA,KAAA,EACA,QACA,EAAA,cAAA,EACA,QACgB,EAAA;AAChB,EAAA,OAAO,EAAE,IAAM,EAAA,qBAAA,CAAsB,OAAO,EAAE,QAAA,EAAU,CAAE,EAAA;AAC5D;;AC/ZgB,SAAA,QAAA,CAAS,QAAgB,QAAoC,EAAA;AAC3E,EAAA,MAAM,QAAQ,CAAC,EAAA,EAAI,GAAK,EAAA,GAAA,EAAK,KAAK,GAAG,CAAA;AACrC,EAAM,MAAA,MAAA,GAAS,WAAY,CAAA,GAAA,EAAM,KAAK,CAAA;AACtC,EAAO,OAAA,CAAC,KAAe,EAAA,QAAA,EAAyB,cAAkC,KAAA;AAPpF,IAAA,IAAA,EAAA;AAQI,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAEpB,IAAA,MAAM,aAAa,KAAQ,GAAA,CAAA;AAC3B,IAAA,IAAI,UAAY,EAAA;AACd,MAAQ,KAAA,GAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA;AAExB,IAAA,MAAM,MAAS,GAAA,MAAA,CAAO,KAAO,EAAA,QAAA,EAAU,cAAc,CAAA;AACrD,IAAA,IAAI,QAAU,EAAA;AACZ,MAAO,MAAA,CAAA,MAAA,GAAS,OAAO,MAAW,KAAA,KAAA,CAAA,GAAY,GAAG,MAAO,CAAA,MAAM,CAAG,EAAA,MAAM,CAAK,CAAA,GAAA,KAAA,CAAA;AAAA,KACvE,MAAA;AACL,MAAA,MAAA,CAAO,MAAS,GAAA,MAAA;AAAA;AAElB,IAAA,IAAI,UAAY,EAAA;AACd,MAAO,MAAA,CAAA,MAAA,GAAS,MAAI,EAAO,GAAA,MAAA,CAAA,MAAA,KAAP,mBAAe,MAAS,IAAA,MAAA,CAAO,SAAS,EAAE,CAAA,CAAA;AAAA;AAEhE,IAAO,OAAA,MAAA;AAAA,GACT;AACF;AAEA,MAAM,WAAc,GAAA,CAAC,GAAK,EAAA,GAAA,EAAK,KAAK,MAAK,EAAA,GAAA,EAAK,EAAI,EAAA,GAAA,EAAK,KAAK,GAAK,EAAA,GAAA,EAAK,GAAK,EAAA,GAAA,EAAK,KAAK,GAAG,CAAA;AACxF,MAAM,aAAA,GAAgB,WAAY,CAAA,OAAA,CAAQ,EAAE,CAAA;AAErC,SAAS,sBAAsB,CAAmB,EAAA;AACvD,EAAA,MAAM,SAAY,GAAA,WAAA,CAAY,SAAU,CAAA,CAAC,MAAW,KAAA,MAAA,CAAO,SAAU,CAAA,MAAM,CAAM,KAAA,CAAA,CAAE,SAAU,CAAA,MAAM,CAAC,CAAA;AACpG,EAAO,OAAA,SAAA,GAAY,CAAI,GAAA,CAAA,GAAI,SAAY,GAAA,aAAA;AACzC;AAEA,MAAM,YAAA,GAAe,CAAC,EAAA,EAAI,IAAM,EAAA,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,IAAM,EAAA,IAAA,EAAM,IAAI,CAAA;AAExD,SAAA,YAAA,CAAa,IAAc,EAAA,MAAA,GAAS,CAAmB,EAAA;AACrE,EAAA,MAAM,QAAQ,YAAa,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA,GAAA,GAAM,IAAI,IAAI,CAAA;AACpD,EAAO,OAAA,WAAA,CAAY,IAAM,EAAA,KAAA,EAAO,MAAM,CAAA;AACxC;AAEgB,SAAA,QAAA,CAAS,IAAc,EAAA,MAAA,GAAS,CAAmB,EAAA;AACjE,EAAA,MAAM,QAAQ,WAAY,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA,GAAA,GAAM,IAAI,IAAI,CAAA;AACnD,EAAA,OAAO,WAAY,CAAA,GAAA,EAAM,KAAO,EAAA,aAAA,GAAgB,MAAM,CAAA;AACxD;;ACVO,MAAM,gBAAgB,MAA6B;AAAA,EACxD;AAAA,IACE,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,QAAU,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,WAAA,CAAY,EAAE,CAAE,EAAA;AAAA,MAClD,EAAE,IAAM,EAAA,QAAA,EAAU,EAAI,EAAA,QAAA,EAAU,IAAI,cAAe,EAAA;AAAA,MACnD;AAAA,QACE,IAAM,EAAA,OAAA;AAAA,QACN,EAAI,EAAA,OAAA;AAAA,QACJ,EAAI,EAAA,WAAA,CAAY,GAAM,EAAA,CAAC,EAAI,EAAA,IAAA,EAAM,MAAQ,EAAA,MAAA,EAAQ,MAAQ,EAAA,QAAA,EAAU,QAAU,EAAA,OAAA,EAAS,OAAO,CAAC;AAAA,OAChG;AAAA,MACA,EAAE,MAAM,UAAY,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,QAAA,CAAS,EAAE,CAAE,EAAA;AAAA,MACpD,EAAE,IAAM,EAAA,iBAAA,EAAmB,EAAI,EAAA,SAAA,EAAW,IAAI,SAAU,EAAA;AAAA,MACxD,EAAE,IAAM,EAAA,mBAAA,EAAqB,EAAI,EAAA,aAAA,EAAe,IAAI,aAAc,EAAA;AAAA,MAClE,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,YAAY,EAAI,EAAA,WAAA,CAAY,IAAI,CAAE,EAAA;AAAA,MAC/D,EAAE,MAAM,SAAW,EAAA,EAAA,EAAI,MAAM,EAAI,EAAA,WAAA,CAAY,IAAI,CAAE,EAAA;AAAA,MACnD,EAAE,MAAM,cAAgB,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,QAAA,CAAS,IAAI,CAAE,EAAA;AAAA,MAC1D,EAAE,IAAM,EAAA,kBAAA,EAAoB,EAAI,EAAA,OAAA,EAAS,IAAI,OAAQ,EAAA;AAAA,MACrD,EAAE,IAAM,EAAA,aAAA,EAAe,EAAI,EAAA,KAAA,EAAO,IAAI,KAAM,EAAA;AAAA,MAC5C,EAAE,IAAM,EAAA,qBAAA,EAAuB,EAAI,EAAA,KAAA,EAAO,IAAI,GAAI,EAAA;AAAA,MAClD,EAAE,IAAM,EAAA,eAAA,EAAiB,EAAI,EAAA,QAAA,EAAU,IAAI,MAAO,EAAA;AAAA,MAClD,EAAE,MAAM,QAAU,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,WAAA,CAAY,IAAI,CAAE;AAAA;AACvD,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,cAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,gBAAe,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,WAAA,CAAY,WAAQ,CAAE,EAAA;AAAA,MAC/D,EAAE,MAAM,cAAa,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,WAAA,CAAY,WAAQ,CAAE,EAAA;AAAA,MAC7D,EAAE,MAAM,QAAU,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,WAAA,CAAY,GAAG,CAAE;AAAA;AACrD,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,gBAAe,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,WAAA,CAAY,MAAG,CAAE,EAAA;AAAA,MAC1D,EAAE,MAAM,SAAW,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,WAAA,CAAY,KAAK,CAAE,EAAA;AAAA,MACxD,EAAE,MAAM,SAAW,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,WAAA,CAAY,MAAM,CAAE,EAAA;AAAA,MACvD,EAAE,MAAM,aAAe,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,WAAA,CAAY,QAAQ,CAAE,EAAA;AAAA,MAC/D,EAAE,MAAM,aAAe,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,WAAA,CAAY,QAAQ,CAAE;AAAA;AACjE,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,uBAAsB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,WAAA,CAAY,OAAI,CAAE,EAAA;AAAA,MAClE,EAAE,MAAM,sBAAqB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,WAAA,CAAY,QAAK,CAAE,EAAA;AAAA,MAClE,EAAE,MAAM,uBAAsB,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,WAAA,CAAY,QAAK,CAAE,EAAA;AAAA,MACpE,EAAE,MAAM,YAAc,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,WAAA,CAAY,IAAI,CAAE,EAAA;AAAA,MACzD,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,YAAY,EAAI,EAAA,WAAA,CAAY,IAAI,CAAE;AAAA;AACjE,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,aAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,QAAU,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,OAAO,CAAE,EAAA;AAAA,MACrD,EAAE,MAAM,SAAW,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,OAAS,EAAA,CAAC,CAAE,EAAA;AAAA,MAC1D,EAAE,MAAM,SAAW,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,OAAS,EAAA,CAAC,CAAE,EAAA;AAAA,MAC1D,EAAE,MAAM,SAAW,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,OAAS,EAAA,CAAC,CAAE,EAAA;AAAA,MAC1D,EAAE,MAAM,SAAW,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,OAAS,EAAA,CAAC,CAAE,EAAA;AAAA,MAC1D,EAAE,MAAM,SAAW,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,OAAS,EAAA,CAAC,CAAE,EAAA;AAAA,MAC1D,EAAE,MAAM,SAAW,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,OAAS,EAAA,CAAC,CAAE,EAAA;AAAA,MAC1D,EAAE,MAAM,SAAW,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,OAAS,EAAA,CAAC,CAAE;AAAA;AAC5D,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,eAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,yBAA2B,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,WAAA,CAAY,KAAK,CAAE,EAAA;AAAA,MACrE,EAAE,MAAM,yBAA2B,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,WAAA,CAAY,KAAK,CAAE,EAAA;AAAA,MACxE,EAAE,MAAM,qCAAoC,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,WAAA,CAAY,UAAO,CAAE,EAAA;AAAA,MACpF,EAAE,MAAM,6CAA4C,EAAA,EAAA,EAAI,YAAY,EAAI,EAAA,WAAA,CAAY,WAAQ,CAAE,EAAA;AAAA,MAC9F,EAAE,MAAM,2CAAqC,EAAA,EAAA,EAAI,gBAAW,EAAI,EAAA,WAAA,CAAY,eAAO,CAAE,EAAA;AAAA,MACrF,EAAE,MAAM,mDAA6C,EAAA,EAAA,EAAI,iBAAY,EAAI,EAAA,WAAA,CAAY,gBAAQ,CAAE,EAAA;AAAA,MAC/F,EAAE,MAAM,sCAAqC,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,WAAA,CAAY,UAAO,CAAE,EAAA;AAAA,MACrF,EAAE,MAAM,8CAA6C,EAAA,EAAA,EAAI,YAAY,EAAI,EAAA,WAAA,CAAY,WAAQ,CAAE,EAAA;AAAA,MAC/F,EAAE,MAAM,gCAA+B,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,WAAA,CAAY,SAAM,CAAE,EAAA;AAAA,MAC7E,EAAE,MAAM,wCAAuC,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,WAAA,CAAY,UAAO,CAAE,EAAA;AAAA,MACvF,EAAE,MAAM,kCAAoC,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,WAAA,CAAY,OAAO,CAAE,EAAA;AAAA,MACpF,EAAE,MAAM,+BAAiC,EAAA,EAAA,EAAI,YAAY,EAAI,EAAA,WAAA,CAAY,QAAQ,CAAE;AAAA;AACrF,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,UAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,aAAe,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,GAAG,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,eAAc,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,MAAG,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,eAAY,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,QAAG,CAAE,EAAA;AAAA,MACzD,EAAE,MAAM,YAAW,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,MAAG,CAAE,EAAA;AAAA,MACxD,EAAE,MAAM,iBAAc,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,QAAG,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,mBAAgB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,QAAG,CAAE,EAAA;AAAA,MAC7D,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,IAAI,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,mBAAqB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,IAAM,EAAA,IAAI,CAAE,EAAA;AAAA,MACzE,EAAE,MAAM,yBAAwB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,IAAM,EAAA,IAAI,CAAE,EAAA;AAAA,MAC5E,EAAE,MAAM,sBAAwB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,IAAM,EAAA,IAAI,CAAE,EAAA;AAAA,MAC5E,EAAE,MAAM,oBAAsB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,IAAM,EAAA,IAAI,CAAE,EAAA;AAAA,MAC1E,EAAE,MAAM,oBAAsB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,KAAK,CAAE,EAAA;AAAA,MACrE,EAAE,MAAM,mBAAqB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,KAAK,CAAE,EAAA;AAAA,MACpE,EAAE,MAAM,yBAAsB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,KAAK,CAAE,EAAA;AAAA,MACrE,EAAE,MAAM,kBAAe,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,QAAG,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,wBAAqB,EAAA,EAAA,EAAI,gBAAgB,EAAI,EAAA,QAAA,CAAS,MAAM,CAAE,EAAA;AAAA,MACtE,EAAE,MAAM,wBAAqB,EAAA,EAAA,EAAI,qBAAgB,EAAI,EAAA,QAAA,CAAS,WAAM,CAAE,EAAA;AAAA,MACtE,EAAE,MAAM,wBAA0B,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,GAAG,CAAE,EAAA;AAAA,MACvE,EAAE,MAAM,uBAAoB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,QAAG,CAAE,EAAA;AAAA,MACjE,EAAE,MAAM,2BAAwB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,QAAG,CAAE,EAAA;AAAA,MACrE,EAAE,MAAM,wBAA0B,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,IAAI,CAAE,EAAA;AAAA,MACxE,EAAE,MAAM,uBAAyB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,KAAK,CAAE,EAAA;AAAA,MACxE,EAAE,MAAM,uBAAyB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,QAAK,EAAA,IAAI,CAAE,EAAA;AAAA,MAC5E,EAAE,MAAM,uBAAoB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,QAAK,EAAA,IAAI,CAAE,EAAA;AAAA,MACvE,EAAE,MAAM,wBAA0B,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,IAAI,CAAE,EAAA;AAAA,MACxE,EAAE,MAAM,iBAAmB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,KAAK,CAAE,EAAA;AAAA,MAClE,EAAE,MAAM,qBAAuB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,KAAK,CAAE,EAAA;AAAA,MACtE,EAAE,MAAM,qBAAe,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,QAAG,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,oBAAsB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,KAAK,CAAE,EAAA;AAAA,MACrE,EAAE,MAAM,8BAA2B,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,QAAG,CAAE;AAAA;AAC1E,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,YAAc,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,YAAA,CAAa,GAAG,CAAE,EAAA;AAAA,MACzD,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,YAAY,EAAI,EAAA,QAAA,CAAS,GAAG,CAAE,EAAA;AAAA,MACvD,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,YAAA,CAAa,GAAG,CAAE,EAAA;AAAA,MACvD,EAAE,MAAM,UAAY,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,QAAA,CAAS,GAAG,CAAE,EAAA;AAAA,MACrD,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,YAAA,CAAa,GAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,aAAa,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,YAAA,CAAa,GAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,aAAa,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,YAAA,CAAa,GAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,aAAa,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,YAAA,CAAa,GAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,aAAa,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,YAAA,CAAa,GAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,aAAa,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAC,CAAE;AAAA;AAC7D,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,WAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,aAAe,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,KAAK,CAAE,EAAA;AAAA,MACtD,EAAE,MAAM,gBAAkB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,YAAA,CAAa,KAAK,CAAE,EAAA;AAAA,MAChE,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,KAAK,CAAE,EAAA;AAAA,MACxD,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,YAAA,CAAa,KAAK,CAAE,EAAA;AAAA,MAC/D,EAAE,MAAM,cAAgB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,KAAK,CAAE,EAAA;AAAA,MACvD,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,YAAA,CAAa,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAChE,EAAE,MAAM,cAAgB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,YAAA,CAAa,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MACjE,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,cAAgB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,YAAA,CAAa,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAChE,EAAE,MAAM,cAAgB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,YAAA,CAAa,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MACjE,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,cAAgB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,YAAA,CAAa,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAChE,EAAE,MAAM,cAAgB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,YAAA,CAAa,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MACjE,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,cAAgB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,YAAA,CAAa,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAChE,EAAE,MAAM,cAAgB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,YAAA,CAAa,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MACjE,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,cAAgB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,YAAA,CAAa,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAChE,EAAE,MAAM,cAAgB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,YAAA,CAAa,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MACjE,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,cAAgB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE;AAAA;AAC9D,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,aAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,IAAM,EAAA,cAAA,EAAgB,EAAI,EAAA,eAAA,EAAiB,IAAI,aAAc,EAAA;AAAA,MAC/D,EAAE,IAAM,EAAA,iCAAA,EAAmC,EAAI,EAAA,4BAAA,EAA8B,IAAI,0BAA2B,EAAA;AAAA,MAC5G,EAAE,IAAM,EAAA,aAAA,EAAe,EAAI,EAAA,cAAA,EAAgB,IAAI,YAAa,EAAA;AAAA,MAC5D,EAAE,IAAM,EAAA,gCAAA,EAAkC,EAAI,EAAA,2BAAA,EAA6B,IAAI,yBAA0B,EAAA;AAAA,MACzG,EAAE,IAAM,EAAA,gBAAA,EAAkB,IAAI,iBAAmB,EAAA,EAAA,EAAI,0BAA2B,EAAA;AAAA,MAChF;AAAA,QACE,IAAM,EAAA,mCAAA;AAAA,QACN,EAAI,EAAA,8BAAA;AAAA,QACJ,IAAI,qCAAsC;AAAA,OAC5C;AAAA,MACA,EAAE,IAAM,EAAA,kBAAA,EAAoB,EAAI,EAAA,kBAAA,EAAoB,IAAI,uBAAwB,EAAA;AAAA,MAChF,EAAE,IAAM,EAAA,UAAA,EAAY,EAAI,EAAA,iBAAA,EAAmB,IAAI,eAAgB;AAAA;AACjE,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,QAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,UAAY,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,QAAA,CAAS,GAAG,CAAE,EAAA;AAAA,MAClD,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MAC7D,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,gBAAkB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MAC7D,EAAE,MAAM,iCAAgC,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,SAAM,CAAE,EAAA;AAAA,MACxE,EAAE,MAAM,kBAAoB,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,QAAA,CAAS,IAAI,CAAE,EAAA;AAAA,MAC9D,EAAE,MAAM,uBAAyB,EAAA,EAAA,EAAI,YAAY,EAAI,EAAA,QAAA,CAAS,IAAM,EAAA,CAAC,CAAE,EAAA;AAAA,MACvE,EAAE,MAAM,4BAA8B,EAAA,EAAA,EAAI,gBAAgB,EAAI,EAAA,QAAA,CAAS,KAAK,CAAE,EAAA;AAAA,MAC9E,EAAE,MAAM,iCAAmC,EAAA,EAAA,EAAI,iBAAiB,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MACvF,EAAE,MAAM,gBAAkB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,IAAI,CAAE,EAAA;AAAA,MAC1D,EAAE,MAAM,gCAAkC,EAAA,EAAA,EAAI,cAAc,EAAI,EAAA,QAAA,CAAS,OAAO,CAAE,EAAA;AAAA,MAClF,EAAE,MAAM,qBAAuB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,IAAM,EAAA,CAAC,CAAE,EAAA;AAAA,MACnE,EAAE,MAAM,oBAAsB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,OAAS,EAAA,CAAC,CAAE,EAAA;AAAA,MACrE,EAAE,MAAM,qBAAuB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,IAAM,EAAA,CAAC,CAAE,EAAA;AAAA,MACnE,EAAE,MAAM,kBAAoB,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,QAAA,CAAS,IAAI,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,uBAAyB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,IAAM,EAAA,CAAC,CAAE,EAAA;AAAA,MACpE,EAAE,MAAM,wBAA0B,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,IAAM,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MACtE,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,GAAG,CAAE,EAAA;AAAA,MACpD,EAAE,MAAM,oBAAsB,EAAA,EAAA,EAAI,MAAM,EAAI,EAAA,QAAA,CAAS,IAAI,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,YAAc,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,GAAG,CAAE,EAAA;AAAA,MACnD,EAAE,MAAM,iBAAmB,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,kBAAoB,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MAC9D,EAAE,MAAM,UAAY,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,QAAA,CAAS,GAAG,CAAE,EAAA;AAAA,MAClD,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,gBAAkB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MAC7D,EAAE,MAAM,yBAA2B,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,KAAK,CAAE,EAAA;AAAA,MAClE,EAAE,MAAM,oBAAiB,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,QAAA,CAAS,QAAK,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,cAAW,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,QAAG,CAAE,EAAA;AAAA,MAChD,EAAE,MAAM,mBAAgB,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,QAAA,CAAS,QAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MACzD,EAAE,MAAM,mBAAgB,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,QAAA,CAAS,QAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MACzD,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,GAAG,CAAE,EAAA;AAAA,MACpD,EAAE,MAAM,oBAAmB,EAAA,EAAA,EAAI,aAAU,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MAC/D,EAAE,MAAM,gBAAkB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MAC9D,EAAE,MAAM,gBAAkB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MAC9D,EAAE,MAAM,iBAAmB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MAC/D,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,GAAG,CAAE,EAAA;AAAA,MACpD,EAAE,MAAM,iBAAmB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MAC/D,EAAE,MAAM,oBAAmB,EAAA,EAAA,EAAI,aAAU,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MAC/D,EAAE,MAAM,aAAe,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,IAAI,CAAE;AAAA;AAC1D,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,mBAAqB,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,WAAA,CAAY,KAAK,CAAE,EAAA;AAAA,MACnE,EAAE,MAAM,wBAA0B,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,WAAA,CAAY,KAAK,CAAE,EAAA;AAAA,MACxE,EAAE,MAAM,sBAAwB,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,WAAA,CAAY,KAAK,CAAE,EAAA;AAAA,MACtE,EAAE,MAAM,sBAAwB,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,WAAA,CAAY,KAAK,CAAE,EAAA;AAAA,MACtE,EAAE,MAAM,YAAc,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,WAAA,CAAY,KAAK,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,mBAAqB,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,WAAA,CAAY,OAAO,CAAE,EAAA;AAAA,MACrE,EAAE,MAAM,yBAA2B,EAAA,EAAA,EAAI,YAAY,EAAI,EAAA,WAAA,CAAY,QAAQ,CAAE,EAAA;AAAA,MAC7E,EAAE,MAAM,UAAY,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,WAAA,CAAY,KAAK,CAAE;AAAA;AACxD,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,oBAAsB,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,QAAA,CAAS,IAAI,CAAE,EAAA;AAAA,MAChE,EAAE,MAAM,yBAA2B,EAAA,EAAA,EAAI,YAAY,EAAI,EAAA,QAAA,CAAS,IAAM,EAAA,CAAC,CAAE,EAAA;AAAA,MACzE,EAAE,MAAM,aAAe,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,GAAG,CAAE,EAAA;AAAA,MACvD,EAAE,MAAM,kBAAoB,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAC,CAAE;AAAA;AAClE,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,WAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,YAAc,EAAA,EAAA,EAAI,MAAM,EAAI,EAAA,QAAA,CAAS,KAAK,CAAE,EAAA;AAAA,MACpD,EAAE,MAAM,gBAAkB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,gBAAkB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,gBAAkB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,gBAAkB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,gBAAkB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE;AAAA;AAC7D,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,gBAAkB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MAC9D,EAAE,MAAM,UAAY,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,GAAG,CAAE,EAAA;AAAA,MACnD,EAAE,MAAM,YAAc,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,WAAA,CAAY,IAAI,CAAE,EAAA;AAAA,MAC1D,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MAC5D,EAAE,MAAM,gBAAkB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,WAAA,CAAY,GAAG,CAAE;AAAA;AAC9D,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,QAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,iBAAmB,EAAA,EAAA,EAAI,YAAY,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MACjE,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,YAAY,EAAI,EAAA,WAAA,CAAY,IAAI,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,YAAY,EAAI,EAAA,WAAA,CAAY,IAAI,CAAE,EAAA;AAAA,MAC3D,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,QAAA,CAAS,GAAG,CAAE,EAAA;AAAA,MACtD,EAAE,MAAM,gBAAkB,EAAA,EAAA,EAAI,YAAY,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAC,CAAE,EAAA;AAAA,MAC/D,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,YAAY,EAAI,EAAA,WAAA,CAAY,IAAI,CAAE;AAAA;AAC7D,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,UAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,gBAAgB,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MACjE,EAAE,MAAM,MAAQ,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,QAAA,CAAS,KAAK,CAAE,EAAA;AAAA,MACvD,EAAE,MAAM,UAAY,EAAA,EAAA,EAAI,gBAAgB,EAAI,EAAA,QAAA,CAAS,KAAO,EAAA,CAAC,CAAE,EAAA;AAAA,MAC/D,EAAE,MAAM,SAAW,EAAA,EAAA,EAAI,cAAc,EAAI,EAAA,QAAA,CAAS,IAAI,CAAE,EAAA;AAAA,MACxD,EAAE,MAAM,cAAgB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,WAAA,CAAY,KAAK,CAAE,EAAA;AAAA,MAClE,EAAE,MAAM,aAAe,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,WAAA,CAAY,KAAK,CAAE,EAAA;AAAA,MACjE,EAAE,MAAM,mBAAqB,EAAA,EAAA,EAAI,cAAc,EAAI,EAAA,WAAA,CAAY,KAAK,CAAE,EAAA;AAAA,MACtE,EAAE,IAAA,EAAM,KAAO,EAAA,EAAA,EAAI,aAAe,EAAA,EAAA,EAAI,WAAY,CAAA,GAAA,EAAM,CAAC,KAAA,EAAO,KAAO,EAAA,MAAM,CAAC,CAAE;AAAA;AAClF,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,WAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,gBAAkB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,IAAI,CAAE,EAAA;AAAA,MAC1D,EAAE,MAAM,YAAc,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,IAAI,CAAE,EAAA;AAAA,MACtD,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,IAAI,CAAE,EAAA;AAAA,MACrD,EAAE,MAAM,KAAO,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,KAAK,CAAE,EAAA;AAAA,MACjD,EAAE,MAAM,cAAgB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,IAAI,CAAE,EAAA;AAAA,MACxD,EAAE,MAAM,oBAAsB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,IAAM,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MACnE,EAAE,MAAM,uBAAsB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,IAAM,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MACnE,EAAE,MAAM,KAAO,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,KAAK,CAAE,EAAA;AAAA,MACjD,EAAE,MAAM,iBAAmB,EAAA,EAAA,EAAI,aAAa,EAAI,EAAA,QAAA,CAAS,MAAM,CAAE,EAAA;AAAA,MACjE,EAAE,MAAM,cAAgB,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,QAAA,CAAS,GAAG,CAAE,EAAA;AAAA,MACtD,EAAE,MAAM,qBAAuB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,MAAM,CAAE,EAAA;AAAA,MAClE,EAAE,MAAM,2BAA6B,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,QAAA,CAAS,MAAQ,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MAC7E,EAAE,MAAM,8BAA6B,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,QAAA,CAAS,MAAQ,EAAA,CAAA,CAAE,CAAE;AAAA;AAC/E,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,kBAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,8BAAgC,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,WAAA,CAAY,KAAK,CAAE,EAAA;AAAA,MAC7E,EAAE,MAAM,YAAc,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,IAAI,CAAE,EAAA;AAAA,MACtD,EAAE,MAAM,iBAAmB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,IAAM,EAAA,CAAC,CAAE,EAAA;AAAA,MAC/D,EAAE,MAAM,iBAAmB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,IAAM,EAAA,CAAC,CAAE,EAAA;AAAA,MAC/D,EAAE,MAAM,iBAAmB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,IAAM,EAAA,CAAC,CAAE,EAAA;AAAA,MAC/D,EAAE,MAAM,4BAA8B,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,WAAA,CAAY,OAAO,CAAE,EAAA;AAAA,MAC9E,EAAE,MAAM,6BAA4B,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,WAAA,CAAY,QAAK,CAAE;AAAA;AAC5E,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,aAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,iBAAgB,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,WAAA,CAAY,OAAI,CAAE,EAAA;AAAA,MAC7D,EAAE,MAAM,oBAAmB,EAAA,EAAA,EAAI,cAAc,EAAI,EAAA,WAAA,CAAY,OAAI,CAAE,EAAA;AAAA,MACnE,EAAE,MAAM,YAAc,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,WAAA,CAAY,GAAG,CAAE;AAAA;AAC3D,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,aAAe,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,IAAI,CAAE,EAAA;AAAA,MACvD,EAAE,IAAM,EAAA,kBAAA,EAAoB,EAAI,EAAA,IAAA,EAAM,IAAI,aAAc,EAAA;AAAA,MACxD,EAAE,IAAM,EAAA,sBAAA,EAAqB,EAAI,EAAA,OAAA,EAAM,IAAI,cAAe,EAAA;AAAA,MAC1D,EAAE,IAAM,EAAA,mBAAA,EAAqB,EAAI,EAAA,IAAA,EAAM,IAAI,cAAe,EAAA;AAAA,MAC1D,EAAE,IAAM,EAAA,aAAA,EAAe,EAAI,EAAA,GAAA,EAAK,IAAI,SAAU,EAAA;AAAA,MAC9C,EAAE,IAAM,EAAA,aAAA,EAAe,EAAI,EAAA,GAAA,EAAK,IAAI,SAAU,EAAA;AAAA,MAC9C,EAAE,IAAM,EAAA,WAAA,EAAa,EAAI,EAAA,GAAA,EAAK,IAAI,OAAQ,EAAA;AAAA,MAC1C,EAAE,IAAM,EAAA,UAAA,EAAY,EAAI,EAAA,GAAA,EAAK,IAAI,MAAO,EAAA;AAAA,MACxC,EAAE,IAAM,EAAA,eAAA,EAAiB,EAAI,EAAA,cAAA,EAAgB,IAAI,wBAAyB,EAAA;AAAA,MAC1E,EAAE,IAAM,EAAA,cAAA,EAAgB,EAAI,EAAA,aAAA,EAAe,IAAI,mBAAoB,EAAA;AAAA,MACnE,EAAE,IAAM,EAAA,qBAAA,EAAuB,EAAI,EAAA,OAAA,EAAS,IAAI,+BAAgC,EAAA;AAAA,MAChF,EAAE,IAAM,EAAA,uBAAA,EAAyB,EAAI,EAAA,QAAA,EAAU,IAAI,mCAAoC,EAAA;AAAA,MACvF,EAAE,IAAM,EAAA,mBAAA,EAAqB,EAAI,EAAA,WAAA,EAAa,IAAI,WAAY,EAAA;AAAA,MAC9D,EAAE,IAAM,EAAA,YAAA,EAAc,EAAI,EAAA,SAAA,EAAW,IAAI,mBAAoB,EAAA;AAAA,MAC7D,EAAE,IAAM,EAAA,WAAA,EAAa,EAAI,EAAA,QAAA,EAAU,IAAI,cAAe;AAAA;AACxD,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,YAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,kBAAoB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,eAAA,CAAgB,KAAK,CAAE,EAAA;AAAA,MAClE,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,eAAA,CAAgB,OAAO,CAAE,EAAA;AAAA,MACjE,EAAE,MAAM,oBAAsB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,eAAA,CAAgB,OAAO,CAAE,EAAA;AAAA,MACxE,EAAE,MAAM,iBAAmB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,eAAA,CAAgB,MAAM,CAAE,EAAA;AAAA,MAClE,EAAE,MAAM,kBAAoB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,eAAA,CAAgB,MAAM,CAAE,EAAA;AAAA,MACnE,EAAE,MAAM,oBAAsB,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,eAAA,CAAgB,MAAM,CAAE,EAAA;AAAA,MACtE,EAAE,MAAM,kBAAoB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,eAAA,CAAgB,OAAO,CAAE,EAAA;AAAA,MACpE,EAAE,MAAM,oBAAsB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,eAAA,CAAgB,OAAO,CAAE,EAAA;AAAA,MACtE,EAAE,MAAM,mBAAqB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,eAAA,CAAgB,OAAO,CAAE,EAAA;AAAA,MACvE,EAAE,MAAM,gBAAkB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,eAAA,CAAgB,QAAQ,CAAE,EAAA;AAAA,MACtE,EAAE,MAAM,kBAAoB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,eAAA,CAAgB,KAAK,CAAE,EAAA;AAAA,MAClE,EAAE,MAAM,eAAiB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,eAAA,CAAgB,OAAO,CAAE,EAAA;AAAA,MACjE,EAAE,MAAM,oBAAsB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,eAAA,CAAgB,OAAO,CAAE,EAAA;AAAA,MACxE,EAAE,MAAM,iBAAmB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,eAAA,CAAgB,MAAM,CAAE,EAAA;AAAA,MAClE,EAAE,MAAM,kBAAoB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,eAAA,CAAgB,MAAM,CAAE,EAAA;AAAA,MACnE,EAAE,MAAM,kBAAoB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,eAAA,CAAgB,QAAQ,CAAE,EAAA;AAAA,MACrE,EAAE,MAAM,oBAAsB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,eAAA,CAAgB,QAAQ,CAAE,EAAA;AAAA,MACvE,EAAE,MAAM,mBAAqB,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,eAAA,CAAgB,OAAO,CAAE,EAAA;AAAA,MACvE,EAAE,MAAM,gBAAkB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,eAAA,CAAgB,QAAQ,CAAE;AAAA;AACxE,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,UAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,qBAAuB,EAAA,EAAA,EAAI,cAAc,EAAI,EAAA,WAAA,CAAY,KAAK,CAAE,EAAA;AAAA,MACxE,EAAE,MAAM,wBAA0B,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,WAAA,CAAY,MAAM,CAAE,EAAA;AAAA,MAC7E,EAAE,MAAM,kBAAoB,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,WAAA,CAAY,KAAK,CAAE,EAAA;AAAA,MACtE,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,gBAAgB,EAAI,EAAA,WAAA,CAAY,IAAI,CAAE;AAAA;AACjE,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,QAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,iBAAmB,EAAA,EAAA,EAAI,UAAU,EAAI,EAAA,QAAA,CAAS,GAAK,EAAA,CAAA,CAAE,CAAE,EAAA;AAAA,MAC/D,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,SAAS,EAAI,EAAA,QAAA,CAAS,GAAG,CAAE,EAAA;AAAA,MACpD,EAAE,MAAM,aAAe,EAAA,EAAA,EAAI,MAAM,EAAI,EAAA,WAAA,CAAY,OAAI,CAAE,EAAA;AAAA,MACvD,EAAE,MAAM,oBAAsB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,WAAA,CAAY,QAAK,CAAE,EAAA;AAAA,MAChE,EAAE,MAAM,iBAAmB,EAAA,EAAA,EAAI,OAAO,EAAI,EAAA,WAAA,CAAY,QAAK,CAAE,EAAA;AAAA,MAC7D,EAAE,MAAM,SAAW,EAAA,EAAA,EAAI,WAAW,EAAI,EAAA,WAAA,CAAY,KAAK,CAAE;AAAA;AAC3D,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,SAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,MAAM,cAAgB,EAAA,EAAA,EAAI,QAAQ,EAAI,EAAA,qBAAA,CAAsB,MAAQ,EAAA,OAAO,CAAE,EAAA;AAAA,MAC/E,EAAE,MAAM,UAAY,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,qBAAA,CAAsB,KAAO,EAAA,IAAI,CAAE,EAAA;AAAA,MAC9E,EAAE,MAAM,UAAY,EAAA,EAAA,EAAI,eAAe,EAAI,EAAA,qBAAA,CAAsB,IAAM,EAAA,KAAK,CAAE;AAAA;AAChF;AAEJ,CAAA;;AC3aO,SAAS,uBAAuB,GAA6B,EAAA;AAfpE,EAAA,IAAA,EAAA,EAAA,EAAA;AAgBE,EAAA,OAAO,CAAG,EAAA,CAAA,EAAA,GAAA,GAAA,CAAI,MAAJ,KAAA,IAAA,GAAA,EAAA,GAAc,EAAE,CAAA,EAAG,GAAI,CAAA,IAAI,CAAG,EAAA,CAAA,EAAA,GAAA,GAAA,CAAI,MAAJ,KAAA,IAAA,GAAA,EAAA,GAAc,EAAE,CAAA,CAAA;AAC1D;AA0BA,IAAI,aAAoC,EAAC;AACzC,MAAM,QAA6B,EAAC;AACpC,IAAI,aAAgB,GAAA,KAAA;AAEJ,SAAA,OAAA,CAAQ,OAAe,QAAiC,EAAA;AACtE,EAAA,IAAI,UAAU,IAAM,EAAA;AAClB,IAAO,OAAA,EAAA;AAAA;AAGT,EAAA,IAAI,KAAU,KAAA,MAAA,CAAO,iBAAqB,IAAA,KAAA,KAAU,OAAO,iBAAmB,EAAA;AAC5E,IAAA,OAAO,MAAM,cAAe,EAAA;AAAA;AAG9B,EAAI,IAAA,QAAA,KAAa,IAAQ,IAAA,QAAA,KAAa,KAAW,CAAA,EAAA;AAC/C,IAAA,QAAA,GAAW,oBAAoB,KAAK,CAAA;AAAA;AAGtC,EAAA,IAAI,UAAU,CAAG,EAAA;AACf,IAAO,OAAA,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA;AAG/B,EAAM,MAAA,MAAA,GAAS,QAAW,GAAA,IAAA,CAAK,GAAI,CAAA,EAAA,EAAI,KAAK,GAAI,CAAA,CAAA,EAAG,QAAQ,CAAC,CAAI,GAAA,CAAA;AAChE,EAAA,MAAM,YAAY,MAAO,CAAA,IAAA,CAAK,MAAM,KAAQ,GAAA,MAAM,IAAI,MAAM,CAAA;AAG5D,EAAA,IAAI,UAAU,OAAQ,CAAA,GAAG,CAAM,KAAA,CAAA,CAAA,IAAM,UAAU,CAAG,EAAA;AAChD,IAAO,OAAA,SAAA;AAAA;AAGT,EAAM,MAAA,UAAA,GAAa,SAAU,CAAA,OAAA,CAAQ,GAAG,CAAA;AACxC,EAAA,MAAM,YAAY,UAAe,KAAA,CAAA,CAAA,GAAK,CAAI,GAAA,SAAA,CAAU,SAAS,UAAa,GAAA,CAAA;AAC1E,EAAA,IAAI,YAAY,QAAU,EAAA;AACxB,IAAQ,OAAA,CAAA,SAAA,GAAY,SAAY,GAAA,SAAA,GAAY,GAAO,IAAA,MAAA,CAAO,MAAM,CAAA,CAAE,KAAM,CAAA,CAAA,EAAG,QAAW,GAAA,SAAA,GAAY,CAAC,CAAA;AAAA;AAGrG,EAAO,OAAA,SAAA;AACT;AAEA,SAAS,oBAAoB,KAAuB,EAAA;AAClD,EAAM,MAAA,QAAA,GAAW,IAAK,CAAA,GAAA,CAAI,KAAK,CAAA;AAC/B,EAAM,MAAA,KAAA,GAAQ,KAAK,KAAM,CAAA,IAAA,CAAK,IAAI,QAAQ,CAAA,GAAI,KAAK,IAAI,CAAA;AACvD,EAAI,IAAA,GAAA,GAAM,CAAC,KAAQ,GAAA,CAAA;AACnB,EAAA,MAAM,IAAO,GAAA,IAAA,CAAK,GAAI,CAAA,EAAA,EAAI,CAAC,GAAG,CAAA;AAC9B,EAAA,MAAM,OAAO,QAAW,GAAA,IAAA;AAGxB,EAAA,IAAI,OAAO,IAAM,EAAA;AACf,IAAE,EAAA,GAAA;AAAA;AAGJ,EAAI,IAAA,KAAA,GAAQ,MAAM,CAAG,EAAA;AACnB,IAAM,GAAA,GAAA,CAAA;AAAA;AAGR,EAAA,MAAM,QAAW,GAAA,IAAA,CAAK,GAAI,CAAA,CAAA,EAAG,GAAG,CAAA;AAChC,EAAO,OAAA,QAAA;AACT;AAEgB,SAAA,aAAA,CAAc,KAAe,EAAA,QAAA,EAAwB,GAA8B,EAAA;AACjG,EAAO,OAAA;AAAA,IACL,IAAA,EAAM,OAAQ,CAAA,KAAA,EAAO,QAAQ,CAAA;AAAA,IAC7B,QAAQ,cAAe,CAAA,GAAA,EAAK,KAAK,GAAI,CAAA,KAAK,IAAI,CAAC;AAAA,GACjD;AACF;AAEA,SAAS,cAAA,CAAe,KAAyB,SAAwC,EAAA;AACvF,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAO,OAAA,GAAA;AAAA;AAGT,EAAA,QAAQ,GAAK;AAAA,IACX,KAAK,MAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,OAAA;AACH,MAAA,OAAO,GAAG,GAAG,CAAA,CAAA,CAAA;AAAA,IACf;AACE,MAAO,OAAA,GAAA;AAAA;AAEb;AAEgB,SAAA,WAAA,CAAY,MAAc,QAAoC,EAAA;AAC5E,EAAO,OAAA,CAAC,MAAc,QAA4B,KAAA;AAChD,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAEpB,IAAM,MAAA,IAAA,GAAO,OAAQ,CAAA,IAAA,EAAM,QAAQ,CAAA;AACnC,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,IAAI,QAAU,EAAA;AACZ,QAAO,OAAA,EAAE,IAAM,EAAA,MAAA,EAAQ,IAAK,EAAA;AAAA;AAE9B,MAAA,OAAO,EAAE,IAAA,EAAM,MAAQ,EAAA,GAAA,GAAM,IAAK,EAAA;AAAA;AAEpC,IAAA,OAAO,EAAE,IAAK,EAAA;AAAA,GAChB;AACF;AAEO,SAAS,cAAc,IAAe,EAAA;AAC3C,EAAO,OAAA,IAAA,IAAQ,IAAK,CAAA,UAAA,CAAW,MAAM,CAAA;AACvC;AAEgB,SAAA,qBAAA,CAAsB,GAAW,CAA2B,EAAA;AAC1E,EAAA,OAAO,CAAC,KAAU,KAAA;AAChB,IAAA,OAAO,EAAE,IAAA,EAAM,KAAQ,GAAA,CAAA,GAAI,CAAE,EAAA;AAAA,GAC/B;AACF;AAEA,MAAM,IAAA,GAAO,CAAC,CAAA,EAAW,CAAc,KAAA,IAAA,CAAK,MAAM,CAAC,CAAA,GAAI,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA;AAE5D,SAAS,WAAY,CAAA,MAAA,EAAgB,QAAoB,EAAA,MAAA,GAAS,CAAmB,EAAA;AAC1F,EAAO,OAAA,CAAC,MAAc,QAA4B,KAAA;AAChD,IAAI,IAAA,IAAA,KAAS,IAAQ,IAAA,IAAA,KAAS,KAAW,CAAA,EAAA;AACvC,MAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAGpB,IAAI,IAAA,IAAA,KAAS,OAAO,iBAAqB,IAAA,IAAA,KAAS,OAAO,iBAAqB,IAAA,KAAA,CAAM,IAAI,CAAG,EAAA;AACzF,MAAA,OAAO,EAAE,IAAA,EAAM,IAAK,CAAA,cAAA,EAAiB,EAAA;AAAA;AAGvC,IAAA,MAAM,OAAU,GAAA,IAAA,KAAS,CAAI,GAAA,CAAA,GAAI,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,MAAA,EAAQ,IAAK,CAAA,GAAA,CAAI,IAAI,CAAC,CAAC,CAAA;AACxE,IAAM,MAAA,MAAA,GAAS,SAASC,YAAM,CAAA,MAAA,GAAS,SAAS,CAAG,EAAA,QAAA,CAAS,MAAS,GAAA,CAAC,CAAC,CAAA;AAEvE,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,OAAA,CAAQ,IAAO,GAAA,MAAA,IAAUA,YAAM,CAAA,OAAA,EAAS,CAAC,MAAA,EAAQ,QAAS,CAAA,MAAA,GAAS,MAAS,GAAA,CAAC,GAAG,QAAQ,CAAA;AAAA,MAC9F;AAAA,KACF;AAAA,GACF;AACF;AAEgB,SAAA,MAAA,CAAO,OAAe,QAAwC,EAAA;AAC5E,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAEpB,EAAO,OAAA;AAAA,IACL,IAAA,EAAM,MAAM,cAAe,CAAA,KAAA,CAAA,EAAW,EAAE,qBAAuB,EAAA,QAAA,IAAA,IAAA,GAAA,QAAA,GAAY,QAAW;AAAA,GACxF;AACF;AAEO,SAAS,gBAAgB,MAAgC,EAAA;AAC9D,EAAA,MAAM,QAAQ,CAAC,EAAA,EAAI,GAAK,EAAA,GAAA,EAAK,KAAK,GAAG,CAAA;AACrC,EAAM,MAAA,MAAA,GAAS,WAAY,CAAA,GAAA,EAAM,KAAK,CAAA;AACtC,EAAO,OAAA,CAAC,IAAc,EAAA,QAAA,EAAyB,cAAkC,KAAA;AAC/E,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAO,OAAA,EAAE,MAAM,EAAG,EAAA;AAAA;AAEpB,IAAA,MAAM,CAAI,GAAA,MAAA,CAAO,IAAM,EAAA,QAAA,EAAU,cAAc,CAAA;AAC/C,IAAA,CAAA,CAAE,UAAU,GAAM,GAAA,MAAA;AAClB,IAAO,OAAA,CAAA;AAAA,GACT;AACF;AAEO,SAAS,eAAe,KAA+B,EAAA;AAC5D,EAAA,OAAO,EAAE,IAAA,EAAM,CAAG,EAAA,KAAK,CAAG,CAAA,EAAA;AAC5B;AAEA,SAAS,YAAe,GAAA;AACtB,EAAA,UAAA,GAAa,aAAc,EAAA;AAE3B,EAAA,KAAA,MAAW,OAAO,UAAY,EAAA;AAC5B,IAAW,KAAA,MAAA,MAAA,IAAU,IAAI,OAAS,EAAA;AAChC,MAAM,KAAA,CAAA,MAAA,CAAO,EAAE,CAAA,GAAI,MAAO,CAAA,EAAA;AAAA;AAC5B;AAIF,EAAC,CAAA,EAAE,MAAM,WAAa,EAAA,EAAA,EAAI,cAAc,CAAA,CAAE,OAAQ,CAAA,CAAC,KAAU,KAAA;AAC3D,IAAM,MAAA,CAAA,GAAI,KAAM,CAAA,KAAA,CAAM,EAAE,CAAA;AACxB,IAAA,IAAI,CAAG,EAAA;AACL,MAAM,KAAA,CAAA,KAAA,CAAM,IAAI,CAAI,GAAA,CAAA;AAAA;AACtB,GACD,CAAA;AAED,EAAgB,aAAA,GAAA,IAAA;AAClB;AAEO,SAAS,eAAe,EAAoC,EAAA;AACjE,EAAA,IAAI,CAAC,EAAI,EAAA;AACP,IAAA,OAAO,YAAY,EAAE,CAAA;AAAA;AAGvB,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAa,YAAA,EAAA;AAAA;AAGf,EAAM,MAAA,GAAA,GAAM,MAAM,EAAE,CAAA;AAEpB,EAAI,IAAA,CAAC,OAAO,EAAI,EAAA;AACd,IAAI,IAAA,GAAA,GAAM,EAAG,CAAA,OAAA,CAAQ,GAAG,CAAA;AAExB,IAAA,IAAI,MAAM,CAAG,EAAA;AACX,MAAA,MAAM,GAAM,GAAA,EAAA,CAAG,SAAU,CAAA,CAAA,EAAG,GAAG,CAAA;AAC/B,MAAA,MAAM,GAAM,GAAA,EAAA,CAAG,SAAU,CAAA,GAAA,GAAM,CAAC,CAAA;AAEhC,MAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,QAAO,OAAA,WAAA,CAAY,KAAK,IAAI,CAAA;AAAA;AAG9B,MAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,QAAO,OAAA,WAAA,CAAY,KAAK,KAAK,CAAA;AAAA;AAG/B,MAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,QAAA,OAAO,yBAAyB,GAAG,CAAA;AAAA;AAGrC,MAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,QAAA,MAAM,MAAS,GAAA,qBAAA,CAAsB,GAAI,CAAA,MAAA,CAAO,CAAC,CAAC,CAAA;AAClD,QAAA,MAAM,OAAO,MAAW,KAAA,CAAA,GAAI,GAAM,GAAA,GAAA,CAAI,UAAU,CAAC,CAAA;AACjD,QAAO,OAAA,QAAA,CAAS,MAAM,MAAM,CAAA;AAAA;AAG9B,MAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,QAAA,OAAO,gBAAgB,GAAG,CAAA;AAAA;AAG5B,MAAA,IAAI,QAAQ,UAAY,EAAA;AACtB,QAAA,OAAO,SAAS,GAAG,CAAA;AAAA;AAGrB,MAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,QAAM,GAAA,GAAA,GAAA,CAAI,QAAQ,GAAG,CAAA;AACrB,QAAA,IAAI,OAAO,CAAG,EAAA;AACZ,UAAA,MAAM,CAAI,GAAA,GAAA,CAAI,SAAU,CAAA,CAAA,EAAG,GAAG,CAAA;AAC9B,UAAA,MAAM,CAAI,GAAA,GAAA,CAAI,SAAU,CAAA,GAAA,GAAM,CAAC,CAAA;AAC/B,UAAO,OAAA,qBAAA,CAAsB,GAAG,CAAC,CAAA;AAAA;AAEnC,QAAO,OAAA,qBAAA,CAAsB,KAAK,GAAG,CAAA;AAAA;AACvC;AAGF,IAAA,OAAO,YAAY,EAAE,CAAA;AAAA;AAGvB,EAAO,OAAA,GAAA;AACT;AAEO,SAAS,sBAA8C,GAAA;AAC5D,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAa,YAAA,EAAA;AAAA;AAGf,EAAO,OAAA,KAAA;AACT;AAEO,SAAS,eAAkB,GAAA;AAChC,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAa,YAAA,EAAA;AAAA;AAGf,EAAO,OAAA,UAAA,CAAW,GAAI,CAAA,CAAC,GAAQ,KAAA;AAC7B,IAAO,OAAA;AAAA,MACL,MAAM,GAAI,CAAA,IAAA;AAAA,MACV,OAAS,EAAA,GAAA,CAAI,OAAQ,CAAA,GAAA,CAAI,CAAC,MAAW,KAAA;AACnC,QAAO,OAAA;AAAA,UACL,MAAM,MAAO,CAAA,IAAA;AAAA,UACb,OAAO,MAAO,CAAA;AAAA,SAChB;AAAA,OACD;AAAA,KACH;AAAA,GACD,CAAA;AACH;;ACjRA,MAAM,WAAiC,GAAA;AAAA,EACrC,aAAe,EAAA,IAAA;AAAA,EACf,0BAA4B,EAAA,IAAA;AAAA,EAC5B,YAAc,EAAA,IAAA;AAAA,EACd,yBAA2B,EAAA,IAAA;AAAA,EAC3B,eAAiB,EAAA,IAAA;AAAA,EACjB,4BAA8B,EAAA,IAAA;AAAA,EAC9B,eAAiB,EAAA;AACnB,CAAA;AAEO,SAAS,oBAAoB,OAAqD,EAAA;AAzCzF,EAAA,IAAA,EAAA;AA0CE,EAAA,IAAI,CAAC,OAAW,IAAAV,cAAA,CAAQ,OAAO,CAAK,IAAA,CAAC,QAAQ,KAAO,EAAA;AAClD,IAAO,OAAA,iBAAA;AAAA;AAGT,EAAA,MAAM,QAAQ,OAAQ,CAAA,KAAA;AACtB,EAAA,MAAM,MAAS,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,MAAN,KAAA,IAAA,GAAA,EAAA,GAAgB,EAAC;AAChC,EAAA,MAAM,EAAE,OAAA,EAAY,GAAA,OAAA,CAAQ,KAAM,CAAA,aAAA;AAElC,EAAA,IAAI,OAAO,MAAO,CAAA,IAAA;AAClB,EAAA,IAAI,cAAc,IAAS,KAAA,WAAA,CAAY,IAAI,CAAK,IAAA,IAAA,CAAK,WAAW,OAAO,CAAA,CAAA;AACvE,EAAA,IAAI,MAAS,GAAA,KAAA;AAEb,EAAA,IAAI,KAAM,CAAA,IAAA,KAAS,SAAU,CAAA,IAAA,IAAQ,CAAC,WAAa,EAAA;AACjD,IAAO,IAAA,GAAA,CAAA,gBAAA,CAAA;AACP,IAAc,WAAA,GAAA,IAAA;AACd,IAAA,IAAI,KAAM,CAAA,MAAA,IAAU,KAAM,CAAA,MAAA,CAAO,SAAS,CAAG,EAAA;AAC3C,MAAI,IAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,CAAC,CAAA;AAC1B,MAAA,IAAI,MAAM,KAAM,CAAA,MAAA,CAAO,KAAM,CAAA,MAAA,CAAO,SAAS,CAAC,CAAA;AAC9C,MAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,QAAQ,KAAA,GAAA,aAAA,CAAc,KAAK,CAAA,CAAE,IAAK,EAAA;AAClC,QAAM,GAAA,GAAA,aAAA,CAAc,GAAG,CAAA,CAAE,IAAK,EAAA;AAAA,OACzB,MAAA;AACL,QAAS,KAAA,IAAA,GAAA;AACT,QAAO,GAAA,IAAA,GAAA;AAAA;AAET,MAAA,MAAA,GAAS,IAAK,CAAA,GAAA,CAAI,GAAM,GAAA,KAAK,CAAI,GAAA,EAAA;AAAA;AACnC,GACS,MAAA,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,OAAS,EAAA;AAC3C,IAAI,IAAA,CAAC,aAAc,CAAA,IAAI,CAAG,EAAA;AACxB,MAAO,IAAA,GAAA,MAAA;AAAA;AACT,aACS,CAAC,IAAA,IAAQ,KAAM,CAAA,IAAA,KAAS,UAAU,MAAQ,EAAA;AACnD,IAAO,IAAA,GAAA,QAAA;AAAA;AAGT,EAAM,MAAA,eAAA,GAAkB,6BAAM,UAAW,CAAA,UAAA,CAAA;AACzC,EAAM,MAAA,WAAA,GAAc,cAAc,IAAI,CAAA;AACtC,EAAM,MAAA,SAAA,GAAY,KAAM,CAAA,IAAA,KAAS,SAAU,CAAA,MAAA;AAC3C,EAAA,MAAM,iBAAiB,IAAS,KAAA,QAAA;AAChC,EAAM,MAAA,2BAAA,GACJ,CAAC,WAAA,IAAe,CAAC,eAAA,IAAmB,CAAC,WAAA,IAAe,CAAC,cAAA,IAAkB,SAAa,IAAA,MAAA,CAAO,QAAY,IAAA,IAAA;AAEzG,EAAM,MAAA,UAAA,GAAa,cAAe,CAAA,IAAA,IAAQ,MAAM,CAAA;AAChD,EAAA,MAAM,SAAY,GAAA,kBAAA,CAAmB,KAAO,EAAA,OAAA,CAAQ,KAAK,CAAA;AAEzD,EAAO,OAAA,CAAC,OAAgB,gBAAoC,KAAA;AAC1D,IAAM,MAAA,EAAE,UAAa,GAAA,MAAA;AACrB,IAAA,MAAM,eAAe,IAAS,KAAA,QAAA;AAE9B,IAAI,IAAA,WAAA,IAAe,OAAO,KAAA,KAAU,QAAU,EAAA;AAC5C,MAAQ,KAAA,GAAA,KAAA,CAAM,KAAK,CAAA,CAAE,OAAQ,EAAA;AAAA;AAG/B,IAAA,IAAI,OAAU,GAAA,YAAA,GAAe,GAAM,GAAA,WAAA,CAAY,KAAK,CAAA;AACpD,IAAI,IAAA,IAAA;AACJ,IAAI,IAAA,MAAA;AACJ,IAAI,IAAA,MAAA;AACJ,IAAI,IAAA,KAAA;AACJ,IAAI,IAAA,IAAA;AACJ,IAAI,IAAA,OAAA;AAEJ,IAAI,IAAA,QAAA,IAAY,QAAS,CAAA,MAAA,GAAS,CAAG,EAAA;AACnC,MAAM,MAAA,aAAA,GAAgB,qBAAsB,CAAA,QAAA,EAAU,KAAK,CAAA;AAE3D,MAAA,IAAI,aAAe,EAAA;AACjB,QAAI,IAAA,aAAA,CAAc,QAAQ,IAAM,EAAA;AAC9B,UAAA,IAAA,GAAO,aAAc,CAAA,IAAA;AAAA;AAGvB,QAAI,IAAA,aAAA,CAAc,SAAS,IAAM,EAAA;AAC/B,UAAA,KAAA,GAAQ,OAAQ,CAAA,KAAA,CAAM,aAAc,CAAA,cAAA,CAAe,cAAc,KAAK,CAAA;AAAA;AAGxE,QAAI,IAAA,aAAA,CAAc,QAAQ,IAAM,EAAA;AAC9B,UAAA,IAAA,GAAO,aAAc,CAAA,IAAA;AAAA;AACvB;AACF,KACS,MAAA,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,IAAM,EAAA;AAExC,MAAA,IAAI,SAAS,IAAM,EAAA;AACjB,QAAO,OAAA;AAAA,UACL,IAAM,EAAA,EAAA;AAAA,UACN,OAAS,EAAA;AAAA,SACX;AAAA;AAGF,MAAA,MAAM,YAAY,CAAC,KAAA;AACnB,MAAA,IAAI,MAAU,IAAA,MAAA,CAAO,IAAQ,IAAA,MAAA,CAAO,KAAK,IAAM,EAAA;AAC7C,QAAA,MAAM,EAAE,IAAM,EAAA,QAAA,EAAU,OAAO,SAAU,EAAA,GAAI,OAAO,IAAK,CAAA,IAAA;AAEzD,QAAA,IAAA,GAAO,QAAW,GAAA,QAAA,CAAS,SAAS,CAAA,GAAI,GAAG,KAAK,CAAA,CAAA;AAEhD,QAAQ,KAAA,GAAA,SAAA,GAAY,SAAU,CAAA,SAAS,CAAI,GAAA,KAAA,CAAA;AAE3C,QAAA,IAAI,SAAS,IAAM,EAAA;AACjB,UAAA,MAAM,UAAa,GAAA,OAAA,CAAQ,SAAY,GAAA,OAAA,CAAQ,MAAM,CAAA;AACrD,UAAA,KAAA,GAAQ,OAAQ,CAAA,KAAA,CAAM,aAAc,CAAA,cAAA,CAAe,UAAU,CAAA;AAAA;AAC/D;AACF;AAGF,IAAA,IAAI,CAAC,MAAA,CAAO,KAAM,CAAA,OAAO,CAAG,EAAA;AAC1B,MAAA,IAAI,IAAQ,IAAA,IAAA,IAAQ,CAAC9B,gBAAA,CAAU,KAAK,CAAG,EAAA;AACrC,QAAI,IAAA,CAAA;AAEJ,QAAI,IAAA,2BAAA,IAA+B,oBAAoB,IAAM,EAAA;AAC3D,UAAA,CAAA,GAAI,WAAW,OAAS,EAAA,gBAAA,EAAkB,IAAM,EAAA,OAAA,CAAQ,UAAU,MAAM,CAAA;AAMxE,UAAE,CAAA,CAAA,IAAA,GAAO,CAAC,CAAA,CAAE,IAAO,GAAA,EAAA;AAAA,SACd,MAAA;AACL,UAAA,CAAA,GAAI,WAAW,OAAS,EAAA,MAAA,CAAO,UAAU,IAAM,EAAA,OAAA,CAAQ,UAAU,MAAM,CAAA;AAAA;AAGzE,QAAA,IAAA,GAAO,CAAE,CAAA,IAAA;AACT,QAAA,MAAA,GAAS,CAAE,CAAA,MAAA;AACX,QAAA,MAAA,GAAS,CAAE,CAAA,MAAA;AAAA;AAIb,MAAA,IAAI,SAAS,IAAM,EAAA;AACjB,QAAM,MAAA,WAAA,GAAc,UAAU,OAAO,CAAA;AACrC,QAAA,KAAA,GAAQ,WAAY,CAAA,KAAA;AACpB,QAAA,OAAA,GAAU,WAAY,CAAA,OAAA;AAAA;AACxB;AAGF,IAAA,IAAI,IAAQ,IAAA,IAAA,IAAQF,cAAQ,CAAA,KAAK,CAAG,EAAA;AAClC,MAAO,IAAA,GAAAU,WAAA,CAAK,OAAO,IAAI,CAAA;AAAA;AAGzB,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAA,IAAA,GAAOiC,gBAAS,KAAK,CAAA;AACrB,MAAA,IAAI,CAAC,IAAM,EAAA;AACT,QAAA,IAAI,OAAO,OAAS,EAAA;AAClB,UAAA,IAAA,GAAO,MAAO,CAAA,OAAA;AAAA,SACT,MAAA;AACL,UAAO,IAAA,GAAA,EAAA;AAAA;AACT;AACF;AAGF,IAAA,IAAI,CAAC,KAAO,EAAA;AACV,MAAM,MAAA,WAAA,GAAc,UAAU,CAAS,QAAA,CAAA;AACvC,MAAA,KAAA,GAAQ,WAAY,CAAA,KAAA;AACpB,MAAA,OAAA,GAAU,WAAY,CAAA,OAAA;AAAA;AAGxB,IAAA,MAAM,OAAwB,GAAA;AAAA,MAC5B,IAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAA,OAAA,CAAQ,IAAO,GAAA,IAAA;AAAA;AAGjB,IAAA,IAAI,WAAW,IAAM,EAAA;AACnB,MAAA,OAAA,CAAQ,OAAU,GAAA,OAAA;AAAA;AAGpB,IAAO,OAAA,OAAA;AAAA,GACT;AACF;AAEA,SAAS,kBAAkB,KAA8B,EAAA;AACvD,EAAO,OAAA,EAAE,MAAMA,eAAS,CAAA,KAAK,GAAG,OAAS,EAAA,WAAA,CAAY,KAAK,CAAE,EAAA;AAC9D;AAEO,SAAS,sBAA2C,GAAA;AACzD,EAAA,OAAO,CAAC,KAAoB,MAAA;AAAA,IAC1B,IAAM,EAAA,qBAAA,CAAsB,KAAK,CAAA,KAAM,UAAU,CAAG,EAAA,IAAA,CAAK,SAAU,CAAA,KAAA,EAAO,mBAAoB,EAAC,CAAC,CAAA,CAAA,GAAK,GAAG,KAAK,CAAA,CAAA;AAAA,IAC7G,OAAS,EAAA;AAAA,GACX,CAAA;AACF;AAEA,MAAM,sBAAsB,MAAM;AAChC,EAAM,MAAA,IAAA,uBAAW,OAAQ,EAAA;AACzB,EAAO,OAAA,CAAC,MAAc,KAAyB,KAAA;AAC7C,IAAA,IAAI,OAAO,KAAA,KAAU,QAAY,IAAA,KAAA,KAAU,IAAM,EAAA;AAC/C,MAAI,IAAA,IAAA,CAAK,GAAI,CAAA,KAAK,CAAG,EAAA;AACnB,QAAA;AAAA;AAEF,MAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA;AAEhB,IAAO,OAAA,KAAA;AAAA,GACT;AACF,CAAA;;ACvMa,MAAA,iCAAA,GAAoC,IAAI,0BAA2B;AAEnE,MAAA,uBAAA,GAA0B,IAAI,QAAsC;;ACI1E,SAAS,uBAAuB,IAAiC,EAAA;AACtE,EAAA,IAAI,GAAqB,GAAA,IAAA;AACzB,EAAA,IAAI,GAAqB,GAAA,IAAA;AAEzB,EAAA,MAAM,QAAW,GAAA,CAAC,SAAU,CAAA,GAAA,EAAK,UAAU,GAAG,CAAA;AAE9C,EAAA,KAAA,MAAW,SAAS,IAAM,EAAA;AACxB,IAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,MAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,MAAQ,EAAA;AACnC,QAAA,MAAM,KAAQ,GAAA,WAAA,CAAY,EAAE,KAAA,EAAO,UAAU,CAAA;AAC7C,QAAM,MAAA,QAAA,GAAW,KAAM,CAAA,SAAA,CAAU,GAAG,CAAA;AACpC,QAAM,MAAA,QAAA,GAAW,KAAM,CAAA,SAAA,CAAU,GAAG,CAAA;AAEpC,QAAI,IAAA,GAAA,KAAQ,IAAQ,IAAA,QAAA,GAAW,GAAK,EAAA;AAClC,UAAM,GAAA,GAAA,QAAA;AAAA;AAGR,QAAI,IAAA,GAAA,KAAQ,IAAQ,IAAA,QAAA,GAAW,GAAK,EAAA;AAClC,UAAM,GAAA,GAAA,QAAA;AAAA;AACR;AACF;AACF;AAGF,EAAA,OAAO,EAAE,GAAK,EAAA,GAAA,EAAK,QAAQ,GAAO,IAAA,IAAA,GAAA,GAAA,GAAA,CAAA,KAAM,oBAAO,CAAG,CAAA,EAAA;AACpD;AAKO,SAAS,oBAAoB,OAAiD,EAAA;AAxErF,EAAA,IAAA,EAAA;AAyEE,EAAI,IAAA,CAAC,QAAQ,IAAM,EAAA;AACjB,IAAA,OAAO,EAAC;AAAA;AAGV,EAAA,MAAM,SAAS,OAAQ,CAAA,WAAA;AACvB,EAAA,IAAI,CAAC,MAAQ,EAAA;AACX,IAAA,OAAO,OAAQ,CAAA,IAAA;AAAA;AAGjB,EAAM,MAAA,mBAAA,GAAA,CAAsB,EAAQ,GAAA,OAAA,CAAA,mBAAA,KAAR,IAA+B,GAAA,EAAA,GAAA,iCAAA;AAE3D,EAAA,IAAI,WAAc,GAAA,CAAA;AAClB,EAAA,IAAI,WAAwC,GAAA,KAAA,CAAA;AAG5C,EAAA,MAAM,WAA4B,EAAC;AACnC,EAAA,IAAI,OAAO,SAAW,EAAA;AACpB,IAAW,KAAA,MAAA,IAAA,IAAQ,OAAO,SAAW,EAAA;AACnC,MAAA,MAAM,IAAO,GAAA,aAAA,CAAc,GAAI,CAAA,IAAA,CAAK,QAAQ,EAAE,CAAA;AAC9C,MAAA,IAAI,IAAM,EAAA;AACR,QAAA,QAAA,CAAS,IAAK,CAAA;AAAA,UACZ,KAAO,EAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,QAAQ,OAAO,CAAA;AAAA,UACpC,YAAY,IAAK,CAAA;AAAA,SAClB,CAAA;AAAA;AACH;AACF;AAGF,EAAA,OAAO,OAAQ,CAAA,IAAA,CAAK,GAAI,CAAA,CAAC,eAAe,KAAU,KAAA;AAEhD,IAAM,MAAA,QAAA,GAAsB,EAAE,GAAG,aAAc,EAAA;AAE/C,IAAA,QAAA,CAAS,MAAS,GAAA,QAAA,CAAS,MAAO,CAAA,GAAA,CAAI,CAAC,KAAU,KAAA;AAC/C,MAAO,OAAA;AAAA,QACL,GAAG,KAAA;AAAA,QACH,MAAA,EAAQC,gBAAU,CAAA,KAAA,CAAM,MAAM,CAAA;AAAA,QAC9B,KAAO,EAAA;AAAA,UACL,GAAG,KAAM,CAAA;AAAA;AACX,OACF;AAAA,KACD,CAAA;AAED,IAAW,KAAA,MAAA,KAAA,IAAS,SAAS,MAAQ,EAAA;AACnC,MAAA,MAAM,SAAS,KAAM,CAAA,MAAA;AAErB,MAAA,KAAA,CAAM,MAAO,UAAa,GAAA;AAAA,QACxB,aAAe,EAAA;AAAA,UACb,KAAO,EAAA;AAAA,YACL,MAAM,OAAQ,CAAA,IAAA;AAAA,YACd,KAAO,EAAA,QAAA;AAAA,YACP,UAAY,EAAA,KAAA;AAAA,YACZ;AAAA;AACF;AACF,OACF;AAEA,MAAA,MAAM,OAAU,GAAA;AAAA,QACd,KAAA;AAAA,QACA,MAAM,OAAQ,CAAA,IAAA;AAAA,QACd,cAAgB,EAAA,KAAA;AAAA,QAChB,kBAAkB,OAAQ,CAAA,gBAAA;AAAA,QAC1B;AAAA,OACF;AAIA,MAAuB,sBAAA,CAAA,MAAA,EAAQ,MAAO,CAAA,QAAA,EAAU,OAAO,CAAA;AAGvD,MAAA,KAAA,MAAW,QAAQ,QAAU,EAAA;AAC3B,QAAA,IAAI,KAAK,KAAM,CAAA,KAAA,EAAO,QAAU,EAAA,OAAA,CAAQ,IAAK,CAAG,EAAA;AAC9C,UAAW,KAAA,MAAA,IAAA,IAAQ,KAAK,UAAY,EAAA;AAElC,YAAsB,qBAAA,CAAA,MAAA,EAAQ,MAAM,OAAO,CAAA;AAAA;AAC7C;AACF;AAIF,MAAA,IAAI,OAAO,KAAM,CAAA,IAAA;AACjB,MAAA,IAAI,CAAC,IAAA,IAAQ,IAAS,KAAA,SAAA,CAAU,KAAO,EAAA;AACrC,QAAM,MAAA,CAAA,GAAI,uBAAuB,KAAK,CAAA;AACtC,QAAA,IAAI,CAAG,EAAA;AACL,UAAO,IAAA,GAAA,CAAA;AAAA;AACT;AAIF,MAAM,MAAA,EAAE,OAAO,cAAe,EAAA,GAAI,eAAe,MAAQ,EAAA,KAAA,EAAO,WAAa,EAAA,OAAA,CAAQ,IAAK,CAAA;AAC1F,MAAc,WAAA,GAAA,cAAA;AAGd,MAAA,KAAA,CAAM,MAAO,WAAc,GAAA,IAAA;AAC3B,MAAA,KAAA,CAAM,MAAO,WAAc,GAAA,WAAA;AAC3B,MAAA,KAAA,CAAM,MAAO,KAAQ,GAAA,KAAA;AACrB,MAAA,KAAA,CAAM,IAAO,GAAA,IAAA;AAIb,MAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,IAAM,EAAA;AACjC,QAAA,WAAA,EAAA;AAAA;AAIF,MAAA,KAAA,CAAM,UAAU,mBAAoB,CAAA;AAAA,QAClC,KAAA;AAAA,QACA,OAAO,OAAQ,CAAA,KAAA;AAAA,QACf,UAAU,OAAQ,CAAA;AAAA,OACnB,CAAA;AAGD,MAAI,IAAA,KAAA,CAAM,MAAO,CAAA,IAAA,KAAS,iBAAmB,EAAA;AAC3C,QAAA,KAAA,CAAM,OAAU,GAAA,uBAAA,CAAwB,KAAM,CAAA,OAAA,EAAS,IAAI,CAAA;AAAA;AAI7D,MAAA,KAAA,CAAM,QAAW,GAAA,gBAAA;AAAA,QACf,QAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAM,KAAO,CAAA,UAAA;AAAA,QACb,OAAQ,CAAA,gBAAA;AAAA,QACR,OAAQ,CAAA,QAAA;AAAA,QACR,OAAQ,CAAA;AAAA,OACV;AAEA,MAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,YAAc,EAAA;AACzC,QAAW,KAAA,MAAA,YAAA,IAAgB,MAAM,MAAQ,EAAA;AACvC,UAAA,KAAA,IAAS,OAAU,GAAA,CAAA,EAAG,OAAU,GAAA,YAAA,CAAa,QAAQ,OAAW,EAAA,EAAA;AAC9D,YAAA,KAAA,MAAW,UAAc,IAAA,YAAA,CAAa,OAAO,CAAA,CAAE,MAAQ,EAAA;AAErD,cAAA,UAAA,CAAW,UAAU,mBAAoB,CAAA;AAAA,gBACvC,KAAO,EAAA,UAAA;AAAA,gBACP,OAAO,OAAQ,CAAA,KAAA;AAAA,gBACf,UAAU,OAAQ,CAAA;AAAA,eACnB,CAAA;AAED,cAAA,UAAA,CAAW,KAAQ,GAAA;AAAA,gBACjB,UAAY,EAAA;AAAA,kBACV,aAAe,EAAA;AAAA,oBACb,KAAO,EAAA;AAAA,sBACL,IAAM,EAAA,YAAA;AAAA,sBACN,KAAA,EAAO,aAAa,OAAO,CAAA;AAAA,sBAC3B,UAAY,EAAA,OAAA;AAAA,sBACZ,KAAO,EAAA;AAAA;AACT;AACF;AACF,eACF;AAEA,cAAA,UAAA,CAAW,QAAW,GAAA,gBAAA;AAAA,gBACpB,aAAa,OAAO,CAAA;AAAA,gBACpB,UAAA;AAAA,gBACA,WAAW,KAAO,CAAA,UAAA;AAAA,gBAClB,OAAQ,CAAA,gBAAA;AAAA,gBACR,OAAQ,CAAA,QAAA;AAAA,gBACR,OAAQ,CAAA;AAAA,eACV;AAAA;AACF;AACF;AACF;AACF;AAGF,IAAO,OAAA,QAAA;AAAA,GACR,CAAA;AACH;AAEA,SAAS,cACP,CAAA,MAAA,EACA,KACA,EAAA,WAAA,EACA,IACmH,EAAA;AArPrH,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAuPE,EAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,MAAW,IAAAnE,eAAA,CAAS,MAAO,CAAA,GAAG,CAAK,IAAAA,eAAA,CAAS,MAAO,CAAA,GAAG,CAAI,EAAA;AACrF,IAAO,OAAA,EAAE,gBAAgB,WAAY,EAAA;AAAA;AAIvC,EAAA,IAAI,OAAO,WAAa,EAAA;AACtB,IAAM,MAAA,UAAA,GAAa,kBAAkB,KAAK,CAAA;AAC1C,IAAA,MAAMoE,IAAM,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,GAAP,KAAA,IAAA,GAAA,EAAA,GAAc,UAAW,CAAA,GAAA;AACrC,IAAA,MAAMC,IAAM,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,GAAP,KAAA,IAAA,GAAA,EAAA,GAAc,UAAW,CAAA,GAAA;AACrC,IAAA,OAAO,EAAE,KAAA,EAAO,EAAE,GAAA,EAAAD,IAAK,EAAA,GAAA,EAAAC,IAAK,EAAA,KAAA,EAAOA,IAAOD,GAAAA,IAAAA,EAAQ,EAAA,cAAA,EAAgB,WAAY,EAAA;AAAA;AAIhF,EAAM,MAAA,cAAA,GAAiB,WAAe,IAAA,IAAA,GAAA,WAAA,GAAA,sBAAA,CAAuB,IAAI,CAAA;AACjE,EAAA,MAAM,GAAM,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,GAAP,KAAA,IAAA,GAAA,EAAA,GAAc,cAAgB,CAAA,GAAA;AAC1C,EAAA,MAAM,GAAM,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,GAAP,KAAA,IAAA,GAAA,EAAA,GAAc,cAAgB,CAAA,GAAA;AAC1C,EAAO,OAAA,EAAE,OAAO,EAAE,GAAA,EAAK,KAAK,KAAO,EAAA,GAAA,GAAO,GAAK,EAAA,EAAG,cAAe,EAAA;AACnE;AAOA,SAAS,uBAAA,CAAwB,IAAwB,EAAA,YAAA,GAAe,IAAwB,EAAA;AAG9F,EAAM,MAAA,MAAA,uBAAa,GAAuB,EAAA;AAG1C,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,CAAA,EAAI,CAAK,IAAA,EAAA,EAAI,CAAK,EAAA,EAAA;AAC7B,IAAA,MAAA,CAAO,GAAI,CAAA,CAAA,kBAAO,IAAA,GAAA,EAAK,CAAA;AAAA;AAGzB,EAAO,OAAA,CAAC,OAAgB,QAA4B,KAAA;AAClD,IAAA,IAAI,KAAQ,GAAA,MAAA,CAAO,GAAI,CAAA,QAAA,IAAA,IAAA,GAAA,QAAA,GAAY,CAAE,CAAA,CAAA;AAErC,IAAI,IAAA,CAAA,GAAI,KAAM,CAAA,GAAA,CAAI,KAAK,CAAA;AAEvB,IAAA,IAAI,CAAC,CAAG,EAAA;AAEN,MAAI,IAAA,KAAA,CAAM,SAAS,YAAc,EAAA;AAC/B,QAAA,KAAA,CAAM,KAAM,EAAA;AAAA;AAGd,MAAI,CAAA,GAAA,IAAA,CAAK,OAAO,QAAQ,CAAA;AAIxB,MAAA,IAAI,EAAE,KAAO,EAAA;AACX,QAAE,CAAA,CAAA,KAAA,GAAQ,WAAY,CAAA,CAAA,CAAE,KAAK,CAAA;AAAA;AAG/B,MAAM,KAAA,CAAA,GAAA,CAAI,OAAO,CAAC,CAAA;AAAA;AAGpB,IAAO,OAAA,CAAA;AAAA,GACT;AACF;AAMgB,SAAA,qBAAA,CAAsB,MAAqB,EAAA,KAAA,EAA2B,OAA2B,EAAA;AAC/G,EAAA,MAAM,MAAM,OAAQ,CAAA,mBAAA;AACpB,EAAA,MAAM,IAAO,GAAA,GAAA,CAAI,WAAY,CAAA,KAAA,CAAM,EAAE,CAAA;AAErC,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAA;AAAA;AAGF,EAAA,MAAM,MAAM,IAAK,CAAA,OAAA,CAAQ,MAAM,KAAO,EAAA,OAAA,EAAS,KAAK,QAAQ,CAAA;AAE5D,EAAM,MAAA,MAAA,GAAS,GAAQ,KAAA,KAAA,CAAA,IAAa,GAAQ,KAAA,IAAA;AAE5C,EAAA,IAAI,MAAQ,EAAA;AACV,IAAI,IAAA,IAAA,CAAK,QAAY,IAAA,MAAA,CAAO,MAAQ,EAAA;AAClC,MAAME,YAAA,CAAA,MAAA,CAAO,MAAQ,EAAA,IAAA,CAAK,IAAI,CAAA;AAAA,KACzB,MAAA;AACL,MAAMA,YAAA,CAAA,MAAA,EAAQ,KAAK,IAAI,CAAA;AAAA;AACzB,GACK,MAAA;AACL,IAAA,IAAI,KAAK,QAAU,EAAA;AACjB,MAAI,IAAA,CAAC,OAAO,MAAQ,EAAA;AAClB,QAAA,MAAA,CAAO,SAAS,EAAC;AAAA;AAEnB,MAAAC,UAAA,CAAI,MAAO,CAAA,MAAA,EAAQ,IAAK,CAAA,IAAA,EAAM,GAAG,CAAA;AAAA,KAC5B,MAAA;AACL,MAAIA,UAAA,CAAA,MAAA,EAAQ,IAAK,CAAA,IAAA,EAAM,GAAG,CAAA;AAAA;AAC5B;AAEJ;AAIgB,SAAA,sBAAA,CAAuB,MAAqB,EAAA,QAAA,EAAuB,OAA2B,EAAA;AAvV9G,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAyVE,EAAI,IAAA,MAAA,CAAO,KAAS,IAAA,QAAA,CAAS,KAAO,EAAA;AAElC,IAAA,MAAA,CAAO,QAAQ,CAAC,GAAG,OAAO,KAAO,EAAA,GAAG,SAAS,KAAK,CAAA;AAAA;AAIpD,EAAA,MAAM,eACJ,GAAA,CAAA,CAAA,EAAA,GAAA,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAU,UAAV,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAsB,UAASrB,qBAAe,CAAA,QAAA,KAAA,CAC9C,EAAS,GAAA,QAAA,CAAA,UAAA,KAAT,mBAAqB,KAAM,CAAA,IAAA,CAAK,CAAC,IAAA,KAAS,KAAK,KAAU,KAAA,CAAA,QAAA,CAAA,CAAA;AAC3D,EAAA,IAAA,CAAA,CACE,YAAO,UAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAmB,IAAS,MAAAA,qBAAA,CAAe,YAC3C,CAAC,MAAA,CAAO,UAAW,CAAA,KAAA,CAAM,KAAK,CAAC,IAAA,KAAS,KAAK,KAAU,KAAA,CAAA,QAAS,KAChE,eACA,EAAA;AACA,IAAA,MAAA,CAAO,WAAW,KAAQ,GAAA,CAAC,iBAAiB,GAAG,MAAA,CAAO,WAAW,KAAK,CAAA;AAAA;AAExE,EAAA,KAAA,MAAW,mBAAuB,IAAA,OAAA,CAAQ,mBAAoB,CAAA,IAAA,EAAQ,EAAA;AACpE,IAAA,IAAI,mBAAoB,CAAA,QAAA,IAAY,CAAC,MAAA,CAAO,MAAQ,EAAA;AAClD,MAAA,MAAA,CAAO,SAAS,EAAC;AAAA;AAEnB,IAAA,uBAAA;AAAA,MACE,mBAAA,CAAoB,QAAW,GAAA,MAAA,CAAO,MAAS,GAAA,MAAA;AAAA,MAC/C,mBAAA,CAAoB,QAAW,GAAA,QAAA,CAAS,MAAS,GAAA,QAAA;AAAA,MACjD,mBAAA;AAAA,MACA;AAAA,KACF;AAAA;AAGF,EAAA,mBAAA,CAAoB,MAAM,CAAA;AAC5B;AAEA,SAAS,uBACP,CAAA,WAAA,EACA,MACA,EAAA,mBAAA,EACA,OACA,EAAA;AACA,EAAA,MAAM,aAAgB,GAAAsB,UAAA,CAAI,WAAa,EAAA,mBAAA,CAAoB,IAAI,CAAA;AAC/D,EAAI,IAAA,aAAA,KAAkB,IAAQ,IAAA,aAAA,KAAkB,KAAW,CAAA,EAAA;AACzD,IAAA,MAAM,IAAO,GAAA,OAAA,CAAQ,mBAAoB,CAAA,WAAA,CAAY,oBAAoB,EAAE,CAAA;AAC3E,IAAA,IAAI,CAAC,IAAM,EAAA;AACT,MAAA;AAAA;AAGF,IAAA,IAAI,IAAQ,IAAA,IAAA,CAAK,WAAY,CAAA,OAAA,CAAQ,KAAM,CAAG,EAAA;AAC5C,MAAM,MAAA,GAAA,GAAM,IAAK,CAAA,OAAA,CAAQA,UAAI,CAAA,MAAA,EAAQ,KAAK,IAAI,CAAA,EAAG,OAAS,EAAA,IAAA,CAAK,QAAQ,CAAA;AACvE,MAAI,IAAA,GAAA,KAAQ,KAAa,CAAA,IAAA,GAAA,KAAQ,IAAM,EAAA;AACrC,QAAID,UAAA,CAAA,WAAA,EAAa,IAAK,CAAA,IAAA,EAAM,GAAG,CAAA;AAAA;AACjC;AACF;AAEJ;AAMO,SAAS,oBAAoB,MAAqB,EAAA;AACvD,EAAM,MAAA,EAAE,YAAe,GAAA,MAAA;AAEvB,EAAI,IAAA,CAAC,OAAO,KAAO,EAAA;AACjB,IAAA,IAAI,UAAY,EAAA;AACd,MAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,QACb,MAAM,gBAAiB,CAAA;AAAA,OACzB;AAAA;AACF,GAES,MAAA,IAAA,CAAC,MAAO,CAAA,KAAA,CAAM,IAAM,EAAA;AAE7B,IAAA,OAAO,MAAO,CAAA,KAAA;AAAA;AAIhB,EAAI,IAAA,MAAA,CAAO,cAAe,CAAA,KAAK,CAAK,IAAA,MAAA,CAAO,cAAe,CAAA,KAAK,CAAK,IAAA,MAAA,CAAO,GAAO,GAAA,MAAA,CAAO,GAAM,EAAA;AAC7F,IAAA,MAAM,MAAM,MAAO,CAAA,GAAA;AACnB,IAAA,MAAA,CAAO,MAAM,MAAO,CAAA,GAAA;AACpB,IAAA,MAAA,CAAO,GAAM,GAAA,GAAA;AAAA;AAEjB;AAEA,MAAM,gCAAA,GAA0D,CAAC,OAAY,KAAA;AAE3E,EAAA,MAAM,EAAE,IAAM,EAAA,SAAA,EAAW,kBAAoB,EAAA,KAAA,EAAO,kBAAqB,GAAA,OAAA;AAEzE,EAAA,IAAI,KAAK,QAAU,EAAA;AACjB,IAAA,OAAO,wBAAyB,CAAA;AAAA,MAC9B,IAAA;AAAA,MACA,cAAc,IAAK,CAAA,QAAA;AAAA,MACnB,UAAY,EAAA,kBAAA;AAAA,MACZ,KAAA;AAAA,MACA,KAAA,EAAO,KAAK,QAAS,CAAA,KAAA;AAAA,MACrB;AAAA,KACD,CAAA;AAAA,GACI,MAAA;AACL,IAAO,OAAA,SAAA;AAAA;AAEX,CAAA;AAEa,MAAA,gBAAA,GACX,CACE,KACA,EAAA,KAAA,EACA,iBACA,gBACA,EAAA,QAAA,EACA,qBAEF,KAAA,CAAC,MAAqD,KAAA;AACpD,EAAI,IAAA,CAAC,MAAM,MAAO,CAAA,KAAA,IAAS,MAAM,MAAO,CAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AAC1D,IAAA,OAAO,EAAC;AAAA;AAGV,EAAA,MAAM,aAAa,KAAM,CAAA,MAAA,CAAO,KAAM,CAAA,GAAA,CAAI,CAAC,IAAmB,KAAA;AAzclE,IAAA,IAAA,EAAA,EAAA,EAAA;AA0cM,IAAA,MAAM,WAAoC,GAAA,wBAAA,CAAyB,KAAO,EAAA,KAAA,EAAO,eAAe,CAAA;AAChG,IAAA,MAAM,kBAAqB,GAAA;AAAA,MACzB,GAAG,eAAA;AAAA,MACH,aAAe,EAAA;AAAA,KACjB;AAEA,IAAA,MAAM,qBAA6C,GAAA,CAAC,KAAO,EAAA,UAAA,EAAY,MACrE,KAAA,gBAAA,CAAiB,KAAO,EAAA,EAAE,GAAG,kBAAA,EAAoB,GAAG,UAAA,IAAc,MAAM,CAAA;AAG1E,IAAA,IAAI,OAAO,aAAkB,KAAA,KAAA,CAAA,IAAa,CAAC,KAAM,CAAA,MAAA,CAAO,aAAa,CAAG,EAAA;AACtE,MAAY,WAAA,CAAA,KAAA,CAAM,WAAW,MAAO,CAAA,aAAA;AAAA,KAC/B,MAAA;AACL,MAAY,WAAA,CAAA,KAAA,CAAM,kBAAkB,MAAO,CAAA,eAAA;AAAA;AAG7C,IAAI,IAAA,SAAA;AAEJ,IAAI,IAAA,IAAA,GACF,KAAK,OAAW,IAAA,CAAC,KAAK,UAClB,GAAA,IAAA,CAAK,GACL,GAAA,IAAA,CAAK,UAAW,CAAA;AAAA,MACd,MAAQ,EAAA,KAAA;AAAA,MACR,gBAAkB,EAAA;AAAA,KACnB,CAAA;AAEP,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,IAAA,GAAO,aAAa,aAAc,CAAA,IAAA,CAAK,OAAQ,CAAA,KAAA,EAAO,EAAE,CAAC,CAAA;AACzD,MAAA,IAAA,GAAO,gBAAiB,CAAA,IAAA,EAAM,kBAAoB,EAAAE,uBAAA,CAAiB,SAAS,CAAA;AAC5E,MAAO,IAAA,GAAA,YAAA,CAAa,WAAW,IAAI,CAAA;AAAA;AAGrC,IAAA,IAAI,KAAK,OAAS,EAAA;AAChB,MAAY,SAAA,GAAA;AAAA,QACV,IAAA;AAAA,QACA,KAAO,EAAA,gBAAA,CAAiB,IAAK,CAAA,KAAA,IAAS,IAAI,kBAAkB,CAAA;AAAA,QAC5D,MAAA,EAAQ,IAAK,CAAA,WAAA,GAAc,QAAW,GAAA,KAAA,CAAA;AAAA,QACtC,OAAA,EAAS,CAAC,GAAA,EAAiB,MAAkB,KAAA;AAC3C,UAAA,IAAA,CAAK,OAAS,CAAA;AAAA,YACZ,QAAQ,MAAU,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA;AAAA,YAClB,CAAG,EAAA,GAAA;AAAA,YACH,gBAAkB,EAAA;AAAA,WACnB,CAAA;AAAA,SACH;AAAA,QACA,MAAQ,EAAA,KAAA;AAAA,QACR,QAAA,EAAA,CAAU,EAAK,GAAA,IAAA,CAAA,QAAA,KAAL,IAAiB,GAAA,EAAA,GAAA;AAAA,OAC7B;AAAA,KACK,MAAA;AACL,MAAY,SAAA,GAAA;AAAA,QACV,IAAA;AAAA,QACA,KAAO,EAAA,gBAAA,CAAiB,IAAK,CAAA,KAAA,IAAS,IAAI,kBAAkB,CAAA;AAAA,QAC5D,MAAA,EAAQ,IAAK,CAAA,WAAA,GAAc,QAAW,GAAA,KAAA,CAAA;AAAA,QACtC,MAAQ,EAAA,KAAA;AAAA,QACR,QAAA,EAAA,CAAU,EAAK,GAAA,IAAA,CAAA,QAAA,KAAL,IAAiB,GAAA,EAAA,GAAA;AAAA,OAC7B;AAAA;AAGF,IAAA,OAAA,CAAQ,yBAAyB,gCAAkC,EAAA;AAAA,MACjE,KAAA;AAAA,MACA,KAAA;AAAA,MACA,kBAAA;AAAA,MACA,gBAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,GACF,CAAA;AAED,EAAA,OAAO,WAAW,MAAO,CAAA,CAAC,IAA4B,KAAA,CAAC,CAAC,IAAI,CAAA;AAC9D;AAKK,SAAS,uBAAuB,IAAgC,EAAA;AACrE,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAK,CAAA,MAAA,KAAW,CAAG,EAAA;AAC9B,IAAA,OAAO,EAAC;AAAA;AAGV,EAAM,MAAA,OAAA,GAAU,CAAC,GAAG,IAAI,CAAA;AACxB,EAAA,MAAM,YAAY,sBAAuB,EAAA;AAEzC,EAAA,KAAA,IAAS,UAAa,GAAA,CAAA,EAAG,UAAa,GAAA,OAAA,CAAQ,QAAQ,UAAc,EAAA,EAAA;AAClE,IAAA,MAAM,QAAW,GAAA,EAAE,GAAG,OAAA,CAAQ,UAAU,CAAE,EAAA;AAC1C,IAAA,MAAM,SAAY,GAAA,CAAC,GAAG,QAAA,CAAS,MAAM,CAAA;AAErC,IAAA,KAAA,IAAS,UAAa,GAAA,CAAA,EAAG,UAAa,GAAA,SAAA,CAAU,QAAQ,UAAc,EAAA,EAAA;AACpE,MAAA,SAAA,CAAU,UAAU,CAAI,GAAA;AAAA,QACtB,GAAG,UAAU,UAAU,CAAA;AAAA,QACvB,OAAS,EAAA;AAAA,OACX;AAAA;AAGF,IAAA,OAAA,CAAQ,UAAU,CAAI,GAAA;AAAA,MACpB,GAAG,QAAA;AAAA,MACH,MAAQ,EAAA;AAAA,KACV;AAAA;AAGF,EAAO,OAAA,OAAA;AACT;AAKO,SAAS,kBACd,MACA,EAAA,WAAA,EACA,MACA,QACA,EAAA,KAAA,EACA,SACA,qBACuB,EAAA;AACvB,EAAA,MAAM,sBAAsB,MAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,mBAAA;AACpC,EAAM,MAAA,YAAA,GAAeC,aAAO,CAAC,CAAA;AAC7B,EAAM,MAAA,UAAA,GAAaC,4BAAY,CAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,MAAM,CAAA;AAE3C,EAAA,OAAOC,cAAQ,MAAM;AACnB,IAAA,IAAI,CAAC,mBAAA,IAAuB,CAAC,WAAA,IAAe,CAAC,IAAM,EAAA;AACjD,MAAA;AAAA;AAGF,IAAA,MAAM,SAAS,IAAM,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,MAAA;AAErB,IACE,IAAA,IAAA,CAAK,YAAgB,IAAA,IAAA,IACrB,MACA,IAAA,UAAA,IACA,CAAC,kBAAmB,CAAA,MAAA,EAAQ,UAAY,EAAA,0BAA0B,CAClE,EAAA;AACA,MAAa,YAAA,CAAA,OAAA,EAAA;AAAA;AAGf,IAAA,MAAM,SAAuB,GAAA;AAAA,MAC3B,cAAc,YAAa,CAAA,OAAA;AAAA,MAC3B,GAAG,IAAA;AAAA,MACH,QAAQ,mBAAoB,CAAA;AAAA,QAC1B,IAAM,EAAA,MAAA;AAAA,QACN,WAAA;AAAA,QACA,mBAAA;AAAA,QACA,gBAAkB,EAAA,OAAA;AAAA,QAClB,KAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACD;AAAA,KACH;AACA,IAAA,IAAI,IAAK,CAAA,WAAA,IAAe,IAAK,CAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AACnD,MAAA,SAAA,CAAU,cAAc,mBAAoB,CAAA;AAAA,QAC1C,MAAM,IAAK,CAAA,WAAA;AAAA,QACX,WAAa,EAAA;AAAA,UACX,UAAU,EAAC;AAAA,UACX,WAAW;AAAC,SACd;AAAA,QACA,gBAAkB,EAAA,OAAA;AAAA,QAClB,KAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA;AAEH,IAAO,OAAA,SAAA;AAAA,GACT,EAAG,CAAC,mBAAA,EAAqB,WAAa,EAAA,IAAA,EAAM,YAAY,QAAU,EAAA,KAAA,EAAO,OAAS,EAAA,qBAAqB,CAAC,CAAA;AAC1G;AAKgB,SAAA,wBAAA,CAAyB,KAAkB,EAAA,KAAA,EAAc,eAA6B,EAAA;AACpG,EAAA,IAAI,mDAAiB,aAAe,EAAA;AAClC,IAAO,OAAA;AAAA,MACL,KAAO,EAAA;AAAA,QACL,GAAG,gBAAgB,aAAc,CAAA;AAAA;AACnC,KACF;AAAA;AAGF,EAAO,OAAA,EAAE,OAAO,EAAE,KAAA,EAAO,OAAO,IAAM,EAAA,CAAC,KAAK,CAAA,EAAI,EAAA;AAClD;;ACzmBO,SAAS,2BAA2B,OAIV,EAAA;AAC/B,EAAA,OAAO,IAAI,KAAA;AAAA,IACT,EAAC;AAAA,IACD;AAAA,MACE,GAAA,EAAK,CAAC,GAAA,EAAK,GAAkC,KAAA;AA1BnD,QAAA,IAAA,EAAA;AA4BQ,QAAI,IAAA,KAAA,GAAQ,QAAQ,KAAM,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA,KAAM,GAAQ,KAAA,CAAA,CAAE,IAAI,CAAA;AAC3D,QAAA,IAAI,CAAC,KAAO,EAAA;AAEV,UAAM,MAAA,CAAA,GAAIjB,gBAAS,GAAG,CAAA;AACtB,UAAQ,KAAA,GAAA,OAAA,CAAQ,KAAM,CAAA,MAAA,CAAO,CAAC,CAAA;AAAA;AAEhC,QAAA,IAAI,CAAC,KAAO,EAAA;AAEV,UAAQ,KAAA,GAAA,OAAA,CAAQ,MAAM,MAAO,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,GAAA,KAAQ,CAAE,CAAA,MAAA,CAAO,WAAW,CAAA;AAAA;AAEvE,QAAA,IAAI,CAAC,KAAO,EAAA;AAEV,UAAA,KAAA,GAAQ,OAAQ,CAAA,KAAA,CAAM,MAAO,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA;AACvC,YAAA,IAAI,EAAE,MAAQ,EAAA;AACZ,cAAO,OAAA,GAAA,KAAQ,EAAE,MAAO,CAAA,IAAA;AAAA;AAE1B,YAAO,OAAA,KAAA;AAAA,WACR,CAAA;AAAA;AAEH,QAAA,IAAI,CAAC,KAAO,EAAA;AACV,UAAO,OAAA,KAAA,CAAA;AAAA;AAIT,QAAA,MAAM,gBAAmB,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,OAAN,KAAA,IAAA,GAAA,EAAA,GAAiB,mBAAoB,EAAA;AAC9D,QAAA,MAAM,GAAM,GAAA,KAAA,CAAM,MAAO,CAAA,OAAA,CAAQ,QAAQ,CAAA;AACzC,QAAM,MAAA,IAAA,GAAO,iBAAiB,GAAG,CAAA;AACjC,QAAK,IAAA,CAAA,QAAA,GAAW,MAAM,sBAAA,CAAuB,IAAI,CAAA;AACjD,QAAO,OAAA,IAAA;AAAA;AACT;AACF,GACF;AACF;;AC1BO,MAAM,eAAkB,GAAA;AACxB,MAAM,cAAiB,GAAA;AACvB,MAAM,gBAAmB,GAAA;AACzB,MAAM,QAAW,GAAA;AACjB,MAAM,eAAkB,GAAA;AAkCxB,MAAM,kCAAqC,GAAA;AAErC,MAAA,qBAAA,GAAwB,CAAC,OAA0D,KAAA;AA1EhG,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA2EE,EAAA,MAAM,EAAE,gBAAA,EAAkB,aAAe,EAAA,QAAA,EAAU,OAAU,GAAA,OAAA;AAC7D,EAAM,MAAA,KAAA,GAAQ,cAAc,KAAM,CAAA,MAAA,GAAS,cAAc,KAAQ,GAAA,CAAC,UAAU,IAAI,CAAA;AAEhF,EAAA,MAAM,SAAyB,EAAC;AAChC,EAAA,MAAM,YAAe,GAAA,eAAA;AAAA,IACnB,cAAc,MACV,GAAA;AAAA,MACE,IAAI,cAAe,CAAA,QAAA;AAAA,MACnB,SAAS,aAAc,CAAA;AAAA,KAEzB,GAAA;AAAA,MACE,IAAI,cAAe,CAAA;AAAA;AACrB,GACN;AAEA,EAAA,MAAM,IAAO,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,IAAR,KAAA,IAAA,GAAA,EAAA,GAAgB,EAAC;AAC9B,EAAA,MAAM,KAAQ,GAAA,aAAA,CAAc,KAAQ,GAAA,aAAA,CAAc,KAAQ,GAAA,kCAAA;AAE1D,EAAA,IAAI,QAAW,GAAA,KAAA;AAEf,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,KAAK,MAAU,IAAA,CAAC,UAAU,CAAK,EAAA,EAAA;AACjD,IAAM,MAAA,SAAA,GAAY,KAAK,CAAC,CAAA;AAExB,IAAA,MAAM,EAAE,SAAA,EAAc,GAAA,YAAA,CAAa,SAAS,CAAA;AAC5C,IAAM,MAAA,IAAA,GAAO,IAAI,aAAA,CAAc,SAAS,CAAA;AAExC,IAAS,KAAA,IAAA,CAAA,GAAI,GAAG,CAAI,GAAA,SAAA,CAAU,OAAO,MAAU,IAAA,CAAC,UAAU,CAAK,EAAA,EAAA;AAC7D,MAAM,MAAA,KAAA,GAAQ,SAAU,CAAA,MAAA,CAAO,CAAC,CAAA;AAChC,MAAA,MAAM,qBAAqB,KAAM,CAAA,QAAA;AAGjC,MAAA,IAAI,CAAC,YAAA,CAAa,KAAO,EAAA,SAAA,EAAW,IAAI,CAAG,EAAA;AACzC,QAAA;AAAA;AAGF,MAAA,IAAI,SAAS,KAAM,CAAA,MAAA;AAEnB,MAAI,IAAA,CAAA,EAAA,GAAA,KAAA,CAAM,KAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAa,KAAO,EAAA;AAEtB,QAAS,MAAA,GAAA;AAAA,UACP,GAAG,MAAA;AAAA,UACH,GAAA,CAAG,EAAM,GAAA,KAAA,CAAA,KAAA,KAAN,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA;AAAA,SAClB;AAAA;AAGF,MAAA,IAAI,WAAc,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,MAAO,CAAA,WAAA,KAAb,IAA4B,GAAA,EAAA,GAAA,EAAA;AAE9C,MAAA,MAAM,OACJ,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,OAAN,KAAA,IAAA,GAAA,EAAA,GACA,mBAAoB,CAAA;AAAA,QAClB,KAAA;AAAA,QACA,OAAO,OAAQ,CAAA,KAAA;AAAA,QACf;AAAA,OACD,CAAA;AAGH,MAAA,IAAI,cAAc,MAAQ,EAAA;AACxB,QAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,KAAM,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAC5C,UAAA,KAAA,CAAM,KAAQ,GAAA,uBAAA,CAAwB,KAAO,EAAA,MAAA,CAAO,MAAM,CAAA;AAE1D,UAAM,MAAA,UAAA,GAAa,2CAA4C,CAAA,KAAA,EAAO,CAAC,CAAA;AACvE,UAAA,MAAM,YAAe,GAAA,OAAA,CAAQ,KAAM,CAAA,MAAA,CAAO,CAAC,CAAC,CAAA;AAC5C,UAAA,MAAM,UAAU,yBAA0B,CAAA,SAAA,EAAW,KAAO,EAAA,CAAA,EAAG,kBAAkB,UAAU,CAAA;AAC3F,UAAA,MAAM,aAAgB,GAAA,0BAAA,CAA2B,OAAS,EAAA,OAAA,CAAQ,aAAa,KAAK,CAAA;AAEpF,UAAA,MAAA,CAAO,IAAK,CAAA;AAAA,YACV,IAAM,EAAA,EAAA;AAAA,YACN,KAAO,EAAA,MAAA;AAAA,YACP,OAAS,EAAA;AAAA,cACP,GAAG,YAAA;AAAA,cACH,KAAO,EAAA,OAAA;AAAA,cACP,KAAA,EAAO,wCAAiB,YAAa,CAAA;AAAA,aACvC;AAAA,YACA,IAAA;AAAA,YACA,QAAU,EAAA,CAAA;AAAA,YACV,QAAU,EAAA,CAAA;AAAA,YACV,QAAA,EAAU,kBACN,GAAA,MACE,kBAAmB,CAAA;AAAA,cACjB,aAAe,EAAA;AAAA,aAChB,CACH,GAAA,MAAM,EAAC;AAAA,YACX,QAAA,EAAU,SAAS,KAAK;AAAA,WACzB,CAAA;AAED,UAAI,IAAA,MAAA,CAAO,UAAU,KAAO,EAAA;AAC1B,YAAW,QAAA,GAAA,IAAA;AACX,YAAA;AAAA;AACF;AACF,OACK,MAAA;AACL,QAAA,MAAM,UAAU,WAAY,CAAA;AAAA,UAC1B,KAAA;AAAA,UACA,QAAU,EAAA;AAAA;AAAA,SACX,CAAA;AAED,QAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACxB,UAAA,MAAM,cAAa,EAAM,GAAA,CAAA,EAAA,GAAA,KAAA,CAAA,KAAA,KAAN,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,KAAb,YAA2B,EAAC;AAC/C,UAAA,UAAA,CAAW,QAAQ,CAAI,GAAA,EAAE,KAAO,EAAA,IAAA,EAAM,MAAM,IAAK,EAAA;AAEjD,UAAA,MAAM,YAAe,GAAA,OAAA,CAAQ,OAAQ,CAAA,IAAI,CAAC,CAAA;AAE1C,UAAA,IAAI,gBAAgB,EAAI,EAAA;AACtB,YAAa,YAAA,CAAA,KAAA,GAAQ,gBAAiB,CAAA,WAAA,EAAa,UAAU,CAAA;AAAA,WACxD,MAAA;AACL,YAAA,YAAA,CAAa,KAAQ,GAAA,mBAAA,CAAoB,KAAO,EAAA,SAAA,EAAW,IAAI,CAAA;AAAA;AAEjE,UAAA,YAAA,CAAa,aAAgB,GAAA,OAAA,CAAQ,aACjC,GAAA,WAAA,CAAY,EAAE,KAAA,EAAc,QAAU,EAAA,CAAC,SAAU,CAAA,QAAQ,CAAE,EAAC,EAAE,QAC9D,GAAA,KAAA,CAAA;AAEJ,UAAA,IAAI,SAAwC,GAAA,KAAA,CAAA;AAC5C,UAAA,IAAI,QAAQ,SAAW,EAAA;AACrB,YAAY,SAAA,GAAA;AAAA,cACV,CAAA,EAAG,SAAU,CAAA,MAAA,CAAO,CAAC,CAAA;AAAA,cACrB,CAAG,EAAA;AAAA,aACL;AACA,YAAI,IAAA,IAAA,KAAS,UAAU,IAAM,EAAA;AAC3B,cAAA,SAAA,CAAU,cAAiB,GAAA,SAAA,CAAU,CAAE,CAAA,MAAA,CAAO,MAAS,GAAA,CAAA;AAAA,aACzD,MAAA,IAAW,IAAS,KAAA,SAAA,CAAU,KAAO,EAAA;AACnC,cAAA,SAAA,CAAU,cAAiB,GAAA,CAAA;AAAA;AAC7B;AAoBF,UAAA,MAAM,aAAgB,GAAA,SAAA,CAAU,MAAW,KAAA,CAAA,GAAI,CAAI,GAAA,KAAA,CAAA;AAEnD,UAAA,MAAA,CAAO,IAAK,CAAA;AAAA,YACV,IAAM,EAAA,IAAA;AAAA,YACN,KAAO,EAAA,MAAA;AAAA,YACP,OAAS,EAAA,YAAA;AAAA,YACT,SAAA;AAAA,YACA,IAAA;AAAA,YACA,QAAU,EAAA,CAAA;AAAA,YACV,QAAA,EAAU,kBACN,GAAA,MACE,kBAAmB,CAAA;AAAA,cACjB,eAAiB,EAAA,YAAA;AAAA,cACjB;AAAA,aACD,CACH,GAAA,MAAM,EAAC;AAAA,YACX,QAAA,EAAU,SAAS,KAAK;AAAA,WACzB,CAAA;AAAA;AACH;AACF;AACF;AAGF,EAAI,IAAA,MAAA,CAAO,WAAW,CAAG,EAAA;AACvB,IAAO,MAAA,CAAA,IAAA,CAAK,0BAA2B,CAAA,OAAO,CAAC,CAAA;AAAA;AAGjD,EAAO,OAAA,MAAA;AACT;AAEA,SAAS,yBACP,CAAA,KAAA,EACA,KACA,EAAA,QAAA,EACA,kBACA,UACQ,EAAA;AA5PV,EAAA,IAAA,EAAA;AA6PE,EAAM,MAAA,WAAA,GAAc,MAAM,MAAO,CAAA,WAAA;AAEjC,EAAA,IAAI,WAAa,EAAA;AAEf,IAAI,IAAA,WAAA,CAAY,OAAQ,CAAA,eAAe,CAAG,EAAA;AACxC,MAAA,OAAO,gBAAiB,CAAA,0BAAA,CAA2B,WAAW,CAAA,EAAG,UAAU,CAAA;AAAA;AAG7E,IAAO,OAAA,gBAAA,CAAiB,aAAa,UAAU,CAAA;AAAA;AAGjD,EAAA,IAAI,QAAkB,EAAC;AACvB,EAAA,IAAI,kBAAqB,GAAA,CAAA;AAEzB,EAAW,KAAA,MAAA,UAAA,IAAc,MAAM,MAAQ,EAAA;AACrC,IAAA,IAAI,eAAe,KAAO,EAAA;AACxB,MAAA;AAAA;AAGF,IAAI,IAAA,UAAA,CAAW,IAAS,KAAA,SAAA,CAAU,MAAQ,EAAA;AACxC,MAAA,MAAM,KAAQ,GAAA,CAAA,EAAA,GAAA,UAAA,CAAW,MAAO,CAAA,QAAQ,MAA1B,IAA+B,GAAA,EAAA,GAAA,EAAA;AAC7C,MAAA,MAAM,cAAc,UAAW,CAAA,OAAA,GAAU,WAAW,OAAQ,CAAA,KAAK,EAAE,IAAO,GAAA,KAAA;AAC1E,MAAI,IAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AAC1B,QAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AAAA;AACxB,KACS,MAAA,IAAA,UAAA,CAAW,IAAS,KAAA,SAAA,CAAU,MAAQ,EAAA;AAC/C,MAAA,kBAAA,EAAA;AAAA;AACF;AAGF,EAAI,IAAA,kBAAA,IAAsB,KAAM,CAAA,MAAA,KAAW,CAAG,EAAA;AAC5C,IAAA,KAAA,CAAM,IAAK,CAAA,mBAAA,CAAoB,KAAO,EAAA,KAAK,CAAC,CAAA;AAAA;AAG9C,EAAO,OAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACvB;AAMA,SAAS,uBAAA,CAAwB,OAAc,aAAuB,EAAA;AACpE,EAAO,OAAA;AAAA,IACL,GAAG,KAAM,CAAA,KAAA;AAAA,IACT,WAAa,EAAA;AAAA,GACf;AACF;AAKA,SAAS,0BAAA,CAA2B,WAAqB,EAAA,WAAA,EAAgC,KAAsB,EAAA;AAC7G,EAAW,KAAA,MAAA,QAAA,IAAY,YAAY,SAAW,EAAA;AAC5C,IAAA,IAAI,SAAS,OAAQ,CAAA,EAAA,KAAO,YAAY,QAAS,CAAA,OAAA,CAAQ,YAAY,WAAa,EAAA;AAChF,MAAW,KAAA,MAAA,IAAA,IAAQ,SAAS,UAAY,EAAA;AACtC,QAAA,IAAI,IAAK,CAAA,EAAA,KAAO,OAAW,IAAA,IAAA,CAAK,KAAO,EAAA;AACrC,UAAA,OAAO,KAAM,CAAA,aAAA,CAAc,cAAe,CAAA,IAAA,CAAK,MAAM,UAAU,CAAA;AAAA;AACjE;AACF;AACF;AAGF,EAAO,OAAA,IAAA;AACT;AAEO,SAAS,SAAS,KAAuB,EAAA;AA9ThD,EAAA,IAAA,EAAA,EAAA,EAAA;AA+TE,EAAO,OAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,MAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAc,KAAd,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAqB,UAAS,KAAM,CAAA,MAAA,CAAO,KAAM,CAAA,MAAA,GAAS,CAAI,GAAA,KAAA;AACvE;AAEO,SAAS,gCAAgC,MAAsD,EAAA;AACpG,EAAA,IAAI,QAAW,GAAA,EAAA;AACf,EAAA,IAAI,OAAU,GAAA,EAAA;AACd,EAAA,IAAI,SAAY,GAAA,EAAA;AAChB,EAAA,IAAI,SAAY,GAAA,EAAA;AAEhB,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AACtC,IAAM,MAAA,CAAA,GAAI,MAAO,CAAA,CAAC,CAAE,CAAA,OAAA;AAEpB,IAAA,IAAI,EAAE,IAAQ,IAAA,CAAA,CAAE,IAAK,CAAA,MAAA,GAAS,QAAQ,MAAQ,EAAA;AAC5C,MAAA,OAAA,GAAU,CAAE,CAAA,IAAA;AAAA;AAGd,IAAA,IAAI,EAAE,KAAS,IAAA,CAAA,CAAE,KAAM,CAAA,MAAA,GAAS,SAAS,MAAQ,EAAA;AAC/C,MAAA,QAAA,GAAW,CAAE,CAAA,KAAA;AAAA;AAGf,IAAA,IAAI,EAAE,MAAU,IAAA,CAAA,CAAE,MAAO,CAAA,MAAA,GAAS,UAAU,MAAQ,EAAA;AAClD,MAAA,SAAA,GAAY,CAAE,CAAA,MAAA;AAAA;AAGhB,IAAA,IAAI,EAAE,MAAU,IAAA,CAAA,CAAE,MAAO,CAAA,MAAA,GAAS,UAAU,MAAQ,EAAA;AAClD,MAAA,SAAA,GAAY,CAAE,CAAA,MAAA;AAAA;AAChB;AAGF,EAAO,OAAA,EAAE,MAAM,OAAS,EAAA,KAAA,EAAO,UAAU,MAAQ,EAAA,SAAA,EAAW,QAAQ,SAAU,EAAA;AAChF;AAEA,SAAS,2BAA2B,OAAqD,EAAA;AA/VzF,EAAA,IAAA,EAAA,EAAA,EAAA;AAgWE,EAAA,MAAM,WAAc,GAAA,SAAA;AACpB,EAAM,MAAA,EAAE,WAAa,EAAA,QAAA,EAAa,GAAA,OAAA;AAClC,EAAM,MAAA,EAAE,UAAa,GAAA,WAAA;AAErB,EAAA,MAAM,mBAAmB,mBAAoB,CAAA;AAAA,IAC3C,KAAO,EAAA;AAAA,MACL,IAAM,EAAA,EAAA;AAAA,MACN,MAAM,SAAU,CAAA,KAAA;AAAA,MAChB,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,OAAO,OAAQ,CAAA,KAAA;AAAA,IACf;AAAA,GACD,CAAA;AAED,EAAM,MAAA,OAAA,GAAU,iBAAiB,IAAI,CAAA;AACrC,EAAM,MAAA,IAAA,GAAO,cAAe,CAAA,OAAA,EAAS,WAAW,CAAA;AAEhD,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,WAAA;AAAA,IACN,KAAO,EAAA;AAAA,MACL,GAAG,QAAA;AAAA,MACH,GAAA,EAAA,CAAK,EAAS,GAAA,QAAA,CAAA,GAAA,KAAT,IAAgB,GAAA,EAAA,GAAA,CAAA;AAAA,MACrB,GAAA,EAAA,CAAK,EAAS,GAAA,QAAA,CAAA,GAAA,KAAT,IAAgB,GAAA,EAAA,GAAA;AAAA,KACvB;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAA;AAAA,MACA,OAAS,EAAA,CAAA;AAAA,MACT,OAAO,OAAQ,CAAA;AAAA,KACjB;AAAA,IACA,QAAU,EAAA;AAAA,GACZ;AACF;AAEA,SAAS,cAAA,CAAe,SAAuB,QAA0B,EAAA;AACvE,EAAA,IAAI,CAAC,OAAA,IAAWJ,cAAQ,CAAA,OAAA,CAAQ,IAAI,CAAG,EAAA;AACrC,IAAO,OAAA,QAAA;AAAA;AAET,EAAA,OAAO,OAAQ,CAAA,IAAA;AACjB;AAEO,SAAS,2BAA2B,GAAa,EAAA;AACtD,EAAA,OAAO,GAAI,CAAA,OAAA;AAAA,IACT,sEAAA;AAAA,IACA,CAAC,KAAO,EAAA,QAAA,EAAU,MAAM,QAAU,EAAA,IAAA,EAAM,UAAU,IAAS,KAAA;AA3Y/D,MAAA,IAAA,EAAA,EAAA,EAAA;AA4YM,MAAO,OAAA,CAAA,iBAAA,EAAA,CAAoB,mCAAY,QAAZ,KAAA,IAAA,GAAA,EAAA,GAAwB,QAAQ,CAAI,CAAA,EAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,IAAA,GAAQ,IAAR,KAAA,IAAA,GAAA,EAAA,GAAgB,IAAI,CAAA,CAAA,CAAA;AAAA;AACrF,GACF;AACF;AAKA,SAAS,2CAAA,CAA4C,OAAc,QAA0C,EAAA;AApZ7G,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAqZE,EAAA,IAAA,CAAI,EAAM,GAAA,CAAA,EAAA,GAAA,KAAA,CAAA,KAAA,KAAN,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,KAAb,mBAAyB,aAAe,EAAA;AAC1C,IAAO,OAAA;AAAA,MACL,GAAA,CAAG,EAAM,GAAA,KAAA,CAAA,KAAA,KAAN,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA;AAAA,MAChB,aAAe,EAAA;AAAA,QACb,KAAO,EAAA;AAAA,UACL,IAAG,EAAM,GAAA,CAAA,EAAA,GAAA,KAAA,CAAA,KAAA,KAAN,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,KAAb,mBAAyB,aAAc,CAAA,KAAA;AAAA,UAC1C;AAAA;AACF;AACF,KACF;AAAA;AAGF,EAAO,OAAA,CAAA,EAAA,GAAA,KAAA,CAAM,UAAN,IAAa,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA;AACtB;;ACzZa,MAAA,yBAAA,GAA4B,CAAI,KAAa,KAAA;AACxD,EAAO,OAAA,KAAA;AACT;AAUO,MAAM,uBAA0B,GAAA,CACrC,KACA,EAAA,OAAA,EACA,QACG,KAAA;AACH,EAAI,IAAA,KAAA,KAAU,KAAa,CAAA,IAAA,KAAA,KAAU,IAAM,EAAA;AACzC,IAAO,OAAA,KAAA,CAAA;AAAA;AAGT,EAAO,OAAA,UAAA,CAAW,MAAO,CAAA,KAAK,CAAC,CAAA;AACjC;AAEO,MAAM,4BAA+B,GAAA,CAC1C,KACA,EAAA,OAAA,EACA,QACG,KAAA;AArCL,EAAA,IAAA,EAAA,EAAA,EAAA;AAuCE,EAAA,CAAA,EAAA,GAAA,CAAO,EAAQ,GAAA,OAAA,CAAA,KAAA,KAAR,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,KAAtB,IAA6B,GAAA,IAAA,GAAA,OAAA,EAAA,CAAA,WAAA;AAC7B,EAAO,OAAA,uBAAA,CAAwB,KAAO,EAAA,OAAA,EAAS,QAAQ,CAAA;AACzD;AAeO,MAAM,0BAA6B,GAAA,CACxC,KACA,EAAA,QAAA,EACA,SACe,KAAA;AACf,EAAO,OAAA,KAAA;AACT;AAaO,MAAM,8BAAiC,GAAA,CAC5C,KACA,EAAA,QAAA,EACA,SACmB,KAAA;AACnB,EAAO,OAAA,KAAA;AACT;AAcO,MAAM,uBAA0B,GAAA,CACrC,KACA,EAAA,QAAA,EACA,SACG,KAAA;AACH,EAAO,OAAA,KAAA;AACT;AAUO,MAAM,uBAA0B,GAAA,CACrC,KACA,EAAA,OAAA,EACA,QACG,KAAA;AACH,EAAI,IAAA,KAAA,KAAU,IAAQ,IAAA,KAAA,KAAU,KAAW,CAAA,EAAA;AACzC,IAAO,OAAA,KAAA;AAAA;AAET,EAAA,IAAI,YAAY,QAAS,CAAA,kBAAA,IAAsB,QAAQ,gBAAoB,IAAA,OAAO,UAAU,QAAU,EAAA;AACpG,IAAA,OAAO,QAAQ,gBAAiB,CAAA,KAAA,EAAO,OAAQ,CAAA,KAAA,CAAO,MAAO,UAAU,CAAA;AAAA;AAEzE,EAAA,OAAO,GAAG,KAAK,CAAA,CAAA;AACjB;AAMO,MAAM,2BAA8B,GAAA,CACzC,KACA,EAAA,QAAA,EACA,SACqB,KAAA;AACrB,EAAO,OAAA,KAAA;AACT;AAMO,MAAM,qBAAwB,GAAA,CACnC,KACA,EAAA,QAAA,EACA,SACG,KAAA;AACH,EAAO,OAAA,KAAA;AACT;AAEO,MAAM,wBAA2B,GAAA,CACtC,KACA,EAAA,QAAA,EACA,SACG,KAAA;AACH,EAAO,OAAA,KAAA;AACT;AA+BY,IAAA,2BAAA,qBAAAsB,4BAAL,KAAA;AACL,EAAAA,6BAAA,YAAa,CAAA,GAAA,KAAA;AACb,EAAAA,6BAAA,kBAAmB,CAAA,GAAA,SAAA;AACnB,EAAAA,6BAAA,eAAgB,CAAA,GAAA,MAAA;AAHN,EAAAA,OAAAA,4BAAAA;AAAA,CAAA,EAAA,2BAAA,IAAA,EAAA;;AC3GL,MAAe,wBAKtB,CAAA;AAAA,EALO,WAAA,GAAA;AAML,IAAA,IAAA,CAAQ,aAAkB,EAAC;AAAA;AAAA,EAE3B,gBAAmC,MAAgF,EAAA;AACjH,IAAK,IAAA,CAAA,UAAA,CAAW,KAAK,MAAM,CAAA;AAC3B,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,WAAc,GAAA;AACZ,IAAO,OAAA,IAAI,SAAS,MAAM;AACxB,MAAA,OAAO,IAAK,CAAA,UAAA;AAAA,KACb,CAAA;AAAA;AACH,EAEA,QAAW,GAAA;AACT,IAAA,OAAO,IAAK,CAAA,UAAA;AAAA;AAEhB;;ACvEO,MAAM,iCAA2C,wBAItD,CAAA;AAAA,EACA,eAA0B,MAA0F,EAAA;AAnCtH,IAAA,IAAA,EAAA;AAoCI,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,QAAU,EAAA,uBAAA,CAAwB,GAAI,CAAA,QAAQ,CAAE,CAAA,MAAA;AAAA,MAChD,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,QAAQ,CAAE,CAAA,MAAA;AAAA,MAC9C,OAAS,EAAA,uBAAA;AAAA,MACT,WAAa,EAAA,CAAA,EAAA,GAAA,MAAA,CAAO,WAAP,KAAA,IAAA,GAAA,EAAA,GAAuB,MAAM,IAAA;AAAA,MAC1C,QAAA,EAAU,MAAO,CAAA,QAAA,IAAY;AAAC,KAC/B,CAAA;AAAA;AACH,EAEA,eAA0B,MAA0F,EAAA;AA/CtH,IAAA,IAAA,EAAA;AAgDI,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,QAAU,EAAA,uBAAA,CAAwB,GAAI,CAAA,QAAQ,CAAE,CAAA,MAAA;AAAA,MAChD,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,QAAQ,CAAE,CAAA,MAAA;AAAA,MAC9C,OAAS,EAAA,uBAAA;AAAA,MACT,WAAa,EAAA,CAAA,EAAA,GAAA,MAAA,CAAO,WAAP,KAAA,IAAA,GAAA,EAAA,GAAuB,MAAM,IAAA;AAAA,MAC1C,QAAA,EAAU,MAAO,CAAA,QAAA,IAAY;AAAC,KAC/B,CAAA;AAAA;AACH,EAEA,aAAwB,MAA0F,EAAA;AA3DpH,IAAA,IAAA,EAAA;AA4DI,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,QAAU,EAAA,uBAAA,CAAwB,GAAI,CAAA,MAAM,CAAE,CAAA,MAAA;AAAA,MAC9C,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,MAAM,CAAE,CAAA,MAAA;AAAA,MAC5C,OAAS,EAAA,uBAAA;AAAA,MACT,WAAa,EAAA,CAAA,EAAA,GAAA,MAAA,CAAO,WAAP,KAAA,IAAA,GAAA,EAAA,GAAuB,MAAM,IAAA;AAAA,MAC1C,QAAA,EAAU,MAAO,CAAA,QAAA,IAAY;AAAC,KAC/B,CAAA;AAAA;AACH,EAEA,UACE,MACA,EAAA;AACA,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,QAAU,EAAA,uBAAA,CAAwB,GAAI,CAAA,QAAQ,CAAE,CAAA,MAAA;AAAA,MAChD,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,QAAQ,CAAE,CAAA,MAAA;AAAA,MAC9C,OAAS,EAAA,uBAAA;AAAA;AAAA,MAET,WAAa,EAAA,MAAA,CAAO,WAAc,GAAA,MAAA,CAAO,cAAc,MAAM,IAAA;AAAA,MAC7D,UAAU,MAAO,CAAA,QAAA,IAAY,EAAE,OAAA,EAAS,EAAG;AAAA,KAC5C,CAAA;AAAA;AACH,EAEA,SAA6B,MAA+D,EAAA;AAC1F,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,QAAU,EAAA,uBAAA,CAAwB,GAAI,CAAA,OAAO,CAAE,CAAA,MAAA;AAAA,MAC/C,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,OAAO,CAAE,CAAA,MAAA;AAAA,MAC7C,OAAS,EAAA,uBAAA;AAAA;AAAA,MAET,WAAa,EAAA,MAAA,CAAO,WAAc,GAAA,MAAA,CAAO,cAAc,MAAM,IAAA;AAAA,MAC7D,UAAU,MAAO,CAAA,QAAA,IAAY,EAAE,OAAA,EAAS,EAAG;AAAA,KAC5C,CAAA;AAAA;AACH,EAEA,iBAA4B,MAA+D,EAAA;AACzF,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,SAAS,CAAE,CAAA,MAAA;AAAA,MAC/C,QAAU,EAAA,uBAAA,CAAwB,GAAI,CAAA,SAAS,CAAE,CAAA,MAAA;AAAA,MACjD,OAAS,EAAA,wBAAA;AAAA,MACT,WAAa,EAAA,MAAA,CAAO,WAAc,GAAA,MAAA,CAAO,cAAc,MAAM,IAAA;AAAA,MAC7D,QAAA,EAAU,MAAO,CAAA,QAAA,IAAY;AAAC,KAC/B,CAAA;AAAA;AACH,EAEA,eAA0B,MAA8D,EAAA;AACtF,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,OAAO,CAAE,CAAA,MAAA;AAAA,MAC7C,QAAU,EAAA,uBAAA,CAAwB,GAAI,CAAA,OAAO,CAAE,CAAA,MAAA;AAAA,MAC/C,OAAS,EAAA,yBAAA;AAAA,MACT,WAAa,EAAA,MAAA,CAAO,WAAc,GAAA,MAAA,CAAO,cAAc,MAAM,IAAA;AAAA,MAC7D,QAAA,EAAU,MAAO,CAAA,QAAA,IAAY;AAAC,KAC/B,CAAA;AAAA;AACH,EAEA,cAAyB,MAAwF,EAAA;AAC/G,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,MAAM,CAAE,CAAA,MAAA;AAAA,MAC5C,QAAU,EAAA,uBAAA,CAAwB,GAAI,CAAA,MAAM,CAAE,CAAA,MAAA;AAAA,MAC9C,OAAS,EAAA,qBAAA;AAAA,MACT,WAAa,EAAA,MAAA,CAAO,WAAc,GAAA,MAAA,CAAO,cAAc,MAAM,IAAA;AAAA,MAC7D,QAAA,EAAU,MAAO,CAAA,QAAA,IAAY;AAAC,KAC/B,CAAA;AAAA;AACH,EAEA,mBACE,MACM,EAAA;AACN,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,YAAY,CAAE,CAAA,MAAA;AAAA,MAClD,QAAU,EAAA,uBAAA,CAAwB,GAAI,CAAA,YAAY,CAAE,CAAA,MAAA;AAAA,MACpD,OAAS,EAAA,yBAAA;AAAA,MACT,WAAa,EAAA,MAAA,CAAO,WAAc,GAAA,MAAA,CAAO,cAAc,MAAM,IAAA;AAAA,MAC7D,QAAA,EAAU,MAAO,CAAA,QAAA,IAAY;AAAC,KAC/B,CAAA;AAAA;AACH,EAEA,gBAAA,CACE,QACA,MACM,EAAA;AACN,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAA;AAAA,MACA,QAAU,EAAA,MAAA;AAAA,MACV,OAAS,EAAA,yBAAA;AAAA,MACT,WAAa,EAAA,MAAA,CAAO,WAAc,GAAA,MAAA,CAAO,cAAc,MAAM,IAAA;AAAA,MAC7D,QAAA,EAAU,MAAO,CAAA,QAAA,IAAY;AAAC,KAC/B,CAAA;AAAA;AAEL;AAeO,MAAM,yBAAwF,CAAA;AAAA,EAQnG,YAAmB,GAA+B,EAAA;AAA/B,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAPnB,IAAO,IAAA,CAAA,IAAA,GAAA,EAAA;AAGP,IAAK,IAAA,CAAA,EAAA,GAAA,sBAAA;AACL,IAAO,IAAA,CAAA,IAAA,GAAA,QAAA;AACP,IAAA,IAAA,CAAA,MAAA,GAAS,MAAM,IAAA;AAyBf,IAAA,IAAA,CAAA,UAAA,GAAa,MAAM;AACjB,MAAA,OAAO,KAAK,GAAI,CAAA,KAAA;AAAA,KAClB;AAEA,IAAA,IAAA,CAAA,oBAAA,GAAuB,CAAC,MAA8B,KAAA;AACpD,MAAM,MAAA,MAAA,GAAS,KAAK,GAAI,CAAA,MAAA;AACxB,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,OAAO,OAAO,MAAM,CAAA;AAAA;AAGtB,MAAO,OAAA;AAAA,QACL,QAAA,EAAU,CAAC,IAAA,KAAiB,MAAO,CAAA,QAAA,CAAS,GAAG,IAAK,CAAA,IAAI,CAAI,CAAA,EAAA,IAAI,CAAE,CAAA,CAAA;AAAA,QAClE,QAAU,EAAA,CAAC,IAAc,EAAA,KAAA,KAAe,MAAO,CAAA,QAAA,CAAS,CAAG,EAAA,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,KAAK;AAAA,OACvF;AAAA,KACF;AApCE,IAAA,IAAA,CAAK,OAAO,GAAI,CAAA,IAAA;AAChB,IAAA,IAAA,CAAK,WAAW,GAAI,CAAA,QAAA;AACpB,IAAK,IAAA,CAAA,YAAA,GAAe,IAAK,CAAA,eAAA,CAAgB,GAAG,CAAA;AAAA;AAC9C,EAEQ,gBAAgB,GAAqC,EAAA;AAC3D,IAAI,IAAA,MAAA,GAAS,SAAS,GAAI,CAAA,YAAY,IAAIV,gBAAU,CAAA,GAAA,CAAI,YAAY,CAAA,GAAI,EAAC;AAEzE,IAAM,MAAA,OAAA,GAAU,IAAI,yBAAgC,EAAA;AACpD,IAAA,GAAA,CAAI,MAAM,OAAS,EAAA,EAAE,IAAM,EAAA,IAAI,CAAA;AAE/B,IAAW,KAAA,MAAA,IAAA,IAAQ,OAAQ,CAAA,QAAA,EAAY,EAAA;AACrC,MAAI,IAAA,IAAA,CAAK,gBAAgB,IAAM,EAAA;AAC7B,QAAAI,UAAA,CAAI,MAAQ,EAAA,IAAA,CAAK,IAAM,EAAA,IAAA,CAAK,YAAY,CAAA;AAAA;AAC1C;AAKF,IAAO,OAAA,MAAA;AAAA;AAkBX;AASO,MAAM,kCAA4C,wBAIvD,CAAA;AAAA,EACA,iBAAsB,IAA+B,EAAA;AACnD,IAAM,MAAA,CAAA,GAAI,IAAI,yBAAA,CAA+B,IAAI,CAAA;AACjD,IAAO,OAAA,IAAA,CAAK,gBAAgB,CAAC,CAAA;AAAA;AAC/B,EAEA,eAA0B,MAA2F,EAAA;AACnH,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,QAAQ,CAAE,CAAA;AAAA,KAC/C,CAAA;AAAA;AACH,EAEA,eAA0B,MAA2F,EAAA;AACnH,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,QAAQ,CAAE,CAAA;AAAA,KAC/C,CAAA;AAAA;AACH,EAEA,aAAwB,MAA2F,EAAA;AACjH,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,MAAM,CAAE,CAAA;AAAA,KAC7C,CAAA;AAAA;AACH,EAEA,eACE,MACA,EAAA;AACA,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,SAAS,CAAE,CAAA;AAAA,KAChD,CAAA;AAAA;AACH,EAEA,UACE,MACA,EAAA;AACA,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,QAAQ,CAAE,CAAA;AAAA,KAC/C,CAAA;AAAA;AACH,EAEA,eACE,MACA,EAAA;AACA,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,cAAc,CAAE,CAAA;AAAA,KACrD,CAAA;AAAA;AACH,EAEA,SACE,MACA,EAAA;AACA,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,OAAO,CAAE,CAAA;AAAA,KAC9C,CAAA;AAAA;AACH,EAEA,iBAA4B,MAAgE,EAAA;AAC1F,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,SAAS,CAAE,CAAA;AAAA,KAChD,CAAA;AAAA;AACH,EAEA,eAA0B,MAAqE,EAAA;AAC7F,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,OAAO,CAAE,CAAA,MAAA;AAAA,MAC7C,QAAA,EAAU,MAAO,CAAA,QAAA,IAAY;AAAC,KAC/B,CAAA;AAAA;AACH,EAEA,kBAA6B,MAAqE,EAAA;AAChG,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,UAAU,CAAE,CAAA,MAAA;AAAA,MAChD,QAAA,EAAU,MAAO,CAAA,QAAA,IAAY;AAAC,KAC/B,CAAA;AAAA;AACH,EAEA,cACE,MACM,EAAA;AACN,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,MAAM,CAAE,CAAA;AAAA,KAC7C,CAAA;AAAA;AACH,EAEA,mBACE,MACM,EAAA;AACN,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,YAAY,CAAE,CAAA;AAAA,KACnD,CAAA;AAAA;AACH,EAEA,mBACE,MACM,EAAA;AACN,IAAA,OAAO,KAAK,eAAgB,CAAA;AAAA,MAC1B,GAAG,MAAA;AAAA,MACH,IAAI,MAAO,CAAA,IAAA;AAAA,MACX,MAAQ,EAAA,uBAAA,CAAwB,GAAI,CAAA,eAAe,CAAE,CAAA;AAAA;AAAA,KACtD,CAAA;AAAA;AAEL;;AC/VO,SAAS,YAAa,CAAA,EAAE,MAAQ,EAAA,MAAA,EAAQ,eAAyD,EAAA;AACtG,EAAA,MAAM,KAAK,MAAO,CAAA,MAAA;AAClB,EAAA,MAAM,KAAK,MAAO,CAAA,MAAA;AAClB,EAAA,MAAM,SAAS,EAAG,CAAA,MAAA;AAClB,EAAI,IAAA,EAAA,CAAG,WAAW,MAAQ,EAAA;AACxB,IAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA;AAAA;AAG3C,EAAM,MAAA,WAAA,GAAc,kBAAkB,aAAc,CAAA,MAAA;AACpD,EAAM,MAAA,UAAA,GAAa,kBAAkB,aAAc,CAAA,MAAA;AAEnD,EAAA,MAAM,QAAiB,EAAC;AAExB,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,EAAQ,CAAK,EAAA,EAAA;AAC/B,IAAM,MAAA,CAAA,GAAI,GAAG,CAAC,CAAA;AACd,IAAI,IAAA,CAAA,GAAI,GAAG,CAAC,CAAA;AAEZ,IAAA,IAAI,MAAM,IAAM,EAAA;AACd,MAAA,IAAI,WAAa,EAAA;AACf,QAAA;AAAA;AAEF,MAAA,IAAI,UAAY,EAAA;AACd,QAAI,CAAA,GAAA,CAAA;AAAA;AACN;AAIF,IAAA,IAAI,MAAM,IAAM,EAAA;AACd,MAAA;AAAA;AAGF,IAAA,KAAA,CAAM,IAAK,CAAA,CAAC,CAAG,EAAA,CAAC,CAAC,CAAA;AAAA;AAEnB,EAAO,OAAA,KAAA;AACT;AAOgB,SAAA,oBAAA,CAAqB,YAAkC,KAAwC,EAAA;AAC7G,EAAI,IAAA,CAAC,KAAM,CAAA,IAAA,IAAQ,CAAC,KAAA,CAAM,MAAM,CAAC,UAAA,IAAc,UAAW,CAAA,MAAA,KAAW,CAAG,EAAA;AACtE,IAAA,OAAO,EAAC;AAAA;AAGV,EAAM,MAAA,IAAA,GAAO,KAAM,CAAA,IAAA,CAAK,OAAQ,EAAA;AAChC,EAAM,MAAA,EAAA,GAAK,KAAM,CAAA,EAAA,CAAG,OAAQ,EAAA;AAC5B,EAAA,MAAM,KAAQ,GAAA,UAAA,CAAW,CAAC,CAAA,CAAE,CAAC,CAAA;AAC7B,EAAO,OAAA;AAAA,IACL,CAAC,MAAM,KAAK,CAAA;AAAA,IACZ,CAAC,IAAI,KAAK;AAAA,GACZ;AACF;;AC5DY,IAAA,MAAA,qBAAAO,OAAL,KAAA;AACL,EAAAA,OAAA,CAAA,OAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAA;AACA,EAAAA,OAAA,CAAA,OAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAA;AACA,EAAAA,OAAA,CAAA,OAAA,CAAA,sBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,sBAAA;AAHU,EAAAA,OAAAA,OAAAA;AAAA,CAAA,EAAA,MAAA,IAAA,EAAA;;ACAL,SAAS,uBACd,QACG,EAAA;AACH,EAAO,OAAA,IAAI,MAAM,QAAU,EAAA;AAAA;AAAA,IAEzB,KAAA,CAAM,MAAQ,EAAA,IAAA,EAAM,aAAe,EAAA;AACjC,MAAA,IAAI,OAAO,OAAA,KAAY,WAAe,IAAA,CAAC,QAAQ,SAAW,EAAA;AACxD,QAAA,KAAA,CAAM,oBAAoB,CAAA;AAAA;AAG5B,MAAA,OAAO,OAAQ,CAAA,SAAA,CAAU,MAAQ,EAAA,aAAA,EAAe,KAAK,WAAW,CAAA;AAAA;AAClE,GACD,CAAA;AACH;;ACHO,SAAS,oBAAwB,CAAA,EAAE,YAAc,EAAA,MAAA,EAAyD,EAAA;AAC/G,EAAA,OAAOC,UAAM,CAAAC,UAAA,CAAM,GAAG,CAAA,CAAE,IAAK,CAAAC,eAAA,CAAM,YAAY,CAAA,EAAGC,mBAAU,CAAA,MAAM,CAAC,CAAA,EAAG,MAAM,CAAA;AAC9E;;ACdA,MAAM,sBAAyB,GAAA,gBAAA;AAElB,MAAA,oBAAA,GAAuB,CAAC,KAAA,KACnC,KAAS,IAAA,OAAO,KAAU,KAAA,QAAA,GAAW,KAAM,CAAA,OAAA,CAAQ,sBAAsB,CAAA,KAAM,CAAK,CAAA,GAAA;AAMzE,MAAA,wBAAA,GAA2B,CAAC,IAIvB,KAAA;AAChB,EAAM,MAAA,EAAE,KAAO,EAAA,YAAA,EAAiB,GAAA,IAAA;AAChC,EAAI,IAAA,CAAC,oBAAqB,CAAA,KAAK,CAAG,EAAA;AAChC,IAAA,OAAO,EAAC;AAAA;AAGV,EAAI,IAAA,EAAE,SAAY,GAAA,IAAA;AAElB,EAAU,OAAA,GAAA,OAAA,IAAW,EAAE,YAAA,EAAc,EAAG,EAAA;AACxC,EAAM,MAAA,KAAA,GAAQ,OAAQ,CAAA,YAAA,GAAe,CAAG,EAAA,OAAA,CAAQ,YAAY,CAAG,EAAA,YAAY,CAAK,CAAA,GAAA,CAAA,EAAG,YAAY,CAAA,CAAA;AAE/F,EAAO,OAAA;AAAA,IACL,cAAgB,EAAA;AAAA,MACd,KAAA;AAAA,MACA,IAAM,EAAA;AAAA;AACR,GACF;AACF;;AC9BgB,SAAA,aAAA,CAAc,WAAmB,UAAwB,EAAA;AACvE,EAAI,IAAA,UAAA,CAAW,OAAO,SAAW,EAAA;AAC/B,IAAO,OAAA,IAAA;AAAA;AAGT,EAAI,IAAA,YAAA,CAAa,SAAS,CAAG,EAAA;AAC3B,IAAO,OAAA,YAAA,CAAa,WAAW,EAAE,CAAA;AAAA;AAGnC,EAAA,IAAI,WAAW,QAAU,EAAA;AACvB,IAAO,OAAA,UAAA,CAAW,QAAS,CAAA,QAAA,CAAS,SAAS,CAAA;AAAA;AAG/C,EAAO,OAAA,KAAA;AACT;AAEA,SAAS,aAAa,QAA2B,EAAA;AAC/C,EAAA,IAAI,aAAa,YAAc,EAAA;AAC7B,IAAO,OAAA,IAAA;AAAA;AAET,EAAM,MAAA,KAAA,GAAQ,IAAI,MAAA,CAAO,0CAA0C,CAAA;AACnE,EAAO,OAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AAC5B;;ACNO,SAAS,iBAAiB,EAA+C,EAAA;AAC9E,EAAA,MAAM,MAAqB,EAAE,GAAA,EAAK,GAAG,GAAK,EAAA,IAAA,EAAM,GAAG,IAAK,EAAA;AACxD,EAAA,IAAI,GAAG,UAAY,EAAA;AACjB,IAAA,GAAA,CAAI,aAAa,EAAG,CAAA,UAAA;AAAA;AAEtB,EAAO,OAAA,GAAA;AACT;AAOO,SAAS,gBAAgB,GAAsE,EAAA;AACpG,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAY,IAAA,QAAO,2BAAK,GAAQ,CAAA,KAAA,QAAA;AACxD;AAOO,SAAS,iBAAiB,GAAwD,EAAA;AACvF,EAAI,IAAA,eAAA,CAAgB,GAAG,CAAG,EAAA;AACxB,IAAA,OAAO,GAAI,CAAA,GAAA;AAAA;AAEb,EAAI,IAAA1D,eAAA,CAAS,GAAG,CAAG,EAAA;AACjB,IAAO,OAAA,GAAA;AAAA;AAET,EAAO,OAAA,KAAA,CAAA;AACT;AAEO,MAAM,wBACX,GAAA,CAAC,KAA2C,EAAA,GAAA,KAC5C,CAAC,KAAsE,KAAA;AACrE,EAAA,4BAAA,CAA6B,KAAO,EAAA,GAAA,EAAK,KAAM,CAAA,aAAA,CAAc,KAAK,CAAA;AACpE;AAEK,MAAM,gCACX,GAAA,CAAqD,KAAiD,EAAA,GAAA,KACtG,CAAC,KAAsE,KAAA;AACrE,EAAA,oCAAA,CAAqC,KAAO,EAAA,GAAA,EAAK,KAAM,CAAA,aAAA,CAAc,KAAK,CAAA;AAC5E;AAEK,MAAM,sCACX,GAAA,CACE,KACA,EAAA,GAAA,KAEF,CAAC,KAA4F,KAAA;AAC3F,EAAA,0CAAA,CAA2C,KAAO,EAAA,GAAA,EAAK,KAAM,CAAA,aAAA,CAAc,KAAK,CAAA;AAClF;AAEK,MAAM,sCACX,GAAA,CAAqD,KAAiD,EAAA,GAAA,KACtG,CAAC,QAA8B,KAAA;AAC7B,EAAqC,oCAAA,CAAA,KAAA,EAAO,GAAK,EAAA,QAAA,CAAS,KAAK,CAAA;AACjE;AAEK,MAAM,uCACX,GAAA,CAAqD,KAAiD,EAAA,GAAA,KACtG,CAAC,KAAkD,KAAA;AACjD,EAAA,oCAAA,CAAqC,KAAO,EAAA,GAAA,EAAK,KAAM,CAAA,aAAA,CAAc,OAAO,CAAA;AAC9E;AAEK,MAAM,4CACX,GAAA,CACE,KACA,EAAA,GAAA,KAEF,CAAC,QAA8B,KAAA;AAC7B,EAA2C,0CAAA,CAAA,KAAA,EAAO,GAAK,EAAA,QAAA,CAAS,KAAK,CAAA;AACvE;AAEK,MAAM,6BACX,GAAA,CAAC,KAA2C,EAAA,GAAA,KAC5C,CAAC,KAA2D,KAAA;AAC1D,EAAA,iCAAA,CAAkC,OAAO,GAAG,CAAA;AAC9C;AAEc,SAAA,4BAAA,CACd,KACA,EAAA,GAAA,EACA,GACA,EAAA;AACA,EAAA,MAAM,SAAS,KAAM,CAAA,OAAA;AAErB,EAAA,KAAA,CAAM,eAAgB,CAAA;AAAA,IACpB,GAAG,MAAA;AAAA,IACH,CAAC,GAAG,GAAG;AAAA,GACR,CAAA;AACH;AAEO,MAAM,oCAAuC,GAAA,CAClD,KACA,EAAA,GAAA,EACA,GACG,KAAA;AACH,EAAA,MAAM,SAAS,KAAM,CAAA,OAAA;AAErB,EAAA,KAAA,CAAM,eAAgB,CAAA;AAAA,IACpB,GAAG,MAAA;AAAA,IACH,QAAU,EAAA;AAAA,MACR,GAAG,MAAO,CAAA,QAAA;AAAA,MACV,CAAC,GAAG,GAAG;AAAA;AACT,GACD,CAAA;AACH;AAEO,MAAM,0CAA6C,GAAA,CACxD,KACA,EAAA,GAAA,EACA,GACG,KAAA;AACH,EAAA,MAAM,SAAS,KAAM,CAAA,OAAA;AAErB,EAAA,KAAA,CAAM,eAAgB,CAAA;AAAA,IACpB,GAAG,MAAA;AAAA,IACH,cAAgB,EAAA;AAAA,MACd,GAAI,MAAA,CAAO,cAAiB,GAAA,MAAA,CAAO,iBAAkB,EAAC;AAAA,MACtD,CAAC,GAAG,GAAG;AAAA;AACT,GACD,CAAA;AACH;AAEa,MAAA,iCAAA,GAAoC,CAC/C,KAAA,EACA,GACG,KAAA;AACH,EAAA,MAAM,SAAS,KAAM,CAAA,OAAA;AACrB,EAAA,KAAA,CAAM,eAAgB,CAAA;AAAA,IACpB,GAAG,MAAA;AAAA,IACH,cAAgB,EAAA;AAAA,MACd,GAAI,MAAA,CAAO,cAAiB,GAAA,MAAA,CAAO,iBAAkB,EAAC;AAAA,MACtD,CAAC,GAAG,GAAG;AAAA,KACT;AAAA,IACA,gBAAkB,EAAA;AAAA,MAChB,GAAG,MAAO,CAAA,gBAAA;AAAA,MACV,CAAC,GAAG,GAAG;AAAA;AACT,GACD,CAAA;AACH;;AC5JA,MAAM,UAA4B,EAAC;AAE5B,MAAM,kBAAqB,GAAA,CAAC,IAAc,EAAA,OAAA,EAAiB,OAAqB,KAAA;AACrF,EAAA,IAAI,OAAU,GAAA,CAAA,sBAAA,EAAyB,IAAI,CAAA,EAAA,EAAK,OAAO,CAAA,cAAA,CAAA;AACvD,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,OAAA,IAAW,SAAS,OAAO,CAAA,QAAA,CAAA;AAAA;AAE7B,EAAM,MAAA,GAAA,GAAM,KAAK,GAAI,EAAA;AACrB,EAAM,MAAA,IAAA,GAAO,QAAQ,OAAO,CAAA;AAC5B,EAAA,IAAI,CAAC,IAAA,IAAQ,GAAM,GAAA,IAAA,GAAO,GAAO,EAAA;AAC/B,IAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AACpB,IAAA,OAAA,CAAQ,OAAO,CAAI,GAAA,GAAA;AAAA;AAEvB;;ACLY,IAAA,cAAA,qBAAA2D,eAAL,KAAA;AACL,EAAAA,eAAA,CAAA,eAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;AACA,EAAAA,eAAA,CAAA,eAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;AACA,EAAAA,eAAA,CAAA,eAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;AAHU,EAAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;AAiCI,SAAA,OAAA,CAAQ,KAAa,OAAmC,EAAA;AACtE,EAAA,OAAO,IAAI,SAAA,CAAU,OAAO,CAAA,CAAE,QAAQ,GAAG,CAAA;AAC3C;AAQO,MAAM,SAAU,CAAA;AAAA,EAQrB,YAAY,OAAsB,EAAA;AAalC;AAAA,IAAQ,IAAA,CAAA,KAAA,GAAQ,CAAC,OAAA,EAAgC,MAAyB,KAAA;AACxE,MAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,OAAQ,CAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AAC5C,QAAM,MAAA,IAAA,GAAO,OAAQ,CAAA,IAAA,CAAK,CAAC,CAAA;AAC3B,QAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,UAAA;AAAA;AAEF,QAAM,MAAA,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpB,QAAA,IAAI,KAAO,EAAA;AAET,UAAI,IAAA,KAAA,CAAM,UAAW,CAAA,GAAG,CAAG,EAAA;AAGzB,YAAA,MAAM,GAAM,GAAA,KAAA,CAAM,OAAQ,CAAA,GAAA,EAAK,CAAC,CAAA;AAChC,YAAA,IAAI,MAAM,CAAG,EAAA;AACX,cAAA,MAAM,CAAI,GAAA,KAAA,CAAM,KAAM,CAAA,CAAA,EAAG,GAAG,CAAA;AAC5B,cAAA,MAAM,SAAS,MAAW,KAAA,CAAA;AAG1B,cAAA,MAAM,UAA0B,GAAA;AAAA,gBAC9B,IAAM,EAAA;AAAA,eACR;AAGA,cAAA,IAAI,MAAU,IAAA,UAAA,CAAW,cAAe,CAAA,CAAC,CAAG,EAAA;AAE1C,gBAAI,IAAA,IAAA,CAAK,UAAU,CAAwB,oBAAA;AACzC,kBAAA,IAAA,CAAK,UAAU,IAAI,gBAAA,CAAiB,EAAE,MAAQ,EAAA,IAAI,CAAA;AAClD,kBAAK,IAAA,CAAA,IAAA,CAAK,IAAK,CAAA,IAAA,CAAK,OAAO,CAAA;AAAA;AAG7B,gBAAA,MAAM,CAAI,GAAA,KAAA,CAAM,KAAM,CAAA,GAAA,GAAM,CAAC,CAAA;AAC7B,gBAAA,IAAI,MAAQ,EAAA;AACV,kBAAK,IAAA,CAAA,OAAA,CAAQ,WAAY,CAAA,KAAA,CAAA,EAAW,CAAC,CAAA;AACrC,kBAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,oBAAA,IAAA,CAAK,OAAQ,CAAA,WAAA,CAAY,KAAW,CAAA,EAAA,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA;AAC7C,iBACK,MAAA;AACL,kBAAM,MAAA,EAAE,MAAO,EAAA,GAAI,IAAK,CAAA,OAAA;AACxB,kBAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AACtC,oBAAA,IAAI,CAAC,MAAA,CAAO,CAAC,CAAA,CAAE,MAAQ,EAAA;AACrB,sBAAO,MAAA,CAAA,CAAC,CAAE,CAAA,MAAA,GAAS,EAAC;AAAA;AAEtB,oBAAM,MAAA,IAAA,GAAO,MAAO,CAAA,CAAC,CAAE,CAAA,MAAA;AACvB,oBAAA,IAAA,CAAK,CAAC,CAAI,GAAA,CAAA,KAAM,CAAI,GAAA,CAAA,GAAI,KAAK,CAAC,CAAA;AAAA;AAChC;AAGF,gBAAA,IAAA,CAAK,KAAQ,GAAA,CAAA;AACb,gBAAA;AAAA;AACF,aACF,MAAA,IAAW,IAAK,CAAA,KAAA,KAAU,CAAqB,iBAAA;AAC7C,cAAA,IAAA,CAAK,KAAQ,GAAA,CAAA;AACb,cAAA;AAAA;AAGF,YAAA;AAAA;AAGF,UAAI,IAAA,IAAA,CAAK,UAAU,CAAqB,iBAAA;AACtC,YAAM,MAAA,IAAA,GAAO,wBAAwB,KAAK,CAAA;AAC1C,YAAI,IAAA,IAAA,KAAS,UAAU,MAAQ,EAAA;AAC7B,cAAA,KAAA,MAAW,KAAK,IAAM,EAAA;AACpB,gBAAK,IAAA,CAAA,OAAA,CAAQ,WAAY,CAAA,KAAA,CAAA,EAAW,CAAC,CAAA;AAAA;AAEvC,cAAA,IAAA,CAAK,KAAQ,GAAA,CAAA;AACb,cAAA;AAAA;AAEF,YAAA,IAAA,CAAK,KAAQ,GAAA,CAAA;AAAA;AACf;AAIF,QAAI,IAAA,IAAA,CAAK,UAAU,CAAwB,oBAAA;AAI3C,QAAA,IAAA,CAAK,KAAQ,GAAA,CAAA;AAGb,QAAA,IAAI,IAAK,CAAA,MAAA,GAAS,IAAK,CAAA,OAAA,CAAQ,OAAO,MAAQ,EAAA;AAC5C,UAAM,MAAA,EAAE,MAAO,EAAA,GAAI,IAAK,CAAA,OAAA;AACxB,UAAA,KAAA,IAAS,IAAI,MAAO,CAAA,MAAA,EAAQ,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AAChD,YAAA,IAAA,CAAK,OAAQ,CAAA,WAAA,CAAY,IAAK,CAAA,CAAC,CAAC,CAAA;AAAA;AAElC,UAAA,IAAI,KAAK,QAAU,EAAA;AACjB,YAAA,IAAA,CAAK,QAAS,CAAA,QAAA,CAAS,IAAK,CAAA,OAAA,CAAQ,MAAM,CAAA;AAAA;AAC5C;AAGF,QAAK,IAAA,CAAA,OAAA,CAAQ,UAAU,IAAI,CAAA;AAC3B,QAAA,IAAI,KAAK,QAAU,EAAA;AAKjB,UAAK,IAAA,CAAA,QAAA,CAAS,MAAM,IAAI,CAAA;AAAA;AAC1B;AACF,KACF;AA9GE,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAA,OAAA,GAAU,EAAC;AAAA;AAEb,IAAK,IAAA,CAAA,MAAA,GAAS,OAAQ,CAAA,MAAA,IAAU,EAAC;AACjC,IAAA,IAAA,CAAK,WAAW,OAAQ,CAAA,QAAA;AAExB,IAAA,IAAA,CAAK,UAAU,IAAI,gBAAA,CAAiB,EAAE,MAAQ,EAAA,IAAI,CAAA;AAClD,IAAA,IAAA,CAAK,KAAQ,GAAA,CAAA;AACb,IAAA,IAAA,CAAK,OAAO,EAAC;AAAA;AACf,EAuGA,QAAQ,IAAkC,EAAA;AACxC,IAAA,IAAA,CAAK,UAAU,IAAI,gBAAA,CAAiB,EAAE,MAAQ,EAAA,IAAI,CAAA;AAClD,IAAK,IAAA,CAAA,IAAA,GAAO,CAAC,IAAA,CAAK,OAAO,CAAA;AAEzB,IAAA,MAAM,OAAU,GAAA;AAAA,MACd,GAAG,IAAK,CAAA,MAAA;AAAA,MACR,aAAe,EAAA,KAAA;AAAA,MACf,cAAgB,EAAA,IAAA;AAAA,MAChB,QAAU,EAAA,KAAA;AAAA;AAAA,MACV,OAAO,IAAK,CAAA;AAAA,KACd;AAEA,IAAKC,qBAAA,CAAA,KAAA,CAAM,MAAM,OAAO,CAAA;AAExB,IAAA,OAAO,IAAK,CAAA,IAAA;AAAA;AAEhB;AAIA,SAAS,UAAA,CAAW,OAAgB,MAA2B,EAAA;AAC7D,EAAI,IAAA,KAAA,KAAU,IAAQ,IAAA,KAAA,KAAU,KAAW,CAAA,EAAA;AACzC,IAAO,OAAA,EAAA;AAAA;AAET,EAAM,MAAA,GAAA,GAAM,MAAM,QAAS,EAAA;AAC3B,EAAI,IAAA,GAAA,CAAI,QAAS,CAAA,GAAG,CAAG,EAAA;AAErB,IAAA,OAAO,OAAO,SAAY,GAAA,GAAA,CAAI,QAAQ,KAAO,EAAA,IAAI,IAAI,MAAO,CAAA,SAAA;AAAA;AAE9D,EAAI,IAAA,GAAA,CAAI,QAAS,CAAA,IAAI,CAAM,IAAA,MAAA,CAAO,aAAa,GAAI,CAAA,QAAA,CAAS,MAAO,CAAA,SAAS,CAAI,EAAA;AAC9E,IAAO,OAAA,MAAA,CAAO,SAAY,GAAA,GAAA,GAAM,MAAO,CAAA,SAAA;AAAA;AAEzC,EAAO,OAAA,GAAA;AACT;AAEA,SAAS,eAAA,CAAgB,OAAc,MAAgC,EAAA;AACrE,EAAA,IAAI,MAAM,OAAS,EAAA;AACjB,IAAA,OAAO,CAAC,KAAmB,KAAA;AACzB,MAAM,MAAA,YAAA,GAAe,KAAM,CAAA,OAAA,CAAS,KAAK,CAAA;AACzC,MAAA,OAAO,UAAW,CAAA,sBAAA,CAAuB,YAAY,CAAA,EAAG,MAAM,CAAA;AAAA,KAChE;AAAA;AAGF,EAAA,OAAO,CAAC,KAAA,KAAmB,UAAW,CAAA,KAAA,EAAO,MAAM,CAAA;AACrD;AAEA,SAAS,aAAA,CAAc,GAAa,EAAA,MAAA,EAAiB,MAA2B,EAAA;AAC9E,EAAA,MAAM,SAAS,MAAW,KAAA,GAAA;AAC1B,EAAA,MAAM,SAAS,MAAW,KAAA,GAAA;AAE1B,EAAA,KAAA,MAAW,KAAK,MAAQ,EAAA;AACtB,IAAA,MAAM,UAAU,CAAE,CAAA,MAAA;AAClB,IAAA,IAAI,UAAU,MAAW,IAAA,OAAA,IAAW,OAAQ,CAAA,cAAA,CAAe,GAAG,CAAI,EAAA;AAChE,MAAI,IAAA,IAAA,GAAO,MAAM,GAAM,GAAA,GAAA;AACvB,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AACtC,QAAA,IAAI,IAAI,CAAG,EAAA;AACT,UAAA,IAAA,GAAO,OAAO,MAAO,CAAA,SAAA;AAAA;AAGvB,QAAI,IAAA,CAAA,GAAI,MAAO,CAAA,CAAC,CAAE,CAAA,IAAA;AAClB,QAAA,IAAI,MAAQ,EAAA;AACV,UAAI,CAAA,GAAA,MAAA,CAAO,CAAC,CAAE,CAAA,IAAA;AAAA,mBACL,MAAQ,EAAA,CAEZ,MAAA;AACL,UAAA,CAAA,GAAK,MAAO,CAAA,CAAC,CAAE,CAAA,MAAA,CAAe,GAAG,CAAA;AAAA;AAEnC,QAAA,IAAI,CAAG,EAAA;AACL,UAAO,IAAA,GAAA,IAAA,GAAO,UAAW,CAAA,CAAA,EAAG,MAAM,CAAA;AAAA;AACpC;AAEF,MAAA,OAAO,OAAO,MAAO,CAAA,OAAA;AAAA;AACvB;AAEF,EAAO,OAAA,EAAA;AACT;AAEA,SAAS,kBAA6B,GAAA;AACpC,EAAM,MAAA,GAAA,GAAM,CAAC,GAAA,EAAK,GAAG,CAAA;AACrB,EAAA,IAAI,IAAI,cAAgB,EAAA;AACtB,IAAA,OAAO,GAAI,CAAA,cAAA,EAAiB,CAAA,MAAA,CAAO,CAAC,CAAA;AAAA;AAEtC,EAAO,OAAA,GAAA;AACT;AAEgB,SAAA,KAAA,CAAM,MAAmB,MAA4B,EAAA;AACnE,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAO,OAAA,EAAA;AAAA;AAGT,EAAA,MAAA,GAASC,gBAAS,MAAQ,EAAA;AAAA,IACxB,WAAW,kBAAmB,EAAA;AAAA,IAC9B,OAAS,EAAA,MAAA;AAAA,IACT,SAAW,EAAA,GAAA;AAAA,IACX,QAAU,EAAA,EAAA;AAAA,IACV,WAAa,EAAA,CAAA;AAAA,IACb,cAAgB,EAAA;AAAA,GACjB,CAAA;AACD,EAAI,IAAA,GAAA,GAAM,OAAO,cAAiB,GAAA,CAAA,IAAA,EAAO,OAAO,SAAS,CAAA,EAAG,MAAO,CAAA,OAAO,CAAK,CAAA,GAAA,EAAA;AAE/E,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,IAAM,MAAA,MAAA,GAAS,KAAK,CAAC,CAAA;AACrB,IAAM,MAAA,EAAE,QAAW,GAAA,MAAA;AAGnB,IAAI,IAAA,MAAA,CAAO,WAAW,CAAG,EAAA;AACvB,MAAA;AAAA;AAGF,IAAI,IAAA,MAAA,CAAO,gBAAgB,CAAqB,aAAA;AAC9C,MAAA,GAAA,GACE,MACA,aAAc,CAAA,MAAA,EAAQ,QAAQ,MAAM,CAAA,GACpC,cAAc,MAAQ,EAAA,MAAA,EAAQ,MAAM,CACpC,GAAA,aAAA,CAAc,QAAQ,MAAQ,EAAA,MAAM,IACpC,aAAc,CAAA,YAAA,EAAc,QAAQ,MAAM,CAAA;AAAA,KAC9C,MAAA,IAAW,MAAO,CAAA,WAAA,KAAgB,CAAqB,aAAA;AACrD,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AACtC,QAAA,IAAI,IAAI,CAAG,EAAA;AACT,UAAA,GAAA,IAAO,MAAO,CAAA,SAAA;AAAA;AAEhB,QAAO,GAAA,IAAA,CAAA,CAAA,EAAI,mBAAoB,CAAA,MAAA,CAAO,CAAC,CAAA,EAAG,MAAM,CAAE,CAAA,OAAA,CAAQ,IAAM,EAAA,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA;AAEvE,MAAA,GAAA,IAAO,MAAO,CAAA,OAAA;AAAA;AAGhB,IAAA,MAAM,MAAS,GAAA,MAAA,CAAO,CAAC,CAAA,CAAE,MAAO,CAAA,MAAA;AAEhC,IAAA,IAAI,SAAS,CAAG,EAAA;AACd,MAAM,MAAA,OAAA,GAAU,OAAO,GAAI,CAAA,CAAC,UAAU,eAAgB,CAAA,KAAA,EAAO,MAAO,CAAC,CAAA;AACrE,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,EAAQ,CAAK,EAAA,EAAA;AAC/B,QAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AACtC,UAAA,IAAI,IAAI,CAAG,EAAA;AACT,YAAA,GAAA,GAAM,MAAM,MAAO,CAAA,SAAA;AAAA;AAGrB,UAAA,IAAI,CAAI,GAAA,MAAA,CAAO,CAAC,CAAA,CAAE,OAAO,CAAC,CAAA;AAE1B,UAAA,IAAI,MAAO,CAAA,CAAC,CAAE,CAAA,IAAA,KAAS,SAAU,CAAA,KAAA,IAAS,MAAO,CAAA,CAAC,CAAE,CAAA,MAAA,CAAO,CAAC,CAAA,CAAE,KAAO,EAAA;AACnE,YAAA,CAAA,GAAI,MAAO,CAAA,CAAC,CAAE,CAAA,MAAA,CAAO,CAAC,CAAE,CAAA,KAAA;AAAA;AAE1B,UAAA,IAAI,MAAM,IAAM,EAAA;AACd,YAAA,GAAA,GAAM,GAAM,GAAA,OAAA,CAAQ,CAAC,CAAA,CAAE,CAAC,CAAA;AAAA;AAC1B;AAGF,QAAI,IAAA,CAAA,KAAM,SAAS,CAAG,EAAA;AACpB,UAAA,GAAA,GAAM,MAAM,MAAO,CAAA,OAAA;AAAA;AACrB;AACF;AAGF,IAAI,IAAA,CAAA,KAAM,IAAK,CAAA,MAAA,GAAS,CAAG,EAAA;AACzB,MAAA,GAAA,GAAM,MAAM,MAAO,CAAA,OAAA;AAAA;AACrB;AAGF,EAAO,OAAA,GAAA;AACT;;ACtUgB,SAAA,aAAA,CAAc,GAAa,EAAA,GAAA,GAAM,CAAG,EAAA;AAClD,EAAI,IAAA,MAAA,CAAO,SAAU,CAAA,GAAG,CAAG,EAAA;AACzB,IAAO,OAAA,GAAA;AAAA;AAGT,EAAA,IAAI,IAAI,EAAM,IAAA,GAAA;AACd,EAAA,IAAI,CAAI,GAAA,GAAA,GAAM,CAAK,IAAA,CAAA,GAAI,MAAO,CAAA,OAAA,CAAA;AAC9B,EAAO,OAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAAI,GAAA,CAAA;AACzB;AAWO,SAAS,cAAc,GAAa,EAAA;AACzC,EAAA,OAAA,CAAA,CAAS,KAAK,GAAK,EAAA,KAAA,CAAM,GAAG,CAAE,CAAA,CAAC,KAAK,EAAI,EAAA,MAAA;AAC1C;;AC5Ba,MAAA,kBAAA,GAAqB,CAAC,GAAoC,KAAA;AACrE,EAAA,OAAO,OAAO,IAAK,CAAA,GAAG,EAAE,MAAO,CAAA,CAAC,KAAiC,GAAQ,KAAA;AACvE,IAAI,IAAA,GAAA,CAAI,GAAG,CAAA,KAAM,KAAW,CAAA,EAAA;AAC1B,MAAI,GAAA,CAAA,GAAG,CAAI,GAAA,GAAA,CAAI,GAAG,CAAA;AAAA;AAEpB,IAAO,OAAA,GAAA;AAAA,GACT,EAAG,EAAE,CAAA;AACP;AAEa,MAAA,aAAA,GAAgB,CAAC,KAAmD,KAAA;AAC/E,EAAO,OAAA,OAAO,UAAU,QAAY,IAAA,KAAA,KAAU,QAAQ,MAAO,CAAA,IAAA,CAAK,KAAK,CAAA,CAAE,MAAW,KAAA,CAAA;AACtF;;ACXO,MAAM,aAAgB,GAAA;AAAA,EAC3B,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF;;ACnDa,MAAA,iBAAA,GAAoB,CAAC,SAA6B,KAAA;AAC7D,EAAI,IAAA,YAAA;AAEJ,EAAA,IAAI,iBAAiB,MAAO,CAAA,SAAA;AAE5B,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,SAAU,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAChD,IAAM,MAAA,WAAA,GAAc,SAAU,CAAA,MAAA,CAAO,CAAC,CAAA;AAEtC,IAAA,IAAI,iBAAiB,KAAW,CAAA,EAAA;AAC9B,MAAA,MAAM,WAAW,WAAc,GAAA,YAAA;AAE/B,MAA+B;AAC7B,QAAiB,cAAA,GAAA,QAAA;AAAA;AAGnB,MAAA,IAAI,WAAW,cAAgB,EAAA;AAC7B,QAAiB,cAAA,GAAA,QAAA;AAAA;AACnB;AAEF,IAAe,YAAA,GAAA,WAAA;AAAA;AAEjB,EAAO,OAAA,cAAA;AACT;AAMa,MAAA,eAAA,GAAkB,CAAC,SAAqB,KAAA;AACnD,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,SAAU,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAChD,IAAM,MAAA,KAAA,GAAQ,SAAU,CAAA,MAAA,CAAO,CAAC,CAAA;AAChC,IAAI,IAAA,KAAA,KAAU,IAAQ,IAAA,KAAA,KAAU,KAAW,CAAA,EAAA;AACzC,MAAM,MAAA,SAAA,GAAY,MAAM,QAAS,EAAA;AACjC,MAAA,IAAI,SAAU,CAAA,MAAA,KAAW,EAAM,IAAA,SAAA,GAAY,QAAS,CAAG,EAAA;AACrD,QAAO,OAAA,IAAA;AAAA;AACT;AACF;AAEF,EAAO,OAAA,KAAA;AACT;;AC3CY,IAAA,iBAAA,qBAAAC,kBAAL,KAAA;AACL,EAAAA,mBAAA,KAAM,CAAA,GAAA,GAAA;AACN,EAAAA,mBAAA,UAAW,CAAA,GAAA,GAAA;AACX,EAAAA,mBAAA,QAAS,CAAA,GAAA,GAAA;AACT,EAAAA,mBAAA,UAAW,CAAA,GAAA,GAAA;AAJD,EAAAA,OAAAA,kBAAAA;AAAA,CAAA,EAAA,iBAAA,IAAA,EAAA;AAcC,MAAA,eAAA,GAAkB,IAAI,QAAA,CAA6B,MAAM;AACpE,EAAO,OAAA;AAAA,IACL;AAAA,MACE,EAAI,EAAA,GAAA;AAAA,MACJ,IAAM,EAAA,KAAA;AAAA,MACN,SAAW,EAAA,CAAC,CAAW,EAAA,CAAA,KAAc,CAAI,GAAA,CAAA;AAAA,MACzC,iBAAmB,EAAA,GAAA;AAAA,KACrB;AAAA,IACA;AAAA,MACE,EAAI,EAAA,GAAA;AAAA,MACJ,IAAM,EAAA,UAAA;AAAA,MACN,SAAW,EAAA,CAAC,CAAW,EAAA,CAAA,KAAc,CAAI,GAAA,CAAA;AAAA,MACzC,iBAAmB,EAAA,GAAA;AAAA,KACrB;AAAA,IACA;AAAA,MACE,EAAI,EAAA,GAAA;AAAA,MACJ,IAAM,EAAA,UAAA;AAAA,MACN,SAAW,EAAA,CAAC,CAAW,EAAA,CAAA,KAAc,CAAI,GAAA,CAAA;AAAA,MACzC,iBAAmB,EAAA,GAAA;AAAA,KACrB;AAAA,IACA;AAAA,MACE,EAAI,EAAA,GAAA;AAAA,MACJ,IAAM,EAAA,QAAA;AAAA,MACN,SAAW,EAAA,CAAC,CAAW,EAAA,CAAA,KAAc,CAAI,GAAA,CAAA;AAAA,MACzC,iBAAmB,EAAA,GAAA;AAAA;AACrB,GACF;AACF,CAAC;;ACzCW,IAAA,gBAAA,qBAAAC,iBAAL,KAAA;AACL,EAAAA,kBAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,kBAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,kBAAA,IAAK,CAAA,GAAA,IAAA;AACL,EAAAA,kBAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,kBAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,kBAAA,MAAO,CAAA,GAAA,MAAA;AANG,EAAAA,OAAAA,iBAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA;AAgBC,MAAA,cAAA,GAAiB,IAAI,QAAA,CAA4B,MAAM;AAClE,EAAO,OAAA;AAAA,IACL;AAAA,MACE,EAAI,EAAA,KAAA;AAAA,MACJ,IAAM,EAAA,gBAAA;AAAA,MACN,SAAW,EAAA,CAAC,KAAkB,KAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,MAC5C,gBAAkB,EAAA,KAAA;AAAA,KACpB;AAAA,IACA;AAAA,MACE,EAAI,EAAA,KAAA;AAAA,MACJ,IAAM,EAAA,kBAAA;AAAA,MACN,SAAW,EAAA,CAAC,KAAkB,KAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,MAC5C,gBAAkB,EAAA,KAAA;AAAA,KACpB;AAAA,IACA;AAAA,MACE,EAAI,EAAA,IAAA;AAAA,MACJ,IAAM,EAAA,mBAAA;AAAA,MACN,SAAW,EAAA,CAAC,KAAkB,KAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,MAC5C,gBAAkB,EAAA,IAAA;AAAA,KACpB;AAAA,IACA;AAAA,MACE,EAAI,EAAA,OAAA;AAAA,MACJ,IAAM,EAAA,OAAA;AAAA,MACN,SAAW,EAAA,CAAC,KAAkB,KAAA,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,MAC9C,gBAAkB,EAAA,OAAA;AAAA,KACpB;AAAA,IACA;AAAA,MACE,EAAI,EAAA,OAAA;AAAA,MACJ,IAAM,EAAA,OAAA;AAAA,MACN,SAAW,EAAA,CAAC,KAAkB,KAAA,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,MAC9C,gBAAkB,EAAA,OAAA;AAAA,KACpB;AAAA,IACA;AAAA,MACE,EAAI,EAAA,MAAA;AAAA,MACJ,IAAM,EAAA,SAAA;AAAA,MACN,SAAW,EAAA,CAAC,KAAkB,KAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,MAC7C,gBAAkB,EAAA,MAAA;AAAA;AACpB,GACF;AACF,CAAC;;ACzDW,IAAA,4BAAA,qBAAAC,6BAAL,KAAA;AAEL,EAAAA,8BAAA,IAAK,CAAA,GAAA,IAAA;AAEL,EAAAA,8BAAA,OAAQ,CAAA,GAAA,OAAA;AAER,EAAAA,8BAAA,UAAW,CAAA,GAAA,UAAA;AAEX,EAAAA,8BAAA,UAAW,CAAA,GAAA,UAAA;AAEX,EAAAA,8BAAA,eAAgB,CAAA,GAAA,eAAA;AAEhB,EAAAA,8BAAA,KAAM,CAAA,GAAA,OAAA;AAGN,EAAAA,8BAAA,MAAO,CAAA,GAAA,MAAA;AAGP,EAAAA,8BAAA,OAAQ,CAAA,GAAA,OAAA;AAGR,EAAAA,8BAAA,QAAS,CAAA,GAAA,QAAA;AAET,EAAAA,8BAAA,QAAS,CAAA,GAAA,QAAA;AAGT,EAAAA,8BAAA,QAAS,CAAA,GAAA,UAAA;AAGT,EAAAA,8BAAA,YAAa,CAAA,GAAA,YAAA;AAGb,EAAAA,8BAAA,WAAY,CAAA,GAAA,WAAA;AAIZ,EAAAA,8BAAA,aAAc,CAAA,GAAA,aAAA;AAGd,EAAAA,8BAAA,iBAAkB,CAAA,GAAA,iBAAA;AAGlB,EAAAA,8BAAA,QAAS,CAAA,GAAA,QAAA;AAGT,EAAAA,8BAAA,QAAS,CAAA,GAAA,QAAA;AAGT,EAAAA,8BAAA,gBAAiB,CAAA,GAAA,gBAAA;AAhDP,EAAAA,OAAAA,6BAAAA;AAAA,CAAA,EAAA,4BAAA,IAAA,EAAA;;ACEL,MAAM,WAAW,CAAC,KAAA,MAA4C,EAAE,KAAA,EAAO,OAAO,KAAM,EAAA;;ACC3E,SAAA,iBAAA,CAAqB,GAAU,EAAA,IAAA,EAAc,EAAY,EAAA;AACvE,EAAM,MAAA,KAAA,GAAQ,CAAC,GAAG,GAAG,CAAA;AACrB,EAAA,KAAA,CAAM,SAAU,CAAA,MAAA,CAAO,IAAK,CAAA,KAAA,EAAO,IAAI,CAAG,EAAA,KAAA,CAAM,SAAU,CAAA,MAAA,CAAO,KAAK,KAAO,EAAA,IAAA,EAAM,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA;AACxF,EAAO,OAAA,KAAA;AACT;AAGgB,SAAA,qBAAA,CAAyB,KAAY,EAAA,IAAA,EAAS,KAAoB,EAAA;AAChF,EAAA,IAAI,KAAQ,GAAA,CAAA,IAAK,KAAQ,GAAA,KAAA,CAAM,MAAQ,EAAA;AACrC,IAAM,MAAA,IAAI,MAAM,qBAAqB,CAAA;AAAA;AAGvC,EAAM,MAAA,KAAA,GAAQ,CAAC,GAAG,KAAK,CAAA;AACvB,EAAM,KAAA,CAAA,MAAA,CAAO,KAAO,EAAA,CAAA,EAAG,IAAI,CAAA;AAE3B,EAAO,OAAA,KAAA;AACT;AAGgB,SAAA,oBAAA,CAAwB,KAAY,EAAA,IAAA,EAAS,KAAoB,EAAA;AAC/E,EAAA,IAAI,KAAQ,GAAA,CAAA,IAAK,KAAQ,GAAA,KAAA,CAAM,MAAQ,EAAA;AACrC,IAAM,MAAA,IAAI,MAAM,qBAAqB,CAAA;AAAA;AAGvC,EAAM,MAAA,KAAA,GAAQ,CAAC,GAAG,KAAK,CAAA;AACvB,EAAA,KAAA,CAAM,MAAO,CAAA,KAAA,GAAQ,CAAG,EAAA,CAAA,EAAG,IAAI,CAAA;AAE/B,EAAO,OAAA,KAAA;AACT;AAMA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,QAAS,CAAA,KAAA,CAAA,EAAW,EAAE,OAAS,EAAA,IAAA,EAAM,WAAa,EAAA,MAAA,EAAQ,CAAA;AACpF,MAAM,cAAiB,GAAA,CAAC,CAAW,EAAA,CAAA,KAAc,CAAI,GAAA,CAAA;AAE9C,SAAS,WAAW,IAAkD,EAAA;AAC3E,EAAO,OAAA,CAAC,GAAY,CAAe,KAAA;AACjC,IAAA,IAAI,MAAM,CAAG,EAAA;AACX,MAAO,OAAA,CAAA;AAAA;AAGT,IAAI,IAAA,CAAA,IAAK,QAAS,OAAO,CAAA,KAAM,YAAY,CAAE,CAAA,IAAA,OAAW,EAAK,EAAA;AAC3D,MAAO,OAAA,CAAA,CAAA;AAAA;AAET,IAAA,IAAI,KAAK,IAAS,IAAA,OAAO,MAAM,QAAY,IAAA,CAAA,CAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAG,YAAW,EAAK,EAAA;AAC5D,MAAO,OAAA,CAAA;AAAA;AAGT,IAAA,IAAI,YAAwC,QAAS,CAAA,OAAA;AAErD,IAAA,IAAI,OAAO,CAAA,KAAM,QAAY,IAAA,OAAO,MAAM,QAAU,EAAA;AAClD,MAAY,SAAA,GAAA,cAAA;AAAA;AAGd,IAAI,IAAA,IAAA,KAASC,iBAAU,UAAY,EAAA;AACjC,MAAO,OAAA,SAAA,CAAU,GAAG,CAAC,CAAA;AAAA;AAGvB,IAAO,OAAA,SAAA,CAAU,GAAG,CAAC,CAAA;AAAA,GACvB;AACF;;;;;;;;;;AC9DO,MAAM,KAAM,CAAA;AAAA,EAGjB,WAAc,GAAA;AAFd,IAAQ,IAAA,CAAA,WAAA,uBAAqD,GAAI,EAAA;AAI/D,IAAO,MAAA,CAAA,gBAAA,CAAiB,SAAW,EAAA,CAAC,CAAM,KAAA;AACxC,MAAA,IAAI,EAAE,GAAK,EAAA;AACT,QAAK,IAAA,CAAA,iBAAA,CAAkB,EAAE,GAAG,CAAA;AAAA;AAC9B,KACD,CAAA;AAAA;AACH,EAEQ,kBAAkB,GAAa,EAAA;AACrC,IAAA,MAAM,cAAiB,GAAA,IAAA,CAAK,WAAY,CAAA,GAAA,CAAI,GAAG,CAAA;AAC/C,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAA,cAAA,CAAe,OAAQ,CAAA,CAAC,UAAe,KAAA,UAAA,EAAY,CAAA;AAAA;AACrD;AACF,EAEA,SAAA,CAAU,KAAa,QAA2B,EAAA;AAChD,IAAA,IAAI,CAAC,IAAA,CAAK,WAAY,CAAA,GAAA,CAAI,GAAG,CAAG,EAAA;AAC9B,MAAA,IAAA,CAAK,WAAY,CAAA,GAAA,CAAI,GAAK,kBAAA,IAAI,KAAK,CAAA;AAAA;AAErC,IAAA,IAAA,CAAK,WAAY,CAAA,GAAA,CAAI,GAAG,CAAA,CAAG,IAAI,QAAQ,CAAA;AAEvC,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,cAAiB,GAAA,IAAA,CAAK,WAAY,CAAA,GAAA,CAAI,GAAG,CAAA;AAC/C,MAAA,IAAI,cAAgB,EAAA;AAClB,QAAA,cAAA,CAAe,OAAO,QAAQ,CAAA;AAC9B,QAAI,IAAA,cAAA,CAAe,SAAS,CAAG,EAAA;AAC7B,UAAK,IAAA,CAAA,WAAA,CAAY,OAAO,GAAG,CAAA;AAAA;AAC7B;AACF,KACF;AAAA;AACF,EAEA,IAAI,GAAa,EAAA;AACf,IAAO,OAAA,MAAA,CAAO,aAAa,GAAG,CAAA;AAAA;AAChC,EAEA,GAAA,CAAI,KAAa,KAAmB,EAAA;AAClC,IAAO,MAAA,CAAA,YAAA,CAAa,GAAG,CAAI,GAAA,KAAA;AAC3B,IAAA,IAAA,CAAK,kBAAkB,GAAG,CAAA;AAAA;AAC5B,EAEA,OAAA,CAAQ,KAAa,GAAuB,EAAA;AAC1C,IAAA,IAAI,QAAQ,KAAU,CAAA,IAAA,CAAC,IAAK,CAAA,MAAA,CAAO,GAAG,CAAG,EAAA;AACvC,MAAO,OAAA,GAAA;AAAA;AAET,IAAO,OAAA,MAAA,CAAO,YAAa,CAAA,GAAG,CAAM,KAAA,MAAA;AAAA;AACtC,EAIA,SAAA,CAAuB,KAAa,GAAS,EAAA;AAC3C,IAAA,IAAI,GAAM,GAAA,GAAA;AACV,IAAI,IAAA,IAAA,CAAK,MAAO,CAAA,GAAG,CAAG,EAAA;AACpB,MAAM,MAAA,IAAA,GAAO,MAAO,CAAA,YAAA,CAAa,GAAG,CAAA;AACpC,MAAI,IAAA;AACF,QAAM,GAAA,GAAA,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,eACd,KAAO,EAAA;AACd,QAAA,OAAA,CAAQ,MAAM,CAA+B,4BAAA,EAAA,GAAG,wBAAwB,GAAG,CAAA,GAAA,EAAM,KAAK,CAAG,CAAA,CAAA,CAAA;AAAA;AAC3F;AAEF,IAAO,OAAA,GAAA;AAAA;AACT;AAAA,EAGA,SAAA,CAAU,KAAa,KAAgB,EAAA;AACrC,IAAI,IAAA,IAAA;AACJ,IAAI,IAAA;AACF,MAAO,IAAA,GAAA,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,aACpB,KAAO,EAAA;AACd,MAAA,MAAM,IAAI,KAAM,CAAA,CAAA,4BAAA,EAA+B,GAAG,CAAA,GAAA,EAAM,KAAK,CAAG,CAAA,CAAA,CAAA;AAAA;AAElE,IAAI,IAAA;AACF,MAAK,IAAA,CAAA,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,aACX,KAAO,EAAA;AAEd,MAAA,MAAM,eAAe,IAAI,KAAA,CAAM,wCAAwC,GAAG,CAAA,GAAA,EAAM,KAAK,CAAG,CAAA,CAAA,CAAA;AACxF,MAAA,IAAI,iBAAiB,KAAO,EAAA;AAC1B,QAAA,YAAA,CAAa,OAAO,KAAM,CAAA,IAAA;AAAA;AAE5B,MAAM,MAAA,YAAA;AAAA;AAER,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,OAAO,GAAa,EAAA;AAClB,IAAO,OAAA,MAAA,CAAO,YAAa,CAAA,GAAG,CAAM,KAAA,KAAA,CAAA;AAAA;AACtC,EAEA,OAAO,GAAa,EAAA;AAClB,IAAO,MAAA,CAAA,YAAA,CAAa,WAAW,GAAG,CAAA;AAClC,IAAA,IAAA,CAAK,kBAAkB,GAAG,CAAA;AAAA;AAE9B;AAEa,MAAA,KAAA,GAAQ,IAAI,KAAM;;AC1FlB,MAAA,yBAAA,GAA4B,CAAK,KAAoB,KAAA;AAChE,EAAA,MAAM,EAAE,QAAA,EAAU,UAAY,EAAA,YAAA,EAAiB,GAAA,KAAA;AAE/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,eAAS,EAAE,KAAA,EAAO,KAAM,CAAA,SAAA,CAAU,KAAM,CAAA,UAAA,EAAY,KAAM,CAAA,YAAY,GAAG,CAAA;AAEnG,EAAAC,eAAA,CAAU,MAAM;AACd,IAAM,MAAA,eAAA,GAAkB,CAAC,CAAoB,KAAA;AAC3C,MAAI,IAAA,CAAA,CAAE,QAAQ,UAAY,EAAA;AACxB,QAAS,QAAA,CAAA,EAAE,OAAO,KAAM,CAAA,SAAA,CAAU,MAAM,UAAY,EAAA,KAAA,CAAM,YAAY,CAAA,EAAG,CAAA;AAAA;AAC3E,KACF;AAEA,IAAO,MAAA,CAAA,gBAAA,CAAiB,WAAW,eAAe,CAAA;AAElD,IAAA,OAAO,MAAM;AACX,MAAO,MAAA,CAAA,mBAAA,CAAoB,WAAW,eAAe,CAAA;AAAA,KACvD;AAAA,GACD,CAAA;AAED,EAAM,MAAA,aAAA,GAAgB,CAAC,KAAa,KAAA;AAClC,IAAI,IAAA;AACF,MAAM,KAAA,CAAA,SAAA,CAAU,YAAY,KAAK,CAAA;AAAA,aAC1B,KAAO,EAAA;AACd,MAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA;AAErB,IAAS,QAAA,CAAA,EAAE,OAAO,CAAA;AAAA,GACpB;AAEA,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAI,IAAA;AACF,MAAA,KAAA,CAAM,OAAO,UAAU,CAAA;AAAA,aAChB,KAAO,EAAA;AACd,MAAA,OAAA,CAAQ,IAAI,KAAK,CAAA;AAAA;AAEnB,IAAS,QAAA,CAAA,EAAE,KAAO,EAAA,YAAA,EAAc,CAAA;AAAA,GAClC;AAEA,EAAA,6DAAU,QAAS,EAAA,QAAA,CAAA,KAAA,CAAM,KAAO,EAAA,aAAA,EAAe,iBAAiB,CAAE,EAAA,CAAA;AACpE;;AC1CO,SAAS,eAAe,IAAkB,EAAA;AAPjD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAQE,EAAM,MAAA,eAAA,GAAA,CAAkB,8CAAM,OAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAe,aAAf,IAA2B,GAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,oBAAjC,IAAoD,GAAA,EAAA,GAAA,KAAA;AAC5E,EAAM,MAAA,cAAA,GAAA,CAAiB,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,gBAAA,KAAN,IAA0B,GAAA,EAAA,GAAA,KAAA;AACjD,EAAA,MAAM,mBAAkB,EAAK,GAAA,CAAA,EAAA,GAAA,IAAA,CAAA,SAAA,KAAL,IAAkB,GAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,eAAxB,IAAsC,GAAA,EAAA,GAAA,KAAA;AAC9D,EAAI,IAAA,eAAA,IAAmB,kBAAkB,eAAiB,EAAA;AACxD,IAAM,MAAA,IAAI,MAAM,mCAAmC,CAAA;AAAA;AAEvD;;ACLO,MAAM,wBAA2D,GAAA;AAAA,EACtE,IAAI,iBAAkB,CAAA,aAAA;AAAA,EACtB,IAAM,EAAA,4BAAA;AAAA,EACN,WAAa,EAAA,kGAAA;AAAA,EAEb,UAAU,CAAC,OAAA,EAAS,QAAQ,CAAC,MAAA,KAC3B,OAAO,IAAK,CAAA5D,aAAA,CAAI,CAAC,IAAA,KAAS,yBAAyB,WAAY,CAAA,OAAA,EAAS,GAAG,CAAE,CAAA,IAAI,CAAC,CAAC,CAAA;AAAA,EAErF,WAAa,EAAA,CAAC,QAAU,EAAA,GAAA,KAAQ,CAAC,MAAwB,KAAA;AAEvD,IAAM,MAAA,aAAA,GAAgB,4BAA4B,MAAM,CAAA;AAExD,IAAI,IAAA,MAAA,CAAO,MAAS,GAAA,CAAA,IAAK,aAAe,EAAA;AACtC,MAAA,OAAO,sBAAuB,CAAA,WAAA;AAAA,QAC5B;AAAA,UACE,OAAS,EAAA;AAAA,SACX;AAAA,QACA;AAAA,QACA,MAAM,CAAA;AAAA;AAEV,IAAO,OAAA,MAAA;AAAA;AAEX,CAAA;AAKA,SAAS,4BAA4B,IAAuC,EAAA;AAC1E,EAAA,IAAI,IAA2B,GAAA,KAAA,CAAA;AAC/B,EAAA,KAAA,MAAW,SAAS,IAAM,EAAA;AACxB,IAAA,MAAM,EAAE,SAAA,EAAc,GAAA,YAAA,CAAa,KAAK,CAAA;AACxC,IAAA,IAAI,CAAC,SAAW,EAAA;AACd,MAAO,OAAA,KAAA,CAAA;AAAA;AAET,IAAA,IAAI,CAAC,IAAM,EAAA;AACT,MAAA,IAAA,GAAO,SAAU,CAAA,IAAA;AAAA,KACnB,MAAA,IAAW,IAAS,KAAA,SAAA,CAAU,IAAM,EAAA;AAElC,MAAO,OAAA,KAAA,CAAA;AAAA;AACT;AAEF,EAAO,OAAA,IAAA;AACT;;AC5CO,MAAM,eAA0E,GAAA;AAAA,EACrF,IAAI,iBAAkB,CAAA,IAAA;AAAA,EACtB,IAAM,EAAA,MAAA;AAAA,EACN,WAAa,EAAA,0BAAA;AAAA,EACb,gBAAgB,EAAC;AAAA;AAAA,EAGjB,QAAU,EAAA,CAAC,OAAoC,KAAA,CAAC,MAAW,KAAA,MAAA;AAAA;AAAA,EAG3D,WAAa,EAAA,CAAC,OAAoC,KAAA,CAAC,IAAsB,KAAA;AAC3E,CAAA;;ACwDA,MAAM,oBAAsC,GAAA;AAAA,EAC1C,SAAS,SAAU,CAAA;AACrB,CAAA;AAEO,MAAM,oBAAsC,GAAA;AAAA,EACjD,SAAS,SAAU,CAAA,IAAA;AAAA,EACnB,eAAiB,EAAA,UAAA;AAAA,EACjB,cAAgB,EAAA,YAAA;AAAA,EAChB,UAAY,EAAA;AACd,CAAA;AAEA,MAAM,oBAAsC,GAAA;AAAA,EAC1C,IAAA,EAAM,EAAE,KAAA,EAAO,EAAG,EAAA;AAAA,EAClB,UAAU,iBAAkB,CAAA,GAAA;AAAA,EAC5B,KAAA,EAAO,EAAE,KAAA,EAAO,EAAG;AACrB,CAAA;AAEA,MAAM,mBAAoC,GAAA;AAAA,EACxC,UAAU,gBAAiB,CAAA,GAAA;AAAA,EAC3B,SAAW,EAAA;AACb,CAAA;AAyBO,MAAM,yBAAmF,GAAA;AAAA,EAC9F,IAAI,iBAAkB,CAAA,cAAA;AAAA,EACtB,IAAM,EAAA,4BAAA;AAAA,EACN,WAAa,EAAA,6CAAA;AAAA,EACb,cAAgB,EAAA;AAAA,IACd,IAAM,EAAA,WAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACN,SAAS,SAAU,CAAA;AAAA;AACrB,GACF;AAAA,EACA,QAAU,EAAA,CAAC,OAAS,EAAA,GAAA,KAAQ,CAAC,WAAgB,KAAA;AAjI/C,IAAA,IAAA,EAAA,EAAA,EAAA;AAkII,IAAM,MAAA,IAAA,GAAA,CAAO,EAAQ,GAAA,OAAA,CAAA,IAAA,KAAR,IAAgB,GAAA,EAAA,GAAA,WAAA;AAE7B,IAAM,MAAA,YAAA,GAAe,QAAQ,UAAe,KAAA,KAAA;AAE5C,IAAM,MAAA,KAAA,GAAA,CAAQ,EAAQ,GAAA,OAAA,CAAA,MAAA,KAAR,IAAgB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA;AAC9B,IAAM,MAAA,QAAA,GAAW,OAAO,KAAU,KAAA,QAAA,GAAW,QAAQ,OAAO,KAAA,KAAU,QAAW,GAAA,KAAA,CAAM,KAAQ,GAAA,KAAA,CAAA;AAC/F,IAAM,MAAA,aAAA,GAAgB,SAAS,QAAsC,0BAAA,CAAC,OAAO,KAAM,CAAA,MAAA,CAAO,QAAQ,CAAC,CAAA;AAEnG,IAAM,MAAA,gBAAA,GAAmB,gBAAgB,CAAC,aAAA;AAE1C,IAAM,MAAA,QAAA,GAAW,gBACb,GAAA,wBAAA,CAAyB,QAAS,CAAA,IAAA,EAAM,GAAG,CAAA,GAC3C,eAAgB,CAAA,QAAA,CAAS,EAAC,EAAG,GAAG,CAAA;AAEpC,IAAA,OAAO,WAAY,CAAA,IAAA;AAAA,MACjB,QAAA;AAAA,MACAA,aAAA,CAAI,CAAC,IAAS,KAAA;AAlJpB,QAAA,IAAAV,KAAAe,GAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAmJQ,QAAA,IAAI,OAAqC,GAAA,KAAA,CAAA;AAEzC,QAAA,QAAQ,IAAM;AAAA,UACZ,KAAK,WAAA;AACH,YAAA,OAAA,GAAU,oBAAoBiD,eAAS,CAAA,OAAA,CAAQ,MAAQ,EAAA,oBAAoB,GAAG,IAAI,CAAA;AAClF,YAAA;AAAA,UACF,KAAK,qBAAA;AACH,YAAA,OAAA,GAAU,qBAAqBA,eAAS,CAAA,OAAA,CAAQ,UAAY,EAAA,oBAAoB,GAAG,IAAI,CAAA;AACvF,YAAA;AAAA,UACF,KAAK,iBAAA;AACH,YAAA,OAAA,GAAU,iBAAiBA,eAAS,CAAA,OAAA,CAAQ,MAAQ,EAAA,oBAAoB,GAAG,IAAI,CAAA;AAC/E,YAAA;AAAA,UACF,KAAK,OAAA;AACH,YAAA,OAAA,GAAU,gBAAgBA,eAAS,CAAA,OAAA,CAAQ,KAAO,EAAA,mBAAmB,GAAG,IAAI,CAAA;AAC5E,YAAA;AAAA,UACF,KAAK,QAAA;AACH,YAAA,MAAM,aAAuB,EAAC;AAC9B,YAAK,IAAA,CAAA,GAAA,CAAI,CAAC,KAAU,KAAA;AAClB,cAAM,KAAA,CAAA,MAAA,CAAO,GAAI,CAAA,CAAC,KAAU,KAAA;AAC1B,gBAAW,UAAA,CAAA,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,eAC3B,CAAA;AAAA,aACF,CAAA;AACD,YAAA,MAAM,aAAgB,GAAA;AAAA,cACpB,IAAM,EAAA,oBAAA,CAAA,CAAqBjD,GAAAf,GAAAA,CAAAA,GAAAA,GAAA,OAAQ,CAAA,MAAA,KAAR,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,GAAAA,CAAgB,IAAhB,KAAA,IAAA,GAAAe,GAAwB,GAAA,EAAA,EAAI,UAAU,CAAA;AAAA,cACjE,WAAU,EAAQ,GAAA,CAAA,EAAA,GAAA,OAAA,CAAA,MAAA,KAAR,IAAgB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAA,KAAhB,YAA4B,oBAAqB,CAAA,QAAA;AAAA,cAC3D,KAAA,EAAO,sBAAqB,EAAQ,GAAA,CAAA,EAAA,GAAA,OAAA,CAAA,MAAA,KAAR,mBAAgB,KAAhB,KAAA,IAAA,GAAA,EAAA,GAAyB,IAAI,UAAU;AAAA,aACrE;AACA,YAAA,OAAA,CAAQ,MAAS,GAAA,aAAA;AACjB,YAAA,IAAA,CAAA,CAAI,EAAc,GAAA,CAAA,EAAA,GAAA,aAAA,CAAA,IAAA,KAAd,IAAoB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA,KAApB,IAA6B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,EAAA,KAAA,CAAA,CAAM,EAAc,GAAA,aAAA,CAAA,IAAA,KAAd,IAAoB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA,CAAQ,EAAO,MAAA,cAAA,CAAe,MAAQ,EAAA;AAC/F,cAAM,MAAA,SAAA,GAAY,aAAc,CAAA,IAAA,CAAK,OAAQ,CAAA,OAAA;AAC7C,cAAA,MAAMwD,SAAW,GAAA,eAAA,CAAgB,WAAY,CAAA,aAAA,CAAc,QAAQ,CAAA;AACnE,cAAA,MAAMC,UAAY,GAAA,IAAA,CAAK,GAAI,CAAA,CAAC,KAAU,KAAA;AACpC,gBAAA,MAAM,EAAE,SAAA,EAAc,GAAA,YAAA,CAAa,KAAK,CAAA;AACxC,gBAAA,MAAM,YAAqB,EAAC;AAC5B,gBAAA,IAAI,eAAkB,GAAA,KAAA;AACtB,gBAAI,IAAA,SAAA,IAAa,OAAQ,CAAA,UAAA,KAAe,KAAO,EAAA;AAC7C,kBAAA,SAAA,CAAU,KAAK,SAAS,CAAA;AAAA;AAG1B,gBAAA,KAAA,CAAM,MAAO,CAAA,GAAA,CAAI,CAAC,KAAA,EAAO,KAAU,KAAA;AA1LnD,kBAAA,IAAAxE,GAAAe,EAAAA,GAAAA,EAAA0D,GAAAC,EAAAA,GAAAA,EAAAC,KAAAC,GAAAC,EAAAA,GAAAA;AA2LkB,kBAAA,IAAI,CAAC,OAAQ,CAAA,aAAA,IAAiB,CAAC,SAAU,CAAA,QAAA,CAAS,KAAK,CAAG,EAAA;AACxD,oBAAA,SAAA,CAAU,KAAK,KAAK,CAAA;AAAA;AAEtB,kBAAI,IAAA,KAAA,CAAM,SAAS,SAAW,EAAA;AAC5B,oBAAA,MAAM,OAAO,KAAM,CAAA,MAAA;AAEnB,oBAAA,MAAMC,MAAQ,GAAA,iCAAA;AAAA,sBACZ,KAAA;AAAA,sBAAA,CACA9E,GAAA,GAAA,aAAA,CAAc,KAAd,KAAA,IAAA,GAAAA,MAAuB,oBAAqB,CAAA,KAAA;AAAA,sBAC5C,IAEF,CAAA;AACA,oBAAA,IAAI,CAAC,IAAA,IAAQ,CAAC8E,MAAAA,IAAS,CAACP,SAAU,EAAA;AAChC,sBAAO,OAAA,KAAA,CAAA;AAAA;AAGT,oBAAA,MAAM,GAAM,GAAA,IAAI,KAAM,CAAA,IAAA,CAAK,MAAM,CAAA;AACjC,oBAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,GAAA,CAAI,QAAQ,CAAK,EAAA,EAAA;AACnC,sBAAI,GAAA,CAAA,CAAC,IAAIA,SAAS,CAAA,SAAA,CAAU,KAAK,CAAC,CAAA,EAAGO,MAAM,CAAA,CAAC,CAAC,CAAA;AAAA;AAE/C,oBAAA,MAAM,QAAW,GAAA;AAAA,sBACf,GAAG,KAAA;AAAA,sBACH,MAAM,CAAG,EAAA,KAAA,CAAM,IAAI,CAAA,CAAA,EAAA,CAAIL,OAAA1D,GAAA,GAAA,OAAA,CAAQ,MAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,IAAgB,QAAhB,KAAA,IAAA,GAAA0D,GAA4B,GAAA,EAAE,KAAII,GAAAF,GAAAA,CAAAA,GAAAA,GAAAA,CAAAD,GAAA,GAAA,OAAA,CAAQ,WAAR,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,GAAAA,CAAgB,KAAM,CAAA,OAAA,KAAtB,gBAAAC,GAA+B,CAAA,OAAA,KAA/B,IAAAE,GAAAA,GAAAA,GAAAA,CAA0CD,MAAA,OAAQ,CAAA,MAAA,KAAR,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,GAAAA,CAAgB,MAAM,KAAK,CAAA,CAAA;AAAA,sBAC9H,MAAQ,EAAA;AAAA,qBACV;AACA,oBAAA,OAAO,QAAS,CAAA,KAAA;AAChB,oBAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AACvB,oBAAkB,eAAA,GAAA,IAAA;AAAA;AACpB,iBACD,CAAA;AAED,gBAAI,IAAA,OAAA,CAAQ,aAAiB,IAAA,CAAC,eAAiB,EAAA;AAC7C,kBAAO,OAAA,KAAA,CAAA;AAAA;AAGT,gBAAA,OAAO,EAAE,GAAG,KAAO,EAAA,MAAA,EAAQ,SAAU,EAAA;AAAA,eACtC,CAAA;AAED,cAAA,OAAOJ,UAAU,CAAA,MAAA,CAAO,CAAC,KAAA,KAAU,SAAS,IAAI,CAAA;AAAA,aAC3C,MAAA;AACL,cAAA,OAAA,GAAU,iBAAiBR,eAAS,CAAA,aAAA,EAAe,oBAAoB,CAAA,EAAG,IAAS,CAAA;AAAA;AAErF,YAAA;AAAA,UACF,KAAK,OAAA;AACH,YAAO,OAAA,IAAA,CAAK,GAAI,CAAA,CAAC,KAAU,KAAA;AAvOvC,cAAA,IAAAhE,KAAAe,GAAA0D,EAAAA,GAAAA;AAwOc,cAAM,MAAA,QAAA,GAAW,CAAC,GAAG,KAAA,CAAM,MAAM,MAAM,CAAA,CAAE,MAAM,CAAA;AAE/C,cAAA,IAAA,CAAIzE,GAAA,GAAA,OAAA,CAAQ,KAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,IAAe,YAAc,EAAA;AAC/B,gBAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,QAAA,CAAS,QAAQ,CAAK,EAAA,EAAA;AACxC,kBAAA,QAAA,CAAS,CAAC,CAAA,GAAI,QAAS,CAAA,CAAC,IAAI,QAAS,CAAA,MAAA;AAAA;AACvC;AAGF,cAAA,MAAM,CAAI,GAAA;AAAA,gBACR,IAAMe,EAAAA,CAAAA,GAAAA,GAAA,OAAQ,CAAA,KAAA,KAAR,OAAAA,GAAiB,GAAA,KAAA;AAAA,gBACvB,MAAM,SAAU,CAAA,MAAA;AAAA,gBAChB,MAAQ,EAAA,QAAA;AAAA,gBACR,MAAA,EAAA,CAAA,CAAQ0D,GAAA,GAAA,OAAA,CAAQ,KAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,GAAe,CAAA,YAAA,IAAe,EAAE,IAAA,EAAM,aAAc,EAAA,GAAI;AAAC,eACnE;AACA,cAAO,OAAA;AAAA,gBACL,GAAG,KAAA;AAAA,gBACH,MAAA,EAAQ,OAAQ,CAAA,aAAA,GAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,KAAM,CAAA,MAAA,EAAQ,CAAC;AAAA,eAC3D;AAAA,aACD,CAAA;AAAA;AAIL,QAAA,IAAI,CAAC,OAAS,EAAA;AACZ,UAAO,OAAA,IAAA;AAAA;AAGT,QAAA,MAAM,SAAY,GAAA,IAAA,CAAK,GAAI,CAAA,CAAC,KAAU,KAAA;AAEpC,UAAM,MAAA,MAAA,GAAS,QAAS,KAAK,CAAA;AAC7B,UAAA,IAAI,CAAC,MAAQ,EAAA;AAEX,YAAA,IAAI,QAAQ,aAAe,EAAA;AACzB,cAAO,OAAA,KAAA,CAAA;AAAA;AAET,YAAO,OAAA,KAAA;AAAA;AAGT,UAAA,MAAM,KAAQ,GAAA;AAAA,YACZ,IAAA,EAAM,mBAAmB,OAAO,CAAA;AAAA,YAChC,MAAM,SAAU,CAAA,MAAA;AAAA,YAChB,QAAQ,EAAC;AAAA,YACT;AAAA,WACF;AACA,UAAA,IAAI,SAAkB,EAAC;AAGvB,UAAA,IAAI,QAAQ,aAAe,EAAA;AACzB,YAAA,MAAM,EAAE,SAAA,EAAc,GAAA,YAAA,CAAa,KAAK,CAAA;AACxC,YAAI,IAAA,SAAA,IAAa,OAAQ,CAAA,UAAA,KAAe,KAAO,EAAA;AAC7C,cAAS,MAAA,GAAA,CAAC,WAAW,KAAK,CAAA;AAAA,aACrB,MAAA;AACL,cAAA,MAAA,GAAS,CAAC,KAAK,CAAA;AAAA;AACjB,WACK,MAAA;AACL,YAAA,MAAA,GAAS,CAAC,GAAG,KAAM,CAAA,MAAA,EAAQ,KAAK,CAAA;AAAA;AAElC,UAAO,OAAA;AAAA,YACL,GAAG,KAAA;AAAA,YACH;AAAA,WACF;AAAA,SACD,CAAA;AACD,QAAA,OAAO,SAAU,CAAA,MAAA,CAAO,CAAC,KAAA,KAAU,SAAS,IAAI,CAAA;AAAA,OACjD;AAAA,KACH;AAAA;AAEJ,CAAA;AAEA,SAAS,gBAAA,CAAiB,SAAwB,SAAuC,EAAA;AACvF,EAAI,IAAA,OAAA,CAAQ,cAAe,CAAG,EAAA;AAC5B,IAAM,MAAA,IAAI,MAAM,+EAA+E,CAAA;AAAA;AAGjG,EAAA,IAAI,UAAU,eAAgB,CAAA;AAAA,IAC5B,IAAI,cAAe,CAAA;AAAA,GACpB,CAAA;AAED,EAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,IAAA,OAAA,GAAU,eAAgB,CAAA;AAAA,MACxB,IAAI,cAAe,CAAA,OAAA;AAAA,MACnB,OAAS,EAAA;AAAA,QACP,KAAA,EAAO,CAAC,OAAA,CAAQ,KAAK;AAAA;AACvB,KACD,CAAA;AAAA;AAGH,EAAA,OAAO,CAAC,KAAqB,KAAA;AAC3B,IAAA,MAAM,SAAS,IAAK,CAAA,IAAA;AAAA,MAClB,QAAQ,UAAe,IAAA,OAAA,CAAQ,cAAmB,KAAA,YAAA,oBAA4B,MAAM,MAAS,GAAA,CAAA;AAAA,KAC/F;AAGA,IAAA,IAAI,aAA8B,GAAA,IAAA;AAClC,IAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,MAAA,IAAI,OAAQ,CAAA,KAAA,EAAO,KAAO,EAAA,SAAS,CAAG,EAAA;AACpC,QAAgB,aAAA,GAAA,KAAA;AAChB,QAAA;AAAA;AACF;AAGF,IAAA,IAAI,CAAC,aAAe,EAAA;AAClB,MAAA;AAAA;AAGF,IAAA,IAAI,CAAC,CAAC,SAAU,CAAA,IAAA,EAAM,SAAU,CAAA,MAAA,EAAQ,SAAU,CAAA,QAAQ,CAAE,CAAA,QAAA,CAAS,OAAQ,CAAA,OAAO,CAAG,EAAA;AACrF,MAAA,MAAM,IAAI,KAAA,CAAM,CAAoE,iEAAA,EAAA,OAAA,CAAQ,OAAO,CAAE,CAAA,CAAA;AAAA;AAGvG,IAAI,IAAA,OAAA,CAAQ,oBAAoB,UAA0B,iBAAA;AACxD,MAAA,OAAO,uBAAwB,CAAA,KAAA,EAAO,OAAQ,CAAA,OAAA,EAAS,eAAe,MAAM,CAAA;AAAA,KACvE,MAAA;AACL,MAAA,OAAO,uBAAwB,CAAA,KAAA,EAAO,OAAQ,CAAA,OAAA,EAAS,eAAe,MAAM,CAAA;AAAA;AAC9E,GACF;AACF;AAEA,SAAS,uBAAwB,CAAA,KAAA,EAAkB,OAAoB,EAAA,aAAA,EAAsB,MAAgB,EAAA;AAC3G,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,IAAI,GAAM,GAAA,CAAA;AACV,EAAA,IAAI,KAAQ,GAAA,CAAA;AACZ,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AACrC,IAAI,IAAA,OAAA,KAAY,UAAU,IAAM,EAAA;AAC9B,MAAM,MAAA,YAAA,GAAe,aAAc,CAAA,MAAA,CAAO,CAAC,CAAA;AAC3C,MAAI,IAAA,YAAA,KAAiB,IAAQ,IAAA,YAAA,KAAiB,KAAW,CAAA,EAAA;AACvD,QAAA,KAAA,EAAA;AACA,QAAO,GAAA,IAAA,YAAA;AAEP,QAAI,IAAA,CAAA,GAAI,SAAS,CAAG,EAAA;AAClB,UAAA,MAAM,KAAQ,GAAA,aAAA,CAAc,MAAO,CAAA,CAAA,GAAI,MAAM,CAAA;AAC7C,UAAA,IAAI,SAAS,IAAM,EAAA;AACjB,YAAO,GAAA,IAAA,KAAA;AACP,YAAA,KAAA,EAAA;AAAA;AACF;AACF;AAEF,MAAA,IAAA,CAAK,IAAK,CAAA,KAAA,KAAU,CAAI,GAAA,CAAA,GAAI,MAAM,KAAK,CAAA;AAAA,KACzC,MAAA,IAAW,OAAY,KAAA,SAAA,CAAU,QAAU,EAAA;AACzC,MAAA,MAAM,QAAQ,IAAK,CAAA,GAAA,CAAI,CAAG,EAAA,CAAA,GAAI,SAAS,CAAC,CAAA;AACxC,MAAA,MAAM,MAAM,CAAI,GAAA,CAAA;AAChB,MAAK,IAAA,CAAA,IAAA,CAAK,kBAAkB,aAAc,CAAA,MAAA,CAAO,MAAM,KAAO,EAAA,GAAG,CAAC,CAAC,CAAA;AAAA,KACrE,MAAA,IAAW,OAAY,KAAA,SAAA,CAAU,MAAQ,EAAA;AACvC,MAAA,MAAM,QAAQ,IAAK,CAAA,GAAA,CAAI,CAAG,EAAA,CAAA,GAAI,SAAS,CAAC,CAAA;AACxC,MAAA,MAAM,MAAM,CAAI,GAAA,CAAA;AAChB,MAAK,IAAA,CAAA,IAAA,CAAK,gBAAgB,aAAc,CAAA,MAAA,CAAO,MAAM,KAAO,EAAA,GAAG,CAAC,CAAC,CAAA;AAAA;AACnE;AAEF,EAAO,OAAA,IAAA;AACT;AAEA,SAAS,uBAAwB,CAAA,KAAA,EAAkB,OAAoB,EAAA,aAAA,EAAsB,MAAgB,EAAA;AAC3G,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,IAAI,GAAM,GAAA,CAAA;AACV,EAAA,IAAI,KAAQ,GAAA,CAAA;AAGZ,EAAA,MAAM,mBAAsB,GAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAC,CAAI,GAAA,CAAA;AACpD,EAAA,MAAM,oBAAuB,GAAA,IAAA,CAAK,KAAM,CAAA,MAAA,GAAS,CAAC,CAAA;AAClD,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AACrC,IAAA,MAAM,QAAQ,CAAI,GAAA,oBAAA;AAClB,IAAA,MAAM,OAAO,CAAI,GAAA,mBAAA;AACjB,IAAI,IAAA,OAAA,KAAY,UAAU,IAAM,EAAA;AAC9B,MAAA,IAAI,MAAM,CAAG,EAAA;AAEX,QAAS,KAAA,IAAA,CAAA,GAAI,GAAG,CAAI,GAAA,mBAAA,GAAsB,KAAK,CAAI,GAAA,aAAA,CAAc,MAAO,CAAA,MAAA,EAAQ,CAAK,EAAA,EAAA;AACnF,UAAA,IAAI,aAAc,CAAA,MAAA,CAAO,CAAC,CAAA,IAAK,IAAM,EAAA;AACnC,YAAO,GAAA,IAAA,aAAA,CAAc,OAAO,CAAC,CAAA;AAC7B,YAAA,KAAA,EAAA;AAAA;AACF;AACF,OACK,MAAA;AACL,QAAI,IAAA,IAAA,GAAO,aAAc,CAAA,MAAA,CAAO,MAAQ,EAAA;AAEtC,UAAA,IAAI,aAAc,CAAA,MAAA,CAAO,IAAI,CAAA,IAAK,IAAM,EAAA;AACtC,YAAO,GAAA,IAAA,aAAA,CAAc,OAAO,IAAI,CAAA;AAChC,YAAA,KAAA,EAAA;AAAA;AACF;AAEF,QAAA,IAAI,QAAQ,CAAG,EAAA;AAEb,UAAA,IAAI,aAAc,CAAA,MAAA,CAAO,KAAQ,GAAA,CAAC,KAAK,IAAM,EAAA;AAC3C,YAAO,GAAA,IAAA,aAAA,CAAc,MAAO,CAAA,KAAA,GAAQ,CAAC,CAAA;AACrC,YAAA,KAAA,EAAA;AAAA;AACF;AACF;AAEF,MAAA,IAAA,CAAK,IAAK,CAAA,KAAA,KAAU,CAAI,GAAA,CAAA,GAAI,MAAM,KAAK,CAAA;AAAA,KACzC,MAAA,IAAW,OAAY,KAAA,SAAA,CAAU,QAAU,EAAA;AACzC,MAAM,MAAA,UAAA,GAAa,cAAc,MAAO,CAAA,KAAA;AAAA,QACtC,IAAA,CAAK,GAAI,CAAA,CAAA,EAAG,KAAK,CAAA;AAAA,QACjB,KAAK,GAAI,CAAA,IAAA,GAAO,CAAG,EAAA,aAAA,CAAc,OAAO,MAAM;AAAA,OAChD;AACA,MAAK,IAAA,CAAA,IAAA,CAAK,iBAAkB,CAAA,UAAU,CAAC,CAAA;AAAA,KACzC,MAAA,IAAW,OAAY,KAAA,SAAA,CAAU,MAAQ,EAAA;AACvC,MAAM,MAAA,UAAA,GAAa,cAAc,MAAO,CAAA,KAAA;AAAA,QACtC,IAAA,CAAK,GAAI,CAAA,CAAA,EAAG,KAAK,CAAA;AAAA,QACjB,KAAK,GAAI,CAAA,IAAA,GAAO,CAAG,EAAA,aAAA,CAAc,OAAO,MAAM;AAAA,OAChD;AACA,MAAK,IAAA,CAAA,IAAA,CAAK,eAAgB,CAAA,UAAU,CAAC,CAAA;AAAA;AACvC;AAEF,EAAO,OAAA,IAAA;AACT;AAEA,SAAS,kBAAkB,IAAwB,EAAA;AACjD,EAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,IAAO,OAAA,CAAA;AAAA;AAET,EAAA,IAAI,SAAY,GAAA,CAAA;AAChB,EAAA,IAAI,WAAc,GAAA,CAAA;AAClB,EAAA,IAAI,YAAe,GAAA,CAAA;AACnB,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,IAAM,MAAA,YAAA,GAAe,KAAK,CAAC,CAAA;AAC3B,IAAA,IAAI,gBAAgB,IAAM,EAAA;AACxB,MAAA,YAAA,EAAA;AACA,MAAA,IAAI,QAAW,GAAA,WAAA;AACf,MAAA,WAAA,IAAA,CAAgB,eAAe,QAAY,IAAA,YAAA;AAC3C,MAAc,SAAA,IAAA,CAAA,YAAA,GAAe,aAAa,YAAe,GAAA,WAAA,CAAA;AAAA;AAC3D;AAEF,EAAA,IAAI,iBAAiB,CAAG,EAAA;AACtB,IAAO,OAAA,CAAA;AAAA;AAET,EAAA,MAAM,WAAW,SAAY,GAAA,YAAA;AAC7B,EAAO,OAAA,QAAA;AACT;AAEA,SAAS,gBAAgB,IAAwB,EAAA;AAC/C,EAAA,OAAO,IAAK,CAAA,IAAA,CAAK,iBAAkB,CAAA,IAAI,CAAC,CAAA;AAC1C;AAEA,SAAS,oBAAA,CAAqB,SAA4B,SAAuC,EAAA;AAC/F,EAAA,IAAI,UAAU,eAAgB,CAAA;AAAA,IAC5B,IAAI,cAAe,CAAA;AAAA,GACpB,CAAA;AAED,EAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,IAAA,OAAA,GAAU,eAAgB,CAAA;AAAA,MACxB,IAAI,cAAe,CAAA,OAAA;AAAA,MACnB,OAAS,EAAA;AAAA,QACP,KAAA,EAAO,CAAC,OAAA,CAAQ,KAAK;AAAA;AACvB,KACD,CAAA;AAAA;AAGH,EAAI,IAAA,CAAC,CAAC,SAAA,CAAU,IAAM,EAAA,SAAA,CAAU,GAAG,CAAE,CAAA,QAAA,CAAS,OAAQ,CAAA,OAAO,CAAG,EAAA;AAC9D,IAAA,MAAM,IAAI,KAAA,CAAM,CAAoE,iEAAA,EAAA,OAAA,CAAQ,OAAO,CAAE,CAAA,CAAA;AAAA;AAGvG,EAAA,OAAO,CAAC,KAAqB,KAAA;AA/d/B,IAAA,IAAA,EAAA;AAieI,IAAA,IAAI,aAA8B,GAAA,IAAA;AAClC,IAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,MAAA,IAAI,OAAQ,CAAA,KAAA,EAAO,KAAO,EAAA,SAAS,CAAG,EAAA;AACpC,QAAgB,aAAA,GAAA,KAAA;AAChB,QAAA;AAAA;AACF;AAGF,IAAA,IAAI,CAAC,aAAe,EAAA;AAClB,MAAA;AAAA;AAGF,IAAA,MAAM,OAAiB,EAAC;AAExB,IAAA,IAAI,KAAQ,GAAA,CAAA;AACZ,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AACrC,MAAA,KAAA,IAAA,CAAS,EAAc,GAAA,aAAA,CAAA,MAAA,CAAO,CAAC,CAAA,KAAtB,IAA2B,GAAA,EAAA,GAAA,CAAA;AACpC,MAAI,IAAA,OAAA,CAAQ,OAAY,KAAA,SAAA,CAAU,GAAK,EAAA;AACrC,QAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,OACN,MAAA,IAAA,OAAA,CAAQ,OAAY,KAAA,SAAA,CAAU,IAAM,EAAA;AAC7C,QAAK,IAAA,CAAA,IAAA,CAAK,KAAS,IAAA,CAAA,GAAI,CAAE,CAAA,CAAA;AAAA;AAC3B;AAGF,IAAO,OAAA,IAAA;AAAA,GACT;AACF;AAEA,SAAS,mBAAA,CAAoB,SAAwB,SAAuC,EAAA;AA7f5F,EAAA,IAAA,EAAA;AA8fE,EAAA,IAAI,UAAU,eAAgB,CAAA;AAAA,IAC5B,IAAI,cAAe,CAAA;AAAA,GACpB,CAAA;AAED,EAAA,IAAI,OAAQ,CAAA,OAAA,IAAW,OAAQ,CAAA,OAAA,CAAQ,MAAQ,EAAA;AAC7C,IAAA,OAAA,GAAU,eAAgB,CAAA;AAAA,MACxB,IAAI,cAAe,CAAA,OAAA;AAAA,MACnB,OAAS,EAAA;AAAA,QACP,OAAO,OAAQ,CAAA;AAAA;AACjB,KACD,CAAA;AAAA;AAGH,EAAA,MAAM,IAAO,GAAA,aAAA,CAAc,GAAI,CAAA,OAAA,CAAQ,OAAO,CAAA;AAE9C,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAA,MAAM,IAAI,KAAA,CAAM,CAAoB,iBAAA,EAAA,OAAA,CAAQ,OAAO,CAAE,CAAA,CAAA;AAAA;AAGvD,EAAM,MAAA,OAAA,GAAA,CAAU,EAAK,GAAA,IAAA,CAAA,MAAA,KAAL,IAAe,GAAA,EAAA,GAAA,eAAA;AAC/B,EAAM,MAAA,WAAA,GAAc,OAAQ,CAAA,aAAA,KAAkB,aAAc,CAAA,MAAA;AAC5D,EAAM,MAAA,UAAA,GAAa,OAAQ,CAAA,aAAA,KAAkB,aAAc,CAAA,MAAA;AAE3D,EAAA,OAAO,CAAC,KAAqB,KAAA;AAE3B,IAAA,MAAM,UAAU,EAAC;AACjB,IAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,MAAA,IAAI,OAAQ,CAAA,KAAA,EAAO,KAAO,EAAA,SAAS,CAAG,EAAA;AACpC,QAAQ,OAAA,CAAA,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA;AAC3B;AAIF,IAAA,MAAM,OAAO,OAAQ,CAAA,MAAA;AACrB,IAAA,MAAM,GAAa,GAAA;AAAA,MACjB,IAAM,EAAA,MAAA;AAAA,MACN,MAAA,EAAQ,IAAI,KAAA,CAAM,IAAI,CAAA;AAAA,MACtB,MAAM,SAAU,CAAA,MAAA;AAAA,MAChB,QAAQ;AAAC,KACX;AACA,IAAA,MAAM,OAAiB,EAAC;AAExB,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AACrC,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,EAAM,CAAK,EAAA,EAAA;AAC7B,QAAA,GAAA,CAAI,OAAO,CAAC,CAAA,GAAI,OAAQ,CAAA,CAAC,EAAE,CAAC,CAAA;AAAA;AAG9B,MAAK,IAAA,CAAA,IAAA,CAAK,QAAQ,GAAK,EAAA,WAAA,EAAa,UAAU,CAAE,CAAA,OAAA,CAAQ,OAAO,CAAC,CAAA;AAAA;AAGlE,IAAO,OAAA,IAAA;AAAA,GACT;AACF;AAEA,SAAS,iCACP,CAAA,KAAA,EACA,KACA,EAAA,SAAA,EACA,GACsB,EAAA;AAzjBxB,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA0jBE,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAO,OAAA,KAAA,CAAA;AAAA;AAGT,EAAA,IAAI,MAAM,OAAW,IAAA,KAAA,CAAM,OAAQ,CAAA,EAAA,KAAO,eAAe,MAAQ,EAAA;AAC/D,IAAA,MAAM,IAAO,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,OAAQ,CAAA,OAAA,KAAd,IAAyB,GAAA,EAAA,GAAA,EAAA;AAEtC,IAAW,KAAA,MAAA,CAAA,IAAK,MAAM,MAAQ,EAAA;AAC5B,MAAA,IAAI,IAAS,KAAA,mBAAA,CAAoB,CAAG,EAAA,KAAA,EAAO,SAAS,CAAG,EAAA;AACrD,QAAI,IAAA,CAAA,CAAE,IAAS,KAAA,SAAA,CAAU,OAAS,EAAA;AAChC,UAAA,OAAO,EAAE,MAAO,CAAA,GAAA,CAAI,CAACtF,EAAOA,KAAAA,EAAAA,GAAI,IAAI,CAAE,CAAA;AAAA;AAExC,QAAA,OAAO,CAAE,CAAA,MAAA;AAAA;AACX;AACF;AAGF,EAAM,MAAA,CAAA,GAAI,UAAW,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,KAAN,KAAA,IAAA,GAAA,EAAA,GAAA,CAAe,WAAM,OAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAe,OAA9B,KAAA,IAAA,GAAA,EAAA,GAAyC,EAAE,CAAA;AAChE,EAAI,IAAA,CAAC,KAAM,CAAA,CAAC,CAAG,EAAA;AACb,IAAA,OAAO,IAAI,KAAM,CAAA,KAAA,CAAM,MAAM,CAAA,CAAE,KAAK,CAAC,CAAA;AAAA;AAGvC,EAAO,OAAA,KAAA,CAAA;AACT;AAEA,SAAS,gBAAA,CAAiB,OAAwB,EAAA,SAAA,EAAwB,GAA0C,EAAA;AAClH,EAAA,MAAM,QAAW,GAAA,eAAA,CAAgB,WAAY,CAAA,OAAA,CAAQ,QAAQ,CAAA;AAE7D,EAAA,OAAO,CAAC,KAAqB,KAAA;AAC3B,IAAA,MAAM,OAAO,iCAAkC,CAAA,KAAA,EAAO,OAAQ,CAAA,IAAA,EAAM,SAAc,CAAA;AAClF,IAAA,MAAM,QAAQ,iCAAkC,CAAA,KAAA,EAAO,OAAQ,CAAA,KAAA,EAAO,SAAc,CAAA;AACpF,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,KAAA,IAAS,CAAC,QAAU,EAAA;AAChC,MAAO,OAAA,KAAA,CAAA;AAAA;AAGT,IAAA,MAAM,GAAM,GAAA,IAAI,KAAM,CAAA,IAAA,CAAK,MAAM,CAAA;AACjC,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,GAAA,CAAI,QAAQ,CAAK,EAAA,EAAA;AACnC,MAAI,GAAA,CAAA,CAAC,IAAI,QAAS,CAAA,SAAA,CAAU,KAAK,CAAC,CAAA,EAAG,KAAM,CAAA,CAAC,CAAC,CAAA;AAAA;AAE/C,IAAO,OAAA,GAAA;AAAA,GACT;AACF;AAEgB,SAAA,oBAAA,CAAqB,OAA6B,KAA8B,EAAA;AAE9F,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAA,IAAI,KAAM,CAAA,MAAA,CAAO,KAAK,CAAC,CAAG,EAAA;AACxB,MAAO,OAAA,EAAE,SAAS,EAAE,EAAA,EAAI,eAAe,MAAQ,EAAA,OAAA,EAAS,OAAQ,EAAA;AAAA,KAC3D,MAAA;AAEL,MAAI,IAAA,KAAA,CAAM,QAAS,CAAA,KAAK,CAAG,EAAA;AACzB,QAAO,OAAA,EAAE,SAAS,EAAE,EAAA,EAAI,eAAe,MAAQ,EAAA,OAAA,EAAS,OAAQ,EAAA;AAAA,OAC3D,MAAA;AACL,QAAO,OAAA,EAAE,OAAO,KAAM,EAAA;AAAA;AACxB;AACF;AAGF,EAAO,OAAA,KAAA;AACT;AAEA,SAAS,eAAA,CAAgB,SAAuB,SAAuC,EAAA;AACrF,EAAA,MAAM,QAAW,GAAA,cAAA,CAAe,WAAY,CAAA,OAAA,CAAQ,QAAQ,CAAA;AAE5D,EAAA,OAAO,CAAC,KAAqB,KAAA;AAC3B,IAAA,IAAI,QAAkB,EAAC;AAEvB,IAAW,KAAA,MAAA,CAAA,IAAK,MAAM,MAAQ,EAAA;AAC5B,MAAI,IAAA,OAAA,CAAQ,SAAc,KAAA,mBAAA,CAAoB,CAAG,EAAA,KAAA,EAAO,SAAS,CAAK,IAAA,CAAA,CAAE,IAAS,KAAA,SAAA,CAAU,MAAQ,EAAA;AACjG,QAAA,KAAA,GAAQ,CAAE,CAAA,MAAA;AAAA;AACZ;AAGF,IAAA,IAAI,CAAC,KAAA,CAAM,MAAU,IAAA,CAAC,QAAU,EAAA;AAC9B,MAAO,OAAA,KAAA,CAAA;AAAA;AAGT,IAAA,MAAM,GAAM,GAAA,IAAI,KAAM,CAAA,KAAA,CAAM,MAAM,CAAA;AAClC,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,GAAA,CAAI,QAAQ,CAAK,EAAA,EAAA;AACnC,MAAA,GAAA,CAAI,CAAC,CAAI,GAAA,QAAA,CAAS,SAAU,CAAA,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA;AAGtC,IAAO,OAAA,GAAA;AAAA,GACT;AACF;AAEO,SAAS,mBAAmB,OAA2C,EAAA;AAhpB9E,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAipBE,EAAI,IAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,KAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAe,MAAQ,EAAA;AACzB,IAAA,OAAO,OAAQ,CAAA,KAAA;AAAA;AAGjB,EAAA,QAAQ,QAAQ,IAAM;AAAA,IACpB,KAAK,qBAAwC,4BAAA;AAC3C,MAAM,MAAA,EAAE,YAAe,GAAA,OAAA;AACvB,MAAA,OAAO,CAAc,WAAA,EAAA,CAAA,EAAA,GAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,OAAZ,KAAA,IAAA,GAAA,EAAA,GAAuB,EAAE,CAAA,EAAA,CAAG,UAAY,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,KAAA,IAAQ,CAAI,CAAA,EAAA,UAAA,CAAW,KAAK,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,CAAA;AAAA;AACnG,IACA,KAAK,iBAAoC,wBAAA;AACvC,MAAM,MAAA,EAAE,QAAW,GAAA,OAAA;AACnB,MAAA,OAAO,IAAG,EAAQ,GAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,eAAA,KAAR,IAA2B,GAAA,EAAA,GAAA,EAAE,YAAW,EAAQ,GAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,OAAA,KAAR,IAAmB,GAAA,EAAA,GAAA,EAAE,IACrE,MAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,KAAA,IAAQ,IAAI,MAAO,CAAA,KAAK,MAAM,EACxC,CAAA,CAAA;AAAA;AACF,IACA,KAAK,OAAmC,uBAAA;AACtC,MAAM,MAAA,EAAE,OAAU,GAAA,OAAA;AAClB,MAAA,OAAO,CAAG,EAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,QAAP,KAAA,IAAA,GAAA,EAAA,GAAmB,EAAE,CAAA,EAAA,CAAG,KAAO,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,SAAA,IAAY,CAAI,CAAA,EAAA,KAAA,CAAM,SAAS,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,CAAA;AAAA;AAClF,IACA,KAAK,QAAoC,wBAAA;AACvC,MAAM,MAAA,EAAE,QAAW,GAAA,OAAA;AACnB,MAAA,MAAM,KAAQ,GAAA,CAAA,EAAA,CAAG,EAAQ,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,IAAA,KAAR,mBAAc,OAAd,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB,OAAvB,KAAA,IAAA,GAAA,EAAA,GAAA,CAAkC,EAAQ,GAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,IAAA,KAAR,IAAc,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,KAAhD,YAAyD,EAAE,CAAA,CAAA,EAAA,CAAI,EAAQ,GAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,QAAA,KAAR,IAAoB,GAAA,EAAA,GAAA,EAAE,CAAI,CAAA,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,UAAR,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA,KAAf,IAAwB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA,KAAxB,aAAmC,EAAQ,GAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,KAAA,KAAR,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,KAAlD,YAA2D,EAAE,CAAA,CAAA;AAIvK,MAAO,OAAA,KAAA,CAAM,OAAQ,CAAA,KAAA,EAAO,EAAE,CAAA;AAAA;AAChC,IACA,KAAK,WAAA;AACH,MAAA;AACE,QAAA,MAAM,IAAI,aAAc,CAAA,WAAA,CAAA,CAAY,EAAQ,GAAA,OAAA,CAAA,MAAA,KAAR,mBAAgB,OAAO,CAAA;AAC3D,QAAA,IAAI,CAAG,EAAA;AACL,UAAA,OAAO,CAAE,CAAA,IAAA;AAAA;AACX;AAEF,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAO,OAAA,KAAA;AAAA;AAGX,EAAO,OAAA,MAAA;AACT;;AC1pBO,MAAM,sBAA6E,GAAA;AAAA,EACxF,IAAI,iBAAkB,CAAA,WAAA;AAAA,EACtB,IAAM,EAAA,oBAAA;AAAA,EACN,WACE,EAAA,gHAAA;AAAA,EACF,cAAgB,EAAA;AAAA,IACd,aAAe,EAAA,OAAA;AAAA,IACf,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,QAAU,EAAA,CAAC,OAAY,KAAA,CAAC,WACtB,MAAO,CAAA,IAAA;AAAA,IACLuB,aAAA,CAAI,CAAC,UAAe,KAAA;AAClB,MAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,UAAU,CAAK,IAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AACvD,QAAO,OAAA,UAAA;AAAA;AAET,MAAA,OAAO,CAAC,iBAAA,CAAkB,UAAY,EAAA,OAAO,CAAC,CAAA;AAAA,KAC/C;AAAA;AAEP,CAAA;AAKgB,SAAA,iBAAA,CAAkB,MAAmB,IAAgD,EAAA;AAtDrG,EAAA,IAAA,EAAA;AAuDE,EAAA,IAAI,UAAa,GAAA,IAAA;AACjB,EAAI,IAAA,SAAA,GAAY,IAAK,CAAA,CAAC,CAAE,CAAA,MAAA;AACxB,EAAM,MAAA,cAAA,GAAA,CAAiB,EAAK,GAAA,IAAA,CAAA,cAAA,KAAL,IAAuB,GAAA,EAAA,GAAA,OAAA;AAC9C,EAAA,IAAI,SAAkB,EAAC;AAEvB,EAAA,KAAA,MAAW,SAAS,IAAM,EAAA;AACxB,IAAI,IAAA,SAAA,KAAc,MAAM,MAAQ,EAAA;AAC9B,MAAa,UAAA,GAAA,KAAA;AACb,MAAA,SAAA,GAAY,IAAK,CAAA,GAAA,CAAI,SAAW,EAAA,KAAA,CAAM,MAAM,CAAA;AAAA;AAG9C,IAAW,KAAA,MAAA,CAAA,IAAK,MAAM,MAAQ,EAAA;AAC5B,MAAM,MAAA,IAAA,GAAO,EAAE,GAAG,CAAE,EAAA;AACpB,MAAA,IAAA,CAAK,KAAQ,GAAA,KAAA,CAAA;AACb,MAAA,IAAI,MAAM,IAAM,EAAA;AACd,QAAI,IAAA,IAAA,CAAK,kBAAkB,MAA+B,aAAA,CAE1D,MAAA,IAAW,IAAK,CAAA,aAAA,KAAkB,OAAgC,cAAA;AAChE,UAAA,IAAA,CAAK,MAAS,GAAA,EAAE,GAAG,CAAA,CAAE,MAAO,EAAA;AAC5B,UAAK,IAAA,CAAA,MAAA,CAAO,cAAc,CAAA,GAAI,KAAM,CAAA,IAAA;AAAA,mBAC3B,CAAC,IAAA,CAAK,IAAQ,IAAA,IAAA,CAAK,SAAS,4BAA8B,EAAA;AACnE,UAAA,IAAA,CAAK,OAAO,KAAM,CAAA,IAAA;AAAA,SACb,MAAA;AACL,UAAA,IAAA,CAAK,OAAO,CAAG,EAAA,KAAA,CAAM,IAAI,CAAA,MAAA,EAAM,EAAE,IAAI,CAAA,CAAA;AAAA;AACvC;AAEF,MAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA;AAClB;AAIF,EAAA,IAAI,CAAC,UAAY,EAAA;AACf,IAAS,MAAA,GAAA,MAAA,CAAO,GAAI,CAAA,CAAC,CAAM,KAAA;AACzB,MAAI,IAAA,CAAA,CAAE,MAAO,CAAA,MAAA,KAAW,SAAW,EAAA;AACjC,QAAO,OAAA,CAAA;AAAA;AAET,MAAM,MAAA,MAAA,GAAS,CAAE,CAAA,MAAA,CAAO,KAAM,EAAA;AAC9B,MAAA,MAAA,CAAO,MAAS,GAAA,SAAA;AAChB,MAAO,OAAA;AAAA,QACL,GAAG,CAAA;AAAA,QACH;AAAA,OACF;AAAA,KACD,CAAA;AAAA;AAGH,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,MAAQ,EAAA;AAAA,GACV;AACF;;AC7DO,MAAM,2BAAkG,GAAA;AAAA,EAC7G,IAAI,iBAAkB,CAAA,gBAAA;AAAA,EACtB,IAAM,EAAA,oBAAA;AAAA,EACN,WAAa,EAAA,4CAAA;AAAA,EACb,cAAgB,EAAA;AAAA,IACd,QAAQ,EAAC;AAAA,IACT,WAAA,EAAa,CAAC,EAAE,WAAa,EAAA,KAAA,CAAA,EAAW,eAAiB,EAAA,KAAA,CAAA,EAAW,UAAY,EAAA,KAAA,CAAA,EAAW,QAAU,EAAA,KAAA,CAAA,EAAW;AAAA,GAClH;AAAA,EAEA,UAAU,CAAC,OAAA,EAAS,QAAQ,CAAC,MAAA,KAC3B,OAAO,IAAK,CAAAA,aAAA,CAAI,CAAC,IAAA,KAAS,4BAA4B,WAAY,CAAA,OAAA,EAAS,GAAG,CAAE,CAAA,IAAI,CAAC,CAAC,CAAA;AAAA,EAExF,WAAa,EAAA,CAAC,OAAgD,KAAA,CAAC,IAAsB,KAAA;AAvDvF,IAAA,IAAA,EAAA;AAwDI,IAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAK,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AAC7C,MAAO,OAAA,IAAA;AAAA;AAET,IAAA,OAAA,CAAO,EAAkB,GAAA,iBAAA,CAAA,OAAA,EAAS,IAAI,CAAA,KAA/B,YAAoC,EAAC;AAAA;AAEhD,CAAA;AAQgB,SAAA,iBAAA,CAAkB,SAA6C,MAAkC,EAAA;AAC/G,EAAI,IAAA,CAAC,OAAQ,CAAA,WAAA,CAAY,MAAQ,EAAA;AAC/B,IAAO,OAAA,MAAA;AAAA;AAGT,EAAM,MAAA,UAAA,GAAa,OAAO,GAAI,CAAA,CAAC,WAAW,EAAE,GAAG,OAAQ,CAAA,CAAA;AAEvD,EAAW,KAAA,MAAA,UAAA,IAAc,QAAQ,WAAa,EAAA;AAC5C,IAAI,IAAA,CAAC,WAAW,WAAa,EAAA;AAC3B,MAAA;AAAA;AAEF,IAAM,MAAA,OAAA,GAAU,cAAc,GAAI,CAAA,cAAA,CAAe,MAAM,CAAE,CAAA,GAAA,CAAI,WAAW,WAAW,CAAA;AACnF,IAAA,KAAA,MAAW,SAAS,UAAY,EAAA;AAC9B,MAAA,KAAA,CAAM,MAAS,GAAA,KAAA,CAAM,MAAO,CAAA,GAAA,CAAI,CAAC,KAAU,KAAA;AACzC,QAAA,IAAI,OAAQ,CAAA,KAAA,EAAO,KAAO,EAAA,UAAU,CAAG,EAAA;AACrC,UAAO,OAAA,gBAAA,CAAiB,OAAO,UAAU,CAAA;AAAA;AAE3C,QAAO,OAAA,KAAA;AAAA,OACR,CAAA;AAAA;AACH;AAGF,EAAO,OAAA,UAAA;AACT;AAUgB,SAAA,gBAAA,CAAiB,OAAc,IAAsC,EAAA;AACnF,EAAA,QAAQ,KAAK,eAAiB;AAAA,IAC5B,KAAK,SAAU,CAAA,IAAA;AACb,MAAO,OAAA,eAAA,CAAgB,KAAO,EAAA,IAAA,CAAK,UAAU,CAAA;AAAA,IAC/C,KAAK,SAAU,CAAA,MAAA;AACb,MAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,IACjC,KAAK,SAAU,CAAA,MAAA;AACb,MAAO,OAAA,kBAAA,CAAmB,KAAO,EAAA,IAAA,CAAK,UAAY,EAAA,EAAE,UAAU,IAAK,CAAA,QAAA,EAAY,EAAA,IAAA,CAAK,QAAQ,CAAA;AAAA,IAC9F,KAAK,SAAU,CAAA,OAAA;AACb,MAAA,OAAO,oBAAoB,KAAK,CAAA;AAAA,IAClC,KAAK,SAAU,CAAA,IAAA;AACb,MAAO,OAAA,gBAAA,CAAiB,KAAO,EAAA,IAAA,CAAK,UAAU,CAAA;AAAA,IAChD,KAAK,SAAU,CAAA,KAAA;AACb,MAAA,OAAO,oBAAoB,KAAK,CAAA;AAAA,IAClC;AACE,MAAO,OAAA,KAAA;AAAA;AAEb;AAGA,MAAM,YAAe,GAAA,0EAAA;AAKL,SAAA,gBAAA,CAAiB,OAAc,UAA4B,EAAA;AACzE,EAAA,IAAI,IAAO,GAAA,UAAA,GAAa,EAAE,MAAA,EAAQ,YAAe,GAAA,KAAA,CAAA;AAEjD,EAAM,MAAA,UAAA,GAAa,KAAM,CAAA,MAAA,CAAO,KAAM,EAAA;AAEtC,EAAA,IAAI,eAAe,UAAW,CAAA,IAAA,CAAK,CAAC,CAAA,KAAM,KAAK,IAAI,CAAA;AACnD,EAAA,MAAM,WAAc,GAAA,OAAO,YAAiB,KAAA,QAAA,IAAY,UAAe,KAAA,GAAA;AACvE,EAAA,MAAM,YAAY,OAAO,YAAA,KAAiB,QAAY,IAAA,YAAA,CAAa,KAAK,YAAY,CAAA;AAEpF,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,UAAA,CAAW,QAAQ,CAAK,EAAA,EAAA;AAC1C,IAAI,IAAA,UAAA,CAAW,CAAC,CAAG,EAAA;AACjB,MAAA,IAAI,MAAS,GAAA,SAAA,GAAY,IAAK,CAAA,KAAA,CAAM,WAAW,CAAC,CAAC,CAAI,GAAA,aAAA,CAAc,UAAW,CAAA,CAAC,CAAG,EAAA,IAAI,EAAE,OAAQ,EAAA;AAChG,MAAI,IAAA,MAAA,CAAO,QAAS,CAAA,MAAM,CAAG,EAAA;AAC3B,QAAA,UAAA,CAAW,CAAC,CAAA,GAAI,WAAc,GAAA,MAAA,GAAS,GAAO,GAAA,MAAA;AAAA,OACzC,MAAA;AACL,QAAA,UAAA,CAAW,CAAC,CAAI,GAAA,IAAA;AAAA;AAClB,KACK,MAAA;AACL,MAAA,UAAA,CAAW,CAAC,CAAI,GAAA,IAAA;AAAA;AAClB;AAGF,EAAO,OAAA;AAAA,IACL,GAAG,KAAA;AAAA,IACH,MAAM,SAAU,CAAA,IAAA;AAAA,IAChB,MAAQ,EAAA;AAAA,GACV;AACF;AAEA,SAAS,mBAAmB,KAAqB,EAAA;AAC/C,EAAM,MAAA,SAAA,GAAY,KAAM,CAAA,MAAA,CAAO,KAAM,EAAA;AAErC,EAAA,MAAM,kBAAkB,SAAU,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,OAAO,MAAM,QAAQ,CAAA;AAEnE,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,SAAA,CAAU,QAAQ,CAAK,EAAA,EAAA;AACzC,IAAI,IAAA,aAAA,GAAgB,UAAU,CAAC,CAAA;AAE/B,IAAA,IAAI,eAAmB,IAAA,aAAA,IAAiB,IAAQ,IAAA,OAAO,kBAAkB,QAAU,EAAA;AAGjF,MAAgB,aAAA,GAAA,aAAA,CAAc,OAAQ,CAAA,IAAA,EAAM,EAAE,CAAA;AAAA;AAGhD,IAAA,MAAM,SAAS,CAAC,aAAA;AAEhB,IAAA,SAAA,CAAU,CAAC,CAAI,GAAA,MAAA,CAAO,QAAS,CAAA,MAAM,IAAI,MAAS,GAAA,IAAA;AAAA;AAGpD,EAAO,OAAA;AAAA,IACL,GAAG,KAAA;AAAA,IACH,MAAM,SAAU,CAAA,MAAA;AAAA,IAChB,MAAQ,EAAA;AAAA,GACV;AACF;AAEA,SAAS,oBAAoB,KAAqB,EAAA;AAChD,EAAM,MAAA,aAAA,GAAgB,KAAM,CAAA,MAAA,CAAO,KAAM,EAAA;AAEzC,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,aAAA,CAAc,QAAQ,CAAK,EAAA,EAAA;AAC7C,IAAA,aAAA,CAAc,CAAC,CAAI,GAAA,OAAA,CAAQ,CAAC,CAAC,aAAA,CAAc,CAAC,CAAC,CAAA;AAAA;AAG/C,EAAO,OAAA;AAAA,IACL,GAAG,KAAA;AAAA,IACH,MAAM,SAAU,CAAA,OAAA;AAAA,IAChB,MAAQ,EAAA;AAAA,GACV;AACF;AAKO,SAAS,kBACd,CAAA,KAAA,EACA,UACA,EAAA,YAAA,EACA,QACO,EAAA;AACP,EAAA,IAAI,SAAS,KAAM,CAAA,MAAA;AAEnB,EAAA,QAAQ,MAAM,IAAM;AAAA,IAClB,KAAK,SAAU,CAAA,IAAA;AACb,MAAS,MAAA,GAAA,MAAA,CAAO,GAAI,CAAA,CAAC,CAAM,KAAA,aAAA,CAAc,GAAG,YAAY,CAAA,CAAE,MAAO,CAAA,UAAU,CAAC,CAAA;AAC5E,MAAA;AAAA,IAEF,KAAK,SAAU,CAAA,KAAA;AACb,MAAS,MAAA,GAAA,MAAA,CAAO,GAAI,CAAA,CAAC,CAAM,KAAA;AACzB,QAAA,IAAA,CAAI,QAAU,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAA,MAAA,KAAU,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAG,EAAA;AACxC,UAAO,OAAA,CAAA,CAAE,KAAK,QAAQ,CAAA;AAAA;AAExB,QAAO,OAAA,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,OACxB,CAAA;AACD,MAAA;AAAA,IAEF;AACE,MAAA,MAAA,GAAS,OAAO,GAAI,CAAA,CAAC,CAAM,KAAA,CAAA,EAAG,CAAC,CAAE,CAAA,CAAA;AAAA;AAGrC,EAAO,OAAA;AAAA,IACL,GAAG,KAAA;AAAA,IACH,MAAM,SAAU,CAAA,MAAA;AAAA,IAChB;AAAA,GACF;AACF;AAEA,SAAS,oBAAoB,KAAqB,EAAA;AAChD,EAAM,MAAA,aAAA,GAAgB,KAAM,CAAA,MAAA,CAAO,KAAM,EAAA;AAEzC,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,aAAA,CAAc,QAAQ,CAAK,EAAA,EAAA;AAC7C,IAAI,IAAA;AACF,MAAA,aAAA,CAAc,CAAC,CAAI,GAAA,IAAA,CAAK,KAAM,CAAA,aAAA,CAAc,CAAC,CAAC,CAAA;AAAA,KACxC,CAAA,OAAA,CAAA,EAAA;AACN,MAAA,aAAA,CAAc,CAAC,CAAI,GAAA,IAAA;AAAA;AACrB;AAGF,EAAO,OAAA;AAAA,IACL,GAAG,KAAA;AAAA,IACH,MAAM,SAAU,CAAA,KAAA;AAAA,IAChB,MAAQ,EAAA;AAAA,GACV;AACF;AAUgB,SAAA,eAAA,CAAgB,OAAc,UAA4B,EAAA;AACxE,EAAA,MAAM,sBAAyB,GAAA,OAAO,KAAM,CAAA,MAAA,CAAO,CAAC,CAAM,KAAA,QAAA;AAE1D,EAAA,MAAM,sBAAsB,UAAe,KAAA,GAAA;AAE3C,EAAA,IAAI,KAAM,CAAA,IAAA,KAAS,SAAU,CAAA,IAAA,IAAQ,sBAAwB,EAAA;AAC3D,IAAO,OAAA,KAAA;AAAA;AAET,EAAI,IAAA,sBAAA,IAA0B,CAAC,mBAAqB,EAAA;AAClD,IAAO,OAAA;AAAA,MACL,GAAG,KAAA;AAAA,MACH,MAAM,SAAU,CAAA;AAAA;AAAA,KAClB;AAAA;AAEF,EAAO,OAAA,gBAAA,CAAiB,OAAO,UAAU,CAAA;AAC3C;AAEA,SAAS,gBAAA,CAAiB,OAAc,MAAiC,EAAA;AACvE,EAAM,MAAA,UAAA,GAAa,EAAE,GAAG,MAAO,EAAA;AAC/B,EAAM,MAAA,UAAA,GAAa,KAAM,CAAA,MAAA,CAAO,KAAM,EAAA;AAGtC,EAAM,MAAA,MAAA,uBAAa,GAAqB,EAAA;AACxC,EAAA,IAAI,UAAW,CAAA,IAAA,IAAQ,UAAW,CAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACjD,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,UAAW,CAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AAC/C,MAAA,MAAA,CAAO,GAAI,CAAA,UAAA,CAAW,IAAK,CAAA,CAAC,GAAG,CAAC,CAAA;AAAA;AAClC,GACK,MAAA;AACL,IAAO,OAAA,KAAA;AAAA;AAIT,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,UAAA,CAAW,QAAQ,CAAK,EAAA,EAAA;AAC1C,IAAM,MAAA,KAAA,GAAQ,WAAW,CAAC,CAAA;AAC1B,IAAA,UAAA,CAAW,CAAC,CAAA,GAAI,MAAO,CAAA,GAAA,CAAI,KAAK,CAAA;AAAA;AAGlC,EAAO,OAAA;AAAA,IACL,GAAG,KAAA;AAAA,IACH,MAAQ,EAAA;AAAA,MACN,GAAG,KAAM,CAAA,MAAA;AAAA,MACT,IAAM,EAAA;AAAA,QACJ,IAAM,EAAA;AAAA;AACR,KACF;AAAA,IACA,MAAM,SAAU,CAAA,IAAA;AAAA,IAChB,MAAQ,EAAA;AAAA,GACV;AACF;;ACpSO,MAAM,uBAA8D,GAAA;AAAA,EACzE,IAAI,iBAAkB,CAAA,YAAA;AAAA,EACtB,IAAM,EAAA,eAAA;AAAA,EACN,WAAa,EAAA,2BAAA;AAAA,EACb,gBAAgB,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjB,QAAU,EAAA,CAAC,OAAwB,EAAA,GAAA,KAAQ,CAAC,MAAW,KAAA;AAxBzD,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAyBI,IAAA,IAAI,CAAC,OAAA,CAAQ,OAAW,IAAA,CAAC,QAAQ,OAAS,EAAA;AACxC,MAAA,OAAO,OAAO,IAAK,CAAA,eAAA,CAAgB,SAAS,EAAC,EAAG,GAAG,CAAC,CAAA;AAAA;AAGtD,IAAA,IAAI,QAAO,CAAA,EAAA,GAAA,OAAA,CAAQ,OAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,aAAY,QAAU,EAAA;AAChD,MAAA,OAAA,CAAQ,OAAQ,CAAA,OAAA,GAAA,CAAU,EAAQ,GAAA,OAAA,CAAA,OAAA,KAAR,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA;AAAA,KAC7C,MAAA,IAAW,SAAO,EAAQ,GAAA,CAAA,EAAA,GAAA,OAAA,CAAA,OAAA,KAAR,mBAAiB,OAAjB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA0B,aAAY,QAAU,EAAA;AAChE,MAAA,OAAA,CAAQ,QAAQ,OAAQ,CAAA,OAAA,GAAA,CAAU,EAAQ,GAAA,OAAA,CAAA,OAAA,KAAR,mBAAiB,OAAQ,CAAA,OAAA;AAAA;AAG7D,IAAA,IAAI,QAAO,CAAA,EAAA,GAAA,OAAA,CAAQ,OAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,aAAY,QAAU,EAAA;AAChD,MAAA,OAAA,CAAQ,OAAQ,CAAA,OAAA,GAAA,CAAU,EAAQ,GAAA,OAAA,CAAA,OAAA,KAAR,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA;AAAA,KAC7C,MAAA,IAAW,SAAO,EAAQ,GAAA,CAAA,EAAA,GAAA,OAAA,CAAA,OAAA,KAAR,mBAAiB,OAAjB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA0B,aAAY,QAAU,EAAA;AAChE,MAAA,OAAA,CAAQ,QAAQ,OAAQ,CAAA,OAAA,GAAA,CAAU,EAAQ,GAAA,OAAA,CAAA,OAAA,KAAR,mBAAiB,OAAQ,CAAA,OAAA;AAAA;AAG7D,IAAA,OAAO,MAAO,CAAA,IAAA;AAAA,MACZA,aAAA,CAAI,CAAC,IAAS,KAAA;AACZ,QAAA,MAAM,UAAU,OAAQ,CAAA,OAAA,GAAU,eAAgB,CAAA,OAAA,CAAQ,OAAO,CAAI,GAAA,IAAA;AACrE,QAAA,MAAM,UAAU,OAAQ,CAAA,OAAA,GAAU,eAAgB,CAAA,OAAA,CAAQ,OAAO,CAAI,GAAA,IAAA;AAErE,QAAA,MAAM,YAAyB,EAAC;AAChC,QAAA,KAAA,MAAW,UAAU,IAAM,EAAA;AAEzB,UAAA,MAAM,SAAkB,EAAC;AACzB,UAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,MAAO,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAC7C,YAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,MAAA,CAAO,CAAC,CAAA;AAE7B,YAAA,IAAI,OAAS,EAAA;AACX,cAAA,IAAI,OAAQ,CAAA,KAAA,EAAO,MAAQ,EAAA,IAAI,CAAG,EAAA;AAChC,gBAAA;AAAA;AAEF,cAAA,IAAI,CAAC,OAAS,EAAA;AACZ,gBAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA;AACnB;AAEF,YAAA,IAAI,OAAW,IAAA,OAAA,CAAQ,KAAO,EAAA,MAAA,EAAQ,IAAI,CAAG,EAAA;AAC3C,cAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA;AACnB;AAGF,UAAI,IAAA,CAAC,OAAO,MAAQ,EAAA;AAClB,YAAA;AAAA;AAEF,UAAA,MAAM,IAAO,GAAA;AAAA,YACX,GAAG,MAAA;AAAA;AAAA,YACH;AAAA;AAAA,WACF;AACA,UAAA,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA;AAErB,QAAO,OAAA,SAAA;AAAA,OACR;AAAA,KACH;AAAA;AAEJ,CAAA;AAEO,MAAM,uBAA8D,GAAA;AAAA,EACzE,IAAI,iBAAkB,CAAA,YAAA;AAAA,EACtB,IAAM,EAAA,eAAA;AAAA,EACN,WAAa,EAAA,2BAAA;AAAA,EACb,gBAAgB,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjB,QAAU,EAAA,CAAC,OAAS,EAAA,GAAA,KAAQ,CAAC,MAAW,KAAA;AACtC,IAAA,IAAI,CAAC,OAAA,CAAQ,OAAW,IAAA,CAAC,QAAQ,OAAS,EAAA;AACxC,MAAA,OAAO,OAAO,IAAK,CAAA,eAAA,CAAgB,SAAS,EAAC,EAAG,GAAG,CAAC,CAAA;AAAA;AAGtD,IAAA,OAAO,MAAO,CAAA,IAAA;AAAA,MACZA,aAAA,CAAI,CAAC,IAAS,KAAA;AACZ,QAAA,MAAM,UAAU,OAAQ,CAAA,OAAA,GAAU,gBAAiB,CAAA,OAAA,CAAQ,OAAO,CAAI,GAAA,IAAA;AACtE,QAAA,MAAM,UAAU,OAAQ,CAAA,OAAA,GAAU,gBAAiB,CAAA,OAAA,CAAQ,OAAO,CAAI,GAAA,IAAA;AAEtE,QAAA,MAAM,YAAyB,EAAC;AAChC,QAAA,KAAA,MAAW,UAAU,IAAM,EAAA;AACzB,UAAA,IAAI,OAAS,EAAA;AACX,YAAI,IAAA,OAAA,CAAQ,MAAM,CAAG,EAAA;AACnB,cAAA;AAAA;AAEF,YAAA,IAAI,CAAC,OAAS,EAAA;AACZ,cAAA,SAAA,CAAU,KAAK,MAAM,CAAA;AAAA;AACvB;AAEF,UAAI,IAAA,OAAA,IAAW,OAAQ,CAAA,MAAM,CAAG,EAAA;AAC9B,YAAA,SAAA,CAAU,KAAK,MAAM,CAAA;AAAA;AACvB;AAEF,QAAO,OAAA,SAAA;AAAA,OACR;AAAA,KACH;AAAA;AAEJ,CAAA;;AC1GO,MAAM,6BAA2F,GAAA;AAAA,EACtG,IAAI,iBAAkB,CAAA,kBAAA;AAAA,EACtB,IAAM,EAAA,uBAAA;AAAA,EACN,WAAa,EAAA,2BAAA;AAAA,EACb,gBAAgB,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjB,UAAU,CAAC,OAAA,EAAS,GAAQ,KAAA,CAAC,WAC3B,MAAO,CAAA,IAAA;AAAA,IACL,uBAAwB,CAAA,QAAA;AAAA,MACtB;AAAA,QACE,OAAS,EAAA,gBAAA,CAAiB,OAAQ,CAAA,OAAA,EAAS,QAAQ,UAAU,CAAA;AAAA,QAC7D,OAAS,EAAA,gBAAA,CAAiB,OAAQ,CAAA,OAAA,EAAS,QAAQ,UAAU;AAAA,OAC/D;AAAA,MACA;AAAA;AACF;AAEN,CAAA;AAGa,MAAA,gBAAA,GAAmB,CAC9B,OAAA,EACA,UAC8B,KAAA;AAC9B,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAO,OAAA,KAAA,CAAA;AAAA;AAGT,EAAA,MAAM,EAAE,KAAA,EAAO,OAAS,EAAA,QAAA,EAAa,GAAA,OAAA;AAErC,EAAA,IAAI,cAAc,QAAU,EAAA;AAC1B,IAAA,MAAM,aAAgB,GAAA,QAAA;AAEtB,IAAI,IAAA,UAAA,CAAW,IAAK,CAAA,aAAa,CAAG,EAAA;AAClC,MAAM,MAAA,eAAA,GAAkB,aAAc,CAAA,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,CAAG,EAAA,CAAA,CAAE,CAAE,CAAA,KAAA,CAAM,GAAG,CAAA;AACrE,MAAO,OAAA,EAAE,IAAI,cAAe,CAAA,OAAA,EAAS,SAAS,EAAE,KAAA,EAAO,iBAAkB,EAAA;AAAA;AAE3E,IAAO,OAAA,EAAE,EAAI,EAAA,cAAA,CAAe,OAAS,EAAA,OAAA,EAAS,EAAE,KAAA,EAAO,aAAc,CAAA,KAAA,CAAM,GAAG,CAAA,EAAI,EAAA;AAAA;AAGpF,EAAK,IAAA,CAAA,CAAC,MAAM,OAAQ,CAAA,KAAK,KAAK,KAAM,CAAA,MAAA,KAAW,CAAM,KAAA,CAAC,OAAS,EAAA;AAC7D,IAAO,OAAA,KAAA,CAAA;AAAA;AAGT,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAA,OAAO,EAAE,EAAI,EAAA,cAAA,CAAe,SAAS,OAAS,EAAA,EAAE,OAAQ,EAAA;AAAA;AAG1D,EAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAK,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AAC/C,IAAA,OAAO,EAAE,EAAA,EAAI,cAAe,CAAA,QAAA,EAAU,SAAS,OAAQ,EAAA;AAAA;AAGzD,EAAA,OAAO,EAAE,EAAA,EAAI,cAAe,CAAA,eAAA,EAAiB,OAAQ,EAAA;AACvD,CAAA;;AC1DO,MAAM,8BAA6F,GAAA;AAAA,EACxG,IAAI,iBAAkB,CAAA,aAAA;AAAA,EACtB,IAAM,EAAA,4BAAA;AAAA,EACN,WAAa,EAAA,4BAAA;AAAA,EACb,gBAAgB,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjB,QAAU,EAAA,CAAC,OAAS,EAAA,GAAA,KAAQ,CAAC,MAAW,KAAA;AACtC,IAAA,MAAM,gBAA+B,EAAC;AACtC,IAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,MAAA,aAAA,CAAc,OAAU,GAAA;AAAA,QACtB,IAAI,cAAe,CAAA,OAAA;AAAA,QACnB,SAAS,OAAQ,CAAA;AAAA,OACnB;AAAA;AAEF,IAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,MAAA,aAAA,CAAc,OAAU,GAAA;AAAA,QACtB,IAAI,cAAe,CAAA,OAAA;AAAA,QACnB,SAAS,OAAQ,CAAA;AAAA,OACnB;AAAA;AAGF,IAAA,OAAO,OAAO,IAAK,CAAA,uBAAA,CAAwB,QAAS,CAAA,aAAA,EAAe,GAAG,CAAC,CAAA;AAAA;AAE3E,CAAA;;ACPO,MAAM,wBAAiF,GAAA;AAAA,EAC5F,IAAI,iBAAkB,CAAA,aAAA;AAAA,EACtB,IAAM,EAAA,uBAAA;AAAA,EACN,WAAa,EAAA,4CAAA;AAAA,EACb,cAAgB,EAAA;AAAA,IACd,SAAS,EAAC;AAAA,IACV,IAAM,EAAA,SAAA;AAAA,IACN,KAAO,EAAA,KAAA;AAAA,GACT;AAAA,EAEA,QAAU,EAAA,CAAC,OAAS,EAAA,GAAA,KAAQ,CAAC,MAAW,KAAA;AACtC,IAAA,MAAM,UAAU,OAAQ,CAAA,OAAA;AACxB,IAAM,MAAA,QAAA,GAAW,QAAQ,KAAU,KAAA,KAAA;AACnC,IAAM,MAAA,OAAA,GAAU,QAAQ,IAAS,KAAA,SAAA;AAEjC,IAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,OAAO,CAAK,IAAA,OAAA,CAAQ,WAAW,CAAG,EAAA;AACnD,MAAA,OAAO,OAAO,IAAK,CAAA,eAAA,CAAgB,SAAS,EAAC,EAAG,GAAG,CAAC,CAAA;AAAA;AAGtD,IAAA,OAAO,MAAO,CAAA,IAAA;AAAA,MACZA,aAAA,CAAI,CAAC,IAAS,KAAA;AACZ,QAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACrB,UAAO,OAAA,IAAA;AAAA;AAGT,QAAA,MAAM,YAAyB,EAAC;AAEhC,QAAA,KAAA,MAAW,SAAS,IAAM,EAAA;AACxB,UAAM,MAAA,IAAA,uBAAW,GAAY,EAAA;AAC7B,UAAM,MAAA,gBAAA,GAAmB,qBAAsB,CAAA,KAAA,EAAO,IAAI,CAAA;AAE1D,UAAM,MAAA,QAAA,GAAW,yBAA0B,CAAA,OAAA,EAAS,gBAAgB,CAAA;AAEpE,UAAA,KAAA,IAAS,KAAQ,GAAA,CAAA,EAAG,KAAQ,GAAA,KAAA,CAAM,QAAQ,KAAS,EAAA,EAAA;AACjD,YAAI,IAAA,IAAA,CAAK,GAAI,CAAA,KAAK,CAAG,EAAA;AACnB,cAAA;AAAA;AAGF,YAAA,IAAI,QAAW,GAAA,IAAA;AAEf,YAAA,KAAA,MAAW,WAAW,QAAU,EAAA;AAC9B,cAAA,MAAM,KAAQ,GAAA,OAAA,CAAQ,KAAO,EAAA,KAAA,EAAO,IAAI,CAAA;AAExC,cAAI,IAAA,CAAC,YAAY,KAAO,EAAA;AACtB,gBAAW,QAAA,GAAA,IAAA;AACX,gBAAA;AAAA;AAGF,cAAI,IAAA,QAAA,IAAY,CAAC,KAAO,EAAA;AACtB,gBAAW,QAAA,GAAA,KAAA;AACX,gBAAA;AAAA;AAGF,cAAW,QAAA,GAAA,KAAA;AAAA;AAGb,YAAA,IAAI,QAAU,EAAA;AACZ,cAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA;AAChB;AAGF,UAAA,MAAM,SAAkB,EAAC;AACzB,UAAM,MAAA,WAAA,GAAc,UAAU,IAAK,CAAA,IAAA,GAAO,KAAK,CAAC,CAAA,CAAE,SAAS,IAAK,CAAA,IAAA;AAEhE,UAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,YAAA,MAAM,SAAS,EAAC;AAEhB,YAAA,KAAA,IAAS,KAAQ,GAAA,CAAA,EAAG,KAAQ,GAAA,KAAA,CAAM,QAAQ,KAAS,EAAA,EAAA;AACjD,cAAA,IAAI,OAAW,IAAA,IAAA,CAAK,GAAI,CAAA,KAAK,CAAG,EAAA;AAC9B,gBAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,MAAO,CAAA,KAAK,CAAC,CAAA;AAC/B,gBAAA;AAAA;AAGF,cAAA,IAAI,CAAC,OAAW,IAAA,CAAC,IAAK,CAAA,GAAA,CAAI,KAAK,CAAG,EAAA;AAChC,gBAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,MAAO,CAAA,KAAK,CAAC,CAAA;AAC/B,gBAAA;AAAA;AACF;AAIF,YAAA,MAAA,CAAO,IAAK,CAAA;AAAA,cACV,GAAG,KAAA;AAAA,cACH,MAAQ,EAAA,MAAA;AAAA,cACR,OAAO;AAAC,aACT,CAAA;AAAA;AAGH,UAAA,SAAA,CAAU,IAAK,CAAA;AAAA,YACb,GAAG,KAAA;AAAA,YACH,MAAA;AAAA,YACA,MAAQ,EAAA;AAAA,WACT,CAAA;AAAA;AAGH,QAAO,OAAA,SAAA;AAAA,OACR;AAAA,KACH;AAAA;AAEJ,CAAA;AAEA,MAAM,yBAAA,GAA4B,CAChC,OAAA,EACA,gBAC2E,KAAA;AAC3E,EAAA,MAAM,OAAO,MAAM,KAAA;AAEnB,EAAO,OAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,MAAW,KAAA;AAzIjC,IAAA,IAAA,EAAA;AA0II,IAAA,MAAM,UAAa,GAAA,CAAA,EAAA,GAAA,gBAAA,CAAiB,MAAO,CAAA,SAAS,MAAjC,IAAsC,GAAA,EAAA,GAAA,CAAA,CAAA;AAEzD,IAAA,IAAI,aAAa,CAAG,EAAA;AAClB,MAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,qDAAA,EAAwD,MAAO,CAAA,SAAS,CAAE,CAAA,CAAA;AACvF,MAAO,OAAA,IAAA;AAAA;AAGT,IAAM,MAAA,OAAA,GAAU,eAAgB,CAAA,MAAA,CAAO,MAAM,CAAA;AAC7C,IAAO,OAAA,CAAC,KAAO,EAAA,KAAA,EAAO,IAAS,KAAA,OAAA,CAAQ,KAAO,EAAA,KAAA,CAAM,MAAO,CAAA,UAAU,CAAG,EAAA,KAAA,EAAO,IAAI,CAAA;AAAA,GACpF,CAAA;AACH,CAAA;AAEA,MAAM,qBAAA,GAAwB,CAAC,KAAA,EAAkB,IAAsB,KAAA;AACrE,EAAA,MAAM,SAAiC,EAAC;AAExC,EAAA,KAAA,CAAM,MAAO,CAAA,OAAA,CAAQ,CAAC,KAAA,EAAO,UAAe,KAAA;AAC1C,IAAA,MAAM,SAAY,GAAA,mBAAA,CAAoB,KAAO,EAAA,KAAA,EAAO,IAAI,CAAA;AACxD,IAAA,MAAA,CAAO,SAAS,CAAI,GAAA,UAAA;AAAA,GACrB,CAAA;AAED,EAAO,OAAA,MAAA;AACT,CAAA;;ACpIY,IAAA,iCAAA,qBAAAqE,kCAAL,KAAA;AACL,EAAAA,kCAAAA,CAAAA,kCAAAA,CAAA,iBAAc,CAAd,CAAA,CAAA,GAAA,aAAA;AACA,EAAAA,kCAAAA,CAAAA,kCAAAA,CAAA,mBAAgB,CAAhB,CAAA,GAAA,eAAA;AACA,EAAAA,kCAAAA,CAAAA,kCAAAA,CAAA,gBAAa,CAAb,CAAA,GAAA,YAAA;AACA,EAAAA,kCAAAA,CAAAA,kCAAAA,CAAA,sBAAmB,CAAnB,CAAA,GAAA,kBAAA;AAJU,EAAAA,OAAAA,kCAAAA;AAAA,CAAA,EAAA,iCAAA,IAAA,EAAA;AAqFA,IAAA,YAAA,qBAAAC,aAAL,KAAA;AACL,EAAAA,cAAA,MAAO,CAAA,GAAA,MAAA;AACP,EAAAA,cAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,cAAA,MAAO,CAAA,GAAA,MAAA;AACP,EAAAA,cAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,cAAA,MAAO,CAAA,GAAA,MAAA;AALG,EAAAA,OAAAA,aAAAA;AAAA,CAAA,EAAA,YAAA,IAAA,EAAA;;ACnFZ,MAAM,mBAAA,GAAsB,CAAC,KAAkB,KAAA;AAC7C,EAAM,MAAA,GAAA,GAAM,KAAM,CAAA,KAAA,CAAM,GAAG,CAAA;AAC3B,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,GAAA,CAAI,QAAQ,CAAK,EAAA,EAAA;AACnC,IAAA,GAAA,CAAI,CAAC,CAAI,GAAA,GAAA,CAAI,CAAC,CAAA,CAAE,OAAO,CAAC,CAAA,CAAE,WAAY,EAAA,GAAI,IAAI,CAAC,CAAA,CAAE,KAAM,CAAA,CAAC,EAAE,WAAY,EAAA;AAAA;AAExE,EAAO,OAAA,GAAA;AACT,CAAA;AAEa,MAAA,uBAAA,GAA0B,CAAC,OAA4C,KAAA;AAClF,EAAA,OAAO,CAAC,KACN,KAAA,KAAA,CAAM,MAAO,CAAA,GAAA,CAAI,CAAC,KAAkB,KAAA;AAClC,IAAA,QAAQ,QAAQ,YAAc;AAAA,MAC5B,KAAK,YAAA;AACH,QAAA,OAAO,MAAM,WAAY,EAAA;AAAA,MAC3B,KAAK,YAAA;AACH,QAAA,OAAO,MAAM,WAAY,EAAA;AAAA,MAC3B,KAAK,eAAA;AACH,QAAO,OAAA,KAAA,CAAM,OAAO,CAAC,CAAA,CAAE,aAAgB,GAAA,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,MACtD,KAAK,YAAA;AACH,QAAA,OAAO,mBAAoB,CAAA,KAAK,CAAE,CAAA,IAAA,CAAK,GAAG,CAAA;AAAA,MAC5C,KAAK,aAAA;AACH,QAAA,OAAO,mBAAoB,CAAA,KAAK,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,MAC3C,KAAK,YAAA;AACH,QAAA,KAAA,GAAQ,mBAAoB,CAAA,KAAK,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAC1C,QAAO,OAAA,KAAA,CAAM,OAAO,CAAC,CAAA,CAAE,aAAgB,GAAA,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,MACtD,KAAK,YAAA;AACH,QAAA,OAAO,MAAM,WAAY,EAAA,CAAE,MAAM,GAAG,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,MAChD,KAAK,YAAA;AACH,QAAA,OAAO,MAAM,WAAY,EAAA,CAAE,MAAM,GAAG,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,MAChD,KAAK,MAAA;AACH,QAAA,OAAO,MAAM,IAAK,EAAA;AAAA,MACpB,KAAK,WAAA;AACH,QAAA,OAAO,KAAM,CAAA,SAAA,CAAU,OAAQ,CAAA,cAAA,EAAgB,QAAQ,YAAY,CAAA;AAAA;AACvE,GACD,CAAA;AACL,CAAA;AAEO,MAAM,uBAA+E,GAAA;AAAA,EAC1F,IAAI,iBAAkB,CAAA,YAAA;AAAA,EACtB,IAAM,EAAA,eAAA;AAAA,EACN,WAAa,EAAA,qCAAA;AAAA,EACb,cAAgB,EAAA,EAAE,WAAa,EAAA,EAAA,EAAI,cAAc,YAA6B,kBAAA;AAAA,EAC9E,YAAA,EAAc,CAAC,IAAsB,KAAA;AAGnC,IAAA,KAAA,MAAW,SAAS,IAAM,EAAA;AACxB,MAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,QAAI,IAAA,KAAA,CAAM,SAAS,QAAU,EAAA;AAC3B,UAAA,OAAO,iCAAkC,CAAA,UAAA;AAAA;AAC3C;AACF;AAGF,IAAA,OAAO,iCAAkC,CAAA,aAAA;AAAA,GAC3C;AAAA,EACA,QAAU,EAAA,CAAC,OAAY,KAAA,CAAC,WACtB,MAAO,CAAA,IAAA;AAAA,IACLtE,aAAA,CAAI,CAAC,IAAS,KAAA;AACZ,MAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACrB,QAAO,OAAA,IAAA;AAAA;AAGT,MAAM,MAAA,YAAA,GAAe,cAAc,GAAI,CAAA,cAAA,CAAe,MAAM,CAAE,CAAA,GAAA,CAAI,QAAQ,WAAW,CAAA;AACrF,MAAM,MAAA,oBAAA,GAAuB,wBAAwB,OAAO,CAAA;AAE5D,MAAM,MAAA,SAAA,GAAY,qBAAsB,CAAA,YAAA,EAAc,oBAAoB,CAAA;AAE1E,MAAO,OAAA,IAAA,CAAK,GAAI,CAAA,CAAC,KAAW,MAAA;AAAA,QAC1B,GAAG,KAAA;AAAA,QACH,MAAA,EAAQ,SAAU,CAAA,KAAA,EAAO,IAAI;AAAA,OAC7B,CAAA,CAAA;AAAA,KACH;AAAA;AAEP,CAAA;AAKO,MAAM,wBACX,CAAC,YAAA,EAA4B,oBAC7B,KAAA,CAAC,OAAkB,SAA2B,KAAA;AAC5C,EAAA,OAAO,KAAM,CAAA,MAAA,CAAO,GAAI,CAAA,CAAC,KAAU,KAAA;AAEjC,IAAA,IAAI,YAAa,CAAA,KAAA,EAAO,KAAO,EAAA,SAAS,CAAG,EAAA;AACzC,MAAM,MAAA,OAAA,GAAU,qBAAqB,KAAK,CAAA;AAE1C,MAAO,OAAA;AAAA,QACL,GAAG,KAAA;AAAA,QACH,MAAM,SAAU,CAAA,MAAA;AAAA,QAChB,MAAQ,EAAA;AAAA,OACV;AAAA;AAGF,IAAO,OAAA,KAAA;AAAA,GACR,CAAA;AACH,CAAA;;ACvGK,MAAM,qBAA2E,GAAA;AAAA,EACtF,IAAI,iBAAkB,CAAA,UAAA;AAAA,EACtB,IAAM,EAAA,aAAA;AAAA,EACN,WAAa,EAAA,uCAAA;AAAA,EACb,gBAAgB,EAAE,SAAA,EAAW,IAAI,YAAc,EAAA,EAAA,EAAI,aAAa,IAAK,EAAA;AAAA,EACrE,YAAA,EAAc,CAAC,IAAsB,KAAA;AAGnC,IAAA,KAAA,MAAW,SAAS,IAAM,EAAA;AACxB,MAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,QAAI,IAAA,KAAA,CAAM,SAAS,MAAQ,EAAA;AACzB,UAAA,OAAO,iCAAkC,CAAA,UAAA;AAAA;AAC3C;AACF;AAGF,IAAA,OAAO,iCAAkC,CAAA,aAAA;AAAA,GAC3C;AAAA,EACA,uBACE,EAAA,6FAAA;AAAA,EACF,UAAU,CAAC,OAAA,EAAS,GAAQ,KAAA,CAAC,WAC3B,MAAO,CAAA,IAAA;AAAA,IACLA,aAAA,CAAI,CAAC,IAAS,KAAA;AACZ,MAAO,OAAA,eAAA,CAAgB,OAAS,EAAA,IAAA,EAAM,GAAG,CAAA;AAAA,KAC1C;AAAA;AAEP,CAAA;AAKa,MAAA,eAAA,GAAkB,CAC7B,EAAE,SAAA,EAAW,cAAc,QAAS,EAAA,EACpC,MACA,GACG,KAAA;AAxDL,EAAA,IAAA,EAAA;AAyDE,EAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAK,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AAC7C,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,sBAAA,CAAuB,IAAI,CAAA;AAE3B,EAAe,YAAA,GAAA,CAAA,EAAA,GAAA,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAK,WAAY,CAAA,YAAA,CAAA,KAAjB,IAAkC,GAAA,EAAA,GAAA,YAAA;AAEjD,EAAO,OAAA,IAAA,CAAK,GAAI,CAAA,CAAC,KAAW,MAAA;AAAA,IAC1B,GAAG,KAAA;AAAA,IACH,MAAQ,EAAA,KAAA,CAAM,MAAO,CAAA,GAAA,CAAI,CAAC,KAAU,KAAA;AAnExC,MAAAV,IAAAA,GAAAA;AAoEM,MAAA,IAAA,CAAA,CAAIA,MAAA,KAAM,CAAA,KAAA,KAAN,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,GAAAA,CAAa,iBAAgB,SAAW,EAAA;AAC1C,QAAA,KAAA,GAAQ,mBAAmB,KAAO,EAAA,YAAA,EAAc,EAAE,QAAA,EAAU,UAAU,CAAA;AAAA;AAGxE,MAAO,OAAA,KAAA;AAAA,KACR;AAAA,GACD,CAAA,CAAA;AACJ,CAAA;;AChEO,SAAS,cAAc,IAAmB,EAAA;AAC/C,EAAA,IAAI,SAAY,GAAA,CAAA;AAIhB,EAAA,KAAA,MAAW,SAAS,IAAM,EAAA;AACxB,IAAI,IAAA,KAAA,CAAM,MAAO,CAAA,MAAA,GAAS,SAAW,EAAA;AACnC,MAAA,SAAA,GAAY,MAAM,MAAO,CAAA,MAAA;AAAA;AAC3B;AAGF,EAAO,OAAA,SAAA;AACT;;ACbA,MAAMiF,yBAA0B,GAAA,CAAA;AAoBzB,MAAM,kBAAqE,GAAA;AAAA,EAChF,IAAI,iBAAkB,CAAA,OAAA;AAAA,EACtB,IAAM,EAAA,UAAA;AAAA,EACN,WAAa,EAAA,4EAAA;AAAA,EACb,cAAgB,EAAA;AAAA,IACd,QAAQ;AAAC,GACX;AAAA,EACA,YAAA,EAAc,CAAC,IAAsB,KAAA;AAKnC,IAAM,MAAA,SAAA,GAAY,cAAc,IAAI,CAAA;AAEpC,IAAA,OAAO,SAAa,IAAAA,yBAAA,GAChB,iCAAkC,CAAA,UAAA,GAClC,iCAAkC,CAAA,aAAA;AAAA,GACxC;AAAA,EACA,uBAAA,EAAyB,CAAC,IAAsB,KAAA;AAC9C,IAAM,MAAA,SAAA,GAAY,cAAc,IAAI,CAAA;AACpC,IAAO,OAAA,CAAA,4DAAA,EAA+DA,yBAAuB,CAAA,mEAAA,EAAsE,SAAS,CAAA,CAAA;AAAA,GAC9K;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,QAAU,EAAA,CAAC,OAAY,KAAA,CAAC,WACtB,MAAO,CAAA,IAAA;AAAA,IACLvE,aAAA,CAAI,CAAC,IAAS,KAAA;AA1DpB,MAAA,IAAA,EAAA;AA2DQ,MAAA,MAAM,cAAiB,GAAA,MAAA,CAAO,IAAK,CAAA,OAAA,CAAQ,MAAM,CAAE,CAAA,IAAA;AAAA,QACjD,CAAC,IAAS,KAAA,OAAA,CAAQ,MAAO,CAAA,IAAI,EAAE,SAAc,KAAA,SAAA;AAAA,OAC/C;AAEA,MAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,QAAO,OAAA,IAAA;AAAA;AAGT,MAAA,MAAM,YAAyB,EAAC;AAEhC,MAAA,KAAA,MAAW,SAAS,IAAM,EAAA;AAGxB,QAAM,MAAA,aAAA,GAAyB,MAAM,MAAO,CAAA,MAAA,CAAO,CAAC,KAAU,KAAAwE,oBAAA,CAAmB,KAAO,EAAA,OAAO,CAAC,CAAA;AAChG,QAAI,IAAA,aAAA,CAAc,WAAW,CAAG,EAAA;AAC9B,UAAA;AAAA;AAKF,QAAM,MAAA,gBAAA,GAAmB,gBAAiB,CAAA,KAAA,EAAO,aAAa,CAAA;AAG9D,QAAM,MAAA,MAAA,GAAkB,mBAAoB,CAAA,aAAA,EAAe,gBAAgB,CAAA;AAG3E,QAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,UAAA,IAAI,CAACC,sBAAA,CAAqB,KAAO,EAAA,OAAO,CAAG,EAAA;AACzC,YAAA;AAAA;AAGF,UAAM,MAAA,SAAA,GAAY,oBAAoB,KAAK,CAAA;AAC3C,UAAA,MAAM,YAAe,GAAA,OAAA,CAAQ,MAAO,CAAA,SAAS,CAAE,CAAA,YAAA;AAC/C,UAAA,MAAM,sBAAiD,EAAC;AAExD,UAAiB,gBAAA,CAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AAClC,YAAM,MAAA,uBAAA,GAA0B,MAAM,SAAS,CAAA;AAC/C,YAAA,MAAM,UAAU,WAAY,CAAA;AAAA,cAC1B,KAAO,EAAA,uBAAA;AAAA,cACP,QAAU,EAAA;AAAA,aACX,CAAA;AAED,YAAA,KAAA,MAAW,eAAe,YAAc,EAAA;AACtC,cAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,mBAAoB,CAAA,WAAW,CAAC,CAAG,EAAA;AACpD,gBAAoB,mBAAA,CAAA,WAAW,IAAI,EAAC;AAAA;AAEtC,cAAA,mBAAA,CAAoB,WAAW,CAAA,CAAE,IAAK,CAAA,OAAA,CAAQ,WAAW,CAAC,CAAA;AAAA;AAC5D,WACD,CAAA;AAED,UAAA,KAAA,MAAW,eAAe,YAAc,EAAA;AACtC,YAAA,MAAM,gBAA0B,GAAA;AAAA,cAC9B,IAAM,EAAA,CAAA,EAAG,SAAS,CAAA,EAAA,EAAK,WAAW,CAAA,CAAA,CAAA;AAAA,cAClC,MAAQ,EAAA,CAAA,EAAA,GAAA,mBAAA,CAAoB,WAAW,CAAA,KAA/B,YAAoC,EAAC;AAAA,cAC7C,IAAM,EAAA,sBAAA,CAAuB,WAAa,EAAA,KAAA,CAAM,IAAI,CAAA;AAAA,cACpD,QAAQ;AAAC,aACX;AAEA,YAAA,MAAA,CAAO,KAAK,gBAAgB,CAAA;AAAA;AAC9B;AAGF,QAAA,SAAA,CAAU,IAAK,CAAA;AAAA,UACb,GAAG,KAAA;AAAA,UACH,MAAA;AAAA,UACA,QAAQ,gBAAiB,CAAA;AAAA,SAC1B,CAAA;AAAA;AAGH,MAAO,OAAA,SAAA;AAAA,KACR;AAAA;AAEP,CAAA;AAEA,MAAMD,oBAAA,GAAqB,CAAC,KAAA,EAAc,OAAgD,KAAA;AArI1F,EAAA,IAAA,EAAA;AAsIE,EAAM,MAAA,SAAA,GAAY,oBAAoB,KAAK,CAAA;AAC3C,EAAA,OAAA,CAAA,CAAO,EAAS,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,MAAA,CAAO,SAAhB,CAAA,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA4B,SAAc,MAAA,SAAA;AACnD,CAAA;AAEA,MAAMC,sBAAA,GAAuB,CAAC,KAAA,EAAc,OAAgD,KAAA;AA1I5F,EAAA,IAAA,EAAA;AA2IE,EAAM,MAAA,SAAA,GAAY,oBAAoB,KAAK,CAAA;AAC3C,EAAA,OAAA,CAAA,CACE,wCAAS,MAAO,CAAA,SAAA,CAAA,KAAhB,IAA4B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA,MAAc,+BAC1C,KAAM,CAAA,OAAA,CAAQ,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,MAAA,CAAO,WAAW,YAAY,CAAA,IAAA,CACrD,mCAAS,MAAO,CAAA,SAAA,CAAA,CAAW,aAAa,MAAS,IAAA,CAAA;AAErD,CAAA;AAWgB,SAAA,gBAAA,CAAiB,OAAkB,aAAwB,EAAA;AA5J3E,EAAA,IAAA,EAAA;AA6JE,EAAM,MAAA,gBAAA,uBAAuB,GAAsB,EAAA;AAEnD,EAAA,KAAA,IAAS,QAAW,GAAA,CAAA,EAAG,QAAW,GAAA,KAAA,CAAM,QAAQ,QAAY,EAAA,EAAA;AAC1D,IAAM,MAAA,QAAA,GAAW,MAAO,CAAA,aAAA,CAAc,GAAI,CAAA,CAAC,UAAU,KAAM,CAAA,MAAA,CAAO,QAAQ,CAAC,CAAC,CAAA;AAC5E,IAAA,MAAM,iBAAgB,EAAiB,GAAA,gBAAA,CAAA,GAAA,CAAI,QAAQ,CAAA,KAA7B,YAAkC,EAAC;AAEzD,IAAA,IAAI,CAAC,gBAAA,CAAiB,GAAI,CAAA,QAAQ,CAAG,EAAA;AACnC,MAAiB,gBAAA,CAAA,GAAA,CAAI,UAAU,aAAa,CAAA;AAAA;AAG9C,IAAS,KAAA,IAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAC9B,MAAM,MAAA,SAAA,GAAY,oBAAoB,KAAK,CAAA;AAE3C,MAAI,IAAA,CAAC,aAAc,CAAA,SAAS,CAAG,EAAA;AAC7B,QAAA,aAAA,CAAc,SAAS,CAAI,GAAA;AAAA,UACzB,IAAM,EAAA,SAAA;AAAA,UACN,MAAM,KAAM,CAAA,IAAA;AAAA,UACZ,MAAQ,EAAA,EAAE,GAAG,KAAA,CAAM,MAAO,EAAA;AAAA,UAC1B,QAAQ;AAAC,SACX;AAAA;AAGF,MAAA,aAAA,CAAc,SAAS,CAAE,CAAA,MAAA,CAAO,KAAK,KAAM,CAAA,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA;AAC7D;AAGF,EAAO,OAAA,gBAAA;AACT;AAUgB,SAAA,mBAAA,CAAoB,eAAwB,gBAAkD,EAAA;AAC5G,EAAA,MAAM,SAAkB,EAAC;AAEzB,EAAA,KAAA,MAAW,SAAS,aAAe,EAAA;AACjC,IAAA,MAAM,SAAoB,EAAC;AAC3B,IAAM,MAAA,SAAA,GAAY,oBAAoB,KAAK,CAAA;AAE3C,IAAiB,gBAAA,CAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AAClC,MAAA,MAAA,CAAO,KAAK,KAAM,CAAA,SAAS,CAAE,CAAA,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,KACvC,CAAA;AAED,IAAA,MAAA,CAAO,IAAK,CAAA;AAAA,MACV,MAAM,KAAM,CAAA,IAAA;AAAA,MACZ,MAAM,KAAM,CAAA,IAAA;AAAA,MACZ,MAAQ,EAAA;AAAA,QACN,GAAG,KAAM,CAAA;AAAA,OACX;AAAA,MACA;AAAA,KACD,CAAA;AAAA;AAGH,EAAO,OAAA,MAAA;AACT;;AC5MO,MAAM,2BAA8B,GAAA,IAAA;AAC3C,MAAM,uBAA0B,GAAA,CAAA;AAgBzB,MAAM,kBAAgF,GAAA;AAAA,EAC3F,IAAI,iBAAkB,CAAA,kBAAA;AAAA,EACtB,IAAM,EAAA,wBAAA;AAAA,EACN,WAAa,EAAA,4EAAA;AAAA,EACb,cAAgB,EAAA;AAAA,IACd,mBAAqB,EAAA,2BAAA;AAAA,IACrB,QAAQ;AAAC,GACX;AAAA,EACA,YAAA,EAAc,CAAC,IAAS,KAAA;AAGtB,IAAM,MAAA,SAAA,GAAY,cAAc,IAAI,CAAA;AAEpC,IAAA,OAAO,SAAa,IAAA,uBAAA,GAChB,iCAAkC,CAAA,UAAA,GAClC,iCAAkC,CAAA,aAAA;AAAA,GACxC;AAAA,EACA,uBAAA,EAAyB,CAAC,IAAsB,KAAA;AAC9C,IAAM,MAAA,SAAA,GAAY,cAAc,IAAI,CAAA;AACpC,IAAO,OAAA,CAAA,yEAAA,EAA4E,uBAAuB,CAAA,mEAAA,EAAsE,SAAS,CAAA,CAAA;AAAA,GAC3L;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,QAAU,EAAA,CAAC,OAAY,KAAA,CAAC,WACtB,MAAO,CAAA,IAAA;AAAA,IACLzE,aAAA,CAAI,CAAC,IAAS,KAAA;AACZ,MAAA,MAAM,cAAiB,GAAA,MAAA,CAAO,IAAK,CAAA,OAAA,CAAQ,MAAM,CAAE,CAAA,IAAA;AAAA,QACjD,CAAC,IAAS,KAAA,OAAA,CAAQ,MAAO,CAAA,IAAI,EAAE,SAAc,KAAA,SAAA;AAAA,OAC/C;AACA,MAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,QAAO,OAAA,IAAA;AAAA;AAGT,MAAA,MAAM,YAAyB,EAAC;AAEhC,MAAA,KAAA,MAAW,SAAS,IAAM,EAAA;AAGxB,QAAM,MAAA,aAAA,GAAyB,MAAM,MAAO,CAAA,MAAA,CAAO,CAAC,KAAU,KAAA,kBAAA,CAAmB,KAAO,EAAA,OAAO,CAAC,CAAA;AAChG,QAAI,IAAA,aAAA,CAAc,WAAW,CAAG,EAAA;AAC9B,UAAA;AAAA;AAKF,QAAM,MAAA,gBAAA,GAAmB,gBAAiB,CAAA,KAAA,EAAO,aAAa,CAAA;AAG9D,QAAM,MAAA,MAAA,GAAkB,mBAAoB,CAAA,aAAA,EAAe,gBAAgB,CAAA;AAG3E,QAAM,MAAA,SAAA,GAA2B,gBAAiB,CAAA,gBAAA,EAAkB,OAAO,CAAA;AAG3E,QAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,KAAM,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAC5C,UAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,CAAC,CAAA;AAE5B,UAAA,IAAI,CAAC,oBAAA,CAAqB,KAAO,EAAA,OAAO,CAAG,EAAA;AACzC,YAAA;AAAA;AAGF,UAAM,MAAA,SAAA,GAAY,oBAAoB,KAAK,CAAA;AAC3C,UAAA,MAAM,YAAe,GAAA,OAAA,CAAQ,MAAO,CAAA,SAAS,CAAE,CAAA,YAAA;AAC/C,UAAA,MAAM,sBAAiD,EAAC;AAExD,UAAiB,gBAAA,CAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AAClC,YAAM,MAAA,uBAAA,GAA0B,MAAM,SAAS,CAAA;AAC/C,YAAA,MAAM,UAAU,WAAY,CAAA;AAAA,cAC1B,KAAO,EAAA,uBAAA;AAAA,cACP,QAAU,EAAA;AAAA,aACX,CAAA;AAED,YAAA,KAAA,MAAW,eAAe,YAAc,EAAA;AACtC,cAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,mBAAoB,CAAA,WAAW,CAAC,CAAG,EAAA;AACpD,gBAAoB,mBAAA,CAAA,WAAW,IAAI,EAAC;AAAA;AAEtC,cAAA,mBAAA,CAAoB,WAAW,CAAA,CAAE,IAAK,CAAA,OAAA,CAAQ,WAAW,CAAC,CAAA;AAAA;AAC5D,WACD,CAAA;AAED,UAAA,KAAA,MAAW,eAAe,YAAc,EAAA;AACtC,YAAA,MAAM,gBAA0B,GAAA;AAAA,cAC9B,IAAM,EAAA,CAAA,EAAG,SAAS,CAAA,EAAA,EAAK,WAAW,CAAA,CAAA,CAAA;AAAA,cAClC,MAAA,EAAQ,oBAAoB,WAAW,CAAA;AAAA,cACvC,MAAM,SAAU,CAAA,KAAA;AAAA,cAChB,QAAQ;AAAC,aACX;AAEA,YAAA,gBAAA,CAAiB,IAAO,GAAA,eAAA,CAAgB,WAAa,EAAA,KAAA,EAAO,gBAAgB,CAAA;AAC5E,YAAA,MAAA,CAAO,KAAK,gBAAgB,CAAA;AAAA;AAC9B;AAGF,QAAA,MAAA,CAAO,IAAK,CAAA;AAAA,UACV,QAAQ,EAAC;AAAA,UACT,IAAM,EAAA,eAAA;AAAA,UACN,MAAM,SAAU,CAAA,YAAA;AAAA,UAChB,MAAQ,EAAA;AAAA,SACT,CAAA;AAED,QAAA,SAAA,CAAU,IAAK,CAAA;AAAA,UACb,MAAA;AAAA,UACA,QAAQ,gBAAiB,CAAA;AAAA,SAC1B,CAAA;AAAA;AAGH,MAAO,OAAA,SAAA;AAAA,KACR;AAAA;AAEP,CAAA;AAMA,SAAS,cAAA,CAAe,MAAiB,EAAA,WAAA,EAAqB,OAA+C,EAAA;AAC3G,EAAA,MAAM,WACJ,GAAA,OAAA,CAAQ,mBAAwB,KAAA,KAAA,CAAA,GAAY,8BAA8B,OAAQ,CAAA,mBAAA;AAEpF,EAAO,OAAA;AAAA,IACL,MAAM,EAAE,MAAA,EAAQ,EAAE,QAAU,EAAA,CAAC,aAAc,EAAA;AAAA,IAC3C,MAAQ,EAAA,WAAA;AAAA,IACR;AAAA,GACF;AACF;AAQA,MAAM,kBAAA,GAAqB,CAAC,KAAA,EAAc,OAA2D,KAAA;AAnKrG,EAAA,IAAA,EAAA;AAoKE,EAAM,MAAA,SAAA,GAAY,oBAAoB,KAAK,CAAA;AAC3C,EAAA,OAAA,CAAA,CAAO,EAAS,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,MAAA,CAAO,SAAhB,CAAA,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA4B,SAAc,MAAA,SAAA;AACnD,CAAA;AAOA,MAAM,oBAAA,GAAuB,CAAC,KAAA,EAAc,OAA2D,KAAA;AA7KvG,EAAA,IAAA,EAAA;AA8KE,EAAM,MAAA,SAAA,GAAY,oBAAoB,KAAK,CAAA;AAC3C,EAAA,OAAA,CAAA,CACE,wCAAS,MAAO,CAAA,SAAA,CAAA,KAAhB,IAA4B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA,MAAc,+BAC1C,KAAM,CAAA,OAAA,CAAQ,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,MAAA,CAAO,WAAW,YAAY,CAAA,IAAA,CACrD,mCAAS,MAAO,CAAA,SAAA,CAAA,CAAW,aAAa,MAAS,IAAA,CAAA;AAErD,CAAA;AAKA,MAAM,eAAkB,GAAA,CAAC,WAAqB,EAAA,WAAA,EAAoB,WAAkC,KAAA;AAzLpG,EAAA,IAAA,EAAA;AA0LE,EAAA,QAAQ,WAAa;AAAA,IACnB,KAAK,SAAU,CAAA,SAAA;AACb,MAAA,OAAO,SAAU,CAAA,OAAA;AAAA,IACnB,KAAK,SAAU,CAAA,IAAA;AAAA,IACf,KAAK,SAAU,CAAA,WAAA;AAAA,IACf,KAAK,SAAU,CAAA,KAAA;AAAA,IACf,KAAK,SAAU,CAAA,YAAA;AACb,MAAA,OAAO,WAAY,CAAA,IAAA;AAAA,IACrB;AACE,MAAA,OAAA,CAAO,EAAuB,GAAA,sBAAA,CAAA,WAAW,CAAlC,KAAA,IAAA,GAAA,EAAA,GAAuC,SAAU,CAAA,MAAA;AAAA;AAE9D,CAAA;AAYA,SAAS,gBAAA,CACP,kBACA,OACe,EAAA;AACf,EAAA,MAAM,YAA2B,EAAC;AAIlC,EAAA,KAAA,MAAW,GAAG,KAAK,CAAA,IAAK,gBAAkB,EAAA;AACxC,IAAA,MAAM,eAAwB,EAAC;AAE/B,IAAA,KAAA,MAAW,CAAC,SAAW,EAAA,KAAK,KAAK,MAAO,CAAA,OAAA,CAAQ,KAAK,CAAG,EAAA;AACtD,MAAM,MAAA,SAAA,GAAY,OAAQ,CAAA,MAAA,CAAO,SAAS,CAAA;AAE1C,MAAA,IAAI,cAAc,KAAW,CAAA,EAAA;AAC3B,QAAA,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,iBAIvB,SAAU,CAAA,YAAA,KAAiB,KAC1B,CAAA,IAAA,SAAA,CAAU,cAAc,WAAgC,oBAAA,SAAA,CAAU,YAAa,CAAA,MAAA,KAAW,KAC3F,SAAU,CAAA,SAAA,KAAc,IACxB,IAAA,SAAA,CAAU,cAAc,KACxB,CAAA,EAAA;AACA,QAAA,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA;AACzB;AAMF,IAAI,IAAA,YAAA,CAAa,SAAS,CAAG,EAAA;AAC3B,MAAU,SAAA,CAAA,IAAA,CAAK,CAAC,cAAA,CAAe,YAAc,EAAA,YAAA,CAAa,CAAC,CAAA,CAAE,MAAO,CAAA,MAAA,EAAQ,OAAO,CAAC,CAAC,CAAA;AAAA,KAChF,MAAA;AACL,MAAU,SAAA,CAAA,IAAA,CAAK,CAAC,cAAe,CAAA,IAAI,CAAG,EAAA,OAAO,CAAC,CAAC,CAAA;AAAA;AACjD;AAGF,EAAO,OAAA,SAAA;AACT;;ACxPA,IAAAV,IAAA,EAAA,EAAA,EAAA,EAAA;AAsBA,MAAM,oBAAuB,GAAA,MAAA;AAC7B,MAAM,iBAAoB,GAAA,MAAA;AAC1B,MAAM,mBAAsB,GAAA,OAAA;AAC5B,MAAM,sBAAsB,YAAa,CAAA,KAAA;AAKzC,MAAM,4BAA4B,EAAgB,GAAA,CAAA,EAAA,GAAA,CAAAA,IAAA,GAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,eAAA,KAAhB,qBAAiC,QAAjC,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA2C,mBAA3C,IAA2D,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,yBAAA;AAEtF,MAAM,2BAAuF,GAAA;AAAA,EAClG,IAAI,iBAAkB,CAAA,gBAAA;AAAA,EACtB,IAAM,EAAA,oBAAA;AAAA,EACN,WAAa,EAAA,0DAAA;AAAA,EACb,cAAgB,EAAA;AAAA,IACd,WAAa,EAAA,oBAAA;AAAA,IACb,QAAU,EAAA,iBAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA;AAAA;AAAA;AAAA,EAIA,YAAA,EAAc,CAAC,IAAsB,KAAA;AACnC,IAAA,IAAI,SAAY,GAAA,CAAA;AAEhB,IAAA,KAAA,MAAW,SAAS,IAAM,EAAA;AACxB,MAAA,SAAA,IAAa,MAAM,MAAO,CAAA,MAAA;AAAA;AAG5B,IAAA,OAAO,SAAa,IAAA,CAAA,GAChB,iCAAkC,CAAA,UAAA,GAClC,iCAAkC,CAAA,aAAA;AAAA,GACxC;AAAA,EACA,uBAAA,EAAyB,CAAC,IAAsB,KAAA;AAC9C,IAAA,IAAI,SAAY,GAAA,CAAA;AAEhB,IAAA,KAAA,MAAW,SAAS,IAAM,EAAA;AACxB,MAAA,SAAA,IAAa,MAAM,MAAO,CAAA,MAAA;AAAA;AAG5B,IAAA,OAAO,8EAA8E,SAAS,CAAA,QAAA,CAAA;AAAA,GAChG;AAAA,EACA,UAAU,CAAC,OAAA,EAA6C,GAA8B,KAAA,CAAC,WACrF,MAAO,CAAA,IAAA;AAAA,IACLU,aAAA,CAAI,CAAC,IAAS,KAAA;AAlEpB,MAAA,IAAAV,GAAAe,EAAAA,GAAAA;AAmEQ,MAAM,MAAA,gBAAA,GAAmB,QAAQ,WAAe,IAAA,oBAAA;AAChD,MAAM,MAAA,aAAA,GAAgB,QAAQ,QAAY,IAAA,iBAAA;AAC1C,MAAM,MAAA,eAAA,GAAkB,QAAQ,UAAc,IAAA,mBAAA;AAC9C,MAAM,MAAA,UAAA,GAAa,QAAQ,UAAc,IAAA,mBAAA;AAGzC,MAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACrB,QAAO,OAAA,IAAA;AAAA;AAGT,MAAM,MAAA,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpB,MAAM,MAAA,cAAA,GAAiB,YAAa,CAAA,KAAA,EAAO,gBAAgB,CAAA;AAC3D,MAAM,MAAA,WAAA,GAAc,YAAa,CAAA,KAAA,EAAO,aAAa,CAAA;AACrD,MAAM,MAAA,UAAA,GAAa,YAAa,CAAA,KAAA,EAAO,eAAe,CAAA;AACtD,MAAA,MAAM,cAAiB,GAAA,CAAA,EAAG,aAAa,CAAA,EAAA,EAAK,gBAAgB,CAAA,CAAA;AAE5D,MAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,WAAA,IAAe,CAAC,UAAY,EAAA;AAClD,QAAO,OAAA,IAAA;AAAA;AAGT,MAAM,MAAA,YAAA,GAAe,YAAa,CAAA,cAAA,CAAe,MAAM,CAAA;AACvD,MAAM,MAAA,SAAA,GAAY,YAAa,CAAA,WAAA,CAAY,MAAM,CAAA;AAEjD,MAAA,MAAM,eAA8D,EAAC;AAErE,MAAA,KAAA,IAAS,QAAQ,CAAG,EAAA,KAAA,GAAQ,UAAW,CAAA,MAAA,CAAO,QAAQ,KAAS,EAAA,EAAA;AAC7D,QAAM,MAAA,UAAA,GAAa,cAAe,CAAA,MAAA,CAAO,KAAK,CAAA;AAC9C,QAAM,MAAA,OAAA,GAAU,WAAY,CAAA,MAAA,CAAO,KAAK,CAAA;AACxC,QAAM,MAAA,KAAA,GAAQ,UAAW,CAAA,MAAA,CAAO,KAAK,CAAA;AAErC,QAAI,IAAA,CAAC,YAAa,CAAA,UAAU,CAAG,EAAA;AAC7B,UAAa,YAAA,CAAA,UAAU,IAAI,EAAC;AAAA;AAG9B,QAAa,YAAA,CAAA,UAAU,CAAE,CAAA,OAAO,CAAI,GAAA,KAAA;AAAA;AAGtC,MAAA,MAAM,MAAkB,GAAA;AAAA,QACtB;AAAA,UACE,IAAM,EAAA,cAAA;AAAA,UACN,MAAQ,EAAA,SAAA;AAAA,UACR,MAAM,WAAY,CAAA,IAAA;AAAA,UAClB,QAAQ;AAAC;AACX,OACF;AAEA,MAAA,KAAA,MAAW,cAAc,YAAc,EAAA;AACrC,QAAA,IAAI,SAAS,EAAC;AACd,QAAA,KAAA,MAAW,WAAW,SAAW,EAAA;AAC/B,UAAM,MAAA,KAAA,GAAA,CAAQf,GAAA,GAAA,YAAA,CAAa,UAAU,CAAA,CAAE,OAAO,CAAhC,KAAA,IAAA,GAAAA,GAAqC,GAAA,eAAA,CAAgB,UAAU,CAAA;AAC7E,UAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA;AAOnB,QAAI,IAAA,wBAAA,IAA4B,OAAO,UAAA,KAAe,QAAU,EAAA;AAC9D,UAAA,UAAA,CAAW,SAAS,EAAE,GAAG,UAAW,CAAA,MAAA,EAAQ,mBAAmB,KAAU,CAAA,EAAA;AAAA;AAG3E,QAAA,MAAA,CAAO,IAAK,CAAA;AAAA,UACV,IAAMe,EAAAA,CAAAA,GAAAA,GAAA,UAAY,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,QAAA,EAAA,KAAZ,OAAAA,GAA0B,GAAA,IAAA;AAAA,UAChC,MAAA;AAAA,UACA,QAAQ,UAAW,CAAA,MAAA;AAAA,UACnB,MAAM,UAAW,CAAA;AAAA,SAClB,CAAA;AAAA;AAGH,MAAO,OAAA;AAAA,QACL;AAAA,UACE,MAAA;AAAA,UACA,QAAQ,SAAU,CAAA;AAAA;AACpB,OACF;AAAA,KACD;AAAA;AAEP,CAAA;AAEA,SAAS,aAAgB,MAAkB,EAAA;AACzC,EAAM,MAAA,MAAA,GAAS,IAAI,GAAA,CAAO,MAAM,CAAA;AAChC,EAAO,OAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AAC1B;AAEA,SAAS,YAAA,CAAa,OAAkB,UAAkC,EAAA;AACxE,EAAA,KAAA,IAAS,aAAa,CAAG,EAAA,UAAA,GAAa,KAAM,CAAA,MAAA,CAAO,QAAQ,UAAc,EAAA,EAAA;AACvE,IAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AAGrC,IAAI,IAAA,OAAA;AACJ,IAAA,IAAI,wBAA0B,EAAA;AAC5B,MAAA,MAAM,UAAU,aAAc,CAAA,GAAA,CAAI,eAAe,MAAM,CAAA,CAAE,IAAI,UAAU,CAAA;AACvE,MAAA,OAAA,GAAU,OAAQ,CAAA,KAAA,EAAO,KAAO,EAAA,CAAC,KAAK,CAAC,CAAA;AAAA,KAClC,MAAA;AACL,MAAU,OAAA,GAAA,UAAA,KAAe,oBAAoB,KAAK,CAAA;AAAA;AAGpD,IAAA,IAAI,OAAS,EAAA;AACX,MAAO,OAAA,KAAA;AAAA;AACT;AAGF,EAAO,OAAA,IAAA;AACT;AAEA,SAAS,gBAAgB,YAA4B,EAAA;AACnD,EAAA,QAAQ,YAAc;AAAA,IACpB,KAAK,YAAa,CAAA,KAAA;AAChB,MAAO,OAAA,KAAA;AAAA,IACT,KAAK,YAAa,CAAA,IAAA;AAChB,MAAO,OAAA,IAAA;AAAA,IACT,KAAK,YAAa,CAAA,IAAA;AAChB,MAAO,OAAA,IAAA;AAAA,IACT,KAAK,YAAa,CAAA,IAAA;AAChB,MAAO,OAAA,CAAA;AAAA,IACT,KAAK,YAAa,CAAA,KAAA;AAAA,IAClB;AACE,MAAO,OAAA,EAAA;AAAA;AAEb;;ACnKO,SAAS,iBAAsC,GAAA;AACpD,EAAA,MAAM,IAAO,GAAA,CAAA;AACb,EAAA,MAAM,OAAO,CAAC,IAAA,EAAM,MAAM,IAAM,EAAA,IAAA,EAAM,MAAM,KAAK,CAAA;AACjD,EAAA,MAAM,IAAO,GAAA,IAAA;AACb,EAAA,MAAM,MAAgC,GAAA;AAAA,IACpC,EAAI,EAAA,CAAA;AAAA,IACJ,EAAI,EAAA,GAAA;AAAA,IACJ,EAAI,EAAA,GAAA;AAAA;AAAA,IACJ,EAAI,EAAA,GAAA;AAAA,IACJ,EAAI,EAAA,IAAA;AAAA,IACJ,GAAK,EAAA;AAAA,GACP;AAEA,EAAA,SAAS,GAAG,GAAmC,EAAA;AAC7C,IAAA,MAAM,QAAQ,OAAO,GAAA,KAAQ,QAAW,GAAA,GAAA,GAAM,OAAO,GAAG,CAAA;AACxD,IAAO,OAAA,CAAA,kBAAA,EAAqB,KAAK,CAAA,EAAG,IAAI,CAAA,CAAA,CAAA;AAAA;AAG1C,EAAA,SAAS,KAAK,GAAmC,EAAA;AAC/C,IAAA,MAAM,QAAQ,OAAO,GAAA,KAAQ,QAAW,GAAA,GAAA,GAAM,OAAO,GAAG,CAAA;AACxD,IAAA,OAAO,CAAqB,kBAAA,EAAA,KAAA,GAAQ,IAAO,GAAA,GAAG,GAAG,IAAI,CAAA,CAAA,CAAA;AAAA;AAKvD,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,EAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACF;;ACvDO,MAAM,OAAU,GAAA;AAAA,EACrB,KAAO,EAAA,SAAA;AAAA,EACP,KAAO,EAAA,SAAA;AAAA,EAEP,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA;AAAA;AAAA,EAGR,UAAY,EAAA,SAAA;AAAA,EACZ,UAAY,EAAA,SAAA;AAAA,EACZ,UAAY,EAAA,SAAA;AAAA;AAAA,EAEZ,WAAa,EAAA,SAAA;AAAA,EACb,WAAa,EAAA,SAAA;AAAA;AAAA,EAGb,MAAQ,EAAA,SAAA;AAAA;AAAA,EAER,OAAS,EAAA,SAAA;AAAA;AAAA,EAET,MAAQ,EAAA,SAAA;AAAA;AAAA,EAER,YAAc,EAAA,SAAA;AAAA,EAEd,YAAc,EAAA,SAAA;AAAA;AAAA,EACd,YAAc,EAAA,SAAA;AAAA;AAAA,EACd,WAAa,EAAA,SAAA;AAAA,EACb,WAAa,EAAA,SAAA;AAAA,EACb,aAAe,EAAA,SAAA;AAAA,EACf,aAAe,EAAA,SAAA;AAAA,EACf,cAAgB,EAAA,SAAA;AAAA,EAChB,cAAgB,EAAA,SAAA;AAAA,EAEhB,aAAe,EAAA,SAAA;AAAA,EACf,aAAe,EAAA,SAAA;AAAA,EACf,YAAc,EAAA,SAAA;AAAA,EACd,YAAc,EAAA,SAAA;AAAA,EACd,cAAgB,EAAA,SAAA;AAAA,EAChB,cAAgB,EAAA,SAAA;AAAA,EAChB,eAAiB,EAAA,SAAA;AAAA,EACjB,eAAiB,EAAA;AACnB,CAAA;;ACmDA,MAAM,UAA+D,CAAA;AAAA,EAArE,WAAA,GAAA;AACE,IAAwB,IAAA,CAAA,IAAA,GAAA,MAAA;AAGxB;AAAA,IAAY,IAAA,CAAA,SAAA,GAAA,eAAA;AAEZ,IAAS,IAAA,CAAA,MAAA,GAAA;AAAA,MACP,IAAA,EAAM,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MAC5B,MAAA,EAAQ,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,MAAA,CAAA;AAAA,MAC9B,MAAA,EAAQ,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA;AAAA,KAChC;AAEA,IAAO,IAAA,CAAA,IAAA,GAAA;AAAA,MACL,OAAA,EAAS,CAAO,IAAA,EAAA,IAAA,CAAK,SAAS,CAAA,CAAA,CAAA;AAAA,MAC9B,SAAA,EAAW,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MACjC,QAAA,EAAU,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,MAAA,CAAA;AAAA,MAChC,MAAM,OAAQ,CAAA,YAAA;AAAA,MACd,aAAa,OAAQ,CAAA;AAAA,KACvB;AAEA,IAAU,IAAA,CAAA,OAAA,GAAA;AAAA,MACR,MAAM,OAAQ,CAAA,YAAA;AAAA,MACd,MAAM,OAAQ,CAAA,YAAA;AAAA,MACd,QAAQ,OAAQ,CAAA;AAAA,KAClB;AAEA,IAAY,IAAA,CAAA,SAAA,GAAA;AAAA,MACV,IAAA,EAAM,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MAC5B,KAAA,EAAO,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MAC7B,WAAA,EAAa,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MACnC,IAAA,EAAM,KAAK,IAAK,CAAA,OAAA;AAAA,MAChB,YAAA,EAAc,CAAO,IAAA,EAAA,IAAA,CAAK,SAAS,CAAA,CAAA,CAAA;AAAA,MACnC,MAAA,EAAQ,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA;AAAA,KAChC;AAEA,IAAA,IAAA,CAAA,IAAA,GAAO,IAAK,CAAA,OAAA;AAEZ,IAAQ,IAAA,CAAA,KAAA,GAAA;AAAA,MACN,MAAM,OAAQ,CAAA,WAAA;AAAA,MACd,MAAM,OAAQ,CAAA;AAAA,KAChB;AAEA,IAAU,IAAA,CAAA,OAAA,GAAA;AAAA,MACR,MAAM,OAAQ,CAAA,aAAA;AAAA,MACd,MAAM,OAAQ,CAAA;AAAA,KAChB;AAEA,IAAU,IAAA,CAAA,OAAA,GAAA;AAAA,MACR,MAAM,OAAQ,CAAA,cAAA;AAAA,MACd,MAAM,OAAQ,CAAA;AAAA,KAChB;AAEA,IAAa,IAAA,CAAA,UAAA,GAAA;AAAA,MACX,QAAQ,OAAQ,CAAA,MAAA;AAAA,MAChB,SAAS,OAAQ,CAAA,MAAA;AAAA,MACjB,WAAW,OAAQ,CAAA,MAAA;AAAA,MACnB,UAAU,OAAQ,CAAA;AAAA,KACpB;AAEA,IAAS,IAAA,CAAA,MAAA,GAAA;AAAA,MACP,KAAA,EAAO,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MAC7B,QAAA,EAAU,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MAChC,gBAAgB,OAAQ,CAAA,cAAA;AAAA,MACxB,KAAA,EAAO,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MAC7B,YAAc,EAAA,IAAA;AAAA,MACd,YAAA,EAAc,KAAK,IAAK,CAAA,QAAA;AAAA,MACxB,kBAAA,EAAoB,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MAC1C,eAAiB,EAAA;AAAA,KACnB;AAEA,IAAY,IAAA,CAAA,SAAA,GAAA;AAAA,MACV,eAAiB,EAAA,mDAAA;AAAA,MACjB,aAAe,EAAA;AAAA,KACjB;AAEA,IAAoB,IAAA,CAAA,iBAAA,GAAA,CAAA;AACpB,IAAc,IAAA,CAAA,WAAA,GAAA,IAAA;AACd,IAAc,IAAA,CAAA,WAAA,GAAA,IAAA;AAAA;AAChB;AAEA,MAAM,WAAgE,CAAA;AAAA,EAAtE,WAAA,GAAA;AACE,IAAwB,IAAA,CAAA,IAAA,GAAA,OAAA;AAExB,IAAY,IAAA,CAAA,SAAA,GAAA,YAAA;AAEZ,IAAU,IAAA,CAAA,OAAA,GAAA;AAAA,MACR,MAAM,OAAQ,CAAA,aAAA;AAAA,MACd,QAAQ,OAAQ,CAAA,aAAA;AAAA,MAChB,MAAM,OAAQ,CAAA;AAAA,KAChB;AAEA,IAAO,IAAA,CAAA,IAAA,GAAA;AAAA,MACL,OAAA,EAAS,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,IAAA,CAAA;AAAA,MAC/B,SAAA,EAAW,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MACjC,QAAA,EAAU,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MAChC,IAAA,EAAM,KAAK,OAAQ,CAAA,IAAA;AAAA,MACnB,aAAa,OAAQ,CAAA;AAAA,KACvB;AAEA,IAAS,IAAA,CAAA,MAAA,GAAA;AAAA,MACP,IAAA,EAAM,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MAC5B,MAAA,EAAQ,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,MAAA,CAAA;AAAA,MAC9B,MAAA,EAAQ,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,MAAA;AAAA,KAChC;AAEA,IAAY,IAAA,CAAA,SAAA,GAAA;AAAA,MACV,IAAA,EAAM,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MAC5B,KAAA,EAAO,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MAC7B,WAAA,EAAa,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MACnC,YAAA,EAAc,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,KAAA,CAAA;AAAA,MACpC,IAAA,EAAM,KAAK,IAAK,CAAA,OAAA;AAAA,MAChB,MAAA,EAAQ,KAAK,MAAO,CAAA;AAAA,KACtB;AAEA,IAAO,IAAA,CAAA,IAAA,GAAA;AAAA,MACL,MAAM,OAAQ,CAAA,aAAA;AAAA,MACd,MAAM,OAAQ,CAAA;AAAA,KAChB;AAEA,IAAQ,IAAA,CAAA,KAAA,GAAA;AAAA,MACN,MAAM,OAAQ,CAAA,YAAA;AAAA,MACd,MAAM,OAAQ,CAAA,YAAA;AAAA,MACd,QAAQ,OAAQ,CAAA;AAAA,KAClB;AAEA,IAAU,IAAA,CAAA,OAAA,GAAA;AAAA,MACR,MAAM,OAAQ,CAAA,cAAA;AAAA,MACd,MAAM,OAAQ,CAAA;AAAA,KAChB;AAEA,IAAU,IAAA,CAAA,OAAA,GAAA;AAAA,MACR,MAAM,OAAQ,CAAA,eAAA;AAAA,MACd,MAAM,OAAQ,CAAA;AAAA,KAChB;AAEA,IAAa,IAAA,CAAA,UAAA,GAAA;AAAA,MACX,QAAQ,OAAQ,CAAA,MAAA;AAAA,MAChB,SAAS,OAAQ,CAAA,KAAA;AAAA,MACjB,WAAW,OAAQ,CAAA,OAAA;AAAA,MACnB,UAAU,OAAQ,CAAA;AAAA,KACpB;AAEA,IAAS,IAAA,CAAA,MAAA,GAAA;AAAA,MACP,KAAA,EAAO,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MAC7B,QAAA,EAAU,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MAChC,gBAAgB,OAAQ,CAAA,eAAA;AAAA,MACxB,YAAc,EAAA,IAAA;AAAA,MACd,KAAA,EAAO,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MAC7B,kBAAA,EAAoB,CAAQ,KAAA,EAAA,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAAA,MAC1C,YAAA,EAAc,KAAK,IAAK,CAAA,QAAA;AAAA,MACxB,eAAiB,EAAA;AAAA,KACnB;AAEA,IAAY,IAAA,CAAA,SAAA,GAAA;AAAA,MACV,eAAiB,EAAA,kDAAA;AAAA,MACjB,aAAe,EAAA;AAAA,KACjB;AAEA,IAAoB,IAAA,CAAA,iBAAA,GAAA,CAAA;AACpB,IAAc,IAAA,CAAA,WAAA,GAAA,IAAA;AACd,IAAc,IAAA,CAAA,WAAA,GAAA,GAAA;AAAA;AAChB;AAEO,SAAS,aAAa,MAAuC,EAAA;AAjQpE,EAAA,IAAA,EAAA;AAkQE,EAAM,MAAA,IAAA,GAAO,IAAI,UAAW,EAAA;AAC5B,EAAM,MAAA,KAAA,GAAQ,IAAI,WAAY,EAAA;AAC9B,EAAA,MAAM,SAAQ,EAAO,GAAA,MAAA,CAAA,IAAA,KAAP,IAAe,GAAA,EAAA,GAAA,MAAA,MAAY,SAAS,IAAO,GAAA,KAAA;AACzD,EAAM,MAAA;AAAA,IACJ,UAAU,IAAK,CAAA,OAAA;AAAA,IACf,YAAY,IAAK,CAAA,SAAA;AAAA,IACjB,OAAO,IAAK,CAAA,IAAA;AAAA,IACZ,UAAU,IAAK,CAAA,OAAA;AAAA,IACf,UAAU,IAAK,CAAA,OAAA;AAAA,IACf,QAAQ,IAAK,CAAA,KAAA;AAAA,IACb,cAAc,IAAK,CAAA,WAAA;AAAA,IACnB,cAAc,IAAK,CAAA,WAAA;AAAA,IACnB,oBAAoB,IAAK,CAAA,iBAAA;AAAA,IACzB,GAAG;AAAA,GACD,GAAA,MAAA;AAEJ,EAAS,SAAA,eAAA,CAAgB,UAAoB,EAAA,SAAA,GAAoB,iBAAmB,EAAA;AAClF,IAAA,MAAM,YACJ,GAAA,gBAAA,CAAiB,IAAK,CAAA,IAAA,CAAK,aAAa,UAAY,EAAA,IAAA,CAAK,UAAW,CAAA,OAAO,KAAK,SAC5E,GAAA,IAAA,CAAK,IAAK,CAAA,WAAA,GACV,MAAM,IAAK,CAAA,WAAA;AAEjB,IAAO,OAAA,YAAA;AAAA;AAGT,EAAA,MAAM,YAAe,GAAA,CAAC,EAAE,KAAA,EAAO,MAA8C,KAAA;AAC3E,IAAQ,KAAA,GAAA,EAAE,GAAG,KAAA,EAAO,IAAK,EAAA;AACzB,IAAI,IAAA,CAAC,MAAM,IAAM,EAAA;AACf,MAAM,KAAA,CAAA,IAAA,GAAO,IAAK,CAAA,IAAI,CAAE,CAAA,IAAA;AAAA;AAE1B,IAAI,IAAA,CAAC,MAAM,IAAM,EAAA;AACf,MAAA,KAAA,CAAM,OAAO,KAAM,CAAA,IAAA;AAAA;AAErB,IAAI,IAAA,CAAC,MAAM,MAAQ,EAAA;AACjB,MAAA,KAAA,CAAM,SAAS,KAAM,CAAA,IAAA;AAAA;AAEvB,IAAI,IAAA,CAAC,MAAM,KAAO,EAAA;AAChB,MAAA,KAAA,CAAM,KAAQ,GAAA,IAAA,CAAK,IAAS,KAAA,OAAA,GAAU,MAAO,CAAA,KAAA,CAAM,IAAM,EAAA,WAAW,CAAI,GAAA,OAAA,CAAQ,KAAM,CAAA,IAAA,EAAM,WAAW,CAAA;AAAA;AAEzG,IAAI,IAAA,CAAC,MAAM,WAAa,EAAA;AACtB,MAAA,KAAA,CAAM,WAAc,GAAA,KAAA,CAAM,KAAM,CAAA,IAAA,EAAM,IAAI,CAAA;AAAA;AAE5C,IAAI,IAAA,CAAC,MAAM,YAAc,EAAA;AACvB,MAAM,KAAA,CAAA,YAAA,GAAe,eAAgB,CAAA,KAAA,CAAM,IAAI,CAAA;AAAA;AAEjD,IAAI,IAAA,CAAC,MAAM,iBAAmB,EAAA;AAC5B,MAAA,KAAA,CAAM,iBAAoB,GAAA,KAAA,CAAM,KAAM,CAAA,MAAA,EAAQ,IAAI,CAAA;AAAA;AAEpD,IAAO,OAAA,KAAA;AAAA,GACT;AAEA,EAAO,OAAA2C,YAAA;AAAA,IACL;AAAA,MACE,GAAG,IAAA;AAAA,MACH,SAAS,YAAa,CAAA,EAAE,OAAO,OAAS,EAAA,IAAA,EAAM,WAAW,CAAA;AAAA,MACzD,WAAW,YAAa,CAAA,EAAE,OAAO,SAAW,EAAA,IAAA,EAAM,aAAa,CAAA;AAAA,MAC/D,MAAM,YAAa,CAAA,EAAE,OAAO,IAAM,EAAA,IAAA,EAAM,QAAQ,CAAA;AAAA,MAChD,OAAO,YAAa,CAAA,EAAE,OAAO,KAAO,EAAA,IAAA,EAAM,SAAS,CAAA;AAAA,MACnD,SAAS,YAAa,CAAA,EAAE,OAAO,OAAS,EAAA,IAAA,EAAM,WAAW,CAAA;AAAA,MACzD,SAAS,YAAa,CAAA,EAAE,OAAO,OAAS,EAAA,IAAA,EAAM,WAAW,CAAA;AAAA,MACzD,eAAA;AAAA,MACA,SAAA,EAAW,CAAC,KAAA,EAAe,MAAoB,KAAA;AAC7C,QAAO,OAAA,SAAA,CAAU,KAAO,EAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAU,WAAW,CAAA;AAAA;AAC/C,KACF;AAAA,IACA;AAAA,GACF;AACF;;AC/QgB,SAAA,gBAAA,CAAiB,QAAqB,OAAwC,EAAA;AAC5F,EAAA,MAAM,KAAQ,GAAA;AAAA,IACZ,OAAS,EAAA,CAAA;AAAA,IACT,YAAc,EAAA,CAAA;AAAA,IACd,UAAA,EAAY,OAAO,UAAW,CAAA,OAAA;AAAA,IAC9B,WAAA,EAAa,OAAO,MAAO,CAAA,IAAA;AAAA,IAC3B,SAAW,EAAA;AAAA,GACb;AAEA,EAAA,MAAM,KAAQ,GAAA;AAAA,IACZ,WAAA,EAAa,OAAO,MAAO,CAAA,MAAA;AAAA,IAC3B,WAAA,EAAa,OAAO,MAAO,CAAA,MAAA;AAAA,IAC3B,IAAA,EAAM,OAAO,IAAK,CAAA,OAAA;AAAA,IAClB,UAAA,EAAY,OAAO,IAAS,KAAA,MAAA,GAAS,OAAO,UAAW,CAAA,MAAA,GAAS,OAAO,UAAW,CAAA;AAAA,GACpF;AAEA,EAAO,OAAA;AAAA,IACL,MAAQ,EAAA;AAAA,MACN,EAAI,EAAA,CAAA;AAAA,MACJ,EAAI,EAAA,CAAA;AAAA,MACJ,EAAI,EAAA;AAAA,KACN;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAU,EAAA;AAAA,MACR,UAAA,EAAY,OAAO,UAAW,CAAA;AAAA,KAChC;AAAA,IACA,OAAS,EAAA;AAAA,MACP,UAAA,EAAY,OAAO,UAAW,CAAA,QAAA;AAAA,MAC9B,IAAA,EAAM,OAAO,IAAK,CAAA;AAAA,KACpB;AAAA,IACA,SAAW,EAAA;AAAA,MACT,UAAA,EAAY,OAAO,UAAW,CAAA,MAAA;AAAA,MAC9B,OAAS,EAAA;AAAA,KACX;AAAA,IACA,OAAS,EAAA;AAAA,MACP,UAAY,EAAA,MAAA,CAAO,IAAS,KAAA,MAAA,GAAS,uBAA0B,GAAA;AAAA,KACjE;AAAA,IACA,QAAU,EAAA;AAAA,MACR,KAAO,EAAA;AAAA,KACT;AAAA;AAAA,IAEA,QAAU,EAAA;AAAA,MACR,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,aAAe,EAAA;AAAA,MACb,IAAA,EAAM,OAAO,OAAQ,CAAA,YAAA;AAAA,MACrB,UAAA,EAAY,OAAO,OAAQ,CAAA;AAAA,KAC7B;AAAA,IACA,gBAAkB,EAAA;AAAA,MAChB,aAAe,EAAA;AAAA,KACjB;AAAA,IACA,KAAO,EAAA;AAAA,MACL,kBAAA,EAAoB,OAAO,MAAO,CAAA,KAAA;AAAA,MAClC,WAAA,EAAa,OAAO,MAAO,CAAA;AAAA;AAC7B,GACF;AACF;;ACrGO,SAAS,cAAc,MAAmC,EAAA;AAC/D,EAAI,IAAA,MAAA,CAAO,SAAS,MAAQ,EAAA;AAC1B,IAAO,OAAA;AAAA,MACL,EAAI,EAAA,iCAAA;AAAA,MACJ,EAAI,EAAA,iCAAA;AAAA,MACJ,EAAI,EAAA;AAAA,KACN;AAAA;AAGF,EAAO,OAAA;AAAA,IACL,EAAI,EAAA,mCAAA;AAAA,IACJ,EAAI,EAAA,mCAAA;AAAA,IACJ,EAAI,EAAA;AAAA,GACN;AACF;;ACJO,SAAS,YAAY,OAAsC,EAAA;AApBlE,EAAA,IAAA,EAAA;AAqBE,EAAM,MAAA,gBAAA,GAAA,CAAmB,EAAQ,GAAA,OAAA,CAAA,YAAA,KAAR,IAAwB,GAAA,EAAA,GAAA,CAAA;AAEjD,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,OAAA,EAAS,GAAG,gBAAgB,CAAA,EAAA,CAAA;AAAA,IAC5B,IAAM,EAAA,QAAA;AAAA,IACN,MAAQ,EAAA;AAAA,GACV;AAMA,EAAM,MAAA,YAAA,GAAe,CAAC,MAAoB,KAAA;AACxC,IAAM,MAAA,KAAA,GAAA,CAAS,0BAAU,CAAK,IAAA,gBAAA;AAC9B,IAAA,OAAO,GAAG,KAAK,CAAA,EAAA,CAAA;AAAA,GACjB;AAEA,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA;AAAA,GACF;AACF;;ACFgB,SAAA,aAAA,CAAc,OAA+B,GAAA,EAAkB,EAAA;AAC7E,EAAM,MAAA,EAAE,QAAW,GAAA,CAAA,EAAM,GAAA,OAAA;AAEzB,EAAM,MAAA,SAAA,GAAY,CAAC,KAAgC,KAAA;AACjD,IAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,MAAO,OAAA,KAAA;AAAA;AAGT,IAAI,IAAA,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,YAAc,EAAA;AACzC,MAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,QAAQ,OAAA,CAAA,KAAA,CAAM,CAA6D,0DAAA,EAAA,KAAK,CAAG,CAAA,CAAA,CAAA;AAAA;AACrF;AAEF,IAAA,OAAO,KAAQ,GAAA,QAAA;AAAA,GACjB;AAEA,EAAM,MAAA,OAAA,GAAU,IAAI,IAAyC,KAAA;AAC3D,IAAI,IAAA,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,YAAc,EAAA;AACzC,MAAI,IAAA,EAAE,IAAK,CAAA,MAAA,IAAU,CAAI,CAAA,EAAA;AACvB,QAAA,OAAA,CAAQ,KAAM,CAAA,CAAA,2DAAA,EAA8D,IAAK,CAAA,MAAM,CAAE,CAAA,CAAA;AAAA;AAC3F;AAGF,IAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACrB,MAAA,IAAA,CAAK,CAAC,CAAI,GAAA,CAAA;AAAA;AAGZ,IAAO,OAAA,IAAA,CACJ,GAAI,CAAA,CAAC,QAAa,KAAA;AACjB,MAAM,MAAA,MAAA,GAAS,UAAU,QAAQ,CAAA;AACjC,MAAA,OAAO,OAAO,MAAA,KAAW,QAAW,GAAA,CAAA,EAAG,MAAM,CAAO,EAAA,CAAA,GAAA,MAAA;AAAA,KACrD,CACA,CAAA,IAAA,CAAK,GAAG,CAAA;AAAA,GACb;AAEA,EAAA,OAAA,CAAQ,QAAW,GAAA,QAAA;AAKnB,EAAA,OAAA,CAAQ,EAAK,GAAA,KAAA;AACb,EAAA,OAAA,CAAQ,KAAQ,GAAA,KAAA;AAChB,EAAA,OAAA,CAAQ,IAAO,GAAA,KAAA;AACf,EAAA,OAAA,CAAQ,EAAK,GAAA,KAAA;AACb,EAAA,OAAA,CAAQ,IAAO,GAAA,MAAA;AACf,EAAA,OAAA,CAAQ,EAAK,GAAA,MAAA;AACb,EAAA,OAAA,CAAQ,IAAO,GAAA,MAAA;AACf,EAAA,OAAA,CAAQ,EAAK,GAAA,MAAA;AACb,EAAA,OAAA,CAAQ,EAAK,GAAA,MAAA;AACb,EAAA,OAAA,CAAQ,EAAK,GAAA,MAAA;AACb,EAAA,OAAA,CAAQ,EAAK,GAAA,MAAA;AACb,EAAA,OAAA,CAAQ,EAAK,GAAA,MAAA;AACb,EAAA,OAAA,CAAQ,GAAM,GAAA,MAAA;AAEd,EAAO,OAAA,OAAA;AACT;;ACzFA,MAAM,MAAS,GAAA;AAAA;AAAA,EAEb,SAAW,EAAA,8BAAA;AAAA;AAAA;AAAA,EAGX,OAAS,EAAA,8BAAA;AAAA;AAAA,EAET,MAAQ,EAAA,4BAAA;AAAA;AAAA,EAER,KAAO,EAAA;AACT,CAAA;AAIA,MAAM,QAAW,GAAA;AAAA,EACf,QAAU,EAAA,GAAA;AAAA,EACV,OAAS,EAAA,GAAA;AAAA,EACT,KAAO,EAAA,GAAA;AAAA;AAAA,EAEP,QAAU,EAAA,GAAA;AAAA;AAAA,EAEV,OAAS,EAAA,GAAA;AAAA;AAAA,EAET,cAAgB,EAAA,GAAA;AAAA;AAAA,EAEhB,aAAe,EAAA;AACjB,CAAA;AAUO,SAAS,OAAO,KAA2B,GAAA,CAAC,KAAK,CAAG,EAAA,OAAA,GAAmC,EAAI,EAAA;AAChG,EAAM,MAAA,EAAE,QAAU,EAAA,cAAA,GAAiB,QAAS,CAAA,QAAA,EAAU,MAAQ,EAAA,YAAA,GAAe,MAAO,CAAA,SAAA,EAAW,KAAQ,GAAA,CAAA,EAAM,GAAA,OAAA;AAE7G,EAAA,OAAA,CAAQ,MAAM,OAAQ,CAAA,KAAK,IAAI,KAAQ,GAAA,CAAC,KAAK,CAC1C,EAAA,GAAA;AAAA,IACC,CAAC,iBACC,CAAG,EAAA,YAAY,IACb,OAAO,cAAA,KAAmB,WAAW,cAAiB,GAAA,QAAA,CAAS,cAAc,CAC/E,CAAA,CAAA,EAAI,YAAY,CAAI,CAAA,EAAA,OAAO,UAAU,QAAW,GAAA,KAAA,GAAQ,QAAS,CAAA,KAAK,CAAC,CAAA;AAAA,GAC3E,CACC,KAAK,GAAG,CAAA;AACb;AAIO,SAAS,gBAAgB,KAA6B,EAAA;AAC3D,EAAO,OAAA,CAAA,OAAA,EAAU,KAAM,CAAA,GAAA,CAAI,CAAC,IAAA,KAAS,CAA4B,yBAAA,EAAA,IAAI,CAAG,CAAA,CAAA,CAAA,CAAE,IAAK,CAAA,GAAG,CAAC,CAAA,CAAA;AACrF;AAEO,SAAS,sBAAsB,MAAgB,EAAA;AACpD,EAAA,IAAI,CAAC,MAAQ,EAAA;AACX,IAAO,OAAA,CAAA;AAAA;AAGT,EAAA,MAAM,WAAW,MAAS,GAAA,EAAA;AAG1B,EAAO,OAAA,IAAA,CAAK,OAAO,CAAI,GAAA,EAAA,GAAK,YAAY,IAAO,GAAA,QAAA,GAAW,KAAK,EAAE,CAAA;AACnE;AAEA,SAAS,SAAS,YAAsB,EAAA;AACtC,EAAA,OAAO,CAAG,EAAA,IAAA,CAAK,KAAM,CAAA,YAAY,CAAC,CAAA,EAAA,CAAA;AACpC;AAYO,SAAS,iBAAsC,GAAA;AACpD,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACF;AACF;;ACvCA,MAAM,iBAAoB,GAAA,2CAAA;AAC1B,MAAM,0BAA6B,GAAA,0BAAA;AAE5B,SAAS,gBAAiB,CAAA,MAAA,EAAqB,eAAwC,GAAA,EAAqB,EAAA;AACjH,EAAM,MAAA;AAAA,IACJ,UAAa,GAAA,iBAAA;AAAA,IACb,mBAAsB,GAAA,0BAAA;AAAA;AAAA,IAEtB,QAAW,GAAA,EAAA;AAAA;AAAA,IACX,eAAkB,GAAA,GAAA;AAAA,IAClB,iBAAoB,GAAA,GAAA;AAAA,IACpB,gBAAmB,GAAA,GAAA;AAAA,IACnB,cAAiB,GAAA,GAAA;AAAA;AAAA;AAAA,IAGjB,YAAe,GAAA;AAAA,GACb,GAAA,eAAA;AAEJ,EAAI,IAAA,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,YAAc,EAAA;AACzC,IAAI,IAAA,OAAO,aAAa,QAAU,EAAA;AAChC,MAAA,OAAA,CAAQ,MAAM,oDAAoD,CAAA;AAAA;AAGpE,IAAI,IAAA,OAAO,iBAAiB,QAAU,EAAA;AACpC,MAAA,OAAA,CAAQ,MAAM,wDAAwD,CAAA;AAAA;AACxE;AAGF,EAAA,MAAM,OAAO,QAAW,GAAA,EAAA;AACxB,EAAA,MAAM,UAAU,CAAC0B,KAAAA,KAAiB,CAAIA,EAAAA,KAAAA,GAAO,eAAgB,IAAI,CAAA,GAAA,CAAA;AACjE,EAAA,MAAM,eAAe,CACnB,UAAA,EACAA,KACA,EAAA,UAAA,EACA,eACA,MAC2B,KAAA;AAC3B,IAAA,IAAI,UAAa,GAAA,CAAA,KAAM,CAAKA,IAAAA,KAAAA,GAAO,MAAM,CAAG,EAAA;AAC1C,MAAM,MAAA,IAAI,MAAM,6FAA6F,CAAA;AAAA;AAG/G,IAAO,OAAA;AAAA,MACL,UAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA,EAAU,QAAQA,KAAI,CAAA;AAAA,MACtB,YAAY,UAAaA,GAAAA,KAAAA;AAAA,MACzB,GAAI,UAAA,KAAe,iBAAoB,GAAA,EAAE,aAAe,EAAA,CAAA,EAAG,KAAM,CAAA,aAAA,GAAgBA,KAAI,CAAC,CAAK,EAAA,CAAA,EAAA,GAAI,EAAC;AAAA,MAChG,GAAG;AAAA,KACL;AAAA,GACF;AAGA,EAAA,MAAM,QAAW,GAAA;AAAA,IACf,EAAI,EAAA,YAAA,CAAa,iBAAmB,EAAA,EAAA,EAAI,IAAI,CAAK,IAAA,CAAA;AAAA,IACjD,EAAI,EAAA,YAAA,CAAa,iBAAmB,EAAA,EAAA,EAAI,IAAI,CAAC,CAAA;AAAA,IAC7C,EAAI,EAAA,YAAA,CAAa,iBAAmB,EAAA,EAAA,EAAI,IAAI,CAAC,CAAA;AAAA,IAC7C,EAAI,EAAA,YAAA,CAAa,iBAAmB,EAAA,EAAA,EAAI,IAAI,IAAI,CAAA;AAAA,IAChD,EAAI,EAAA,YAAA,CAAa,iBAAmB,EAAA,EAAA,EAAI,IAAI,CAAC,CAAA;AAAA,IAC7C,EAAI,EAAA,YAAA,CAAa,gBAAkB,EAAA,EAAA,EAAI,IAAI,IAAI,CAAA;AAAA,IAC/C,IAAM,EAAA,YAAA,CAAa,iBAAmB,EAAA,QAAA,EAAU,IAAI,IAAI,CAAA;AAAA,IACxD,SAAW,EAAA,YAAA,CAAa,iBAAmB,EAAA,EAAA,EAAI,IAAI,IAAI,CAAA;AAAA,IACvD,IAAA,EAAM,EAAE,GAAG,YAAa,CAAA,iBAAA,EAAmB,IAAI,EAAI,EAAA,IAAI,CAAG,EAAA,UAAA,EAAY,mBAAoB;AAAA,GAC5F;AAEA,EAAA,MAAM,IAAO,GAAA;AAAA,IACX,IAAM,EAAA,MAAA;AAAA,IACN,EAAI,EAAA,MAAA;AAAA,IACJ,EAAI,EAAA,MAAA;AAAA,IACJ,EAAI,EAAA,MAAA;AAAA,IACJ,EAAI,EAAA;AAAA,GACN;AAEA,EAAO,OAAA;AAAA,IACL,YAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,mBAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAG;AAAA,GACL;AACF;AAEA,SAAS,MAAM,KAAe,EAAA;AAC5B,EAAA,OAAO,IAAK,CAAA,KAAA,CAAM,KAAQ,GAAA,GAAG,CAAI,GAAA,GAAA;AACnC;;AC9IY,IAAA,gBAAA,qBAAAC,iBAAL,KAAA;AACL,EAAAA,kBAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,kBAAA,MAAO,CAAA,GAAA,MAAA;AAFG,EAAAA,OAAAA,iBAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA;;ACEL,SAAS,cAAc,KAAgD,EAAA;AAC5E,EAAA,MAAM,SAAiC,GAAA;AAAA,IACrC,IAAM,EAAA,iBAAA;AAAA,IACN,UAAY,EAAA;AAAA,MACV,UAAY,EAAA;AAAA,QACV,SAAA,EAAW,MAAM,UAAW,CAAA,UAAA;AAAA,QAC5B,SAAA,EAAW,MAAM,UAAW,CAAA;AAAA,OAC9B;AAAA,MACA,IAAM,EAAA;AAAA,QACJ,IAAM,EAAA,CAAA,EAAG,KAAM,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAA,CAAA;AAAA,QAClC,EAAA,EAAI,KAAM,CAAA,UAAA,CAAW,IAAK,CAAA,EAAA;AAAA,QAC1B,EAAA,EAAI,KAAM,CAAA,UAAA,CAAW,IAAK,CAAA,EAAA;AAAA,QAC1B,EAAA,EAAI,KAAM,CAAA,UAAA,CAAW,IAAK,CAAA,EAAA;AAAA,QAC1B,EAAA,EAAI,KAAM,CAAA,UAAA,CAAW,IAAK,CAAA;AAAA,OAC5B;AAAA,MACA,OAAS,EAAA;AAAA,QACP,EAAA,EAAI,KAAM,CAAA,UAAA,CAAW,EAAG,CAAA,QAAA;AAAA,QACxB,EAAA,EAAI,KAAM,CAAA,UAAA,CAAW,EAAG,CAAA,QAAA;AAAA,QACxB,EAAA,EAAI,KAAM,CAAA,UAAA,CAAW,EAAG,CAAA,QAAA;AAAA,QACxB,EAAA,EAAI,KAAM,CAAA,UAAA,CAAW,EAAG,CAAA,QAAA;AAAA,QACxB,EAAA,EAAI,KAAM,CAAA,UAAA,CAAW,EAAG,CAAA,QAAA;AAAA,QACxB,EAAA,EAAI,KAAM,CAAA,UAAA,CAAW,EAAG,CAAA;AAAA,OAC1B;AAAA,MACA,MAAQ,EAAA;AAAA,QACN,KAAA,EAAO,MAAM,UAAW,CAAA,eAAA;AAAA,QACxB,OAAA,EAAS,MAAM,UAAW,CAAA,iBAAA;AAAA,QAC1B,QAAA,EAAU,MAAM,UAAW,CAAA,gBAAA;AAAA,QAC3B,IAAA,EAAM,MAAM,UAAW,CAAA;AAAA,OACzB;AAAA,MACA,UAAY,EAAA;AAAA,QACV,EAAA,EAAI,KAAM,CAAA,UAAA,CAAW,SAAU,CAAA,UAAA;AAAA,QAC/B,EAAA,EAAI,KAAM,CAAA,UAAA,CAAW,SAAU,CAAA,UAAA;AAAA,QAC/B,EAAA,EAAI,KAAM,CAAA,UAAA,CAAW,IAAK,CAAA,UAAA;AAAA,QAC1B,EAAA,EAAI,KAAM,CAAA,UAAA,CAAW,EAAG,CAAA;AAAA,OAC1B;AAAA,MACA,IAAM,EAAA;AAAA,QACJ,UAAY,EAAA,MAAA;AAAA,QACZ,eAAiB,EAAA;AAAA;AACnB,KACF;AAAA,IACA,WAAa,EAAA;AAAA,MACX,EAAI,EAAA,CAAA,EAAG,KAAM,CAAA,WAAA,CAAY,OAAO,EAAE,CAAA,EAAA,CAAA;AAAA,MAClC,EAAI,EAAA,CAAA,EAAG,KAAM,CAAA,WAAA,CAAY,OAAO,EAAE,CAAA,EAAA,CAAA;AAAA,MAClC,EAAI,EAAA,CAAA,EAAG,KAAM,CAAA,WAAA,CAAY,OAAO,EAAE,CAAA,EAAA,CAAA;AAAA,MAClC,EAAI,EAAA,CAAA,EAAG,KAAM,CAAA,WAAA,CAAY,OAAO,EAAE,CAAA,EAAA,CAAA;AAAA,MAClC,EAAI,EAAA,CAAA,EAAG,KAAM,CAAA,WAAA,CAAY,OAAO,EAAE,CAAA,EAAA,CAAA;AAAA,MAClC,GAAK,EAAA,CAAA,EAAG,KAAM,CAAA,WAAA,CAAY,OAAO,GAAG,CAAA,EAAA;AAAA,KACtC;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAA,EAAM,MAAM,OAAQ,CAAA,QAAA;AAAA,MACpB,aAAe,EAAA,KAAA,CAAM,OAAQ,CAAA,GAAA,EAAK,CAAC,CAAA;AAAA,MACnC,CAAA,EAAG,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,MAClB,GAAA,EAAK,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,MACvB,EAAA,EAAI,KAAM,CAAA,OAAA,CAAQ,GAAG,CAAA;AAAA,MACrB,EAAA,EAAI,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,MACnB,EAAA,EAAI,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,MACnB,EAAA,EAAI,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,MACnB,EAAA,EAAI,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,MACnB,MAAA,EAAQ,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA;AAAA;AAAA,MAIvB,eAAA,EAAiB,MAAM,OAAQ,CAAA,QAAA;AAAA,MAC/B,UAAY,EAAA,CAAA,EAAG,KAAM,CAAA,OAAA,CAAQ,WAAW,CAAC,CAAA,EAAA,CAAA;AAAA,MACzC,kBAAoB,EAAA,CAAA,EAAG,KAAM,CAAA,OAAA,CAAQ,WAAW,CAAC,CAAA,EAAA,CAAA;AAAA,MACjD,eAAA,EAAiB,KAAM,CAAA,OAAA,CAAQ,QAAW,GAAA,CAAA;AAAA,MAC1C,gBAAA,EAAkB,KAAM,CAAA,OAAA,CAAQ,QAAW,GAAA,CAAA;AAAA,MAC3C,0BAA4B,EAAA,CAAA,EAAG,KAAM,CAAA,OAAA,CAAQ,QAAQ,CAAA,EAAA,CAAA;AAAA;AAAA;AAAA,MAIrD,+BAAiC,EAAA,CAAA,EAAG,KAAM,CAAA,OAAA,CAAQ,WAAW,CAAC,CAAA,EAAA,CAAA;AAAA,MAE9D,eAAiB,EAAA,CAAA,EAAG,KAAM,CAAA,OAAA,CAAQ,WAAW,CAAC,CAAA,EAAA,CAAA;AAAA,MAC9C,gBAAkB,EAAA,WAAA;AAAA,MAClB,iBAAiB,CAAO,IAAA,EAAA,KAAA,CAAM,OAAQ,CAAA,QAAA,GAAW,IAAI,IAAI,CAAA,EAAA,CAAA;AAAA,MACzD,4BAA8B,EAAA,SAAA;AAAA,MAC9B,2BAA6B,EAAA,WAAA;AAAA,MAC7B,gBAAkB,EAAA;AAAA,KACpB;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,MAAQ,EAAA;AAAA,QACN,EAAI,EAAA,KAAA,CAAM,KAAM,CAAA,YAAA,CAAa,CAAC,CAAA;AAAA,QAC9B,EAAI,EAAA,KAAA,CAAM,KAAM,CAAA,YAAA,CAAa,CAAC,CAAA;AAAA,QAC9B,EAAI,EAAA,KAAA,CAAM,KAAM,CAAA,YAAA,CAAa,CAAC;AAAA,OAChC;AAAA,MACA,KAAO,EAAA;AAAA,QACL,EAAI,EAAA;AAAA;AACN,KACF;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,IAAI,KAAM,CAAA,OAAA,CAAQ,QAAW,GAAA,KAAA,CAAM,WAAW,MAAO,CAAA,EAAA;AAAA,MACrD,IAAI,KAAM,CAAA,OAAA,CAAQ,QAAW,GAAA,KAAA,CAAM,WAAW,MAAO,CAAA,EAAA;AAAA,MACrD,IAAI,KAAM,CAAA,OAAA,CAAQ,QAAW,GAAA,KAAA,CAAM,WAAW,MAAO,CAAA;AAAA,KACvD;AAAA,IACA,cAAc,KAAM,CAAA,UAAA,CAAW,KAAM,CAAA,OAAA,GAAU,MAAM,OAAQ,CAAA,QAAA;AAAA,IAC7D,mBAAmB,KAAM,CAAA,OAAA,CAAQ,QAAW,GAAA,KAAA,CAAM,WAAW,KAAM,CAAA,YAAA;AAAA,IACnE,QAAQ,KAAM,CAAA;AAAA,GAChB;AAEA,EAAA,MAAM,WAAc,GAAA;AAAA,IAClB,GAAG,mBAAA;AAAA,IACH,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA,IACP,MAAQ,EAAA,SAAA;AAAA,IACR,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA;AAAA,IACP,KAAO,EAAA,SAAA;AAAA;AAAA,IACP,OAAS,EAAA,SAAA;AAAA,IACT,QAAU,EAAA,SAAA;AAAA,IACV,SAAW,EAAA,SAAA;AAAA,IACX,UAAY,EAAA,SAAA;AAAA,IACZ,GAAK,EAAA,SAAA;AAAA,IACL,MAAQ,EAAA,SAAA;AAAA,IACR,MAAQ,EAAA,SAAA;AAAA,IACR,QAAU,EAAA,SAAA;AAAA,IACV,MAAQ,EAAA,SAAA;AAAA,IACR,UAAY,EAAA;AAAA,GACd;AAEA,EAAA,MAAM,WAAc,GAAA;AAAA,IAClB,GAAA,EAAK,KAAM,CAAA,MAAA,CAAO,UAAW,CAAA,OAAA;AAAA,IAC7B,GAAA,EAAK,KAAM,CAAA,MAAA,CAAO,UAAW,CAAA,SAAA;AAAA,IAC7B,GAAA,EAAK,KAAM,CAAA,MAAA,CAAO,MAAO,CAAA,KAAA;AAAA,IACzB,WAAA,EAAa,KAAM,CAAA,MAAA,CAAO,UAAW,CAAA,MAAA;AAAA,IACrC,OAAA,EAAS,KAAM,CAAA,MAAA,CAAO,OAAQ,CAAA,IAAA;AAAA,IAC9B,OAAA,EAAS,KAAM,CAAA,MAAA,CAAO,OAAQ,CAAA;AAAA,GAChC;AAEA,EAAA,MAAM,OAAU,GAAA;AAAA,IACd,OAAA,EAAS,KAAM,CAAA,MAAA,CAAO,MAAO,CAAA,IAAA;AAAA,IAC7B,OAAA,EAAS,KAAM,CAAA,MAAA,CAAO,MAAO,CAAA,MAAA;AAAA,IAC7B,OAAA,EAAS,KAAM,CAAA,MAAA,CAAO,MAAO,CAAA;AAAA,GAC/B;AAEA,EAAA,MAAM,UAAa,GAAA;AAAA,IACjB,UAAA,EAAY,KAAM,CAAA,MAAA,CAAO,IAAK,CAAA,WAAA;AAAA,IAC9B,WAAA,EAAa,KAAM,CAAA,MAAA,CAAO,IAAK,CAAA,OAAA;AAAA,IAC/B,IAAA,EAAM,KAAM,CAAA,MAAA,CAAO,IAAK,CAAA,OAAA;AAAA,IACxB,YAAA,EAAc,KAAM,CAAA,MAAA,CAAO,IAAK,CAAA,SAAA;AAAA,IAChC,QAAA,EAAU,KAAM,CAAA,MAAA,CAAO,IAAK,CAAA,SAAA;AAAA,IAC5B,SAAA,EAAW,KAAM,CAAA,MAAA,CAAO,IAAK,CAAA,QAAA;AAAA,IAC7B,QAAA,EAAU,KAAM,CAAA,MAAA,CAAO,OAAQ,CAAA;AAAA,GACjC;AAEA,EAAA,MAAM,IAAO,GAAA;AAAA;AAAA,IAEX,SAAA,EAAW,KAAM,CAAA,MAAA,CAAO,IAAK,CAAA,OAAA;AAAA,IAC7B,eAAA,EAAiB,KAAM,CAAA,MAAA,CAAO,IAAK,CAAA,SAAA;AAAA,IACnC,WAAA,EAAa,KAAM,CAAA,UAAA,CAAW,KAAM,CAAA,UAAA;AAAA,IACpC,mBAAA,EAAqB,KAAM,CAAA,MAAA,CAAO,MAAO,CAAA,kBAAA;AAAA,IACzC,eAAA,EAAiB,KAAM,CAAA,UAAA,CAAW,KAAM,CAAA,WAAA;AAAA,IACxC,oBAAA,EAAsB,KAAM,CAAA,UAAA,CAAW,KAAM,CAAA,WAAA;AAAA,IAC7C,qBAAA,EAAuB,KAAM,CAAA,MAAA,CAAO,OAAQ,CAAA,MAAA;AAAA,IAC5C,sBAAA,EAAwB,KAAM,CAAA,MAAA,CAAO,KAAM,CAAA,MAAA;AAAA,IAC3C,wBAAA,EAA0B,KAAM,CAAA,MAAA,CAAO,IAAK,CAAA,QAAA;AAAA,IAC5C,aAAA,EAAe,KAAM,CAAA,UAAA,CAAW,KAAM,CAAA,IAAA;AAAA,IACtC,qBAAA,EAAuB,KAAM,CAAA,MAAA,CAAO,MAAO,CAAA,YAAA;AAAA,IAC3C,gBAAA,EAAkB,KAAM,CAAA,MAAA,CAAO,OAAQ,CAAA,IAAA;AAAA,IACvC,yBAAA,EAA2B,KAAM,CAAA,MAAA,CAAO,KAAM,CAAA,YAAA;AAAA,IAC9C,uBAAA,EAAyB,KAAM,CAAA,MAAA,CAAO,KAAM,CAAA;AAAA,GAC9C;AAEA,EAAO,OAAA;AAAA,IACL,GAAG,SAAA;AAAA,IACH,MAAM,KAAM,CAAA,MAAA,CAAO,SAAS,MAAS,GAAA,gBAAA,CAAiB,OAAO,gBAAiB,CAAA,KAAA;AAAA,IAC9E,QAAQ,KAAM,CAAA,MAAA;AAAA,IACd,SAAS,KAAM,CAAA,OAAA;AAAA,IACf,MAAM,KAAM,CAAA,IAAA;AAAA,IACZ,OAAS,EAAA;AAAA,MACP,GAAG,WAAA;AAAA,MACH,cAAc,WAAY,CAAA,MAAA;AAAA,MAC1B,YAAA,EAAc,KAAM,CAAA,MAAA,CAAO,OAAQ,CAAA,IAAA;AAAA,MACnC,YAAA,EAAc,KAAM,CAAA,MAAA,CAAO,OAAQ,CAAA,IAAA;AAAA,MACnC,WAAA,EAAa,KAAM,CAAA,MAAA,CAAO,KAAM,CAAA,IAAA;AAAA,MAChC,QAAA,EAAU,KAAM,CAAA,MAAA,CAAO,KAAM,CAAA,IAAA;AAAA,MAC7B,UAAA,EAAY,KAAM,CAAA,MAAA,CAAO,OAAQ,CAAA,IAAA;AAAA,MACjC,WAAa,EAAA,SAAA;AAAA,MACb,aAAa,WAAY,CAAA,MAAA;AAAA,MACzB,MAAA,EAAQ,KAAM,CAAA,MAAA,CAAO,OAAQ,CAAA,IAAA;AAAA,MAC7B,IAAA,EAAM,KAAM,CAAA,MAAA,CAAO,OAAQ,CAAA,IAAA;AAAA,MAC3B,QAAA,EAAU,KAAM,CAAA,MAAA,CAAO,OAAQ,CAAA;AAAA,KACjC;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,GAAG,WAAA;AAAA,MACH,GAAG,OAAA;AAAA,MACH,GAAG,IAAA;AAAA,MACH,GAAG,UAAA;AAAA,MAEH,MAAA,EAAQ,KAAM,CAAA,MAAA,CAAO,UAAW,CAAA,MAAA;AAAA,MAChC,OAAA,EAAS,KAAM,CAAA,UAAA,CAAW,KAAM,CAAA,UAAA;AAAA,MAChC,WAAA,EAAa,KAAM,CAAA,UAAA,CAAW,KAAM,CAAA,WAAA;AAAA,MACpC,YAAA,EAAc,KAAM,CAAA,MAAA,CAAO,UAAW,CAAA,MAAA;AAAA,MACtC,gBAAA,EAAkB,KAAM,CAAA,MAAA,CAAO,UAAW,CAAA,MAAA;AAAA,MAE1C,YAAY,IAAK,CAAA,WAAA;AAAA,MACjB,gBAAgB,WAAY,CAAA,KAAA;AAAA,MAC5B,uBAAuB,WAAY,CAAA,GAAA;AAAA,MAEnC,IAAA,EAAM,KAAM,CAAA,MAAA,CAAO,IAAK,CAAA,OAAA;AAAA,MACxB,YAAA,EAAc,KAAM,CAAA,MAAA,CAAO,IAAK,CAAA,QAAA;AAAA,MAChC,SAAA,EAAW,KAAM,CAAA,MAAA,CAAO,IAAK,CAAA,WAAA;AAAA,MAC7B,YAAA,EAAc,KAAM,CAAA,MAAA,CAAO,IAAK,CAAA;AAAA,KAClC;AAAA,IACA,OAAS,EAAA;AAAA,MACP,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,eAAe,KAAM,CAAA;AAAA,GACvB;AACF;AAEA,MAAM,mBAAsB,GAAA;AAAA;AAAA,EAE1B,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA;AAAA,EAGR,MAAQ,EAAA,SAAA;AAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA;AAAA;AAAA,EAGR,KAAO,EAAA;AACT,CAAA;;ACtNO,SAAS,0BAA0B,MAA+C,EAAA;AACvF,EAAA,MAAM,OAAO,MAAO,CAAA,IAAA,KAAS,OAAU,GAAA,YAAA,KAAiB,WAAY,EAAA;AAEpE,EAAA,MAAM,cAAsC,EAAC;AAE7C,EAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,IAAW,KAAA,MAAA,KAAA,IAAS,IAAI,MAAQ,EAAA;AAC9B,MAAY,WAAA,CAAA,KAAA,CAAM,IAAI,CAAA,GAAI,KAAM,CAAA,KAAA;AAChC,MAAA,IAAI,MAAM,OAAS,EAAA;AACjB,QAAW,KAAA,MAAA,KAAA,IAAS,MAAM,OAAS,EAAA;AACjC,UAAY,WAAA,CAAA,KAAK,IAAI,KAAM,CAAA,KAAA;AAAA;AAC7B;AACF;AACF;AAIF,EAAA,WAAA,CAAY,aAAa,CAAA,GAAI,MAAO,CAAA,IAAA,KAAS,UAAU,wBAA2B,GAAA,eAAA;AAClF,EAAY,WAAA,CAAA,UAAU,CAAI,GAAA,MAAA,CAAO,UAAW,CAAA,OAAA;AAC5C,EAAY,WAAA,CAAA,MAAM,CAAI,GAAA,MAAA,CAAO,IAAK,CAAA,OAAA;AAElC,EAAM,MAAA,cAAA,GAAiB,CAAC,SAAsB,KAAA;AAC5C,IAAA,IAAI,CAAC,SAAW,EAAA;AACd,MAAO,OAAA,cAAA;AAAA;AAGT,IAAM,MAAA,SAAA,GAAY,YAAY,SAAS,CAAA;AACvC,IAAA,IAAI,SAAW,EAAA;AACb,MAAO,OAAA,SAAA;AAAA;AAGT,IAAI,IAAA,SAAA,CAAU,CAAC,CAAA,KAAM,GAAK,EAAA;AACxB,MAAO,OAAA,SAAA;AAAA;AAGT,IAAA,IAAI,SAAU,CAAA,OAAA,CAAQ,KAAK,CAAA,GAAI,CAAI,CAAA,EAAA;AACjC,MAAO,OAAA,SAAA;AAAA;AAGT,IAAA,MAAM,WAAc,GAAA,gBAAA,CAAiB,SAAU,CAAA,WAAA,EAAa,CAAA;AAC5D,IAAA,IAAI,WAAa,EAAA;AACf,MAAA,WAAA,CAAY,SAAS,CAAI,GAAA,WAAA;AACzB,MAAO,OAAA,WAAA;AAAA;AAGT,IAAO,OAAA,SAAA;AAAA,GACT;AAEA,EAAA,MAAM,UAAU,iBAAkB,EAAA;AAElC,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,WAA6B,GAAA;AACpC,EAAO,OAAA;AAAA,IACL;AAAA,MACE,IAAM,EAAA,KAAA;AAAA,MACN,MAAQ,EAAA;AAAA,QACN,EAAE,KAAA,EAAO,SAAW,EAAA,IAAA,EAAM,iBAAkB,EAAA;AAAA,QAC5C,EAAE,KAAA,EAAO,SAAW,EAAA,IAAA,EAAM,WAAY,EAAA;AAAA,QACtC,EAAE,KAAO,EAAA,SAAA,EAAW,IAAM,EAAA,KAAA,EAAO,SAAS,IAAK,EAAA;AAAA,QAC/C,EAAE,KAAA,EAAO,SAAW,EAAA,IAAA,EAAM,eAAgB,EAAA;AAAA,QAC1C,EAAE,KAAA,EAAO,SAAW,EAAA,IAAA,EAAM,UAAW;AAAA;AACvC,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA,QAAA;AAAA,MACN,MAAQ,EAAA;AAAA,QACN,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,oBAAsB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QAC5D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,cAAgB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QACtD,EAAE,OAAO,SAAW,EAAA,IAAA,EAAM,UAAU,OAAS,EAAA,EAAI,EAAA,OAAA,EAAS,IAAK,EAAA;AAAA,QAC/D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,kBAAoB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QAC1D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,aAAe,EAAA,OAAA,EAAS,EAAG;AAAA;AACvD,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA,QAAA;AAAA,MACN,MAAQ,EAAA;AAAA,QACN,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,oBAAsB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QAC5D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,cAAgB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QACtD,EAAE,OAAO,SAAW,EAAA,IAAA,EAAM,UAAU,OAAS,EAAA,EAAI,EAAA,OAAA,EAAS,IAAK,EAAA;AAAA,QAC/D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,kBAAoB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QAC1D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,aAAe,EAAA,OAAA,EAAS,EAAG;AAAA;AACvD,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA,OAAA;AAAA,MACN,MAAQ,EAAA;AAAA,QACN,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,mBAAqB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QAC3D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,aAAe,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QACrD,EAAE,OAAO,SAAW,EAAA,IAAA,EAAM,SAAS,OAAS,EAAA,EAAI,EAAA,OAAA,EAAS,IAAK,EAAA;AAAA,QAC9D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,iBAAmB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QACzD,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,YAAc,EAAA,OAAA,EAAS,EAAG;AAAA;AACtD,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA,MAAA;AAAA,MACN,MAAQ,EAAA;AAAA,QACN,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,kBAAoB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QAC1D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,YAAc,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QACpD,EAAE,OAAO,SAAW,EAAA,IAAA,EAAM,QAAQ,OAAS,EAAA,EAAI,EAAA,OAAA,EAAS,IAAK,EAAA;AAAA,QAC7D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,gBAAkB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QACxD,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,WAAa,EAAA,OAAA,EAAS,EAAG;AAAA;AACrD,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA,QAAA;AAAA,MACN,MAAQ,EAAA;AAAA,QACN,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,oBAAsB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QAC5D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,cAAgB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QACtD,EAAE,OAAO,SAAW,EAAA,IAAA,EAAM,UAAU,OAAS,EAAA,EAAI,EAAA,OAAA,EAAS,IAAK,EAAA;AAAA,QAC/D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,kBAAoB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QAC1D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,aAAe,EAAA,OAAA,EAAS,EAAG;AAAA;AACvD;AACF,GACF;AACF;AAEA,SAAS,YAA8B,GAAA;AACrC,EAAO,OAAA;AAAA,IACL;AAAA,MACE,IAAM,EAAA,KAAA;AAAA,MACN,MAAQ,EAAA;AAAA,QACN,EAAE,KAAA,EAAO,SAAW,EAAA,IAAA,EAAM,iBAAkB,EAAA;AAAA,QAC5C,EAAE,KAAA,EAAO,SAAW,EAAA,IAAA,EAAM,WAAY,EAAA;AAAA,QACtC,EAAE,KAAO,EAAA,SAAA,EAAW,IAAM,EAAA,KAAA,EAAO,SAAS,IAAK,EAAA;AAAA,QAC/C,EAAE,KAAA,EAAO,SAAW,EAAA,IAAA,EAAM,eAAgB,EAAA;AAAA,QAC1C,EAAE,KAAA,EAAO,SAAW,EAAA,IAAA,EAAM,UAAW;AAAA;AACvC,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA,QAAA;AAAA,MACN,MAAQ,EAAA;AAAA,QACN,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,oBAAsB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QAC5D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,cAAgB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QACtD,EAAE,OAAO,SAAW,EAAA,IAAA,EAAM,UAAU,OAAS,EAAA,EAAI,EAAA,OAAA,EAAS,IAAK,EAAA;AAAA,QAC/D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,kBAAoB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QAC1D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,aAAe,EAAA,OAAA,EAAS,EAAG;AAAA;AACvD,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA,QAAA;AAAA,MACN,MAAQ,EAAA;AAAA,QACN,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,oBAAsB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QAC5D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,cAAgB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QACtD,EAAE,OAAO,SAAW,EAAA,IAAA,EAAM,UAAU,OAAS,EAAA,EAAI,EAAA,OAAA,EAAS,IAAK,EAAA;AAAA,QAC/D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,kBAAoB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QAC1D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,aAAe,EAAA,OAAA,EAAS,EAAG;AAAA;AACvD,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA,OAAA;AAAA,MACN,MAAQ,EAAA;AAAA,QACN,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,mBAAqB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QAC3D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,aAAe,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QACrD,EAAE,OAAO,SAAW,EAAA,IAAA,EAAM,SAAS,OAAS,EAAA,EAAI,EAAA,OAAA,EAAS,IAAK,EAAA;AAAA,QAC9D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,iBAAmB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QACzD,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,YAAc,EAAA,OAAA,EAAS,EAAG;AAAA;AACtD,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA,MAAA;AAAA,MACN,MAAQ,EAAA;AAAA,QACN,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,kBAAoB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QAC1D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,YAAc,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QACpD,EAAE,OAAO,SAAW,EAAA,IAAA,EAAM,QAAQ,OAAS,EAAA,EAAI,EAAA,OAAA,EAAS,IAAK,EAAA;AAAA,QAC7D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,gBAAkB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QACxD,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,WAAa,EAAA,OAAA,EAAS,EAAG;AAAA;AACrD,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA,QAAA;AAAA,MACN,MAAQ,EAAA;AAAA,QACN,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,oBAAsB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QAC5D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,cAAgB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QACtD,EAAE,OAAO,SAAW,EAAA,IAAA,EAAM,UAAU,OAAS,EAAA,EAAI,EAAA,OAAA,EAAS,IAAK,EAAA;AAAA,QAC/D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,kBAAoB,EAAA,OAAA,EAAS,EAAG,EAAA;AAAA,QAC1D,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,aAAe,EAAA,OAAA,EAAS,EAAG;AAAA;AACvD;AACF,GACF;AACF;AAEA,SAAS,iBAAoB,GAAA;AAG3B,EAAO,OAAA;AAAA,IACL,OAAA;AAAA;AAAA,IACA,kBAAA;AAAA;AAAA,IACA,YAAA;AAAA;AAAA,IACA,kBAAA;AAAA;AAAA,IACA,KAAA;AAAA;AAAA,IACA,MAAA;AAAA;AAAA,IACA,QAAA;AAAA;AAAA,IACA,SAAA;AAAA;AAAA,IACA,YAAA;AAAA;AAAA,IACA,QAAA;AAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AACF;AAwFA,MAAM,gBAA2C,GAAA;AAAA,EAC/C,SAAW,EAAA,SAAA;AAAA,EACX,YAAc,EAAA,SAAA;AAAA,EACd,IAAM,EAAA,SAAA;AAAA,EACN,UAAY,EAAA,SAAA;AAAA,EACZ,KAAO,EAAA,SAAA;AAAA,EACP,KAAO,EAAA,SAAA;AAAA,EACP,MAAQ,EAAA,SAAA;AAAA,EACR,KAAO,EAAA,SAAA;AAAA,EACP,cAAgB,EAAA,SAAA;AAAA,EAChB,IAAM,EAAA,SAAA;AAAA,EACN,UAAY,EAAA,SAAA;AAAA,EACZ,KAAO,EAAA,SAAA;AAAA,EACP,SAAW,EAAA,SAAA;AAAA,EACX,SAAW,EAAA,SAAA;AAAA,EACX,UAAY,EAAA,SAAA;AAAA,EACZ,SAAW,EAAA,SAAA;AAAA,EACX,KAAO,EAAA,SAAA;AAAA,EACP,cAAgB,EAAA,SAAA;AAAA,EAChB,QAAU,EAAA,SAAA;AAAA,EACV,OAAS,EAAA,SAAA;AAAA,EACT,IAAM,EAAA,SAAA;AAAA,EACN,QAAU,EAAA,SAAA;AAAA,EACV,QAAU,EAAA,SAAA;AAAA,EACV,aAAe,EAAA,SAAA;AAAA,EACf,QAAU,EAAA,SAAA;AAAA,EACV,SAAW,EAAA,SAAA;AAAA,EACX,SAAW,EAAA,SAAA;AAAA,EACX,WAAa,EAAA,SAAA;AAAA,EACb,cAAgB,EAAA,SAAA;AAAA,EAChB,UAAY,EAAA,SAAA;AAAA,EACZ,UAAY,EAAA,SAAA;AAAA,EACZ,OAAS,EAAA,SAAA;AAAA,EACT,UAAY,EAAA,SAAA;AAAA,EACZ,YAAc,EAAA,SAAA;AAAA,EACd,aAAe,EAAA,SAAA;AAAA,EACf,aAAe,EAAA,SAAA;AAAA,EACf,aAAe,EAAA,SAAA;AAAA,EACf,UAAY,EAAA,SAAA;AAAA,EACZ,QAAU,EAAA,SAAA;AAAA,EACV,WAAa,EAAA,SAAA;AAAA,EACb,OAAS,EAAA,SAAA;AAAA,EACT,UAAY,EAAA,SAAA;AAAA,EACZ,SAAW,EAAA,SAAA;AAAA,EACX,WAAa,EAAA,SAAA;AAAA,EACb,WAAa,EAAA,SAAA;AAAA,EACb,OAAS,EAAA,SAAA;AAAA,EACT,SAAW,EAAA,SAAA;AAAA,EACX,UAAY,EAAA,SAAA;AAAA,EACZ,IAAM,EAAA,SAAA;AAAA,EACN,SAAW,EAAA,SAAA;AAAA,EACX,IAAM,EAAA,SAAA;AAAA,EACN,KAAO,EAAA,SAAA;AAAA,EACP,WAAa,EAAA,SAAA;AAAA,EACb,QAAU,EAAA,SAAA;AAAA,EACV,OAAS,EAAA,SAAA;AAAA,EACT,YAAc,EAAA,SAAA;AAAA,EACd,MAAQ,EAAA,SAAA;AAAA,EACR,KAAO,EAAA,SAAA;AAAA,EACP,KAAO,EAAA,SAAA;AAAA,EACP,QAAU,EAAA,SAAA;AAAA,EACV,aAAe,EAAA,SAAA;AAAA,EACf,SAAW,EAAA,SAAA;AAAA,EACX,YAAc,EAAA,SAAA;AAAA,EACd,SAAW,EAAA,SAAA;AAAA,EACX,UAAY,EAAA,SAAA;AAAA,EACZ,SAAW,EAAA,SAAA;AAAA,EACX,oBAAsB,EAAA,SAAA;AAAA,EACtB,SAAW,EAAA,SAAA;AAAA,EACX,UAAY,EAAA,SAAA;AAAA,EACZ,SAAW,EAAA,SAAA;AAAA,EACX,WAAa,EAAA,SAAA;AAAA,EACb,aAAe,EAAA,SAAA;AAAA,EACf,YAAc,EAAA,SAAA;AAAA,EACd,cAAgB,EAAA,SAAA;AAAA,EAChB,cAAgB,EAAA,SAAA;AAAA,EAChB,WAAa,EAAA,SAAA;AAAA,EACb,IAAM,EAAA,SAAA;AAAA,EACN,SAAW,EAAA,SAAA;AAAA,EACX,KAAO,EAAA,SAAA;AAAA,EACP,OAAS,EAAA,SAAA;AAAA,EACT,MAAQ,EAAA,SAAA;AAAA,EACR,gBAAkB,EAAA,SAAA;AAAA,EAClB,UAAY,EAAA,SAAA;AAAA,EACZ,YAAc,EAAA,SAAA;AAAA,EACd,YAAc,EAAA,SAAA;AAAA,EACd,cAAgB,EAAA,SAAA;AAAA,EAChB,eAAiB,EAAA,SAAA;AAAA,EACjB,iBAAmB,EAAA,SAAA;AAAA,EACnB,eAAiB,EAAA,SAAA;AAAA,EACjB,eAAiB,EAAA,SAAA;AAAA,EACjB,YAAc,EAAA,SAAA;AAAA,EACd,SAAW,EAAA,SAAA;AAAA,EACX,SAAW,EAAA,SAAA;AAAA,EACX,QAAU,EAAA,SAAA;AAAA,EACV,WAAa,EAAA,SAAA;AAAA,EACb,IAAM,EAAA,SAAA;AAAA,EACN,OAAS,EAAA,SAAA;AAAA,EACT,KAAO,EAAA,SAAA;AAAA,EACP,SAAW,EAAA,SAAA;AAAA,EACX,MAAQ,EAAA,SAAA;AAAA,EACR,SAAW,EAAA,SAAA;AAAA,EACX,MAAQ,EAAA,SAAA;AAAA,EACR,aAAe,EAAA,SAAA;AAAA,EACf,SAAW,EAAA,SAAA;AAAA,EACX,aAAe,EAAA,SAAA;AAAA,EACf,aAAe,EAAA,SAAA;AAAA,EACf,UAAY,EAAA,SAAA;AAAA,EACZ,SAAW,EAAA,SAAA;AAAA,EACX,IAAM,EAAA,SAAA;AAAA,EACN,IAAM,EAAA,SAAA;AAAA,EACN,IAAM,EAAA,SAAA;AAAA,EACN,UAAY,EAAA,SAAA;AAAA,EACZ,MAAQ,EAAA,SAAA;AAAA,EACR,aAAe,EAAA,SAAA;AAAA,EACf,GAAK,EAAA,SAAA;AAAA,EACL,SAAW,EAAA,SAAA;AAAA,EACX,SAAW,EAAA,SAAA;AAAA,EACX,WAAa,EAAA,SAAA;AAAA,EACb,MAAQ,EAAA,SAAA;AAAA,EACR,UAAY,EAAA,SAAA;AAAA,EACZ,QAAU,EAAA,SAAA;AAAA,EACV,QAAU,EAAA,SAAA;AAAA,EACV,MAAQ,EAAA,SAAA;AAAA,EACR,MAAQ,EAAA,SAAA;AAAA,EACR,OAAS,EAAA,SAAA;AAAA,EACT,SAAW,EAAA,SAAA;AAAA,EACX,SAAW,EAAA,SAAA;AAAA,EACX,IAAM,EAAA,SAAA;AAAA,EACN,WAAa,EAAA,SAAA;AAAA,EACb,SAAW,EAAA,SAAA;AAAA,EACX,GAAK,EAAA,SAAA;AAAA,EACL,IAAM,EAAA,SAAA;AAAA,EACN,OAAS,EAAA,SAAA;AAAA,EACT,MAAQ,EAAA,SAAA;AAAA,EACR,SAAW,EAAA,SAAA;AAAA,EACX,MAAQ,EAAA,SAAA;AAAA,EACR,KAAO,EAAA,SAAA;AAAA,EACP,KAAO,EAAA,SAAA;AAAA,EACP,UAAY,EAAA,SAAA;AAAA,EACZ,MAAQ,EAAA,SAAA;AAAA,EACR,WAAa,EAAA;AACf,CAAA;;ACjgBO,MAAM,MAAS,GAAA;AAAA,EACpB,WAAa,EAAA,GAAA;AAAA,EACb,WAAa,EAAA,GAAA;AAAA,EACb,QAAU,EAAA,IAAA;AAAA,EACV,QAAU,EAAA,IAAA;AAAA,EACV,SAAW,EAAA,IAAA;AAAA,EACX,OAAS,EAAA,IAAA;AAAA,EACT,aAAe,EAAA,IAAA;AAAA,EACf,KAAO,EAAA,IAAA;AAAA,EACP,MAAQ,EAAA;AACV,CAAA;;ACWgB,SAAA,WAAA,CAAY,OAA2B,GAAA,EAAmB,EAAA;AACxE,EAAM,MAAA;AAAA,IACJ,IAAA;AAAA,IACA,MAAA,EAAQ,cAAc,EAAC;AAAA,IACvB,OAAA,EAAS,eAAe,EAAC;AAAA,IACzB,KAAA,EAAO,aAAa,EAAC;AAAA,IACrB,UAAA,EAAY,kBAAkB;AAAC,GAC7B,GAAA,OAAA;AAEJ,EAAM,MAAA,MAAA,GAAS,aAAa,WAAW,CAAA;AACvC,EAAA,MAAM,cAAc,iBAAkB,EAAA;AACtC,EAAM,MAAA,OAAA,GAAU,cAAc,YAAY,CAAA;AAC1C,EAAM,MAAA,KAAA,GAAQ,YAAY,UAAU,CAAA;AACpC,EAAM,MAAA,UAAA,GAAa,gBAAiB,CAAA,MAAA,EAAQ,eAAe,CAAA;AAC3D,EAAM,MAAA,OAAA,GAAU,cAAc,MAAM,CAAA;AACpC,EAAA,MAAM,cAAc,iBAAkB,EAAA;AACtC,EAAM,MAAA,UAAA,GAAa,gBAAiB,CAAA,MAAe,CAAA;AACnD,EAAM,MAAA,aAAA,GAAgB,0BAA0B,MAAM,CAAA;AAEtD,EAAA,MAAM,KAAQ,GAAA;AAAA,IACZ,IAAM,EAAA,IAAA,IAAA,IAAA,GAAA,IAAA,GAAS,MAAO,CAAA,IAAA,KAAS,SAAS,MAAS,GAAA,OAAA;AAAA,IACjD,MAAA,EAAQ,OAAO,IAAS,KAAA,MAAA;AAAA,IACxB,OAAA,EAAS,OAAO,IAAS,KAAA,OAAA;AAAA,IACzB,MAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,GAAG;AAAA,KACL;AAAA,IACA,OAAO;AAAC,GACV;AAEA,EAAO,OAAA;AAAA,IACL,GAAG,KAAA;AAAA,IACH,EAAA,EAAI,cAAc,KAAK;AAAA,GACzB;AACF;;AC3DY,IAAA,aAAA,qBAAAC,cAAL,KAAA;AACL,EAAAA,eAAA,gBAAiB,CAAA,GAAA,iBAAA;AACjB,EAAAA,eAAA,gBAAiB,CAAA,GAAA,iBAAA;AAGjB,EAAAA,eAAA,gBAAiB,CAAA,GAAA,iBAAA;AAEjB,EAAAA,eAAA,iBAAkB,CAAA,GAAA,kBAAA;AAGlB,EAAAA,eAAA,aAAc,CAAA,GAAA,cAAA;AACd,EAAAA,eAAA,cAAe,CAAA,GAAA,eAAA;AACf,EAAAA,eAAA,aAAc,CAAA,GAAA,cAAA;AAGd,EAAAA,eAAA,UAAW,CAAA,GAAA,WAAA;AAGX,EAAAA,eAAA,kBAAmB,CAAA,GAAA,mBAAA;AAKnB,EAAAA,eAAA,aAAc,CAAA,GAAA,cAAA;AAUd,EAAAA,eAAA,cAAe,CAAA,GAAA,eAAA;AAMf,EAAAA,eAAA,WAAY,CAAA,GAAA,WAAA;AAvCF,EAAAA,OAAAA,cAAAA;AAAA,CAAA,EAAA,aAAA,IAAA,EAAA;;ACJL,SAAS,YAAY,KAAkB,EAAA;AAC5C,EAAO,OAAA;AAAA,IACL,GAAG,KAAA;AAAA,IACH,MAAQ,EAAA,KAAA,CAAM,MAAO,CAAA,GAAA,CAAI,CAAC,KAAU,KAAA;AAClC,MAAA,MAAM,OAAU,GAAA,MAAA,CAAO,KAAM,CAAA,MAAA,CAAO,OAAO,CAAA;AAE3C,MAAA,IAAI,CAAC,MAAA,CAAO,KAAM,CAAA,OAAO,CAAG,EAAA;AAC1B,QAAO,OAAA,gBAAA,CAAiB,OAAO,OAAO,CAAA;AAAA,OACjC,MAAA;AACL,QAAO,OAAA,KAAA;AAAA;AACT,KACD;AAAA,GACH;AACF;AAEgB,SAAA,gBAAA,CAAiB,OAAc,OAAiB,EAAA;AAC9D,EAAM,MAAA,eAAA,GAAkB,KAAM,CAAA,MAAA,CAAO,KAAM,EAAA;AAE3C,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,eAAA,CAAgB,QAAQ,CAAK,EAAA,EAAA;AAC/C,IAAI,IAAA,eAAA,CAAgB,CAAC,CAAA,KAAM,IAAM,EAAA;AAC/B,MAAA,eAAA,CAAgB,CAAC,CAAI,GAAA,OAAA;AAAA;AACvB;AAGF,EAAO,OAAA;AAAA,IACL,GAAG,KAAA;AAAA,IACH,MAAQ,EAAA;AAAA,GACV;AACF;;ACVO,MAAM,oBAAuB,GAAA;AAAA,EAClC,IAAA;AAAA,EAAO,IAAA;AAAA,EAAO,MAAA;AAAA,EAAS,IAAA;AAAA,EAAO,IAAA;AAAA,EAC9B,IAAA;AAAA,EAAO,IAAA;AAAA,EAAO,KAAA;AAAA,EAAS,IAAA;AAAA,EAAO,IAAA;AAAA,EAC9B,IAAA;AAAA,EAAO,IAAA;AAAA,EAAO,KAAA;AAAA,EAAS,IAAA;AAAA,EAAO,IAAA;AAAA,EAC9B,IAAA;AAAA,EAAO,IAAA;AAAA,EAAO,KAAA;AAAA,EAAS,IAAA;AAAA,EAAO,IAAA;AAAA,EAC9B,IAAA;AAAA,EAAO,IAAA;AAAA,EAAO,KAAA;AAAA,EAAS,IAAA;AAAA,EAAO,IAAA;AAAA,EAC9B,IAAA;AAAA,EAAO,IAAA;AAAA,EAAO,KAAA;AAAA,EAAS,IAAA;AAAA,EAAO,IAAA;AAAA,EAC9B,IAAA;AAAA,EAAO,IAAA;AAAA,EAAO,KAAA;AAAA,EAAS,IAAA;AAAA,EAAO,IAAA;AAAA,EAC9B,IAAA;AAAA,EAAO,IAAA;AAAA,EAAO,KAAA;AAAA,EAAS,IAAA;AAAA,EAAO,IAAA;AAAA,EAC9B,GAAA;AAAA,EAAO,GAAA;AAAA,EAAO,IAAA;AAAA,EAAS,GAAA;AAAA,EAAO,GAAA;AAAA,EAC9B,CAAA;AAAA,EAAO,CAAA;AAAA,EAAgB,CAAA;AAAA,EAAO,CAAA;AAAA,EAC9B,EAAA;AAAA,EAAO,EAAA;AAAA,EAAO,EAAA;AAAA,EAAS,EAAA;AAAA,EAAO,EAAA;AAAA,EAC9B,GAAA;AAAA,EAAO,GAAA;AAAA,EAAO,GAAA;AAAA,EAAS,GAAA;AAAA,EAAO,GAAA;AAAA,EAC9B,GAAA;AAAA,EAAO,GAAA;AAAA,EAAO,IAAA;AAAA,EAAS,GAAA;AAAA,EAAO,GAAA;AAAA,EAC9B,GAAA;AAAA,EAAO,GAAA;AAAA,EAAO,IAAA;AAAA,EAAS,GAAA;AAAA,EAAO,GAAA;AAAA,EAC9B,GAAA;AAAA,EAAO,GAAA;AAAA,EAAO,IAAA;AAAA,EAAS,GAAA;AAAA,EAAO,GAAA;AAAA,EAC9B,GAAA;AAAA,EAAO,GAAA;AAAA,EAAO,IAAA;AAAA,EAAS,GAAA;AAAA,EAAO,GAAA;AAAA,EAC9B,GAAA;AAAA,EAAO,GAAA;AAAA,EAAO,IAAA;AAAA,EAAS,GAAA;AAAA,EAAO,GAAA;AAAA,EAC9B,GAAA;AAAA,EAAO,GAAA;AAAA,EAAO,IAAA;AAAA,EAAS,GAAA;AAAA,EAAO,GAAA;AAAA,EAC9B,GAAA;AAAA,EAAO,GAAA;AAAA,EAAO,IAAA;AAAA,EAAS,GAAA;AAAA,EAAO;AAChC;AAGA,MAAM,oBAAuB,GAAA,EAAA;AAE7B,MAAM,aAAuB,EAAC;AAC9B,MAAM,QAAW,GAAA,CAAC,CAAW,EAAA,CAAA,KAAc,CAAI,GAAA,CAAA;AA0BxC,MAAM,kBAAqB,GAAA;AAAA,EAChC,WAAa,EAAA;AAAA,IACX,IAAM,EAAA,cAAA;AAAA,IACN,WAAa,EAAA;AAAA,GACf;AAAA,EACA,UAAY,EAAA;AAAA,IACV,IAAM,EAAA,aAAA;AAAA,IACN,WAAa,EAAA,KAAA;AAAA,GACf;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,IAAM,EAAA,eAAA;AAAA,IACN,WAAa,EAAA;AAAA,GACf;AAAA,EACA,OAAS,EAAA;AAAA,IACP,IAAM,EAAA,gBAAA;AAAA,IACN,WAAa,EAAA;AAAA;AAEjB;AAKO,MAAM,oBAAmF,GAAA;AAAA,EAC9F,IAAI,iBAAkB,CAAA,SAAA;AAAA,EACtB,IAAM,EAAA,WAAA;AAAA,EACN,WAAa,EAAA,wCAAA;AAAA,EACb,cAAgB,EAAA;AAAA,IACd,QAAQ;AAAC,GACX;AAAA,EAEA,UAAU,CAAC,OAAA,EAAS,QAAQ,CAAC,MAAA,KAC3B,OAAO,IAAK,CAAA5E,aAAA,CAAI,CAAC,IAAA,KAAS,qBAAqB,WAAY,CAAA,OAAA,EAAS,GAAG,CAAE,CAAA,IAAI,CAAC,CAAC,CAAA;AAAA,EAEjF,WAAa,EAAA,CAAC,OAAqC,EAAA,GAAA,KAA8B,CAAC,IAAsB,KAAA;AACtG,IAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAK,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AAC7C,MAAO,OAAA,IAAA;AAAA;AAGT,IAAA,IAAI,YACF,YAAmC,GAAA,KAAA,CAAA;AAErC,IAAA,IAAI,QAAQ,UAAY,EAAA;AACtB,MAAI,IAAA,OAAO,OAAQ,CAAA,UAAA,KAAe,QAAU,EAAA;AAC1C,QAAa,UAAA,GAAA,UAAA,CAAW,QAAQ,UAAU,CAAA;AAAA,OACrC,MAAA;AACL,QAAA,UAAA,GAAa,OAAQ,CAAA,UAAA;AAAA;AAGvB,MAAI,IAAA,KAAA,CAAM,UAAU,CAAG,EAAA;AACrB,QAAa,UAAA,GAAA,KAAA,CAAA;AAAA;AACf;AAGF,IAAA,IAAI,QAAQ,YAAc,EAAA;AACxB,MAAI,IAAA,OAAO,OAAQ,CAAA,YAAA,KAAiB,QAAU,EAAA;AAC5C,QAAe,YAAA,GAAA,UAAA,CAAW,QAAQ,YAAY,CAAA;AAAA,OACzC,MAAA;AACL,QAAA,YAAA,GAAe,OAAQ,CAAA,YAAA;AAAA;AAGzB,MAAI,IAAA,KAAA,CAAM,YAAY,CAAG,EAAA;AACvB,QAAe,YAAA,GAAA,KAAA,CAAA;AAAA;AACjB;AAGF,IAAA,MAAM,mBAAmD,GAAA;AAAA,MACvD,UAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAS,OAAQ,CAAA;AAAA,KACnB;AAEA,IAAM,MAAA,IAAA,GAAO,cAAe,CAAA,IAAA,EAAM,mBAAmB,CAAA;AACrD,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAA,OAAO,EAAC;AAAA;AAEV,IAAO,OAAA,CAAC,sBAAuB,CAAA,IAAI,CAAC,CAAA;AAAA;AAExC;AAKO,MAAM,gCAAmC,GAAA;AAKzC,SAAS,mCAAmC,CAAW,EAAA;AAC5D,EAAO,OAAA,CAAA,KAAM,oCAAoC,CAAM,KAAA,WAAA;AACzD;AAKO,MAAM,gCAAmC,GAAA;AAKzC,SAAS,mCAAmC,CAAW,EAAA;AAC5D,EAAO,OAAA,CAAA,KAAM,oCAAoC,CAAM,KAAA,WAAA;AACzD;AAgBO,SAAS,mBAAmB,KAA+C,EAAA;AA7LlF,EAAA,IAAA,EAAA,EAAA,EAAA;AA+LE,EAAA,IAAA,CAAA,CAAI,EAAM,GAAA,KAAA,CAAA,IAAA,KAAN,IAAY,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,MAAS,cAAc,YAAc,EAAA;AAGnD,IAAI,IAAA,SAAA,GAAY,MAAM,MAAO,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAA,CAAE,SAAS,MAAM,CAAA;AAC1D,IAAI,IAAA,SAAA,GAAY,MAAM,MAAO,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAA,CAAE,SAAS,MAAM,CAAA;AAC1D,IAAI,IAAA,UAAA,GAAa,MAAM,MAAO,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAA,CAAE,SAAS,OAAO,CAAA;AAE5D,IAAA,IAAI,UAAa,GAAA,CAAC,GAAG,IAAI,IAAI,SAAU,CAAA,MAAM,CAAC,CAAA,CAAE,IAAK,CAAA,CAAC,CAAG,EAAA,CAAA,KAAM,IAAI,CAAC,CAAA;AACpE,IAAA,IAAI,UAAa,GAAA,CAAC,GAAG,IAAI,IAAI,SAAU,CAAA,MAAM,CAAC,CAAA,CAAE,IAAK,CAAA,CAAC,CAAG,EAAA,CAAA,KAAM,IAAI,CAAC,CAAA;AACpE,IAAI,IAAA,WAAA,uBAAkB,GAAoB,EAAA;AAC1C,IAAA,UAAA,CAAW,QAAQ,CAAC,GAAA,KAAQ,YAAY,GAAI,CAAA,GAAA,EAAK,CAAC,CAAC,CAAA;AAEnD,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,SAAU,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAChD,MAAI,IAAA,GAAA,GAAM,SAAU,CAAA,MAAA,CAAO,CAAC,CAAA;AAC5B,MAAY,WAAA,CAAA,GAAA,CAAI,KAAK,WAAY,CAAA,GAAA,CAAI,GAAG,CAAI,GAAA,UAAA,CAAW,MAAO,CAAA,CAAC,CAAC,CAAA;AAAA;AAGlE,IAAA,IAAI,MAAS,GAAA;AAAA,MACX,IAAM,EAAA;AAAA,QACJ,GAAG,SAAA;AAAA,QACH,IAAM,EAAA,MAAA;AAAA,QACN,MAAQ,EAAA;AAAA,OACV;AAAA,MACA,IAAM,EAAA;AAAA,QACJ,GAAG,SAAA;AAAA,QACH,IAAM,EAAA,MAAA;AAAA,QACN,MAAQ,EAAA;AAAA,OACV;AAAA,MACA,MAAQ,EAAA;AAAA,QACN;AAAA,UACE,GAAG,UAAA;AAAA,UACH,MAAQ,EAAA,CAAC,GAAG,WAAA,CAAY,QAAQ;AAAA;AAClC;AACF,KACF;AAEA,IAAO,OAAA,MAAA;AAAA,eACE,EAAM,GAAA,KAAA,CAAA,IAAA,KAAN,IAAY,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,MAAS,cAAc,WAAa,EAAA;AAIzD,IAAA,IAAI,UAAoB,EAAC;AACzB,IAAA,IAAI,UAAoB,EAAC;AAGzB,IAAA,IAAI,YAAsB,EAAC;AAE3B,IAAA,IAAI,MAAS,GAAA,GAAA;AACb,IAAM,KAAA,CAAA,MAAA,CAAO,OAAQ,CAAA,CAAC,CAAM,KAAA;AAC1B,MAAI,IAAA,CAAA,CAAE,IAAS,KAAA,SAAA,CAAU,MAAQ,EAAA;AAC/B,QAAI,IAAA,SAAA,GAAY,EAAE,MAAO,CAAA,MAAA,CAAO,CAAC,GAAK,EAAA,CAAA,KAAM,GAAM,GAAA,CAAA,EAAG,CAAC,CAAA;AACtD,QAAA,SAAA,CAAU,KAAK,SAAS,CAAA;AACxB,QAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,QAAQ,OAAA,CAAA,IAAA,CAAM,MAAS,GAAA,CAAA,CAAE,IAAK,CAAA;AAAA;AAChC,KACD,CAAA;AAGD,IAAA,SAAA,CAAU,KAAK,CAAC,CAAA;AAChB,IAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,IAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAEnB,IAAA,IAAI,MAAS,GAAA;AAAA,MACX,IAAM,EAAA;AAAA,QACJ,GAAG,KAAM,CAAA,MAAA,CAAO,CAAC,CAAA;AAAA,QACjB,IAAM,EAAA,MAAA;AAAA,QACN,MAAM,SAAU,CAAA,MAAA;AAAA,QAChB,MAAQ,EAAA;AAAA,OACV;AAAA,MACA,IAAM,EAAA;AAAA,QACJ,GAAG,KAAM,CAAA,MAAA,CAAO,CAAC,CAAA;AAAA,QACjB,IAAM,EAAA,MAAA;AAAA,QACN,MAAM,SAAU,CAAA,MAAA;AAAA,QAChB,MAAQ,EAAA;AAAA,OACV;AAAA,MACA,MAAQ,EAAA;AAAA,QACN;AAAA,UACE,GAAG,KAAM,CAAA,MAAA,CAAO,CAAC,CAAA;AAAA,UACjB,IAAM,EAAA,OAAA;AAAA,UACN,MAAM,SAAU,CAAA,MAAA;AAAA,UAChB,MAAQ,EAAA;AAAA;AACV;AACF,KACF;AAEA,IAAO,OAAA,MAAA;AAAA;AAGT,EAAA,IAAI,IAA0B,GAAA,KAAA,CAAA;AAC9B,EAAA,IAAI,IAA0B,GAAA,KAAA,CAAA;AAC9B,EAAA,MAAM,SAAkB,EAAC;AACzB,EAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,IAAI,IAAA,kCAAA,CAAmC,KAAM,CAAA,IAAI,CAAG,EAAA;AAClD,MAAO,IAAA,GAAA,KAAA;AAAA,KACE,MAAA,IAAA,kCAAA,CAAmC,KAAM,CAAA,IAAI,CAAG,EAAA;AACzD,MAAO,IAAA,GAAA,KAAA;AAAA,KACE,MAAA,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,MAAQ,EAAA;AAC1C,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA;AACnB;AAIF,EAAA,IAAI,CAAC,IAAQ,IAAA,IAAA,IAAQ,IAAK,CAAA,MAAA,CAAO,SAAS,CAAG,EAAA;AAC3C,IAAA,IAAI,OAAO,IAAK,CAAA,MAAA;AAChB,IAAI,IAAA,UAAA,GAAa,cAAc,IAAK,CAAA,CAAC,IAAI,IAAK,CAAA,CAAC,GAAG,CAAC,CAAA;AAEnD,IAAO,IAAA,GAAA;AAAA,MACL,GAAG,IAAA;AAAA,MACH,IAAM,EAAA,gCAAA;AAAA,MACN,QAAQ,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,IAAI,UAAU;AAAA,KACxC;AAAA;AAGF,EAAA,IAAI,CAAC,IAAQ,IAAA,IAAA,IAAA,CAAQ,IAAM,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,MAAA,CAAO,UAAS,CAAG,EAAA;AAC5C,IAAA,IAAI,OAAO,IAAK,CAAA,MAAA;AAChB,IAAI,IAAA,UAAA,GAAa,cAAc,IAAK,CAAA,CAAC,IAAI,IAAK,CAAA,CAAC,GAAG,CAAC,CAAA;AAEnD,IAAO,IAAA,GAAA;AAAA,MACL,GAAG,IAAA;AAAA,MACH,IAAM,EAAA,gCAAA;AAAA,MACN,QAAQ,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,IAAI,UAAU;AAAA,KACxC;AAAA;AAGF,EAAI,IAAA,IAAA,IAAQ,IAAQ,IAAA,MAAA,CAAO,MAAQ,EAAA;AACjC,IAAO,OAAA;AAAA,MACL,IAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF;AAAA;AAEF,EAAO,OAAA,KAAA,CAAA;AACT;AAKgB,SAAA,cAAA,CACd,MACA,EAAA,OAAA,EACA,KACwB,EAAA;AA5U1B,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA6UE,EAAA,IAAI,aAAa,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,UAAA;AAC1B,EAAI,IAAA,WAAA,GAAA,CAAc,EAAS,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,WAAA,KAAT,IAAwB,GAAA,EAAA,GAAA,oBAAA;AAC1C,EAAI,IAAA,YAAA,GAAA,CAAe,EAAS,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,YAAA,KAAT,IAAyB,GAAA,EAAA,GAAA,CAAA;AAG5C,EAAS,MAAA,GAAA,MAAA,CAAO,GAAI,CAAA,CAAC,KAAU,KAAA;AAC7B,IAAO,OAAA;AAAA,MACL,GAAG,KAAA;AAAA,MACH,MAAQ,EAAA,KAAA,CAAM,MAAO,CAAA,GAAA,CAAI,CAAC,KAAU,KAAA;AAClC,QAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,MAAQ,EAAA;AACnC,UAAA,MAAM,OAAU,GAAA,MAAA,CAAO,KAAM,CAAA,MAAA,CAAO,OAAO,CAAA;AAE3C,UAAA,IAAI,CAAC,MAAA,CAAO,KAAM,CAAA,OAAO,CAAG,EAAA;AAC1B,YAAQ,KAAA,GAAA,gBAAA,CAAiB,OAAO,OAAO,CAAA;AAAA,WAClC,MAAA;AACL,YAAQ,KAAA,GAAA,EAAE,GAAG,KAAA,EAAO,MAAQ,EAAA,KAAA,CAAM,MAAO,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,CAAK,IAAA,IAAI,CAAE,EAAA;AAAA;AACpE;AAGF,QAAO,OAAA,KAAA;AAAA,OACR;AAAA,KACH;AAAA,GACD,CAAA;AAGD,EAAI,IAAA,CAAC,UAAc,IAAA,UAAA,GAAa,CAAG,EAAA;AACjC,IAAA,IAAI,YAAsB,EAAC;AAG3B,IAAA,KAAA,MAAW,SAAS,MAAQ,EAAA;AAC1B,MAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,QAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,MAAQ,EAAA;AACnC,UAAY,SAAA,GAAA,SAAA,CAAU,MAAO,CAAA,KAAA,CAAM,MAAM,CAAA;AAAA;AAC3C;AACF;AAGF,IAAA,SAAA,CAAU,IAAK,CAAA,CAAC,CAAG,EAAA,CAAA,KAAM,IAAI,CAAC,CAAA;AAE9B,IAAA,IAAI,aAAgB,GAAA,QAAA;AAGpB,IAAI,IAAA,SAAA,CAAU,WAAW,CAAG,EAAA;AAC1B,MAAgB,aAAA,GAAA,CAAA;AAAA,KACX,MAAA;AACL,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,SAAA,CAAU,QAAQ,CAAK,EAAA,EAAA;AACzC,QAAA,IAAI,QAAQ,SAAU,CAAA,CAAC,CAAI,GAAA,SAAA,CAAU,IAAI,CAAC,CAAA;AAE1C,QAAA,IAAI,UAAU,CAAG,EAAA;AACf,UAAgB,aAAA,GAAA,IAAA,CAAK,GAAI,CAAA,aAAA,EAAe,KAAK,CAAA;AAAA;AAC/C;AACF;AAGF,IAAI,IAAA,GAAA,GAAM,UAAU,CAAC,CAAA;AACrB,IAAA,IAAI,GAAM,GAAA,SAAA,CAAU,SAAU,CAAA,MAAA,GAAS,CAAC,CAAA;AAExC,IAAA,IAAI,QAAQ,GAAM,GAAA,GAAA;AAElB,IAAA,MAAM,aAAa,KAAQ,GAAA,WAAA;AAG3B,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,oBAAA,CAAqB,QAAQ,CAAK,EAAA,EAAA;AACpD,MAAI,IAAA,WAAA,GAAc,qBAAqB,CAAC,CAAA;AAExC,MAAI,IAAA,UAAA,GAAa,WAAe,IAAA,WAAA,IAAe,aAAe,EAAA;AAC5D,QAAa,UAAA,GAAA,WAAA;AACb,QAAA;AAAA;AACF;AACF;AAGF,EAAM,MAAA,SAAA,GAAY,CAAC,CAAA,KAAc,aAAc,CAAA,WAAA,CAAY,IAAI,YAAc,EAAA,UAAW,CAAI,GAAA,YAAA,EAAc,CAAC,CAAA;AAG3G,EAAA,IAAI,cAAmB,GAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAK,UAAY,EAAA,KAAA,CAAM,QAAQ,CAAA,KAA/B,IAAoC,GAAA,EAAA,GAAA,CAAC,GAAG,CAAA,EAAG,CAAC,CAAA,CAAE,MAAS,GAAA,CAAA;AAE9E,EAAA,IAAI,aAA4B,EAAC;AACjC,EAAA,IAAI,SAAkB,EAAC;AACvB,EAAA,IAAI,MAAkC,GAAA,KAAA,CAAA;AAEtC,EAAA,KAAA,MAAW,SAAS,MAAQ,EAAA;AAC1B,IAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,MAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,MAAQ,EAAA;AACnC,QAAA,IAAI,YAAY,SAAU,CAAA,KAAA,CAAM,MAAQ,EAAA,SAAA,EAAW,YAAY,QAAQ,CAAA;AACvE,QAAA,UAAA,CAAW,KAAK,SAAS,CAAA;AAEzB,QAAA,MAAM,KAAQ,GAAA;AAAA,UACZ,GAAG,KAAA;AAAA,UACH,MAAQ,EAAA;AAAA,YACN,GAAG,KAAM,CAAA,MAAA;AAAA,YACT,IAAM,EAAA,KAAA,CAAM,MAAO,CAAA,IAAA,KAAS,UAAU,OAAU,GAAA,KAAA;AAAA;AAClD,SACF;AAEA,QAAA,KAAA,CAAM,UAAU,mBAAoB,CAAA;AAAA,UAClC,KAAO,EAAA,KAAA;AAAA,UACP,KAAA,EAAO,wBAAS,WAAY;AAAA,SAC7B,CAAA;AACD,QAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,QAAA,IAAI,CAAC,MAAA,IAAU,KAAM,CAAA,MAAA,CAAO,IAAM,EAAA;AAChC,UAAA,MAAA,GAAS,KAAM,CAAA,MAAA;AAAA;AACjB;AACF;AACF;AAIF,EAAI,IAAA,CAAC,OAAO,MAAQ,EAAA;AAClB,IAAO,OAAA,IAAA;AAAA;AAIT,EAAI,IAAA,WAAA,GAAc,KAAK,UAAU,CAAA;AAGjC,EAAA,KAAA,IAAS,OAAU,GAAA,CAAA,EAAG,OAAU,GAAA,WAAA,CAAY,QAAQ,OAAW,EAAA,EAAA;AAC7D,IAAI,IAAA,IAAA,GAAO,YAAY,OAAO,CAAA;AAE9B,IAAA,KAAA,IAAS,SAAY,GAAA,CAAA,EAAG,SAAY,GAAA,IAAA,CAAK,QAAQ,SAAa,EAAA,EAAA;AAC5D,MAAI,IAAA,IAAA,CAAK,SAAS,CAAA,IAAK,IAAM,EAAA;AAC3B,QAAA,IAAA,CAAK,SAAS,CAAI,GAAA,CAAA;AAAA;AACpB;AACF;AAGF,EAAA,MAAM,IAAc,GAAA;AAAA,IAClB,IAAM,EAAA,gCAAA;AAAA,IACN,MAAA,EAAQ,YAAY,CAAC,CAAA;AAAA,IACrB,MAAM,SAAU,CAAA,MAAA;AAAA,IAChB,KAAO,EAAA,KAAA,CAAA;AAAA,IACP,MACE,EAAA,cAAA,KAAmB,CACd,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAU,EACX,GAAA;AAAA,MACE,GAAG,MAAA;AAAA,MACH,QAAU,EAAA;AAAA;AACZ,GACR;AACA,EAAA,MAAM,IAAO,GAAA;AAAA,IACX,GAAG,IAAA;AAAA,IACH,IAAM,EAAA,gCAAA;AAAA,IACN,MAAA,EAAQ,YAAY,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,IAAI,UAAW;AAAA,GACnD;AAEA,EAAA,IAAI,mCAAS,OAAS,EAAA;AACpB,IAAM,MAAA,IAAA,GAAO,IAAI,KAAM,CAAA,WAAA,CAAY,CAAC,CAAE,CAAA,MAAM,CAAE,CAAA,IAAA,CAAK,CAAC,CAAA;AACpD,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,WAAA,CAAY,QAAQ,CAAK,EAAA,EAAA;AAC3C,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,QAAA,IAAA,CAAK,CAAC,CAAA,IAAK,WAAY,CAAA,CAAC,EAAE,CAAC,CAAA;AAAA;AAC7B;AAEF,IAAS,MAAA,GAAA;AAAA,MACP;AAAA,QACE,GAAG,OAAO,CAAC,CAAA;AAAA,QACX,IAAM,EAAA,OAAA;AAAA,QACN,MAAQ,EAAA,IAAA;AAAA,QACR,MAAM,SAAU,CAAA,MAAA;AAAA,QAChB,KAAO,EAAA;AAAA,UACL,GAAG,MAAO,CAAA,CAAC,CAAE,CAAA,KAAA;AAAA,UACb,WAAa,EAAA,OAAA;AAAA,UACb,cAAgB,EAAA,KAAA;AAAA,UAChB,MAAQ,EAAA,EAAE,UAAY,EAAA,CAAA,EAAG,YAAY,CAAE;AAAA;AACzC;AACF,KACF;AAAA,GACK,MAAA;AACL,IAAO,MAAA,CAAA,OAAA,CAAQ,CAAC,KAAA,EAAO,CAAM,KAAA;AAC3B,MAAM,KAAA,CAAA,MAAA,GAAS,WAAY,CAAA,CAAA,GAAI,CAAC,CAAA;AAAA,KACjC,CAAA;AAAA;AAGH,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACF;AAKgB,SAAA,SAAA,CAAU,KAAa,IAAc,EAAA;AACnD,EAAA,OAAO,IAAK,CAAA,KAAA,CAAM,GAAM,GAAA,IAAI,CAAI,GAAA,IAAA;AAClC;AAKgB,SAAA,WAAA,CAAY,KAAa,IAAc,EAAA;AACrD,EAAA,OAAO,IAAK,CAAA,IAAA,CAAK,GAAM,GAAA,IAAI,CAAI,GAAA,IAAA;AACjC;AAKgB,SAAA,WAAA,CAAY,KAAa,IAAc,EAAA;AACrD,EAAA,OAAO,IAAK,CAAA,KAAA,CAAM,GAAM,GAAA,IAAI,CAAI,GAAA,IAAA;AAClC;AAEA,SAAS,SACP,CAAA,IAAA,EACA,SACA,EAAA,SAAA,EACA,IACa,EAAA;AACb,EAAI,IAAA,IAAA,uBAAW,GAAI,EAAA;AAEnB,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,IAAI,IAAA,CAAA,GAAI,KAAK,CAAC,CAAA;AAEd,IAAA,IAAI,KAAK,IAAM,EAAA;AACb,MAAA,CAAA,GAAI,UAAU,CAAC,CAAA;AAAA;AAGjB,IAAI,IAAA,KAAA,GAAQ,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA;AAEtB,IAAA,IAAI,KAAO,EAAA;AACT,MAAM,KAAA,CAAA,KAAA,EAAA;AAAA,KACD,MAAA;AACL,MAAA,IAAA,CAAK,IAAI,CAAG,EAAA,EAAE,OAAO,CAAG,EAAA,KAAA,EAAO,GAAG,CAAA;AAAA;AACpC;AAGF,EAAA,SAAA,IAAa,UAAU,OAAQ,CAAA,CAAC,MAAM,IAAK,CAAA,MAAA,CAAO,CAAC,CAAC,CAAA;AAEpD,EAAA,IAAI,IAAO,GAAA,CAAC,GAAG,IAAA,CAAK,QAAQ,CAAA;AAE5B,EAAQ,IAAA,IAAA,IAAA,CAAK,IAAK,CAAA,CAAC,CAAG,EAAA,CAAA,KAAM,KAAK,CAAE,CAAA,KAAA,EAAO,CAAE,CAAA,KAAK,CAAC,CAAA;AAElD,EAAI,IAAA,MAAA,GAAS,KAAM,CAAA,IAAA,CAAK,MAAM,CAAA;AAC9B,EAAI,IAAA,MAAA,GAAS,KAAM,CAAA,IAAA,CAAK,MAAM,CAAA;AAE9B,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,IAAA,MAAA,CAAO,CAAC,CAAA,GAAI,IAAK,CAAA,CAAC,CAAE,CAAA,KAAA;AACpB,IAAA,MAAA,CAAO,CAAC,CAAA,GAAI,IAAK,CAAA,CAAC,CAAE,CAAA,KAAA;AAAA;AAGtB,EAAO,OAAA,CAAC,QAAQ,MAAM,CAAA;AACxB;AAKgB,SAAA,sBAAA,CAAuB,MAAuB,KAAkC,EAAA;AAC9F,EAAI,IAAA,CAAC,IAAK,CAAA,IAAA,CAAK,OAAS,EAAA;AACtB,IAAA,MAAM,UAAU,mBAAoB,CAAA;AAAA,MAClC,OAAO,IAAK,CAAA,IAAA;AAAA,MACZ,KAAA,EAAO,wBAAS,WAAY;AAAA,KAC7B,CAAA;AACD,IAAA,IAAA,CAAK,KAAK,OAAU,GAAA,OAAA;AACpB,IAAA,IAAA,CAAK,KAAK,OAAU,GAAA,OAAA;AAAA;AAGtB,EAAO,OAAA;AAAA,IACL,MAAA,EAAQ,IAAK,CAAA,IAAA,CAAK,MAAO,CAAA,MAAA;AAAA,IACzB,IAAM,EAAA;AAAA,MACJ,MAAM,aAAc,CAAA;AAAA,KACtB;AAAA,IACA,MAAA,EAAQ,CAAC,IAAK,CAAA,IAAA,EAAM,KAAK,IAAM,EAAA,GAAG,KAAK,MAAM,CAAA;AAAA,IAC7C,KAAA,EAAO,CAAG,EAAA,iBAAA,CAAkB,SAAS,CAAA;AAAA,GACvC;AACF;AAeO,SAAS,eAAe,UAAgD,EAAA;AAC7E,EAAI,IAAA,UAAA,CAAW,WAAW,CAAG,EAAA;AAC3B,IAAA,OAAO,WAAW,CAAC,CAAA;AAAA;AAGrB,EAAA,IAAI,SAAS6E,cAAoB,CAAA;AAAA,IAC/B,MAAQ,EAAA,UAAA,CAAW,GAAI,CAAA,CAAC,CAAO,MAAA;AAAA,MAC7B,MAAA,EAAQ,CAAE,CAAA,IAAA,CAAK,MAAO,CAAA,MAAA;AAAA,MACtB,MAAA,EAAQ,CAAC,CAAE,CAAA,IAAA,EAAM,EAAE,IAAM,EAAA,GAAG,EAAE,MAAM;AAAA,KACpC,CAAA,CAAA;AAAA,IACF,MAAQ,EAAA,CAAC,KAAU,KAAA,KAAA,CAAM,IAAS,KAAA;AAAA,GACnC,CAAA;AAED,EAAA,IAAI,SAA0B,GAAA,IAAA;AAC9B,EAAA,IAAI,SAA0B,GAAA,IAAA;AAC9B,EAAA,IAAI,cAAuB,EAAC;AAI5B,EAAO,MAAA,CAAA,MAAA,CAAO,OAAQ,CAAA,CAAC,CAAM,KAAA;AArnB/B,IAAA,IAAA,EAAA,EAAA,EAAA;AAsnBI,IAAI,IAAA,CAAA,CAAE,SAAS,MAAQ,EAAA;AACrB,MAAY,SAAA,GAAA,CAAA;AAAA,KACd,MAAA,IAAW,CAAE,CAAA,IAAA,KAAS,MAAQ,EAAA;AAC5B,MAAA,IAAI,aAAa,IAAM,EAAA;AACrB,QAAY,SAAA,GAAA,CAAA;AAAA,OACP,MAAA;AACL,QAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,CAAE,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AACxC,UAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,SAAA,CAAU,MAAV,EAAA,CAAA,CAAA,KAAA,IAAA,GAAA,EAAA,GAAA,EAAA,CAAA,CAAA,CAAA,GAAwB,CAAE,CAAA,MAAA,CAAO,CAAC,CAAA;AAAA;AACpC;AACF,KACK,MAAA;AACL,MAAA,WAAA,CAAY,IAAK,CAAA;AAAA,QACf,GAAG,CAAA;AAAA,QACH,QAAQ,CAAE,CAAA,MAAA,CAAO,IAAI,CAAC,CAAA,KAAM,gBAAK,CAAC;AAAA,OACnC,CAAA;AAAA;AACH,GACD,CAAA;AAED,EAAA,MAAM,MAA0B,GAAA;AAAA,IAC9B,IAAM,EAAA,SAAA;AAAA,IACN,IAAM,EAAA,SAAA;AAAA,IACN,MAAQ,EAAA;AAAA,GACV;AAEA,EAAO,OAAA,MAAA;AACT;;ACtnBO,MAAM,yBAAmF,GAAA;AAAA,EAC9F,IAAI,iBAAkB,CAAA,cAAA;AAAA,EACtB,IAAM,EAAA,kBAAA;AAAA,EACN,WAAa,EAAA,wDAAA;AAAA,EACb,gBAAgB,EAAC;AAAA,EAEjB,UAAU,CAAC,OAAA,EAAS,QAAQ,CAAC,MAAA,KAC3B,OAAO,IAAK,CAAA7E,aAAA,CAAI,CAAC,IAAA,KAAS,0BAA0B,WAAY,CAAA,OAAA,EAAS,GAAG,CAAE,CAAA,IAAI,CAAC,CAAC,CAAA;AAAA,EAEtF,WAAa,EAAA,CAAC,OAAmC,KAAA,CAAC,IAAsB,KAAA;AAlC1E,IAAA,IAAA,EAAA,EAAA,EAAA;AAoCI,IAAI,IAAA,OAAA,CAAQ,SAAS,MAAyB,aAAA;AAC5C,MAAO,OAAA,mBAAA,CAAoB,IAAM,EAAA,OAAA,CAAQ,UAAU,CAAA;AAAA;AAGrD,IAAA,MAAM,SAAsB,EAAC;AAC7B,IAAM,MAAA,UAAA,GAAA,CAAA,CAAa,aAAQ,UAAR,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAoB,UAAS,IAAI,GAAA,CAAI,OAAQ,CAAA,UAAU,CAAI,GAAA,KAAA,CAAA;AAE9E,IAAA,KAAA,MAAW,SAAS,IAAM,EAAA;AACxB,MAAA,MAAM,YAAqB,EAAC;AAC5B,MAAA,MAAM,eAA4C,EAAC;AACnD,MAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,QAAI,IAAA,CAAC,MAAM,MAAQ,EAAA;AACjB,UAAA,SAAA,CAAU,KAAK,KAAK,CAAA;AACpB,UAAA;AAAA;AAGF,QAAA,MAAM,UAAa,GAAA;AAAA,UACjB,GAAG,KAAA;AAAA,UACH,MAAQ,EAAA;AAAA,YACN,GAAG,KAAM,CAAA,MAAA;AAAA;AAAA,YAET,WAAa,EAAA,KAAA,CAAA;AAAA,YACb,iBAAmB,EAAA,KAAA;AAAA,WACrB;AAAA,UACA,MAAQ,EAAA,KAAA;AAAA,SACV;AACA,QAAA,SAAA,CAAU,KAAK,UAAU,CAAA;AAEzB,QAAA,KAAA,MAAW,SAAa,IAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,MAAM,CAAG,EAAA;AACjD,UAAA,IAAI,UAAc,IAAA,CAAC,UAAW,CAAA,GAAA,CAAI,SAAS,CAAG,EAAA;AAC5C,YAAA;AAAA;AAIF,UAAI,IAAA,OAAA,CAAQ,eAAe,SAAW,EAAA;AACpC,YAAW,UAAA,CAAA,IAAA,GAAO,KAAM,CAAA,MAAA,CAAO,SAAS,CAAA;AACxC,YAAA;AAAA;AAGF,UAAM,MAAA,YAAA,GAAA,CAAe,kBAAa,SAAS,CAAA,KAAtB,YAA4B,YAAa,CAAA,SAAS,CAAI,mBAAA,IAAI,GAAI,EAAA;AACnF,UAAA,YAAA,CAAa,GAAI,CAAA,KAAA,CAAM,MAAO,CAAA,SAAS,CAAC,CAAA;AAAA;AAC1C;AAGF,MAAA,KAAA,MAAW,QAAQ,YAAc,EAAA;AAC/B,QAAW,KAAA,MAAA,KAAA,IAAS,YAAa,CAAA,IAAI,CAAG,EAAA;AACtC,UAAA,MAAM,SAAS,IAAI,KAAA,CAAM,MAAM,MAAM,CAAA,CAAE,KAAK,KAAK,CAAA;AACjD,UAAA,SAAA,CAAU,IAAK,CAAA;AAAA,YACb,IAAA;AAAA,YACA,MAAM,SAAU,CAAA,MAAA;AAAA,YAChB,MAAA;AAAA,YACA,QAAQ;AAAC,WACV,CAAA;AAAA;AACH;AAGF,MAAA,MAAA,CAAO,IAAK,CAAA;AAAA,QACV,GAAG,KAAA;AAAA,QACH,MAAQ,EAAA,SAAA;AAAA,QACR,QAAQ,KAAM,CAAA;AAAA,OACf,CAAA;AAAA;AAGH,IAAO,OAAA,MAAA;AAAA;AAEX,CAAA;AAEA,SAAS,mBAAA,CAAoB,MAAmB,UAAoC,EAAA;AAClF,EAAA,MAAM,SAAsB,EAAC;AAC7B,EAAA,KAAA,MAAW,SAAS,IAAM,EAAA;AACxB,IAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,MAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,QAAA,MAAM,OAAiB,EAAC;AACxB,QAAA,MAAM,OAAiB,EAAC;AACxB,QAAA,IAAI,UAAY,EAAA;AACd,UAAA,KAAA,MAAW,OAAO,UAAY,EAAA;AAC5B,YAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AACb,YAAA,IAAA,CAAK,IAAK,CAAA,KAAA,CAAM,MAAO,CAAA,GAAG,CAAC,CAAA;AAAA;AAC7B,SACK,MAAA;AACL,UAAW,KAAA,MAAA,CAAC,KAAK,GAAG,CAAA,IAAK,OAAO,OAAQ,CAAA,KAAA,CAAM,MAAM,CAAG,EAAA;AACrD,YAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AACb,YAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA;AACf;AAEF,QAAA,IAAI,KAAK,MAAQ,EAAA;AACf,UAAA,MAAA,CAAO,IAAK,CAAA;AAAA,YACV,GAAG,KAAA;AAAA,YACH,IAAM,EAAA,mBAAA,CAAoB,KAAO,EAAA,KAAA,EAAO,IAAI,CAAA;AAAA,YAC5C,MAAQ,EAAA;AAAA,cACN,EAAE,IAAM,EAAA,OAAA,EAAS,IAAM,EAAA,SAAA,CAAU,QAAQ,MAAQ,EAAA,EAAI,EAAA,MAAA,EAAQ,IAAK,EAAA;AAAA,cAClE,EAAE,IAAM,EAAA,OAAA,EAAS,IAAM,EAAA,SAAA,CAAU,QAAQ,MAAQ,EAAA,EAAI,EAAA,MAAA,EAAQ,IAAK;AAAA,aACpE;AAAA,YACA,QAAQ,IAAK,CAAA;AAAA,WACd,CAAA;AAAA;AACH;AACF;AACF;AAEF,EAAO,OAAA,MAAA;AACT;;AC9HA,MAAM,mBAAsB,GAAA,EAAA;AAErB,MAAM,gBAAiE,GAAA;AAAA,EAC5E,IAAI,iBAAkB,CAAA,KAAA;AAAA,EACtB,IAAM,EAAA,OAAA;AAAA,EACN,WAAa,EAAA,wCAAA;AAAA,EACb,cAAgB,EAAA;AAAA,IACd,UAAY,EAAA;AAAA,GACd;AAAA,EAEA,UAAU,CAAC,OAAA,EAAS,GAAQ,KAAA,CAAC,WAC3B,MAAO,CAAA,IAAA;AAAA,IACLA,aAAA,CAAI,CAAC,IAAS,KAAA;AACZ,MAAA,IAAI,KAAQ,GAAA,mBAAA;AACZ,MAAI,IAAA,OAAA,CAAQ,eAAe,KAAW,CAAA,EAAA;AACpC,QAAI,IAAA,OAAO,OAAQ,CAAA,UAAA,KAAe,QAAU,EAAA;AAC1C,UAAQ,KAAA,GAAA,QAAA,CAAS,OAAQ,CAAA,UAAA,EAAY,EAAE,CAAA;AAAA,SAClC,MAAA;AACL,UAAA,KAAA,GAAQ,OAAQ,CAAA,UAAA;AAAA;AAClB;AAGF,MAAO,OAAA,IAAA,CAAK,GAAI,CAAA,CAAC,KAAU,KAAA;AACzB,QAAI,IAAA,KAAA,CAAM,SAAS,KAAO,EAAA;AACxB,UAAO,OAAA;AAAA,YACL,GAAG,KAAA;AAAA,YACH,MAAQ,EAAA,KAAA,CAAM,MAAO,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA;AAC9B,cAAO,OAAA;AAAA,gBACL,GAAG,CAAA;AAAA,gBACH,QACE,KAAS,IAAA,CAAA,GAAI,EAAE,MAAO,CAAA,KAAA,CAAM,GAAG,KAAK,CAAA,GAAI,CAAE,CAAA,MAAA,CAAO,MAAM,CAAE,CAAA,MAAA,CAAO,SAAS,KAAO,EAAA,CAAA,CAAE,OAAO,MAAM;AAAA,eACnG;AAAA,aACD,CAAA;AAAA,YACD,MAAA,EAAQ,IAAK,CAAA,GAAA,CAAI,KAAK;AAAA,WACxB;AAAA;AAGF,QAAO,OAAA,KAAA;AAAA,OACR,CAAA;AAAA,KACF;AAAA;AAEP,CAAA;;ACnCO,MAAM,gBAAiE,GAAA;AAAA,EAC5E,IAAI,iBAAkB,CAAA,KAAA;AAAA,EACtB,IAAM,EAAA,qBAAA;AAAA,EACN,WAAa,EAAA,yDAAA;AAAA,EACb,gBAAgB,EAAC;AAAA,EACjB,YAAA,EAAc,CAAC,IAAsB,KAAA;AACnC,IAAA,OAAO,IAAK,CAAA,MAAA,GAAS,CACjB,GAAA,iCAAA,CAAkC,aAClC,iCAAkC,CAAA,aAAA;AAAA,GACxC;AAAA,EACA,uBAAA,EAAyB,CAAC,IAAsB,KAAA;AAC9C,IAAO,OAAA,CAAA,qFAAA,EAAwF,KAAK,MAAM,CAAA,aAAA,CAAA;AAAA,GAC5G;AAAA,EACA,QAAU,EAAA,CAAC,OAAY,KAAA,CAAC,WACtB,MAAO,CAAA,IAAA;AAAA,IACLA,aAAA,CAAI,CAAC,UAAe,KAAA;AAClB,MAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,UAAU,CAAK,IAAA,UAAA,CAAW,UAAU,CAAG,EAAA;AACxD,QAAO,OAAA,UAAA;AAAA;AAGT,MAAM,MAAA,IAAA,GAAO,WAAW,MAAO,CAAA,CAAC,UAAU,KAAM,CAAA,MAAA,CAAO,SAAS,CAAC,CAAA;AAEjE,MAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACrB,QAAO,OAAA,CAAC,UAAW,CAAA,CAAC,CAAC,CAAA;AAAA;AAGvB,MAAM,MAAA,UAAA,uBAAiB,GAAY,EAAA;AACnC,MAAA,MAAM,mBAA2D,EAAC;AAClE,MAAA,MAAM,mBAA6B,EAAC;AACpC,MAAM,MAAA,SAAA,GAAY,IAAI,gBAAiB,CAAA;AAAA,QACrC,KAAO,EAAA,CAAA,EAAG,iBAAkB,CAAA,KAAK,IAAI,IAAK,CAAA,GAAA,CAAI,CAAC,KAAA,KAAU,KAAM,CAAA,KAAK,CAAE,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,QAC/E,QAAQ;AAAC,OACV,CAAA;AAED,MAAA,KAAA,IAAS,UAAa,GAAA,CAAA,EAAG,UAAa,GAAA,IAAA,CAAK,QAAQ,UAAc,EAAA,EAAA;AAC/D,QAAM,MAAA,KAAA,GAAQ,KAAK,UAAU,CAAA;AAE7B,QAAA,KAAA,IAAS,aAAa,CAAG,EAAA,UAAA,GAAa,KAAM,CAAA,MAAA,CAAO,QAAQ,UAAc,EAAA,EAAA;AACvE,UAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AAErC,UAAA,IAAI,CAAC,UAAA,CAAW,GAAI,CAAA,KAAA,CAAM,IAAI,CAAG,EAAA;AAC/B,YAAU,SAAA,CAAA,QAAA,CAAS8E,oBAAmB,CAAA,KAAK,CAAC,CAAA;AAC5C,YAAW,UAAA,CAAA,GAAA,CAAI,MAAM,IAAI,CAAA;AAAA;AAG3B,UAAA,gBAAA,CAAiB,MAAM,IAAI,CAAA,GAAI,iBAAiB,KAAM,CAAA,IAAI,KAAK,EAAC;AAChE,UAAA,gBAAA,CAAiB,KAAM,CAAA,IAAI,CAAE,CAAA,UAAU,CAAI,GAAA,UAAA;AAE3C,UAAI,IAAA,IAAA,CAAK,MAAS,GAAA,CAAA,KAAM,UAAY,EAAA;AAClC,YAAA;AAAA;AAGF,UAAA,IAAI,sBAAuB,CAAA,gBAAA,EAAkB,KAAO,EAAA,IAAI,CAAG,EAAA;AACzD,YAAiB,gBAAA,CAAA,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA;AAClC;AACF;AAGF,MAAI,IAAA,gBAAA,CAAiB,WAAW,CAAG,EAAA;AACjC,QAAO,OAAA,UAAA;AAAA;AAGT,MAAA,MAAM,cAA8D,EAAC;AACrE,MAAA,MAAM,gBAAgC,EAAC;AACvC,MAAA,MAAM,UAAa,GAAA,gBAAA,CAAiB,IAAM,EAAA,gBAAA,EAAkB,gBAAgB,CAAA;AAC5E,MAAA,MAAM,WAAc,GAAA,iBAAA,CAAkB,IAAM,EAAA,UAAA,EAAY,gBAAgB,CAAA;AAExE,MAAA,KAAA,IAAS,UAAa,GAAA,CAAA,EAAG,UAAa,GAAA,IAAA,CAAK,QAAQ,UAAc,EAAA,EAAA;AAC/D,QAAM,MAAA,KAAA,GAAQ,KAAK,UAAU,CAAA;AAE7B,QAAA,KAAA,IAAS,UAAa,GAAA,CAAA,EAAG,UAAa,GAAA,KAAA,CAAM,QAAQ,UAAc,EAAA,EAAA;AAChE,UAAM,MAAA,GAAA,GAAM,UAAW,CAAA,UAAA,EAAY,UAAU,CAAA;AAC7C,UAAM,MAAA,KAAA,GAAQ,WAAY,CAAA,UAAA,EAAY,UAAU,CAAA;AAEhD,UAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,WAAY,CAAA,GAAG,CAAC,CAAG,EAAA;AACpC,YAAY,WAAA,CAAA,GAAG,CAAI,GAAA,CAAC,KAAK,CAAA;AACzB,YAAA,aAAA,CAAc,IAAK,CAAA,aAAA,CAAc,GAAK,EAAA,WAAW,CAAC,CAAA;AAClD,YAAA;AAAA;AAGF,UAAA,IAAI,cAAiB,GAAA,KAAA;AAErB,UAAA,WAAA,CAAY,GAAG,CAAI,GAAA,WAAA,CAAY,GAAG,CAAE,CAAA,GAAA,CAAI,CAAC,QAAa,KAAA;AACpD,YAAA,IAAI,CAAC,UAAA,CAAW,QAAU,EAAA,KAAK,CAAG,EAAA;AAChC,cAAO,OAAA,QAAA;AAAA;AAET,YAAiB,cAAA,GAAA,IAAA;AACjB,YAAA,OAAO,EAAE,GAAG,QAAU,EAAA,GAAG,KAAM,EAAA;AAAA,WAChC,CAAA;AAED,UAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,YAAY,WAAA,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,KAAK,CAAA;AAC3B,YAAA,aAAA,CAAc,IAAK,CAAA,aAAA,CAAc,GAAK,EAAA,WAAW,CAAC,CAAA;AAAA;AACpD;AACF;AAGF,MAAA,KAAA,MAAW,WAAW,aAAe,EAAA;AACnC,QAAA,MAAM,QAAQ,WAAY,CAAA,OAAA,CAAQ,GAAG,CAAA,CAAE,QAAQ,KAAK,CAAA;AAEpD,QAAA,IAAI,KAAO,EAAA;AACT,UAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AAAA;AACrB;AAGF,MAAA,OAAO,CAAC,SAAS,CAAA;AAAA,KAClB;AAAA;AAEP,CAAA;AAEA,MAAMA,oBAAA,GAAqB,CAAC,KAAwB,KAAA;AAClD,EAAO,OAAA;AAAA,IACL,GAAGC,YAAK,KAAO,EAAA,CAAC,UAAU,OAAS,EAAA,QAAA,EAAU,QAAQ,CAAC,CAAA;AAAA,IACtD,QAAQ,EAAC;AAAA,IACT,MAAQ,EAAA;AAAA,MACN,GAAGA,WAAA,CAAK,KAAM,CAAA,MAAA,EAAQ,aAAa;AAAA;AACrC,GACF;AACF,CAAA;AAEA,MAAM,gBAAmB,GAAA,CACvB,IACA,EAAA,kBAAA,EACA,aACG,KAAA;AACH,EAAA,MAAM,YAAe,GAAA,aAAA,CAAc,MAAO,CAAA,CAAC,OAAiC,SAAc,KAAA;AACxF,IAAO,OAAA,MAAA,CAAO,KAAK,kBAAmB,CAAA,SAAS,CAAC,CAAE,CAAA,MAAA,CAAO,CAACC,MAAAA,EAAiC,UAAe,KAAA;AACxG,MAAAA,OAAM,UAAU,CAAA,GAAIA,MAAM,CAAA,UAAU,KAAK,EAAC;AAC1C,MAAAA,MAAAA,CAAM,UAAU,CAAE,CAAA,IAAA,CAAK,mBAAmB,SAAS,CAAA,CAAE,UAAU,CAAC,CAAA;AAChE,MAAOA,OAAAA,MAAAA;AAAA,OACN,KAAK,CAAA;AAAA,GACV,EAAG,EAAE,CAAA;AAEL,EAAO,OAAA,CAAC,YAAoB,UAA+B,KAAA;AACzD,IAAA,OAAO,aAAa,UAAU,CAAA,CAAE,MAAO,CAAA,CAAC,KAAa,UAAuB,KAAA;AAC1E,MAAO,OAAA,GAAA,GAAM,KAAK,UAAU,CAAA,CAAE,OAAO,UAAU,CAAA,CAAE,OAAO,UAAU,CAAA;AAAA,OACjE,EAAE,CAAA;AAAA,GACP;AACF,CAAA;AAEA,MAAM,iBAAoB,GAAA,CACxB,IACA,EAAA,WAAA,EACA,gBACG,KAAA;AACH,EAAO,OAAA,CAAC,YAAoB,UAAuB,KAAA;AACjD,IAAA,MAAM,QAAiC,EAAC;AACxC,IAAM,MAAA,UAAA,GAAa,KAAM,CAAA,IAAA,CAAK,WAAW,CAAA;AAEzC,IAAA,KAAA,MAAW,aAAa,UAAY,EAAA;AAClC,MAAM,MAAA,sBAAA,GAAyB,iBAAiB,SAAS,CAAA;AACzD,MAAA,IAAI,CAAC,sBAAwB,EAAA;AAC3B,QAAA;AAAA;AAGF,MAAM,MAAA,UAAA,GAAa,uBAAuB,UAAU,CAAA;AACpD,MAAI,IAAA,OAAO,eAAe,QAAU,EAAA;AAClC,QAAA;AAAA;AAGF,MAAM,MAAA,KAAA,GAAQ,KAAK,UAAU,CAAA;AAC7B,MAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,MAAQ,EAAA;AAC3B,QAAA;AAAA;AAGF,MAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AACrC,MAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,MAAQ,EAAA;AAC3B,QAAA;AAAA;AAGF,MAAA,KAAA,CAAM,SAAS,CAAA,GAAI,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AAAA;AAG5C,IAAO,OAAA,KAAA;AAAA,GACT;AACF,CAAA;AAEA,MAAM,UAAA,GAAa,CAAC,QAAA,EAAmC,KAA4C,KAAA;AACjG,EAAA,IAAI,QAAW,GAAA,IAAA;AAEf,EAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACxB,IAAA,IAAI,OAAO,QAAA,CAAS,IAAI,CAAA,KAAM,WAAa,EAAA;AACzC,MAAA;AAAA;AAGF,IAAI,IAAA,QAAA,CAAS,IAAI,CAAA,KAAM,IAAM,EAAA;AAC3B,MAAA;AAAA;AAGF,IAAA,IAAI,QAAS,CAAA,IAAI,CAAM,KAAA,KAAA,CAAM,IAAI,CAAG,EAAA;AAClC,MAAW,QAAA,GAAA,KAAA;AACX,MAAA;AAAA;AACF;AAGF,EAAO,OAAA,QAAA;AACT,CAAA;AAEA,MAAM,sBAAyB,GAAA,CAC7B,gBACA,EAAA,KAAA,EACA,IACG,KAAA;AACH,EAAO,OAAA,MAAA,CAAO,KAAK,gBAAiB,CAAA,KAAA,CAAM,IAAI,CAAC,CAAA,CAAE,WAAW,IAAK,CAAA,MAAA;AACnE,CAAA;AAEA,MAAM,aAAA,GAAgB,CAAC,GAAA,EAAa,WAA8E,KAAA;AAChH,EAAO,OAAA;AAAA,IACL,GAAA;AAAA,IACA,KAAO,EAAA,WAAA,CAAY,GAAG,CAAA,CAAE,MAAS,GAAA;AAAA,GACnC;AACF,CAAA;;ACtNO,MAAM,sBAA6E,GAAA;AAAA,EACxF,IAAI,iBAAkB,CAAA,KAAA;AAAA,EACtB,IAAM,EAAA,sBAAA;AAAA,EACN,WAAa,EAAA,mDAAA;AAAA,EACb,cAAgB,EAAA;AAAA,IACd,aAAa;AAAC,GAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAU,EAAA,CAAC,OAAY,KAAA,CAAC,WACtB,MAAO,CAAA,IAAA;AAAA,IACLhF,aAAA,CAAI,CAAC,IAAS,KAAA;AACZ,MAAM,MAAA,OAAA,GAAU,mBAAoB,CAAA,OAAA,CAAQ,WAAW,CAAA;AAEvD,MAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAK,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AAC7C,QAAO,OAAA,IAAA;AAAA;AAGT,MAAO,OAAA,IAAA,CAAK,GAAI,CAAA,CAAC,KAAW,MAAA;AAAA,QAC1B,GAAG,KAAA;AAAA,QACH,MAAQ,EAAA,OAAA,CAAQ,KAAM,CAAA,MAAA,EAAQ,MAAM,KAAK;AAAA,OACzC,CAAA,CAAA;AAAA,KACH;AAAA;AAEP,CAAA;AAEO,MAAM,yBAA4B,GAAA,CAAC,WAAwC,KAAA,CAAC,GAAW,CAAc,KAAA;AAC1G,EAAA,OAAO,aAAa,CAAG,EAAA,WAAW,CAAI,GAAA,YAAA,CAAa,GAAG,WAAW,CAAA;AACnE,CAAA;AAEA,MAAM,sBACJ,CAAC,WAAA,KAAwC,CAAC,MAAA,EAAiB,MAAmB,KAAqB,KAAA;AACjG,EAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,MAAM,CAAK,IAAA,MAAA,CAAO,WAAW,CAAG,EAAA;AACjD,IAAO,OAAA,MAAA;AAAA;AAET,EAAA,IAAI,CAAC,WAAe,IAAA,MAAA,CAAO,KAAK,WAAW,CAAA,CAAE,WAAW,CAAG,EAAA;AACzD,IAAO,OAAA,MAAA;AAAA;AAET,EAAM,MAAA,QAAA,GAAW,0BAA0B,WAAW,CAAA;AACtD,EAAO,OAAAiF,YAAA,CAAM,MAAM,CAAE,CAAA,IAAA;AAAA,IAAK,CAAC,CAAA,EAAG,CAC5B,KAAA,QAAA,CAAS,mBAAoB,CAAA,CAAA,EAAG,KAAO,EAAA,IAAI,CAAG,EAAA,mBAAA,CAAoB,CAAG,EAAA,KAAA,EAAO,IAAI,CAAC;AAAA,GACnF;AACF,CAAA;AAEF,MAAM,YAAA,GAAe,CAAC,SAAA,EAAmB,WAAwC,KAAA;AAC/E,EAAA,IAAI,MAAO,CAAA,SAAA,CAAU,WAAY,CAAA,SAAS,CAAC,CAAG,EAAA;AAC5C,IAAA,OAAO,YAAY,SAAS,CAAA;AAAA;AAE9B,EAAA,OAAO,MAAO,CAAA,gBAAA;AAChB,CAAA;;ACrDO,MAAM,uBAA+E,GAAA;AAAA,EAC1F,IAAI,iBAAkB,CAAA,MAAA;AAAA,EACtB,IAAM,EAAA,uBAAA;AAAA,EACN,WAAa,EAAA,oDAAA;AAAA,EACb,cAAgB,EAAA;AAAA,IACd,cAAc;AAAC,GACjB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAU,EAAA,CAAC,OAAY,KAAA,CAAC,WACtB,MAAO,CAAA,IAAA;AAAA,IACLjF,aAAA,CAAI,CAAC,IAAS,KAAA;AACZ,MAAM,MAAA,OAAA,GAAU,aAAc,CAAA,OAAA,CAAQ,YAAY,CAAA;AAElD,MAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAK,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AAC7C,QAAO,OAAA,IAAA;AAAA;AAGT,MAAO,OAAA,IAAA,CAAK,GAAI,CAAA,CAAC,KAAW,MAAA;AAAA,QAC1B,GAAG,KAAA;AAAA,QACH,MAAA,EAAQ,QAAQ,KAAK;AAAA,OACrB,CAAA,CAAA;AAAA,KACH;AAAA;AAEP,CAAA;AAEA,MAAM,aACJ,GAAA,CAAC,YACD,KAAA,CAAC,KAA8B,KAAA;AAC7B,EAAA,IAAI,CAAC,YAAgB,IAAA,MAAA,CAAO,KAAK,YAAY,CAAA,CAAE,WAAW,CAAG,EAAA;AAC3D,IAAA,OAAO,KAAM,CAAA,MAAA;AAAA;AAGf,EAAA,OAAO,KAAM,CAAA,MAAA,CAAO,GAAI,CAAA,CAAC,KAAU,KAAA;AACjC,IAAM,MAAA,WAAA,GAAc,mBAAoB,CAAA,KAAA,EAAO,KAAK,CAAA;AACpD,IAAM,MAAA,QAAA,GAAW,aAAa,WAAW,CAAA;AAEzC,IAAA,IAAI,OAAO,QAAA,KAAa,QAAY,IAAA,QAAA,CAAS,WAAW,CAAG,EAAA;AACzD,MAAO,OAAA,KAAA;AAAA;AAGT,IAAO,OAAA;AAAA,MACL,GAAG,KAAA;AAAA,MACH,MAAQ,EAAA;AAAA,QACN,GAAG,KAAM,CAAA,MAAA;AAAA,QACT,WAAa,EAAA;AAAA,OACf;AAAA,MACA,KAAO,EAAA;AAAA,QACL,GAAG,KAAM,CAAA,KAAA;AAAA,QACT,WAAa,EAAA;AAAA;AACf,KACF;AAAA,GACD,CAAA;AACH,CAAA;;ACrDK,MAAM,yBAAmF,GAAA;AAAA,EAC9F,IAAI,iBAAkB,CAAA,QAAA;AAAA,EACtB,IAAM,EAAA,yBAAA;AAAA,EACN,WAAa,EAAA,sEAAA;AAAA,EACb,cAAgB,EAAA;AAAA,IACd,eAAe,EAAC;AAAA,IAChB,aAAa,EAAC;AAAA,IACd,cAAc,EAAC;AAAA,IACf,eAAe;AAAC,GAClB;AAAA,EACA,YAAA,EAAc,CAAC,IAAsB,KAAA;AACnC,IAAA,OAAO,IAAK,CAAA,MAAA,GAAS,CACjB,GAAA,iCAAA,CAAkC,cAClC,iCAAkC,CAAA,UAAA;AAAA,GACxC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,CAAC,OAAA,EAAS,GAAQ,KAAA,CAAC,WAC3B,MAAO,CAAA,IAAA;AAAA,IACL,6BAA8B,CAAA,QAAA;AAAA,MAC5B;AAAA,QACE,OAAA,EAAS,QAAQ,aAAgB,GAAA,EAAE,OAAO,iBAAkB,CAAA,OAAA,CAAQ,aAAa,CAAA,EAAM,GAAA,KAAA,CAAA;AAAA,QACvF,SAAS,EAAE,KAAA,EAAO,iBAAkB,CAAA,OAAA,CAAQ,aAAa,CAAE;AAAA,OAC7D;AAAA,MACA;AAAA,KACF;AAAA,IACA,sBAAA,CAAuB,QAAS,CAAA,OAAA,EAAS,GAAG,CAAA;AAAA,IAC5C,uBAAA,CAAwB,QAAS,CAAA,OAAA,EAAS,GAAG;AAAA;AAEnD,CAAA;AAEA,MAAM,iBAAA,GAAoB,CAAC,aAAqD,KAAA;AAC9E,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAA,OAAO,EAAC;AAAA;AAGV,EAAO,OAAA,MAAA,CAAO,KAAK,aAAa,CAAA,CAAE,OAAO,CAAC,IAAA,KAAS,aAAc,CAAA,IAAI,CAAC,CAAA;AACxE,CAAA;;AC5BO,MAAM,iBAAmE,GAAA;AAAA,EAC9E,IAAI,iBAAkB,CAAA,MAAA;AAAA,EACtB,IAAM,EAAA,QAAA;AAAA,EACN,WAAa,EAAA,gGAAA;AAAA,EACb,cAAgB,EAAA;AAAA,IACd,QAAA,EAAU,CAAC,SAAA,CAAU,GAAG;AAAA,GAC1B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAU,EAAA,CAAC,OAAY,KAAA,CAAC,WACtB,MAAO,CAAA,IAAA;AAAA,IACLA,aAAA,CAAI,CAAC,IAAS,KAAA;AAxCpB,MAAA,IAAA,EAAA;AAyCQ,MAAA,IAAI,EAAC,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,QAAT,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAmB,MAAQ,CAAA,EAAA;AAC9B,QAAO,OAAA,IAAA;AAAA;AAGT,MAAA,MAAM,OAAU,GAAA,OAAA,CAAQ,MACpB,GAAA,eAAA,CAAgB,OAAQ,CAAA,MAAM,CAC9B,GAAA,OAAA,CAAQ,gBAAoB,IAAA,OAAA,CAAQ,IAAS,KAAA,cAAA,sBAC3C,kBACA,GAAA,mBAAA;AAGN,MAAI,IAAA,OAAA,CAAQ,SAAS,cAAoC,qBAAA;AACvD,QAAA,OAAO,YAAa,CAAA,IAAA,EAAM,OAAS,EAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA;AAIrD,MAAA,MAAM,MAAM,kBAAmB,CAAA,IAAA,EAAM,SAAS,OAAQ,CAAA,QAAA,EAAU,QAAQ,cAAc,CAAA;AACtF,MAAO,OAAA,GAAA,GACH,CAAC,EAAE,GAAG,KAAK,KAAO,EAAA,CAAA,EAAG,iBAAkB,CAAA,MAAM,CAAI,CAAA,EAAA,IAAA,CAAK,IAAI,CAAC,KAAA,KAAU,KAAM,CAAA,KAAK,CAAE,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,EAAI,CAAA,GAC/F,EAAC;AAAA,KACN;AAAA;AAEP,CAAA;AAKA,SAAS,kBACP,CAAA,IAAA,EACA,OACA,EAAA,SAAA,EACA,cACuB,EAAA;AACvB,EAAM,MAAA,WAAA,GAAc,aAAc,CAAA,IAAA,CAAK,SAAS,CAAA;AAChD,EAAA,MAAM,WAAW,WAAY,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAC5C,EAAA,MAAM,YAAyB,EAAC;AAChC,EAAA,MAAM,cAAiB,GAAA,cAAA,GAAiB,oBAAqB,CAAA,IAAI,IAAI,EAAC;AAEtE,EAAA,KAAA,MAAW,UAAU,IAAM,EAAA;AACzB,IAAM,MAAA,MAAA,GAAS,MAAO,CAAA,MAAA,CAAO,MAAO,CAAA,CAAC,MAAM,OAAQ,CAAA,CAAA,EAAG,MAAQ,EAAA,IAAI,CAAC,CAAA;AAEnE,IAAA,MAAM,OAAO,MAAO,CAAA,MAAA;AACpB,IAAA,MAAM,SAAkB,EAAC;AACzB,IAAM,MAAA,KAAA,GAAkB,IAAI,KAAA,CAAM,IAAI,CAAA;AACtC,IAAA,MAAA,CAAO,IAAK,CAAA;AAAA,MACV,IAAM,EAAA,OAAA;AAAA,MACN,MAAM,SAAU,CAAA,MAAA;AAAA,MAChB,MAAQ,EAAA,KAAA;AAAA,MACR,QAAQ;AAAC,KACV,CAAA;AAED,IAAA,MAAM,SAA8B,EAAC;AACrC,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAA,KAAA,MAAW,OAAO,cAAgB,EAAA;AAChC,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,IAAI,KAAA,CAAM,IAAI,CAAA;AAC5B,QAAA,MAAA,CAAO,IAAK,CAAA;AAAA,UACV,IAAM,EAAA,GAAA;AAAA,UACN,MAAM,SAAU,CAAA,MAAA;AAAA,UAChB,MAAA,EAAQ,OAAO,GAAG,CAAA;AAAA,UAClB,QAAQ;AAAC,SACV,CAAA;AAAA;AACH;AAGF,IAAA,MAAM,QAA6B,EAAC;AACpC,IAAA,KAAA,MAAW,QAAQ,WAAa,EAAA;AAC9B,MAAA,KAAA,CAAM,IAAK,CAAA,EAAE,CAAI,GAAA,IAAI,MAAM,IAAI,CAAA;AAC/B,MAAA,MAAA,CAAO,IAAK,CAAA;AAAA,QACV,MAAM,IAAK,CAAA,IAAA;AAAA,QACX,MAAM,SAAU,CAAA,KAAA;AAAA;AAAA,QAChB,MAAA,EAAQ,KAAM,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,QACrB,QAAQ;AAAC,OACV,CAAA;AAAA;AAGH,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AACtC,MAAM,MAAA,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,MAAA,MAAM,UAAU,WAAY,CAAA;AAAA,QAC1B,KAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,IAAI,cAAgB,EAAA;AAClB,QAAM,KAAA,CAAA,CAAC,IAAI,KAAM,CAAA,IAAA;AACjB,QAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,UAAW,KAAA,MAAA,GAAA,IAAO,MAAM,MAAQ,EAAA;AAC9B,YAAA,MAAA,CAAO,GAAG,CAAE,CAAA,CAAC,CAAI,GAAA,KAAA,CAAM,OAAO,GAAG,CAAA;AAAA;AACnC;AACF,OACK,MAAA;AACL,QAAA,KAAA,CAAM,CAAC,CAAA,GAAI,mBAAoB,CAAA,KAAA,EAAO,QAAQ,IAAI,CAAA;AAAA;AAGpD,MAAA,KAAA,MAAW,QAAQ,WAAa,EAAA;AAC9B,QAAM,MAAA,CAAA,GAAI,OAAQ,CAAA,IAAA,CAAK,EAAE,CAAA;AACzB,QAAA,IAAI,MAAM,IAAM,EAAA;AAEd,UAAA,KAAA,CAAM,IAAK,CAAA,EAAE,CAAE,CAAA,CAAC,CAAI,GAAA,GAAA;AAAA,SACf,MAAA;AACL,UAAA,KAAA,CAAM,IAAK,CAAA,EAAE,CAAE,CAAA,CAAC,CAAI,GAAA,CAAA;AAAA;AACtB;AACF;AAIF,IAAA,KAAA,MAAW,KAAK,MAAQ,EAAA;AACtB,MAAI,IAAA,CAAA,CAAE,IAAS,KAAA,SAAA,CAAU,KAAO,EAAA;AAC9B,QAAM,MAAA,CAAA,GAAI,uBAAuB,CAAC,CAAA;AAClC,QAAA,IAAI,CAAG,EAAA;AACL,UAAA,CAAA,CAAE,IAAO,GAAA,CAAA;AAAA;AACX;AACF;AAGF,IAAA,SAAA,CAAU,IAAK,CAAA;AAAA,MACb,GAAG,MAAA;AAAA;AAAA,MACH,MAAA;AAAA,MACA,MAAQ,EAAA;AAAA,KACT,CAAA;AAAA;AAGH,EAAA,OAAO,aAAa,SAAS,CAAA;AAC/B;AAEA,SAAS,qBAAqB,MAA+B,EAAA;AAC3D,EAAM,MAAA,IAAA,uBAAW,GAAY,EAAA;AAC7B,EAAA,KAAA,MAAW,SAAS,MAAQ,EAAA;AAC1B,IAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,MAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,QAAA,KAAA,MAAW,CAAK,IAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,MAAM,CAAG,EAAA;AACzC,UAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AACZ;AACF;AACF;AAEF,EAAO,OAAA,CAAC,GAAG,IAAI,CAAA;AACjB;AAKA,SAAS,aAAa,IAA0C,EAAA;AAC9D,EAAI,IAAA,EAAC,6BAAM,MAAQ,CAAA,EAAA;AACjB,IAAO,OAAA,KAAA,CAAA;AAAA;AAGT,EAAM,MAAA,SAAA,GAAY,KAAK,CAAC,CAAA;AAExB,EAAA,KAAA,IAAS,WAAc,GAAA,CAAA,EAAG,WAAc,GAAA,IAAA,CAAK,QAAQ,WAAe,EAAA,EAAA;AAClE,IAAM,MAAA,MAAA,GAAS,KAAK,WAAW,CAAA;AAE/B,IAAA,KAAA,IAAS,YAAY,CAAG,EAAA,SAAA,GAAY,SAAU,CAAA,MAAA,CAAO,QAAQ,SAAa,EAAA,EAAA;AACxE,MAAM,MAAA,SAAA,GAAY,SAAU,CAAA,MAAA,CAAO,SAAS,CAAA;AAC5C,MAAA,KAAA,IAAS,aAAa,CAAG,EAAA,UAAA,GAAa,MAAO,CAAA,MAAA,CAAO,QAAQ,UAAc,EAAA,EAAA;AACxE,QAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,MAAA,CAAO,UAAU,CAAA;AACtC,QAAM,MAAA,YAAA,GAAe,SAAc,KAAA,CAAA,IAAK,UAAe,KAAA,CAAA;AACvD,QAAA,MAAM,cAAc,SAAU,CAAA,IAAA,KAAS,MAAM,IAAQ,IAAA,SAAA,CAAU,SAAS,KAAM,CAAA,IAAA;AAE9E,QAAA,IAAI,gBAAgB,WAAa,EAAA;AAC/B,UAAA,MAAM,aAAa,SAAU,CAAA,MAAA;AAC7B,UAAA,MAAM,SAAS,KAAM,CAAA,MAAA;AACrB,UAAU,SAAA,CAAA,MAAA,GAAS,UAAW,CAAA,MAAA,CAAO,MAAM,CAAA;AAAA;AAC7C;AACF;AACF;AAGF,EAAA,SAAA,CAAU,IAAO,GAAA,KAAA,CAAA;AACjB,EAAA,SAAA,CAAU,MAAS,GAAA,SAAA,CAAU,MAAO,CAAA,CAAC,EAAE,MAAO,CAAA,MAAA;AAC9C,EAAO,OAAA,SAAA;AACT;AAKgB,SAAA,YAAA,CAAa,IAAmB,EAAA,OAAA,EAAuB,SAAqC,EAAA;AAC1G,EAAM,MAAA,WAAA,GAAc,aAAc,CAAA,IAAA,CAAK,SAAS,CAAA;AAChD,EAAA,MAAM,WAAW,WAAY,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAC5C,EAAA,MAAM,YAAyB,EAAC;AAChC,EAAA,KAAA,MAAW,UAAU,IAAM,EAAA;AACzB,IAAA,MAAM,SAAkB,EAAC;AACzB,IAAW,KAAA,MAAA,KAAA,IAAS,OAAO,MAAQ,EAAA;AACjC,MAAA,IAAI,OAAQ,CAAA,KAAA,EAAO,MAAQ,EAAA,IAAI,CAAG,EAAA;AAChC,QAAA,MAAM,UAAU,WAAY,CAAA;AAAA,UAC1B,KAAA;AAAA,UACA;AAAA,SACD,CAAA;AACD,QAAA,KAAA,MAAW,WAAW,QAAU,EAAA;AAC9B,UAAM,MAAA,KAAA,GAAQ,QAAQ,OAAO,CAAA;AAC7B,UAAA,MAAM,IAAO,GAAA;AAAA,YACX,GAAG,KAAA;AAAA,YACH,IAAA,EAAM,YAAa,CAAA,OAAA,EAAS,KAAK,CAAA;AAAA,YACjC,MAAA,EAAQ,CAAC,KAAK;AAAA,WAChB;AACA,UAAA,IAAA,CAAK,KAAQ,GAAA,KAAA,CAAA;AACb,UAAI,IAAA,QAAA,CAAS,SAAS,CAAG,EAAA;AACvB,YAAI,IAAA,CAAC,KAAK,MAAQ,EAAA;AAChB,cAAA,IAAA,CAAK,SAAS,EAAC;AAAA;AAEjB,YAAA,IAAA,CAAK,OAAO,SAAS,CAAA,GAAI,aAAc,CAAA,GAAA,CAAI,OAAO,CAAE,CAAA,IAAA;AAAA;AAEtD,UAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA;AAClB;AACF;AAEF,IAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,MAAA,SAAA,CAAU,IAAK,CAAA;AAAA,QACb,GAAG,MAAA;AAAA,QACH,MAAA;AAAA,QACA,MAAQ,EAAA;AAAA;AAAA,OACT,CAAA;AAAA;AACH;AAGF,EAAO,OAAA,SAAA;AACT;AAEA,SAAS,YAAA,CAAa,SAAiB,KAAc,EAAA;AACnD,EAAA,QAAQ,OAAS;AAAA,IACf,KAAK,SAAU,CAAA,SAAA;AAAA,IACf,KAAK,SAAU,CAAA,YAAA;AACb,MAAA,OAAO,SAAU,CAAA,KAAA;AAAA,IACnB,KAAK,SAAU,CAAA,KAAA;AAAA,IACf,KAAK,SAAU,CAAA,YAAA;AAAA,IACf,KAAK,SAAU,CAAA,IAAA;AAAA,IACf,KAAK,SAAU,CAAA,WAAA;AACb,MAAA,OAAO,KAAM,CAAA,IAAA;AAAA,IACf;AACE,MAAA,OAAO,SAAU,CAAA,MAAA;AAAA;AAEvB;;ACtPO,MAAM,wBAAiF,GAAA;AAAA,EAC5F,IAAI,iBAAkB,CAAA,aAAA;AAAA,EACtB,IAAM,EAAA,wBAAA;AAAA,EACN,WAAa,EAAA,qDAAA;AAAA,EACb,cAAgB,EAAA;AAAA,IACd,KAAO,EAAA,MAAA;AAAA,IACP,aAAe,EAAA;AAAA,GACjB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAU,EAAA,CAAC,OAAY,KAAA,CAAC,WACtB,MAAO,CAAA,IAAA;AAAA,IACLA,aAAA,CAAI,CAAC,IAAS,KAAA;AACZ,MAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAK,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AAC7C,QAAO,OAAA,IAAA;AAAA;AAET,MAAA,OAAO,IAAK,CAAA,GAAA,CAAI,mBAAoB,CAAA,OAAO,CAAC,CAAA;AAAA,KAC7C;AAAA;AAEP,CAAA;AAEA,MAAM,mBAAsB,GAAA,CAAC,OAA6C,KAAA,CAAC,KAAqB,KAAA;AAC9F,EAAM,MAAA,KAAA,GAAQ,eAAgB,CAAA,OAAA,CAAQ,KAAK,CAAA;AAC3C,EAAA,MAAM,MAAS,GAAA,KAAA,CAAM,MAAO,CAAA,GAAA,CAAI,CAAC,KAAU,KAAA;AACzC,IAAM,MAAA,WAAA,GAAc,mBAAoB,CAAA,KAAA,EAAO,KAAK,CAAA;AACpD,IAAA,IAAI,CAAC,KAAA,CAAM,IAAK,CAAA,WAAW,CAAG,EAAA;AAC5B,MAAO,OAAA,KAAA;AAAA;AAET,IAAA,MAAM,cAAiB,GAAA,WAAA,CAAY,OAAQ,CAAA,KAAA,EAAO,QAAQ,aAAa,CAAA;AACvE,IAAO,OAAA;AAAA,MACL,GAAG,KAAA;AAAA,MACH,QAAQ,EAAE,GAAG,KAAM,CAAA,MAAA,EAAQ,aAAa,cAAe,EAAA;AAAA,MACvD,OAAO,EAAE,GAAG,KAAM,CAAA,KAAA,EAAO,aAAa,cAAe;AAAA,KACvD;AAAA,GACD,CAAA;AACD,EAAO,OAAA,EAAE,GAAG,KAAA,EAAO,MAAO,EAAA;AAC5B,CAAA;;AC5CO,MAAM,uBAA+E,GAAA;AAAA,EAC1F,IAAI,iBAAkB,CAAA,YAAA;AAAA,EACtB,IAAM,EAAA,gBAAA;AAAA,EACN,WAAa,EAAA,+FAAA;AAAA,EACb,gBAAgB,EAAC;AAAA,EACjB,QAAU,EAAA,CAAC,OAAY,KAAA,CAAC,WACtB,MAAO,CAAA,IAAA;AAAA,IACLA,aAAA,CAAI,CAAC,IAAS,KAAA;AACZ,MAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAK,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AAC7C,QAAO,OAAA,IAAA;AAAA;AAGT,MAAA,IAAA,GAAO,KAAK,MAAO,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,SAAS,CAAC,CAAA;AAC9C,MAAI,IAAA,CAAC,kBAAmB,CAAA,IAAI,CAAG,EAAA;AAC7B,QAAO,OAAA,IAAA;AAAA;AAGT,MAAA,MAAM,mBAA2C,EAAC;AAClD,MAAM,MAAA,YAAA,uBAAmB,GAAY,EAAA;AACrC,MAAM,MAAA,SAAA,GAAY,IAAI,gBAAiB,CAAA;AAAA,QACrC,KAAO,EAAA,CAAA,EAAG,iBAAkB,CAAA,YAAY,IAAI,IAAK,CAAA,GAAA,CAAI,CAAC,KAAA,KAAU,KAAM,CAAA,KAAK,CAAE,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,QACtF,QAAQ;AAAC,OACV,CAAA;AACD,MAAA,MAAM,WAAqB,GAAA;AAAA,QACzB,IAAM,EAAA,6BAAA;AAAA,QACN,QAAQ,EAAC;AAAA,QACT,QAAQ,EAAC;AAAA,QACT,MAAM,SAAU,CAAA;AAAA,OAClB;AAEA,MAAA,KAAA,IAAS,UAAa,GAAA,CAAA,EAAG,UAAa,GAAA,IAAA,CAAK,QAAQ,UAAc,EAAA,EAAA;AAC/D,QAAM,MAAA,KAAA,GAAQ,KAAK,UAAU,CAAA;AAE7B,QAAA,KAAA,IAAS,aAAa,CAAG,EAAA,UAAA,GAAa,KAAM,CAAA,MAAA,CAAO,QAAQ,UAAc,EAAA,EAAA;AACvE,UAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,UAAU,CAAA;AAErC,UAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,IAAM,EAAA;AACjC,YAAA,gBAAA,CAAiB,UAAU,CAAI,GAAA,UAAA;AAE/B,YAAA,IAAI,CAAC,YAAA,CAAa,GAAI,CAAA,2BAA2B,CAAG,EAAA;AAClD,cAAA,SAAA,CAAU,QAAS,CAAA,kBAAA,CAAmB,KAAO,EAAA,2BAA2B,CAAC,CAAA;AACzE,cAAA,SAAA,CAAU,SAAS,WAAW,CAAA;AAC9B,cAAA,YAAA,CAAa,IAAI,2BAA2B,CAAA;AAAA;AAE9C,YAAA;AAAA;AAGF,UAAA,IAAI,CAAC,YAAA,CAAa,GAAI,CAAA,4BAA4B,CAAG,EAAA;AACnD,YAAA,SAAA,CAAU,QAAS,CAAA,kBAAA,CAAmB,KAAO,EAAA,4BAA4B,CAAC,CAAA;AAC1E,YAAA,YAAA,CAAa,IAAI,4BAA4B,CAAA;AAAA;AAC/C;AACF;AAGF,MAAA,KAAA,IAAS,UAAa,GAAA,CAAA,EAAG,UAAa,GAAA,IAAA,CAAK,QAAQ,UAAc,EAAA,EAAA;AAC/D,QAAM,MAAA,KAAA,GAAQ,KAAK,UAAU,CAAA;AAE7B,QAAA,KAAA,IAAS,UAAa,GAAA,CAAA,EAAG,UAAa,GAAA,KAAA,CAAM,QAAQ,UAAc,EAAA,EAAA;AAChE,UAAM,MAAA,cAAA,GAAiB,iBAAiB,UAAU,CAAA;AAClD,UAAM,MAAA,eAAA,GAAkB,cAAmB,KAAA,CAAA,GAAI,CAAI,GAAA,CAAA;AAEnD,UAAA,SAAA,CAAU,GAAI,CAAA;AAAA,YACZ,CAAC,2BAA2B,GAAG,KAAA,CAAM,OAAO,cAAc,CAAA,CAAE,OAAO,UAAU,CAAA;AAAA,YAC7E,CAAC,6BAA6B,GAAG,mBAAA,CAAoB,KAAK,CAAA;AAAA,YAC1D,CAAC,4BAA4B,GAAG,KAAA,CAAM,OAAO,eAAe,CAAA,CAAE,OAAO,UAAU;AAAA,WAChF,CAAA;AAAA;AACH;AAGF,MAAA,OAAO,CAAC,aAAA,CAAc,SAAW,EAAA,CAAA,EAAG,IAAI,CAAC,CAAA;AAAA,KAC1C;AAAA;AAEP,CAAA;AAEA,MAAM,kBAAA,GAAqB,CAAC,KAAA,EAAc,IAAwB,KAAA;AAChE,EAAO,OAAA;AAAA,IACL,GAAG+E,YAAK,KAAO,EAAA,CAAC,UAAU,OAAS,EAAA,QAAA,EAAU,QAAU,EAAA,MAAM,CAAC,CAAA;AAAA,IAC9D,IAAA;AAAA,IACA,QAAQ,EAAC;AAAA,IACT,MAAQ,EAAA;AAAA,MACN,GAAGA,WAAK,CAAA,KAAA,CAAM,QAAQ,CAAC,aAAA,EAAe,mBAAmB,CAAC;AAAA;AAC5D,GACF;AACF,CAAA;;AClFO,MAAM,iBAAmE,GAAA;AAAA,EAC9E,IAAI,iBAAkB,CAAA,MAAA;AAAA,EACtB,IAAM,EAAA,SAAA;AAAA,EACN,WAAa,EAAA,yBAAA;AAAA,EACb,cAAgB,EAAA;AAAA,IACd,QAAQ;AAAC,GACX;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,CAAC,OAAA,EAAS,GAAQ,KAAA,CAAC,WAC3B,MAAO,CAAA,IAAA;AAAA,IACL/E,aAAA,CAAI,CAAC,IAAS,KAAA;AAnCpB,MAAA,IAAA,EAAA;AAoCQ,MAAA,IAAI,CAAC,KAAA,CAAM,OAAQ,CAAA,IAAI,CAAK,IAAA,IAAA,CAAK,MAAW,KAAA,CAAA,IAAK,EAAC,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,IAAT,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAe,MAAQ,CAAA,EAAA;AACvE,QAAO,OAAA,IAAA;AAAA;AAET,MAAA,OAAO,cAAe,CAAA,IAAA,EAAM,OAAQ,CAAA,IAAS,CAAA;AAAA,KAC9C;AAAA;AAEP,CAAA;AAEA,SAAS,cAAA,CAAe,IAAmB,EAAA,IAAA,EAAqB,GAAwC,EAAA;AACtG,EAAO,OAAA,IAAA,CAAK,GAAI,CAAA,CAAC,KAAU,KAAA;AACzB,IAAA,MAAM,CAAI,GAAA,gBAAA,CAAiB,KAAO,EAAA,IAAS,CAAA;AAC3C,IAAA,IAAI,EAAE,MAAU,IAAA,CAAA,CAAE,CAAC,CAAA,CAAE,SAAS,IAAM,EAAA;AAClC,MAAO,OAAA,aAAA,CAAc,OAAO,CAAE,CAAA,CAAC,EAAE,KAAO,EAAA,CAAA,CAAE,CAAC,CAAA,CAAE,IAAI,CAAA;AAAA;AAEnD,IAAO,OAAA,KAAA;AAAA,GACR,CAAA;AACH;AAEA,SAAS,gBAAA,CAAiB,KAAkB,EAAA,IAAA,EAAqB,GAA0C,EAAA;AACzG,EAAO,OAAA,IAAA,CAAK,GAAI,CAAA,CAAC,CAAM,KAAA;AACrB,IAAI,IAAA,CAAA,CAAE,SAAS,IAAM,EAAA;AAEnB,MAAO,OAAA,CAAA;AAAA;AAGT,IAAO,OAAA;AAAA,MACL,GAAG,CAAA;AAAA,MACH,KAAA,EAAO,KAAM,CAAA,MAAA,CAAO,SAAU,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,KAAU,KAAA,mBAAA,CAAoB,CAAG,EAAA,KAAK,CAAC;AAAA,KAChF;AAAA,GACD,CAAA;AACH;;ACtDO,MAAM,oBAAyE,GAAA;AAAA,EACpF,IAAI,iBAAkB,CAAA,SAAA;AAAA,EACtB,IAAM,EAAA,WAAA;AAAA,EACN,WAAa,EAAA,0BAAA;AAAA,EACb,gBAAgB,EAAC;AAAA,EAEjB,QAAU,EAAA,CAAC,OAAY,KAAA,CAAC,WACtB,MAAO,CAAA,IAAA;AAAA,IACLA,aAAA,CAAI,CAAC,IAAS,KAAA;AACZ,MAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACrB,QAAO,OAAA,IAAA;AAAA;AAET,MAAO,OAAA,kBAAA,CAAmB,SAAS,IAAI,CAAA;AAAA,KACxC;AAAA;AAEP,CAAA;AAEA,SAAS,kBAAA,CAAmB,SAAsC,IAAgC,EAAA;AAChG,EAAO,OAAA,IAAA,CAAK,GAAI,CAAA,CAAC,KAAU,KAAA;AACzB,IAAM,MAAA,UAAA,GAAa,KAAM,CAAA,MAAA,CAAO,CAAC,CAAA;AACjC,IAAA,MAAM,SAAY,GAAA,CAAC,OAAQ,CAAA,cAAA,GAAiB,UAAU,OAAQ,CAAA,cAAA;AAC9D,IAAA,MAAM,QAAW,GAAA,CAAC,OAAQ,CAAA,cAAA,GAAiB,UAAU,OAAQ,CAAA,cAAA;AAC7D,IAAM,MAAA,sBAAA,GACJ,UAAW,CAAA,IAAA,KAAS,SAAU,CAAA,MAAA,IAAU,UAAW,CAAA,IAAA,KAAS,SAAU,CAAA,IAAA,IAAQ,UAAW,CAAA,IAAA,KAAS,SAAU,CAAA,IAAA;AAC9G,IAAM,MAAA,OAAA,GAAU,yBACZ,CAAC,SAAA,EAAW,GAAG,oBAAqB,CAAA,UAAA,EAAY,WAAW,MAAM,CAAC,IAClE,CAAC,SAAA,EAAW,GAAG,UAAW,CAAA,MAAA,CAAO,IAAI,CAAC,CAAA,EAAG,CAAM,KAAA,QAAQ,CAAC,CAAA;AAC5D,IAAA,MAAM,OAAO,sBACT,GAAA,KAAA,CAAM,OAAO,GAAI,CAAA,CAAC,UAAU,KAAM,CAAA,IAAI,EAAE,KAAM,CAAA,CAAC,IAC/C,KAAM,CAAA,MAAA,CAAO,IAAI,CAAC,KAAA,KAAU,MAAM,IAAI,CAAA;AAC1C,IAAA,MAAM,SAAY,GAAA,kBAAA;AAAA,MAChB,yBACI,KAAM,CAAA,MAAA,CAAO,IAAI,CAAC,KAAA,KAAU,MAAM,IAAI,CAAA,CAAE,KAAM,CAAA,CAAC,IAC/C,KAAM,CAAA,MAAA,CAAO,IAAI,CAAC,KAAA,KAAU,MAAM,IAAI;AAAA,KAC5C;AAEA,IAAA,MAAM,SAAY,GAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,WAAW,KAAU,KAAA;AAClD,MAAA,IAAI,UAAU,CAAG,EAAA;AACf,QAAO,OAAA;AAAA,UACL,IAAM,EAAA,SAAA;AAAA,UACN,MAAM,SAAU,CAAA,MAAA;AAAA,UAChB,QAAQ,EAAC;AAAA,UACT,MAAQ,EAAA;AAAA,SACV;AAAA;AAGF,MAAA,MAAM,MAAS,GAAA,KAAA,CAAM,MAAO,CAAA,GAAA,CAAI,CAAC,KAAU,KAAA;AACzC,QAAI,IAAA,SAAA,KAAc,UAAU,MAAQ,EAAA;AAClC,UAAO,OAAA,oBAAA,CAAqB,KAAO,EAAA,CAAC,KAAM,CAAA,MAAA,CAAO,QAAQ,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC,CAAA;AAAA;AAEjE,QAAO,OAAA,KAAA,CAAM,MAAO,CAAA,KAAA,GAAQ,CAAC,CAAA;AAAA,OAC9B,CAAA;AAED,MAAM,MAAA,SAAA,GAAY,sBAAyB,GAAA,UAAA,CAAW,IAAO,GAAA,KAAA;AAC7D,MAAM,MAAA,UAAA,GAAa,yBAAyB,SAAY,GAAA,KAAA;AAExD,MAAO,OAAA;AAAA,QACL,IAAA,EAAM,yBAAyB,QAAW,GAAA,SAAA;AAAA,QAC1C,MAAQ,EAAA;AAAA,UACN,CAAC,SAAS,GAAG;AAAA,SACf;AAAA,QACA,IAAM,EAAA,SAAA;AAAA,QACN,QAAQ,EAAC;AAAA,QACT,MAAQ,EAAA,sBAAA,GAAyB,MAAO,CAAA,KAAA,CAAM,CAAC,CAAI,GAAA;AAAA,OACrD;AAAA,KACD,CAAA;AACD,IAAO,OAAA;AAAA,MACL,GAAG,KAAA;AAAA,MACH,MAAQ,EAAA,SAAA;AAAA,MACR,MAAA,EAAQ,IAAK,CAAA,GAAA,CAAI,GAAG,SAAA,CAAU,GAAI,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,MAAO,CAAA,MAAM,CAAC,CAAA;AAAA,MACjE,OAAO,CAAG,EAAA,iBAAA,CAAkB,SAAS,CAAA,CAAA,EAAI,MAAM,KAAK,CAAA;AAAA,KACtD;AAAA,GACD,CAAA;AACH;AAEA,SAAS,mBAAmB,UAAoC,EAAA;AAC9D,EAAM,MAAA,gBAAA,GAAmB,IAAI,GAAA,CAAI,UAAU,CAAA;AAC3C,EAAO,OAAA,gBAAA,CAAiB,SAAS,CAAI,GAAA,CAAC,GAAG,gBAAgB,CAAA,CAAE,CAAC,CAAA,GAAI,SAAU,CAAA,MAAA;AAC5E;AAEA,SAAS,oBAAA,CAAqB,OAAc,MAAmB,EAAA;AAC7D,EAAA,QAAQ,MAAM,IAAM;AAAA,IAClB,KAAK,SAAU,CAAA,IAAA;AAAA,IACf,KAAK,SAAU,CAAA,MAAA;AAAA,IACf,KAAK,SAAU,CAAA,OAAA;AAAA,IACf,KAAK,SAAU,CAAA,MAAA;AACb,MAAA,OAAO,OAAO,GAAI,CAAA,CAAC,CAAM,KAAA,CAAA,EAAG,CAAC,CAAE,CAAA,CAAA;AAAA,IACjC,KAAK,SAAU,CAAA,IAAA;AAEb,MAAO,OAAA,MAAA,CAAO,GAAI,CAAA,CAAC,CAAM,KAAA,KAAA,CAAM,OAAO,IAAM,CAAA,IAAA,CAAM,IAAM,CAAA,CAAC,CAAC,CAAA;AAAA,IAC5D;AACE,MAAA,OAAO,OAAO,GAAI,CAAA,CAAC,MAAM,IAAK,CAAA,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA;AAEhD;;AC7EO,MAAM,oBAAuB,GAAA;AAAA,EAClC,eAAA;AAAA,EACA,uBAAA;AAAA,EACA,6BAAA;AAAA,EACA,uBAAA;AAAA,EACA,8BAAA;AAAA,EACA,wBAAA;AAAA,EACA,uBAAA;AAAA,EACA,qBAAA;AAAA,EACA,sBAAA;AAAA,EACA,yBAAA;AAAA,EACA,iBAAA;AAAA,EACA,sBAAA;AAAA,EACA,yBAAA;AAAA,EACA,sBAAA;AAAA;AAAA,EAEA,0BAA4B,EAAA,sBAAA;AAAA,EAC5B,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,yBAAA;AAAA,EACA,wBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,wBAAA;AAAA,EACA,oBAAA;AAAA,EACA,2BAAA;AAAA,EACA,2BAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF;;ACrBY,IAAA,mBAAA,qBAAAkF,oBAAL,KAAA;AACL,EAAAA,qBAAA,SAAU,CAAA,GAAA,SAAA;AACV,EAAAA,qBAAA,oBAAqB,CAAA,GAAA,oBAAA;AACrB,EAAAA,qBAAA,wBAAyB,CAAA,GAAA,wBAAA;AACzB,EAAAA,qBAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,qBAAA,0BAA2B,CAAA,GAAA,0BAAA;AAC3B,EAAAA,qBAAA,UAAW,CAAA,GAAA,UAAA;AACX,EAAAA,qBAAA,kBAAmB,CAAA,GAAA,kBAAA;AAPT,EAAAA,OAAAA,oBAAAA;AAAA,CAAA,EAAA,mBAAA,IAAA,EAAA;AAcC,MAAA,4BAAA,GAA+B,IAAI,QAAkC;;ACrClF,MAAM,WACJ,GAAA,CAAC,MAA+B,EAAA,GAAA,KAChC,CAAC,MAAW,KAAA;AAjBd,EAAA,IAAA,EAAA,EAAA,EAAA;AAkBI,EAAA,MAAM,IAAO,GAAA,4BAAA,CAA6B,GAAI,CAAA,MAAA,CAAO,EAAE,CAAA;AAEvD,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAO,OAAA,MAAA;AAAA;AAGT,EAAA,MAAM,cAAiB,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,cAAe,CAAA,cAAA,KAApB,YAAsC,EAAC;AAC9D,EAAA,MAAM,UAAU,EAAE,GAAG,cAAgB,EAAA,GAAG,OAAO,OAAQ,EAAA;AAGvD,EAAM,MAAA,QAAA,GAAW,OAAO,qBAAyB,IAAA,IAAA;AAEjD,EAAM,MAAA,YAAA,GAAe,WACjB,OACA,GAAA,WAAA,CAAY9C,iBAAU,OAAO,CAAA,EAAG,CAAC,CAAM,KAAA;AACrC,IAAI,IAAA,OAAO,MAAM,QAAU,EAAA;AACzB,MAAO,OAAA,GAAA,CAAI,YAAY,CAAC,CAAA;AAAA;AAE1B,IAAO,OAAA,CAAA;AAAA,GACR,CAAA;AAEL,EAAM,MAAA,OAAA,GAAA,CAAA,CAAU,YAAO,MAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAe,WAAU,gBAAiB,CAAA,MAAA,CAAO,MAAM,CAAI,GAAA,KAAA,CAAA;AAC3E,EAAA,OAAO,MAAO,CAAA,IAAA;AAAA,IACZ+C,kBAAA;AAAA,MAAS,CAAC,MACR,KAAAC,OAAA,CAAG,YAAY,MAAQ,EAAA,OAAO,CAAC,CAAE,CAAA,IAAA;AAAA,QAC/B,IAAK,CAAA,cAAA,CAAe,QAAS,CAAA,YAAA,EAAc,GAAG,CAAA;AAAA,QAC9C,oBAAA,CAAqB,MAAQ,EAAA,IAAA,EAAM,OAAO;AAAA;AAC5C;AACF,GACF;AACF,CAAA;AAEF,SAAS,WAAA,CAAY,MAAmB,OAAwB,EAAA;AAC9D,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,OAAO,KAAK,MAAO,CAAA,CAAC,CAAM,KAAA,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA;AAEtC,EAAO,OAAA,IAAA;AACT;AAEA,MAAM,uBACJ,CAAC,MAAA,EAAqB,MAA+B,OACrD,KAAA,CAAC,WACC,MAAO,CAAA,IAAA;AAAA,EACLpF,aAAA,CAAI,CAAC,KAAU,KAAA;AACb,IAAA,IAAI,UAAU,MAAQ,EAAA;AACpB,MAAO,OAAA,KAAA;AAAA;AAIT,IAAA,IAAI,OAAS,EAAA;AAEX,MAAA,IAAI,MAAS,GAAA,CAAA;AACb,MAAA,MAAM,MAAS,GAAA,MAAA,CAAO,MAAO,CAAA,CAAC,GAAG,GAAQ,KAAA;AACvC,QAAM,MAAA,IAAA,GAAO,CAAC,OAAA,CAAQ,CAAC,CAAA;AACvB,QAAI,IAAA,IAAA,IAAQ,CAAC,MAAQ,EAAA;AACnB,UAAS,MAAA,GAAA,GAAA;AAAA;AAEX,QAAO,OAAA,IAAA;AAAA,OACR,CAAA;AACD,MAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,QAAA,KAAA,CAAM,MAAO,CAAA,MAAA,EAAQ,CAAG,EAAA,GAAG,MAAM,CAAA;AAAA;AACnC;AAEF,IAAO,OAAA,KAAA;AAAA,GACR;AACH,CAAA;AAKY,SAAA,kBAAA,CACd,OACA,EAAA,IAAA,EACA,GACyB,EAAA;AACzB,EAAM,MAAA,MAAA,GAASoF,QAAgB,IAAI,CAAA;AAEnC,EAAI,IAAA,CAAC,QAAQ,MAAQ,EAAA;AACnB,IAAO,OAAA,MAAA;AAAA;AAGT,EAAA,MAAM,YAA0D,EAAC;AACjE,EAAA,MAAM,UAAU,GAAO,IAAA,IAAA,GAAA,GAAA,GAAA,EAAE,WAAa,EAAA,CAAC,QAAQ,GAAI,EAAA;AAEnD,EAAA,KAAA,IAAS,KAAQ,GAAA,CAAA,EAAG,KAAQ,GAAA,OAAA,CAAQ,QAAQ,KAAS,EAAA,EAAA;AACnD,IAAM,MAAA,MAAA,GAAS,QAAQ,KAAK,CAAA;AAE5B,IAAI,IAAA,sBAAA,CAAuB,MAAM,CAAG,EAAA;AAClC,MAAU,SAAA,CAAA,IAAA,CAAK,MAAO,CAAA,OAAO,CAAC,CAAA;AAAA,KACzB,MAAA;AACL,MAAA,IAAI,OAAO,QAAU,EAAA;AACnB,QAAA;AAAA;AAEF,MAAA,SAAA,CAAU,IAAK,CAAA,WAAA,CAAY,MAAQ,EAAA,OAAO,CAAC,CAAA;AAAA;AAC7C;AAIF,EAAA,OAAO,MAAO,CAAA,IAAA,CAAK,KAAM,CAAA,MAAA,EAAQ,SAAS,CAAA;AAC5C;AAEA,SAAS,uBAAuB,CAAkF,EAAA;AAChH,EAAA,OAAO,OAAO,CAAM,KAAA,UAAA;AACtB;AAIA,SAAS,WAAA,CAAY,KAAU,WAAyC,EAAA;AA7HxE,EAAA,IAAA,EAAA;AA8HE,EAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,GAAG,CAAG,EAAA;AACtB,IAAA,OAAO,IAAI,GAAI,CAAA,CAAC,MAAM,WAAY,CAAA,CAAA,EAAG,WAAW,CAAC,CAAA;AAAA;AAGnD,EAAI,IAAA,OAAO,QAAQ,QAAU,EAAA;AAC3B,IAAA,KAAA,MAAW,OAAO,GAAK,EAAA;AACrB,MAAA,GAAA,CAAI,GAAG,CAAI,GAAA,WAAA,CAAY,GAAI,CAAA,GAAG,GAAG,WAAW,CAAA;AAAA;AAG9C,IAAO,OAAA,GAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,CAAA,EAAA,GAAA,WAAA,CAAY,GAAG,CAAA,KAAf,IAAoB,GAAA,EAAA,GAAA,GAAA;AAAA;AAE/B;;ACvIA,MAAM,YAAe,GAAA;AAAA,EACnB,SAAW,EAAA,CAAC,IAAc,EAAA,IAAA,EAAc,cAAsB,IAAO,GAAA,SAAA;AAAA,EACrE,UAAU,CAAC,IAAA,EAAc,IAAc,EAAA,SAAA,KAAA,CAAuB,OAAO,IAAQ,IAAA,CAAA;AAAA;AAAA,EAE7E,OAAS,EAAA,CAAC,IAAc,EAAA,IAAA,EAAc,cAAsB,IAAO,GAAA;AACrE,CAAA;AAUA,SAAS,WAAA,CAAY,OAAkB,YAA8B,EAAA;AACnE,EAAA,OAAO,KAAM,CAAA,MAAA,CAAO,IAAK,CAAA,CAAC,KAAU,KAAA;AAElC,IAAA,OAAO,gBAAgB,IAAO,GAAA,KAAA,CAAM,SAAS,YAAe,GAAA,KAAA,CAAM,SAAS,SAAU,CAAA,IAAA;AAAA,GACtF,CAAA;AACH;AAGO,SAAS,yBAAyB,IAAoC,EAAA;AAC3E,EAAI,IAAA,IAAA,CAAK,KAAM,CAAA,MAAA,KAAW,CAAG,EAAA;AAC3B,IAAA,OAAO,IAAK,CAAA,KAAA;AAAA;AAId,EAAA,IAAI,EAAE,KAAO,EAAA,YAAA,EAAc,iBAAmB,EAAA,iBAAA,EAAmB,YAAe,GAAA,IAAA;AAEhF,EAAA,IAAI,CAAC,UAAY,EAAA;AACf,IAAA,UAAA,GAAa,YAAa,CAAA,SAAA;AAAA;AAG5B,EAAM,MAAA,QAAA,GAAW,WAAY,CAAA,KAAA,EAAO,YAAY,CAAA;AAEhD,EAAA,IAAI,YAAY,IAAM,EAAA;AACpB,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,QAAA,CAAS,KAAQ,GAAA;AAAA,IACf,GAAG,QAAS,CAAA,KAAA;AAAA,IACZ,oBAAsB,EAAA;AAAA,GACxB;AAEA,EAAA,MAAM,UAAa,GAAA,KAAA,CAAM,MAAO,CAAA,GAAA,CAAI,CAAC,KAAO,KAAA;AAlD9C,IAAA,IAAA,EAAA;AAkDiD,IAAA,OAAA,CAAA,CAAA,EAAA,GAAA,KAAA,CAAM,OAAO,MAAb,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAqB,WAAe,KAAA,QAAA,CAAS,OAAO,QAAY,IAAA,IAAA;AAAA,GAAI,CAAA;AAEnH,EAAM,MAAA,gBAAA,GAAmB,IAAI,GAAA,CAAmB,UAAU,CAAA;AAE1D,EAAA,gBAAA,CAAiB,OAAO,IAAI,CAAA;AAE5B,EAAI,IAAA,gBAAA,CAAiB,SAAS,CAAG,EAAA;AAC/B,IAAO,OAAA,KAAA;AAAA;AAGT,EAAI,IAAA,gBAAA,CAAiB,SAAS,CAAG,EAAA;AAC/B,IAAA,MAAM,SAAY,GAAA,gBAAA,CAAiB,MAAO,EAAA,CAAE,MAAO,CAAA,KAAA;AAEnD,IAAI,IAAA,CAAC,SAAa,IAAA,SAAA,IAAa,CAAG,EAAA;AAChC,MAAO,OAAA,KAAA;AAAA;AAGT,IAAA,MAAM,YAAY,QAAS,CAAA,MAAA;AAE3B,IAAA,MAAM,cAAc,KAAM,CAAA,MAAA,CAAO,IAAI,CAAC,KAAA,KAAU,MAAM,MAAM,CAAA;AAE5D,IAAA,MAAM,iBAAoB,GAAA,mBAAA;AAAA,MACxB,SAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,iBAAA;AAAA,MACA,iBAAA;AAAA,MACA,UAEF,CAAA;AAEA,IAAA,IAAI,sBAAsB,WAAa,EAAA;AACrC,MAAO,OAAA,KAAA;AAAA;AAGT,IAAO,OAAA;AAAA,MACL,GAAG,KAAA;AAAA,MACH,MAAA,EAAQ,iBAAkB,CAAA,CAAC,CAAE,CAAA,MAAA;AAAA,MAC7B,QAAQ,KAAM,CAAA,MAAA,CAAO,GAAI,CAAA,CAAC,OAAO,CAAO,MAAA;AAAA,QACtC,GAAG,KAAA;AAAA,QACH,MAAA,EAAQ,kBAAkB,CAAC;AAAA,OAC3B,CAAA;AAAA,KACJ;AAAA;AAMF,EAAO,OAAA,KAAA;AACT;AAEA,SAAS,mBAAA,CACP,WACA,WACA,EAAA,SAAA,EACA,oBAAmC,IAEnC,EAAA,iBAAA,GAAmC,IACnC,EAAA,cAAA,EAEA,QACA,EAAA;AACA,EAAA,MAAM,MAAM,SAAU,CAAA,MAAA;AACtB,EAAA,MAAM,eAAyB,EAAC;AAGhC,EAAA,IAAI,iBAAqB,IAAA,IAAA,IAAQ,iBAAoB,GAAA,SAAA,CAAU,CAAC,CAAG,EAAA;AACjE,IAAA,IAAI,eAAe,IAAK,CAAA,IAAA,CAAA,CAAM,UAAU,CAAC,CAAA,GAAI,qBAAqB,SAAS,CAAA;AAE3E,IAAA,IAAI,QAAW,GAAA,SAAA,CAAU,CAAC,CAAA,GAAI,YAAe,GAAA,SAAA;AAE7C,IAAO,OAAA,QAAA,GAAW,SAAU,CAAA,CAAC,CAAG,EAAA;AAE9B,MAAA,YAAA,CAAa,KAAK,cAAe,CAAA,QAAA,GAAW,SAAW,EAAA,QAAA,EAAU,SAAS,CAAC,CAAA;AAC3E,MAAY,QAAA,IAAA,SAAA;AAAA;AACd;AAIF,EAAa,YAAA,CAAA,IAAA,CAAK,SAAU,CAAA,CAAC,CAAC,CAAA;AAE9B,EAAI,IAAA,SAAA,GAAoB,UAAU,CAAC,CAAA;AAGnC,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,GAAA,EAAK,CAAK,EAAA,EAAA;AAC5B,IAAM,MAAA,QAAA,GAAW,UAAU,CAAC,CAAA;AAE5B,IAAO,OAAA,QAAA,GAAW,YAAY,SAAW,EAAA;AACvC,MAAA,YAAA,CAAa,IAAK,CAAA,cAAA,CAAe,SAAW,EAAA,QAAA,EAAU,SAAS,CAAC,CAAA;AAEhE,MAAa,SAAA,IAAA,SAAA;AAIb;AAGF,IAAA,YAAA,CAAa,KAAK,QAAQ,CAAA;AAE1B,IAAY,SAAA,GAAA,QAAA;AAAA;AAId,EAAI,IAAA,iBAAA,IAAqB,IAAQ,IAAA,iBAAA,GAAoB,SAAW,EAAA;AAC9D,IAAO,OAAA,SAAA,GAAY,YAAY,iBAAmB,EAAA;AAChD,MAAA,YAAA,CAAa,IAAK,CAAA,cAAA,CAAe,SAAW,EAAA,iBAAA,EAAmB,SAAS,CAAC,CAAA;AACzE,MAAa,SAAA,IAAA,SAAA;AAAA;AACf;AAGF,EAAA,MAAM,YAAY,YAAa,CAAA,MAAA;AAE/B,EAAA,IAAI,cAAc,GAAK,EAAA;AACrB,IAAO,OAAA,WAAA;AAAA;AAGT,EAAA,MAAM,oBAA6B,EAAC;AAEpC,EAAA,KAAA,IAAS,eAAe,WAAa,EAAA;AACnC,IAAI,IAAA,YAAA;AAEJ,IAAA,IAAI,gBAAgB,SAAW,EAAA;AAC7B,MAAA,YAAA,GAAe,MAAM,SAAS,CAAA;AAE9B,MAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,CAAG,EAAA,CAAA,GAAI,WAAW,CAAK,EAAA,EAAA;AACzC,QAAa,YAAA,CAAA,CAAC,CAAI,GAAA,SAAA,CAAU,CAAC,CAAA,KAAM,aAAa,CAAC,CAAA,GAAI,WAAY,CAAA,CAAA,EAAG,CAAI,GAAA,IAAA;AAAA;AAC1E,KACK,MAAA;AACL,MAAe,YAAA,GAAA,YAAA;AAAA;AAGjB,IAAA,iBAAA,CAAkB,KAAK,YAAY,CAAA;AAAA;AAGrC,EAAO,OAAA,iBAAA;AACT;;AC7Ka,MAAA,sBAAA,GAAyB,IAAI,QAAqC;;ACV/E,MAAM,cAAkC,GAAA;AAAA,EACtC,IAAM,EAAA,WAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA,SAAA;AAAA,MACR,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,IAAM,EAAA;AAAA,MACJ,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA,SAAA;AAAA,MACV,IAAM,EAAA,SAAA;AAAA,MACN,WAAa,EAAA;AAAA,KACf;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA,SAAW,EAAA;AAAA,MACT,IAAM,EAAA,SAAA;AAAA,MACN,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,UAAY,EAAA;AAAA,MACV,MAAQ,EAAA,SAAA;AAAA,MACR,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,KAAO,EAAA,SAAA;AAAA,MACP,QAAU,EAAA,SAAA;AAAA,MACV,cAAgB,EAAA,SAAA;AAAA,MAChB,KAAO,EAAA,SAAA;AAAA,MACP,YAAc,EAAA,GAAA;AAAA,MACd,YAAc,EAAA,SAAA;AAAA,MACd,kBAAoB,EAAA,SAAA;AAAA,MACpB,eAAiB,EAAA;AAAA,KACnB;AAAA,IACA,SAAW,EAAA;AAAA,MACT,eAAiB,EAAA,mDAAA;AAAA,MACjB,aAAe,EAAA;AAAA,KACjB;AAAA,IACA,iBAAmB,EAAA,CAAA;AAAA,IACnB,WAAa,EAAA,IAAA;AAAA,IACb,WAAa,EAAA;AAAA,GACf;AAAA,EACA,KAAO,EAAA;AAAA,IACL,YAAc,EAAA;AAAA;AAElB,CAAA;;AC3CA,MAAM,UAA8B,GAAA;AAAA,EAClC,IAAM,EAAA,OAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,UAAY,EAAA;AAAA,MACV,MAAQ,EAAA,SAAA;AAAA,MACR,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,IAAM,EAAA;AAAA,MACJ,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA,SAAA;AAAA,MACV,IAAM,EAAA,SAAA;AAAA,MACN,WAAa,EAAA;AAAA,KACf;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,WAAA;AAAA,MACN,MAAQ,EAAA,WAAA;AAAA,MACR,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,OAAS,EAAA;AAAA,MACP,MAAQ,EAAA,WAAA;AAAA,MACR,IAAM,EAAA,SAAA;AAAA,MACN,YAAc,EAAA,SAAA;AAAA,MACd,KAAO,EAAA;AAAA,KACT;AAAA,IACA,SAAW,EAAA;AAAA,MACT,MAAQ,EAAA,WAAA;AAAA,MACR,IAAM,EAAA,SAAA;AAAA,MACN,YAAc,EAAA,SAAA;AAAA,MACd,KAAO,EAAA;AAAA,KACT;AAAA,IACA,IAAM,EAAA;AAAA,MACJ,KAAO,EAAA;AAAA,KACT;AAAA,IACA,OAAS,EAAA;AAAA,MACP,KAAO,EAAA;AAAA,KACT;AAAA,IACA,OAAS,EAAA;AAAA,MACP,KAAO,EAAA;AAAA,KACT;AAAA,IACA,KAAO,EAAA;AAAA,MACL,KAAO,EAAA;AAAA,KACT;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,KAAO,EAAA,SAAA;AAAA,MACP,KAAO,EAAA,SAAA;AAAA,MACP,QAAU,EAAA;AAAA;AACZ,GACF;AAAA,EACA,KAAO,EAAA;AAAA,IACL,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,OAAS,EAAA;AAAA,IACP,QAAU,EAAA;AAAA;AAEd,CAAA;;AClEA,MAAM,gBAAoC,GAAA;AAAA,EACxC,IAAM,EAAA,cAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,OAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,qBAAA;AAAA,MACN,MAAQ,EAAA,qBAAA;AAAA,MACR,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,IAAM,EAAA;AAAA,MACJ,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA,oBAAA;AAAA,MACV,IAAM,EAAA,SAAA;AAAA,MACN,WAAa,EAAA;AAAA,KACf;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA,SAAA;AAAA,MACN,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA,SAAA;AAAA,MACR,IAAM,EAAA,SAAA;AAAA,MACN,KAAO,EAAA,SAAA;AAAA,MACP,WAAa,EAAA,WAAA;AAAA,MACb,YAAc,EAAA,SAAA;AAAA,MACd,iBAAmB,EAAA;AAAA,KACrB;AAAA,IACA,SAAW,EAAA;AAAA,MACT,IAAM,EAAA,SAAA;AAAA,MACN,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA,SAAA;AAAA,MACR,IAAM,EAAA,WAAA;AAAA,MACN,KAAO,EAAA,SAAA;AAAA,MACP,WAAa,EAAA,WAAA;AAAA,MACb,YAAc,EAAA,SAAA;AAAA,MACd,iBAAmB,EAAA;AAAA,KACrB;AAAA,IACA,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA;AAAA,KACR;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA,UAAY,EAAA;AAAA,MACV,MAAQ,EAAA,SAAA;AAAA,MACR,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,KAAO,EAAA,2BAAA;AAAA,MACP,QAAU,EAAA,2BAAA;AAAA,MACV,cAAgB,EAAA,SAAA;AAAA,MAChB,KAAO,EAAA,2BAAA;AAAA,MACP,YAAc,EAAA,IAAA;AAAA,MACd,YAAc,EAAA,0BAAA;AAAA,MACd,kBAAoB,EAAA,2BAAA;AAAA,MACpB,eAAiB,EAAA;AAAA,KACnB;AAAA,IAEA,SAAW,EAAA;AAAA,MACT,eAAiB,EAAA,8EAAA;AAAA,MACjB,aAAe,EAAA;AAAA,KACjB;AAAA,IACA,iBAAmB,EAAA,CAAA;AAAA,IACnB,WAAa,EAAA,IAAA;AAAA,IACb,WAAa,EAAA;AAAA,GACf;AAAA,EACA,KAAO,EAAA;AAAA,IACL,YAAc,EAAA;AAAA;AAElB,CAAA;;ACzEA,MAAM,gBAAoC,GAAA;AAAA,EACxC,IAAM,EAAA,cAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,2BAAA;AAAA,MACN,MAAQ,EAAA,2BAAA;AAAA,MACR,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,IAAM,EAAA;AAAA,MACJ,OAAS,EAAA,oBAAA;AAAA,MACT,SAAW,EAAA,2BAAA;AAAA,MACX,QAAU,EAAA,0BAAA;AAAA,MACV,IAAM,EAAA,SAAA;AAAA,MACN,WAAa,EAAA;AAAA,KACf;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA,SAAA;AAAA,MACN,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA,SAAA;AAAA,MACR,IAAM,EAAA,SAAA;AAAA,MACN,KAAO,EAAA,mBAAA;AAAA,MACP,WAAa,EAAA,WAAA;AAAA,MACb,YAAc,EAAA,SAAA;AAAA,MACd,iBAAmB,EAAA;AAAA,KACrB;AAAA,IACA,SAAW,EAAA;AAAA,MACT,IAAM,EAAA,2BAAA;AAAA,MACN,KAAO,EAAA,2BAAA;AAAA,MACP,WAAa,EAAA,2BAAA;AAAA,MACb,IAAM,EAAA,oBAAA;AAAA,MACN,YAAc,EAAA,oBAAA;AAAA,MACd,MAAQ,EAAA,2BAAA;AAAA,MACR,IAAM,EAAA,WAAA;AAAA,MACN,iBAAmB,EAAA;AAAA,KACrB;AAAA,IACA,UAAY,EAAA;AAAA,MACV,MAAQ,EAAA,SAAA;AAAA,MACR,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,KAAO,EAAA,2BAAA;AAAA,MACP,QAAU,EAAA,2BAAA;AAAA,MACV,cAAgB,EAAA,SAAA;AAAA,MAChB,KAAO,EAAA,2BAAA;AAAA,MACP,YAAc,EAAA,IAAA;AAAA,MACd,YAAc,EAAA,0BAAA;AAAA,MACd,kBAAoB,EAAA,2BAAA;AAAA,MACpB,eAAiB,EAAA;AAAA,KACnB;AAAA,IACA,SAAW,EAAA;AAAA,MACT,eAAiB,EAAA,mDAAA;AAAA,MACjB,aAAe,EAAA;AAAA,KACjB;AAAA,IACA,iBAAmB,EAAA,CAAA;AAAA,IACnB,WAAa,EAAA,IAAA;AAAA,IACb,WAAa,EAAA;AAAA,GACf;AAAA,EACA,KAAO,EAAA;AAAA,IACL,YAAc,EAAA;AAAA;AAElB,CAAA;;AC/DA,MAAM,SAA6B,GAAA;AAAA,EACjC,IAAM,EAAA,MAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,wBAAA;AAAA,MACN,MAAQ,EAAA,yBAAA;AAAA,MACR,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,IAAM,EAAA;AAAA,MACJ,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA,0BAAA;AAAA,MACV,IAAM,EAAA,SAAA;AAAA,MACN,WAAa,EAAA;AAAA,KACf;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA,SAAW,EAAA;AAAA,MACT,IAAM,EAAA,SAAA;AAAA,MACN,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,UAAY,EAAA;AAAA,MACV,MAAQ,EAAA,SAAA;AAAA,MACR,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,KAAO,EAAA,yBAAA;AAAA,MACP,QAAU,EAAA,yBAAA;AAAA,MACV,cAAgB,EAAA,SAAA;AAAA,MAChB,KAAO,EAAA,yBAAA;AAAA,MACP,YAAc,EAAA,IAAA;AAAA,MACd,YAAc,EAAA,0BAAA;AAAA,MACd,kBAAoB,EAAA,yBAAA;AAAA,MACpB,eAAiB,EAAA;AAAA,KACnB;AAAA,IACA,SAAW,EAAA;AAAA,MACT,eAAiB,EAAA,mDAAA;AAAA,MACjB,aAAe,EAAA;AAAA,KACjB;AAAA,IACA,iBAAmB,EAAA,CAAA;AAAA,IACnB,WAAa,EAAA,IAAA;AAAA,IACb,WAAa,EAAA;AAAA,GACf;AAAA,EACA,KAAO,EAAA;AAAA,IACL,YAAc,EAAA;AAAA;AAElB,CAAA;;ACnDA,MAAM,WAA+B,GAAA;AAAA,EACnC,IAAM,EAAA,QAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,UAAY,EAAA;AAAA,MACV,MAAQ,EAAA,SAAA;AAAA,MACR,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,IAAM,EAAA;AAAA,MACJ,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA,SAAA;AAAA,MACV,IAAM,EAAA,SAAA;AAAA,MACN,WAAa,EAAA;AAAA,KACf;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,WAAA;AAAA,MACN,MAAQ,EAAA,WAAA;AAAA,MACR,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA,SAAW,EAAA;AAAA,MACT,IAAM,EAAA;AAAA,KACR;AAAA,IACA,SAAW,EAAA;AAAA,MACT,aAAe,EAAA,iDAAA;AAAA,MACf,eAAiB,EAAA;AAAA;AACnB,GACF;AAAA,EACA,KAAO,EAAA;AAAA,IACL,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,UAAY,EAAA;AAAA,IACV,UAAY,EAAA;AAAA;AAEhB,CAAA;;ACvCA,MAAM,iBAAqC,GAAA;AAAA,EACzC,IAAM,EAAA,eAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA,SAAA;AAAA,MACR,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,IAAM,EAAA;AAAA,MACJ,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA,SAAA;AAAA,MACV,IAAM,EAAA,SAAA;AAAA,MACN,WAAa,EAAA;AAAA,KACf;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA,SAAA;AAAA,MACN,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA,SAAA;AAAA,MACR,IAAM,EAAA,SAAA;AAAA,MACN,KAAO,EAAA,SAAA;AAAA,MACP,WAAa,EAAA,WAAA;AAAA,MACb,YAAc,EAAA,SAAA;AAAA,MACd,iBAAmB,EAAA;AAAA,KACrB;AAAA,IACA,SAAW,EAAA;AAAA,MACT,IAAM,EAAA,SAAA;AAAA,MACN,KAAO,EAAA,SAAA;AAAA,MACP,WAAa,EAAA,2BAAA;AAAA,MACb,IAAM,EAAA,SAAA;AAAA,MACN,YAAc,EAAA,SAAA;AAAA,MACd,MAAQ,EAAA,2BAAA;AAAA,MACR,IAAM,EAAA,WAAA;AAAA,MACN,iBAAmB,EAAA;AAAA,KACrB;AAAA,IACA,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA,SAAA;AAAA,MACN,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,KAAO,EAAA;AAAA,MACL,IAAM,EAAA;AAAA,KACR;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA,UAAY,EAAA;AAAA,MACV,MAAQ,EAAA,SAAA;AAAA,MACR,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,KAAO,EAAA,SAAA;AAAA,MACP,QAAU,EAAA,SAAA;AAAA,MACV,cAAgB,EAAA,SAAA;AAAA,MAChB,KAAO,EAAA,SAAA;AAAA,MACP,YAAc,EAAA,IAAA;AAAA,MACd,YAAc,EAAA,SAAA;AAAA,MACd,kBAAoB,EAAA,uBAAA;AAAA,MACpB,eAAiB,EAAA;AAAA,KACnB;AAAA,IACA,SAAW,EAAA;AAAA,MACT,eAAiB,EAAA,mDAAA;AAAA,MACjB,aAAe,EAAA;AAAA,KACjB;AAAA,IACA,iBAAmB,EAAA,CAAA;AAAA,IACnB,WAAa,EAAA,IAAA;AAAA,IACb,WAAa,EAAA;AAAA,GACf;AAAA,EACA,KAAO,EAAA;AAAA,IACL,YAAc,EAAA;AAAA;AAElB,CAAA;;AC7EA,MAAM,cAAkC,GAAA;AAAA,EACtC,IAAM,EAAA,WAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,0BAAA;AAAA,MACN,MAAQ,EAAA,0BAAA;AAAA,MACR,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,IAAM,EAAA;AAAA,MACJ,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,2BAAA;AAAA,MACX,QAAU,EAAA,0BAAA;AAAA,MACV,IAAM,EAAA,SAAA;AAAA,MACN,WAAa,EAAA;AAAA,KACf;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA,SAAW,EAAA;AAAA,MACT,IAAM,EAAA,SAAA;AAAA,MACN,IAAM,EAAA,2BAAA;AAAA,MACN,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,UAAY,EAAA;AAAA,MACV,MAAQ,EAAA,SAAA;AAAA,MACR,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,KAAO,EAAA,0BAAA;AAAA,MACP,QAAU,EAAA,0BAAA;AAAA,MACV,cAAgB,EAAA,SAAA;AAAA,MAChB,KAAO,EAAA,0BAAA;AAAA,MACP,YAAc,EAAA,IAAA;AAAA,MACd,YAAc,EAAA,0BAAA;AAAA,MACd,kBAAoB,EAAA,0BAAA;AAAA,MACpB,eAAiB,EAAA;AAAA,KACnB;AAAA,IACA,SAAW,EAAA;AAAA,MACT,eAAiB,EAAA,mDAAA;AAAA,MACjB,aAAe,EAAA;AAAA,KACjB;AAAA,IACA,iBAAmB,EAAA,CAAA;AAAA,IACnB,WAAa,EAAA,IAAA;AAAA,IACb,WAAa,EAAA;AAAA,GACf;AAAA,EACA,KAAO,EAAA;AAAA,IACL,YAAc,EAAA;AAAA;AAElB,CAAA;;ACnDA,MAAM,SAA6B,GAAA;AAAA,EACjC,IAAM,EAAA,MAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,yBAAA;AAAA,MACN,MAAQ,EAAA,yBAAA;AAAA,MACR,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,IAAM,EAAA;AAAA,MACJ,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,2BAAA;AAAA,MACX,QAAU,EAAA,0BAAA;AAAA,MACV,IAAM,EAAA,SAAA;AAAA,MACN,WAAa,EAAA;AAAA,KACf;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA,SAAW,EAAA;AAAA,MACT,IAAM,EAAA,SAAA;AAAA,MACN,IAAM,EAAA,2BAAA;AAAA,MACN,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,UAAY,EAAA;AAAA,MACV,MAAQ,EAAA,SAAA;AAAA,MACR,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,KAAO,EAAA,yBAAA;AAAA,MACP,QAAU,EAAA,yBAAA;AAAA,MACV,cAAgB,EAAA,SAAA;AAAA,MAChB,KAAO,EAAA,yBAAA;AAAA,MACP,YAAc,EAAA,IAAA;AAAA,MACd,YAAc,EAAA,0BAAA;AAAA,MACd,kBAAoB,EAAA,yBAAA;AAAA,MACpB,eAAiB,EAAA;AAAA,KACnB;AAAA,IACA,SAAW,EAAA;AAAA,MACT,eAAiB,EAAA,mDAAA;AAAA,MACjB,aAAe,EAAA;AAAA,KACjB;AAAA,IACA,iBAAmB,EAAA,CAAA;AAAA,IACnB,WAAa,EAAA,IAAA;AAAA,IACb,WAAa,EAAA;AAAA,GACf;AAAA,EACA,KAAO,EAAA;AAAA,IACL,YAAc,EAAA;AAAA;AAElB,CAAA;;ACnDA,MAAM,cAAkC,GAAA;AAAA,EACtC,IAAM,EAAA,WAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA,SAAA;AAAA,MACR,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,IAAM,EAAA;AAAA,MACJ,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA,SAAA;AAAA,MACV,IAAM,EAAA,SAAA;AAAA,MACN,WAAa,EAAA;AAAA,KACf;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA,SAAW,EAAA;AAAA,MACT,IAAM,EAAA,SAAA;AAAA,MACN,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,UAAY,EAAA;AAAA,MACV,MAAQ,EAAA,SAAA;AAAA,MACR,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,KAAO,EAAA,SAAA;AAAA,MACP,QAAU,EAAA,SAAA;AAAA,MACV,cAAgB,EAAA,SAAA;AAAA,MAChB,KAAO,EAAA,SAAA;AAAA,MACP,YAAc,EAAA,GAAA;AAAA,MACd,YAAc,EAAA,SAAA;AAAA,MACd,kBAAoB,EAAA,SAAA;AAAA,MACpB,eAAiB,EAAA;AAAA,KACnB;AAAA,IACA,SAAW,EAAA;AAAA,MACT,eAAiB,EAAA,mDAAA;AAAA,MACjB,aAAe,EAAA;AAAA,KACjB;AAAA,IACA,iBAAmB,EAAA,CAAA;AAAA,IACnB,WAAa,EAAA,IAAA;AAAA,IACb,WAAa,EAAA;AAAA,GACf;AAAA,EACA,KAAO,EAAA;AAAA,IACL,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,UAAY,EAAA;AAAA,IACV,UAAY,EAAA,qCAAA;AAAA,IACZ,mBAAqB,EAAA;AAAA;AAEzB,CAAA;;ACvDA,MAAM,QAA4B,GAAA;AAAA,EAChC,IAAM,EAAA,KAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,OAAA;AAAA,IACN,IAAM,EAAA;AAAA,MACJ,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA,SAAA;AAAA,MACV,IAAM,EAAA,SAAA;AAAA,MACN,WAAa,EAAA;AAAA,KACf;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA,SAAA;AAAA,MACR,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA,SAAW,EAAA;AAAA,MACT,IAAM,EAAA,SAAA;AAAA,MACN,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,UAAY,EAAA;AAAA,MACV,MAAQ,EAAA,SAAA;AAAA,MACR,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,KAAO,EAAA,SAAA;AAAA,MACP,QAAU,EAAA,SAAA;AAAA,MACV,cAAgB,EAAA,SAAA;AAAA,MAChB,YAAc,EAAA,GAAA;AAAA,MACd,KAAO,EAAA,SAAA;AAAA,MACP,kBAAoB,EAAA,SAAA;AAAA,MACpB,YAAc,EAAA,SAAA;AAAA,MACd,eAAiB,EAAA;AAAA,KACnB;AAAA,IACA,SAAW,EAAA;AAAA,MACT,eAAiB,EAAA,mDAAA;AAAA,MACjB,aAAe,EAAA;AAAA,KACjB;AAAA,IACA,iBAAmB,EAAA,CAAA;AAAA,IACnB,WAAa,EAAA,IAAA;AAAA,IACb,WAAa,EAAA;AAAA,GACf;AAAA,EACA,KAAO,EAAA;AAAA,IACL,YAAc,EAAA;AAAA;AAElB,CAAA;;AC9CA,MAAM,SAAY,GAAA,CAAA,aAAA,CAAA;AAClB,MAAM,aAAgB,GAAA,CAAA,aAAA,CAAA;AAItB,MAAM,SAAY,GAAA,SAAA;AAClB,MAAM,SAAY,GAAA,SAAA;AAClB,MAAM,YAAA,GAAe,QAAQ,SAAS,CAAA,OAAA,CAAA;AAEtC,MAAM,UAA8B,GAAA;AAAA,EAClC,IAAM,EAAA,OAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACN,IAAA,EAAM,QAAQ,SAAS,CAAA,OAAA,CAAA;AAAA,MACvB,MAAA,EAAQ,QAAQ,SAAS,CAAA,OAAA,CAAA;AAAA,MACzB,MAAA,EAAQ,QAAQ,SAAS,CAAA,OAAA;AAAA,KAC3B;AAAA,IAEA,IAAM,EAAA;AAAA,MACJ,OAAA,EAAS,OAAO,SAAS,CAAA,CAAA,CAAA;AAAA,MACzB,SAAA,EAAW,QAAQ,SAAS,CAAA,OAAA,CAAA;AAAA,MAC5B,QAAU,EAAA,YAAA;AAAA,MACV,IAAM,EAAA,SAAA;AAAA,MACN,WAAa,EAAA;AAAA,KACf;AAAA,IAEA,OAAS,EAAA;AAAA,MACP,IAAM,EAAA,SAAA;AAAA,MACN,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA,SAAA;AAAA,MACR,IAAM,EAAA;AAAA,KACR;AAAA,IAEA,SAAW,EAAA;AAAA,MACT,IAAA,EAAM,QAAQ,aAAa,CAAA,OAAA,CAAA;AAAA,MAC3B,KAAA,EAAO,QAAQ,aAAa,CAAA,OAAA,CAAA;AAAA,MAC5B,WAAA,EAAa,QAAQ,aAAa,CAAA,OAAA,CAAA;AAAA,MAClC,IAAA,EAAM,QAAQ,aAAa,CAAA,CAAA,CAAA;AAAA,MAC3B,YAAA,EAAc,OAAO,aAAa,CAAA,CAAA,CAAA;AAAA,MAClC,MAAA,EAAQ,QAAQ,aAAa,CAAA,OAAA;AAAA,KAC/B;AAAA,IAEA,UAAY,EAAA;AAAA,MACV,MAAQ,EAAA,MAAA;AAAA,MACR,OAAS,EAAA,SAAA;AAAA,MACT,SAAW,EAAA,SAAA;AAAA,MACX,QAAU,EAAA;AAAA,KACZ;AAAA,IAEA,MAAQ,EAAA;AAAA,MACN,KAAA,EAAO,QAAQ,aAAa,CAAA,OAAA,CAAA;AAAA,MAC5B,QAAA,EAAU,QAAQ,aAAa,CAAA,OAAA,CAAA;AAAA,MAC/B,cAAgB,EAAA,SAAA;AAAA,MAChB,KAAA,EAAO,QAAQ,aAAa,CAAA,OAAA,CAAA;AAAA,MAC5B,YAAc,EAAA,IAAA;AAAA,MACd,YAAA;AAAA,MACA,kBAAA,EAAoB,QAAQ,SAAS,CAAA,OAAA,CAAA;AAAA,MACrC,eAAiB,EAAA;AAAA,KACnB;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,iBAAmB,EAAA,CAAA;AAAA,IACnB,WAAa,EAAA,IAAA;AAAA,IACb,WAAa,EAAA;AAAA,GACf;AAAA,EACA,KAAO,EAAA;AAAA,IACL,YAAc,EAAA;AAAA;AAElB,CAAA;;;;;;;;;;;;;;;;;;AChFA,IAAA,EAAA;AAeO,SAAS,aAAa,EAA2B,EAAA;AAfxD,EAAA9F,IAAAA,GAAAA;AAgBE,EAAM,MAAA,KAAA,GAAA,CAAQA,GAAA,GAAA,aAAA,CAAc,WAAY,CAAA,EAAE,MAA5B,IAAAA,GAAAA,GAAAA,GAAiC,aAAc,CAAA,GAAA,CAAI,MAAM,CAAA;AACvE,EAAA,OAAO,MAAM,KAAM,EAAA;AACrB;AAMO,SAAS,iBAAiB,aAAyB,EAAA;AACxD,EAAA,MAAM,SAAS,aAAc,CAAA,IAAA,EAAO,CAAA,MAAA,CAAO,CAAC,IAAS,KAAA;AACnD,IAAA,IAAI,KAAK,OAAS,EAAA;AAChB,MAAO,OAAA,aAAA,CAAc,QAAS,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA;AAEvC,IAAO,OAAA,IAAA;AAAA,GACR,CAAA;AAED,EAAA,MAAM,YAAe,GAAA,MAAA,CAAO,IAAK,CAAA,CAAC,GAAG,CAAM,KAAA;AACzC,IAAA,IAAI,CAAE,CAAA,OAAA,IAAW,CAAC,CAAA,CAAE,OAAS,EAAA;AAC3B,MAAO,OAAA,CAAA;AAAA,KACE,MAAA,IAAA,CAAC,CAAE,CAAA,OAAA,IAAW,EAAE,OAAS,EAAA;AAClC,MAAO,OAAA,CAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAA,OAAO,CAAE,CAAA,IAAA,CAAK,aAAc,CAAA,CAAA,CAAE,IAAI,CAAA;AAAA;AACpC,GACD,CAAA;AACD,EAAO,OAAA,YAAA;AACT;AAKA,MAAM,aAAA,GAAgB,IAAI,QAAA,CAA4B,MAAM;AAC1D,EAAO,OAAA;AAAA,IACL,EAAE,EAAI,EAAA,QAAA,EAAU,IAAM,EAAA,mBAAA,EAAqB,OAAO,wBAAyB,EAAA;AAAA,IAC3E,EAAE,EAAA,EAAI,MAAQ,EAAA,IAAA,EAAM,QAAQ,KAAO,EAAA,MAAM,WAAY,CAAA,EAAE,QAAQ,EAAE,IAAA,EAAM,MAAO,EAAA,EAAG,CAAE,EAAA;AAAA,IACnF,EAAE,EAAA,EAAI,OAAS,EAAA,IAAA,EAAM,SAAS,KAAO,EAAA,MAAM,WAAY,CAAA,EAAE,QAAQ,EAAE,IAAA,EAAM,OAAQ,EAAA,EAAG,CAAE;AAAA,GACxF;AACF,CAAC,CAAA;AAED,KAAA,MAAW,CAAC,EAAI,EAAA,KAAK,KAAK,MAAO,CAAA,OAAA,CAAQ,WAAW,CAAG,EAAA;AACrD,EAAA,aAAA,CAAc,QAAS,CAAA;AAAA,IACrB,EAAA;AAAA,IACA,IAAA,EAAA,CAAM,EAAM,GAAA,KAAA,CAAA,IAAA,KAAN,IAAc,GAAA,EAAA,GAAA,EAAA;AAAA,IACpB,KAAA,EAAO,MAAM,WAAA,CAAY,KAAK,CAAA;AAAA,IAC9B,OAAS,EAAA;AAAA,GACV,CAAA;AACH;AAEA,SAAS,wBAA2B,GAAA;AAClC,EAAM,MAAA,WAAA,GAAc,MAAO,CAAA,UAAA,CAAW,8BAA8B,CAAA;AACpE,EAAM,MAAA,EAAA,GAAK,WAAY,CAAA,OAAA,GAAU,MAAS,GAAA,OAAA;AAC1C,EAAA,OAAO,aAAa,EAAE,CAAA;AACxB;;AC/Da,MAAA,YAAA,GAAe+F,mBAAc,CAAA,WAAA,EAAa;AAEvD,YAAA,CAAa,WAAc,GAAA,cAAA;;ACA3B,MAAM,KAAkE,GAAA;AAAA,EACtE,CAAA,EAAG,EAAE,OAAA,EAAS,QAAS,EAAA;AAAA,EACvB,CAAA,EAAG,EAAE,OAAA,EAAS,QAAS,EAAA;AAAA,EACvB,CAAA,EAAG,EAAE,OAAA,EAAS,MAAO,EAAA;AAAA,EACrB,CAAA,EAAG,EAAE,OAAA,EAAS,KAAM,EAAA;AAAA,EACpB,CAAA,EAAG,EAAE,OAAA,EAAS,MAAO,EAAA;AAAA,EACrB,CAAA,EAAG,EAAE,OAAA,EAAS,OAAQ,EAAA;AAAA,EACtB,CAAA,EAAG,EAAE,OAAA,EAAS,MAAO;AACvB,CAAA;AAEA,MAAM,kBAAmC,GAAA;AAAA,EACvC,EAAE,IAAM,EAAA,OAAA,EAAS,EAAI,EAAA,OAAA,EAAS,SAAS,OAAQ,EAAA;AAAA,EAC/C,EAAE,IAAM,EAAA,OAAA,EAAS,EAAI,EAAA,KAAA,EAAO,SAAS,cAAe,EAAA;AAAA,EACpD,EAAE,IAAM,EAAA,OAAA,EAAS,EAAI,EAAA,OAAA,EAAS,SAAS,WAAY,EAAA;AAAA,EACnD,EAAE,IAAM,EAAA,OAAA,EAAS,EAAI,EAAA,KAAA,EAAO,SAAS,kBAAmB,EAAA;AAAA,EACxD,EAAE,IAAM,EAAA,OAAA,EAAS,EAAI,EAAA,OAAA,EAAS,SAAS,YAAa,EAAA;AAAA,EACpD,EAAE,IAAM,EAAA,OAAA,EAAS,EAAI,EAAA,KAAA,EAAO,SAAS,mBAAoB,EAAA;AAAA,EACzD,EAAE,IAAM,EAAA,OAAA,EAAS,EAAI,EAAA,OAAA,EAAS,SAAS,WAAY,EAAA;AAAA,EACnD,EAAE,IAAM,EAAA,OAAA,EAAS,EAAI,EAAA,KAAA,EAAO,SAAS,kBAAmB,EAAA;AAAA,EAExD,EAAE,IAAM,EAAA,UAAA,EAAY,EAAI,EAAA,UAAA,EAAY,SAAS,WAAY,EAAA;AAAA,EACzD;AAAA,IACE,IAAM,EAAA,UAAA;AAAA,IACN,EAAI,EAAA,UAAA;AAAA,IACJ,OAAS,EAAA;AAAA,GACX;AAAA,EACA;AAAA,IACE,IAAM,EAAA,UAAA;AAAA,IACN,EAAI,EAAA,UAAA;AAAA,IACJ,OAAS,EAAA;AAAA,GACX;AAAA,EACA,EAAE,IAAM,EAAA,UAAA,EAAY,EAAI,EAAA,UAAA,EAAY,SAAS,eAAgB,EAAA;AAAA,EAC7D,EAAE,IAAM,EAAA,UAAA,EAAY,EAAI,EAAA,UAAA,EAAY,SAAS,gBAAiB,EAAA;AAAA,EAC9D,EAAE,IAAM,EAAA,WAAA,EAAa,EAAI,EAAA,WAAA,EAAa,SAAS,yBAA0B,EAAA;AAAA,EACzE,EAAE,IAAM,EAAA,UAAA,EAAY,EAAI,EAAA,UAAA,EAAY,SAAS,eAAgB,EAAA;AAAA,EAC7D,EAAE,IAAM,EAAA,WAAA,EAAa,EAAI,EAAA,WAAA,EAAa,SAAS,sBAAuB,EAAA;AAAA,EAEtE,EAAE,IAAM,EAAA,QAAA,EAAU,EAAI,EAAA,KAAA,EAAO,SAAS,gBAAiB,EAAA;AAAA,EACvD,EAAE,IAAM,EAAA,SAAA,EAAW,EAAI,EAAA,KAAA,EAAO,SAAS,iBAAkB,EAAA;AAAA,EACzD,EAAE,IAAM,EAAA,SAAA,EAAW,EAAI,EAAA,KAAA,EAAO,SAAS,iBAAkB,EAAA;AAAA,EACzD,EAAE,IAAM,EAAA,QAAA,EAAU,EAAI,EAAA,KAAA,EAAO,SAAS,aAAc,EAAA;AAAA,EACpD,EAAE,IAAM,EAAA,QAAA,EAAU,EAAI,EAAA,KAAA,EAAO,SAAS,cAAe,EAAA;AAAA,EACrD,EAAE,IAAM,EAAA,QAAA,EAAU,EAAI,EAAA,KAAA,EAAO,SAAS,cAAe,EAAA;AAAA,EACrD,EAAE,IAAM,EAAA,SAAA,EAAW,EAAI,EAAA,KAAA,EAAO,SAAS,eAAgB,EAAA;AAAA,EACvD,EAAE,IAAM,EAAA,SAAA,EAAW,EAAI,EAAA,KAAA,EAAO,SAAS,eAAgB,EAAA;AAAA,EACvD,EAAE,IAAM,EAAA,QAAA,EAAU,EAAI,EAAA,KAAA,EAAO,SAAS,aAAc,EAAA;AAAA,EACpD,EAAE,IAAM,EAAA,QAAA,EAAU,EAAI,EAAA,KAAA,EAAO,SAAS,aAAc,EAAA;AAAA,EACpD,EAAE,IAAM,EAAA,SAAA,EAAW,EAAI,EAAA,KAAA,EAAO,SAAS,cAAe,EAAA;AAAA,EACtD,EAAE,IAAM,EAAA,SAAA,EAAW,EAAI,EAAA,KAAA,EAAO,SAAS,cAAe,EAAA;AAAA,EACtD,EAAE,IAAM,EAAA,QAAA,EAAU,EAAI,EAAA,KAAA,EAAO,SAAS,eAAgB,EAAA;AAAA,EACtD,EAAE,IAAM,EAAA,QAAA,EAAU,EAAI,EAAA,KAAA,EAAO,SAAS,aAAc,EAAA;AAAA,EACpD,EAAE,IAAM,EAAA,QAAA,EAAU,EAAI,EAAA,KAAA,EAAO,SAAS,cAAe,EAAA;AAAA,EACrD,EAAE,IAAM,EAAA,QAAA,EAAU,EAAI,EAAA,KAAA,EAAO,SAAS,cAAe,EAAA;AAAA,EACrD,EAAE,IAAM,EAAA,QAAA,EAAU,EAAI,EAAA,KAAA,EAAO,SAAS,4BAA6B,EAAA;AAAA,EACnE,EAAE,IAAM,EAAA,QAAA,EAAU,EAAI,EAAA,QAAA,EAAU,SAAS,qBAAsB,EAAA;AAAA,EAC/D,EAAE,IAAM,EAAA,QAAA,EAAU,EAAI,EAAA,KAAA,EAAO,SAAS,yBAA0B,EAAA;AAAA,EAChE,EAAE,IAAM,EAAA,QAAA,EAAU,EAAI,EAAA,QAAA,EAAU,SAAS,kBAAmB;AAC9D,CAAA;AAEA,MAAM,oBAAqC,GAAA;AAAA,EACzC,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,QAAA,EAAU,SAAS,aAAc,EAAA;AAAA,EACpD,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,QAAA,EAAU,SAAS,gBAAiB,EAAA;AAAA,EACvD,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,SAAA,EAAW,SAAS,iBAAkB,EAAA;AAAA,EACzD,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,SAAA,EAAW,SAAS,iBAAkB,EAAA;AAAA,EACzD,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,QAAA,EAAU,SAAS,WAAY,EAAA;AAAA,EAClD,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,QAAA,EAAU,SAAS,cAAe,EAAA;AAAA,EACrD,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,QAAA,EAAU,SAAS,cAAe,EAAA;AAAA,EACrD,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,SAAA,EAAW,SAAS,eAAgB,EAAA;AAAA,EACvD,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,SAAA,EAAW,SAAS,eAAgB,EAAA;AAAA,EACvD,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,QAAA,EAAU,SAAS,aAAc,EAAA;AAAA,EACpD,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,QAAA,EAAU,SAAS,aAAc,EAAA;AAAA,EACpD,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,SAAA,EAAW,SAAS,cAAe,EAAA;AAAA,EACtD,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,SAAA,EAAW,SAAS,cAAe,EAAA;AAAA,EACtD,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,QAAA,EAAU,SAAS,eAAgB,EAAA;AAAA,EACtD,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,QAAA,EAAU,SAAS,WAAY,EAAA;AAAA,EAClD,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,QAAA,EAAU,SAAS,cAAe,EAAA;AAAA,EACrD,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,QAAA,EAAU,SAAS,cAAe;AACvD,CAAA;AAEA,MAAM,sBAAA,GAAyB,kBAAmB,CAAA,MAAA,CAAO,oBAAoB,CAAA;AAE7E,SAAS,kBAAA,CAAmB,OAAqB,OAAuB,EAAA;AACtE,EAAO,OAAA,OAAA,CAAQ,IAAK,CAAA,CAAC,MAAW,KAAA,MAAA,CAAO,IAAS,KAAA,KAAA,CAAM,IAAQ,IAAA,MAAA,CAAO,EAAO,KAAA,KAAA,CAAM,EAAE,CAAA;AACtF;AAQO,SAAS,kBAAkB,IAA0B,EAAA;AAC1D,EAAA,MAAM,MAAS,GAAA,IAAA,CAAK,OAAQ,CAAA,GAAG,CAAM,KAAA,CAAA;AACrC,EAAA,IAAI,IAAK,CAAA,OAAA,CAAQ,KAAK,CAAA,KAAM,CAAI,CAAA,EAAA;AAC9B,IAAQ,IAAA,GAAA,CAAA,MAAA,GAAS,SAAS,KAAS,IAAA,IAAA;AAAA;AAGrC,EAAI,IAAA,GAAA,GAAM,mBAAmB,EAAE,IAAA,EAAM,MAAM,EAAI,EAAA,KAAA,IAAS,sBAAsB,CAAA;AAC9E,EAAA,IAAI,GAAK,EAAA;AACP,IAAO,OAAA,GAAA;AAAA;AAGT,EAAA,IAAI,MAAQ,EAAA;AACV,IAAA,GAAA,GAAM,EAAE,IAAM,EAAA,IAAA,EAAM,EAAI,EAAA,KAAA,EAAO,SAAS,EAAG,EAAA;AAAA,GACtC,MAAA;AACL,IAAA,GAAA,GAAM,EAAE,IAAM,EAAA,KAAA,EAAO,EAAI,EAAA,IAAA,EAAM,SAAS,EAAG,EAAA;AAAA;AAG7C,EAAM,MAAA,KAAA,GAAQ,qBAAsB,CAAA,IAAA,CAAK,IAAI,CAAA;AAC7C,EAAA,IAAI,KAAO,EAAA;AACT,IAAM,MAAA,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,MAAM,MAAS,GAAA,QAAA,CAAS,KAAM,CAAA,CAAC,GAAG,EAAE,CAAA;AACpC,IAAM,MAAA,IAAA,GAAO,MAAM,IAAI,CAAA;AACvB,IAAA,IAAI,IAAM,EAAA;AACR,MAAI,GAAA,CAAA,OAAA,GAAU,SAAS,OAAU,GAAA,OAAA;AACjC,MAAI,GAAA,CAAA,OAAA,IAAW,MAAS,GAAA,GAAA,GAAM,IAAK,CAAA,OAAA;AACnC,MAAA,GAAA,CAAI,UAAU,IAAK,CAAA,OAAA;AACnB,MAAA,IAAI,SAAS,CAAG,EAAA;AACd,QAAA,GAAA,CAAI,OAAW,IAAA,GAAA;AAAA;AACjB;AACF,GACK,MAAA;AACL,IAAA,GAAA,CAAI,OAAU,GAAA,GAAA,CAAI,IAAO,GAAA,MAAA,GAAS,GAAI,CAAA,EAAA;AACtC,IAAA,GAAA,CAAI,OAAU,GAAA,IAAA;AAAA;AAGhB,EAAO,OAAA,GAAA;AACT;AAWgB,SAAA,iBAAA,CAAkB,KAAqB,EAAA,QAAA,EAAqB,WAAoC,EAAA;AAC9G,EAAA,MAAM,YAAe,GAAA,WAAA,GAAc,WAAY,CAAA,MAAA,CAAO,sBAAsB,CAAI,GAAA,sBAAA;AAChF,EAAM,MAAA,MAAA,GAAS,kBAAmB,CAAA,KAAA,EAAO,YAAY,CAAA;AAErD,EAAA,IAAI,MAAQ,EAAA;AACV,IAAA,OAAO,MAAO,CAAA,OAAA;AAAA;AAGhB,EAAM,MAAA,OAAA,GAAU,EAAE,QAAS,EAAA;AAE3B,EAAA,IAAI,WAAW,KAAM,CAAA,IAAI,KAAK,UAAW,CAAA,KAAA,CAAM,EAAE,CAAG,EAAA;AAClD,IAAO,OAAA,cAAA,CAAe,MAAM,IAAM,EAAA,OAAO,IAAI,MAAS,GAAA,cAAA,CAAe,KAAM,CAAA,EAAA,EAAI,OAAO,CAAA;AAAA;AAGxF,EAAI,IAAA,UAAA,CAAW,KAAM,CAAA,IAAI,CAAG,EAAA;AAC1B,IAAA,MAAM,SAASC,KAAS,CAAM,KAAM,CAAA,EAAA,EAAI,MAAM,KAAK,CAAA;AACnD,IAAO,OAAA,MAAA,GAAS,cAAe,CAAA,KAAA,CAAM,IAAM,EAAA,OAAO,IAAI,MAAS,GAAA,qBAAA,CAAsB,MAAQ,EAAA,OAAO,CAAI,GAAA,EAAA;AAAA;AAG1G,EAAI,IAAA,UAAA,CAAW,KAAM,CAAA,EAAE,CAAG,EAAA;AACxB,IAAA,MAAM,SAASA,KAAS,CAAM,KAAM,CAAA,IAAA,EAAM,OAAO,KAAK,CAAA;AACtD,IAAO,OAAA,MAAA,GAAS,qBAAsB,CAAA,MAAA,EAAQ,OAAO,CAAA,GAAI,SAAS,cAAe,CAAA,KAAA,CAAM,EAAI,EAAA,OAAO,CAAI,GAAA,EAAA;AAAA;AAGxG,EAAA,IAAI,KAAM,CAAA,EAAA,CAAG,QAAS,EAAA,KAAM,KAAO,EAAA;AACjC,IAAM,MAAA,GAAA,GAAM,iBAAkB,CAAA,KAAA,CAAM,IAAI,CAAA;AACxC,IAAA,OAAO,GAAI,CAAA,OAAA;AAAA;AAGb,EAAA,OAAO,MAAM,IAAK,CAAA,QAAA,KAAa,MAAS,GAAA,KAAA,CAAM,GAAG,QAAS,EAAA;AAC5D;AAEa,MAAA,eAAA,GAAkB,CAAC,KAAkB,KAAA;AAChD,EAAI,IAAA,KAAA,CAAM,QAAQ,GAAG,CAAA,KAAM,KAAK,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAA,KAAM,CAAG,EAAA;AACzD,IAAO,OAAA,IAAA;AAAA;AAGT,EAAM,MAAA,IAAA,GAAO,kBAAkB,KAAK,CAAA;AACpC,EAAA,OAAO,KAAK,OAAY,KAAA,IAAA;AAC1B,CAAA;AAEa,MAAA,6BAAA,GAAgC,CAAC,KAAA,EAAkB,QAAwB,KAAA;AACtF,EAAI,IAAA,UAAA,CAAW,KAAM,CAAA,IAAI,CAAG,EAAA;AAC1B,IAAA,OAAO,mBAAoB,CAAA,KAAA,CAAM,IAAM,EAAA,EAAE,UAAU,CAAA;AAAA;AAErD,EAAA,MAAM,MAAS,GAAAA,KAAe,CAAA,KAAA,CAAM,MAAM,IAAI,CAAA;AAC9C,EAAA,OAAO,SAAS,mBAAoB,CAAA,MAAA,EAAQ,EAAE,QAAA,EAAU,CAAI,GAAA,EAAA;AAC9D,CAAA;AAEO,MAAM,iBAAoB,GAAA,CAC/B,GACA,EAAA,QAAA,EACA,sBACA,MACc,KAAA;AACd,EAAM,MAAA,IAAA,GAAO,aAAc,CAAA,GAAA,CAAI,IAAM,EAAA,EAAE,SAAS,KAAO,EAAA,QAAA,EAAU,oBAAsB,EAAA,MAAA,EAAQ,CAAA;AAC/F,EAAM,MAAA,EAAA,GAAK,aAAc,CAAA,GAAA,CAAI,EAAI,EAAA,EAAE,SAAS,IAAM,EAAA,QAAA,EAAU,oBAAsB,EAAA,MAAA,EAAQ,CAAA;AAE1F,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,EAAA;AAAA,IACA,GAAK,EAAA;AAAA,MACH,MAAMC,YAAS,CAAa,IAAI,IAAI,CAAA,GAAI,IAAI,IAAO,GAAA,IAAA;AAAA,MACnD,IAAIA,YAAS,CAAa,IAAI,EAAE,CAAA,GAAI,IAAI,EAAK,GAAA;AAAA;AAC/C,GACF;AACF,CAAA;AAEO,SAAS,eAAe,CAAsB,EAAA;AACnD,EAAI,IAAA,OAAO,MAAM,QAAU,EAAA;AACzB,IAAO,OAAA,CAAA,CAAE,OAAQ,CAAA,KAAK,CAAK,IAAA,CAAA;AAAA;AAE7B,EAAO,OAAA,KAAA;AACT;AAEO,SAAS,SAAS,SAAsB,EAAA;AAC7C,EAAI,IAAA,OAAO,SAAU,CAAA,GAAA,CAAI,IAAS,KAAA,QAAA,IAAY,SAAU,CAAA,GAAA,CAAI,IAAK,CAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,CAAG,EAAA;AACjF,IAAO,OAAA,IAAA;AAAA,GACE,MAAA,IAAA,OAAO,SAAU,CAAA,GAAA,CAAI,EAAO,KAAA,QAAA,IAAY,SAAU,CAAA,GAAA,CAAI,EAAG,CAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,CAAG,EAAA;AACpF,IAAO,OAAA,IAAA;AAAA;AAET,EAAO,OAAA,KAAA;AACT;AAEO,SAAS,oBAAoB,GAA4B,EAAA;AAC9D,EAAA,OAAO,eAAe,GAAI,CAAA,IAAI,CAAK,IAAA,cAAA,CAAe,IAAI,EAAE,CAAA;AAC1D;AAEO,SAAS,aAAa,OAAyB,EAAA;AACpD,EAAA,MAAM,QAAW,GAAA,IAAA,CAAK,KAAM,CAAA,OAAA,GAAU,OAAQ,CAAA;AAC9C,EAAA,IAAI,QAAU,EAAA;AACZ,IAAA,OAAO,QAAW,GAAA,GAAA;AAAA;AAEpB,EAAA,MAAM,OAAU,GAAA,IAAA,CAAK,KAAO,CAAA,OAAA,GAAU,UAAY,KAAK,CAAA;AACvD,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,OAAO,OAAU,GAAA,GAAA;AAAA;AAEnB,EAAA,MAAM,WAAW,IAAK,CAAA,KAAA,CAAQ,OAAU,GAAA,OAAA,GAAY,QAAS,IAAI,CAAA;AACjE,EAAA,IAAI,QAAU,EAAA;AACZ,IAAA,OAAO,QAAW,GAAA,GAAA;AAAA;AAEpB,EAAA,MAAM,aAAa,IAAK,CAAA,KAAA,CAAS,UAAU,OAAY,GAAA,KAAA,GAAS,OAAQ,EAAE,CAAA;AAC1E,EAAA,IAAI,UAAY,EAAA;AACd,IAAA,OAAO,UAAa,GAAA,GAAA;AAAA;AAEtB,EAAA,MAAM,aAAa,IAAK,CAAA,KAAA,CAAS,UAAU,OAAY,GAAA,KAAA,GAAS,OAAQ,EAAE,CAAA;AAC1E,EAAA,IAAI,UAAY,EAAA;AACd,IAAA,OAAO,UAAa,GAAA,GAAA;AAAA;AAEtB,EAAA,MAAM,eAAkB,GAAA,IAAA,CAAK,KAAM,CAAA,OAAA,GAAU,GAAM,CAAA;AACnD,EAAA,IAAI,eAAiB,EAAA;AACnB,IAAA,OAAO,eAAkB,GAAA,IAAA;AAAA;AAG3B,EAAO,OAAA,yBAAA;AACT;AAGO,SAAS,oBAAoB,OAAyB,EAAA;AAC3D,EAAA,MAAM,QAAW,GAAA,MAAA,CAAA,CAAQ,OAAU,GAAA,GAAA,EAAM,SAAS,CAAA;AAElD,EAAA,MAAM,CAAI,GAAA,IAAA,CAAK,KAAM,CAAA,QAAA,GAAW,KAAK,EAAE,CAAA;AACvC,EAAA,MAAM,IAAI,IAAK,CAAA,KAAA,CAAM,QAAW,GAAA,EAAE,IAAI,CAAI,GAAA,EAAA;AAC1C,EAAA,MAAM,CAAI,GAAA,MAAA,CAAA,CAAQ,QAAW,GAAA,EAAA,EAAI,SAAS,CAAA;AAC1C,EAAI,IAAA,UAAA,GAAa,CAAI,GAAA,CAAA,GAAI,GAAM,GAAA,EAAA;AAC/B,EAAI,IAAA,UAAA,GAAa,CAAI,GAAA,CAAA,GAAI,KAAQ,GAAA,EAAA;AACjC,EAAI,IAAA,UAAA,GAAa,CAAI,GAAA,CAAA,GAAI,KAAQ,GAAA,EAAA;AAEjC,EAAA,UAAA,IAAc,UAAc,GAAA,UAAA,GAAa,UAAa,GAAA,GAAA,GAAQ,UAAa,GAAA,UAAA;AAC3E,EAAA,CAAC,cAAc,UAAe,KAAA,UAAA,GAAc,UAAa,GAAA,UAAA,GAAa,MAAQ,UAAa,GAAA,UAAA;AAE3F,EAAO,OAAA,UAAA,GAAa,aAAa,UAAc,IAAA,gBAAA;AACjD;AAEgB,SAAA,iBAAA,CAAkB,KAAkB,EAAA,UAAA,EAAoB,gBAA2C,EAAA;AACjH,EAAA,IAAI,UAAa,GAAA,CAAA;AACjB,EAAA,IAAI,gBAAkB,EAAA;AACpB,IAAA,UAAA,GAAa,aAAa,gBAAgB,CAAA;AAAA;AAG5C,EAAI,IAAA,UAAA,GAAa,aAAe,CAAA,CAAA,KAAA,CAAM,EAAG,CAAA,OAAA,KAAY,KAAM,CAAA,IAAA,CAAK,OAAQ,EAAA,IAAK,UAAU,CAAA;AACvF,EAAA,IAAI,aAAa,UAAY,EAAA;AAC3B,IAAa,UAAA,GAAA,UAAA;AAAA;AAEf,EAAO,OAAA;AAAA,IACL,UAAA;AAAA,IACA,QAAA,EAAU,YAAa,CAAA,UAAA,GAAa,GAAI;AAAA,GAC1C;AACF;AAEA,MAAM,cAAiB,GAAA,kCAAA;AAEvB,MAAM,oBAA+C,GAAA;AAAA,EACnD,CAAG,EAAA,OAAA;AAAA,EACH,CAAG,EAAA,MAAA;AAAA,EACH,CAAG,EAAA,MAAA;AAAA,EACH,CAAG,EAAA,KAAA;AAAA,EACH,CAAG,EAAA,IAAA;AAAA,EACH,CAAG,EAAA,EAAA;AAAA,EACH,CAAG,EAAA,CAAA;AAAA,EACH,EAAI,EAAA;AACN,CAAA;AAEO,SAAS,iBAAiB,GAAa,EAAA;AAE5C,EAAI,IAAA,MAAA,CAAO,GAAG,CAAG,EAAA;AACf,IAAO,OAAA;AAAA,MACL,KAAK,oBAAqB,CAAA,CAAA;AAAA,MAC1B,IAAM,EAAA,GAAA;AAAA,MACN,KAAA,EAAO,QAAS,CAAA,GAAA,EAAK,EAAE;AAAA,KACzB;AAAA;AAGF,EAAM,MAAA,OAAA,GAAU,GAAI,CAAA,KAAA,CAAM,cAAc,CAAA;AACxC,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,gGAAgG,MAAO,CAAA,IAAA;AAAA,QACrG;AAAA,OACF,CAAE,IAAK,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,KACd;AAAA;AAGF,EAAA,MAAM,GAAM,GAAA,oBAAA,CAAqB,OAAQ,CAAA,CAAC,CAAC,CAAA;AAC3C,EAAA,IAAI,QAAQ,KAAW,CAAA,EAAA;AAIrB,IAAM,MAAA,IAAI,MAAM,kDAAkD,CAAA;AAAA;AAGpE,EAAO,OAAA;AAAA,IACL,GAAA;AAAA,IACA,IAAA,EAAM,QAAQ,CAAC,CAAA;AAAA,IACf,KAAO,EAAA,QAAA,CAAS,OAAQ,CAAA,CAAC,GAAG,EAAE;AAAA,GAChC;AACF;AAEO,SAAS,kBAAkB,GAAqB,EAAA;AACrD,EAAM,MAAA,IAAA,GAAO,iBAAiB,GAAG,CAAA;AACjC,EAAO,OAAA,IAAA,CAAK,MAAM,IAAK,CAAA,KAAA;AACzB;AAEO,SAAS,aAAa,GAAqB,EAAA;AAChD,EAAM,MAAA,IAAA,GAAO,iBAAiB,GAAG,CAAA;AACjC,EAAO,OAAA,IAAA,CAAK,GAAM,GAAA,GAAA,GAAO,IAAK,CAAA,KAAA;AAChC;AAEO,SAAS,cAAc,QAAkB,EAAA;AAC9C,EAAA,QAAQ,IAAM;AAAA;AAAA,IAEZ,KAAK,QAAW,GAAA,EAAA;AACd,MAAO,OAAA,CAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,EAAA;AACd,MAAO,OAAA,EAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,EAAA;AACd,MAAO,OAAA,EAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,EAAA;AACd,MAAO,OAAA,EAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,GAAA;AACd,MAAO,OAAA,GAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,GAAA;AACd,MAAO,OAAA,GAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,GAAA;AACd,MAAO,OAAA,GAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,IAAA;AACd,MAAO,OAAA,GAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,IAAA;AACd,MAAO,OAAA,GAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,IAAA;AACd,MAAO,OAAA,GAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,KAAA;AACd,MAAO,OAAA,GAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,KAAA;AACd,MAAO,OAAA,IAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,IAAA;AACd,MAAO,OAAA,GAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,IAAA;AACd,MAAO,OAAA,GAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,GAAA;AACd,MAAO,OAAA,GAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,IAAA;AACd,MAAO,OAAA,IAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,IAAA;AACd,MAAO,OAAA,GAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,IAAA;AACd,MAAO,OAAA,GAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,KAAA;AACd,MAAO,OAAA,GAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,IAAA;AACd,MAAO,OAAA,IAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,IAAA;AACd,MAAO,OAAA,IAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,IAAA;AACd,MAAO,OAAA,IAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,GAAA;AACd,MAAO,OAAA,IAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,KAAA;AACd,MAAO,OAAA,KAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,KAAA;AACd,MAAO,OAAA,KAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,KAAA;AACd,MAAO,OAAA,KAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,MAAA;AACd,MAAO,OAAA,KAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,OAAA;AACd,MAAO,OAAA,MAAA;AAAA;AAAA;AAAA,IAET,KAAK,QAAW,GAAA,OAAA;AACd,MAAO,OAAA,MAAA;AAAA;AAAA,IACT;AACE,MAAO,OAAA,OAAA;AAAA;AAEb;AAQO,SAAS,mBAAoB,CAAA,SAAA,EAAsB,GAAgB,GAAA,QAAA,EAA+B,EAAA;AACvG,EAAA,MAAM,OAAO,GAAI,CAAA,IAAA,EAAS,GAAA,SAAA,CAAU,KAAK,IAAK,EAAA;AAC9C,EAAA,MAAM,KAAK,GAAI,CAAA,IAAA,EAAS,GAAA,SAAA,CAAU,GAAG,IAAK,EAAA;AAE1C,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA;AAAA,GACF;AACF;AAOO,SAAS,mBAAoB,CAAA,iBAAA,EAAsC,GAAgB,GAAA,QAAA,EAAuB,EAAA;AAC/G,EAAA,MAAM,OAAO,QAAS,CAAA,GAAG,EAAE,QAAS,CAAA,iBAAA,CAAkB,MAAM,GAAG,CAAA;AAC/D,EAAA,MAAM,EAAK,GAAA,iBAAA,CAAkB,EAAO,KAAA,CAAA,GAAI,QAAS,CAAA,GAAG,CAAI,GAAA,QAAA,CAAS,GAAG,CAAA,CAAE,QAAS,CAAA,iBAAA,CAAkB,IAAI,GAAG,CAAA;AAExG,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,EAAA;AAAA,IACA,GAAA,EAAK,EAAE,IAAA,EAAM,EAAG;AAAA,GAClB;AACF;;;;;;;;;;;;;;;;;;;;;;;ACrdY,IAAA,iBAAA,qBAAAC,kBAAL,KAAA;AACL,EAAAA,mBAAA,SAAU,CAAA,GAAA,EAAA;AACV,EAAAA,mBAAA,kBAAmB,CAAA,GAAA,SAAA;AACnB,EAAAA,mBAAA,KAAM,CAAA,GAAA,KAAA;AAHI,EAAAA,OAAAA,kBAAAA;AAAA,CAAA,EAAA,iBAAA,IAAA,EAAA;AAMC,MAAA,0BAAA,GAA6B,CAAC,QAAmC,KAAA;AAC5E,EAAA,QAAQ,WAAY,CAAA,EAAE,QAAS,EAAC,CAAG;AAAA,IACjC,KAAK,SAAA;AACH,MAAO,OAAA,oBAAA;AAAA,IACT,KAAK,KAAA;AACH,MAAO,OAAA,KAAA;AAAA,IACT;AACE,MAAO,OAAA,QAAA;AAAA;AAEb;AAEa,MAAA,OAAA,GAAU,CAAC,QAAqB,KAAA;AAC3C,EAAO,OAAA1H,yBAAA,CAAO,EAAG,CAAA,IAAA,CAAK,QAAQ,CAAA;AAChC;AAoBa,MAAA,eAAA,GAAkB,CAAC,IAAA,EAAc,SAAgD,KAAA;AAC5F,EAAM,MAAA,QAAA,GAAW,WAAY,CAAA,IAAA,EAAM,SAAS,CAAA;AAE5C,EAAA,IAAI,QAAU,EAAA;AACZ,IAAO,OAAA,QAAA;AAAA;AAGT,EAAO,OAAA,SAAA,CAAU,MAAM,SAAS,CAAA;AAClC;AAEO,MAAM,YAAe,GAAA2H,cAAA,CAAQ,CAAC,eAAA,GAAiD,KAAsB,KAAA;AAC1G,EAAA,MAAM,UAAsB,EAAC;AAE7B,EAAA,IAAI,oBAAoB,IAAM,EAAA;AAC5B,IAAQ,OAAA,CAAA,IAAA,CAAK,EAA2B,gBAAA,SAAA,yBAAoC,KAAqB,WAAA;AAAA,aACxF,eAAiB,EAAA;AAC1B,IAAQ,OAAA,CAAA,IAAA,CAAK,GAAG,eAAe,CAAA;AAAA;AAGjC,EAAA,OAAO3H,0BAAO,EAAG,CAAA,KAAA,GAAQ,MAAO,CAAA,CAAC,OAAmB,IAAiB,KAAA;AACnE,IAAM,MAAA,gBAAA,GAAmB,oBAAoB,IAAI,CAAA;AAEjD,IAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,gBAAgB,CAAK,IAAA,gBAAA,CAAiB,WAAW,CAAG,EAAA;AACrE,MAAO,OAAA,KAAA;AAAA;AAGT,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,IAAO,OAAA,KAAA;AAAA,KACN,OAAO,CAAA;AACZ,CAAC;AAEM,MAAM,iBAAoB,GAAA2H,cAAA;AAAA,EAC/B,CAAC,kBAAiD,KAA8B,KAAA;AAC9E,IAAM,MAAA,SAAA,GAAY,aAAa,eAAe,CAAA;AAE9C,IAAA,MAAM,MAAS,GAAA,SAAA,CAAU,MAAO,CAAA,CAACC,SAAoC,IAAmB,KAAA;AAjF5F,MAAA,IAAA,EAAA,EAAA,EAAA;AAkFM,MAAM,MAAA,SAAA,GAAY,IAAK,CAAA,OAAA,CAAQ,GAAG,CAAA;AAElC,MAAA,IAAI,cAAc,CAAI,CAAA,EAAA;AACpB,QAAA,MAAMC,MAAQ,GAAA,EAAA;AACd,QAAAD,OAAAA,CAAOC,MAAK,CAAI,GAAA,CAAA,EAAA,GAAAD,QAAOC,MAAK,CAAA,KAAZ,YAAiB,EAAC;AAClC,QAAAD,OAAOC,CAAAA,MAAK,CAAE,CAAA,IAAA,CAAK,IAAI,CAAA;AAEvB,QAAOD,OAAAA,OAAAA;AAAA;AAGT,MAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,KAAM,CAAA,CAAA,EAAG,SAAS,CAAA;AACrC,MAAAA,OAAAA,CAAO,KAAK,CAAI,GAAA,CAAA,EAAA,GAAAA,QAAO,KAAK,CAAA,KAAZ,YAAiB,EAAC;AAClC,MAAAA,OAAO,CAAA,KAAK,CAAE,CAAA,IAAA,CAAK,IAAI,CAAA;AAEvB,MAAOA,OAAAA,OAAAA;AAAA,KACT,EAAG,EAAE,CAAA;AAEL,IAAA,OAAO,OAAO,IAAK,CAAA,MAAM,CAAE,CAAA,GAAA,CAAI,CAAC,IAAU,MAAA;AAAA,MACxC,IAAA;AAAA,MACA,KAAA,EAAO,OAAO,IAAI;AAAA,KAClB,CAAA,CAAA;AAAA;AAEN;AAEA,MAAM,WAAA,GAAc,CAAC,IAAA,EAAc,SAAgD,KAAA;AA1GnF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA2GE,EAAA,QAAQ,IAAM;AAAA,IACZ,KAAK,KAAuB,YAAA;AAC1B,MAAO,OAAA;AAAA,QACL,IAAM,EAAA,4BAAA;AAAA,QACN,QAAU,EAAA,KAAA;AAAA,QACV,IAAA;AAAA,QACA,WAAW,EAAC;AAAA,QACZ,YAAc,EAAA,UAAA;AAAA,QACd,YAAc,EAAA;AAAA,OAChB;AAAA;AACF,IAEA,KAAK,EAA2B,gBAAA;AAC9B,MAAA,MAAM,KAAK,WAAY,EAAA;AACvB,MAAM,MAAA,UAAA,GAAa,EAAO,KAAA,SAAA,IAAa,EAAO,KAAA,KAAA;AAC9C,MAAM,MAAA,IAAA,GAAO,aAAa,WAAY,CAAA,EAAA,EAAI,SAAS,CAAI,GAAA,SAAA,CAAU,IAAI,SAAS,CAAA;AAE9E,MAAO,OAAA;AAAA,QACL,SAAW,EAAA,CAAA,EAAA,GAAA,mBAAA,CAAoB,EAAE,CAAA,KAAtB,YAA2B,EAAC;AAAA,QACvC,YAAc,EAAA,EAAA;AAAA,QACd,YAAc,EAAA,CAAA;AAAA,QACd,GAAG,IAAA;AAAA,QACH,QAAA,EAAA,CAAU,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,QAAA,KAAN,IAAkB,GAAA,EAAA,GAAA,EAAA;AAAA,QAC5B,IAAM,EAAA,SAAA;AAAA,QACN;AAAA,OACF;AAAA;AACF,IAEA,KAAK,SAAoC,yBAAA;AACvC,MAAA,MAAM,EAAK,GAAA5H,yBAAA,CAAO,EAAG,CAAA,KAAA,CAAM,IAAI,CAAA;AAC/B,MAAM,MAAA,IAAA,GAAO,SAAU,CAAA,EAAA,EAAI,SAAS,CAAA;AAEpC,MAAO,OAAA;AAAA,QACL,SAAW,EAAA,CAAA,EAAA,GAAA,mBAAA,CAAoB,EAAE,CAAA,KAAtB,YAA2B,EAAC;AAAA,QACvC,YAAc,EAAA,iBAAA;AAAA,QACd,YAAc,EAAA,iBAAA,IAAI,IAAK,EAAA,EAAE,iBAAkB,EAAA;AAAA,QAC3C,GAAG,IAAA;AAAA,QACH,IAAM,EAAA,cAAA;AAAA,QACN,QAAA,EAAA,CAAU,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,QAAA,KAAN,IAAkB,GAAA,EAAA,GAAA,EAAA;AAAA,QAC5B;AAAA,OACF;AAAA;AACF,IAEA;AACE,MAAO,OAAA,KAAA,CAAA;AAAA;AAEb,CAAA;AAEA,MAAM,wBAAA,GAA2B,CAAC,WAAgC,KAAA;AAChE,EAAI,IAAA,YAAA,CAAa,IAAK,CAAA,WAAW,CAAG,EAAA;AAClC,IAAO,OAAA,EAAA;AAAA;AAET,EAAO,OAAA,WAAA;AACT,CAAA;AAEA,MAAM,SAAA,GAAY,CAAC,QAAA,EAAoB,SAAgD,KAAA;AAlKvF,EAAA,IAAA,EAAA;AAmKE,EAAA,MAAM,QAAW,GAAAA,yBAAA,CAAO,EAAG,CAAA,IAAA,CAAK,QAAQ,CAAA;AACxC,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAO,OAAA,KAAA,CAAA;AAAA;AAGT,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,QAAA;AAAA,IACN,UAAU,QAAS,CAAA,IAAA;AAAA,IACnB,IAAM,EAAA,QAAA;AAAA,IACN,SAAW,EAAA,CAAA,EAAA,GAAA,mBAAA,CAAoB,QAAQ,CAAA,KAA5B,YAAiC,EAAC;AAAA,IAC7C,YAAc,EAAA,wBAAA,CAAyB,QAAS,CAAA,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,IAC/D,YAAA,EAAc,QAAS,CAAA,SAAA,CAAU,SAAS;AAAA,GAC5C;AACF,CAAA;AAGA,MAAM,aAAwC,GAAA;AAAA,EAC5C,EAAI,EAAA,aAAA;AAAA,EACJ,EAAI,EAAA,eAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,gBAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,qBAAA;AAAA,EACJ,EAAI,EAAA,WAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,WAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,wBAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,eAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,gCAAA;AAAA,EACJ,EAAI,EAAA,mBAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,cAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,gBAAA;AAAA,EACJ,EAAI,EAAA,0BAAA;AAAA,EACJ,EAAI,EAAA,MAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,kBAAA;AAAA,EACJ,EAAI,EAAA,yBAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,4BAAA;AAAA,EACJ,EAAI,EAAA,cAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,eAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,MAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,gBAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,oBAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,aAAA;AAAA,EACJ,EAAI,EAAA,mBAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,6BAAA;AAAA,EACJ,EAAI,EAAA,eAAA;AAAA,EACJ,EAAI,EAAA,MAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,eAAA;AAAA,EACJ,EAAI,EAAA,kBAAA;AAAA,EACJ,EAAI,EAAA,6BAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,WAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,WAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,MAAA;AAAA,EACJ,EAAI,EAAA,WAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,eAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,iCAAA;AAAA,EACJ,EAAI,EAAA,+BAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,WAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,WAAA;AAAA,EACJ,EAAI,EAAA,4BAAA;AAAA,EACJ,EAAI,EAAA,MAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,aAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,kCAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,wBAAA;AAAA,EACJ,EAAI,EAAA,eAAA;AAAA,EACJ,EAAI,EAAA,WAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,WAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,MAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,kBAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,WAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,kCAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,aAAA;AAAA,EACJ,EAAI,EAAA,sBAAA;AAAA,EACJ,EAAI,EAAA,eAAA;AAAA,EACJ,EAAI,EAAA,aAAA;AAAA,EACJ,EAAI,EAAA,WAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,MAAA;AAAA,EACJ,EAAI,EAAA,gBAAA;AAAA,EACJ,EAAI,EAAA,0BAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,MAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,qBAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,kBAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,MAAA;AAAA,EACJ,EAAI,EAAA,aAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,aAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,oBAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,kBAAA;AAAA,EACJ,EAAI,EAAA,cAAA;AAAA,EACJ,EAAI,EAAA,uBAAA;AAAA,EACJ,EAAI,EAAA,aAAA;AAAA,EACJ,EAAI,EAAA,cAAA;AAAA,EACJ,EAAI,EAAA,2BAAA;AAAA,EACJ,EAAI,EAAA,8BAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,uBAAA;AAAA,EACJ,EAAI,EAAA,cAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,cAAA;AAAA,EACJ,EAAI,EAAA,WAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,iBAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,cAAA;AAAA,EACJ,EAAI,EAAA,iCAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,WAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,wBAAA;AAAA,EACJ,EAAI,EAAA,WAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,aAAA;AAAA,EACJ,EAAI,EAAA,sBAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,aAAA;AAAA,EACJ,EAAI,EAAA,MAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,qBAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,cAAA;AAAA,EACJ,EAAI,EAAA,0BAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,sBAAA;AAAA,EACJ,EAAI,EAAA,gBAAA;AAAA,EACJ,EAAI,EAAA,eAAA;AAAA,EACJ,EAAI,EAAA,gCAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,YAAA;AAAA,EACJ,EAAI,EAAA,SAAA;AAAA,EACJ,EAAI,EAAA,WAAA;AAAA,EACJ,EAAI,EAAA,UAAA;AAAA,EACJ,EAAI,EAAA,yBAAA;AAAA,EACJ,EAAI,EAAA,sBAAA;AAAA,EACJ,EAAI,EAAA,mBAAA;AAAA,EACJ,EAAI,EAAA,gBAAA;AAAA,EACJ,EAAI,EAAA,OAAA;AAAA,EACJ,EAAI,EAAA,QAAA;AAAA,EACJ,EAAI,EAAA;AACN,CAAA;AAEA,MAAM,uBAAuB,MAAyC;AACpE,EAAA,OAAOA,0BAAO,EAAG,CAAA,SAAA,GAAY,MAAO,CAAA,CAAC,KAAwC,IAAS,KAAA;AACpF,IAAA,MAAM,SAAY,GAAAA,yBAAA,CAAO,EAAG,CAAA,eAAA,CAAgB,IAAI,CAAA;AAChD,IAAA,OAAO,SAAU,CAAA,MAAA,CAAO,CAAC8H,IAAAA,EAAwC,QAAa,KAAA;AAC5E,MAAI,IAAA,CAACA,IAAI,CAAA,QAAQ,CAAG,EAAA;AAClB,QAAAA,IAAAA,CAAI,QAAQ,CAAA,GAAI,EAAC;AAAA;AAGnB,MAAM,MAAA,IAAA,GAAO,cAAc,IAAI,CAAA;AAE/B,MAAA,IAAI,CAAC,IAAM,EAAA;AACT,QAAOA,OAAAA,IAAAA;AAAA;AAGT,MAAAA,KAAI,QAAQ,CAAA,CAAE,KAAK,EAAE,IAAA,EAAM,MAAM,CAAA;AACjC,MAAOA,OAAAA,IAAAA;AAAA,OACN,GAAG,CAAA;AAAA,GACR,EAAG,EAAE,CAAA;AACP,CAAG,GAAA;;AC3bH,MAAM,WAAwC,GAAA;AAAA,EAC5C,KAAO,EAAA,CAAC,GAAK,EAAA,GAAA,EAAK,OAAO,CAAA;AAAA,EACzB,MAAA,EAAQ,CAAC,GAAA,EAAK,QAAQ,CAAA;AAAA,EACtB,KAAO,EAAA,CAAC,GAAK,EAAA,GAAA,EAAK,OAAO,CAAA;AAAA,EACzB,IAAM,EAAA,CAAC,GAAK,EAAA,GAAA,EAAK,MAAM,CAAA;AAAA,EACvB,KAAO,EAAA,CAAC,GAAK,EAAA,GAAA,EAAK,OAAO,CAAA;AAAA,EACzB,OAAA,EAAS,CAAC,GAAA,EAAK,SAAS,CAAA;AAAA,EACxB,OAAS,EAAA,CAAC,GAAK,EAAA,GAAA,EAAK,SAAS;AAC/B,CAAA;AAUgB,SAAA,mCAAA,CAAoC,QAAoB,EAAA,cAAA,GAAiB,IAAc,EAAA;AAGrG,EAAA,IAAIC,eAAQ,CAAA,QAAA,CAAS,KAAO,EAAA,QAAA,CAAS,GAAG,CAAG,EAAA;AACzC,IAAO,OAAA,EAAA;AAAA;AAGT,EAAM,MAAA,QAAA,GAAWC,2BAAmB,QAAQ,CAAA;AAC5C,EAAO,OAAA,oBAAA,CAAqB,UAAU,cAAc,CAAA;AACtD;AAEgB,SAAA,oBAAA,CAAqB,UAAoB,cAAiC,EAAA;AACxF,EAAO,OAAA,MAAA,CAAO,OAAQ,CAAA,QAAQ,CAAE,CAAA,MAAA,CAAO,CAAC,GAAK,EAAA,CAAC,IAAM,EAAA,KAAK,CAAM,KAAA;AAC7D,IAAI,IAAA,KAAA,IAAS,UAAU,CAAK,IAAA,EAAE,SAAS,SAAa,IAAA,CAAC,kBAAkB,GAAM,CAAA,EAAA;AAC3E,MAAM,MAAA,OAAA,GAAU,GAAQ,KAAA,EAAA,GAAK,GAAM,GAAA,EAAA;AACnC,MAAO,OAAA,GAAA,GAAM,CAAG,EAAA,OAAO,CAAG,EAAA,KAAK,GAAG,WAAY,CAAA,IAAI,CAAE,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA;AAGxD,IAAO,OAAA,GAAA;AAAA,KACN,EAAE,CAAA;AACP;AASO,SAAS,cAAc,cAAkC,EAAA;AAC9D,EAAA,OAAO,eAAe,KAAM,CAAA,GAAG,EAAE,MAAiB,CAAA,CAAC,KAAK,KAAU,KAAA;AAChE,IAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,CAAM,WAAW,CAAA;AAErC,IAAA,MAAM,YAAY,KAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,CAAA,CAAA;AAC1B,IAAA,MAAM,OAAO,KAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,CAAA,CAAA;AAErB,IAAI,IAAA,EAAE,aAAa,IAAO,CAAA,EAAA;AACxB,MAAO,OAAA,GAAA;AAAA;AAGT,IAAA,MAAM,OAAU,GAAA,MAAA,CAAO,OAAQ,CAAA,WAAW,EAAE,IAAK,CAAA,CAAC,CAAC,CAAA,EAAG,aAAa,CAAM,KAAA,aAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAe,QAAS,CAAA,KAAA,CAAM,CAAC,CAAE,CAAA,CAAA;AAC1G,IAAM,MAAA,MAAA,GAAS,QAAS,CAAA,SAAA,EAAW,EAAE,CAAA;AAErC,IAAO,OAAA,OAAA,GAAU,EAAE,GAAG,GAAK,EAAA,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAA,EAAW,GAAA,GAAA;AAAA,GACtD,EAAG,EAAE,CAAA;AACP;AAUgB,SAAA,iBAAA,CAAkB,MAAqB,QAA0B,EAAA;AAC/E,EAAO,OAAAC,WAAA,CAAI,MAAM,QAAQ,CAAA;AAC3B;AASO,SAAS,uBAAuB,QAA4B,EAAA;AACjE,EAAM,MAAA,GAAA,uBAAU,IAAK,EAAA;AACrB,EAAA,OAAO,kBAAkB,GAAK,EAAA,QAAQ,EAAE,OAAQ,EAAA,GAAI,IAAI,OAAQ,EAAA;AAClE;AASO,SAAS,YAAY,UAA6B,EAAA;AACvD,EAAA,OAAO,CAAC,KAAA,CAAM,IAAK,CAAA,KAAA,CAAM,UAAU,CAAC,CAAA;AACtC;AAYO,SAAS,gBAAgB,cAAiC,EAAA;AAhHjE,EAAA,IAAA,EAAA;AAiHE,EAAA,KAAA,MAAW,SAAS,cAAe,CAAA,IAAA,EAAO,CAAA,KAAA,CAAM,GAAG,CAAG,EAAA;AACpD,IAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,CAAM,WAAW,CAAA;AACrC,IAAA,IAAI,KAAU,KAAA,IAAA,IAAQ,KAAM,CAAA,MAAA,KAAW,CAAG,EAAA;AACxC,MAAO,OAAA,KAAA;AAAA;AAGT,IAAA,MAAM,OAAM,EAAO,GAAA,MAAA,CAAA,OAAA,CAAQ,WAAW,CAAA,CAAE,KAAK,CAAC,CAAC,CAAG,EAAA,aAAa,MAAM,aAAe,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAA,QAAA,CAAS,MAAM,CAAC,CAAA,CAAE,MAA1F,IAA8F,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAA,CAAA;AAC1G,IAAA,IAAI,CAAC,GAAK,EAAA;AACR,MAAO,OAAA,KAAA;AAAA;AACT;AAGF,EAAO,OAAA,IAAA;AACT;AAcO,SAAS,kBAAkB,cAAiC,EAAA;AACjE,EAAM,MAAA,SAAA,GAAY,CAAC,GAAK,EAAA,GAAA,EAAK,KAAK,IAAM,EAAA,IAAA,EAAM,SAAM,IAAI,CAAA;AACxD,EAAO,OAAA,uBAAA,CAAwB,gBAAgB,SAAS,CAAA;AAC1D;AAcO,SAAS,uBAAuB,cAAiC,EAAA;AACtE,EAAA,MAAM,SAAY,GAAA,CAAC,GAAK,EAAA,GAAA,EAAK,GAAK,EAAA,GAAA,EAAK,GAAK,EAAA,GAAA,EAAK,GAAK,EAAA,IAAA,EAAM,IAAM,EAAA,OAAA,EAAM,IAAI,CAAA;AAC5E,EAAO,OAAA,uBAAA,CAAwB,gBAAgB,SAAS,CAAA;AAC1D;AAEA,SAAS,uBAAA,CAAwB,gBAAwB,SAA8B,EAAA;AACrF,EAAA,KAAA,MAAW,SAAS,cAAe,CAAA,IAAA,EAAO,CAAA,KAAA,CAAM,GAAG,CAAG,EAAA;AACpD,IAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,CAAM,wBAAwB,CAAA;AAClD,IAAA,IAAI,KAAU,KAAA,IAAA,IAAQ,KAAM,CAAA,MAAA,KAAW,CAAG,EAAA;AACxC,MAAO,OAAA,KAAA;AAAA;AAGT,IAAA,MAAM,WAAc,GAAA,SAAA,CAAU,QAAS,CAAA,KAAA,CAAM,CAAC,CAAC,CAAA;AAC/C,IAAA,IAAI,CAAC,WAAa,EAAA;AAChB,MAAO,OAAA,KAAA;AAAA;AACT;AAGF,EAAO,OAAA,IAAA;AACT;;AC9KY,IAAA,WAAA,qBAAAC,YAAL,KAAA;AACL,EAAAA,aAAA,MAAO,CAAA,GAAA,MAAA;AACP,EAAAA,aAAA,MAAO,CAAA,GAAA,MAAA;AAFG,EAAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;;ACYL,SAAS,yBACd,CAAA,MAAA,GAAyD,EAAC,EAC1D,UAC4B,EAAA;AAjB9B,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAkBE,EAAM,MAAA,QAAA,GAAW,IAAI,0BAA2B,EAAA;AAChD,EAAM,MAAA,eAAA,GAAkB,kCAAkC,IAAK,EAAA;AAC/D,EAAA,MAAM,4BAAuE,EAAC;AAG9E,EAAA,IAAI,OAAO,eAAiB,EAAA;AAC1B,IAAM,MAAA,OAAA,GAAU,IAAI,wBAA8C,EAAA;AAClE,IAAA,MAAA,CAAO,gBAAgB,OAAO,CAAA;AAE9B,IAAA,KAAA,MAAW,UAAc,IAAA,OAAA,CAAQ,WAAY,EAAA,CAAE,MAAQ,EAAA;AACrD,MAAA,UAAA,CAAW,QAAW,GAAA,IAAA;AAItB,MAAW,UAAA,CAAA,EAAA,GAAK,YAAY,UAAW,CAAA,EAAA;AAEvC,MAAI,IAAA,yBAAA,CAA0B,UAAY,EAAA,eAAe,CAAG,EAAA;AAC1D,QAAM,MAAA,iBAAA,GAAA,CAAoB,+BAA0B,UAAW,CAAA,QAAA,CAAU,CAAC,CAAC,CAAA,KAAjD,YAAsD,EAAC;AACjF,QAAA,iBAAA,CAAkB,KAAK,UAAU,CAAA;AACjC,QAAA,yBAAA,CAA0B,UAAW,CAAA,QAAA,CAAU,CAAC,CAAC,CAAI,GAAA,iBAAA;AAAA,OAChD,MAAA;AACL,QAAA,QAAA,CAAS,SAAS,UAAU,CAAA;AAAA;AAC9B;AACF;AAGF,EAAA,KAAA,IAAS,mBAAmB,eAAiB,EAAA;AAC3C,IAAA,MAAM,KAAK,eAAgB,CAAA,EAAA;AAC3B,IAAA,IAAI,OAAO,sBAAwB,EAAA;AACjC,MAAA,MAAM,UAAa,GAAA,MAAA,CAAO,sBAAuB,CAAA,OAAA,CAAQ,EAAE,CAAI,GAAA,CAAA,CAAA;AAC/D,MAAA,IAAI,UAAY,EAAA;AACd,QAAA;AAAA;AACF;AAEF,IAAA,IAAI,OAAO,eAAiB,EAAA;AAC1B,MAAA,MAAM,sBAAyB,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,eAAgB,CAAA,EAAE,MAAzB,IAA4B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,gBAAA;AAC3D,MAAA,MAAM,aAAgB,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,eAAgB,CAAA,EAAE,MAAzB,IAA4B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,YAAA;AAClD,MAAA,MAAM,cAAiB,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,eAAgB,CAAA,EAAE,MAAzB,IAA4B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAA;AAEnD,MAAA,IAAI,2BAA2B,KAAW,CAAA,EAAA;AACxC,QAAkB,eAAA,GAAA;AAAA,UAChB,GAAG,eAAA;AAAA,UACH,gBAAkB,EAAA;AAAA,SACpB;AAAA;AAGF,MAAA,IAAI,aAAe,EAAA;AACjB,QAAkB,eAAA,GAAA;AAAA,UAChB,GAAG,eAAA;AAAA,UACH,YAAc,EAAA;AAAA,SAChB;AAAA;AAGF,MAAA,IAAI,cAAgB,EAAA;AAClB,QAAkB,eAAA,GAAA;AAAA,UAChB,GAAG,eAAA;AAAA,UACH,QAAA,EAAU,gBAAgB,QAAW,GAAA,EAAE,GAAG,eAAgB,CAAA,QAAA,EAAU,GAAG,cAAA,EAAmB,GAAA;AAAA,SAC5F;AAAA;AACF;AAGF,IAAA,QAAA,CAAS,SAAS,eAAe,CAAA;AAEjC,IAAA,IAAI,gBAAgB,QAAY,IAAA,yBAAA,CAA0B,gBAAgB,QAAS,CAAA,CAAC,CAAC,CAAG,EAAA;AACtF,MAAA,KAAA,IAAS,qBAAqB,yBAA0B,CAAA,eAAA,CAAgB,QAAS,CAAA,CAAC,CAAC,CAAG,EAAA;AACpF,QAAA,QAAA,CAAS,SAAS,iBAAiB,CAAA;AAAA;AACrC;AACF;AAIF,EAAW,KAAA,MAAA,IAAA,IAAQ,QAAS,CAAA,IAAA,EAAQ,EAAA;AAClC,IAAA,IAAI,IAAK,CAAA,IAAA,CAAK,OAAQ,CAAA,GAAG,IAAI,CAAG,EAAA;AAC9B,MAAA,MAAM,IAAI,KAAM,CAAA,CAAA,CAAA,EAAI,UAAU,CAA+C,4CAAA,EAAA,IAAA,CAAK,EAAE,CAAE,CAAA,CAAA;AAAA;AACxF;AAGF,EAAO,OAAA,QAAA;AACT;AAEA,SAAS,yBAAA,CAA0B,UAAmC,kBAA+C,EAAA;AACnH,EAAO,OAAA,OAAA;AAAA,IACL,kBAAmB,CAAA,IAAA,CAAK,CAAC,CAAA,KAAM,SAAS,QAAY,IAAA,CAAA,CAAE,QAAY,IAAA,QAAA,CAAS,SAAS,CAAC,CAAA,KAAM,CAAE,CAAA,QAAA,CAAS,CAAC,CAAC;AAAA,GAC1G;AACF;;ACRO,MAAM,oBAGH,aAA+B,CAAA;AAAA,EA+BvC,YAAY,KAAmD,EAAA;AAC7D,IAAM,KAAA,EAAA;AA9BR,IAAA,IAAA,CAAQ,oBAA+D,GAAA;AAAA,MACrE,UAAU,EAAC;AAAA,MACX,WAAW;AAAC,KACd;AAGA,IAAA,IAAA,CAAQ,sBAAsB,MAAM;AAClC,MAAA,OAAO,IAAI,0BAA2B,EAAA;AAAA,KACxC;AAWA,IAAsC,IAAA,CAAA,WAAA,GAAA;AAAA,MACpC,WAAa,EAAA,KAAA;AAAA,MACb,WAAa,EAAA;AAAA,KACf;AASE,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA;AACf,EAEA,IAAI,QAAW,GAAA;AACb,IAAI,IAAA,MAAA,GAAS,IAAK,CAAA,SAAA,IAAa,EAAC;AAEhC,IAAA,IAAI,CAAC,IAAA,CAAK,SAAa,IAAA,IAAA,CAAK,eAAiB,EAAA;AAC3C,MAAM,MAAA,OAAA,GAAU,IAAI,yBAAoC,EAAA;AACxD,MAAA,IAAA,CAAK,gBAAgB,OAAS,EAAA,EAAE,IAAM,EAAA,IAAI,CAAA;AAC1C,MAAW,KAAA,MAAA,IAAA,IAAQ,OAAQ,CAAA,QAAA,EAAY,EAAA;AACrC,QAAI,IAAA,IAAA,CAAK,gBAAgB,IAAM,EAAA;AAC7B,UAAAxD,UAAA,CAAI,MAAQ,EAAA,IAAA,CAAK,IAAM,EAAA,IAAA,CAAK,YAAY,CAAA;AAAA;AAC1C;AACF;AAGF,IAAO,OAAA,MAAA;AAAA;AACT,EAEA,IAAI,mBAA8D,GAAA;AAChE,IAAM,MAAA,cAAA,GAAiB,KAAK,oBAAqB,CAAA,QAAA;AACjD,IAAA,cAAA,CAAe,SAAS,EAAC;AAEzB,IAAA,KAAA,MAAW,MAAU,IAAA,IAAA,CAAK,mBAAoB,CAAA,IAAA,EAAQ,EAAA;AACpD,MAAI,IAAA,MAAA,CAAO,iBAAiB,KAAW,CAAA,EAAA;AACrC,QAAA;AAAA;AAGF,MAAAA,UAAA,CAAI,cAAgB,EAAA,MAAA,CAAO,EAAI,EAAA,MAAA,CAAO,YAAY,CAAA;AAAA;AAGpD,IAAO,OAAA;AAAA,MACL,QAAU,EAAA;AAAA,QACR,GAAG;AAAA,OACL;AAAA,MACA,SAAA,EAAW,KAAK,oBAAqB,CAAA;AAAA,KACvC;AAAA;AACF;AAAA;AAAA;AAAA,EAKA,YAAY,QAAoB,EAAA;AAC9B,IAAmB,kBAAA,CAAA,aAAA,EAAe,eAAe,iBAAiB,CAAA;AAClE,IAAA,IAAA,CAAK,SAAY,GAAA,QAAA;AACjB,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,IAAI,mBAAsB,GAAA;AACxB,IAAI,IAAA,CAAC,KAAK,oBAAsB,EAAA;AAC9B,MAAK,IAAA,CAAA,oBAAA,GAAuB,KAAK,mBAAoB,EAAA;AAAA;AAGvD,IAAA,OAAO,IAAK,CAAA,oBAAA;AAAA;AACd;AAAA;AAAA;AAAA,EAKA,UAAU,MAAoD,EAAA;AAC5D,IAAmB,kBAAA,CAAA,aAAA,EAAe,aAAa,iBAAiB,CAAA;AAChE,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AACd,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,YAAe,GAAA;AACb,IAAA,IAAA,CAAK,SAAY,GAAA,IAAA;AACjB,IAAO,OAAA,IAAA;AAAA;AACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,mBAAA,CACE,SACA,aACA,EAAA;AACA,IAAA,IAAA,CAAK,gBAAmB,GAAA,OAAA;AACxB,IAAA,IAAA,CAAK,aAAgB,GAAA,aAAA;AACrB,IAAO,OAAA,IAAA;AAAA;AACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,sBAAsB,OAAkC,EAAA;AACtD,IAAA,IAAA,CAAK,kBAAqB,GAAA,OAAA;AAC1B,IAAO,OAAA,IAAA;AAAA;AACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgCA,gBAAgB,OAAyC,EAAA;AAEvD,IAAA,IAAA,CAAK,eAAkB,GAAA,OAAA;AACvB,IAAO,OAAA,IAAA;AAAA;AACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,uBAA0D,GAAA;AAjR5D,IAAA,IAAA,EAAA;AAkRI,IAAO,OAAA,CAAA,EAAA,GAAA,IAAA,CAAK,eAAL,KAAA,IAAA,GAAA,EAAA,GAAyB,MAAM;AAAA,KAAC;AAAA;AACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,eAAe,OAA0C,EAAA;AACvD,IAAA,IAAA,CAAK,cAAc,EAAE,GAAG,IAAK,CAAA,WAAA,EAAa,GAAG,OAAQ,EAAA;AACrD,IAAO,OAAA,IAAA;AAAA;AACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8DA,cAAA,CAAe,MAAyD,GAAA,EAAI,EAAA;AAE1E,IAAA,IAAA,CAAK,sBAAsB,MAAM,yBAAA,CAA0B,MAAQ,EAAA,IAAA,CAAK,KAAK,IAAI,CAAA;AAEjF,IAAO,OAAA,IAAA;AAAA;AACT;AAAA;AAAA;AAAA;AAAA,EAMA,uBAAuB,QAA4C,EAAA;AACjE,IAAA,IAAA,CAAK,mBAAsB,GAAA,QAAA;AAC3B,IAAO,OAAA,IAAA;AAAA;AACT;AAAA;AAAA;AAAA;AAAA,EAMA,sBAAuE,GAAA;AACrE,IAAA,OAAO,IAAK,CAAA,mBAAA;AAAA;AACd,EAEA,YAAY,QAAkB,EAAA;AAC5B,IAAO,OAAA,IAAA,CAAK,KAAK,EAAO,KAAA,QAAA;AAAA;AAE5B;;AC9VO,SAAS,wBAA4D,GAAa,EAAA;AACvF,EAAA,OAAO,CAAC,QAAgD,KAAA;AACtD,IAAO,OAAA,aAAA,IAAiB,QAAY,IAAA,QAAA,CAAS,WAAgB,KAAA,GAAA;AAAA,GAC/D;AACF;AAQa,MAAA,gBAAA,GAAmB,CAAC,QAAuE,KAAA;AACtG,EAAA,OAAO,aAAiB,IAAA,QAAA,IAAY,OAAO,QAAA,CAAS,WAAgB,KAAA,QAAA;AACtE;AAgFY,IAAA,mBAAA,qBAAAyD,oBAAL,KAAA;AACL,EAAAA,qBAAA,MAAO,CAAA,GAAA,MAAA;AACP,EAAAA,qBAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,qBAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,qBAAA,aAAc,CAAA,GAAA,aAAA;AACd,EAAAA,qBAAA,UAAW,CAAA,GAAA,UAAA;AACX,EAAAA,qBAAA,aAAc,CAAA,GAAA,aAAA;AACd,EAAAA,qBAAA,SAAU,CAAA,GAAA,SAAA;AACV,EAAAA,qBAAA,YAAa,CAAA,GAAA,YAAA;AACb,EAAAA,qBAAA,UAAW,CAAA,GAAA,UAAA;AACX,EAAAA,qBAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,qBAAA,SAAU,CAAA,GAAA,SAAA;AACV,EAAAA,qBAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,qBAAA,YAAa,CAAA,GAAA,YAAA;AAbH,EAAAA,OAAAA,oBAAAA;AAAA,CAAA,EAAA,mBAAA,IAAA,EAAA;;ACtGL,SAAS,2BAA4B,CAAA;AAAA,EAC1C,MAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAA0B,EAAA;AACxB,EAAM,MAAA,mBAAA,GAAsBC,gBAAU,CAAA,EAAI,EAAA,MAAA,CAAO,QAAU,EAAA,cAAA,IAAkB,EAAC,EAAG,CAAC,QAAA,EAAU,QAAa,KAAA;AACvG,IAAI,IAAA1G,cAAA,CAAQ,QAAQ,CAAG,EAAA;AACrB,MAAO,OAAA,QAAA;AAAA;AAET,IAAA;AAAA,GACD,CAAA;AAED,EAAM,MAAA,uBAAA,GAA0B,wBAAyB,CAAA,kBAAA,EAAoB,MAAM,CAAA;AACnF,EAAA,MAAM,+BAAkC,GAAA,mBAAA,CAAoB,MAAQ,EAAA,uBAAA,EAAyB,mBAAmB,CAAA;AAEhH,EAAA,OAAO,EAAE,OAAA,EAAS,mBAAqB,EAAA,WAAA,EAAa,+BAAgC,EAAA;AACtF;AAEA,SAAS,wBAAA,CAAyB,qBAAwC,MAAwC,EAAA;AApDlH,EAAA,IAAA,EAAA;AAqDE,EAAA,MAAM,iBAAiB,MAAO,CAAA,mBAAA;AAE9B,EAAA,MAAM,MAA4B,GAAA;AAAA,IAChC,QAAU,EAAA0G,gBAAA;AAAA,MACR,EAAC;AAAA,MACD,cAAe,CAAA,QAAA;AAAA,MACf,mBAAA,GAAsB,mBAAoB,CAAA,QAAA,GAAW,EAAC;AAAA,MACtD,CAAC,UAAU,QAAa,KAAA;AACtB,QAAI,IAAA1G,cAAA,CAAQ,QAAQ,CAAG,EAAA;AACrB,UAAO,OAAA,QAAA;AAAA;AAET,QAAA;AAAA;AACF,KACF;AAAA,IACA,SAAW,EAAA,CAAA,EAAA,GAAA,mBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,mBAAA,CAAqB,SAArB,KAAA,IAAA,GAAA,EAAA,GAAkC;AAAC,GAChD;AAEA,EAAA,eAAA,CAAgB,MAAO,CAAA,QAAA,EAAU,EAAI,EAAA,MAAA,CAAO,mBAAmB,CAAA;AAG/D,EAAI,IAAA,MAAA,CAAO,SAAS,UAAY,EAAA;AAC9B,IAAc,aAAA,CAAA,MAAA,CAAO,SAAS,UAAU,CAAA;AAAA;AAI1C,EAAA,MAAA,CAAO,SAAY,GAAA,0BAAA,CAA2B,MAAO,CAAA,SAAA,EAAW,CAAC,IAAS,KAAA;AACxE,IAAA,OAAO,MAAO,CAAA,mBAAA,CAAoB,WAAY,CAAA,IAAA,CAAK,EAAE,CAAM,KAAA,KAAA,CAAA;AAAA,GAC5D,CAAA;AAED,EAAW,KAAA,MAAA,QAAA,IAAY,OAAO,SAAW,EAAA;AACvC,IAAW,KAAA,MAAA,QAAA,IAAY,SAAS,UAAY,EAAA;AAC1C,MAAI,IAAA,QAAA,CAAS,OAAO,YAAc,EAAA;AAChC,QAAA,aAAA,CAAc,SAAS,KAAK,CAAA;AAAA;AAC9B;AACF;AAGF,EAAO,OAAA,MAAA;AACT;AAMgB,SAAA,0BAAA,CACd,WACA,SACsB,EAAA;AACtB,EAAO,OAAA,SAAA,CAAU,GAAI,CAAA,CAAC,CAAM,KAAA;AAC1B,IAAA,MAAM,UAAa,GAAA,CAAA,CAAE,UAAW,CAAA,MAAA,CAAO,SAAS,CAAA;AAEhD,IAAO,OAAA;AAAA,MACL,GAAG,CAAA;AAAA,MACH;AAAA,KACF;AAAA,GACD,CAAA;AACH;AAEA,SAAS,eAAA,CAAgB,GAAa,EAAA,UAAA,EAAoB,mBAAiD,EAAA;AACzG,EAAA,IAAI,KAAQ,GAAA,KAAA;AAEZ,EAAA,KAAA,MAAW,CAAC,QAAU,EAAA,KAAK,KAAK,MAAO,CAAA,OAAA,CAAQ,GAAG,CAAG,EAAA;AACnD,IAAA,MAAM,QAAW,GAAA,CAAA,EAAG,UAAU,CAAA,EAAG,QAAQ,CAAA,CAAA;AACzC,IAAA,MAAM,gBAAmB,GAAA,CAAC,CAAC,mBAAA,CAAoB,YAAY,QAAQ,CAAA;AAGnE,IAAA,IAAI,gBAAkB,EAAA;AACpB,MAAQ,KAAA,GAAA,IAAA;AACR,MAAA;AAAA;AAGF,IAAA,IAAIA,eAAQ,KAAK,CAAA,IAAK,CAAC2G,eAAA,CAAS,KAAK,CAAG,EAAA;AACtC,MAAA,IAAI,CAAC,gBAAkB,EAAA;AACrB,QAAA5D,YAAA,CAAM,KAAK,QAAQ,CAAA;AAAA;AACrB,KACK,MAAA;AACL,MAAA,MAAM,iBAAiB,eAAgB,CAAA,KAAA,EAAO,CAAG,EAAA,QAAQ,KAAK,mBAAmB,CAAA;AAEjF,MAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,QAAAA,YAAA,CAAM,KAAK,QAAQ,CAAA;AAAA;AACrB;AACF;AAGF,EAAO,OAAA,KAAA;AACT;AAEA,SAAS,mBAAA,CACP,MACA,EAAA,WAAA,EACA,mBACmB,EAAA;AAhJrB,EAAA,IAAA,EAAA;AAiJE,EAAA,IAAI,CAAC,mBAAqB,EAAA;AACxB,IAAO,OAAA,WAAA;AAAA;AAIT,EAAA,MAAM,KAAQ,GAAA,MAAA,CAAO,mBAAoB,CAAA,WAAA,CAAY,oBAAoB,KAAK,CAAA;AAE9E,EAAI,IAAA,KAAA,IAAS,MAAM,QAAU,EAAA;AAC3B,IAAA,MAAM,gBAA0C,KAAM,CAAA,QAAA;AACtD,IAAA,MAAM,OAAO,sBAAuB,CAAA,WAAA,CAAA,CAAY,iBAAY,QAAS,CAAA,KAAA,KAArB,mBAA4B,IAAI,CAAA;AAGhF,IAAI,IAAA,CAAC,cAAc,cAAgB,EAAA;AACjC,MAAI,IAAA,CAAC,IAAQ,IAAA,IAAA,CAAK,SAAW,EAAA;AAC3B,QAAA,WAAA,CAAY,QAAS,CAAA,KAAA,GAAQ,EAAE,IAAA,EAAM,iBAAiB,cAAe,EAAA;AACrE,QAAO,OAAA,WAAA;AAAA;AACT;AAKF,IAAA,IAAI,cAAc,cAAkB,IAAA,aAAA,CAAc,yBAAwB,IAAM,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,EAAA,MAAO,iBAAiB,KAAO,EAAA;AAC7G,MAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,IAAA,CAAK,SAAW,EAAA;AAC5B,QAAA,WAAA,CAAY,QAAS,CAAA,KAAA,GAAQ,EAAE,IAAA,EAAM,iBAAiB,UAAW,EAAA;AACjE,QAAO,OAAA,WAAA;AAAA;AACT;AAOF,IAAI,IAAA,aAAA,CAAc,eAAmB,KAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,SAAW,CAAA,EAAA;AACpD,MAAA,WAAA,CAAY,QAAS,CAAA,KAAA,GAAQ,EAAE,IAAA,EAAM,iBAAiB,cAAe,EAAA;AACrE,MAAO,OAAA,WAAA;AAAA;AACT;AAEF,EAAO,OAAA,WAAA;AACT;AAEA,SAAS,cAAc,UAA8B,EAAA;AACnD,EAAI,IAAA,CAAC,WAAW,IAAM,EAAA;AACpB,IAAA,UAAA,CAAW,OAAO,cAAe,CAAA,QAAA;AAAA;AAGnC,EAAI,IAAA,CAAC,WAAW,KAAO,EAAA;AACrB,IAAA,UAAA,CAAW,QAAQ,EAAC;AAAA,GACtB,MAAA,IAAW,UAAW,CAAA,KAAA,CAAM,MAAQ,EAAA;AAGlC,IAAW,UAAA,CAAA,KAAA,CAAM,CAAC,CAAA,CAAE,KAAQ,GAAA,CAAA,QAAA;AAAA;AAEhC;AAMgB,SAAA,0BAAA,CAA2B,SAA4B,GAA2C,EAAA;AAChH,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,QAAU,EAAA;AAAA,MACR,GAAG,OAAQ,CAAA,QAAA;AAAA,MACX,MAAA,EAAQ,IAAI,QAAS,CAAA;AAAA,KACvB;AAAA,IACA,SAAW,EAAA,CAAC,GAAG,OAAA,CAAQ,SAAS;AAAA,GAClC;AAEA,EAAW,KAAA,MAAA,QAAA,IAAY,IAAI,SAAW,EAAA;AACpC,IAAW,KAAA,MAAA,IAAA,IAAQ,SAAS,UAAY,EAAA;AACtC,MAAI,IAAA,iBAAA,CAAkB,IAAI,CAAG,EAAA;AAC3B,QAAM,MAAA,eAAA,GAAkB,MAAO,CAAA,SAAA,CAAU,IAAK,CAAA,CAAC,CAAM,KAAAhC,cAAA,CAAQ,CAAE,CAAA,OAAA,EAAS,QAAS,CAAA,OAAO,CAAC,CAAA;AACzF,QAAA,IAAI,eAAiB,EAAA;AACnB,UAAA,IAAI,oBAAoB,QAAU,EAAA;AAChC,YAAgB,eAAA,CAAA,UAAA,CAAW,KAAK,IAAI,CAAA;AAAA;AACtC,SACK,MAAA;AACL,UAAO,MAAA,CAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AAAA;AAChC;AACF;AACF;AAGF,EAAO,OAAA,MAAA;AACT;AAMO,SAAS,kBAAkB,IAAmC,EAAA;AACnE,EAAO,OAAA,IAAA,CAAK,EAAG,CAAA,UAAA,CAAW,SAAS,CAAA;AACrC;AAMO,SAAS,oBAAoB,IAAmC,EAAA;AACrE,EAAO,OAAA,CAAC,kBAAkB,IAAI,CAAA;AAChC;;ACvOa,MAAA,OAAA,GAAU8E,oBAA6C,KAAS,CAAA,CAAA;;ACHtE,SAAS,sBAAsB,KAAoE,EAAA;AACxG,EAAA,MAAM,EAAE,QAAA,EAAU,GAAG,IAAA,EAAS,GAAA,KAAA;AAC9B,EAAA,sCAAQ,OAAQ,CAAA,QAAA,EAAR,EAAiB,KAAA,EAAO,MAAO,QAAS,EAAA,CAAA;AAClD;;ACHO,SAAS,gCACd,KACc,EAAA;AACd,EAAM,MAAA,EAAE,QAAU,EAAA,gBAAA,EAAqB,GAAA,KAAA;AACvC,EAAM,MAAA,KAAA,GAAqCxC,cAAQ,MAAM;AACvD,IAAA,OAAO,EAAE,gBAAA,EAAkB,IAAM,EAAA,gBAAA,CAAiB,IAAK,EAAA;AAAA,GACzD,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EAAA,uBAAQuD,cAAA,CAAA,OAAA,CAAQ,QAAR,EAAA,EAAiB,OAAe,QAAS,EAAA,CAAA;AACnD;;ACfO,SAAS,gBAA6C,GAAA;AAC3D,EAAM,MAAA,OAAA,GAAUC,iBAAW,OAAO,CAAA;AAIlC,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAO,OAAA,IAAA;AAAA;AAGT,EAAO,OAAA,OAAA;AACT;;ACZO,SAAS,0BAA0B,OAAoE,EAAA;AAC5G,EAAO,OAAA,kBAAA,IAAsB,WAAW,MAAU,IAAA,OAAA;AACpD;;ACIO,SAAS,0BAA0B,SAAmC,EAAA;AAC3E,EAAA,OAAO,SAAa,IAAA,SAAA,KAAc,qBAAsB,CAAA,KAAA,IAAS,cAAc,qBAAsB,CAAA,QAAA;AACvG;;ACVO,MAAM,mBAAsB,GAAA;AAAA,EACjC,MAAQ,EAAA,IAAA;AAAA,EACR,SAAW,EAAA,IAAA;AAAA,EACX,MAAQ,EAAA,IAAA;AAAA,EACR,MAAQ,EAAA,IAAA;AAAA,EACR,IAAM,EAAA,IAAA;AAAA,EACN,OAAS,EAAA,IAAA;AAAA,EACT,OAAS,EAAA,IAAA;AAAA,EACT,MAAQ,EAAA,IAAA;AAAA,EACR,qBAAuB,EAAA,IAAA;AAAA,EACvB,SAAW,EAAA,IAAA;AAAA,EACX,IAAM,EAAA,IAAA;AAAA,EACN,MAAQ,EAAA,IAAA;AAAA,EACR,eAAiB,EAAA,IAAA;AAAA,EACjB,mBAAqB,EAAA,IAAA;AAAA,EACrB,oBAAsB,EAAA,IAAA;AAAA,EACtB,mBAAqB,EAAA,IAAA;AAAA,EACrB,iBAAmB,EAAA,IAAA;AAAA,EACnB,YAAc,EAAA,IAAA;AAAA,EACd,YAAc,EAAA,IAAA;AAAA,EACd,aAAe,EAAA,IAAA;AAAA,EACf,UAAY,EAAA,IAAA;AAAA,EACZ,YAAc,EAAA,IAAA;AAAA,EACd,aAAe,EAAA,IAAA;AAAA,EACf,cAAgB,EAAA,IAAA;AAAA,EAChB,2BAA6B,EAAA,IAAA;AAAA,EAC7B,IAAM,EAAA,IAAA;AAAA,EACN,aAAe,EAAA,IAAA;AAAA,EACf,KAAO,EAAA,IAAA;AAAA,EACP,YAAc,EAAA,IAAA;AAAA,EACd,kBAAoB,EAAA,IAAA;AAAA,EACpB,YAAc,EAAA,IAAA;AAAA,EACd,cAAgB,EAAA,IAAA;AAAA,EAChB,aAAe,EAAA,IAAA;AAAA,EACf,gBAAkB,EAAA,IAAA;AAAA,EAClB,UAAY,EAAA,IAAA;AAAA,EACZ,UAAY,EAAA,IAAA;AAAA,EACZ,UAAY,EAAA,IAAA;AAAA,EACZ,OAAS,EAAA,IAAA;AAAA,EACT,eAAiB,EAAA,IAAA;AAAA,EACjB,mBAAqB,EAAA,IAAA;AAAA,EACrB,EAAI,EAAA,IAAA;AAAA,EACJ,EAAI,EAAA,IAAA;AAAA,EACJ,QAAU,EAAA,IAAA;AAAA,EACV,IAAM,EAAA,IAAA;AAAA,EACN,IAAM,EAAA,IAAA;AAAA,EACN,YAAc,EAAA,IAAA;AAAA,EACd,IAAM,EAAA,IAAA;AAAA,EACN,IAAM,EAAA,IAAA;AAAA,EACN,QAAU,EAAA,IAAA;AAAA,EACV,WAAa,EAAA,IAAA;AAAA,EACb,gBAAkB,EAAA,IAAA;AAAA,EAClB,aAAe,EAAA,IAAA;AAAA,EACf,GAAK,EAAA,IAAA;AAAA,EACL,QAAU,EAAA,IAAA;AAAA,EACV,gBAAkB,EAAA,IAAA;AAAA,EAClB,cAAgB,EAAA,IAAA;AAAA,EAChB,gBAAkB,EAAA,IAAA;AAAA,EAClB,MAAQ,EAAA,IAAA;AAAA,EACR,OAAS,EAAA,IAAA;AAAA,EACT,aAAe,EAAA,IAAA;AAAA,EACf,YAAc,EAAA,IAAA;AAAA,EACd,KAAO,EAAA,IAAA;AAAA,EACP,cAAgB,EAAA,IAAA;AAAA,EAChB,cAAgB,EAAA,IAAA;AAAA,EAChB,MAAQ,EAAA,IAAA;AAAA,EACR,aAAe,EAAA,IAAA;AAAA,EACf,eAAiB,EAAA,IAAA;AAAA,EACjB,YAAc,EAAA,IAAA;AAAA,EACd,KAAO,EAAA,IAAA;AAAA,EACP,gBAAkB,EAAA,IAAA;AAAA,EAClB,cAAgB,EAAA,IAAA;AAAA,EAChB,aAAe,EAAA,IAAA;AAAA,EACf,GAAK,EAAA,IAAA;AAAA,EACL,OAAS,EAAA,IAAA;AAAA,EACT,aAAe,EAAA,IAAA;AAAA,EACf,qBAAuB,EAAA,IAAA;AAAA,EACvB,mBAAqB,EAAA,IAAA;AAAA,EACrB,cAAgB,EAAA,IAAA;AAAA,EAChB,OAAS,EAAA,IAAA;AAAA,EACT,iBAAmB,EAAA,IAAA;AAAA,EACnB,IAAM,EAAA,IAAA;AAAA,EACN,uBAAyB,EAAA,IAAA;AAAA,EACzB,kBAAoB,EAAA,IAAA;AAAA,EACpB,aAAe,EAAA,IAAA;AAAA,EACf,SAAW,EAAA,IAAA;AAAA,EACX,IAAM,EAAA,IAAA;AAAA,EACN,SAAW,EAAA,IAAA;AAAA,EACX,QAAU,EAAA,IAAA;AAAA,EACV,YAAc,EAAA,IAAA;AAAA,EACd,MAAQ,EAAA,IAAA;AAAA,EACR,eAAiB,EAAA,IAAA;AAAA,EACjB,sBAAwB,EAAA,IAAA;AAAA,EACxB,cAAgB,EAAA,IAAA;AAAA,EAChB,aAAe,EAAA,IAAA;AAAA,EACf,SAAW,EAAA,IAAA;AAAA,EACX,IAAM,EAAA,IAAA;AAAA,EACN,YAAc,EAAA,IAAA;AAAA,EACd,KAAO,EAAA,IAAA;AAAA,EACP,QAAU,EAAA,IAAA;AAAA,EACV,cAAgB,EAAA,IAAA;AAAA,EAChB,sBAAwB,EAAA,IAAA;AAAA,EACxB,oBAAsB,EAAA,IAAA;AAAA,EACtB,WAAa,EAAA,IAAA;AAAA,EACb,mBAAqB,EAAA,IAAA;AAAA,EACrB,GAAK,EAAA,IAAA;AAAA,EACL,WAAa,EAAA,IAAA;AAAA,EACb,YAAc,EAAA,IAAA;AAAA;AAAA,EAEd,eAAiB,EAAA,IAAA;AAAA,EACjB,QAAU,EAAA,IAAA;AAAA,EACV,UAAY,EAAA,IAAA;AAAA,EACZ,YAAc,EAAA,IAAA;AAAA,EACd,eAAiB,EAAA,IAAA;AAAA,EACjB,eAAiB,EAAA,IAAA;AAAA,EACjB,eAAiB,EAAA,IAAA;AAAA,EACjB,aAAe,EAAA,IAAA;AAAA,EACf,oBAAsB,EAAA,IAAA;AAAA,EACtB,MAAQ,EAAA,IAAA;AAAA,EACR,IAAM,EAAA,IAAA;AAAA,EACN,MAAQ,EAAA,IAAA;AAAA,EACR,IAAM,EAAA,IAAA;AAAA,EACN,IAAM,EAAA,IAAA;AAAA,EACN,aAAe,EAAA,IAAA;AAAA,EACf,aAAe,EAAA,IAAA;AAAA,EACf,eAAiB,EAAA,IAAA;AAAA,EACjB,OAAS,EAAA,IAAA;AAAA,EACT,wBAA0B,EAAA,IAAA;AAAA,EAC1B,wBAA0B,EAAA,IAAA;AAAA,EAC1B,yBAA2B,EAAA,IAAA;AAAA,EAC3B,yBAA2B,EAAA,IAAA;AAAA,EAC3B,SAAW,EAAA,IAAA;AAAA,EACX,SAAW,EAAA,IAAA;AAAA,EACX,yBAA2B,EAAA,IAAA;AAAA,EAC3B,yBAA2B,EAAA,IAAA;AAAA,EAC3B,6BAA+B,EAAA,IAAA;AAAA,EAC/B,8BAAgC,EAAA,IAAA;AAAA,EAChC,cAAgB,EAAA,IAAA;AAAA,EAChB,kBAAoB,EAAA,IAAA;AAAA,EACpB,SAAW,EAAA,IAAA;AAAA,EACX,OAAS,EAAA,IAAA;AAAA,EACT,kBAAoB,EAAA,IAAA;AAAA,EACpB,mBAAqB,EAAA,IAAA;AAAA,EACrB,aAAe,EAAA,IAAA;AAAA,EACf,oBAAsB,EAAA,IAAA;AAAA,EACtB,iBAAmB,EAAA,IAAA;AAAA,EACnB,QAAU,EAAA,IAAA;AAAA,EACV,eAAiB,EAAA,IAAA;AAAA,EACjB,WAAa,EAAA,IAAA;AAAA,EACb,KAAO,EAAA,IAAA;AAAA,EACP,OAAS,EAAA,IAAA;AAAA,EACT,WAAa,EAAA,IAAA;AAAA,EACb,KAAO,EAAA,IAAA;AAAA,EACP,YAAc,EAAA,IAAA;AAAA,EACd,aAAe,EAAA,IAAA;AAAA,EACf,OAAS,EAAA,IAAA;AAAA,EACT,aAAe,EAAA,IAAA;AAAA,EACf,IAAM,EAAA,IAAA;AAAA,EACN,UAAY,EAAA,IAAA;AAAA,EACZ,yBAA2B,EAAA,IAAA;AAAA,EAC3B,uBAAyB,EAAA,IAAA;AAAA,EACzB,wBAA0B,EAAA,IAAA;AAAA,EAC1B,SAAW,EAAA,IAAA;AAAA,EACX,MAAQ,EAAA,IAAA;AAAA,EACR,IAAM,EAAA,IAAA;AAAA,EACN,aAAe,EAAA,IAAA;AAAA,EACf,EAAI,EAAA,IAAA;AAAA,EACJ,YAAc,EAAA,IAAA;AAAA,EACd,kBAAoB,EAAA,IAAA;AAAA,EACpB,QAAU,EAAA,IAAA;AAAA,EACV,UAAY,EAAA,IAAA;AAAA,EACZ,aAAe,EAAA,IAAA;AAAA,EACf,YAAc,EAAA,IAAA;AAAA,EACd,MAAQ,EAAA,IAAA;AAAA,EACR,cAAgB,EAAA,IAAA;AAAA,EAChB,aAAe,EAAA,IAAA;AAAA,EACf,aAAe,EAAA,IAAA;AAAA,EACf,eAAiB,EAAA,IAAA;AAAA,EACjB,UAAY,EAAA,IAAA;AAAA,EACZ,IAAM,EAAA,IAAA;AAAA,EACN,aAAe,EAAA,IAAA;AAAA,EACf,aAAe,EAAA,IAAA;AAAA,EACf,SAAW,EAAA,IAAA;AAAA,EACX,SAAW,EAAA,IAAA;AAAA,EACX,IAAM,EAAA,IAAA;AAAA,EACN,YAAc,EAAA,IAAA;AAAA,EACd,iBAAmB,EAAA,IAAA;AAAA,EACnB,kBAAoB,EAAA,IAAA;AAAA,EACpB,OAAS,EAAA,IAAA;AAAA,EACT,KAAO,EAAA,IAAA;AAAA,EACP,cAAgB,EAAA,IAAA;AAAA,EAChB,gBAAkB,EAAA,IAAA;AAAA,EAClB,OAAS,EAAA,IAAA;AAAA,EACT,YAAc,EAAA,IAAA;AAAA,EACd,OAAS,EAAA,IAAA;AAAA,EACT,WAAa,EAAA,IAAA;AAAA,EACb,SAAW,EAAA,IAAA;AAAA,EACX,kBAAoB,EAAA,IAAA;AAAA,EACpB,KAAO,EAAA,IAAA;AAAA,EACP,cAAgB,EAAA,IAAA;AAAA,EAChB,GAAK,EAAA,IAAA;AAAA,EACL,UAAY,EAAA,IAAA;AAAA,EACZ,IAAM,EAAA,IAAA;AAAA,EACN,IAAM,EAAA,IAAA;AAAA,EACN,IAAM,EAAA,IAAA;AAAA,EACN,aAAe,EAAA,IAAA;AAAA,EACf,aAAe,EAAA,IAAA;AAAA,EACf,KAAO,EAAA,IAAA;AAAA,EACP,mBAAqB,EAAA,IAAA;AAAA,EACrB,OAAS,EAAA,IAAA;AAAA,EACT,iBAAmB,EAAA,IAAA;AAAA,EACnB,cAAgB,EAAA,IAAA;AAAA,EAChB,MAAQ,EAAA,IAAA;AAAA,EACR,MAAQ,EAAA,IAAA;AAAA,EACR,gBAAkB,EAAA,IAAA;AAAA,EAClB,IAAM,EAAA,IAAA;AAAA,EACN,MAAQ,EAAA,IAAA;AAAA,EACR,cAAgB,EAAA,IAAA;AAAA,EAChB,aAAe,EAAA,IAAA;AAAA,EACf,WAAa,EAAA,IAAA;AAAA,EACb,MAAQ,EAAA,IAAA;AAAA,EACR,oBAAsB,EAAA,IAAA;AAAA,EACtB,MAAQ,EAAA,IAAA;AAAA,EACR,MAAQ,EAAA,IAAA;AAAA,EACR,OAAS,EAAA,IAAA;AAAA,EACT,OAAS,EAAA,IAAA;AAAA,EACT,KAAO,EAAA,IAAA;AAAA,EACP,eAAiB,EAAA,IAAA;AAAA,EACjB,OAAS,EAAA,IAAA;AAAA,EACT,kBAAoB,EAAA,IAAA;AAAA,EACpB,gBAAkB,EAAA,IAAA;AAAA,EAClB,cAAgB,EAAA,IAAA;AAAA,EAChB,IAAM,EAAA,IAAA;AAAA,EACN,eAAiB,EAAA,IAAA;AAAA,EACjB,SAAW,EAAA,IAAA;AAAA,EACX,iBAAmB,EAAA,IAAA;AAAA,EACnB,IAAM,EAAA,IAAA;AAAA,EACN,YAAc,EAAA,IAAA;AAAA,EACd,KAAO,EAAA,IAAA;AAAA,EACP,oBAAsB,EAAA,IAAA;AAAA,EACtB,kBAAoB,EAAA,IAAA;AAAA,EACpB,SAAW,EAAA,IAAA;AAAA,EACX,cAAgB,EAAA,IAAA;AAAA,EAChB,aAAe,EAAA,IAAA;AAAA,EACf,WAAa,EAAA,IAAA;AAAA,EACb,KAAO,EAAA,IAAA;AAAA,EACP,cAAgB,EAAA,IAAA;AAAA,EAChB,WAAa,EAAA,IAAA;AAAA,EACb,YAAc,EAAA,IAAA;AAAA,EACd,WAAa,EAAA,IAAA;AAAA,EACb,SAAW,EAAA,IAAA;AAAA,EACX,MAAQ,EAAA,IAAA;AAAA,EACR,MAAQ,EAAA,IAAA;AAAA,EACR,IAAM,EAAA,IAAA;AAAA,EACN,GAAK,EAAA,IAAA;AAAA,EACL,MAAQ,EAAA,IAAA;AAAA,EACR,aAAe,EAAA,IAAA;AAAA,EACf,WAAa,EAAA,IAAA;AAAA,EACb,aAAe,EAAA,IAAA;AAAA,EACf,uBAAyB,EAAA,IAAA;AAAA,EACzB,uBAAyB,EAAA,IAAA;AAAA,EACzB,oBAAsB,EAAA,IAAA;AAAA,EACtB,aAAe,EAAA,IAAA;AAAA,EACf,iBAAmB,EAAA,IAAA;AAAA,EACnB,WAAa,EAAA,IAAA;AAAA,EACb,MAAQ,EAAA,IAAA;AAAA,EACR,GAAK,EAAA,IAAA;AAAA,EACL,CAAG,EAAA,IAAA;AAAA,EACH,UAAY,EAAA,IAAA;AAAA,EACZ,MAAQ,EAAA,IAAA;AAAA,EACR,YAAc,EAAA,IAAA;AAAA,EACd,YAAc,EAAA;AAChB;AAIO,SAAS,WAAW,QAAyC,EAAA;AAClE,EAAA,IAAI,CAAC,QAAA,IAAY,OAAO,QAAA,KAAa,QAAU,EAAA;AAC7C,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,OAAO,QAAY,IAAA,mBAAA;AACrB;AAEO,SAAS,WAAW,QAAwC,EAAA;AACjE,EAAI,IAAA,UAAA,CAAW,QAAQ,CAAG,EAAA;AACxB,IAAO,OAAA,QAAA;AAAA;AAGT,EAAO,OAAA,KAAA,CAAA;AACT;;AC/RY,IAAA,UAAA,qBAAAC,WAAL,KAAA;AACL,EAAAA,YAAA,QAAS,CAAA,GAAA,SAAA;AACT,EAAAA,YAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,YAAA,UAAW,CAAA,GAAA,UAAA;AACX,EAAAA,YAAA,IAAK,CAAA,GAAA,IAAA;AACL,EAAAA,YAAA,SAAU,CAAA,GAAA,SAAA;AACV,EAAAA,YAAA,YAAa,CAAA,GAAA,YAAA;AACb,EAAAA,YAAA,SAAU,CAAA,GAAA,SAAA;AAPA,EAAAA,OAAAA,WAAAA;AAAA,CAAA,EAAA,UAAA,IAAA,EAAA;;ACcA,IAAA,mBAAA,qBAAAC,oBAAL,KAAA;AACL,EAAAA,qBAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,qBAAA,UAAW,CAAA,GAAA,UAAA;AACX,EAAAA,qBAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,qBAAA,YAAa,CAAA,GAAA,YAAA;AAJH,EAAAA,OAAAA,oBAAAA;AAAA,CAAA,EAAA,mBAAA,IAAA,EAAA;AAUL,MAAe,mBAIpB,CAAA;AAOF;AAKO,MAAe,gCAIZ,mBAA8C,CAAA;AAAA,EACtD,OAA+B,GAAA;AAC7B,IAAO,OAAA,UAAA;AAAA;AAKX;AAKO,MAAe,8BAKZ,mBAA8C,CAAA;AAAA,EACtD,OAA+B,GAAA;AAC7B,IAAO,OAAA,QAAA;AAAA;AAaX;AAKO,MAAe,kCAIZ,mBAA8C,CAAA;AAAA,EACtD,OAA+B,GAAA;AAC7B,IAAO,OAAA,YAAA;AAAA;AAEX;;ACjFO,MAAM,SAAY,GAAA;AAAA,EACvB,YAAA,EAAc,aAA2B,eAAe,CAAA;AAAA,EACxD,YAAA,EAAc,aAA2B,eAAe,CAAA;AAAA,EACxD,UAAA,EAAY,aAAgC,aAAa,CAAA;AAAA,EACzD,SAAA,EAAW,aAA2B,YAAY;AACpD;AAEO,MAAM,WAAc,GAAA;AAAA,EACzB,OAAA,EAAS,aAAa,SAAS,CAAA;AAAA,EAC/B,iBAAA,EAAmB,aAAa,qBAAqB,CAAA;AAAA,EACrD,YAAA,EAAc,aAAsC,eAAe,CAAA;AAAA,EACnE,SAAA,EAAW,aAA6B,YAAY,CAAA;AAAA,EACpD,kBAAA,EAAoB,aAA0B,sBAAsB,CAAA;AAAA,EACpE,gBAAA,EAAkB,aAAsC,oBAAoB,CAAA;AAAA,EAC5E,mBAAA,EAAqB,aAAa,gBAAgB,CAAA;AAAA,EAClD,gBAAA,EAAkB,aAAqC,oBAAoB,CAAA;AAAA,EAC3E,WAAA,EAAa,aAAa,mBAAmB,CAAA;AAAA,EAC7C,aAAA,EAAe,aAAa,gBAAgB,CAAA;AAAA,EAC5C,MAAA,EAAQ,aAAkB,QAAQ;AACpC;AAWO,MAAM,8BAA8B,mBAAkD,CAAA;AAE7F;AAFa,qBAAA,CACJ,IAAO,GAAA,aAAA;AAIT,MAAM,mCAAmC,YAAa,CAAA;AAAA,EAAtD,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAEL,IAA4B,IAAA,CAAA,OAAA,GAAA,EAAE,KAAO,EAAA,EAAG,EAAA;AAAA;AAC1C;AAHa,0BAAA,CACJ,IAAO,GAAA,mBAAA;;ACzCJ,IAAA,OAAA,qBAAAC,QAAL,KAAA;AACL,EAAAA,SAAA,MAAO,CAAA,GAAA,MAAA;AACP,EAAAA,SAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,SAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,SAAA,OAAQ,CAAA,GAAA,OAAA;AAJE,EAAAA,OAAAA,QAAAA;AAAA,CAAA,EAAA,OAAA,IAAA,EAAA;;ACqBA,IAAA,eAAA,qBAAAC,gBAAL,KAAA;AACL,EAAAA,gBAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAA;AACA,EAAAA,gBAAA,CAAA,gBAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAA;AACA,EAAAA,gBAAA,CAAA,gBAAA,CAAA,oBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,oBAAA;AAHU,EAAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AAMA,IAAA,YAAA,qBAAAC,aAAL,KAAA;AACL,EAAAA,aAAA,CAAA,aAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAA;AACA,EAAAA,aAAA,CAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAA;AACA,EAAAA,aAAA,CAAA,aAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,kBAAA;AACA,EAAAA,aAAA,CAAA,aAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAA;AACA,EAAAA,aAAA,CAAA,aAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAA;AACA,EAAAA,aAAA,CAAA,aAAA,CAAA,gCAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gCAAA;AACA,EAAAA,aAAA,CAAA,aAAA,CAAA,iCAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iCAAA;AACA,EAAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAA;AACA,EAAAA,aAAA,CAAA,aAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAA;AATU,EAAAA,OAAAA,aAAAA;AAAA,CAAA,EAAA,YAAA,IAAA,EAAA;AAYA,IAAA,YAAA,qBAAAC,aAAL,KAAA;AACL,EAAAA,aAAA,CAAA,aAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAA;AACA,EAAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAA;AACA,EAAAA,aAAA,CAAA,aAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAA;AAHU,EAAAA,OAAAA,aAAAA;AAAA,CAAA,EAAA,YAAA,IAAA,EAAA;;ACpCA,IAAA,gBAAA,qBAAAC,iBAAL,KAAA;AACL,EAAAA,kBAAA,YAAa,CAAA,GAAA,IAAA;AACb,EAAAA,kBAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,kBAAA,SAAU,CAAA,GAAA,SAAA;AACV,EAAAA,kBAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,kBAAA,OAAQ,CAAA,GAAA,OAAA;AALE,EAAAA,OAAAA,iBAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA;AAaA,IAAA,eAAA,qBAAAC,gBAAL,KAAA;AACL,EAAAA,iBAAA,YAAa,CAAA,GAAA,QAAA;AACb,EAAAA,iBAAA,WAAY,CAAA,GAAA,OAAA;AACZ,EAAAA,iBAAA,MAAO,CAAA,GAAA,MAAA;AAHG,EAAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AAMA,IAAA,0BAAA,qBAAAC,2BAAL,KAAA;AAEL,EAAAA,4BAAA,SAAU,CAAA,GAAA,SAAA;AAEV,EAAAA,4BAAA,WAAY,CAAA,GAAA,WAAA;AAEZ,EAAAA,4BAAA,YAAa,CAAA,GAAA,YAAA;AAEb,EAAAA,4BAAA,cAAe,CAAA,GAAA,cAAA;AAEf,EAAAA,4BAAA,UAAW,CAAA,GAAA,UAAA;AAEX,EAAAA,4BAAA,SAAU,CAAA,GAAA,SAAA;AAZA,EAAAA,OAAAA,2BAAAA;AAAA,CAAA,EAAA,0BAAA,IAAA,EAAA;AAeA,IAAA,oBAAA,qBAAAC,qBAAL,KAAA;AACL,EAAAA,sBAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,sBAAA,MAAO,CAAA,GAAA,MAAA;AACP,EAAAA,sBAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,sBAAA,SAAU,CAAA,GAAA,SAAA;AAJA,EAAAA,OAAAA,qBAAAA;AAAA,CAAA,EAAA,oBAAA,IAAA,EAAA;AAgEL,SAAS,yBAA4B,GAAyD,EAAA;AACnG,EAAA,OAAO,IAAI,IAAS,KAAA,QAAA;AACtB;AAEO,SAAS,uBAA0B,GAAuD,EAAA;AAC/F,EAAA,OAAO,IAAI,IAAS,KAAA,MAAA;AACtB;AAEO,SAAS,wBAA2B,GAAwD,EAAA;AACjG,EAAA,OAAO,IAAI,IAAS,KAAA,OAAA;AACtB;AAEO,SAAS,0BAA6B,GAA6D,EAAA;AACxG,EAAA,OAAO,IAAI,IAAS,KAAA,SAAA;AACtB;AAmCO,SAAS,wBAAwB,EAA6C,EAAA;AACnF,EAAA,IAAI,yBAAI,MAAQ,EAAA;AACd,IAAA,IAAI,KAAQ,GAAA,EAAA,CAAG,IAAK,EAAA,CAAE,MAAM,GAAG,CAAA;AAC/B,IAAI,IAAA,KAAA,CAAM,UAAU,CAAG,EAAA;AACrB,MAAO,OAAA;AAAA,QACL,KAAA,EAAO,MAAM,CAAC,CAAA;AAAA,QACd,SAAA,EAAW,MAAM,CAAC,CAAA;AAAA,QAClB,MAAM,KAAM,CAAA,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,GAAG;AAAA,OAC/B;AAAA;AACF;AAEF,EAAO,OAAA,KAAA,CAAA;AACT;AAOO,SAAS,0BAA0B,IAAuD,EAAA;AAC/F,EAAA,OAAO,CAAC,EAAE,CAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,IAAQ,KAAA,IAAA,CAAK,aAAa,IAAK,CAAA,KAAA,CAAA;AACjD;AAOO,SAAS,gBAAgB,IAAyC,EAAA;AACvE,EAAI,IAAA,CAAC,KAAK,KAAO,EAAA;AACf,IAAO,OAAA,EAAA;AAAA;AAET,EAAA,IAAI,KAAa,IAAK,CAAA,KAAA;AACtB,EAAI,IAAA,CAAC,KAAK,SAAW,EAAA;AACnB,IAAO,OAAA,EAAA;AAAA;AAET,EAAA,EAAA,IAAM,MAAM,IAAK,CAAA,SAAA;AACjB,EAAI,IAAA,CAAC,KAAK,IAAM,EAAA;AACd,IAAO,OAAA,EAAA;AAAA;AAET,EAAO,OAAA,EAAA,GAAK,MAAM,IAAK,CAAA,IAAA;AACzB;;ACxLY,IAAA,oBAAA,qBAAAC,qBAAL,KAAA;AACL,EAAAA,sBAAA,MAAO,CAAA,GAAA,MAAA;AACP,EAAAA,sBAAA,WAAY,CAAA,GAAA,WAAA;AACZ,EAAAA,sBAAA,UAAW,CAAA,GAAA,UAAA;AAHD,EAAAA,OAAAA,qBAAAA;AAAA,CAAA,EAAA,oBAAA,IAAA,EAAA;AAyKA,IAAA,qBAAA,qBAAAC,sBAAL,KAAA;AACL,EAAAA,uBAAA,qBAAsB,CAAA,GAAA,kCAAA;AACtB,EAAAA,uBAAA,kBAAmB,CAAA,GAAA,uBAAA;AACnB,EAAAA,uBAAA,4BAA6B,CAAA,GAAA,sCAAA;AAC7B,EAAAA,uBAAA,6BAA8B,CAAA,GAAA,uCAAA;AAC9B,EAAAA,uBAAA,gBAAiB,CAAA,GAAA,+BAAA;AACjB,EAAAA,uBAAA,oBAAqB,CAAA,GAAA,8BAAA;AACrB,EAAAA,uBAAA,kBAAmB,CAAA,GAAA,4BAAA;AACnB,EAAAA,uBAAA,sBAAuB,CAAA,GAAA,gCAAA;AACvB,EAAAA,uBAAA,gBAAiB,CAAA,GAAA,0BAAA;AACjB,EAAAA,uBAAA,kBAAmB,CAAA,GAAA,2BAAA;AACnB,EAAAA,uBAAA,mCAAoC,CAAA,GAAA,+CAAA;AAX1B,EAAAA,OAAAA,sBAAAA;AAAA,CAAA,EAAA,qBAAA,IAAA,EAAA;;AChKL,SAAS,0BAA0B,KAAiD,EAAA;AACzF,EAAM,MAAA,SAAA,uBAAgB,GAAI,CAAA,CAAC,UAAU,YAAc,EAAA,QAAA,EAAU,YAAY,CAAC,CAAA;AAC1E,EAAO,OAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AAC5B;AAEO,MAAM,sBAA8D,GAAA;AAAA,EACzE,GAAK,EAAA,QAAA;AAAA,EACL,IAAM,EAAA,YAAA;AAAA,EACN,IAAM,EAAA,aAAA;AAAA,EACN,IAAM,EAAA,iBAAA;AAAA,EACN,IAAM,EAAA,QAAA;AAAA,EACN,KAAO,EAAA;AACT;AAEO,MAAM,gCAAqE,MAAO,CAAA,WAAA;AAAA,EACvF,MAAO,CAAA,OAAA,CAAQ,sBAAsB,CAAA,CAAE,GAAI,CAAA,CAAC,CAAC,MAAA,EAAQ,QAAQ,CAAA,KAAM,CAAC,QAAA,EAAU,MAAM,CAAC;AAAA;AAEvF;;AC2KY,IAAA,cAAA,qBAAAC,eAAL,KAAA;AACL,EAAAA,gBAAA,MAAO,CAAA,GAAA,MAAA;AACP,EAAAA,gBAAA,UAAW,CAAA,GAAA,UAAA;AACX,EAAAA,gBAAA,YAAa,CAAA,GAAA,YAAA;AAHH,EAAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;AAyCA,IAAA,4BAAA,qBAAAC,6BAAL,KAAA;AAEL,EAAAA,6BAAAA,CAAAA,6BAAAA,CAAA,UAAO,GAAP,CAAA,GAAA,MAAA;AAEA,EAAAA,6BAAAA,CAAAA,6BAAAA,CAAA,UAAO,EAAP,CAAA,GAAA,MAAA;AAEA,EAAAA,6BAAAA,CAAAA,6BAAAA,CAAA,QAAK,EAAL,CAAA,GAAA,IAAA;AANU,EAAAA,OAAAA,6BAAAA;AAAA,CAAA,EAAA,4BAAA,IAAA,EAAA;AA+BL,MAAM,+BAAgC,CAAA;AAAA,EAU3C,WAAA,CAAY,MAAkB,KAAoB,EAAA;AAFlD,IAAA,IAAA,CAAQ,OAAkC,EAAC;AAGzC,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA;AACZ,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AACb,IAAK,IAAA,CAAA,WAAA,GAAc,KAAK,kBAAmB,EAAA;AAAA;AAC7C,EAEA,gBAAwC,QAA2D,EAAA;AACjG,IAAA,OAAO,IAAI,oCAAA,CAA6D,IAAK,CAAA,IAAA,EAAM,QAAQ,CAAA;AAAA;AAC7F,EAEQ,kBAAqB,GAAA;AA9S/B,IAAA,IAAA,EAAA,EAAA,EAAA;AA+SI,IAAA,MAAM,MAAS,GAAA,CAAA,CAAA,EAAA,GAAA,IAAA,CAAK,IAAL,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAW,WAAU,EAAC;AAErC,IAAA,IAAI,gBAAmB,GAAA,CAAA;AACvB,IAAA,IAAI,cAAiB,GAAA,CAAA;AACrB,IAAA,IAAI,gBAAmB,GAAA,CAAA;AACvB,IAAA,IAAI,aAAgB,GAAA,CAAA;AACpB,IAAA,IAAI,WAAc,GAAA,CAAA;AAClB,IAAA,IAAI,UAAa,GAAA,CAAA;AACjB,IAAI,IAAA,0BAAA;AAEJ,IAAA,KAAA,MAAW,SAAS,MAAQ,EAAA;AAC1B,MAAA,aAAA,IAAiB,KAAM,CAAA,MAAA;AAEvB,MAAI,IAAA,CAAA,EAAA,GAAA,KAAA,CAAM,IAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAY,0BAA4B,EAAA;AAC1C,QAAA,0BAAA,GAA6B,MAAM,IAAK,CAAA,0BAAA;AAAA;AAG1C,MAAW,KAAA,MAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AAChC,QAAA,UAAA,EAAA;AAEA,QAAA,QAAQ,MAAM,IAAM;AAAA,UAClB,KAAK,SAAU,CAAA,MAAA;AACb,YAAoB,gBAAA,IAAA,CAAA;AACpB,YAAA;AAAA,UACF,KAAK,SAAU,CAAA,IAAA;AACb,YAAkB,cAAA,IAAA,CAAA;AAClB,YAAA;AAAA,UACF,KAAK,SAAU,CAAA,MAAA;AACb,YAAoB,gBAAA,IAAA,CAAA;AACpB,YAAA;AAAA;AACJ;AAGF,MAAI,IAAA,KAAA,CAAM,SAAS,WAAa,EAAA;AAC9B,QAAA,WAAA,GAAc,KAAM,CAAA,MAAA;AAAA;AACtB;AAGF,IAAO,OAAA;AAAA,MACL,gBAAA;AAAA,MACA,cAAA;AAAA,MACA,gBAAA;AAAA,MACA,aAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,0BAAA;AAAA,MACA,YAAY,MAAO,CAAA,MAAA;AAAA,MACnB,SAAS,aAAgB,GAAA,CAAA;AAAA,MACzB,cAAc,cAAiB,GAAA,CAAA;AAAA,MAC/B,gBAAgB,gBAAmB,GAAA,CAAA;AAAA,MACnC,gBAAgB,gBAAmB,GAAA;AAAA,KACrC;AAAA;AACF,EAEA,OAAU,GAAA;AACR,IAAA,OAAO,IAAK,CAAA,IAAA;AAAA;AAEhB;AAgBO,MAAM,oCAA6D,CAAA;AAAA,EACxE,WAAA,CACU,MACA,QACR,EAAA;AAFQ,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA;AACP,EAEH,OAAO,SAAqE,EAAA;AAC1E,IAAA,IAAA,CAAK,KAAK,IAAK,CAAAC,mBAAA,CAAa,SAAW,EAAA,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA;AAEzD;;AC5VO,MAAM,yBAKH,aAA8C,CAAA;AAAA,EAGtD,YAAmB,eAAkE,EAAA;AACnF,IAAM,KAAA,EAAA;AADW,IAAA,IAAA,CAAA,eAAA,GAAA,eAAA;AAFnB,IAAA,IAAA,CAAA,UAAA,GAAmF,EAAC;AAAA;AAIpF,EAEA,gBAAgB,MAAqF,EAAA;AACnG,IAAA,IAAA,CAAK,WAAW,YAAe,GAAA,MAAA;AAC/B,IAAO,OAAA,IAAA;AAAA;AACT;AAAA,EAGA,cAAc,UAAiB,EAAA;AAC7B,IAAA,kBAAA,CAAmB,oBAAoB,eAAe,CAAA;AACtD,IAAA,IAAA,CAAK,iBAAoB,GAAA,UAAA;AACzB,IAAO,OAAA,IAAA;AAAA;AACT;AAAA,EAGA,aAAa,SAAgB,EAAA;AAC3B,IAAA,kBAAA,CAAmB,oBAAoB,cAAc,CAAA;AACrD,IAAA,IAAA,CAAK,WAAW,SAAY,GAAA,SAAA;AAC5B,IAAO,OAAA,IAAA;AAAA;AACT;AAAA,EAGA,uBAAuB,oBAA2B,EAAA;AAChD,IAAA,IAAA,CAAK,WAAW,oBAAuB,GAAA,oBAAA;AACvC,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,eAAe,WAAwE,EAAA;AACrF,IAAA,IAAA,CAAK,WAAW,WAAc,GAAA,WAAA;AAC9B,IAAO,OAAA,IAAA;AAAA;AACT;AAAA,EAGA,qBAAqB,iBAA8E,EAAA;AACjG,IAAA,IAAA,CAAK,WAAW,iBAAoB,GAAA,iBAAA;AACpC,IAAO,OAAA,IAAA;AAAA;AACT;AAAA,EAGA,4BAA4B,iBAA8E,EAAA;AACxG,IAAA,IAAA,CAAK,WAAW,wBAA2B,GAAA,iBAAA;AAC3C,IAAO,OAAA,IAAA;AAAA;AACT;AAAA,EAGA,yBAAyB,iBAA8E,EAAA;AACrG,IAAA,IAAA,CAAK,WAAW,qBAAwB,GAAA,iBAAA;AACxC,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,mBAAmB,eAA8D,EAAA;AAC/E,IAAA,IAAA,CAAK,WAAW,eAAkB,GAAA,eAAA;AAClC,IAAO,OAAA,IAAA;AAAA;AACT;AAAA;AAAA;AAAA,EAKA,oBAAoB,gBAA+D,EAAA;AACjF,IAAO,OAAA,IAAA,CAAK,mBAAmB,gBAAgB,CAAA;AAAA;AACjD;AAAA;AAAA;AAAA,EAKA,uBAAuB,mBAA0B,EAAA;AAC/C,IAAA,IAAA,CAAK,WAAW,mBAAsB,GAAA,mBAAA;AACtC,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,qBAAqB,iBAAoF,EAAA;AACvG,IAAA,IAAA,CAAK,WAAW,iBAAoB,GAAA,iBAAA;AACpC,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,+BAA+B,aAA8B,EAAA;AAC3D,IAAA,cAAA,CAAe,aAAa,CAAA;AAE5B,IAAK,IAAA,CAAA,UAAA,CAAW,YAAY,aAAc,CAAA,SAAA;AAC1C,IAAK,IAAA,CAAA,UAAA,CAAW,uBAAuB,aAAc,CAAA,oBAAA;AACrD,IAAK,IAAA,CAAA,UAAA,CAAW,oBAAoB,aAAc,CAAA,iBAAA;AAClD,IAAK,IAAA,CAAA,UAAA,CAAW,cAAc,aAAc,CAAA,WAAA;AAC5C,IAAK,IAAA,CAAA,UAAA,CAAW,kBAAkB,aAAc,CAAA,eAAA;AAChD,IAAK,IAAA,CAAA,UAAA,CAAW,sBAAsB,aAAc,CAAA,mBAAA;AAAA;AAExD;AAyEA,MAAe,aAIb,CAAA;AAAA,EA+BA,YAAY,gBAAwD,EAAA;AAClE,IAAA,IAAA,CAAK,OAAO,gBAAiB,CAAA,IAAA;AAC7B,IAAA,IAAA,CAAK,KAAK,gBAAiB,CAAA,EAAA;AAC3B,IAAA,IAAA,CAAK,OAAO,gBAAiB,CAAA,IAAA;AAC7B,IAAA,IAAA,CAAK,OAAO,gBAAiB,CAAA,IAAA;AAC7B,IAAA,IAAA,CAAK,gBAAgB,gBAAiB,CAAA,aAAA;AACtC,IAAA,IAAA,CAAK,MAAM,gBAAiB,CAAA,GAAA;AAC5B,IAAA,IAAA,CAAK,aAAa,gBAAiB,CAAA,UAAA;AAAA;AACrC;AAAA;AAAA;AAAA;AAAA,EAmCA,YAAa,KAAwB,EAAA;AACnC,IAAO,OAAA,IAAA;AAAA;AACT;AAAA,EAuDA,MAAwB,GAAA;AACtB,IAAA,MAAM,MAAqB,EAAE,IAAA,EAAM,KAAK,IAAM,EAAA,GAAA,EAAK,KAAK,GAAI,EAAA;AAC5D,IAAA,IAAI,KAAK,UAAY,EAAA;AACnB,MAAA,GAAA,CAAI,aAAa,IAAK,CAAA,UAAA;AAAA;AAExB,IAAO,OAAA,GAAA;AAAA;AAuCX;AA4EY,IAAA,WAAA,qBAAAC,YAAL,KAAA;AACL,EAAAA,aAAA,MAAO,CAAA,GAAA,MAAA;AACP,EAAAA,aAAA,SAAU,CAAA,GAAA,SAAA;AACV,EAAAA,aAAA,SAAU,CAAA,GAAA,SAAA;AAHA,EAAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AAgEA,IAAA,kBAAA,qBAAAC,mBAAL,KAAA;AACL,EAAAA,oBAAA,WAAY,CAAA,GAAA,WAAA;AACZ,EAAAA,oBAAA,SAAU,CAAA,GAAA,SAAA;AACV,EAAAA,oBAAA,SAAU,CAAA,GAAA,SAAA;AAHA,EAAAA,OAAAA,mBAAAA;AAAA,CAAA,EAAA,kBAAA,IAAA,EAAA;AA8NZ,MAAe,gBAAiB,CAAA;AAUhC;AAGA,gBAAA,GAAmB,uBAAuB,gBAAgB,CAAA;AAI1D,aAAA,GAAgB,uBAAuB,aAAa,CAAA;;ACzuBxC,IAAA,OAAA,qBAAAC,QAAL,KAAA;AACL,EAAAA,SAAA,eAAgB,CAAA,GAAA,gBAAA;AAChB,EAAAA,SAAA,iBAAkB,CAAA,GAAA,kBAAA;AAClB,EAAAA,SAAA,WAAY,CAAA,GAAA,WAAA;AACZ,EAAAA,SAAA,SAAU,CAAA,GAAA,SAAA;AACV,EAAAA,SAAA,cAAe,CAAA,GAAA,cAAA;AACf,EAAAA,SAAA,SAAU,CAAA,GAAA,SAAA;AACV,EAAAA,SAAA,aAAc,CAAA,GAAA,cAAA;AACd,EAAAA,SAAA,aAAc,CAAA,GAAA,cAAA;AARJ,EAAAA,OAAAA,QAAAA;AAAA,CAAA,EAAA,OAAA,IAAA,EAAA;AAyCL,MAAM,kBAAiD,aAAgC,CAAA;AAAA,EAAvF,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AACL,IAAA,IAAA,CAAQ,2BAAoE,EAAC;AAC7E,IAAA,IAAA,CAAQ,yBAAgE,EAAC;AACzE,IAAA,IAAA,CAAQ,oBAAsD,EAAC;AAC/D,IAAA,IAAA,CAAQ,wBAA8D,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUvE,KAAK,IAAwB,EAAA;AAAA;AAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ9B,YAAY,IAAsC,EAAA;AAChD,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA;AACZ,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,+BAA+B,aAA8B,EAAA;AAC3D,IAAA,cAAA,CAAe,aAAa,CAAA;AAE5B,IAAA,IAAI,IAAK,CAAA,IAAA,IAAQ,IAAK,CAAA,IAAA,CAAK,QAAU,EAAA;AACnC,MAAW,KAAA,MAAA,OAAA,IAAW,IAAK,CAAA,IAAA,CAAK,QAAU,EAAA;AACxC,QAAA,IAAI,OAAQ,CAAA,IAAA,KAAS,iBAAkB,CAAA,IAAA,IAAQ,QAAQ,SAAW,EAAA;AAChE,UAAM,MAAA,GAAA,GAAM,aAAc,CAAA,OAAA,CAAQ,SAAS,CAAA;AAE3C,UAAA,IAAI,CAAC,GAAK,EAAA;AACR,YAAA,OAAA,CAAQ,IAAK,CAAA,mCAAA,EAAqC,OAAQ,CAAA,SAAA,EAAW,KAAK,IAAI,CAAA;AAC9E,YAAA;AAAA;AACF;AACF;AACF;AACF;AACF,EAEA,IAAI,uBAA0B,GAAA;AAC5B,IAAA,OAAO,IAAK,CAAA,wBAAA;AAAA;AACd,EAEA,IAAI,qBAAwB,GAAA;AAC1B,IAAA,OAAO,IAAK,CAAA,sBAAA;AAAA;AACd,EAEA,IAAI,gBAAmB,GAAA;AACrB,IAAA,OAAO,IAAK,CAAA,iBAAA;AAAA;AACd,EAEA,IAAI,oBAAuB,GAAA;AACzB,IAAA,OAAO,IAAK,CAAA,qBAAA;AAAA;AACd,EAEA,QAAgC,UAAqD,EAAA;AACnF,IAAK,IAAA,CAAA,iBAAA,CAAkB,KAAK,UAA4C,CAAA;AAExE,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,aAAyB,oBAAkE,EAAA;AACzF,IAAK,IAAA,CAAA,sBAAA,CAAuB,KAAK,oBAA2D,CAAA;AAE5F,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,YAAuB,mBAAoE,EAAA;AACzF,IAAK,IAAA,CAAA,qBAAA,CAAsB,KAAK,mBAAmB,CAAA;AAEnD,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,gBAA4B,eAA+D,EAAA;AACzF,IAAK,IAAA,CAAA,wBAAA,CAAyB,KAAK,eAAwD,CAAA;AAE3F,IAAO,OAAA,IAAA;AAAA;AAEX;AAMY,IAAA,YAAA,qBAAAC,aAAL,KAAA;AAEL,EAAAA,cAAA,OAAQ,CAAA,GAAA,OAAA;AAER,EAAAA,cAAA,MAAO,CAAA,GAAA,MAAA;AAEP,EAAAA,cAAA,cAAe,CAAA,GAAA,cAAA;AAEf,EAAAA,cAAA,gBAAiB,CAAA,GAAA,iBAAA;AAEjB,EAAAA,cAAA,SAAU,CAAA,GAAA,SAAA;AAEV,EAAAA,cAAA,KAAM,CAAA,GAAA,KAAA;AAZI,EAAAA,OAAAA,aAAAA;AAAA,CAAA,EAAA,YAAA,IAAA,EAAA;;ACrIL,SAAS,gCAAmC,GAAA;AACjD,EAAA,IAAI,CAAC,MAAO,CAAA,wBAAA,CAAyB,KAAM,CAAA,SAAA,EAAW,SAAS,CAAG,EAAA;AAChE,IAAO,MAAA,CAAA,gBAAA,CAAiB,MAAM,SAAW,EAAA;AAAA,MACvC,GAAK,EAAA;AAAA,QACH,KAAA,EAAO,SAAU,GAAa,EAAA;AAC5B,UAAA,OAAO,KAAK,GAAG,CAAA;AAAA,SACjB;AAAA,QACA,QAAU,EAAA,IAAA;AAAA,QACV,UAAY,EAAA,KAAA;AAAA,QACZ,YAAc,EAAA;AAAA,OAChB;AAAA,MACA,GAAK,EAAA;AAAA,QACH,KAAA,EAAO,SAAU,GAAA,EAAa,KAAgB,EAAA;AAC5C,UAAA,IAAA,CAAK,GAAG,CAAI,GAAA,KAAA;AAAA,SACd;AAAA,QACA,QAAU,EAAA,IAAA;AAAA,QACV,UAAY,EAAA,KAAA;AAAA,QACZ,YAAc,EAAA;AAAA,OAChB;AAAA,MACA,GAAK,EAAA;AAAA,QACH,KAAA,EAAO,SAAU,KAAgB,EAAA;AAC/B,UAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,SACjB;AAAA,QACA,QAAU,EAAA,IAAA;AAAA,QACV,UAAY,EAAA,KAAA;AAAA,QACZ,YAAc,EAAA;AAAA,OAChB;AAAA,MACA,OAAS,EAAA;AAAA,QACP,OAAO,WAAY;AACjB,UAAO,OAAA,IAAA;AAAA,SACT;AAAA,QACA,QAAU,EAAA,IAAA;AAAA,QACV,UAAY,EAAA,KAAA;AAAA,QACZ,YAAc,EAAA;AAAA;AAChB,KACD,CAAA;AAAA;AAEL;AAEA,gCAAiC,EAAA;;ACMrB,IAAA,cAAA,qBAAAC,eAAL,KAAA;AACL,EAAAA,eAAA,CAAA,eAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAA;AACA,EAAAA,eAAA,CAAA,eAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AACA,EAAAA,eAAA,CAAA,eAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AAHU,EAAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;;AC3CA,IAAA,QAAA,qBAAAC,SAAL,KAAA;AACL,EAAAA,UAAA,OAAQ,CAAA,GAAA,UAAA;AACR,EAAAA,UAAA,OAAQ,CAAA,GAAA,UAAA;AACR,EAAAA,UAAA,OAAQ,CAAA,GAAA,UAAA;AACR,EAAAA,UAAA,MAAO,CAAA,GAAA,UAAA;AACP,EAAAA,UAAA,UAAW,CAAA,GAAA,UAAA;AACX,EAAAA,UAAA,MAAO,CAAA,GAAA,SAAA;AACP,EAAAA,UAAA,SAAU,CAAA,GAAA,SAAA;AACV,EAAAA,UAAA,KAAM,CAAA,GAAA,OAAA;AACN,EAAAA,UAAA,MAAO,CAAA,GAAA,OAAA;AACP,EAAAA,UAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,UAAA,MAAO,CAAA,GAAA,MAAA;AACP,EAAAA,UAAA,aAAc,CAAA,GAAA,MAAA;AACd,EAAAA,UAAA,eAAgB,CAAA,GAAA,MAAA;AAChB,EAAAA,UAAA,QAAS,CAAA,GAAA,MAAA;AACT,EAAAA,UAAA,MAAO,CAAA,GAAA,OAAA;AACP,EAAAA,UAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,UAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,UAAA,SAAU,CAAA,GAAA,SAAA;AAlBA,EAAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;AAyBL,MAAM,eAA4C,GAAA;AAAA,EACvD,GAAK,EAAA,UAAA;AAAA,EACL,GAAK,EAAA,UAAA;AAAA,EACL,GAAK,EAAA,UAAA;AAAA,EACL,GAAK,EAAA,OAAA;AAAA,EACL,GAAK,EAAA,SAAA;AAAA,EACL,GAAK,EAAA,MAAA;AAAA,EACL,GAAK,EAAA,MAAA;AAAA,EACL,GAAK,EAAA,OAAA;AACP;AAGY,IAAA,YAAA,qBAAAC,aAAL,KAAA;AACL,EAAAA,aAAA,CAAA,aAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AACA,EAAAA,aAAA,CAAA,aAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AACA,EAAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAA;AACA,EAAAA,aAAA,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAA;AAJU,EAAAA,OAAAA,aAAAA;AAAA,CAAA,EAAA,YAAA,IAAA,EAAA;AAyEA,IAAA,oBAAA,qBAAAC,qBAAL,KAAA;AACL,EAAAA,sBAAA,MAAO,CAAA,GAAA,mBAAA;AACP,EAAAA,sBAAA,OAAQ,CAAA,GAAA,gFAAA;AACR,EAAAA,sBAAA,SAAU,CAAA,GAAA,6GAAA;AACV,EAAAA,sBAAA,WAAY,CAAA,GAAA,oFAAA;AAJF,EAAAA,OAAAA,qBAAAA;AAAA,CAAA,EAAA,oBAAA,IAAA,EAAA;AAaA,IAAA,2BAAA,qBAAAC,4BAAL,KAAA;AACL,EAAAA,6BAAA,UAAW,CAAA,GAAA,UAAA;AACX,EAAAA,6BAAA,SAAU,CAAA,GAAA,SAAA;AAFA,EAAAA,OAAAA,4BAAAA;AAAA,CAAA,EAAA,2BAAA,IAAA,EAAA;AA4CC,MAAA,qBAAA,GAAwB,CAAC,UAAwE,KAAA;AAC5G,EAAA,IAAI,CAAC,UAAA,IAAc,OAAO,UAAA,KAAe,QAAU,EAAA;AACjD,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,OAAO,kBAAsB,IAAA,UAAA;AAC/B;AAMY,IAAA,sBAAA,qBAAAC,uBAAL,KAAA;AACL,EAAAA,wBAAA,YAAa,CAAA,GAAA,YAAA;AACb,EAAAA,wBAAA,YAAa,CAAA,GAAA,YAAA;AAFH,EAAAA,OAAAA,uBAAAA;AAAA,CAAA,EAAA,sBAAA,IAAA,EAAA;AA+BA,IAAA,cAAA,qBAAAC,eAAL,KAAA;AACL,EAAAA,gBAAA,WAAY,CAAA,GAAA,WAAA;AACZ,EAAAA,gBAAA,SAAU,CAAA,GAAA,SAAA;AAFA,EAAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;AAkDC,MAAA,4BAAA,GAA+B,CAC1C,UAAA,EACA,IACoF,KAAA;AACpF,EAAA,IAAI,CAAC,UAAY,EAAA;AACf,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,OAAA,CACG,iBAAqB,IAAA,UAAA,IAAc,yBAA6B,IAAA,UAAA,KACjE,uBAA2B,IAAA,UAAA,IAC3B,qCAAyC,IAAA,UAAA,IACzC,UAAW,CAAA,mCAAA,EAAsC,CAAA,QAAA,CAAS,IAAI,CAAA;AAElE;AAEa,MAAA,uBAAA,GAA0B,CAAC,UAAwE,KAAA;AAC9G,EAAA,IAAI,CAAC,UAAA,IAAc,OAAO,UAAA,KAAe,QAAU,EAAA;AACjD,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,OAAO,oBAAwB,IAAA,UAAA;AACjC;AA+Ba,MAAA,gCAAA,GAAmC,CAC9C,UACsE,KAAA;AACtE,EAAA,OACE,cAAc,IACd,IAAA,OAAO,eAAe,QACtB,IAAA,mBAAA,IAAuB,cACvB,gBAAoB,IAAA,UAAA;AAExB;AA4Ba,MAAA,2BAAA,GAA8B,CACzC,UACiE,KAAA;AACjE,EAAA,OACE,cAAc,IACd,IAAA,OAAO,eAAe,QACtB,IAAA,aAAA,IAAiB,cACjB,gCAAoC,IAAA,UAAA;AAExC;AAMO,MAAM,gCAAgC,mBAA+C,CAAA;AAE5F;AAFa,uBAAA,CACJ,IAAO,GAAA,wBAAA;;AClUJ,IAAA,0BAAA,qBAAAC,2BAAL,KAAA;AACL,EAAAA,4BAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,4BAAA,MAAO,CAAA,GAAA,MAAA;AACP,EAAAA,4BAAA,MAAO,CAAA,GAAA,MAAA;AAHG,EAAAA,OAAAA,2BAAAA;AAAA,CAAA,EAAA,0BAAA,IAAA,EAAA;;AC3BA,IAAA,qBAAA,qBAAAC,sBAAL,KAAA;AACL,EAAAA,uBAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,uBAAA,UAAW,CAAA,GAAA,UAAA;AACX,EAAAA,uBAAA,YAAa,CAAA,GAAA,YAAA;AACb,EAAAA,uBAAA,eAAgB,CAAA,GAAA,eAAA;AAJN,EAAAA,OAAAA,sBAAAA;AAAA,CAAA,EAAA,qBAAA,IAAA,EAAA;AAiCC,MAAA,qBAAA,GAAwB,CACnC,UAC2D,KAAA;AAC3D,EAAA,IAAI,CAAC,UAAA,IAAc,OAAO,UAAA,KAAe,QAAU,EAAA;AACjD,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,OAAO,2BAA+B,IAAA,UAAA;AACxC;AAKa,MAAA,qBAAA,GAAwB,CACnC,UAC2D,KAAA;AAC3D,EAAA,IAAI,CAAC,UAAA,IAAc,OAAO,UAAA,KAAe,QAAU,EAAA;AACjD,IAAO,OAAA,KAAA;AAAA;AAET,EAAA,OAAO,yBAA6B,IAAA,UAAA;AACtC;;AClFY,IAAA,mBAAA,qBAAAC,oBAAL,KAAA;AACL,EAAAA,oBAAA,CAAA,oBAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAA;AACA,EAAAA,oBAAA,CAAA,oBAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAA;AACA,EAAAA,oBAAA,CAAA,oBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAA;AAHU,EAAAA,OAAAA,oBAAAA;AAAA,CAAA,EAAA,mBAAA,IAAA,EAAA;;ACcA,IAAA,oBAAA,qBAAAC,qBAAL,KAAA;AACL,EAAAA,sBAAA,YAAa,CAAA,GAAA,YAAA;AACb,EAAAA,sBAAA,cAAe,CAAA,GAAA,cAAA;AACf,EAAAA,sBAAA,2BAA4B,CAAA,GAAA,oBAAA;AAHlB,EAAAA,OAAAA,qBAAAA;AAAA,CAAA,EAAA,oBAAA,IAAA,EAAA;AAiDA,IAAA,2BAAA,qBAAAC,4BAAL,KAAA;AACL,EAAAA,6BAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,6BAAA,QAAS,CAAA,GAAA,QAAA;AAFC,EAAAA,OAAAA,4BAAAA;AAAA,CAAA,EAAA,2BAAA,IAAA,EAAA;AA+CA,IAAA,cAAA,qBAAAC,eAAL,KAAA;AACL,EAAAA,gBAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,gBAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,gBAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,gBAAA,OAAQ,CAAA,GAAA,OAAA;AACR,EAAAA,gBAAA,SAAU,CAAA,GAAA,UAAA;AACV,EAAAA,gBAAA,UAAW,CAAA,GAAA,UAAA;AAND,EAAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;AAgBA,IAAA,wBAAA,qBAAAC,yBAAL,KAAA;AACL,EAAAA,0BAAA,QAAS,CAAA,GAAA,QAAA;AADC,EAAAA,OAAAA,yBAAAA;AAAA,CAAA,EAAA,wBAAA,IAAA,EAAA;AAIA,IAAA,YAAA,qBAAAC,aAAL,KAAA;AACL,EAAAA,cAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,cAAA,MAAO,CAAA,GAAA,MAAA;AACP,EAAAA,cAAA,KAAM,CAAA,GAAA,KAAA;AAHI,EAAAA,OAAAA,aAAAA;AAAA,CAAA,EAAA,YAAA,IAAA,EAAA;;AChGA,IAAA,iBAAA,qBAAAC,kBAAL,KAAA;AACL,EAAAA,mBAAA,MAAO,CAAA,GAAA,MAAA;AACP,EAAAA,mBAAA,KAAM,CAAA,GAAA,KAAA;AACN,EAAAA,mBAAA,KAAM,CAAA,GAAA,KAAA;AAHI,EAAAA,OAAAA,kBAAAA;AAAA,CAAA,EAAA,iBAAA,IAAA,EAAA;AAML,MAAM,iBAAuC,GAAA;AAAA,EAClD,EAAE,KAAA,EAAO,MAAwB,aAAA,KAAA,EAAO,MAAuB,aAAA;AAAA,EAC/D,EAAE,KAAA,EAAO,KAAuB,YAAA,KAAA,EAAO,KAAsB,YAAA;AAAA,EAC7D,EAAE,KAAA,EAAO,KAAuB,YAAA,KAAA,EAAO,KAAsB;AAC/D;AAEO,MAAM,kBAAwC,GAAA;AAAA,EACnD,EAAE,KAAA,EAAO,kBAAoB,EAAA,KAAA,EAAO,kBAAmB,EAAA;AAAA,EACvD,EAAE,KAAA,EAAO,YAAc,EAAA,KAAA,EAAO,YAAa,EAAA;AAAA,EAC3C,EAAE,KAAA,EAAO,iBAAmB,EAAA,KAAA,EAAO,iBAAkB,EAAA;AAAA,EACrD,EAAE,KAAA,EAAO,mCAAqC,EAAA,KAAA,EAAO,mCAAoC;AAC3F;AAEO,MAAM,mBAA8B,GAAA;AAAA,EACzC,IAAM,EAAA,OAAA;AAAA,EACN,KAAO,EAAA,EAAA;AAAA,EACP,KAAO,EAAA;AAAA,IACL,GAAK,EAAA,EAAA;AAAA,IACL,MAAQ,EAAA,MAAA;AAAA,IACR,IAAM,EAAA,IAAA;AAAA,IACN,aAAa,EAAC;AAAA,IACd,OAAS,EAAA,CAAC,CAAC,cAAA,EAAgB,kBAAkB,CAAC;AAAA;AAElD;;ACpEO,MAAM,qBAAwB,GAAA;AAC9B,MAAM,qBAAwB,GAAA;AAC9B,MAAM,iBAAoB,GAAA;;ACgB1B,MAAM,uBAAgC,gBAAoB,CAAA;AAAA,EAM/D,YAAY,OAA6B,EAAA;AACvC,IAAM,KAAA,EAAA;AAEN,IAAK,IAAA,CAAA,MAAA,GAAS,OAAQ,CAAA,MAAA,IAAU,EAAC;AACjC,IAAK,IAAA,CAAA,QAAA,GAAW,KAAK,MAAO,CAAA,MAAA;AAC5B,IAAK,IAAA,CAAA,IAAA,GAAO,WAAW,OAAQ,CAAA,MAAA;AAC/B,IAAA,IAAA,CAAK,KAAQ,GAAA,CAAA;AAEb,IAAK,IAAA,CAAA,GAAA,GAAM,KAAK,cAAe,EAAA;AAC/B,IAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,MAAK,IAAA,CAAA,WAAA,CAAY,QAAQ,QAAQ,CAAA;AAAA;AAEnC,IAAO,OAAA,IAAI,MAAM,IAAM,EAAA;AAAA,MACrB,GAAA,CAAI,MAA2B,EAAA,QAAA,EAAkB,QAA6B,EAAA;AAC5E,QAAI,IAAA,OAAO,aAAa,QAAU,EAAA;AAChC,UAAA,MAAM,MAAM,CAAC,QAAA;AACb,UAAI,IAAA,MAAA,CAAO,GAAG,CAAA,KAAM,QAAU,EAAA;AAC5B,YAAO,OAAA,MAAA,CAAO,IAAI,GAAG,CAAA;AAAA;AACvB;AAEF,QAAA,OAAO,OAAQ,CAAA,GAAA,CAAI,MAAQ,EAAA,QAAA,EAAU,QAAQ,CAAA;AAAA,OAC/C;AAAA,MACA,GAAI,CAAA,MAAA,EAA2B,QAAkB,EAAA,KAAA,EAAU,QAA6B,EAAA;AACtF,QAAI,IAAA,OAAO,aAAa,QAAU,EAAA;AAChC,UAAA,MAAM,MAAM,CAAC,QAAA;AACb,UAAI,IAAA,MAAA,CAAO,GAAG,CAAA,KAAM,QAAU,EAAA;AAC5B,YAAO,MAAA,CAAA,GAAA,CAAI,KAAK,KAAK,CAAA;AACrB,YAAO,OAAA,IAAA;AAAA;AACT;AAEF,QAAA,OAAO,OAAQ,CAAA,GAAA,CAAI,MAAQ,EAAA,QAAA,EAAU,OAAO,QAAQ,CAAA;AAAA;AACtD,KACD,CAAA;AAAA;AACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,cAAqC,GAAA;AAE3C,IAAA,IAAI,IAAK,CAAA,QAAA,GAAW,IAAK,CAAA,MAAA,CAAO,MAAQ,EAAA;AACtC,MAAA,IAAI,KAAK,IAAM,EAAA;AACb,QAAA,OAAO,CAAC,KAAa,KAAA;AACnB,UAAK,IAAA,CAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACtB,UAAA,IAAI,IAAK,CAAA,MAAA,CAAO,MAAU,IAAA,IAAA,CAAK,QAAU,EAAA;AACvC,YAAK,IAAA,CAAA,GAAA,GAAM,KAAK,cAAe,EAAA;AAAA;AACjC,SACF;AAAA,OACK,MAAA;AACL,QAAA,OAAO,CAAC,KAAa,KAAA;AACnB,UAAK,IAAA,CAAA,MAAA,CAAO,QAAQ,KAAK,CAAA;AACzB,UAAA,IAAI,IAAK,CAAA,MAAA,CAAO,MAAU,IAAA,IAAA,CAAK,QAAU,EAAA;AACvC,YAAK,IAAA,CAAA,GAAA,GAAM,KAAK,cAAe,EAAA;AAAA;AACjC,SACF;AAAA;AACF;AAGF,IAAA,IAAI,KAAK,IAAM,EAAA;AACb,MAAA,OAAO,CAAC,KAAa,KAAA;AACnB,QAAK,IAAA,CAAA,MAAA,CAAO,IAAK,CAAA,KAAK,CAAI,GAAA,KAAA;AAC1B,QAAA,IAAA,CAAK,KAAS,GAAA,CAAA,IAAA,CAAK,KAAQ,GAAA,CAAA,IAAK,KAAK,MAAO,CAAA,MAAA;AAAA,OAC9C;AAAA;AAIF,IAAA,OAAO,CAAC,KAAa,KAAA;AACnB,MAAI,IAAA,GAAA,GAAM,KAAK,KAAQ,GAAA,CAAA;AACvB,MAAA,IAAI,MAAM,CAAG,EAAA;AACX,QAAM,GAAA,GAAA,IAAA,CAAK,OAAO,MAAS,GAAA,CAAA;AAAA;AAE7B,MAAK,IAAA,CAAA,MAAA,CAAO,GAAG,CAAI,GAAA,KAAA;AACnB,MAAA,IAAA,CAAK,KAAQ,GAAA,GAAA;AAAA,KACf;AAAA;AACF,EAEA,YAAY,CAAW,EAAA;AACrB,IAAI,IAAA,IAAA,CAAK,aAAa,CAAG,EAAA;AACvB,MAAA;AAAA;AAGF,IAAM,MAAA,IAAA,GAAO,KAAK,OAAQ,EAAA;AAC1B,IAAI,IAAA,CAAA,GAAI,KAAK,MAAQ,EAAA;AACnB,MAAA,IAAA,CAAK,MAAS,GAAA,IAAA;AAAA,KAChB,MAAA,IAAW,CAAI,GAAA,IAAA,CAAK,QAAU,EAAA;AAE5B,MAAM,MAAA,KAAA,GAAQ,KAAK,MAAS,GAAA,CAAA;AAC5B,MAAA,IAAI,KAAK,IAAM,EAAA;AACb,QAAA,IAAA,CAAK,MAAS,GAAA,IAAA,CAAK,KAAM,CAAA,KAAA,EAAO,KAAK,MAAM,CAAA;AAAA,OACtC,MAAA;AACL,QAAA,IAAA,CAAK,SAAS,IAAK,CAAA,KAAA,CAAM,CAAG,EAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA;AACjD;AAEF,IAAA,IAAA,CAAK,QAAW,GAAA,CAAA;AAChB,IAAA,IAAA,CAAK,KAAQ,GAAA,CAAA;AACb,IAAK,IAAA,CAAA,GAAA,GAAM,KAAK,cAAe,EAAA;AAAA;AACjC,EAEA,cAAc,IAAuB,EAAA;AACnC,IAAA,MAAM,OAAO,MAAW,KAAA,IAAA;AACxB,IAAI,IAAA,IAAA,KAAS,KAAK,IAAM,EAAA;AACtB,MAAA,IAAA,CAAK,MAAS,GAAA,IAAA,CAAK,OAAQ,EAAA,CAAE,OAAQ,EAAA;AACrC,MAAA,IAAA,CAAK,KAAQ,GAAA,CAAA;AACb,MAAA,IAAA,CAAK,IAAO,GAAA,IAAA;AACZ,MAAK,IAAA,CAAA,GAAA,GAAM,KAAK,cAAe,EAAA;AAAA;AACjC;AACF,EAEA,OAAU,GAAA;AACR,IAAO,OAAA,IAAA,CAAK,OAAO,OAAQ,EAAA;AAAA;AAC7B,EAEA,IAAI,KAAe,EAAA;AACjB,IAAA,OAAO,KAAK,MAAQ,CAAA,CAAA,KAAA,GAAQ,KAAK,KAAS,IAAA,IAAA,CAAK,OAAO,MAAM,CAAA;AAAA;AAC9D,EAEA,GAAA,CAAI,OAAe,KAAU,EAAA;AAC3B,IAAA,IAAA,CAAK,QAAQ,KAAQ,GAAA,IAAA,CAAK,SAAS,IAAK,CAAA,MAAA,CAAO,MAAM,CAAI,GAAA,KAAA;AAAA;AAC3D,EAEA,IAAI,MAAS,GAAA;AACX,IAAA,OAAO,KAAK,MAAO,CAAA,MAAA;AAAA;AAEvB;;ACrJA,MAAM,MAAS,GAAA,wGAAA;AACf,IAAI,QAAW,GAAA,KAAA;AAOR,MAAM,oBAAiC,KAAS,CAAA;AAAA,EACrD,IAAI,MAAS,GAAA;AACX,IAAO,OAAA,IAAA;AAAA;AACT,EAEA,IAAI,OAAO,MAAa,EAAA;AACtB,IAAA,IAAA,CAAK,MAAS,GAAA,CAAA;AAEd,IAAA,MAAM,MAAM,MAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,MAAA;AAEpB,IAAA,IAAI,GAAK,EAAA;AACP,MAAA,IAAI,SAAY,GAAA,IAAA;AAChB,MAAA,IAAI,SAAY,GAAA,IAAA,CAAK,IAAK,CAAA,GAAA,GAAM,SAAS,CAAA;AAEzC,MAAA,KAAA,IAAS,QAAW,GAAA,CAAA,EAAG,QAAW,GAAA,SAAA,EAAW,QAAY,EAAA,EAAA;AACvD,QAAK,IAAA,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA,EAAM,MAAO,CAAA,KAAA,CAAM,WAAW,SAAY,EAAA,CAAA,QAAA,GAAW,CAAK,IAAA,SAAS,CAAC,CAAA;AAAA;AACtF;AACF;AACF;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,MAAe,EAAA;AACzB,IAAM,KAAA,EAAA;AACN,IAAK,IAAA,CAAA,MAAA,GAAS,0BAAU,EAAC;AAEzB,IAAA,IAAI,CAAC,QAAU,EAAA;AACb,MAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,MAAW,QAAA,GAAA,IAAA;AAAA;AACb;AACF,EAEA,MAAc,GAAA;AACZ,IAAO,OAAA,CAAC,GAAG,IAAI,CAAA;AAAA;AAEnB;;AChCO,MAAM,0BAAmC,gBAAoB,CAAA;AAAA,EAClE,YAAY,OAA0B,EAAA;AACpC,IAAM,KAAA,CAAA,KAAA,CAAA,EAAW,CAAC,MAAW,KAAA;AAC3B,MAAA,OAAO,IAAI,cAAe,CAAA;AAAA,QACxB,GAAG,OAAA;AAAA,QACH;AAAA,OACD,CAAA;AAAA,KACF,CAAA;AAAA;AAEL;;ACjBgB,SAAA,iBAAA,CAAkB,QAAgB,IAA4B,EAAA;AAL9E,EAAA,IAAA,EAAA;AAME,EAAA,OAAO,CAAC,EAAA,CAAC,EAAK,GAAA,IAAA,CAAA,WAAA,KAAL,IAAmB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAA,CAAA;AAC9B;AAEgB,SAAA,2BAAA,CAA4B,QAAgB,MAA4C,EAAA;AATxG,EAAA,IAAA,EAAA;AAUE,EAAA,OAAO,CAAC,EAAA,CAAC,EAAO,GAAA,MAAA,CAAA,aAAA,KAAP,IAAuB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAA,CAAA;AAClC;AAEgB,SAAA,qBAAA,CAAsB,SAAmB,IAAmB,EAAA;AAC1E,EAAA,OAAO,QAAQ,KAAM,CAAA,CAAC,WAAW,iBAAkB,CAAA,MAAA,EAAQ,IAAI,CAAC,CAAA;AAClE;AAEgB,SAAA,oBAAA,CAAqB,SAAmB,IAAmB,EAAA;AACzE,EAAA,OAAO,QAAQ,IAAK,CAAA,CAAC,WAAW,iBAAkB,CAAA,MAAA,EAAQ,IAAI,CAAC,CAAA;AACjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}