{"version":3,"file":"index.cjs","sources":["../src/hooks/useLoadScript.ts","../src/hooks/useLoadGoogleCharts.ts","../src/default-props.ts","../src/generate-unique-id.ts","../src/constants.ts","../src/load-data-table-from-spreadsheet.ts","../src/Context.tsx","../src/components/GoogleChartDataTable.tsx","../src/components/GoogleChartEvents.tsx","../src/components/GoogleChart.tsx","../src/ReactGoogleCharts.tsx","../src/types.ts","../src/index.tsx"],"sourcesContent":["import { useEffect } from \"react\";\n\n/**\n * Hook to load external script.\n * @param src - Source url to load.\n * @param onLoad - Success callback.\n * @param onError - Error callback.\n */\nexport function useLoadScript(\n  src: string,\n  onLoad?: () => void,\n  onError?: () => void\n) {\n  useEffect(() => {\n    if (!document) {\n      return;\n    }\n\n    // Find script tag with same src in DOM.\n    const foundScript = document.querySelector<HTMLScriptElement>(\n      `script[src=\"${src}\"]`\n    );\n\n    // Call onLoad if script marked as loaded.\n    if (foundScript?.dataset.loaded) {\n      onLoad?.();\n      return;\n    }\n\n    // Create or get existed tag.\n    const script = foundScript || document.createElement(\"script\");\n\n    // Set src if no script was found.\n    if (!foundScript) {\n      script.src = src;\n    }\n\n    // Mark script as loaded on load event.\n    const onLoadWithMarker = () => {\n      script.dataset.loaded = \"1\";\n      onLoad?.();\n    };\n\n    script.addEventListener(\"load\", onLoadWithMarker);\n\n    if (onError) {\n      script.addEventListener(\"error\", onError);\n    }\n\n    // Add to DOM if not yet added.\n    if (!foundScript) {\n      document.head.append(script);\n    }\n\n    return () => {\n      script.removeEventListener(\"load\", onLoadWithMarker);\n\n      if (onError) {\n        script.removeEventListener(\"error\", onError);\n      }\n    };\n  }, []);\n}\n","import { useState, useEffect } from \"react\";\nimport { GoogleChartVersion, GoogleChartPackages, GoogleViz } from \"../types\";\nimport { useLoadScript } from \"./useLoadScript\";\n\nexport interface IUseLoadGoogleChartsParams {\n  chartVersion?: GoogleChartVersion;\n  chartPackages?: GoogleChartPackages[];\n  chartLanguage?: string;\n  mapsApiKey?: string;\n}\n\n/**\n * Hook to load Google Charts JS API.\n * @param params - Load parameters.\n * @param [params.chartVersion] - Chart version to load.\n * @param [params.chartPackages] - Packages to load.\n * @param [params.chartLanguage] - Languages to load.\n * @param [params.mapsApiKey] - Google Maps api key.\n * @returns\n */\nexport function useLoadGoogleCharts({\n  chartVersion = \"current\",\n  chartPackages = [\"corechart\", \"controls\"],\n  chartLanguage = \"en\",\n  mapsApiKey,\n}: IUseLoadGoogleChartsParams) {\n  const [googleCharts, setGoogleCharts] = useState<GoogleViz | null>(null);\n  const [failed, setFailed] = useState(false);\n\n  useLoadScript(\n    \"https://www.gstatic.com/charts/loader.js\",\n    () => {\n      // @ts-expect-error Getting object from global namespace.\n      const google = window?.google as GoogleViz;\n\n      if (!google) {\n        return;\n      }\n\n      google.charts.load(chartVersion, {\n        packages: chartPackages,\n        language: chartLanguage,\n        mapsApiKey,\n      });\n      google.charts.setOnLoadCallback(() => {\n        setGoogleCharts(google);\n      });\n    },\n    () => {\n      setFailed(true);\n    }\n  );\n\n  return [googleCharts, failed] as const;\n}\n\nexport interface ILoadGoogleChartsProps extends IUseLoadGoogleChartsParams {\n  onLoad?(googleCharts: GoogleViz): void;\n  onError?(): void;\n}\n\n/**\n * Wrapper around useLoadGoogleCharts to use in legacy components.\n */\nexport function LoadGoogleCharts({\n  onLoad,\n  onError,\n  ...params\n}: ILoadGoogleChartsProps) {\n  const [googleCharts, failed] = useLoadGoogleCharts(params);\n\n  useEffect(() => {\n    if (googleCharts && onLoad) {\n      onLoad(googleCharts);\n    }\n  }, [googleCharts]);\n\n  useEffect(() => {\n    if (failed && onError) {\n      onError();\n    }\n  }, [failed]);\n\n  return null;\n}\n","import { ReactGoogleChartProps } from \"./types\";\n\nexport const chartDefaultProps: Partial<ReactGoogleChartProps> = {\n  // <DEPRECATED_PROPS>\n  legend_toggle: false,\n  // </DEPRECATED_PROPS>\n  options: {},\n  legendToggle: false,\n  getChartWrapper: () => {},\n  spreadSheetQueryParameters: {\n    headers: 1,\n    gid: 1,\n  },\n  rootProps: {},\n  chartWrapperParams: {},\n};\n","let uniqueID = 0;\nexport const generateUniqueID = () => {\n  uniqueID += 1;\n  return `reactgooglegraph-${uniqueID}`;\n};\n","export const DEFAULT_CHART_COLORS = [\n  \"#3366CC\",\n  \"#DC3912\",\n  \"#FF9900\",\n  \"#109618\",\n  \"#990099\",\n  \"#3B3EAC\",\n  \"#0099C6\",\n  \"#DD4477\",\n  \"#66AA00\",\n  \"#B82E2E\",\n  \"#316395\",\n  \"#994499\",\n  \"#22AA99\",\n  \"#AAAA11\",\n  \"#6633CC\",\n  \"#E67300\",\n  \"#8B0707\",\n  \"#329262\",\n  \"#5574A6\",\n  \"#3B3EAC\"\n];\n","import { GoogleViz } from \"./types\";\n\nexport const loadDataTableFromSpreadSheet = async (\n  googleViz: GoogleViz,\n  spreadSheetUrl: string,\n  urlParams: {\n    headers?: number;\n    gid?: any;\n    sheet?: string;\n    query?: string;\n    access_token?: string;\n  } = {}\n) => {\n  return new Promise((resolve, reject) => {\n    const headers = `${\n      urlParams.headers ? `headers=${urlParams.headers}` : `headers=0`\n    }`;\n    const queryString = `${\n      urlParams.query ? `&tq=${encodeURIComponent(urlParams.query)}` : ``\n    }`;\n    const gid = `${urlParams.gid ? `&gid=${urlParams.gid}` : \"\"}`;\n    const sheet = `${urlParams.sheet ? `&sheet=${urlParams.sheet}` : \"\"}`;\n    const access_token = `${\n      urlParams.access_token ? `&access_token=${urlParams.access_token}` : \"\"\n    }`;\n    const urlQueryString = `${headers}${gid}${sheet}${queryString}${access_token}`;\n    const urlToSpreadSheet = `${spreadSheetUrl}/gviz/tq?${urlQueryString}`; //&tq=${queryString}`;\n    const query = new googleViz.visualization.Query(urlToSpreadSheet);\n    query.send((response: any) => {\n      if (response.isError()) {\n        reject(\n          `Error in query:  ${response.getMessage()} ${response.getDetailedMessage()}`\n        );\n      } else {\n        resolve(response.getDataTable());\n      }\n    });\n  });\n};\n","import * as React from \"react\";\nimport { chartDefaultProps } from \"./default-props\";\n\nimport { ReactGoogleChartProps } from \"./types\";\nconst { Provider, Consumer } = React.createContext(chartDefaultProps);\n\nexport const ContextProvider = ({\n  children,\n  value,\n}: {\n  children: any;\n  value: ReactGoogleChartProps;\n}) => {\n  return <Provider value={value}>{children}</Provider>;\n};\n\nexport const ContextConsumer = ({\n  render,\n}: {\n  render: (context: ReactGoogleChartProps) => JSX.Element | null;\n}) => {\n  return (\n    <Consumer>\n      {(context) => {\n        return render(context as ReactGoogleChartProps);\n      }}\n    </Consumer>\n  );\n};\n","import * as React from \"react\";\nimport {\n  GoogleViz,\n  GoogleChartWrapper,\n  GoogleDataTable,\n  ReactGoogleChartProps,\n  GoogleChartDashboard,\n} from \"../types\";\nimport { DEFAULT_CHART_COLORS } from \"../constants\";\n\nimport { loadDataTableFromSpreadSheet } from \"../load-data-table-from-spreadsheet\";\nimport { ContextConsumer } from \"../Context\";\n\nconst GRAY_COLOR = \"#CCCCCC\";\nexport type ChartDrawArgs = {\n  data: ReactGoogleChartProps[\"data\"];\n};\n\nexport type GoogleChartDataTableProps = {\n  googleChartWrapper: GoogleChartWrapper;\n  google: GoogleViz;\n  googleChartDashboard: GoogleChartDashboard | null;\n};\ninterface State {\n  hiddenColumns: string[];\n}\nexport class GoogleChartDataTableInner extends React.Component<\n  ReactGoogleChartProps & GoogleChartDataTableProps,\n  State\n> {\n  state = {\n    hiddenColumns: [],\n  } as State;\n\n  private listenToLegendToggle = () => {\n    const { google, googleChartWrapper } = this.props;\n    google.visualization.events.addListener(\n      googleChartWrapper,\n      \"select\",\n      () => {\n        const chart = googleChartWrapper.getChart();\n        const selection = chart.getSelection();\n        const dataTable = googleChartWrapper.getDataTable();\n        if (\n          selection.length === 0 ||\n          // We want to listen to when a whole row is selected. This is the case only when row === null\n          selection[0].row ||\n          !dataTable\n        ) {\n          return;\n        }\n        const columnIndex = selection[0].column;\n        const columnID = this.getColumnID(dataTable, columnIndex);\n        if (this.state.hiddenColumns.includes(columnID)) {\n          this.setState((state) => ({\n            ...state,\n            hiddenColumns: [\n              ...state.hiddenColumns.filter((colID) => colID !== columnID),\n            ],\n          }));\n        } else {\n          this.setState((state) => ({\n            ...state,\n            hiddenColumns: [...state.hiddenColumns, columnID],\n          }));\n        }\n      }\n    );\n  };\n\n  private applyFormatters = (dataTable: GoogleDataTable, formatters: any[]) => {\n    const { google } = this.props;\n    for (let formatter of formatters) {\n      switch (formatter.type) {\n        case \"ArrowFormat\": {\n          const vizFormatter = new google.visualization.ArrowFormat(\n            formatter.options\n          );\n          vizFormatter.format(dataTable, formatter.column);\n          break;\n        }\n        case \"BarFormat\": {\n          const vizFormatter = new google.visualization.BarFormat(\n            formatter.options\n          );\n          vizFormatter.format(dataTable, formatter.column);\n          break;\n        }\n        case \"ColorFormat\": {\n          const vizFormatter = new google.visualization.ColorFormat(\n            formatter.options\n          );\n          const { ranges } = formatter;\n          for (let range of ranges) {\n            vizFormatter.addRange(...range);\n          }\n          vizFormatter.format(dataTable, formatter.column);\n          break;\n        }\n        case \"DateFormat\": {\n          const vizFormatter = new google.visualization.DateFormat(\n            formatter.options\n          );\n          vizFormatter.format(dataTable, formatter.column);\n          break;\n        }\n        case \"NumberFormat\": {\n          const vizFormatter = new google.visualization.NumberFormat(\n            formatter.options\n          );\n          vizFormatter.format(dataTable, formatter.column);\n          break;\n        }\n        case \"PatternFormat\": {\n          const vizFormatter = new google.visualization.PatternFormat(\n            formatter.options\n          );\n          vizFormatter.format(dataTable, formatter.column);\n          break;\n        }\n      }\n    }\n  };\n  private getColumnID = (dataTable: GoogleDataTable, columnIndex: number) => {\n    return (\n      dataTable.getColumnId(columnIndex) ||\n      dataTable.getColumnLabel(columnIndex)\n    );\n  };\n  private draw = async ({\n    data,\n    diffdata,\n    rows,\n    columns,\n    options,\n    legend_toggle,\n    legendToggle,\n    chartType,\n    formatters,\n    spreadSheetUrl,\n    spreadSheetQueryParameters,\n  }: ReactGoogleChartProps) => {\n    const { google, googleChartWrapper } = this.props;\n    let dataTable: GoogleDataTable;\n    let chartDiff = null;\n    if (diffdata) {\n      const oldData = google.visualization.arrayToDataTable(diffdata.old);\n      const newData = google.visualization.arrayToDataTable(diffdata.new);\n      chartDiff = google.visualization[chartType].prototype.computeDiff(\n        oldData,\n        newData\n      );\n    }\n    if (data !== null) {\n      if (Array.isArray(data)) {\n        dataTable = google.visualization.arrayToDataTable(data);\n      } else {\n        dataTable = new google.visualization.DataTable(data);\n      }\n    } else if (rows && columns) {\n      dataTable = google.visualization.arrayToDataTable([columns, ...rows]);\n    } else if (spreadSheetUrl) {\n      dataTable = (await loadDataTableFromSpreadSheet(\n        google,\n        spreadSheetUrl,\n        spreadSheetQueryParameters\n      )) as GoogleDataTable;\n    } else {\n      dataTable = google.visualization.arrayToDataTable([]);\n    }\n    const columnCount = dataTable.getNumberOfColumns();\n    for (let i = 0; i < columnCount; i += 1) {\n      const columnID = this.getColumnID(dataTable, i);\n      if (this.state.hiddenColumns.includes(columnID)) {\n        const previousColumnLabel = dataTable.getColumnLabel(i);\n        const previousColumnID = dataTable.getColumnId(i);\n        const previousColumnType = dataTable.getColumnType(i);\n        dataTable.removeColumn(i);\n        dataTable.addColumn({\n          label: previousColumnLabel,\n          id: previousColumnID,\n          type: previousColumnType,\n        });\n      }\n    }\n    const chart = googleChartWrapper.getChart();\n    if (googleChartWrapper.getChartType() === \"Timeline\") {\n      chart && chart.clearChart();\n    }\n    googleChartWrapper.setChartType(chartType);\n    googleChartWrapper.setOptions(options || {});\n    googleChartWrapper.setDataTable(dataTable);\n    googleChartWrapper.draw();\n    if (this.props.googleChartDashboard !== null) {\n      this.props.googleChartDashboard.draw(dataTable);\n    }\n\n    if (chartDiff) {\n      googleChartWrapper.setDataTable(chartDiff);\n      googleChartWrapper.draw();\n    }\n    if (formatters) {\n      this.applyFormatters(dataTable, formatters);\n      googleChartWrapper.setDataTable(dataTable);\n      googleChartWrapper.draw();\n    }\n    if (legendToggle === true || legend_toggle === true) {\n      this.grayOutHiddenColumns({ options });\n    }\n    return;\n  };\n  private grayOutHiddenColumns = ({\n    options,\n  }: {\n    options: ReactGoogleChartProps[\"options\"];\n  }) => {\n    const { googleChartWrapper } = this.props;\n    const dataTable = googleChartWrapper.getDataTable();\n    if (!dataTable) return;\n    const columnCount = dataTable.getNumberOfColumns();\n    const hasAHiddenColumn = this.state.hiddenColumns.length > 0;\n    if (hasAHiddenColumn === false) return;\n    const colors = Array.from({ length: columnCount - 1 }).map(\n      (dontcare, i) => {\n        const columnID = this.getColumnID(dataTable, i + 1);\n        if (this.state.hiddenColumns.includes(columnID)) {\n          return GRAY_COLOR;\n        } else if (options && options.colors) {\n          return options.colors[i];\n        } else {\n          return DEFAULT_CHART_COLORS[i];\n        }\n      }\n    );\n    googleChartWrapper.setOptions({\n      ...options,\n      colors,\n    });\n    googleChartWrapper.draw();\n  };\n  private onResize = () => {\n    const { googleChartWrapper } = this.props;\n    googleChartWrapper.draw();\n  };\n  componentDidMount() {\n    this.draw(this.props);\n    window.addEventListener(\"resize\", this.onResize);\n    if (this.props.legend_toggle || this.props.legendToggle) {\n      this.listenToLegendToggle();\n    }\n  }\n\n  componentWillUnmount() {\n    const { google, googleChartWrapper } = this.props;\n    window.removeEventListener(\"resize\", this.onResize);\n    google.visualization.events.removeAllListeners(googleChartWrapper);\n    if (googleChartWrapper.getChartType() === \"Timeline\") {\n      googleChartWrapper.getChart() &&\n        googleChartWrapper.getChart().clearChart();\n    }\n  }\n\n  componentDidUpdate() {\n    this.draw(this.props);\n  }\n  render() {\n    return null;\n  }\n}\n\nexport class GoogleChartDataTable extends React.Component<GoogleChartDataTableProps> {\n  componentDidMount() {}\n\n  componentWillUnmount() {}\n  shouldComponentUpdate() {\n    return false;\n  }\n  render() {\n    const { google, googleChartWrapper, googleChartDashboard } = this.props;\n    return (\n      <ContextConsumer\n        render={(props) => {\n          return (\n            <GoogleChartDataTableInner\n              {...props}\n              google={google}\n              googleChartWrapper={googleChartWrapper}\n              googleChartDashboard={googleChartDashboard}\n            />\n          );\n        }}\n      />\n    );\n  }\n}\n","import * as React from \"react\";\nimport {\n  GoogleViz,\n  GoogleChartWrapper,\n  ReactGoogleChartProps,\n  ReactGoogleChartEvent,\n} from \"../types\";\n\nimport { ContextConsumer } from \"../Context\";\n\nexport type ChartDrawArgs = {\n  data: ReactGoogleChartProps[\"data\"];\n};\n\nexport interface Props {\n  googleChartWrapper: GoogleChartWrapper;\n  google: GoogleViz;\n}\n\nexport interface ListenToEventsArgs {\n  googleChartWrapper: GoogleChartWrapper;\n  google: GoogleViz;\n  chartEvents: ReactGoogleChartEvent[] | null;\n}\n\nexport class GoogleChartEvents extends React.Component<Props> {\n  propsFromContext: ReactGoogleChartProps | null;\n  shouldComponentUpdate() {\n    return false;\n  }\n  listenToEvents({\n    chartEvents,\n    google,\n    googleChartWrapper,\n  }: ListenToEventsArgs) {\n    if (!chartEvents) {\n      return;\n    }\n    google.visualization.events.removeAllListeners(googleChartWrapper);\n    for (let event of chartEvents) {\n      const { eventName, callback } = event;\n      google.visualization.events.addListener(\n        googleChartWrapper,\n        eventName,\n        (...args: any[]) => {\n          callback({\n            chartWrapper: googleChartWrapper,\n            props: this.props as any,\n            google: google,\n            eventArgs: args,\n          });\n        }\n      );\n    }\n  }\n\n  componentDidMount() {\n    const { google, googleChartWrapper } = this.props;\n\n    this.listenToEvents({\n      chartEvents: this.propsFromContext?.chartEvents || null,\n      google,\n      googleChartWrapper,\n    });\n  }\n\n  render() {\n    const { google, googleChartWrapper } = this.props;\n    return (\n      <ContextConsumer\n        render={(propsFromContext) => {\n          this.propsFromContext = propsFromContext;\n          return null;\n        }}\n      />\n    );\n  }\n\n  constructor(props: Props) {\n    super(props);\n    this.propsFromContext = null;\n  }\n}\n","import * as React from \"react\";\nimport {\n  GoogleViz,\n  GoogleChartWrapper,\n  ReactGoogleChartProps,\n  GoogleChartControlProp,\n  GoogleChartControl,\n  GoogleChartDashboard,\n  GoogleChartEditor,\n} from \"../types\";\nimport { generateUniqueID } from \"../generate-unique-id\";\nimport { GoogleChartDataTable } from \"./GoogleChartDataTable\";\nimport { GoogleChartEvents } from \"./GoogleChartEvents\";\n\nexport type Props = {\n  google: GoogleViz;\n  graphID?: string | null;\n  graph_id?: string | null;\n  options?: ReactGoogleChartProps[\"options\"];\n  chartWrapperParams?: {};\n  chartType: ReactGoogleChartProps[\"chartType\"];\n  width?: ReactGoogleChartProps[\"width\"];\n  height?: ReactGoogleChartProps[\"height\"];\n  style?: ReactGoogleChartProps[\"style\"];\n  className?: ReactGoogleChartProps[\"className\"];\n  rootProps?: ReactGoogleChartProps[\"rootProps\"];\n} & ReactGoogleChartProps;\n\nexport interface State {\n  googleChartWrapper: GoogleChartWrapper | null;\n  isReady: boolean;\n  googleChartDashboard: GoogleChartDashboard | null;\n  googleChartEditor: GoogleChartEditor | null;\n  googleChartControls:\n    | { control: GoogleChartControl; controlProp: GoogleChartControlProp }[]\n    | null;\n}\n\nlet controlCounter = 0;\n\nexport class GoogleChart extends React.Component<Props, State> {\n  state = {\n    googleChartWrapper: null,\n    googleChartDashboard: null,\n    googleChartControls: null,\n    googleChartEditor: null,\n    isReady: false,\n  } as State;\n  graphID: null | string = null;\n  private dashboard_ref: React.RefObject<HTMLDivElement> = React.createRef();\n  private toolbar_ref: React.RefObject<HTMLDivElement> = React.createRef();\n  private getGraphID = () => {\n    const { graphID, graph_id } = this.props;\n    let instanceGraphID: string;\n    if (!graphID && !graph_id) {\n      if (!this.graphID) {\n        instanceGraphID = generateUniqueID();\n      } else {\n        instanceGraphID = this.graphID;\n      }\n    } else if (graphID && !graph_id) {\n      instanceGraphID = graphID as string;\n    } else if (graph_id && !graphID) {\n      instanceGraphID = graph_id as string;\n    } else {\n      instanceGraphID = graphID as string;\n    }\n    this.graphID = instanceGraphID;\n    return this.graphID as string;\n  };\n  private getControlID = (id: undefined | string, index: number) => {\n    controlCounter += 1;\n    let controlID: string;\n    if (typeof id === \"undefined\") {\n      controlID = `googlechart-control-${index}-${controlCounter}`;\n    } else {\n      controlID = id;\n    }\n    return controlID;\n  };\n\n  addControls = (\n    googleChartWrapper: GoogleChartWrapper,\n    googleChartDashboard: GoogleChartDashboard\n  ) => {\n    const { google, controls } = this.props;\n\n    const googleChartControls = !controls\n      ? null\n      : controls.map((control, i) => {\n          const {\n            controlID: controlIDMaybe,\n            controlType,\n            options: controlOptions,\n            controlWrapperParams,\n          } = control;\n          const controlID = this.getControlID(controlIDMaybe, i);\n          return {\n            controlProp: control,\n            control: new google.visualization.ControlWrapper({\n              containerId: controlID,\n              controlType,\n              options: controlOptions,\n              ...controlWrapperParams,\n            }),\n          };\n        });\n    if (!googleChartControls) {\n      return null;\n    }\n    googleChartDashboard.bind(\n      googleChartControls.map(({ control }) => control),\n      googleChartWrapper\n    );\n    for (let chartControl of googleChartControls) {\n      const { control, controlProp } = chartControl;\n      const { controlEvents = [] } = controlProp;\n      for (let event of controlEvents) {\n        const { callback, eventName } = event;\n        google.visualization.events.removeListener(\n          control,\n          eventName,\n          callback\n        );\n        google.visualization.events.addListener(\n          control,\n          eventName,\n          (...args: any[]) => {\n            callback({\n              chartWrapper: googleChartWrapper,\n              controlWrapper: control,\n              props: this.props as any,\n              google: google,\n              eventArgs: args,\n            });\n          }\n        );\n      }\n    }\n    return googleChartControls;\n  };\n\n  componentDidMount() {\n    const {\n      options,\n      google,\n      chartType,\n      chartWrapperParams,\n      toolbarItems,\n      getChartEditor,\n      getChartWrapper,\n    } = this.props;\n\n    const chartConfig = {\n      chartType,\n      options,\n      containerId: this.getGraphID(),\n      ...chartWrapperParams,\n    };\n    const googleChartWrapper = new google.visualization.ChartWrapper(\n      chartConfig\n    );\n    googleChartWrapper.setOptions(options || {});\n    if (getChartWrapper) {\n      getChartWrapper(googleChartWrapper, google);\n    }\n    const googleChartDashboard = new google.visualization.Dashboard(\n      this.dashboard_ref\n    );\n\n    const googleChartControls = this.addControls(\n      googleChartWrapper,\n      googleChartDashboard\n    );\n    if (toolbarItems) {\n      google.visualization.drawToolbar(\n        this.toolbar_ref.current as HTMLDivElement,\n        toolbarItems\n      );\n    }\n    let googleChartEditor: null | GoogleChartEditor = null;\n    if (getChartEditor) {\n      googleChartEditor = new google.visualization.ChartEditor();\n      getChartEditor({\n        chartEditor: googleChartEditor,\n        chartWrapper: googleChartWrapper,\n        google,\n      });\n    }\n\n    this.setState({\n      googleChartEditor,\n      googleChartControls: googleChartControls,\n      googleChartDashboard: googleChartDashboard,\n      googleChartWrapper,\n      isReady: true,\n    });\n  }\n  componentDidUpdate() {\n    if (!this.state.googleChartWrapper) return;\n    if (!this.state.googleChartDashboard) return;\n    if (!this.state.googleChartControls) return;\n\n    const { controls } = this.props;\n    if (controls) {\n      for (let i = 0; i < controls.length; i += 1) {\n        const { controlType, options, controlWrapperParams } = controls[i];\n        if (controlWrapperParams && \"state\" in controlWrapperParams) {\n          this.state.googleChartControls[i].control.setState(\n            controlWrapperParams[\"state\"]\n          );\n        }\n        this.state.googleChartControls[i].control.setOptions(options);\n        this.state.googleChartControls[i].control.setControlType(controlType);\n      }\n    }\n  }\n  shouldComponentUpdate(nextProps: Props, nextState: State) {\n    return (\n      this.state.isReady !== nextState.isReady ||\n      nextProps.controls !== this.props.controls\n    );\n  }\n  renderChart = () => {\n    const { width, height, options, style, className, rootProps, google } =\n      this.props;\n\n    const divStyle = {\n      height: height || (options && options.height),\n      width: width || (options && options.width),\n      ...style,\n    };\n    return (\n      <div\n        id={this.getGraphID()}\n        style={divStyle}\n        className={className}\n        {...rootProps}\n      >\n        {this.state.isReady && this.state.googleChartWrapper !== null ? (\n          <React.Fragment>\n            <GoogleChartDataTable\n              googleChartWrapper={this.state.googleChartWrapper}\n              google={google}\n              googleChartDashboard={this.state.googleChartDashboard}\n            />\n            <GoogleChartEvents\n              googleChartWrapper={this.state.googleChartWrapper}\n              google={google}\n            />\n          </React.Fragment>\n        ) : null}\n      </div>\n    );\n  };\n  renderControl = (\n    filter = ({\n      control,\n      controlProp,\n    }: {\n      control: GoogleChartControl;\n      controlProp: GoogleChartControlProp;\n    }) => true\n  ) => {\n    return this.state.isReady && this.state.googleChartControls !== null ? (\n      <React.Fragment>\n        {this.state.googleChartControls\n          .filter(({ controlProp, control }) => {\n            return filter({ control, controlProp });\n          })\n          .map(({ control, controlProp }) => {\n            return (\n              <div\n                key={control.getContainerId()}\n                id={control.getContainerId()}\n              />\n            );\n          })}\n      </React.Fragment>\n    ) : null;\n  };\n  renderToolBar = () => {\n    if (!this.props.toolbarItems) return null;\n    return <div ref={this.toolbar_ref} />;\n  };\n  render() {\n    const { width, height, options, style } = this.props;\n\n    const divStyle = {\n      height: height || (options && options.height),\n      width: width || (options && options.width),\n      ...style,\n    };\n    if (this.props.render) {\n      return (\n        <div ref={this.dashboard_ref} style={divStyle}>\n          <div ref={this.toolbar_ref} id=\"toolbar\" />\n          {this.props.render({\n            renderChart: this.renderChart,\n            renderControl: this.renderControl,\n            renderToolbar: this.renderToolBar,\n          })}\n        </div>\n      );\n    } else {\n      return (\n        <div ref={this.dashboard_ref} style={divStyle}>\n          {this.renderControl(({ controlProp }) => {\n            return controlProp.controlPosition !== \"bottom\";\n          })}\n          {this.renderChart()}\n          {this.renderControl(({ controlProp }) => {\n            return controlProp.controlPosition === \"bottom\";\n          })}\n          {this.renderToolBar()}\n        </div>\n      );\n    }\n  }\n}\n","import * as React from \"react\";\n\nimport {\n  GoogleViz,\n  ReactGoogleChartProps,\n  ReactGoogleChartState,\n} from \"./types\";\nimport { LoadGoogleCharts } from \"./hooks\";\nimport { chartDefaultProps } from \"./default-props\";\nimport { GoogleChart } from \"./components/GoogleChart\";\nimport { ContextProvider } from \"./Context\";\n\nexport class Chart extends React.Component<\n  ReactGoogleChartProps,\n  ReactGoogleChartState\n> {\n  _isMounted = false;\n\n  state = {\n    loadingStatus: \"loading\" as ReactGoogleChartState[\"loadingStatus\"],\n    google: null as ReactGoogleChartState[\"google\"],\n  };\n\n  static defaultProps = chartDefaultProps;\n\n  render() {\n    const {\n      chartLanguage,\n      chartPackages,\n      chartVersion,\n      mapsApiKey,\n      loader,\n      errorElement,\n    } = this.props;\n    return (\n      <ContextProvider value={this.props as ReactGoogleChartProps}>\n        {this.state.loadingStatus === \"ready\" && this.state.google !== null ? (\n          <GoogleChart\n            {...(this.props as ReactGoogleChartProps)}\n            google={this.state.google}\n          />\n        ) : this.state.loadingStatus === \"errored\" && errorElement ? (\n          errorElement\n        ) : (\n          loader\n        )}\n        <LoadGoogleCharts\n          chartLanguage={chartLanguage}\n          chartPackages={chartPackages}\n          chartVersion={chartVersion}\n          mapsApiKey={mapsApiKey}\n          onLoad={this.onLoad}\n          onError={this.onError}\n        />\n      </ContextProvider>\n    );\n  }\n\n  componentDidMount() {\n    this._isMounted = true;\n  }\n\n  componentWillUnmount() {\n    this._isMounted = false;\n  }\n\n  onLoad = (google: GoogleViz) => {\n    if (this.props.onLoad) {\n      this.props.onLoad(google);\n    }\n    if (this.isFullyLoaded(google)) {\n      this.onSuccess(google);\n    } else {\n      // IE11: window.google is not fully set, we have to wait\n      const id = setInterval(() => {\n        const google = (\n          window as Window & {\n            google?: GoogleViz;\n          }\n        ).google;\n\n        if (this._isMounted) {\n          if (google && this.isFullyLoaded(google)) {\n            clearInterval(id);\n            this.onSuccess(google);\n          }\n        } else {\n          clearInterval(id);\n        }\n      }, 1000);\n    }\n  };\n\n  onSuccess = (google: GoogleViz) => {\n    this.setState({\n      loadingStatus: \"ready\",\n      google,\n    });\n  };\n\n  onError = () => {\n    this.setState({\n      loadingStatus: \"errored\",\n    });\n  };\n\n  isFullyLoaded(google: GoogleViz) {\n    const { controls, toolbarItems, getChartEditor } = this.props;\n\n    return (\n      google &&\n      google.visualization &&\n      google.visualization.ChartWrapper &&\n      google.visualization.Dashboard &&\n      (!controls || google.visualization.ChartWrapper) &&\n      (!getChartEditor || google.visualization.ChartEditor) &&\n      (!toolbarItems || google.visualization.drawToolbar)\n    );\n  }\n}\n\nexport default Chart;\n","// Complete Google Charts Type Definition : https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/google.visualization/index.d.ts\n\nexport type GoogleVizDrawToolbar = (\n  toolbarContainer: HTMLDivElement,\n  components: GoogleChartToolbarItem[]\n) => any;\n\nexport type GoogleViz = {\n  charts: GoogleChartLoader;\n  visualization: {\n    ChartWrapper: GoogleChartWrapper;\n    ChartEditor: GoogleChartEditor;\n    DataTable: GoogleDataTable;\n    events: GoogleVizEvents;\n    arrayToDataTable: GoogleArrayToDataTable;\n    drawToolbar: GoogleVizDrawToolbar;\n    [otherKeys: string]: any;\n  };\n};\n\nexport type GoogleChartTicks = (number | Date)[];\n\nexport type GoogleChartEditor = {\n  new (): GoogleChartEditor;\n  openDialog: (\n    chartWrapper: GoogleChartWrapper,\n    chartEditorOptions?: { dataSourceInput?: any; [otherKeyMaybe: string]: any }\n  ) => null;\n  getChartWrapper: () => GoogleChartWrapper;\n  setChartWrapper: (chartWrapper: GoogleChartWrapper) => GoogleChartWrapper;\n  closeDialog: () => null;\n};\n\nexport type GoogleChartLoaderOptions = {\n  packages?: GoogleChartPackages[];\n  language?: string;\n  mapsApiKey?: string;\n};\nexport type GoogleChartLoader = {\n  load: (\n    version: GoogleChartVersion,\n    googleChartOptions: GoogleChartLoaderOptions\n  ) => void;\n  setOnLoadCallback: (callback: () => void) => void;\n};\nexport interface ChartWrapperProps {\n  chartType: GoogleChartWrapperChartType;\n  containerId?: string;\n  options?: {\n    width?: number;\n    height?: number;\n    is3D?: boolean;\n    title?: string;\n    backgroundColor: string;\n  };\n  dataTable?: {};\n  dataSourceUrl?: string;\n  query?: string;\n  refreshInterval?: number;\n  view?: any[] | {};\n  render?: (props: ChartWrapperProps, chartWrapper: GoogleChartWrapper) => any;\n  children?: (\n    props: ChartWrapperProps,\n    chartWrapper: GoogleChartWrapper\n  ) => any;\n}\n\nexport type VizEventsProps = {\n  chartWrapper: GoogleChartWrapper;\n  onReady?: (chartWrapper: GoogleChartWrapper) => any;\n  onError?: (chartWrapper: GoogleChartWrapper) => any;\n  onSelect?: (selection: Array<{ row?: any; column?: any }>) => any;\n  render?: (props: VizEventsProps, chartWrapper: GoogleChartWrapper) => any;\n  children?: (props: VizEventsProps, chartWrapper: GoogleChartWrapper) => any;\n};\n\n/*\n *\n * <GoogleChartsTypes>\n *\n */\n\n/*\n *\n * Reference + Docs:\n * https://developers.google.com/chart/interactive/docs/reference#constructor_3\n * https://developers.google.com/chart/interactive/docs/reference#google.visualization.drawchart\n *\n */\nexport type GoogleChartWrapperChartType =\n  | \"AnnotationChart\"\n  | \"AreaChart\"\n  | \"BarChart\"\n  | \"BubbleChart\"\n  | \"Calendar\"\n  | \"CandlestickChart\"\n  | \"ColumnChart\"\n  | \"ComboChart\"\n  | \"DiffChart\"\n  | \"DonutChart\"\n  | \"Gantt\"\n  | \"Gauge\"\n  | \"GeoChart\"\n  | \"Histogram\"\n  | \"LineChart\"\n  | \"Line\"\n  | \"Bar\"\n  | \"Map\"\n  | \"OrgChart\"\n  | \"PieChart\"\n  | \"Sankey\"\n  | \"ScatterChart\"\n  | \"Scatter\"\n  | \"SteppedAreaChart\"\n  | \"Table\"\n  | \"Timeline\"\n  | \"TreeMap\"\n  | \"WaterfallChart\"\n  | \"WordTree\";\n\n// https://developers.google.com/chart/interactive/docs/reference#google.visualization.drawchart\nexport interface ChartWrapperOptions {\n  chartType: string;\n  containerId: string;\n  options: Partial<{\n    width: number;\n    height: number;\n    is3D: boolean;\n    title: string;\n    backgroundColor: string;\n    hAxis?: {\n      minValue?: any;\n      maxValue?: any;\n      ticks?: GoogleChartTicks;\n      title?: string;\n      viewWindow?: { max?: any; min?: any };\n      [otherOptionKey: string]: any;\n    };\n    vAxis?: {\n      minValue?: any;\n      maxValue?: any;\n      ticks?: GoogleChartTicks;\n      title?: string;\n      viewWindow?: { max?: any; min?: any };\n      [otherOptionKey: string]: any;\n    };\n    legend: any;\n    colors: string[];\n    [otherOptionKey: string]: any;\n  }>;\n  dataTable?: GoogleDataTable;\n  dataSourceUrl?: string;\n  query?: string;\n  refreshInterval?: number;\n  view: any[] | {};\n  [otherOptionKey: string]: any;\n}\n\nexport type GoogleChartAction = {\n  id: string;\n  text: string;\n  action: (chartWrapper: GoogleChartWrapper) => void;\n};\n\nexport type GoogleChartControlProp = {\n  controlType:\n    | \"CategoryFilter\"\n    | \"ChartRangeFilter\"\n    | \"DateRangeFilter\"\n    | \"NumberRangeFilter\"\n    | \"StringFilter\";\n  options: {};\n  controlWrapperParams?: {};\n  controlID?: string;\n  controlPosition?: \"top\" | \"bottom\";\n  controlEvents?: ReactGoogleChartEvent[];\n};\n\nexport type GoogleChartWrapper = {\n  new (chartWrapperOptions: Partial<ChartWrapperOptions>): GoogleChartWrapper;\n  draw: (chartArgs?: ChartWrapperProps) => any;\n  toJSON: () => string;\n  clone: () => GoogleChartWrapper;\n  getDataSourceUrl: () => string;\n  getDataTable: () => GoogleDataTable | null; // null if datasourceurl set or ref to DataTable\n  getChartType: () => GoogleChartWrapperChartType;\n  getChartName: () => string;\n  getChart: () => {\n    removeAction: (actionID: string) => void;\n    getSelection: () => { row?: any; column?: any }[];\n    setAction: (ChartAction: GoogleChartAction) => void;\n    getImageURI: () => void;\n    clearChart: () => void; // Clears the chart, and releases all of its allocated resources.\n  }; // ref to chart\n  getContainerId: () => string;\n  getQuery: () => string;\n  getRefreshInterval: () => number;\n  getOption: (key: string, opt_default_value?: any) => any; // returns opt_default_value if key not found\n  getOptions: () => {};\n  getSelection: () => { row?: any; column?: any }[];\n  getView: () => {} | any[]; // Same format as toJSON\n\n  setDataSourceUrl: (url: string) => void;\n  setDataTable: (table: any) => void;\n  setChartType: (chartType: GoogleChartWrapperChartType) => void;\n  setChartName: (name: string) => void; // Sets an arbitrary name for the chart. This is not shown anywhere on the chart, unless a custom chart is explicitly designed to use it.\n  setContainerId: (id: string) => void; // Sets the ID of the containing DOM element for the chart.\n  setQuery: (query_string: string) => void; // Sets a query string, if this chart queries a data source. You must also set the data source URL if specifying this value.\n  setRefreshInterval: (interval: number) => void; // Sets the refresh interval for this chart, if it queries a data source. You must also set a data source URL if specifying this value. Zero indicates no refresh.\n  setOption: (key: string, value: any) => void; // \tSets a single chart option value, where key is the option name and value is the value. To unset an option, pass in null for the value. Note that key may be a qualified name, such as 'vAxis.title'.\n  setOptions: (options_obj: Partial<ChartWrapperOptions[\"options\"]>) => void; //\n};\n\nexport type GoogleVizEventName =\n  | \"ready\"\n  | \"error\"\n  | \"select\"\n  | \"animationfinish\"\n  | \"statechange\"\n  | \"ok\"\n  | \"cancel\"\n  | \"animationstart\";\n\nexport type GoogleVizEvents = {\n  addListener: (\n    chartWrapper: GoogleChartWrapper | GoogleChartControl | GoogleChartEditor,\n    name: GoogleVizEventName,\n    onEvent: (chartWrapper: GoogleChartWrapper) => any\n  ) => any;\n  removeListener: (\n    chartWrapper: GoogleChartWrapper,\n    name: GoogleVizEventName,\n    callback: Function\n  ) => any;\n  removeAllListeners: (chartWrapper: GoogleChartWrapper) => any;\n};\n\nexport type GoogleChartPackages =\n  | \"corechart\"\n  | \"charteditor\"\n  | \"controls\"\n  | \"calendar\"\n  | \"gantt\"\n  | \"gauge\"\n  | \"geochart\"\n  | \"map\"\n  | \"orgchart\"\n  | \"sankey\"\n  | \"table\"\n  | \"timeline\"\n  | \"treemap\"\n  | \"wordtree\";\n\nexport type GoogleChartVersion = \"current\" | \"upcoming\";\n\nexport type GoogleDataTableColumnType =\n  | \"string\"\n  | \"number\"\n  | \"boolean\"\n  | \"date\"\n  | \"datetime\"\n  | \"timeofday\";\n\n// export type GoogleDataTable = {\n//   addColumn: (type: GoogleDataTableColumnType) => number;\n// };\n\n// Reference https://developers.google.com/chart/interactive/docs/roles\nexport enum GoogleDataTableColumnRoleType {\n  annotation = \"annotation\",\n  annotationText = \"annotationText\",\n  certainty = \"certainty\",\n  emphasis = \"emphasis\",\n  interval = \"interval\",\n  scope = \"scope\",\n  style = \"style\",\n  tooltip = \"tooltip\",\n  domain = \"domain\",\n}\n\nexport type GoogleDataTableColumn =\n  | {\n      type: GoogleDataTableColumnType;\n      label?: string; //  A label for the column.\n      role?: GoogleDataTableColumnRoleType;\n      pattern?: string;\n      p?: {};\n      id?: string;\n    }\n  | string;\n\n// Ref : https://developers.google.com/chart/interactive/docs/reference#dataparam\n\nexport type GoogleDataTableCell =\n  | {\n      v?: any; // The cell value. Type should match DataTableColumn type field\n      f?: string; // A string version of the v value, formatted for display.\n      p?: {};\n    }\n  | string\n  | number\n  | boolean\n  | Date;\n\nexport type GoogleDataTableRow = GoogleDataTableCell[];\n\nexport type GoogleDataTableJS = {\n  cols: GoogleDataTableColumn[];\n  rows: {\n    c: GoogleDataTableRow;\n  }[];\n  p?: {};\n};\n\n// Reference : https://developers.google.com/chart/interactive/docs/reference#DataTable\n\nexport type GoogleDataTableRowFilter = {\n  column: number;\n  value: any;\n  minValue?: any;\n  maxValue?: any;\n};\n\nexport type GoogleDataTableSortColumns =\n  | number\n  | {\n      column: number;\n      desc: boolean;\n    }\n  | number[]\n  | {\n      column: number;\n      desc: boolean;\n    }[];\n\nexport type GoogleDataTable = {\n  // https://developers.google.com/chart/interactive/docs/reference#dataparam\n  new (dataParam: any): GoogleDataTable;\n  addColumn: (column: GoogleDataTableColumn) => number;\n  addRow: (row?: GoogleDataTableRow) => number;\n  addRows: (rows?: GoogleDataTableRow[] | number[] | any[]) => number;\n  clone: () => GoogleDataTable;\n\n  getColumnId: (columnIndex: number) => string;\n  getColumnLabel: (columnIndex: number) => string;\n  getColumnPattern: (columnIndex: number) => string;\n  getColumnProperties: (columnIndex: number) => {};\n  getColumnProperty: (columnIndex: number, name: string) => any;\n  getColumnRange: (columnIndex: number) => {\n    min: number | null;\n    max: number | null;\n  };\n  getColumnRole: (columnIndex: number) => GoogleDataTableColumnRoleType;\n  getColumnType: (columnIndex: number) => GoogleDataTableColumnType;\n  getDistinctValues: (columnIndex: number) => any[];\n  getFilteredRows: (filters: GoogleDataTableRowFilter[]) => number[];\n  getFormattedValue: (rowIndex: number, columnIndex: number) => string;\n  getNumberOfColumns: () => number;\n  getNumberOfRows: () => number;\n  getProperties: (rowIndex: number, columnIndex: number) => {};\n  getProperty: (rowIndex: number, columnIndex: number, name: string) => any;\n  getRowProperties: (rowIndex: number) => {};\n  getRowProperty: (rowIndex: number, name: string) => any;\n  getSortedRows: (sortColumns: GoogleDataTableSortColumns) => number[];\n  getTableProperties: () => {};\n  getTableProperty: (name: string) => any;\n  getValue: (\n    rowIndex: number,\n    columnIndex: number\n  ) => boolean | string | number | Date | number[] | null;\n  insertColumn: (\n    columnIndex: number,\n    type: GoogleDataTableColumnType,\n    label?: string,\n    id?: string\n  ) => void;\n  insertRows: (\n    rowIndex: number,\n    numberOrArray: GoogleDataTableRow[] | number\n  ) => void;\n  removeColumn: (columnIndex: number) => void;\n  removeColumns: (columnIndex: number, numberOfColumns: number) => void;\n  removeRow: (rowIndex: number) => void;\n  removeRows: (rowIndex: number, numberOfColumns: number) => void;\n  setCell: (\n    rowIndex: number,\n    columnIndex: number,\n    value?: any,\n    formattedValue?: string,\n    properties?: {}\n  ) => {};\n  setColumnLabel: (columnIndex: number, label: string) => void;\n  setColumnProperty: (columnIndex: number, name: string, value: any) => void;\n  setColumnProperties: (columnIndex: number, properties: {} | null) => void;\n  setFormattedValue: (\n    rowIndex: number,\n    columnIndex: number,\n    formattedValue: string\n  ) => void;\n  setProperty: (\n    rowIndex: number,\n    columnIndex: number,\n    name: string,\n    value: any\n  ) => void;\n  setProperties: (\n    rowIndex: number,\n    columnIndex: number,\n    properties: {} | null\n  ) => void;\n\n  setRowProperty: (rowIndex: number, name: string, value: any) => void;\n  setRowProperties: (rowIndex: number, properties: {} | null) => void;\n  setTableProperties: (properties: {} | null) => void;\n  setValue: (rowIndex: number, columnIndex: number, value: string) => void;\n  sort: (sortColumns: GoogleDataTableSortColumns) => void;\n  toJSON: () => string; // GoogleDataTableJS\n};\n\nexport type GoogleArrayToDataTable = (\n  data: any[][],\n  isFirstRowLabels?: boolean\n) => GoogleDataTable;\n\nexport type GoogleChartOptions = {\n  width?: number;\n  height?: number;\n  is3D?: boolean;\n  backgroundColor: string;\n\n  title?: string;\n  hAxis?: {\n    minValue?: any;\n    maxValue?: any;\n    ticks?: GoogleChartTicks;\n    title?: string;\n    viewWindow?: { max?: any; min?: any; [otherOptionKey: string]: any };\n    [otherOptionKey: string]: any;\n  };\n  vAxis?: {\n    minValue?: any;\n    maxValue?: any;\n    ticks?: GoogleChartTicks;\n    title?: string;\n    viewWindow?: { max?: any; min?: any; [otherOptionKey: string]: any };\n    [otherOptionKey: string]: any;\n  };\n  bubble?: {};\n  pieHole?: number;\n  redFrom?: number;\n  redTo?: number;\n  yellowFrom?: number;\n  yellowTo?: number;\n  minorTicks?: number;\n  legend?:\n    | string\n    | {\n        position?: string;\n        maxLines?: number;\n        [otherOptionKey: string]: any;\n      };\n  curveType?: string;\n  showTooltip?: boolean;\n  showInfoWindow?: boolean;\n  allowHtml?: boolean;\n  isStacked?: string | boolean;\n  minColor?: string;\n  midColor?: string;\n  maxColor?: string;\n  headerHeight?: number;\n  fontColor?: string;\n  showScale?: boolean;\n  bar?: { groupWidth?: string }; // Remove space between bars.\n  candlestick?: {\n    fallingColor?: { strokeWidth?: number; fill?: string }; // red\n    risingColor?: { strokeWidth?: number; fill?: string }; // green\n    [otherOptionKey: string]: any;\n  };\n  wordtree?: {\n    format?: string;\n    word?: string;\n    [otherOptionKey: string]: any;\n  };\n  [otherOptionKey: string]: any;\n};\n\n/*\n *\n * </GoogleChartsTypes>\n *\n */\n\nexport type WindowWithMaybeGoogle = Window & { google?: any };\n\nexport type ReactGoogleChartEvent = {\n  eventName: GoogleVizEventName;\n  callback: (eventCallbackArgs: {\n    chartWrapper: GoogleChartWrapper;\n    controlWrapper?: GoogleChartControl;\n    props: ReactGoogleChartProps;\n    google: GoogleViz;\n    eventArgs: any;\n  }) => void;\n};\n\nexport type GoogleChartToolbarItem = {\n  type: \"igoogle\" | \"html\" | \"csv\" | \"htmlcode\";\n  datasource: string;\n  gadget?: string;\n  userPrefs?: {\n    \"3d\": number;\n    [otherKeyMaybe: string]: any;\n  };\n};\n\nexport type ReactGoogleChartProps = {\n  height?: string | number;\n  width?: string | number;\n  graphID?: string;\n  chartType: GoogleChartWrapperChartType;\n  diffdata?: {\n    old: any;\n    new: any;\n  };\n  options?: ChartWrapperOptions[\"options\"];\n  loader?: JSX.Element;\n  errorElement?: JSX.Element;\n  data?: any[] | {};\n  rows?: GoogleDataTableRow[];\n  columns?: GoogleDataTableColumn[];\n  chartActions?: GoogleChartAction[];\n  chartEvents?: ReactGoogleChartEvent[];\n  chartVersion?: GoogleChartVersion;\n  chartPackages?: GoogleChartPackages[];\n  chartLanguage?: string;\n  mapsApiKey?: string;\n  graph_id?: string;\n  legendToggle?: boolean;\n  legend_toggle?: boolean;\n  onLoad?: (google: GoogleViz) => void;\n  getChartWrapper?: (\n    chartWrapper: GoogleChartWrapper,\n    google: GoogleViz\n  ) => void;\n  getChartEditor?: (args: {\n    chartEditor: GoogleChartEditor;\n    chartWrapper: GoogleChartWrapper;\n    google: GoogleViz;\n  }) => void;\n  className?: string;\n  style?: React.CSSProperties;\n  formatters?: {\n    column: number | number[];\n    type:\n      | \"ArrowFormat\"\n      | \"BarFormat\"\n      | \"ColorFormat\"\n      | \"DateFormat\"\n      | \"NumberFormat\"\n      | \"PatternFormat\";\n    options?: {};\n  }[];\n  spreadSheetUrl?: string;\n  spreadSheetQueryParameters?: {\n    headers: number;\n    gid?: number | string;\n    sheet?: string;\n    query?: string;\n    access_token?: string;\n  };\n  rootProps?: any;\n  controls?: GoogleChartControlProp[];\n  render?: ReactGoogleChartDashboardRender;\n  //https://developers.google.com/chart/interactive/docs/gallery/toolbar#example_1\n  toolbarItems?: GoogleChartToolbarItem[];\n  toolbarID?: string;\n  chartWrapperParams?: any;\n};\n\nexport type GoogleChartDashboard = {\n  draw: (data: GoogleDataTable) => void;\n  bind: (\n    controlWrapperOrWrappers: GoogleChartControl | GoogleChartControl[],\n    chartWrapper: GoogleChartWrapper\n  ) => void;\n};\n\nexport type ReactGoogleChartDashboardRender = ({\n  renderControl,\n  renderChart,\n  renderToolbar,\n}: {\n  renderControl: (\n    filter: ({\n      control,\n      controlProp,\n    }: {\n      control: GoogleChartControl;\n      controlProp: GoogleChartControlProp;\n    }) => boolean\n  ) => any;\n  renderChart: () => any;\n  renderToolbar: () => any;\n}) => any;\nexport type GoogleChartControlOptions = any;\nexport type GoogleChartControl = {\n  getContainerId: () => string;\n  getOptions: () => GoogleChartControlOptions;\n  getState: () => any;\n  setState: (state: any) => void;\n  setOptions: (options: GoogleChartControlOptions) => void;\n  setControlType: (controlType: string) => void;\n};\n\nexport type ReactGoogleChartState = {\n  loadingStatus: \"loading\" | \"errored\" | \"ready\";\n  google: null | GoogleViz;\n  // hiddenColumns: string[];\n};\n\nexport type ReactGoogleChartContext = {\n  data: ReactGoogleChartProps[\"data\"];\n  rows: ReactGoogleChartProps[\"rows\"] | null;\n  columns: ReactGoogleChartProps[\"columns\"] | null;\n  diffdata: ReactGoogleChartProps[\"diffdata\"] | null;\n  options: ReactGoogleChartProps[\"options\"] | null;\n  legend_toggle: ReactGoogleChartProps[\"legend_toggle\"] | null;\n  legendToggle: ReactGoogleChartProps[\"legendToggle\"] | null;\n  chartType: ReactGoogleChartProps[\"chartType\"] | null;\n  formatters: ReactGoogleChartProps[\"formatters\"] | null;\n  spreadSheetUrl: ReactGoogleChartProps[\"spreadSheetUrl\"] | null;\n  spreadSheetQueryParameters:\n    | ReactGoogleChartProps[\"spreadSheetQueryParameters\"]\n    | null;\n};\n","import { Chart } from \"./ReactGoogleCharts\";\n\nexport * from \"./types\";\nexport { Chart };\nexport default Chart;\n"],"names":["useLoadScript","src","onLoad","onError","useEffect","document","foundScript","querySelector","dataset","loaded","script","createElement","onLoadWithMarker","addEventListener","head","append","removeEventListener","useLoadGoogleCharts","chartVersion","chartPackages","chartLanguage","mapsApiKey","googleCharts","setGoogleCharts","useState","failed","setFailed","google","window","charts","load","packages","language","setOnLoadCallback","LoadGoogleCharts","params","chartDefaultProps","legend_toggle","options","legendToggle","getChartWrapper","spreadSheetQueryParameters","headers","gid","rootProps","chartWrapperParams","uniqueID","generateUniqueID","DEFAULT_CHART_COLORS","loadDataTableFromSpreadSheet","googleViz","spreadSheetUrl","urlParams","Promise","resolve","reject","queryString","query","encodeURIComponent","sheet","access_token","urlQueryString","urlToSpreadSheet","visualization","Query","send","response","isError","getMessage","getDetailedMessage","getDataTable","Provider","Consumer","React","createContext","ContextProvider","children","value","ContextConsumer","render","context","GRAY_COLOR","GoogleChartDataTableInner","Component","componentDidMount","draw","props","onResize","listenToLegendToggle","componentWillUnmount","googleChartWrapper","events","removeAllListeners","getChartType","getChart","clearChart","componentDidUpdate","state","hiddenColumns","addListener","chart","selection","getSelection","dataTable","length","row","columnIndex","column","columnID","getColumnID","includes","setState","filter","colID","applyFormatters","formatters","formatter","type","vizFormatter","ArrowFormat","format","BarFormat","ColorFormat","ranges","range","addRange","DateFormat","NumberFormat","PatternFormat","getColumnId","getColumnLabel","data","diffdata","rows","columns","chartType","chartDiff","oldData","arrayToDataTable","old","newData","new","prototype","computeDiff","Array","isArray","DataTable","columnCount","getNumberOfColumns","i","previousColumnLabel","previousColumnID","previousColumnType","getColumnType","removeColumn","addColumn","label","id","setChartType","setOptions","setDataTable","googleChartDashboard","grayOutHiddenColumns","hasAHiddenColumn","colors","from","map","dontcare","GoogleChartDataTable","shouldComponentUpdate","GoogleChartEvents","listenToEvents","chartEvents","event","eventName","callback","args","chartWrapper","eventArgs","propsFromContext","constructor","controlCounter","GoogleChart","toolbarItems","getChartEditor","chartConfig","containerId","getGraphID","ChartWrapper","Dashboard","dashboard_ref","googleChartControls","addControls","drawToolbar","toolbar_ref","current","googleChartEditor","ChartEditor","chartEditor","isReady","controls","controlType","controlWrapperParams","control","setControlType","nextProps","nextState","width","height","style","divStyle","div","ref","renderChart","renderControl","renderToolbar","renderToolBar","controlProp","controlPosition","graphID","createRef","graph_id","instanceGraphID","getControlID","index","controlID","controlIDMaybe","controlOptions","ControlWrapper","bind","chartControl","controlEvents","removeListener","controlWrapper","className","Fragment","key","getContainerId","Chart","loader","errorElement","loadingStatus","_isMounted","isFullyLoaded","onSuccess","setInterval","clearInterval","defaultProps","GoogleDataTableColumnRoleType","annotation","annotationText","certainty","emphasis","interval","scope","tooltip","domain"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;;;;;IAMO,SAASA,aAAa,CAC3BC,GAAW,EACXC,MAAmB,EACnBC,OAAoB,EACpB;AACAC,IAAAA,eAAS,CAAC,IAAM;QACd,IAAI,CAACC,QAAQ,EAAE;YACb,OAAO;AACR,SAAA;;AAGD,QAAA,MAAMC,WAAW,GAAGD,QAAQ,CAACE,aAAa,CACxC,cAAa,CAAM,MAAE,CAANN,GAAG,EAAC,IAAE,CAAC,CACvB,CAAC;;AAGF,QAAA,IAAIK,WAAW,KAAA,IAAA,IAAXA,WAAW,KAAA,KAAA,CAAS,GAApBA,KAAAA,CAAoB,GAApBA,WAAW,CAAEE,OAAO,CAACC,MAAM,EAAE;YAC/BP,MAAM,KAAA,IAAA,IAANA,MAAM,KAAI,KAAA,CAAA,GAAVA,KAAAA,CAAU,GAAVA,MAAM,EAAI,CAAC;YACX,OAAO;AACR,SAAA;;QAGD,MAAMQ,MAAM,GAAGJ,WAAW,IAAID,QAAQ,CAACM,aAAa,CAAC,QAAQ,CAAC,CAAC;;QAG/D,IAAI,CAACL,WAAW,EAAE;AAChBI,YAAAA,MAAM,CAACT,GAAG,GAAGA,GAAG,CAAC;AAClB,SAAA;;QAGD,MAAMW,gBAAgB,GAAG,IAAM;AAC7BF,YAAAA,MAAM,CAACF,OAAO,CAACC,MAAM,GAAG,GAAG,CAAC;YAC5BP,MAAM,KAAA,IAAA,IAANA,MAAM,KAAI,KAAA,CAAA,GAAVA,KAAAA,CAAU,GAAVA,MAAM,EAAI,CAAC;SACZ,CAAC;AAEFQ,QAAAA,MAAM,CAACG,gBAAgB,CAAC,MAAM,EAAED,gBAAgB,CAAC,CAAC;AAElD,QAAA,IAAIT,OAAO,EAAE;AACXO,YAAAA,MAAM,CAACG,gBAAgB,CAAC,OAAO,EAAEV,OAAO,CAAC,CAAC;AAC3C,SAAA;;QAGD,IAAI,CAACG,WAAW,EAAE;AAChBD,YAAAA,QAAQ,CAACS,IAAI,CAACC,MAAM,CAACL,MAAM,CAAC,CAAC;AAC9B,SAAA;AAED,QAAA,OAAO,IAAM;AACXA,YAAAA,MAAM,CAACM,mBAAmB,CAAC,MAAM,EAAEJ,gBAAgB,CAAC,CAAC;AAErD,YAAA,IAAIT,OAAO,EAAE;AACXO,gBAAAA,MAAM,CAACM,mBAAmB,CAAC,OAAO,EAAEb,OAAO,CAAC,CAAC;AAC9C,aAAA;SACF,CAAC;KACH,EAAE,EAAE,CAAC,CAAC;AACR;;ACnDD;;;;;;;;AAQG,IACI,SAASc,mBAAmB,CAAC,KAKP,EAAE;AALK,IAAA,IAAA,EAClCC,YAAY,EAAG,SAAS,GACxBC,aAAa,EAAG;QAAC,WAAW;QAAE,UAAU;KAAC,GACzCC,aAAa,EAAG,IAAI,GACpBC,UAAU,GACiB,GALO,KAKP,CAAA;IAC3B,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGC,cAAQ,CAAmB,IAAI,CAAC,CAAC;IACzE,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGF,cAAQ,CAAC,KAAK,CAAC,CAAC;IAE5CxB,aAAa,CACX,0CAA0C,EAC1C,IAAM;;AAEJ,QAAA,MAAM2B,MAAM,GAAGC,MAAM,KAAA,IAAA,IAANA,MAAM,KAAQ,KAAA,CAAA,GAAdA,KAAAA,CAAc,GAAdA,MAAM,CAAED,MAAM,CAAc;QAE3C,IAAI,CAACA,MAAM,EAAE;YACX,OAAO;AACR,SAAA;AAEDA,QAAAA,MAAM,CAACE,MAAM,CAACC,IAAI,CAACZ,YAAY,EAAE;AAC/Ba,YAAAA,QAAQ,EAAEZ,aAAa;AACvBa,YAAAA,QAAQ,EAAEZ,aAAa;YACvBC,UAAU;AACX,SAAA,CAAC,CAAC;AACHM,QAAAA,MAAM,CAACE,MAAM,CAACI,iBAAiB,CAAC,IAAM;YACpCV,eAAe,CAACI,MAAM,CAAC,CAAC;AACzB,SAAA,CAAC,CAAC;AACJ,KAAA,EACD,IAAM;QACJD,SAAS,CAAC,IAAI,CAAC,CAAC;AACjB,KAAA,CACF,CAAC;IAEF,OAAO;QAACJ,YAAY;QAAEG,MAAM;KAAC,CAAU;AACxC,CAAA;AAOD;;AAEG,IACI,SAASS,gBAAgB,CAAC,KAIR,EAAE;QAJM,EAC/BhC,MAAM,GACNC,OAAO,GACP,GAAGgC,MAAM,EACc,GAJQ,KAIR,CAAA;IACvB,MAAM,CAACb,YAAY,EAAEG,MAAM,CAAC,GAAGR,mBAAmB,CAACkB,MAAM,CAAC,CAAC;AAE3D/B,IAAAA,eAAS,CAAC,IAAM;QACd,IAAIkB,YAAY,IAAIpB,MAAM,EAAE;YAC1BA,MAAM,CAACoB,YAAY,CAAC,CAAC;AACtB,SAAA;KACF,EAAE;QAACA,YAAY;AAAC,KAAA,CAAC,CAAC;AAEnBlB,IAAAA,eAAS,CAAC,IAAM;QACd,IAAIqB,MAAM,IAAItB,OAAO,EAAE;AACrBA,YAAAA,OAAO,EAAE,CAAC;AACX,SAAA;KACF,EAAE;QAACsB,MAAM;AAAC,KAAA,CAAC,CAAC;AAEb,IAAA,OAAO,IAAI,CAAC;AACb;;AClFM,MAAMW,iBAAiB,GAAmC;;AAE/DC,IAAAA,aAAa,EAAE,KAAK;;AAEpBC,IAAAA,OAAO,EAAE,EAAE;AACXC,IAAAA,YAAY,EAAE,KAAK;IACnBC,eAAe,EAAE,IAAM,EAAE;AACzBC,IAAAA,0BAA0B,EAAE;AAC1BC,QAAAA,OAAO,EAAE,CAAC;AACVC,QAAAA,GAAG,EAAE,CAAC;AACP,KAAA;AACDC,IAAAA,SAAS,EAAE,EAAE;AACbC,IAAAA,kBAAkB,EAAE,EAAE;CACvB;;ACfD,IAAIC,QAAQ,GAAG,CAAC,CAAC;AACV,MAAMC,gBAAgB,GAAG,IAAM;IACpCD,QAAQ,IAAI,CAAC,CAAC;AACd,IAAA,OAAO,mBAAkB,CAAW,MAAA,CAATA,QAAQ,CAAE,CAAC;CACvC;;ACJM,MAAME,oBAAoB,GAAG;IAClC,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;CACV;;ACnBM,MAAMC,4BAA4B,GAAG,eAC1CC,SAAoB,EACpBC,cAAsB,EAQnB;AAPHC,IAAAA,IAAAA,SAMC,oEAAG,EAAE,CAAA;AAEN,IAAA,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,GAAK;QACtC,MAAMb,OAAO,GAAI,EAAA,CAEhB,MAAA,CADCU,SAAS,CAACV,OAAO,GAAI,UAAQ,CAAoB,MAAA,CAAlBU,SAAS,CAACV,OAAO,CAAE,GAAI,WAAS,CAC/D,CAAC;QACH,MAAMc,WAAW,GAAI,EAAA,CAEpB,MAAA,CADCJ,SAAS,CAACK,KAAK,GAAG,MAAK,CAAsC,MAAA,CAApCC,kBAAkB,CAACN,SAAS,CAACK,KAAK,CAAC,CAAE,GAAI,EAAA,CAClE,CAAC;QACH,MAAMd,GAAG,GAAG,EAAC,CAA+C,MAAA,CAA7CS,SAAS,CAACT,GAAG,GAAG,OAAM,CAAgB,MAAA,CAAdS,SAAS,CAACT,GAAG,CAAE,GAAG,EAAE,CAAE,CAAC;QAC9D,MAAMgB,KAAK,GAAG,EAAC,CAAqD,MAAA,CAAnDP,SAAS,CAACO,KAAK,GAAG,SAAQ,CAAkB,MAAA,CAAhBP,SAAS,CAACO,KAAK,CAAE,GAAG,EAAE,CAAE,CAAC;QACtE,MAAMC,YAAY,GAAG,EAAC,CAErB,MAAA,CADCR,SAAS,CAACQ,YAAY,GAAG,gBAAe,CAAyB,MAAA,CAAvBR,SAAS,CAACQ,YAAY,CAAE,GAAG,EAAE,CACvE,CAAC;AACH,QAAA,MAAMC,cAAc,GAAG,EAAC,CAAYlB,MAAG,CAAbD,OAAO,CAAO,CAAEiB,MAAK,CAAXhB,GAAG,CAAS,CAAEa,MAAW,CAAnBG,KAAK,CAAe,CAAEC,MAAY,CAA1BJ,WAAW,CAAgB,CAAA,MAAA,CAAbI,YAAY,CAAE,CAAC;AAC/E,QAAA,MAAME,gBAAgB,GAAI,EAAA,CAA4BD,MAAc,CAAxCV,cAAc,EAAC,WAAS,CAAiB,CAAA,MAAA,CAAfU,cAAc,CAAG;QACvE,MAAMJ,KAAK,GAAG,IAAIP,SAAS,CAACa,aAAa,CAACC,KAAK,CAACF,gBAAgB,CAAC,CAAC;AAClEL,QAAAA,KAAK,CAACQ,IAAI,CAAC,CAACC,QAAa,GAAK;AAC5B,YAAA,IAAIA,QAAQ,CAACC,OAAO,EAAE,EAAE;gBACtBZ,MAAM,CACJ,mBAAkB,CAA2BW,MAA6B,CAAtDA,QAAQ,CAACE,UAAU,EAAE,EAAC,GAAC,CAAgC,CAAA,MAAA,CAA9BF,QAAQ,CAACG,kBAAkB,EAAE,CAAE,CAC7E,CAAC;aACH,MAAM;AACLf,gBAAAA,OAAO,CAACY,QAAQ,CAACI,YAAY,EAAE,CAAC,CAAC;AAClC,aAAA;AACF,SAAA,CAAC,CAAC;AACJ,KAAA,CAAC,CAAC;CACJ;;AClCD,MAAM,EAAEC,QAAQ,GAAEC,QAAQ,GAAE,iBAAGC,gBAAK,CAACC,aAAa,CAACtC,iBAAiB,CAAC,CAAC;AAE/D,MAAMuC,eAAe,GAAG,CAMzB,KAAA,GAAA;AAN0B,IAAA,IAAA,EAC9BC,QAAQ,GACRC,KAAK,GAIN,GAAA,KAAA,CAAA;AACC,IAAA,qBAAOJ,+BAACF,QAAQ,EAAA;AAACM,QAAAA,KAAK,EAAEA,KAAK;AAAGD,KAAAA,EAAAA,QAAQ,CAAY,CAAC;CACtD,CAAC;AAEK,MAAME,eAAe,GAAG,CAIzB,KAAA,GAAA;QAJ0B,EAC9BC,MAAM,GAGP,GAAA,KAAA,CAAA;AACC,IAAA,qBACEN,gBAACD,CAAAA,aAAAA,CAAAA,QAAQ,EACN,IAAA,EAAA,CAACQ,OAAO,GAAK;AACZ,QAAA,OAAOD,MAAM,CAACC,OAAO,CAA0B,CAAC;AACjD,KAAA,CACQ,CACX;CACH;;ACfD,MAAMC,UAAU,GAAG,SAAS,CAAC;AAatB,MAAMC,yBAAyB,SAAST,gBAAK,CAACU,SAAS,CAAA;AA0N5DC,IAAAA,iBAAiB,GAAG;AAClB,QAAA,IAAI,CAACC,IAAI,CAAC,IAAI,CAACC,KAAK,CAAC,CAAC;QACtB1D,MAAM,CAACf,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC0E,QAAQ,CAAC,CAAC;QACjD,IAAI,IAAI,CAACD,KAAK,CAACjD,aAAa,IAAI,IAAI,CAACiD,KAAK,CAAC/C,YAAY,EAAE;YACvD,IAAI,CAACiD,oBAAoB,EAAE,CAAC;AAC7B,SAAA;AACF,KAAA;AAEDC,IAAAA,oBAAoB,GAAG;QACrB,MAAM,EAAE9D,MAAM,GAAE+D,kBAAkB,GAAE,GAAG,IAAI,CAACJ,KAAK,CAAC;QAClD1D,MAAM,CAACZ,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAACuE,QAAQ,CAAC,CAAC;QACpD5D,MAAM,CAACoC,aAAa,CAAC4B,MAAM,CAACC,kBAAkB,CAACF,kBAAkB,CAAC,CAAC;AACnE,QAAA,IAAIA,kBAAkB,CAACG,YAAY,EAAE,KAAK,UAAU,EAAE;YACpDH,kBAAkB,CAACI,QAAQ,EAAE,IAC3BJ,kBAAkB,CAACI,QAAQ,EAAE,CAACC,UAAU,EAAE,CAAC;AAC9C,SAAA;AACF,KAAA;AAEDC,IAAAA,kBAAkB,GAAG;AACnB,QAAA,IAAI,CAACX,IAAI,CAAC,IAAI,CAACC,KAAK,CAAC,CAAC;AACvB,KAAA;AACDP,IAAAA,MAAM,GAAG;AACP,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;;;AA7ODkB,QAAAA,IAAAA,CAAAA,KAAK,GAAG;AACNC,YAAAA,aAAa,EAAE,EAAE;AAClB,SAAU,CAAA;QAEX,IAAQV,CAAAA,oBAAoB,GAAG,IAAM;YACnC,MAAM,EAAE7D,MAAM,GAAE+D,kBAAkB,GAAE,GAAG,IAAI,CAACJ,KAAK,CAAC;YAClD3D,MAAM,CAACoC,aAAa,CAAC4B,MAAM,CAACQ,WAAW,CACrCT,kBAAkB,EAClB,QAAQ,EACR,IAAM;AACJ,gBAAA,MAAMU,KAAK,GAAGV,kBAAkB,CAACI,QAAQ,EAAE,CAAC;AAC5C,gBAAA,MAAMO,SAAS,GAAGD,KAAK,CAACE,YAAY,EAAE,CAAC;AACvC,gBAAA,MAAMC,SAAS,GAAGb,kBAAkB,CAACpB,YAAY,EAAE,CAAC;AACpD,gBAAA,IACE+B,SAAS,CAACG,MAAM,KAAK,CAAC;gBAEtBH,SAAS,CAAC,CAAC,CAAC,CAACI,GAAG,IAChB,CAACF,SAAS,EACV;oBACA,OAAO;AACR,iBAAA;gBACD,MAAMG,WAAW,GAAGL,SAAS,CAAC,CAAC,CAAC,CAACM,MAAM,CAAC;gBACxC,MAAMC,QAAQ,GAAG,IAAI,CAACC,WAAW,CAACN,SAAS,EAAEG,WAAW,CAAC,CAAC;gBAC1D,IAAI,IAAI,CAACT,KAAK,CAACC,aAAa,CAACY,QAAQ,CAACF,QAAQ,CAAC,EAAE;AAC/C,oBAAA,IAAI,CAACG,QAAQ,CAAC,CAACd,KAAK,IAAM;AACxB,4BAAA,GAAGA,KAAK;AACRC,4BAAAA,aAAa,EAAE;mCACVD,KAAK,CAACC,aAAa,CAACc,MAAM,CAAC,CAACC,KAAK,GAAKA,KAAK,KAAKL,QAAQ,CAAC;AAC7D,6BAAA;AACF,yBAAA,CAAC,CAAC,CAAC;iBACL,MAAM;AACL,oBAAA,IAAI,CAACG,QAAQ,CAAC,CAACd,KAAK,IAAM;AACxB,4BAAA,GAAGA,KAAK;AACRC,4BAAAA,aAAa,EAAE;AAAID,gCAAAA,GAAAA,KAAK,CAACC,aAAa;gCAAEU,QAAQ;AAAC,6BAAA;AAClD,yBAAA,CAAC,CAAC,CAAC;AACL,iBAAA;AACF,aAAA,CACF,CAAC;AACH,SAAC,CAAA;AAEF,QAAA,IAAA,CAAQM,eAAe,GAAG,CAACX,SAA0B,EAAEY,UAAiB,GAAK;YAC3E,MAAM,EAAExF,MAAM,GAAE,GAAG,IAAI,CAAC2D,KAAK,CAAC;AAC9B,YAAA,KAAK,IAAI8B,SAAS,IAAID,UAAU,CAAE;gBAChC,OAAQC,SAAS,CAACC,IAAI;AACpB,oBAAA,KAAK,aAAa;AAAE,wBAAA;AAClB,4BAAA,MAAMC,YAAY,GAAG,IAAI3F,MAAM,CAACoC,aAAa,CAACwD,WAAW,CACvDH,SAAS,CAAC9E,OAAO,CAClB,CAAC;4BACFgF,YAAY,CAACE,MAAM,CAACjB,SAAS,EAAEa,SAAS,CAACT,MAAM,CAAC,CAAC;4BACjD,MAAM;AACP,yBAAA;AACD,oBAAA,KAAK,WAAW;AAAE,wBAAA;AAChB,4BAAA,MAAMW,YAAY,GAAG,IAAI3F,MAAM,CAACoC,aAAa,CAAC0D,SAAS,CACrDL,SAAS,CAAC9E,OAAO,CAClB,CAAC;4BACFgF,YAAY,CAACE,MAAM,CAACjB,SAAS,EAAEa,SAAS,CAACT,MAAM,CAAC,CAAC;4BACjD,MAAM;AACP,yBAAA;AACD,oBAAA,KAAK,aAAa;AAAE,wBAAA;AAClB,4BAAA,MAAMW,YAAY,GAAG,IAAI3F,MAAM,CAACoC,aAAa,CAAC2D,WAAW,CACvDN,SAAS,CAAC9E,OAAO,CAClB,CAAC;AACF,4BAAA,MAAM,EAAEqF,MAAM,GAAE,GAAGP,SAAS,CAAC;AAC7B,4BAAA,KAAK,IAAIQ,KAAK,IAAID,MAAM,CAAE;AACxBL,gCAAAA,YAAY,CAACO,QAAQ,CAAID,GAAAA,KAAK,CAAC,CAAC;AACjC,6BAAA;4BACDN,YAAY,CAACE,MAAM,CAACjB,SAAS,EAAEa,SAAS,CAACT,MAAM,CAAC,CAAC;4BACjD,MAAM;AACP,yBAAA;AACD,oBAAA,KAAK,YAAY;AAAE,wBAAA;AACjB,4BAAA,MAAMW,YAAY,GAAG,IAAI3F,MAAM,CAACoC,aAAa,CAAC+D,UAAU,CACtDV,SAAS,CAAC9E,OAAO,CAClB,CAAC;4BACFgF,YAAY,CAACE,MAAM,CAACjB,SAAS,EAAEa,SAAS,CAACT,MAAM,CAAC,CAAC;4BACjD,MAAM;AACP,yBAAA;AACD,oBAAA,KAAK,cAAc;AAAE,wBAAA;AACnB,4BAAA,MAAMW,YAAY,GAAG,IAAI3F,MAAM,CAACoC,aAAa,CAACgE,YAAY,CACxDX,SAAS,CAAC9E,OAAO,CAClB,CAAC;4BACFgF,YAAY,CAACE,MAAM,CAACjB,SAAS,EAAEa,SAAS,CAACT,MAAM,CAAC,CAAC;4BACjD,MAAM;AACP,yBAAA;AACD,oBAAA,KAAK,eAAe;AAAE,wBAAA;AACpB,4BAAA,MAAMW,YAAY,GAAG,IAAI3F,MAAM,CAACoC,aAAa,CAACiE,aAAa,CACzDZ,SAAS,CAAC9E,OAAO,CAClB,CAAC;4BACFgF,YAAY,CAACE,MAAM,CAACjB,SAAS,EAAEa,SAAS,CAACT,MAAM,CAAC,CAAC;4BACjD,MAAM;AACP,yBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAC,CAAA;AACF,QAAA,IAAA,CAAQE,WAAW,GAAG,CAACN,SAA0B,EAAEG,WAAmB,GAAK;AACzE,YAAA,OACEH,SAAS,CAAC0B,WAAW,CAACvB,WAAW,CAAC,IAClCH,SAAS,CAAC2B,cAAc,CAACxB,WAAW,CAAC,CACrC;AACH,SAAC,CAAA;QACF,IAAQrB,CAAAA,IAAI,GAAG,OAYc,KAAA,GAAA;AAZP,YAAA,IAAA,EACpB8C,IAAI,GACJC,QAAQ,GACRC,IAAI,GACJC,OAAO,GACPhG,OAAO,GACPD,aAAa,GACbE,YAAY,GACZgG,SAAS,GACTpB,UAAU,GACVhE,cAAc,GACdV,0BAA0B,GACJ,GAAA,KAAA,CAAA;YACtB,MAAM,EAAEd,MAAM,GAAE+D,kBAAkB,GAAE,GAAG,IAAI,CAACJ,KAAK,CAAC;YAClD,IAAIiB,SAAS,CAAkB;YAC/B,IAAIiC,SAAS,GAAG,IAAI,CAAC;AACrB,YAAA,IAAIJ,QAAQ,EAAE;AACZ,gBAAA,MAAMK,OAAO,GAAG9G,MAAM,CAACoC,aAAa,CAAC2E,gBAAgB,CAACN,QAAQ,CAACO,GAAG,CAAC,CAAC;AACpE,gBAAA,MAAMC,OAAO,GAAGjH,MAAM,CAACoC,aAAa,CAAC2E,gBAAgB,CAACN,QAAQ,CAACS,GAAG,CAAC,CAAC;AACpEL,gBAAAA,SAAS,GAAG7G,MAAM,CAACoC,aAAa,CAACwE,SAAS,CAAC,CAACO,SAAS,CAACC,WAAW,CAC/DN,OAAO,EACPG,OAAO,CACR,CAAC;AACH,aAAA;YACD,IAAIT,IAAI,KAAK,IAAI,EAAE;AACjB,gBAAA,IAAIa,KAAK,CAACC,OAAO,CAACd,IAAI,CAAC,EAAE;oBACvB5B,SAAS,GAAG5E,MAAM,CAACoC,aAAa,CAAC2E,gBAAgB,CAACP,IAAI,CAAC,CAAC;iBACzD,MAAM;oBACL5B,SAAS,GAAG,IAAI5E,MAAM,CAACoC,aAAa,CAACmF,SAAS,CAACf,IAAI,CAAC,CAAC;AACtD,iBAAA;AACF,aAAA,MAAM,IAAIE,IAAI,IAAIC,OAAO,EAAE;AAC1B/B,gBAAAA,SAAS,GAAG5E,MAAM,CAACoC,aAAa,CAAC2E,gBAAgB,CAAC;oBAACJ,OAAO;uBAAKD,IAAI;AAAC,iBAAA,CAAC,CAAC;aACvE,MAAM,IAAIlF,cAAc,EAAE;gBACzBoD,SAAS,GAAI,MAAMtD,4BAA4B,CAC7CtB,MAAM,EACNwB,cAAc,EACdV,0BAA0B,CACP,CAAC;aACvB,MAAM;gBACL8D,SAAS,GAAG5E,MAAM,CAACoC,aAAa,CAAC2E,gBAAgB,CAAC,EAAE,CAAC,CAAC;AACvD,aAAA;AACD,YAAA,MAAMS,WAAW,GAAG5C,SAAS,CAAC6C,kBAAkB,EAAE,CAAC;AACnD,YAAA,IAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,WAAW,EAAEE,CAAC,IAAI,CAAC,CAAE;gBACvC,MAAMzC,QAAQ,GAAG,IAAI,CAACC,WAAW,CAACN,SAAS,EAAE8C,CAAC,CAAC,CAAC;gBAChD,IAAI,IAAI,CAACpD,KAAK,CAACC,aAAa,CAACY,QAAQ,CAACF,QAAQ,CAAC,EAAE;oBAC/C,MAAM0C,mBAAmB,GAAG/C,SAAS,CAAC2B,cAAc,CAACmB,CAAC,CAAC,CAAC;oBACxD,MAAME,gBAAgB,GAAGhD,SAAS,CAAC0B,WAAW,CAACoB,CAAC,CAAC,CAAC;oBAClD,MAAMG,kBAAkB,GAAGjD,SAAS,CAACkD,aAAa,CAACJ,CAAC,CAAC,CAAC;AACtD9C,oBAAAA,SAAS,CAACmD,YAAY,CAACL,CAAC,CAAC,CAAC;oBAC1B9C,SAAS,CAACoD,SAAS,CAAC;AAClBC,wBAAAA,KAAK,EAAEN,mBAAmB;AAC1BO,wBAAAA,EAAE,EAAEN,gBAAgB;AACpBlC,wBAAAA,IAAI,EAAEmC,kBAAkB;AACzB,qBAAA,CAAC,CAAC;AACJ,iBAAA;AACF,aAAA;AACD,YAAA,MAAMpD,KAAK,GAAGV,kBAAkB,CAACI,QAAQ,EAAE,CAAC;AAC5C,YAAA,IAAIJ,kBAAkB,CAACG,YAAY,EAAE,KAAK,UAAU,EAAE;AACpDO,gBAAAA,KAAK,IAAIA,KAAK,CAACL,UAAU,EAAE,CAAC;AAC7B,aAAA;AACDL,YAAAA,kBAAkB,CAACoE,YAAY,CAACvB,SAAS,CAAC,CAAC;AAC3C7C,YAAAA,kBAAkB,CAACqE,UAAU,CAACzH,OAAO,IAAI,EAAE,CAAC,CAAC;AAC7CoD,YAAAA,kBAAkB,CAACsE,YAAY,CAACzD,SAAS,CAAC,CAAC;YAC3Cb,kBAAkB,CAACL,IAAI,EAAE,CAAC;AAC1B,YAAA,IAAI,IAAI,CAACC,KAAK,CAAC2E,oBAAoB,KAAK,IAAI,EAAE;gBAC5C,IAAI,CAAC3E,KAAK,CAAC2E,oBAAoB,CAAC5E,IAAI,CAACkB,SAAS,CAAC,CAAC;AACjD,aAAA;AAED,YAAA,IAAIiC,SAAS,EAAE;AACb9C,gBAAAA,kBAAkB,CAACsE,YAAY,CAACxB,SAAS,CAAC,CAAC;gBAC3C9C,kBAAkB,CAACL,IAAI,EAAE,CAAC;AAC3B,aAAA;AACD,YAAA,IAAI8B,UAAU,EAAE;AACd,gBAAA,IAAI,CAACD,eAAe,CAACX,SAAS,EAAEY,UAAU,CAAC,CAAC;AAC5CzB,gBAAAA,kBAAkB,CAACsE,YAAY,CAACzD,SAAS,CAAC,CAAC;gBAC3Cb,kBAAkB,CAACL,IAAI,EAAE,CAAC;AAC3B,aAAA;AACD,YAAA,IAAI9C,YAAY,KAAK,IAAI,IAAIF,aAAa,KAAK,IAAI,EAAE;gBACnD,IAAI,CAAC6H,oBAAoB,CAAC;oBAAE5H,OAAO;AAAE,iBAAA,CAAC,CAAC;AACxC,aAAA;YACD,OAAO;AACR,SAAC,CAAA;QACF,IAAQ4H,CAAAA,oBAAoB,GAAG,CAIzB,KAAA,GAAA;gBAJ0B,EAC9B5H,OAAO,GAGR,GAAA,KAAA,CAAA;YACC,MAAM,EAAEoD,kBAAkB,GAAE,GAAG,IAAI,CAACJ,KAAK,CAAC;AAC1C,YAAA,MAAMiB,SAAS,GAAGb,kBAAkB,CAACpB,YAAY,EAAE,CAAC;YACpD,IAAI,CAACiC,SAAS,EAAE,OAAO;AACvB,YAAA,MAAM4C,WAAW,GAAG5C,SAAS,CAAC6C,kBAAkB,EAAE,CAAC;YACnD,MAAMe,gBAAgB,GAAG,IAAI,CAAClE,KAAK,CAACC,aAAa,CAACM,MAAM,GAAG,CAAC,CAAC;AAC7D,YAAA,IAAI2D,gBAAgB,KAAK,KAAK,EAAE,OAAO;AACvC,YAAA,MAAMC,MAAM,GAAGpB,KAAK,CAACqB,IAAI,CAAC;gBAAE7D,MAAM,EAAE2C,WAAW,GAAG,CAAC;AAAE,aAAA,CAAC,CAACmB,GAAG,CACxD,CAACC,QAAQ,EAAElB,CAAC,GAAK;AACf,gBAAA,MAAMzC,QAAQ,GAAG,IAAI,CAACC,WAAW,CAACN,SAAS,EAAE8C,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpD,IAAI,IAAI,CAACpD,KAAK,CAACC,aAAa,CAACY,QAAQ,CAACF,QAAQ,CAAC,EAAE;AAC/C,oBAAA,OAAO3B,UAAU,CAAC;AACnB,iBAAA,MAAM,IAAI3C,OAAO,IAAIA,OAAO,CAAC8H,MAAM,EAAE;AACpC,oBAAA,OAAO9H,OAAO,CAAC8H,MAAM,CAACf,CAAC,CAAC,CAAC;iBAC1B,MAAM;AACL,oBAAA,OAAOrG,oBAAoB,CAACqG,CAAC,CAAC,CAAC;AAChC,iBAAA;AACF,aAAA,CACF,CAAC;YACF3D,kBAAkB,CAACqE,UAAU,CAAC;AAC5B,gBAAA,GAAGzH,OAAO;gBACV8H,MAAM;AACP,aAAA,CAAC,CAAC;YACH1E,kBAAkB,CAACL,IAAI,EAAE,CAAC;AAC3B,SAAC,CAAA;QACF,IAAQE,CAAAA,QAAQ,GAAG,IAAM;YACvB,MAAM,EAAEG,kBAAkB,GAAE,GAAG,IAAI,CAACJ,KAAK,CAAC;YAC1CI,kBAAkB,CAACL,IAAI,EAAE,CAAC;AAC3B,SAAC,CAAA;;AAyBH,CAAA;AAEM,MAAMmF,oBAAoB,SAAS/F,gBAAK,CAACU,SAAS,CAAA;AACvDC,IAAAA,iBAAiB,GAAG,EAAE;AAEtBK,IAAAA,oBAAoB,GAAG,EAAE;AACzBgF,IAAAA,qBAAqB,GAAG;AACtB,QAAA,OAAO,KAAK,CAAC;AACd,KAAA;AACD1F,IAAAA,MAAM,GAAG;AACP,QAAA,MAAM,EAAEpD,MAAM,GAAE+D,kBAAkB,GAAEuE,oBAAoB,GAAE,GAAG,IAAI,CAAC3E,KAAK,CAAC;AACxE,QAAA,qBACEb,+BAACK,eAAe,EAAA;YACdC,MAAM,EAAE,CAACO,KAAK,GAAK;gBACjB,qBACEb,gBAAA,CAAA,aAAA,CAACS,yBAAyB,EAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACpBI,KAAK,EAAA;AACT3D,oBAAAA,MAAM,EAAEA,MAAM;AACd+D,oBAAAA,kBAAkB,EAAEA,kBAAkB;AACtCuE,oBAAAA,oBAAoB,EAAEA,oBAAoB;mBAC1C,CACF;AACH,aAAA;UACD,CACF;AACH,KAAA;AACF;;AC7QM,MAAMS,iBAAiB,SAASjG,gBAAK,CAACU,SAAS,CAAA;AAEpDsF,IAAAA,qBAAqB,GAAG;AACtB,QAAA,OAAO,KAAK,CAAC;AACd,KAAA;IACDE,cAAc,CAAC,KAIM,EAAE;YAJR,EACbC,WAAW,GACXjJ,MAAM,GACN+D,kBAAkB,GACC,GAJN,KAIM,CAAA;QACnB,IAAI,CAACkF,WAAW,EAAE;YAChB,OAAO;AACR,SAAA;QACDjJ,MAAM,CAACoC,aAAa,CAAC4B,MAAM,CAACC,kBAAkB,CAACF,kBAAkB,CAAC,CAAC;AACnE,QAAA,KAAK,IAAImF,KAAK,IAAID,WAAW,CAAE;;YAC7B,MAAM,EAAEE,SAAS,GAAEC,QAAQ,GAAE,GAAGF,KAAK,CAAC;YACtClJ,MAAM,CAACoC,aAAa,CAAC4B,MAAM,CAACQ,WAAW,CACrCT,kBAAkB,EAClBoF,SAAS,EACT,WAAoB;iDAAhBE,IAAI,GAAA,IAAA,KAAA,CAAA,IAAA,CAAA,EAAA,IAAA,GAAA,CAAA,EAAA,IAAA,GAAA,IAAA,EAAA,IAAA,EAAA,CAAA;oBAAJA,IAAI,CAAA,IAAA,CAAA,GAAA,SAAA,CAAA,IAAA,CAAA,CAAA;;AACND,gBAAAA,QAAQ,CAAC;AACPE,oBAAAA,YAAY,EAAEvF,kBAAkB;oBAChCJ,KAAK,EAAE,MAAKA,KAAK;AACjB3D,oBAAAA,MAAM,EAAEA,MAAM;AACduJ,oBAAAA,SAAS,EAAEF,IAAI;AAChB,iBAAA,CAAC,CAAC;AACJ,aAAA,CACF,CAAC;AACH,SAAA;AACF,KAAA;AAED5F,IAAAA,iBAAiB,GAAG;YAIH,GAAqB,CAAA;QAHpC,MAAM,EAAEzD,MAAM,GAAE+D,kBAAkB,GAAE,GAAG,IAAI,CAACJ,KAAK,CAAC;QAElD,IAAI,CAACqF,cAAc,CAAC;YAClBC,WAAW,EAAE,CAAA,CAAA,GAAqB,GAArB,IAAI,CAACO,gBAAgB,MAArB,IAAA,IAAA,GAAqB,WAAa,GAAlC,KAAA,CAAkC,GAAlC,GAAqB,CAAEP,WAAW,KAAI,IAAI;YACvDjJ,MAAM;YACN+D,kBAAkB;AACnB,SAAA,CAAC,CAAC;AACJ,KAAA;AAEDX,IAAAA,MAAM,GAAG;QACgC,IAAI,CAACO,MAAM;AAClD,QAAA,qBACEb,+BAACK,eAAe,EAAA;YACdC,MAAM,EAAE,CAACoG,gBAAgB,GAAK;AAC5B,gBAAA,IAAI,CAACA,gBAAgB,GAAGA,gBAAgB,CAAC;AACzC,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;UACD,CACF;AACH,KAAA;AAEDC,IAAAA,WAAAA,CAAY9F,KAAY,CAAE;QACxB,KAAK,CAACA,KAAK,CAAC,CAAC;AACb,QAAA,IAAI,CAAC6F,gBAAgB,GAAG,IAAI,CAAC;AAC9B,KAAA;AACF;;AC5CD,IAAIE,cAAc,GAAG,CAAC,CAAC;AAEhB,MAAMC,WAAW,SAAS7G,gBAAK,CAACU,SAAS,CAAA;AAsG9CC,IAAAA,iBAAiB,GAAG;QAClB,MAAM,EACJ9C,OAAO,GACPX,MAAM,GACN4G,SAAS,GACT1F,kBAAkB,GAClB0I,YAAY,GACZC,cAAc,GACdhJ,eAAe,KAChB,GAAG,IAAI,CAAC8C,KAAK,CAAC;AAEf,QAAA,MAAMmG,WAAW,GAAG;YAClBlD,SAAS;YACTjG,OAAO;AACPoJ,YAAAA,WAAW,EAAE,IAAI,CAACC,UAAU,EAAE;AAC9B,YAAA,GAAG9I,kBAAkB;SACtB,CAAC;QACF,MAAM6C,kBAAkB,GAAG,IAAI/D,MAAM,CAACoC,aAAa,CAAC6H,YAAY,CAC9DH,WAAW,CACZ,CAAC;AACF/F,QAAAA,kBAAkB,CAACqE,UAAU,CAACzH,OAAO,IAAI,EAAE,CAAC,CAAC;AAC7C,QAAA,IAAIE,eAAe,EAAE;AACnBA,YAAAA,eAAe,CAACkD,kBAAkB,EAAE/D,MAAM,CAAC,CAAC;AAC7C,SAAA;AACD,QAAA,MAAMsI,oBAAoB,GAAG,IAAItI,MAAM,CAACoC,aAAa,CAAC8H,SAAS,CAC7D,IAAI,CAACC,aAAa,CACnB,CAAC;QAEF,MAAMC,mBAAmB,GAAG,IAAI,CAACC,WAAW,CAC1CtG,kBAAkB,EAClBuE,oBAAoB,CACrB,CAAC;AACF,QAAA,IAAIsB,YAAY,EAAE;AAChB5J,YAAAA,MAAM,CAACoC,aAAa,CAACkI,WAAW,CAC9B,IAAI,CAACC,WAAW,CAACC,OAAO,EACxBZ,YAAY,CACb,CAAC;AACH,SAAA;QACD,IAAIa,iBAAiB,GAA6B,IAAI,CAAC;AACvD,QAAA,IAAIZ,cAAc,EAAE;YAClBY,iBAAiB,GAAG,IAAIzK,MAAM,CAACoC,aAAa,CAACsI,WAAW,EAAE,CAAC;AAC3Db,YAAAA,cAAc,CAAC;AACbc,gBAAAA,WAAW,EAAEF,iBAAiB;AAC9BnB,gBAAAA,YAAY,EAAEvF,kBAAkB;gBAChC/D,MAAM;AACP,aAAA,CAAC,CAAC;AACJ,SAAA;QAED,IAAI,CAACoF,QAAQ,CAAC;YACZqF,iBAAiB;AACjBL,YAAAA,mBAAmB,EAAEA,mBAAmB;AACxC9B,YAAAA,oBAAoB,EAAEA,oBAAoB;YAC1CvE,kBAAkB;AAClB6G,YAAAA,OAAO,EAAE,IAAI;AACd,SAAA,CAAC,CAAC;AACJ,KAAA;AACDvG,IAAAA,kBAAkB,GAAG;AACnB,QAAA,IAAI,CAAC,IAAI,CAACC,KAAK,CAACP,kBAAkB,EAAE,OAAO;AAC3C,QAAA,IAAI,CAAC,IAAI,CAACO,KAAK,CAACgE,oBAAoB,EAAE,OAAO;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAChE,KAAK,CAAC8F,mBAAmB,EAAE,OAAO;QAE5C,MAAM,EAAES,QAAQ,GAAE,GAAG,IAAI,CAAClH,KAAK,CAAC;AAChC,QAAA,IAAIkH,QAAQ,EAAE;AACZ,YAAA,IAAK,IAAInD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmD,QAAQ,CAAChG,MAAM,EAAE6C,CAAC,IAAI,CAAC,CAAE;AAC3C,gBAAA,MAAM,EAAEoD,WAAW,GAAEnK,OAAO,GAAEoK,oBAAoB,GAAE,GAAGF,QAAQ,CAACnD,CAAC,CAAC,CAAC;AACnE,gBAAA,IAAIqD,oBAAoB,IAAI,OAAO,IAAIA,oBAAoB,EAAE;AAC3D,oBAAA,IAAI,CAACzG,KAAK,CAAC8F,mBAAmB,CAAC1C,CAAC,CAAC,CAACsD,OAAO,CAAC5F,QAAQ,CAChD2F,oBAAoB,CAAC,OAAO,CAAC,CAC9B,CAAC;AACH,iBAAA;AACD,gBAAA,IAAI,CAACzG,KAAK,CAAC8F,mBAAmB,CAAC1C,CAAC,CAAC,CAACsD,OAAO,CAAC5C,UAAU,CAACzH,OAAO,CAAC,CAAC;AAC9D,gBAAA,IAAI,CAAC2D,KAAK,CAAC8F,mBAAmB,CAAC1C,CAAC,CAAC,CAACsD,OAAO,CAACC,cAAc,CAACH,WAAW,CAAC,CAAC;AACvE,aAAA;AACF,SAAA;AACF,KAAA;AACDhC,IAAAA,qBAAqB,CAACoC,SAAgB,EAAEC,SAAgB,EAAE;AACxD,QAAA,OACE,IAAI,CAAC7G,KAAK,CAACsG,OAAO,KAAKO,SAAS,CAACP,OAAO,IACxCM,SAAS,CAACL,QAAQ,KAAK,IAAI,CAAClH,KAAK,CAACkH,QAAQ,CAC1C;AACH,KAAA;AA+DDzH,IAAAA,MAAM,GAAG;AACP,QAAA,MAAM,EAAEgI,KAAK,GAAEC,MAAM,GAAE1K,OAAO,GAAE2K,KAAK,GAAE,GAAG,IAAI,CAAC3H,KAAK,CAAC;AAErD,QAAA,MAAM4H,QAAQ,GAAG;YACfF,MAAM,EAAEA,MAAM,IAAK1K,OAAO,IAAIA,OAAO,CAAC0K,MAAM;YAC5CD,KAAK,EAAEA,KAAK,IAAKzK,OAAO,IAAIA,OAAO,CAACyK,KAAK;AACzC,YAAA,GAAGE,KAAK;SACT,CAAC;AACF,QAAA,IAAI,IAAI,CAAC3H,KAAK,CAACP,MAAM,EAAE;AACrB,YAAA,qBACEN,+BAAC0I,KAAG,EAAA;gBAACC,GAAG,EAAE,IAAI,CAACtB,aAAa;AAAEmB,gBAAAA,KAAK,EAAEC,QAAQ;AAC3C,aAAA,gBAAAzI,gBAAA,CAAA,aAAA,CAAC0I,KAAG,EAAA;gBAACC,GAAG,EAAE,IAAI,CAAClB,WAAW;AAAErC,gBAAAA,EAAE,EAAC,SAAS;AAAG,aAAA,CAAA,EAC1C,IAAI,CAACvE,KAAK,CAACP,MAAM,CAAC;gBACjBsI,WAAW,EAAE,IAAI,CAACA,WAAW;gBAC7BC,aAAa,EAAE,IAAI,CAACA,aAAa;gBACjCC,aAAa,EAAE,IAAI,CAACC,aAAa;AAClC,aAAA,CAAC,CACE,CACN;SACH,MAAM;AACL,YAAA,qBACE/I,+BAAC0I,KAAG,EAAA;gBAACC,GAAG,EAAE,IAAI,CAACtB,aAAa;AAAEmB,gBAAAA,KAAK,EAAEC,QAAQ;eAC1C,IAAI,CAACI,aAAa,CAAC,CAAqB,KAAA,GAAA;oBAApB,EAAEG,WAAW,GAAE,GAAA,KAAA,CAAA;AAClC,gBAAA,OAAOA,WAAW,CAACC,eAAe,KAAK,QAAQ,CAAC;aACjD,CAAC,EACD,IAAI,CAACL,WAAW,EAAE,EAClB,IAAI,CAACC,aAAa,CAAC,CAAqB,KAAA,GAAA;oBAApB,EAAEG,WAAW,GAAE,GAAA,KAAA,CAAA;AAClC,gBAAA,OAAOA,WAAW,CAACC,eAAe,KAAK,QAAQ,CAAC;AACjD,aAAA,CAAC,EACD,IAAI,CAACF,aAAa,EAAE,CACjB,CACN;AACH,SAAA;AACF,KAAA;;;;AArRDvH,QAAAA,IAAAA,CAAAA,KAAK,GAAG;AACNP,YAAAA,kBAAkB,EAAE,IAAI;AACxBuE,YAAAA,oBAAoB,EAAE,IAAI;AAC1B8B,YAAAA,mBAAmB,EAAE,IAAI;AACzBK,YAAAA,iBAAiB,EAAE,IAAI;AACvBG,YAAAA,OAAO,EAAE,KAAK;AACf,SAAU,CAAA;AACXoB,QAAAA,IAAAA,CAAAA,OAAO,GAAkB,IAAK,CAAA;AAC9B,QAAA,IAAA,CAAQ7B,aAAa,iBAAoCrH,gBAAK,CAACmJ,SAAS,EAAE,CAAC;AAC3E,QAAA,IAAA,CAAQ1B,WAAW,iBAAoCzH,gBAAK,CAACmJ,SAAS,EAAE,CAAC;QACzE,IAAQjC,CAAAA,UAAU,GAAG,IAAM;YACzB,MAAM,EAAEgC,OAAO,GAAEE,QAAQ,GAAE,GAAG,IAAI,CAACvI,KAAK,CAAC;YACzC,IAAIwI,eAAe,CAAS;AAC5B,YAAA,IAAI,CAACH,OAAO,IAAI,CAACE,QAAQ,EAAE;AACzB,gBAAA,IAAI,CAAC,IAAI,CAACF,OAAO,EAAE;oBACjBG,eAAe,GAAG/K,gBAAgB,EAAE,CAAC;iBACtC,MAAM;AACL+K,oBAAAA,eAAe,GAAG,IAAI,CAACH,OAAO,CAAC;AAChC,iBAAA;AACF,aAAA,MAAM,IAAIA,OAAO,IAAI,CAACE,QAAQ,EAAE;gBAC/BC,eAAe,GAAGH,OAAiB,CAAC;AACrC,aAAA,MAAM,IAAIE,QAAQ,IAAI,CAACF,OAAO,EAAE;gBAC/BG,eAAe,GAAGD,QAAkB,CAAC;aACtC,MAAM;gBACLC,eAAe,GAAGH,OAAiB,CAAC;AACrC,aAAA;AACD,YAAA,IAAI,CAACA,OAAO,GAAGG,eAAe,CAAC;YAC/B,OAAO,IAAI,CAACH,OAAO,CAAW;AAC/B,SAAC,CAAA;AACF,QAAA,IAAA,CAAQI,YAAY,GAAG,CAAClE,EAAsB,EAAEmE,KAAa,GAAK;YAChE3C,cAAc,IAAI,CAAC,CAAC;YACpB,IAAI4C,SAAS,CAAS;AACtB,YAAA,IAAI,OAAOpE,EAAE,KAAK,WAAW,EAAE;AAC7BoE,gBAAAA,SAAS,GAAI,sBAAoB,CAAW5C,MAAc,CAAvB2C,KAAK,EAAC,GAAC,CAAiB,CAAA,MAAA,CAAf3C,cAAc,CAAE,CAAC;aAC9D,MAAM;gBACL4C,SAAS,GAAGpE,EAAE,CAAC;AAChB,aAAA;AACD,YAAA,OAAOoE,SAAS,CAAC;AAClB,SAAC,CAAA;AAEFjC,QAAAA,IAAAA,CAAAA,WAAW,GAAG,CACZtG,kBAAsC,EACtCuE,oBAA0C,GACvC;YACH,MAAM,EAAEtI,MAAM,GAAE6K,QAAQ,GAAE,GAAG,IAAI,CAAClH,KAAK,CAAC;AAExC,YAAA,MAAMyG,mBAAmB,GAAG,CAACS,QAAQ,GACjC,IAAI,GACJA,QAAQ,CAAClC,GAAG,CAAC,CAACqC,OAAO,EAAEtD,CAAC,GAAK;AAC3B,gBAAA,MAAM,EACJ4E,SAAS,EAAEC,cAAc,GACzBzB,WAAW,GACXnK,OAAO,EAAE6L,cAAc,GACvBzB,oBAAoB,KACrB,GAAGC,OAAO,CAAC;gBACZ,MAAMsB,SAAS,GAAG,IAAI,CAACF,YAAY,CAACG,cAAc,EAAE7E,CAAC,CAAC,CAAC;gBACvD,OAAO;AACLoE,oBAAAA,WAAW,EAAEd,OAAO;AACpBA,oBAAAA,OAAO,EAAE,IAAIhL,MAAM,CAACoC,aAAa,CAACqK,cAAc,CAAC;AAC/C1C,wBAAAA,WAAW,EAAEuC,SAAS;wBACtBxB,WAAW;AACXnK,wBAAAA,OAAO,EAAE6L,cAAc;AACvB,wBAAA,GAAGzB,oBAAoB;qBACxB,CAAC;iBACH,CAAC;AACH,aAAA,CAAC,CAAC;YACP,IAAI,CAACX,mBAAmB,EAAE;AACxB,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACD9B,YAAAA,oBAAoB,CAACoE,IAAI,CACvBtC,mBAAmB,CAACzB,GAAG,CAAC,CAAiBqC,KAAAA,GAAAA;oBAAhB,EAAEA,OAAO,GAAE,GAAA,KAAA,CAAA;uBAAKA,OAAO,CAAA;aAAA,CAAC,EACjDjH,kBAAkB,CACnB,CAAC;AACF,YAAA,KAAK,IAAI4I,YAAY,IAAIvC,mBAAmB,CAAE;gBAC5C,MAAM,EAAEY,OAAO,GAAEc,WAAW,GAAE,GAAGa,YAAY,CAAC;gBAC9C,MAAM,EAAEC,aAAa,EAAG,EAAE,GAAE,GAAGd,WAAW,CAAC;AAC3C,gBAAA,KAAK,IAAI5C,KAAK,IAAI0D,aAAa,CAAE;;oBAC/B,MAAM,EAAExD,QAAQ,GAAED,SAAS,GAAE,GAAGD,KAAK,CAAC;AACtClJ,oBAAAA,MAAM,CAACoC,aAAa,CAAC4B,MAAM,CAAC6I,cAAc,CACxC7B,OAAO,EACP7B,SAAS,EACTC,QAAQ,CACT,CAAC;oBACFpJ,MAAM,CAACoC,aAAa,CAAC4B,MAAM,CAACQ,WAAW,CACrCwG,OAAO,EACP7B,SAAS,EACT,WAAoB;yDAAhBE,IAAI,GAAA,IAAA,KAAA,CAAA,IAAA,CAAA,EAAA,IAAA,GAAA,CAAA,EAAA,IAAA,GAAA,IAAA,EAAA,IAAA,EAAA,CAAA;4BAAJA,IAAI,CAAA,IAAA,CAAA,GAAA,SAAA,CAAA,IAAA,CAAA,CAAA;;AACND,wBAAAA,QAAQ,CAAC;AACPE,4BAAAA,YAAY,EAAEvF,kBAAkB;AAChC+I,4BAAAA,cAAc,EAAE9B,OAAO;4BACvBrH,KAAK,EAAE,MAAKA,KAAK;AACjB3D,4BAAAA,MAAM,EAAEA,MAAM;AACduJ,4BAAAA,SAAS,EAAEF,IAAI;AAChB,yBAAA,CAAC,CAAC;AACJ,qBAAA,CACF,CAAC;AACH,iBAAA;AACF,aAAA;AACD,YAAA,OAAOe,mBAAmB,CAAC;AAC5B,SAAC,CAAA;QAmFFsB,IAAAA,CAAAA,WAAW,GAAG,IAAM;YAClB,MAAM,EAAEN,KAAK,GAAEC,MAAM,GAAE1K,OAAO,GAAE2K,KAAK,GAAEyB,SAAS,GAAE9L,SAAS,GAAEjB,MAAM,GAAE,GACnE,IAAI,CAAC2D,KAAK,CAAC;AAEb,YAAA,MAAM4H,QAAQ,GAAG;gBACfF,MAAM,EAAEA,MAAM,IAAK1K,OAAO,IAAIA,OAAO,CAAC0K,MAAM;gBAC5CD,KAAK,EAAEA,KAAK,IAAKzK,OAAO,IAAIA,OAAO,CAACyK,KAAK;AACzC,gBAAA,GAAGE,KAAK;aACT,CAAC;AACF,YAAA,qBACExI,+BAAC0I,KAAG,EAAA,MAAA,CAAA,MAAA,CAAA;AACFtD,gBAAAA,EAAE,EAAE,IAAI,CAAC8B,UAAU,EAAE;AACrBsB,gBAAAA,KAAK,EAAEC,QAAQ;AACfwB,gBAAAA,SAAS,EAAEA,SAAS;eAChB9L,SAAS,CAAA,EAEZ,IAAI,CAACqD,KAAK,CAACsG,OAAO,IAAI,IAAI,CAACtG,KAAK,CAACP,kBAAkB,KAAK,IAAI,iBAC3DjB,gBAAA,CAAA,aAAA,CAACA,gBAAK,CAACkK,QAAQ,EACb,IAAA,gBAAAlK,gBAAA,CAAA,aAAA,CAAC+F,oBAAoB,EAAA;AACnB9E,gBAAAA,kBAAkB,EAAE,IAAI,CAACO,KAAK,CAACP,kBAAkB;AACjD/D,gBAAAA,MAAM,EAAEA,MAAM;AACdsI,gBAAAA,oBAAoB,EAAE,IAAI,CAAChE,KAAK,CAACgE,oBAAoB;AACrD,aAAA,CAAA,gBACFxF,+BAACiG,iBAAiB,EAAA;AAChBhF,gBAAAA,kBAAkB,EAAE,IAAI,CAACO,KAAK,CAACP,kBAAkB;AACjD/D,gBAAAA,MAAM,EAAEA,MAAM;cACd,CACa,GACf,IAAI,CACJ,CACN;AACH,SAAC,CAAA;QACF2L,IAAAA,CAAAA,aAAa,GAAG,WAQX;AAPHtG,YAAAA,IAAAA,MAAM,oEAAG,CAMH,KAAA,GAAA;uBAAA,IAAI,CAAA;AAAA,aAAA,CAAA;YAEV,OAAO,MAAA,CAAKf,KAAK,CAACsG,OAAO,IAAI,OAAKtG,KAAK,CAAC8F,mBAAmB,KAAK,IAAI,iBAClEtH,+BAACA,gBAAK,CAACkK,QAAQ,EAAA,IAAA,EACZ,MAAK1I,CAAAA,KAAK,CAAC8F,mBAAmB,CAC5B/E,MAAM,CAAC,CAA8B,KAAA,GAAA;AAA7B,gBAAA,IAAA,EAAEyG,WAAW,GAAEd,OAAO,GAAE,GAAA,KAAA,CAAA;AAC/B,gBAAA,OAAO3F,MAAM,CAAC;oBAAE2F,OAAO;oBAAEc,WAAW;AAAE,iBAAA,CAAC,CAAC;aACzC,CAAC,CACDnD,GAAG,CAAC,CAA8B,KAAA,GAAA;AAA7B,gBAAA,IAAA,EAAEqC,OAAO,GAAEc,WAAW,GAAE,GAAA,KAAA,CAAA;AAC5B,gBAAA,qBACEhJ,+BAAC0I,KAAG,EAAA;AACFyB,oBAAAA,GAAG,EAAEjC,OAAO,CAACkC,cAAc,EAAE;AAC7BhF,oBAAAA,EAAE,EAAE8C,OAAO,CAACkC,cAAc,EAAE;kBAC5B,CACF;aACH,CAAC,CACW,GACf,IAAI,CAAC;AACV,SAAC,CAAA;QACFrB,IAAAA,CAAAA,aAAa,GAAG,IAAM;YACpB,IAAI,CAAC,IAAI,CAAClI,KAAK,CAACiG,YAAY,EAAE,OAAO,IAAI,CAAC;AAC1C,YAAA,qBAAO9G,+BAAC0I,KAAG,EAAA;gBAACC,GAAG,EAAE,IAAI,CAAClB,WAAW;cAAI,CAAC;AACvC,SAAC,CAAA;;AAmCH;;ACnTM,MAAM4C,OAAK,UAASrK,gBAAK,CAACU,SAAS,EAAA;AAaxCJ,IAAAA,MAAM,GAAG;QACP,MAAM,EACJ3D,aAAa,GACbD,aAAa,GACbD,YAAY,GACZG,UAAU,GACV0N,MAAM,GACNC,YAAY,KACb,GAAG,IAAI,CAAC1J,KAAK,CAAC;AACf,QAAA,qBACEb,+BAACE,eAAe,EAAA;YAACE,KAAK,EAAE,IAAI,CAACS,KAAK;WAC/B,IAAI,CAACW,KAAK,CAACgJ,aAAa,KAAK,OAAO,IAAI,IAAI,CAAChJ,KAAK,CAACtE,MAAM,KAAK,IAAI,iBACjE8C,gBAAA,CAAA,aAAA,CAAC6G,WAAW,EACL,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAChG,KAAK,EAAA;AACf3D,YAAAA,MAAM,EAAE,IAAI,CAACsE,KAAK,CAACtE,MAAM;AACzB,SAAA,CAAA,CAAA,GACA,IAAI,CAACsE,KAAK,CAACgJ,aAAa,KAAK,SAAS,IAAID,YAAY,GACxDA,YAAY,GAEZD,MAAM,gBAERtK,+BAACvC,gBAAgB,EAAA;AACfd,YAAAA,aAAa,EAAEA,aAAa;AAC5BD,YAAAA,aAAa,EAAEA,aAAa;AAC5BD,YAAAA,YAAY,EAAEA,YAAY;AAC1BG,YAAAA,UAAU,EAAEA,UAAU;YACtBnB,MAAM,EAAE,IAAI,CAACA,MAAM;YACnBC,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB,SAAA,CAAA,CACc,CAClB;AACH,KAAA;AAEDiF,IAAAA,iBAAiB,GAAG;AAClB,QAAA,IAAI,CAAC8J,UAAU,GAAG,IAAI,CAAC;AACxB,KAAA;AAEDzJ,IAAAA,oBAAoB,GAAG;AACrB,QAAA,IAAI,CAACyJ,UAAU,GAAG,KAAK,CAAC;AACzB,KAAA;IA0CDC,aAAa,CAACxN,MAAiB,EAAE;AAC/B,QAAA,MAAM,EAAE6K,QAAQ,GAAEjB,YAAY,GAAEC,cAAc,GAAE,GAAG,IAAI,CAAClG,KAAK,CAAC;QAE9D,OACE3D,MAAM,IACNA,MAAM,CAACoC,aAAa,IACpBpC,MAAM,CAACoC,aAAa,CAAC6H,YAAY,IACjCjK,MAAM,CAACoC,aAAa,CAAC8H,SAAS,KAC7B,CAACW,QAAQ,IAAI7K,MAAM,CAACoC,aAAa,CAAC6H,YAAY,CAAC,KAC/C,CAACJ,cAAc,IAAI7J,MAAM,CAACoC,aAAa,CAACsI,WAAW,CAAC,KACpD,CAACd,YAAY,IAAI5J,MAAM,CAACoC,aAAa,CAACkI,WAAW,CAAC,CACnD;AACH,KAAA;;;AAtGDiD,QAAAA,IAAAA,CAAAA,UAAU,GAAG,KAAM,CAAA;AAEnBjJ,QAAAA,IAAAA,CAAAA,KAAK,GAAG;AACNgJ,YAAAA,aAAa,EAAE,SAAS;AACxBtN,YAAAA,MAAM,EAAE,IAAI;AACb,SAAC,CAAA;AA6CFzB,QAAAA,IAAAA,CAAAA,MAAM,GAAG,CAACyB,OAAiB,GAAK;AAC9B,YAAA,IAAI,IAAI,CAAC2D,KAAK,CAACpF,MAAM,EAAE;AACrB,gBAAA,IAAI,CAACoF,KAAK,CAACpF,MAAM,CAACyB,OAAM,CAAC,CAAC;AAC3B,aAAA;AACD,YAAA,IAAI,IAAI,CAACwN,aAAa,CAACxN,OAAM,CAAC,EAAE;AAC9B,gBAAA,IAAI,CAACyN,SAAS,CAACzN,OAAM,CAAC,CAAC;aACxB,MAAM;;AAEL,gBAAA,MAAMkI,EAAE,GAAGwF,WAAW,CAAC,IAAM;AAC3B,oBAAA,MAAM1N,MAAM,GACVC,MAAM,CAGND,MAAM,CAAC;oBAET,IAAI,IAAI,CAACuN,UAAU,EAAE;wBACnB,IAAIvN,MAAM,IAAI,IAAI,CAACwN,aAAa,CAACxN,MAAM,CAAC,EAAE;4BACxC2N,aAAa,CAACzF,EAAE,CAAC,CAAC;AAClB,4BAAA,IAAI,CAACuF,SAAS,CAACzN,MAAM,CAAC,CAAC;AACxB,yBAAA;qBACF,MAAM;wBACL2N,aAAa,CAACzF,EAAE,CAAC,CAAC;AACnB,qBAAA;iBACF,EAAE,IAAI,CAAC,CAAC;AACV,aAAA;AACF,SAAC,CAAA;AAEFuF,QAAAA,IAAAA,CAAAA,SAAS,GAAG,CAACzN,MAAiB,GAAK;YACjC,IAAI,CAACoF,QAAQ,CAAC;AACZkI,gBAAAA,aAAa,EAAE,OAAO;gBACtBtN,MAAM;AACP,aAAA,CAAC,CAAC;AACJ,SAAC,CAAA;QAEFxB,IAAAA,CAAAA,OAAO,GAAG,IAAM;YACd,IAAI,CAAC4G,QAAQ,CAAC;AACZkI,gBAAAA,aAAa,EAAE,SAAS;AACzB,aAAA,CAAC,CAAC;AACJ,SAAC,CAAA;;AAeH,CAAA;AA3GYH,OAAK,CAWTS,YAAY,GAAGnN,iBAAiB;;ACqPlCoN,+CAUN;UAVWA,6BAA6B,EAAA;IAA7BA,6BAA6B,CACvCC,YAAU,CAAA,GAAVA,YAAU,CAAA;IADAD,6BAA6B,CAEvCE,gBAAc,CAAA,GAAdA,gBAAc,CAAA;IAFJF,6BAA6B,CAGvCG,WAAS,CAAA,GAATA,WAAS,CAAA;IAHCH,6BAA6B,CAIvCI,UAAQ,CAAA,GAARA,UAAQ,CAAA;IAJEJ,6BAA6B,CAKvCK,UAAQ,CAAA,GAARA,UAAQ,CAAA;IALEL,6BAA6B,CAMvCM,OAAK,CAAA,GAALA,OAAK,CAAA;IANKN,6BAA6B,CAOvCvC,OAAK,CAAA,GAALA,OAAK,CAAA;IAPKuC,6BAA6B,CAQvCO,SAAO,CAAA,GAAPA,SAAO,CAAA;IARGP,6BAA6B,CASvCQ,QAAM,CAAA,GAANA,QAAM,CAAA;AATIR,CAAAA,EAAAA,qCAA6B,KAA7BA,qCAA6B,GAAA,EAAA,CAAA,CAAA;;ACxQzC,YAAeV,OAAK;;;;;"}