UNPKG

105 kBSource Map (JSON)View Raw
1{"version":3,"file":"geosearch.module.js","sources":["../src/domUtils.ts","../src/constants.ts","../src/SearchElement.ts","../src/resultList.ts","../src/SearchControl.ts","../src/lib/debounce.ts","../src/providers/provider.ts","../src/providers/algoliaProvider.ts","../src/providers/bingProvider.ts","../src/providers/esriProvider.ts","../src/providers/peliasProvider.ts","../src/providers/geocodeEarthProvider.ts","../node_modules/@googlemaps/js-api-loader/dist/index.mjs","../src/providers/googleProvider.ts","../src/providers/legacyGoogleProvider.ts","../src/providers/hereProvider.ts","../src/providers/openStreetMapProvider.ts","../src/providers/locationIQProvider.ts","../src/providers/openCageProvider.ts","../src/providers/civilDefenseMapProvider.ts","../src/providers/mapBoxProvider.ts","../src/providers/geoApiFrProvider.ts","../src/providers/geoapifyProvider.ts"],"sourcesContent":["export function createElement<T extends HTMLElement = HTMLElement>(\n element: string,\n className: string | null = '',\n parent?: Element | null,\n attributes: { [key: string]: string | ((event: any) => void) } = {},\n): T {\n const el = document.createElement(element) as T;\n\n if (className) {\n el.className = className;\n }\n\n Object.keys(attributes).forEach((key) => {\n if (typeof attributes[key] === 'function') {\n // IE doesn't support startsWith\n const type = (\n key.indexOf('on') === 0 ? key.substr(2).toLowerCase() : key\n ) as keyof HTMLElementEventMap;\n el.addEventListener(type, attributes[key] as () => void);\n } else if (key === 'html') {\n el.innerHTML = attributes[key] as string;\n } else if (key === 'text') {\n el.innerText = attributes[key] as string;\n } else {\n el.setAttribute(key, attributes[key] as string);\n }\n });\n\n if (parent) {\n parent.appendChild(el);\n }\n\n return el;\n}\n\nexport function stopPropagation(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n}\n\nexport function createScriptElement<T = object>(\n url: string,\n cb: string,\n): Promise<T> {\n const script = createElement('script', null, document.body);\n script.setAttribute('type', 'text/javascript');\n\n return new Promise((resolve) => {\n (window as any)[cb] = (json: T): void => {\n script.remove();\n delete (window as any)[cb];\n resolve(json);\n };\n\n script.setAttribute('src', url);\n });\n}\n\nexport const cx = (...classNames: (string | undefined)[]): string =>\n classNames.filter(Boolean).join(' ').trim();\n\nexport function addClassName(\n element: Element | null,\n className: string | string[],\n): void {\n if (!element || !element.classList) {\n return;\n }\n\n // IE doesn't support adding multiple classes at once :(\n const classNames = Array.isArray(className) ? className : [className];\n classNames.forEach((name) => {\n if (!element.classList.contains(name)) {\n element.classList.add(name);\n }\n });\n}\n\nexport function removeClassName(\n element: Element | null,\n className: string | string[],\n): void {\n if (!element || !element.classList) {\n return;\n }\n\n // IE doesn't support removing multiple classes at once :(\n const classNames = Array.isArray(className) ? className : [className];\n classNames.forEach((name) => {\n if (element.classList.contains(name)) {\n element.classList.remove(name);\n }\n });\n}\n\nexport function replaceClassName(\n element: Element,\n find: string,\n replace: string,\n): void {\n removeClassName(element, find);\n addClassName(element, replace);\n}\n","export const ENTER_KEY = 13;\nexport const ESCAPE_KEY = 27;\nexport const ARROW_DOWN_KEY = 40;\nexport const ARROW_UP_KEY = 38;\nexport const ARROW_LEFT_KEY = 37;\nexport const ARROW_RIGHT_KEY = 39;\n\nexport const SPECIAL_KEYS = [\n ENTER_KEY,\n ESCAPE_KEY,\n ARROW_DOWN_KEY,\n ARROW_UP_KEY,\n ARROW_LEFT_KEY,\n ARROW_RIGHT_KEY,\n];\n","import {\n createElement,\n addClassName,\n removeClassName,\n cx,\n stopPropagation,\n replaceClassName,\n} from './domUtils';\n\nimport { ESCAPE_KEY, ENTER_KEY } from './constants';\n\ninterface SearchElementProps {\n searchLabel?: string;\n handleSubmit: (args: { query: string }) => void;\n classNames?: {\n container?: string;\n form?: string;\n input?: string;\n };\n}\n\nexport default class SearchElement {\n container: HTMLDivElement;\n form: HTMLFormElement;\n input: HTMLInputElement;\n handleSubmit: (args: { query: string }) => void;\n hasError = false;\n\n constructor({\n handleSubmit,\n searchLabel,\n classNames = {},\n }: SearchElementProps) {\n this.container = createElement<HTMLDivElement>(\n 'div',\n cx('geosearch', classNames.container),\n );\n\n this.form = createElement<HTMLFormElement>(\n 'form',\n ['', classNames.form].join(' '),\n this.container,\n {\n autocomplete: 'none',\n onClick: stopPropagation,\n onDblClick: stopPropagation,\n touchStart: stopPropagation,\n touchEnd: stopPropagation,\n },\n );\n\n this.input = createElement<HTMLInputElement>(\n 'input',\n ['glass', classNames.input].join(' '),\n this.form,\n {\n type: 'text',\n placeholder: searchLabel || 'search',\n onInput: this.onInput,\n onKeyUp: (e) => this.onKeyUp(e),\n onKeyPress: (e) => this.onKeyPress(e),\n onFocus: this.onFocus,\n onBlur: this.onBlur,\n\n // For some reason, leaflet is blocking the 'touchstart', manually give\n // focus to the input onClick\n // > Ignored attempt to cancel a touchstart event with cancelable=false,\n // > for example because scrolling is in progress and cannot be interrupted.\n onClick: () => {\n this.input.focus();\n this.input.dispatchEvent(new Event('focus'));\n },\n },\n );\n\n this.handleSubmit = handleSubmit;\n }\n\n onFocus(): void {\n addClassName(this.form, 'active');\n }\n\n onBlur(): void {\n removeClassName(this.form, 'active');\n }\n\n async onSubmit(event: Event): Promise<void> {\n stopPropagation(event);\n replaceClassName(this.container, 'error', 'pending');\n\n await this.handleSubmit({ query: this.input.value });\n removeClassName(this.container, 'pending');\n }\n\n onInput(): void {\n if (!this.hasError) {\n return;\n }\n\n removeClassName(this.container, 'error');\n this.hasError = false;\n }\n\n onKeyUp(event: KeyboardEvent): void {\n if (event.keyCode !== ESCAPE_KEY) {\n return;\n }\n\n removeClassName(this.container, ['pending', 'active']);\n\n this.input.value = '';\n\n document.body.focus();\n document.body.blur();\n }\n\n onKeyPress(event: KeyboardEvent): void {\n if (event.keyCode !== ENTER_KEY) {\n return;\n }\n\n this.onSubmit(event);\n }\n\n setQuery(query: string): void {\n this.input.value = query;\n }\n}\n","import { createElement, addClassName, removeClassName, cx } from './domUtils';\nimport { SearchResult } from './providers/provider';\n\ninterface ResultListProps {\n handleClick: (args: { result: SearchResult }) => void;\n classNames?: {\n resultlist?: string;\n item?: string;\n notfound?: string;\n };\n notFoundMessage?: string;\n}\n\nexport default class ResultList {\n handleClick?: (args: { result: SearchResult }) => void;\n selected = -1;\n results: SearchResult[] = [];\n\n container: HTMLDivElement;\n resultItem: HTMLDivElement;\n notFoundMessage?: HTMLDivElement;\n\n constructor({\n handleClick,\n classNames = {},\n notFoundMessage,\n }: ResultListProps) {\n this.handleClick = handleClick;\n this.notFoundMessage = !!notFoundMessage\n ? createElement<HTMLDivElement>(\n 'div',\n cx(classNames.notfound),\n undefined,\n { html: notFoundMessage! },\n )\n : undefined;\n\n this.container = createElement<HTMLDivElement>(\n 'div',\n cx('results', classNames.resultlist),\n );\n this.container.addEventListener('click', this.onClick, true);\n\n this.resultItem = createElement<HTMLDivElement>('div', cx(classNames.item));\n }\n\n render(\n results: SearchResult[] = [],\n resultFormat: (args: { result: SearchResult }) => string,\n ): void {\n this.clear();\n\n results.forEach((result, idx) => {\n const child = this.resultItem.cloneNode(true) as HTMLDivElement;\n child.setAttribute('data-key', `${idx}`);\n child.innerHTML = resultFormat({ result });\n this.container.appendChild(child);\n });\n\n if (results.length > 0) {\n addClassName(this.container.parentElement, 'open');\n addClassName(this.container, 'active');\n } else if (!!this.notFoundMessage) {\n this.container.appendChild(this.notFoundMessage);\n addClassName(this.container.parentElement, 'open');\n }\n\n this.results = results;\n }\n\n select(index: number): SearchResult {\n // eslint-disable-next-line no-confusing-arrow\n Array.from(this.container.children).forEach((child, idx) =>\n idx === index\n ? addClassName(child, 'active')\n : removeClassName(child, 'active'),\n );\n\n this.selected = index;\n return this.results[index];\n }\n\n count(): number {\n return this.results ? this.results.length : 0;\n }\n\n clear(): void {\n this.selected = -1;\n\n while (this.container.lastChild) {\n this.container.removeChild(this.container.lastChild);\n }\n\n removeClassName(this.container.parentElement, 'open');\n removeClassName(this.container, 'active');\n }\n\n onClick = (event: Event): void => {\n if (typeof this.handleClick !== 'function') {\n return;\n }\n\n const target = event.target as HTMLDivElement;\n if (\n !target ||\n !this.container.contains(target) ||\n !target.hasAttribute('data-key')\n ) {\n return;\n }\n\n const idx = Number(target.getAttribute('data-key'));\n this.handleClick({ result: this.results[idx] });\n };\n}\n","import * as L from 'leaflet';\nimport { ControlPosition, FeatureGroup, MarkerOptions, Map } from 'leaflet';\nimport SearchElement from './SearchElement';\nimport ResultList from './resultList';\nimport debounce from './lib/debounce';\n\nimport {\n createElement,\n addClassName,\n removeClassName,\n stopPropagation,\n} from './domUtils';\nimport {\n ENTER_KEY,\n SPECIAL_KEYS,\n ARROW_UP_KEY,\n ARROW_DOWN_KEY,\n ESCAPE_KEY,\n} from './constants';\nimport AbstractProvider, { SearchResult } from './providers/provider';\nimport { Provider } from './providers';\n\nconst defaultOptions: Omit<SearchControlProps, 'provider'> = {\n position: 'topleft',\n style: 'button',\n showMarker: true,\n showPopup: false,\n popupFormat: ({ result }) => `${result.label}`,\n resultFormat: ({ result }) => `${result.label}`,\n marker: {\n icon: L && L.Icon ? new L.Icon.Default() : undefined,\n draggable: false,\n },\n maxMarkers: 1,\n maxSuggestions: 5,\n retainZoomLevel: false,\n animateZoom: true,\n searchLabel: 'Enter address',\n clearSearchLabel: 'Clear search',\n notFoundMessage: '',\n messageHideDelay: 3000,\n zoomLevel: 18,\n classNames: {\n container: 'leaflet-bar leaflet-control leaflet-control-geosearch',\n button: 'leaflet-bar-part leaflet-bar-part-single',\n resetButton: 'reset',\n msgbox: 'leaflet-bar message',\n form: '',\n input: '',\n resultlist: '',\n item: '',\n notfound: 'leaflet-bar-notfound',\n },\n autoComplete: true,\n autoCompleteDelay: 250,\n autoClose: false,\n keepResult: false,\n updateMap: true,\n};\n\nconst UNINITIALIZED_ERR =\n 'Leaflet must be loaded before instantiating the GeoSearch control';\n\ninterface SearchControlProps {\n /** the provider to use for searching */\n provider: Provider;\n /** the leaflet position to render the element in */\n position: ControlPosition;\n /**\n * the stye of the search element\n * @default bar\n **/\n style: 'button' | 'bar';\n\n marker: MarkerOptions;\n maxMarkers: number;\n showMarker: boolean;\n showPopup: boolean;\n popupFormat<T = any>(args: {\n query: Selection;\n result: SearchResult<T>;\n }): string;\n\n resultFormat<T = any>(args: { result: SearchResult<T> }): string;\n\n searchLabel: string;\n clearSearchLabel: string;\n notFoundMessage: string;\n messageHideDelay: number;\n\n animateZoom: boolean;\n zoomLevel: number;\n retainZoomLevel: boolean;\n\n classNames: {\n container: string;\n button: string;\n resetButton: string;\n msgbox: string;\n form: string;\n input: string;\n resultlist: string;\n item: string;\n notfound: string;\n };\n\n autoComplete: boolean;\n autoCompleteDelay: number;\n maxSuggestions: number;\n autoClose: boolean;\n keepResult: boolean;\n updateMap: boolean;\n}\n\nexport type SearchControlOptions = Partial<SearchControlProps> & {\n provider: Provider;\n};\n\ninterface Selection {\n query: string;\n data?: SearchResult;\n}\n\ninterface SearchControl {\n options: Omit<SearchControlProps, 'provider'> & {\n provider?: SearchControlProps['provider'];\n };\n markers: FeatureGroup;\n searchElement: SearchElement;\n resultList: ResultList;\n classNames: SearchControlProps['classNames'];\n container: HTMLDivElement;\n input: HTMLInputElement;\n button: HTMLAnchorElement;\n resetButton: HTMLAnchorElement;\n map: Map;\n\n // [key: string]: any;\n initialize(options: SearchControlProps): void;\n onSubmit(result: Selection): void;\n open(): void;\n close(): void;\n onClick(event: Event): void;\n clearResults(event?: KeyboardEvent | null, force?: boolean): void;\n autoSearch(event: KeyboardEvent): void;\n selectResult(event: KeyboardEvent): void;\n showResult(result: SearchResult, query: Selection): void;\n addMarker(result: SearchResult, selection: Selection): void;\n centerMap(result: SearchResult): void;\n closeResults(): void;\n getZoom(): number;\n onAdd(map: Map): HTMLDivElement;\n onRemove(): SearchControl;\n}\n\n// @ts-ignore\nconst Control: SearchControl = {\n options: { ...defaultOptions },\n classNames: { ...defaultOptions.classNames },\n\n initialize(options: SearchControlOptions) {\n if (!L) {\n throw new Error(UNINITIALIZED_ERR);\n }\n\n if (!options.provider) {\n throw new Error('Provider is missing from options');\n }\n\n // merge given options with control defaults\n this.options = { ...defaultOptions, ...options };\n this.classNames = { ...this.classNames, ...options.classNames };\n\n this.markers = new L.FeatureGroup();\n this.classNames.container += ` leaflet-geosearch-${this.options.style}`;\n\n this.searchElement = new SearchElement({\n searchLabel: this.options.searchLabel,\n classNames: {\n container: this.classNames.container,\n form: this.classNames.form,\n input: this.classNames.input,\n },\n handleSubmit: (result) => this.onSubmit(result),\n });\n\n this.button = createElement<HTMLAnchorElement>(\n 'a',\n this.classNames.button,\n this.searchElement.container,\n {\n title: this.options.searchLabel,\n href: '#',\n onClick: (e) => this.onClick(e),\n },\n );\n\n L.DomEvent.disableClickPropagation(this.button);\n\n this.resetButton = createElement<HTMLAnchorElement>(\n 'button',\n this.classNames.resetButton,\n this.searchElement.form,\n {\n text: '×',\n 'aria-label': this.options.clearSearchLabel,\n onClick: () => {\n if (this.searchElement.input.value === '') {\n this.close();\n } else {\n this.clearResults(null, true);\n }\n },\n },\n );\n\n L.DomEvent.disableClickPropagation(this.resetButton);\n\n if (this.options.autoComplete) {\n this.resultList = new ResultList({\n handleClick: ({ result }): void => {\n this.searchElement.input.value = result.label;\n this.onSubmit({ query: result.label, data: result });\n },\n classNames: {\n resultlist: this.classNames.resultlist,\n item: this.classNames.item,\n notfound: this.classNames.notfound,\n },\n notFoundMessage: this.options.notFoundMessage,\n });\n\n this.searchElement.form.appendChild(this.resultList.container);\n\n this.searchElement.input.addEventListener(\n 'keyup',\n debounce(\n (e: KeyboardEvent) => this.autoSearch(e),\n this.options.autoCompleteDelay,\n ),\n true,\n );\n\n this.searchElement.input.addEventListener(\n 'keydown',\n (e: KeyboardEvent) => this.selectResult(e),\n true,\n );\n\n this.searchElement.input.addEventListener(\n 'keydown',\n (e: KeyboardEvent) => this.clearResults(e, true),\n true,\n );\n }\n\n this.searchElement.form.addEventListener(\n 'click',\n (e) => {\n e.preventDefault();\n },\n false,\n );\n },\n\n onAdd(map: Map) {\n const { showMarker, style } = this.options;\n\n this.map = map;\n if (showMarker) {\n this.markers.addTo(map);\n }\n\n if (style === 'bar') {\n const root = map\n .getContainer()\n .querySelector('.leaflet-control-container');\n\n this.container = createElement<HTMLDivElement>(\n 'div',\n 'leaflet-control-geosearch leaflet-geosearch-bar',\n );\n\n this.container.appendChild(this.searchElement.form);\n root!.appendChild(this.container);\n }\n\n L.DomEvent.disableClickPropagation(this.searchElement.form);\n return this.searchElement.container;\n },\n\n onRemove() {\n this.container?.remove();\n return this;\n },\n\n open() {\n const { container, input } = this.searchElement;\n addClassName(container, 'active');\n input.focus();\n },\n\n close() {\n const { container } = this.searchElement;\n removeClassName(container, 'active');\n this.clearResults();\n },\n\n onClick(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n const { container } = this.searchElement;\n\n if (container.classList.contains('active')) {\n this.close();\n } else {\n this.open();\n }\n },\n\n selectResult(event) {\n if (\n [ENTER_KEY, ARROW_DOWN_KEY, ARROW_UP_KEY].indexOf(event.keyCode) === -1\n ) {\n return;\n }\n\n event.preventDefault();\n\n if (event.keyCode === ENTER_KEY) {\n const item = this.resultList.select(this.resultList.selected);\n this.onSubmit({ query: this.searchElement.input.value, data: item });\n return;\n }\n\n const max = this.resultList.count() - 1;\n if (max < 0) {\n return;\n }\n\n const { selected } = this.resultList;\n const next = event.keyCode === ARROW_DOWN_KEY ? selected + 1 : selected - 1;\n const idx = next < 0 ? max : next > max ? 0 : next;\n\n const item = this.resultList.select(idx);\n this.searchElement.input.value = item.label;\n },\n\n clearResults(event: KeyboardEvent | null, force = false) {\n if (event && event.keyCode !== ESCAPE_KEY) {\n return;\n }\n\n const { keepResult, autoComplete } = this.options;\n\n if (force || !keepResult) {\n this.searchElement.input.value = '';\n this.markers.clearLayers();\n }\n\n if (autoComplete) {\n this.resultList.clear();\n }\n },\n\n async autoSearch(event) {\n if (SPECIAL_KEYS.indexOf(event.keyCode) > -1) {\n return;\n }\n\n const query = (event.target as HTMLInputElement).value;\n const { provider } = this.options;\n\n if (query.length) {\n let results = await provider!.search({ query });\n results = results.slice(0, this.options.maxSuggestions);\n this.resultList.render(results, this.options.resultFormat);\n } else {\n this.resultList.clear();\n }\n },\n\n async onSubmit(query) {\n this.resultList.clear();\n const { provider } = this.options;\n\n const results = await provider!.search(query);\n\n if (results && results.length > 0) {\n this.showResult(results[0], query);\n }\n },\n\n showResult(result, query) {\n const { autoClose, updateMap } = this.options;\n\n const markers = this.markers.getLayers();\n if (markers.length >= this.options.maxMarkers) {\n this.markers.removeLayer(markers[0]);\n }\n\n const marker = this.addMarker(result, query);\n\n if (updateMap) {\n this.centerMap(result);\n }\n\n this.map.fireEvent('geosearch/showlocation', {\n location: result,\n marker,\n });\n\n if (autoClose) {\n this.closeResults();\n }\n },\n\n closeResults() {\n const { container } = this.searchElement;\n\n if (container.classList.contains('active')) {\n removeClassName(container, 'active');\n }\n\n this.clearResults();\n },\n\n addMarker(result, query) {\n const { marker: options, showPopup, popupFormat } = this.options;\n const marker = new L.Marker([result.y, result.x], options);\n let popupLabel = result.label;\n\n if (typeof popupFormat === 'function') {\n popupLabel = popupFormat({ query, result });\n }\n\n marker.bindPopup(popupLabel);\n\n this.markers.addLayer(marker);\n\n if (showPopup) {\n marker.openPopup();\n }\n\n if (options.draggable) {\n marker.on('dragend', (args) => {\n this.map.fireEvent('geosearch/marker/dragend', {\n location: marker.getLatLng(),\n event: args,\n });\n });\n }\n\n return marker;\n },\n\n centerMap(result) {\n const { retainZoomLevel, animateZoom } = this.options;\n\n const resultBounds = result.bounds\n ? new L.LatLngBounds(result.bounds)\n : new L.LatLng(result.y, result.x).toBounds(10);\n\n const bounds = resultBounds.isValid()\n ? resultBounds\n : this.markers.getBounds();\n\n if (!retainZoomLevel && resultBounds.isValid() && !result.bounds) {\n this.map.setView(bounds.getCenter(), this.getZoom(), {\n animate: animateZoom,\n });\n } else if (!retainZoomLevel && resultBounds.isValid()) {\n this.map.fitBounds(bounds, { animate: animateZoom });\n } else {\n this.map.setView(bounds.getCenter(), this.getZoom(), {\n animate: animateZoom,\n });\n }\n },\n\n getZoom(): number {\n const { retainZoomLevel, zoomLevel } = this.options;\n return retainZoomLevel ? this.map.getZoom() : zoomLevel;\n },\n};\n\nexport default function SearchControl(...options: any[]) {\n if (!L) {\n throw new Error(UNINITIALIZED_ERR);\n }\n\n const LControl = L.Control.extend(Control);\n return new LControl(...options);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport default function debounce(\n cb: (...args: any[]) => void,\n wait = 250,\n immediate = false,\n): (...args: any[]) => void {\n let timeout: ReturnType<typeof setTimeout> | null;\n\n return (...args: any[]): void => {\n if (timeout) {\n clearTimeout(timeout);\n }\n\n timeout = setTimeout(() => {\n timeout = null;\n\n if (!immediate) {\n cb(...args);\n }\n }, wait);\n\n if (immediate && !timeout) {\n cb(...args);\n }\n };\n}\n","export type PointTuple = [number, number];\nexport type BoundsTuple = [PointTuple, PointTuple];\n\nexport interface LatLng {\n lat: number;\n lng: number;\n}\n\nexport interface SearchResult<TRawResult = any> {\n x: number;\n y: number;\n label: string;\n bounds: BoundsTuple | null;\n raw: TRawResult;\n}\n\nexport interface ProviderParams {\n [key: string]: string | number | boolean;\n}\n\nexport interface ProviderOptions {\n params?: ProviderParams;\n}\n\nexport enum RequestType {\n SEARCH,\n REVERSE,\n}\n\nexport interface EndpointArgument {\n query: string | { [key: string]: string | number | boolean };\n type?: RequestType;\n}\n\nexport interface SearchArgument {\n query: string;\n}\n\nexport interface ParseArgument<TData> {\n data: TData;\n}\n\nexport interface Provider<TRequestResult, TRawResult> {\n options: ProviderOptions;\n\n endpoint(options: EndpointArgument): string;\n getParamString(params: ProviderParams): string;\n parse(response: ParseArgument<TRequestResult>): SearchResult<TRawResult>[];\n search(options: SearchArgument): Promise<SearchResult<TRawResult>[]>;\n}\n\nexport default abstract class AbstractProvider<\n TRequestResult = any,\n TRawResult = any,\n> implements Provider<TRequestResult, TRawResult>\n{\n options: ProviderOptions;\n\n constructor(options: ProviderOptions = {}) {\n this.options = options;\n }\n\n abstract endpoint(options: EndpointArgument): string;\n abstract parse(\n response: ParseArgument<TRequestResult>,\n ): SearchResult<TRawResult>[];\n\n getParamString(params: ProviderParams = {}): string {\n const set = { ...this.options.params, ...params };\n return Object.keys(set)\n .map(\n (key) => `${encodeURIComponent(key)}=${encodeURIComponent(set[key])}`,\n )\n .join('&');\n }\n\n getUrl(url: string, params?: ProviderParams): string {\n return `${url}?${this.getParamString(params)}`;\n }\n\n async search(options: SearchArgument): Promise<SearchResult<TRawResult>[]> {\n const url = this.endpoint({\n query: options.query,\n type: RequestType.SEARCH,\n });\n\n const request = await fetch(url);\n const json: TRequestResult = await request.json();\n return this.parse({ data: json });\n }\n}\n","import AbstractProvider, {\n LatLng,\n ParseArgument,\n SearchArgument,\n SearchResult,\n} from './provider';\n\ninterface RequestResult {\n hits: RawResult[];\n}\n\ninterface ValueMatch {\n value: string;\n matchLevel: string;\n matchedWords: string[];\n fullyHighlighted?: boolean;\n}\n\ninterface RawResult {\n country: { [key: string]: string };\n country_code: string;\n city: { [key: string]: string[] };\n importance: number;\n _tags: string[];\n postcode: string[];\n population: number;\n is_country: boolean;\n is_highway: boolean;\n is_city: boolean;\n is_popular: boolean;\n administrative: string[];\n admin_level: number;\n is_suburb: boolean;\n locale_names: {\n default: string[];\n };\n _geoloc: LatLng;\n objectID: string;\n _highlightResult: {\n country: {\n default: ValueMatch;\n [key: string]: ValueMatch;\n };\n city: {\n default: ValueMatch[];\n [key: string]: ValueMatch[];\n };\n postcode: ValueMatch[];\n administrative: ValueMatch[];\n locale_names: {\n default: ValueMatch[];\n };\n };\n}\n\ninterface ProviderOptions {\n key?: string;\n [key: string]: string | boolean | number | undefined;\n}\n\nexport default class Provider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n endpoint(): string {\n // No query, Algolia requires POST request\n return 'https://places-dsn.algolia.net/1/places/query';\n }\n\n /**\n * Find index of value with best match\n * (full, fallback to partial, and then to 0)\n */\n findBestMatchLevelIndex(vms: ValueMatch[]): number {\n const match =\n vms.find((vm) => vm.matchLevel === 'full') ||\n vms.find((vm) => vm.matchLevel === 'partial');\n return match ? vms.indexOf(match) : 0;\n }\n\n /**\n * Algolia not provides labels for hits, so\n * we will implement that builder ourselves\n */\n getLabel(result: RawResult): string {\n return [\n // Building + Street\n result.locale_names?.default[\n this.findBestMatchLevelIndex(\n result._highlightResult.locale_names.default,\n )\n ],\n // City\n result.city?.default[\n this.findBestMatchLevelIndex(result._highlightResult.city.default)\n ],\n // Administrative (State / Province)\n result.administrative[\n this.findBestMatchLevelIndex(result._highlightResult.administrative)\n ],\n // Zip code / Postal code\n result.postcode?.[\n this.findBestMatchLevelIndex(result._highlightResult.postcode)\n ],\n // Country\n result.country?.default,\n ]\n .filter(Boolean)\n .join(', ');\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return response.data.hits.map((r) => ({\n x: r._geoloc.lng,\n y: r._geoloc.lat,\n label: this.getLabel(r),\n bounds: null, // Algolia API does not provide bounds\n raw: r,\n }));\n }\n\n async search({ query }: SearchArgument): Promise<SearchResult<RawResult>[]> {\n const params = typeof query === 'string' ? { query } : query;\n\n const request = await fetch(this.endpoint(), {\n method: 'POST',\n body: JSON.stringify({\n ...this.options.params,\n ...params,\n }),\n });\n\n const json = await request.json();\n return this.parse({ data: json });\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n SearchArgument,\n SearchResult,\n} from './provider';\nimport { createScriptElement } from '../domUtils';\n\nexport interface RequestResult {\n authenticationResultCode: string;\n brandLogoUri: string;\n copyright: string;\n resourceSets: {\n estimatedTotal: number;\n resources: RawResult[];\n }[];\n statusCode: number;\n statusDescription: string;\n traceId: string;\n}\n\nexport interface RawResult {\n __type: string;\n bbox: [number, number, number, number];\n name: string;\n point: { type: 'Point'; coordinates: [number, number] };\n address: {\n adminDistrict: string;\n adminDistrict2: string;\n countryRegion: string;\n formattedAddress: string;\n locality: string;\n };\n confidence: string;\n entityType: string;\n geocodePoints: [\n {\n type: 'Point';\n coordinates: [number, number];\n calculationMethod: string;\n usageTypes: string[];\n },\n ];\n matchCodes: string[];\n}\n\nexport default class BingProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl = 'https://dev.virtualearth.net/REST/v1/Locations';\n\n endpoint({ query, jsonp }: EndpointArgument & { jsonp: string }): string {\n const params = typeof query === 'string' ? { q: query } : query;\n params.jsonp = jsonp;\n\n return this.getUrl(this.searchUrl, params);\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n if (response.data.resourceSets.length === 0) {\n return [];\n }\n\n return response.data.resourceSets[0].resources.map((r) => ({\n x: r.point.coordinates[1],\n y: r.point.coordinates[0],\n label: r.address.formattedAddress,\n bounds: [\n [r.bbox[0], r.bbox[1]], // s, w\n [r.bbox[2], r.bbox[3]], // n, e\n ],\n raw: r,\n }));\n }\n\n async search({ query }: SearchArgument): Promise<SearchResult<RawResult>[]> {\n const jsonp = `BING_JSONP_CB_${Date.now()}`;\n const json = await createScriptElement<RequestResult>(\n this.endpoint({ query, jsonp }),\n jsonp,\n );\n\n return this.parse({ data: json });\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n SearchResult,\n} from './provider';\n\ninterface RequestResult {\n spatialReference: { wkid: number; latestWkid: number };\n locations: RawResult[];\n}\n\ninterface RawResult {\n name: string;\n extent: {\n xmin: number;\n ymin: number;\n xmax: number;\n ymax: number;\n };\n feature: {\n geometry: { x: number; y: number };\n attributes: { Score: number; Addr_Type: string };\n };\n}\n\nexport default class EsriProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl =\n 'https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/find';\n\n endpoint({ query }: EndpointArgument): string {\n const params = typeof query === 'string' ? { text: query } : query;\n params.f = 'json';\n\n return this.getUrl(this.searchUrl, params);\n }\n\n parse(result: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return result.data.locations.map((r) => ({\n x: r.feature.geometry.x,\n y: r.feature.geometry.y,\n label: r.name,\n bounds: [\n [r.extent.ymin, r.extent.xmin], // s, w\n [r.extent.ymax, r.extent.xmax], // n, e\n ],\n raw: r,\n }));\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n ProviderOptions,\n RequestType,\n SearchResult,\n} from './provider';\n\nexport interface RequestResult {\n geocoding: object;\n features: RawResult[];\n}\n\nexport type PeliasProviderOptions = {\n host?: string;\n} & ProviderOptions;\n\nexport interface RawResult {\n type: 'Feature';\n geometry: {\n type: 'Point';\n coordinates: [number, number];\n };\n bbox?: [number, number, number, number];\n properties: {\n id: string;\n source_id: string;\n gid: string;\n\n layer: string;\n source: string;\n\n label: string;\n name: string;\n\n accuracy: 'centroid' | 'point';\n confidence?: number;\n match_type?: 'exact' | 'interpolated' | 'fallback';\n\n borough?: string;\n borough_a?: string;\n borough_gid?: string;\n continent?: string;\n continent_a?: string;\n continent_gid?: string;\n country?: string;\n country_a?: string;\n country_gid?: string;\n county?: string;\n county_a?: string;\n county_gid?: string;\n dependency?: string;\n dependency_a?: string;\n dependency_gid?: string;\n empire?: string;\n empire_a?: string;\n empire_gid?: string;\n localadmin?: string;\n localadmin_a?: string;\n localadmin_gid?: string;\n locality?: string;\n locality_a?: string;\n locality_gid?: string;\n macrocounty?: string;\n macrocounty_a?: string;\n macrocounty_gid?: string;\n macroregion?: string;\n macroregion_a?: string;\n macroregion_gid?: string;\n marinearea?: string;\n marinearea_a?: string;\n marinearea_gid?: string;\n neighbourhood?: string;\n neighbourhood_a?: string;\n neighbourhood_gid?: string;\n ocean?: string;\n ocean_a?: string;\n ocean_gid?: string;\n postalcode?: string;\n postalcode_a?: string;\n postalcode_gid?: string;\n region?: string;\n region_a?: string;\n region_gid?: string;\n\n street?: string;\n housenumber?: string;\n\n addendum?: any;\n };\n}\n\nexport default class PeliasProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n // Pelias servers are self-hosted so you'll need to configure the 'options.host' string\n // to identify where requests to your running pelias/api server instance should be sent.\n // note: you SHOULD include the scheme, domain and port but NOT any path or parameters.\n // If you're using the Docker setup (https://github.com/pelias/docker)\n // then the default host of 'http://localhost:4000' will work out of the box.\n host: string;\n\n constructor(options: PeliasProviderOptions = {}) {\n super(options);\n this.host = options.host || 'http://localhost:4000';\n }\n\n /**\n * note: Pelias has four different query modes:\n * /v1/autocomplete: for partially completed inputs (such as when a user types)\n * /v1/search: for completed inputs (such as when geocoding a CSV file)\n * /v1/search/structured: for completed inputs with fields already separated\n * /v1/reverse: for finding places nearby/enveloping a point\n */\n endpoint({ query, type }: EndpointArgument) {\n switch (type) {\n // case RequestType.AUTOCOMPLETE:\n // const autocompleteParams = (typeof query === 'string') ? { text: query } : query;\n // return this.getUrl(`${this.host}/v1/autocomplete`, autocompleteParams);\n\n // case RequestType.FULLTEXT:\n // const searchParams = (typeof query === 'string') ? { text: query } : query;\n // return this.getUrl(`${this.host}/v1/search`, searchParams);\n\n // case RequestType.STRUCTURED:\n // const structuredParams = (typeof query === 'string') ? { address: query } : query;\n // return this.getUrl(`${this.host}/v1/search/structured`, structuredParams);\n\n case RequestType.REVERSE:\n const reverseParams = typeof query === 'string' ? {} : query;\n return this.getUrl(`${this.host}/v1/reverse`, reverseParams);\n\n // note: the default query mode is set to 'autocomplete'\n default:\n const autocompleteParams =\n typeof query === 'string' ? { text: query } : query;\n return this.getUrl(`${this.host}/v1/autocomplete`, autocompleteParams);\n }\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return response.data.features.map((feature) => {\n const res: SearchResult<RawResult> = {\n x: feature.geometry.coordinates[0],\n y: feature.geometry.coordinates[1],\n label: feature.properties.label,\n bounds: null,\n raw: feature,\n };\n\n // bbox values are only available for features derived from non-point geometries\n // geojson bbox format: [minX, minY, maxX, maxY]\n if (Array.isArray(feature.bbox) && feature.bbox.length === 4) {\n res.bounds = [\n [feature.bbox[1], feature.bbox[0]], // s, w\n [feature.bbox[3], feature.bbox[2]], // n, e\n ];\n }\n\n return res;\n });\n }\n}\n","import PeliasProvider, { PeliasProviderOptions } from './peliasProvider';\n\nexport default class GeocodeEarthProvider extends PeliasProvider {\n constructor(options: PeliasProviderOptions = {}) {\n options.host = 'https://api.geocode.earth';\n super(options);\n }\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nvar fastDeepEqual = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n\nvar isEqual = /*@__PURE__*/getDefaultExportFromCjs(fastDeepEqual);\n\n/**\n * Copyright 2019 Google LLC. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at.\n *\n * Http://www.apache.org/licenses/LICENSE-2.0.\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_ID = \"__googleMapsScriptId\";\n/**\n * The status of the [[Loader]].\n */\nvar LoaderStatus;\n(function (LoaderStatus) {\n LoaderStatus[LoaderStatus[\"INITIALIZED\"] = 0] = \"INITIALIZED\";\n LoaderStatus[LoaderStatus[\"LOADING\"] = 1] = \"LOADING\";\n LoaderStatus[LoaderStatus[\"SUCCESS\"] = 2] = \"SUCCESS\";\n LoaderStatus[LoaderStatus[\"FAILURE\"] = 3] = \"FAILURE\";\n})(LoaderStatus || (LoaderStatus = {}));\n/**\n * [[Loader]] makes it easier to add Google Maps JavaScript API to your application\n * dynamically using\n * [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n * It works by dynamically creating and appending a script node to the the\n * document head and wrapping the callback function so as to return a promise.\n *\n * ```\n * const loader = new Loader({\n * apiKey: \"\",\n * version: \"weekly\",\n * libraries: [\"places\"]\n * });\n *\n * loader.load().then((google) => {\n * const map = new google.maps.Map(...)\n * })\n * ```\n */\nclass Loader {\n /**\n * Creates an instance of Loader using [[LoaderOptions]]. No defaults are set\n * using this library, instead the defaults are set by the Google Maps\n * JavaScript API server.\n *\n * ```\n * const loader = Loader({apiKey, version: 'weekly', libraries: ['places']});\n * ```\n */\n constructor({ apiKey, authReferrerPolicy, channel, client, id = DEFAULT_ID, language, libraries = [], mapIds, nonce, region, retries = 3, url = \"https://maps.googleapis.com/maps/api/js\", version, }) {\n this.callbacks = [];\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.apiKey = apiKey;\n this.authReferrerPolicy = authReferrerPolicy;\n this.channel = channel;\n this.client = client;\n this.id = id || DEFAULT_ID; // Do not allow empty string\n this.language = language;\n this.libraries = libraries;\n this.mapIds = mapIds;\n this.nonce = nonce;\n this.region = region;\n this.retries = retries;\n this.url = url;\n this.version = version;\n if (Loader.instance) {\n if (!isEqual(this.options, Loader.instance.options)) {\n throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(Loader.instance.options)}`);\n }\n return Loader.instance;\n }\n Loader.instance = this;\n }\n get options() {\n return {\n version: this.version,\n apiKey: this.apiKey,\n channel: this.channel,\n client: this.client,\n id: this.id,\n libraries: this.libraries,\n language: this.language,\n region: this.region,\n mapIds: this.mapIds,\n nonce: this.nonce,\n url: this.url,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n }\n get status() {\n if (this.errors.length) {\n return LoaderStatus.FAILURE;\n }\n if (this.done) {\n return LoaderStatus.SUCCESS;\n }\n if (this.loading) {\n return LoaderStatus.LOADING;\n }\n return LoaderStatus.INITIALIZED;\n }\n get failed() {\n return this.done && !this.loading && this.errors.length >= this.retries + 1;\n }\n /**\n * CreateUrl returns the Google Maps JavaScript API script url given the [[LoaderOptions]].\n *\n * @ignore\n * @deprecated\n */\n createUrl() {\n let url = this.url;\n url += `?callback=__googleMapsCallback&loading=async`;\n if (this.apiKey) {\n url += `&key=${this.apiKey}`;\n }\n if (this.channel) {\n url += `&channel=${this.channel}`;\n }\n if (this.client) {\n url += `&client=${this.client}`;\n }\n if (this.libraries.length > 0) {\n url += `&libraries=${this.libraries.join(\",\")}`;\n }\n if (this.language) {\n url += `&language=${this.language}`;\n }\n if (this.region) {\n url += `&region=${this.region}`;\n }\n if (this.version) {\n url += `&v=${this.version}`;\n }\n if (this.mapIds) {\n url += `&map_ids=${this.mapIds.join(\",\")}`;\n }\n if (this.authReferrerPolicy) {\n url += `&auth_referrer_policy=${this.authReferrerPolicy}`;\n }\n return url;\n }\n deleteScript() {\n const script = document.getElementById(this.id);\n if (script) {\n script.remove();\n }\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n * @deprecated, use importLibrary() instead.\n */\n load() {\n return this.loadPromise();\n }\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n *\n * @ignore\n * @deprecated, use importLibrary() instead.\n */\n loadPromise() {\n return new Promise((resolve, reject) => {\n this.loadCallback((err) => {\n if (!err) {\n resolve(window.google);\n }\n else {\n reject(err.error);\n }\n });\n });\n }\n importLibrary(name) {\n this.execute();\n return google.maps.importLibrary(name);\n }\n /**\n * Load the Google Maps JavaScript API script with a callback.\n * @deprecated, use importLibrary() instead.\n */\n loadCallback(fn) {\n this.callbacks.push(fn);\n this.execute();\n }\n /**\n * Set the script on document.\n */\n setScript() {\n var _a, _b;\n if (document.getElementById(this.id)) {\n // TODO wrap onerror callback for cases where the script was loaded elsewhere\n this.callback();\n return;\n }\n const params = {\n key: this.apiKey,\n channel: this.channel,\n client: this.client,\n libraries: this.libraries.length && this.libraries,\n v: this.version,\n mapIds: this.mapIds,\n language: this.language,\n region: this.region,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n // keep the URL minimal:\n Object.keys(params).forEach(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (key) => !params[key] && delete params[key]);\n if (!((_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.maps) === null || _b === void 0 ? void 0 : _b.importLibrary)) {\n // tweaked copy of https://developers.google.com/maps/documentation/javascript/load-maps-js-api#dynamic-library-import\n // which also sets the base url, the id, and the nonce\n /* eslint-disable */\n ((g) => {\n // @ts-ignore\n let h, a, k, p = \"The Google Maps JavaScript API\", c = \"google\", l = \"importLibrary\", q = \"__ib__\", m = document, b = window;\n // @ts-ignore\n b = b[c] || (b[c] = {});\n // @ts-ignore\n const d = b.maps || (b.maps = {}), r = new Set(), e = new URLSearchParams(), u = () => \n // @ts-ignore\n h || (h = new Promise((f, n) => __awaiter(this, void 0, void 0, function* () {\n var _a;\n yield (a = m.createElement(\"script\"));\n a.id = this.id;\n e.set(\"libraries\", [...r] + \"\");\n // @ts-ignore\n for (k in g)\n e.set(k.replace(/[A-Z]/g, (t) => \"_\" + t[0].toLowerCase()), g[k]);\n e.set(\"callback\", c + \".maps.\" + q);\n a.src = this.url + `?` + e;\n d[q] = f;\n a.onerror = () => (h = n(Error(p + \" could not load.\")));\n // @ts-ignore\n a.nonce = this.nonce || ((_a = m.querySelector(\"script[nonce]\")) === null || _a === void 0 ? void 0 : _a.nonce) || \"\";\n m.head.append(a);\n })));\n // @ts-ignore\n d[l] ? console.warn(p + \" only loads once. Ignoring:\", g) : (d[l] = (f, ...n) => r.add(f) && u().then(() => d[l](f, ...n)));\n })(params);\n /* eslint-enable */\n }\n // While most libraries populate the global namespace when loaded via bootstrap params,\n // this is not the case for \"marker\" when used with the inline bootstrap loader\n // (and maybe others in the future). So ensure there is an importLibrary for each:\n const libraryPromises = this.libraries.map((library) => this.importLibrary(library));\n // ensure at least one library, to kick off loading...\n if (!libraryPromises.length) {\n libraryPromises.push(this.importLibrary(\"core\"));\n }\n Promise.all(libraryPromises).then(() => this.callback(), (error) => {\n const event = new ErrorEvent(\"error\", { error }); // for backwards compat\n this.loadErrorCallback(event);\n });\n }\n /**\n * Reset the loader state.\n */\n reset() {\n this.deleteScript();\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.onerrorEvent = null;\n }\n resetIfRetryingFailed() {\n if (this.failed) {\n this.reset();\n }\n }\n loadErrorCallback(e) {\n this.errors.push(e);\n if (this.errors.length <= this.retries) {\n const delay = this.errors.length * Math.pow(2, this.errors.length);\n console.error(`Failed to load Google Maps script, retrying in ${delay} ms.`);\n setTimeout(() => {\n this.deleteScript();\n this.setScript();\n }, delay);\n }\n else {\n this.onerrorEvent = e;\n this.callback();\n }\n }\n callback() {\n this.done = true;\n this.loading = false;\n this.callbacks.forEach((cb) => {\n cb(this.onerrorEvent);\n });\n this.callbacks = [];\n }\n execute() {\n this.resetIfRetryingFailed();\n if (this.done) {\n this.callback();\n }\n else {\n // short circuit and warn if google.maps is already loaded\n if (window.google && window.google.maps && window.google.maps.version) {\n console.warn(\"Google Maps already loaded outside @googlemaps/js-api-loader.\" +\n \"This may result in undesirable behavior as options and script parameters may not match.\");\n this.callback();\n return;\n }\n if (this.loading) ;\n else {\n this.loading = true;\n this.setScript();\n }\n }\n }\n}\n\nexport { DEFAULT_ID, Loader, LoaderStatus };\n//# sourceMappingURL=index.mjs.map\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n ProviderOptions,\n SearchArgument,\n SearchResult,\n} from './provider';\nimport { Loader, LoaderOptions } from '@googlemaps/js-api-loader';\n\ninterface RequestResult {\n results: google.maps.GeocoderResult[];\n status?: google.maps.GeocoderStatus;\n}\n\ninterface GeocodeError {\n code: Exclude<google.maps.GeocoderStatus, google.maps.GeocoderStatus.OK>;\n endpoint: 'GEOCODER_GEOCODE';\n message: string;\n name: 'MapsRequestError';\n stack: string;\n}\n\nexport type GoogleProviderOptions = LoaderOptions & ProviderOptions;\n\nexport default class GoogleProvider extends AbstractProvider<\n RequestResult,\n google.maps.GeocoderResult\n> {\n loader: Promise<google.maps.Geocoder> | null = null;\n geocoder: google.maps.Geocoder | null = null;\n\n constructor(options: GoogleProviderOptions) {\n super(options);\n\n if (typeof window !== 'undefined') {\n this.loader = new Loader(options).load().then((google) => {\n const geocoder = new google.maps.Geocoder();\n this.geocoder = geocoder;\n return geocoder;\n });\n }\n }\n\n endpoint({ query }: EndpointArgument): never {\n throw new Error('Method not implemented.');\n }\n\n parse(\n response: ParseArgument<RequestResult>,\n ): SearchResult<google.maps.GeocoderResult>[] {\n return response.data.results.map((r) => {\n const { lat, lng } = r.geometry.location.toJSON();\n const { east, north, south, west } = r.geometry.viewport.toJSON();\n\n return {\n x: lng,\n y: lat,\n label: r.formatted_address,\n bounds: [\n [south, west],\n [north, east],\n ],\n raw: r,\n };\n });\n }\n\n async search(\n options: SearchArgument,\n ): Promise<SearchResult<google.maps.GeocoderResult>[]> {\n const geocoder = this.geocoder || (await this.loader);\n\n if (!geocoder) {\n throw new Error(\n 'GoogleMaps GeoCoder is not loaded. Are you trying to run this server side?',\n );\n }\n\n const response = await geocoder\n .geocode({ address: options.query }, (response) => ({\n results: response,\n }))\n .catch((e: GeocodeError) => {\n if (e.code !== 'ZERO_RESULTS') {\n console.error(`${e.code}: ${e.message}`);\n }\n return { results: [] };\n });\n\n return this.parse({ data: response });\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n LatLng,\n ParseArgument,\n SearchResult,\n} from './provider';\n\nexport interface RequestResult {\n results: RawResult[];\n status: string;\n}\n\nexport interface RawResult {\n address_components: {\n long_name: string;\n short_name: string;\n types: string[];\n }[];\n formatted_address: string;\n geometry: {\n location: LatLng;\n location_type: string;\n viewport: {\n northeast: LatLng;\n southwest: LatLng;\n };\n };\n place_id: string;\n plus_code: {\n compound_code: string;\n global_code: string;\n };\n types: string[];\n}\n\nexport default class LegacyGoogleProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl = 'https://maps.googleapis.com/maps/api/geocode/json';\n\n endpoint({ query }: EndpointArgument) {\n const params = typeof query === 'string' ? { address: query } : query;\n return this.getUrl(this.searchUrl, params);\n }\n\n parse(result: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return result.data.results.map((r) => ({\n x: r.geometry.location.lng,\n y: r.geometry.location.lat,\n label: r.formatted_address,\n bounds: [\n [r.geometry.viewport.southwest.lat, r.geometry.viewport.southwest.lng], // s, w\n [r.geometry.viewport.northeast.lat, r.geometry.viewport.northeast.lng], // n, e\n ],\n raw: r,\n }));\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n LatLng,\n ParseArgument,\n SearchResult,\n} from './provider';\n\nexport interface RequestResult {\n items: RawResult[];\n}\n\nexport interface RawResult {\n title: string;\n id: string;\n resultType: string;\n address: {\n label: string;\n countryCode: string;\n countryName: string;\n state: string;\n county: string;\n city: string;\n district: string;\n street: string;\n postalCode: string;\n houseNumber: string;\n };\n position: LatLng;\n access: LatLng[];\n categories: { id: string }[];\n contacts: { [key: string]: { value: string }[] }[];\n scoring: {\n queryScore: number;\n fieldScore: {\n placeName: number;\n };\n };\n}\n\nexport default class HereProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl = 'https://geocode.search.hereapi.com/v1/autosuggest';\n\n endpoint({ query }: EndpointArgument): string {\n const params = typeof query === 'string' ? { q: query } : query;\n return this.getUrl(this.searchUrl, params);\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return response.data.items\n .filter((r) => r.position !== undefined)\n .map((r) => ({\n x: r.position.lng,\n y: r.position.lat,\n label: r.address.label,\n bounds: null,\n raw: r,\n }));\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n ProviderOptions,\n RequestType,\n SearchResult,\n} from './provider';\nimport hasShape from '../lib/hasShape';\n\nexport type RequestResult = RawResult[];\n\nexport interface RawResult {\n place_id: string;\n licence: string;\n osm_type: string;\n osm_id: number;\n boundingbox: [string, string, string, string];\n lat: string;\n lon: string;\n display_name: string;\n class: string;\n type: string;\n importance: number;\n icon?: string;\n}\n\nexport type OpenStreetMapProviderOptions = {\n searchUrl?: string;\n reverseUrl?: string;\n} & ProviderOptions;\n\nexport default class OpenStreetMapProvider extends AbstractProvider<\n RawResult[],\n RawResult\n> {\n searchUrl: string;\n reverseUrl: string;\n\n constructor(options: OpenStreetMapProviderOptions = {}) {\n super(options);\n\n const host = 'https://nominatim.openstreetmap.org';\n this.searchUrl = options.searchUrl || `${host}/search`;\n this.reverseUrl = options.reverseUrl || `${host}/reverse`;\n }\n\n endpoint({ query, type }: EndpointArgument): string {\n const params = typeof query === 'string' ? { q: query } : query;\n params.format = 'json';\n\n switch (type) {\n case RequestType.REVERSE:\n return this.getUrl(this.reverseUrl, params);\n\n default:\n return this.getUrl(this.searchUrl, params);\n }\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n const records = Array.isArray(response.data)\n ? response.data\n : [response.data];\n\n return records.map((r) => ({\n x: Number(r.lon),\n y: Number(r.lat),\n label: r.display_name,\n bounds: [\n [parseFloat(r.boundingbox[0]), parseFloat(r.boundingbox[2])], // s, w\n [parseFloat(r.boundingbox[1]), parseFloat(r.boundingbox[3])], // n, e\n ],\n raw: r,\n }));\n }\n}\n","import OpenStreetMapProvider, {\n OpenStreetMapProviderOptions,\n RawResult,\n RequestResult,\n} from './openStreetMapProvider';\n\ninterface RequestResultWithError extends RequestResult {\n error?: string;\n}\nimport { ParseArgument, SearchResult } from './provider';\n\nexport default class LocationIQProvider extends OpenStreetMapProvider {\n constructor(options: OpenStreetMapProviderOptions) {\n super({\n ...options,\n searchUrl: `https://locationiq.org/v1/search.php`,\n reverseUrl: `https://locationiq.org/v1/reverse.php`,\n });\n }\n\n parse(\n response: ParseArgument<RequestResultWithError>,\n ): SearchResult<RawResult>[] {\n if (response.data.error) {\n return [];\n }\n return super.parse(response);\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n LatLng,\n ParseArgument,\n SearchArgument,\n SearchResult,\n} from './provider';\n\nexport interface RequestResult {\n results: RawResult[];\n}\n\nexport interface RawResult {\n annotations: {\n DMS: { lat: string; lng: string };\n MGRS: string;\n Maidenhead: string;\n Mercator: { x: number; y: number };\n OSM: {\n edit_url: string;\n note_url: string;\n url: string;\n };\n UN_M49: {\n regions: { [key: string]: string };\n statistical_groupings: string[];\n };\n callingcode: number;\n currency: {\n alternate_symbols: string[];\n decimal_mark: string;\n html_entity: string;\n iso_code: string;\n iso_numeric: string;\n name: string;\n smallest_denomination: number;\n subunit: string;\n subunit_to_unit: number;\n symbol: string;\n symbol_first: number;\n thousands_separator: string;\n };\n flag: string;\n geohash: string;\n qibla: number;\n roadinfo: {\n drive_on: string;\n road: string;\n road_type: string;\n speed_in: string;\n };\n sun: {\n rise: {\n apparent: number;\n astronomical: number;\n civil: number;\n nautical: number;\n };\n set: {\n apparent: number;\n astronomical: number;\n civil: number;\n nautical: number;\n };\n };\n timezone: {\n name: string;\n now_in_dst: number;\n offset_sec: number;\n offset_string: string;\n short_name: string;\n };\n what3words: { words: string };\n };\n bounds: {\n northeast: LatLng;\n southwest: LatLng;\n };\n formatted: string;\n geometry: LatLng;\n}\n\nexport default class OpenCageProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl = 'https://api.opencagedata.com/geocode/v1/json';\n\n endpoint({ query }: EndpointArgument) {\n const params = typeof query === 'string' ? { q: query } : query;\n params.format = 'json';\n\n return this.getUrl(this.searchUrl, params);\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return response.data.results.map((r) => ({\n x: r.geometry.lng,\n y: r.geometry.lat,\n label: r.formatted,\n bounds: [\n [r.bounds.southwest.lat, r.bounds.southwest.lng], // s, w\n [r.bounds.northeast.lat, r.bounds.northeast.lng], // n, e\n ],\n raw: r,\n }));\n }\n\n async search(options: SearchArgument): Promise<SearchResult<RawResult>[]> {\n // opencage returns a 400 error when query length < 2\n if (options.query.length < 2) {\n return [];\n }\n\n return super.search(options);\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n ProviderOptions,\n RequestType,\n SearchResult,\n} from './provider';\nimport hasShape from '../lib/hasShape';\n\nexport type RequestResult = RawResult[];\n\nexport interface RawResult {\n place_id: string;\n licence: string;\n osm_type: string;\n osm_id: number;\n boundingbox: [string, string, string, string];\n lat: string;\n lon: string;\n display_name: string;\n class: string;\n type: string;\n importance: number;\n icon?: string;\n}\n\nexport type OpenStreetMapProviderOptions = {\n searchUrl?: string;\n reverseUrl?: string;\n} & ProviderOptions;\n\nexport default class CivilDefenseMapProvider extends AbstractProvider<\n RawResult[],\n RawResult\n> {\n searchUrl: string;\n reverseUrl: string;\n\n constructor(options: OpenStreetMapProviderOptions = {}) {\n super(options);\n\n const host = 'https://civildefense.fit.vutbr.cz';\n this.searchUrl = options.searchUrl || `${host}/search`;\n this.reverseUrl = options.reverseUrl || `${host}/reverse`;\n }\n\n endpoint({ query, type }: EndpointArgument): string {\n const params = typeof query === 'string' ? { q: query } : query;\n params.format = 'json';\n\n switch (type) {\n case RequestType.REVERSE:\n return this.getUrl(this.reverseUrl, params);\n\n default:\n return this.getUrl(this.searchUrl, params);\n }\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n const records = Array.isArray(response.data)\n ? response.data\n : [response.data];\n\n return records.map((r) => ({\n x: Number(r.lon),\n y: Number(r.lat),\n label: r.display_name,\n bounds: [\n [parseFloat(r.boundingbox[0]), parseFloat(r.boundingbox[2])], // s, w\n [parseFloat(r.boundingbox[1]), parseFloat(r.boundingbox[3])], // n, e\n ],\n raw: r,\n }));\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n ProviderOptions,\n SearchResult,\n BoundsTuple,\n} from './provider';\n\nexport type RequestResult = {\n features: RawResult[];\n};\nexport interface RawResult {\n center: [string, string];\n text: string;\n place_name: string;\n bbox: [string, string, string, string];\n}\n\nexport type MapBoxProviderOptions = {\n searchUrl?: string;\n reverseUrl?: string;\n} & ProviderOptions;\n\nexport default class MapBoxProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl: string;\n\n constructor(options: MapBoxProviderOptions = {}) {\n super(options);\n\n const host = 'https://a.tiles.mapbox.com';\n this.searchUrl = options.searchUrl || `${host}/v4/geocode/mapbox.places/`;\n }\n\n endpoint({ query }: EndpointArgument): string {\n return this.getUrl(`${this.searchUrl}${query}.json`);\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n const records = Array.isArray(response.data.features)\n ? response.data.features\n : [];\n\n return records.map((r) => {\n let bounds = null;\n if (r.bbox) {\n bounds = [\n [parseFloat(r.bbox[1]), parseFloat(r.bbox[0])], // s, w\n [parseFloat(r.bbox[3]), parseFloat(r.bbox[2])], // n, e\n ] as BoundsTuple;\n }\n\n return {\n x: Number(r.center[0]),\n y: Number(r.center[1]),\n label: r.place_name ? r.place_name : r.text,\n bounds,\n raw: r,\n };\n });\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n ProviderOptions,\n SearchResult,\n RequestType,\n} from './provider';\n\nexport interface RequestResult {\n features: RawResult[];\n type: string;\n version: string;\n attribution: string;\n licence: string;\n query: string;\n limit: string;\n}\n\nexport interface RawResult {\n properties: {\n label: string;\n score: number;\n importance: number;\n x: number;\n y: number;\n housenumber: string;\n id: string;\n type: string;\n name: string;\n postcode: string;\n citycode: string;\n city: string;\n context: string;\n street: string;\n };\n type: string;\n geometry: {\n coordinates: number[];\n type: string;\n };\n}\n\nexport type GeoApiFrProviderOptions = {\n searchUrl?: string;\n reverseUrl?: string;\n} & ProviderOptions;\n\nexport default class GeoApiFrProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl: string;\n reverseUrl: string;\n\n constructor(options: GeoApiFrProviderOptions = {}) {\n super(options);\n\n const host = 'https://api-adresse.data.gouv.fr';\n this.searchUrl = options.searchUrl || `${host}/search`;\n this.reverseUrl = options.reverseUrl || `${host}/reverse`;\n }\n\n endpoint({ query, type }: EndpointArgument) {\n const params = typeof query === 'string' ? { q: query } : query;\n\n switch (type) {\n case RequestType.REVERSE:\n return this.getUrl(this.reverseUrl, params);\n\n default:\n return this.getUrl(this.searchUrl, params);\n }\n }\n\n parse(result: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n return result.data.features.map((r) => ({\n x: r.geometry.coordinates[0],\n y: r.geometry.coordinates[1],\n label: r.properties.label,\n bounds: null,\n raw: r,\n }));\n }\n}\n","import AbstractProvider, {\n EndpointArgument,\n ParseArgument,\n ProviderOptions,\n RequestType,\n SearchResult,\n} from './provider';\n\nexport type RequestResult = {\n results: RawResult[];\n query: RawQuery[];\n};\n\nexport interface RawResult {\n country: string;\n country_code: string;\n state: string;\n county: string;\n city: string;\n postcode: number;\n suburb: string;\n street: string;\n lon: string;\n lat: string;\n state_code: string;\n formatted: string;\n bbox: BBox;\n}\n\nexport interface RawQuery {\n text: string;\n parsed: RawQueryParsed;\n}\n\nexport type RawQueryParsed = {\n city: string;\n expected_type: string;\n};\n\nexport type BBox = {\n lon1: string;\n lat1: string;\n lon2: string;\n lat2: string;\n};\n\nexport type GeoapifyProviderOptions = {\n searchUrl?: string;\n reverseUrl?: string;\n} & ProviderOptions;\n\nexport default class GeoapifyProvider extends AbstractProvider<\n RequestResult,\n RawResult\n> {\n searchUrl: string;\n reverseUrl: string;\n\n constructor(options: GeoapifyProviderOptions = {}) {\n super(options);\n\n const host = 'https://api.geoapify.com/v1/geocode';\n this.searchUrl = options.searchUrl || `${host}/search`;\n this.reverseUrl = options.reverseUrl || `${host}/reverse`;\n }\n\n endpoint({ query, type }: EndpointArgument): string {\n const params = typeof query === 'string' ? { text: query } : query;\n params.format = 'json';\n\n switch (type) {\n case RequestType.REVERSE:\n return this.getUrl(this.reverseUrl, params);\n\n default:\n return this.getUrl(this.searchUrl, params);\n }\n }\n\n parse(response: ParseArgument<RequestResult>): SearchResult<RawResult>[] {\n const records = Array.isArray(response.data.results)\n ? response.data.results\n : [response.data.results];\n return records.map((r) => ({\n x: Number(r.lon),\n y: Number(r.lat),\n label: r.formatted,\n bounds: [\n [parseFloat(r.bbox.lat1), parseFloat(r.bbox.lon1)], // s, w\n [parseFloat(r.bbox.lat2), parseFloat(r.bbox.lon2)], // n, e\n ],\n raw: r,\n }));\n }\n}\n"],"names":["element","className","parent","attributes","document","createElement","el","Object","keys","forEach","key","type","indexOf","substr","toLowerCase","addEventListener","innerHTML","innerText","setAttribute","appendChild","stopPropagation","event","preventDefault","filter","Boolean","join","trim","classList","Array","isArray","name","contains","add","removeClassName","remove","ARROW_DOWN_KEY","ARROW_UP_KEY","SPECIAL_KEYS","ENTER_KEY","SearchElement","_ref","_this","this","handleSubmit","searchLabel","_ref$classNames","classNames","container","form","input","hasError","cx","autocomplete","onClick","onDblClick","touchStart","touchEnd","placeholder","onInput","onKeyUp","e","onKeyPress","onFocus","onBlur","focus","dispatchEvent","addClassName","onSubmit","_this3","query","value","keyCode","body","blur","setQuery","ResultList","handleClick","notFoundMessage","selected","results","resultItem","target","hasAttribute","Number","getAttribute","result","idx","notfound","undefined","html","resultlist","item","render","resultFormat","_this2","clear","child","cloneNode","length","parentElement","select","index","from","children","count","lastChild","removeChild","defaultOptions","position","style","showMarker","showPopup","popupFormat","label","_ref2","marker","icon","L","Icon","Default","draggable","maxMarkers","maxSuggestions","retainZoomLevel","animateZoom","clearSearchLabel","messageHideDelay","zoomLevel","button","resetButton","msgbox","autoComplete","autoCompleteDelay","autoClose","keepResult","updateMap","UNINITIALIZED_ERR","options","initialize","cb","wait","immediate","timeout","provider","Error","_extends","markers","FeatureGroup","searchElement","title","href","DomEvent","disableClickPropagation","text","close","clearResults","resultList","data","autoSearch","args","slice","call","arguments","clearTimeout","setTimeout","apply","selectResult","onAdd","map","_this$options","addTo","getContainer","querySelector","root","onRemove","_this$container","open","_this$searchElement","max","next","_item","force","_this$options2","clearLayers","Promise","resolve","_temp2","search","then","_this5","showResult","_this$options3","getLayers","removeLayer","addMarker","centerMap","fireEvent","location","closeResults","_this$options4","Marker","y","x","popupLabel","bindPopup","addLayer","openPopup","on","_this6","getLatLng","_this$options5","resultBounds","bounds","LatLngBounds","LatLng","toBounds","isValid","getBounds","setView","getCenter","getZoom","animate","fitBounds","_this$options6","SearchControl","LControl","Control","extend","RequestType","AbstractProvider","getParamString","params","set","encodeURIComponent","getUrl","url","endpoint","SEARCH","fetch","request","json","parse","findBestMatchLevelIndex","vms","find","vm","matchLevel","match","getLabel","_result$locale_names","_result$city","_result$postcode","_result$country","locale_names","_highlightResult","city","administrative","postcode","country","response","hits","r","_geoloc","lng","lat","raw","method","JSON","stringify","searchUrl","q","jsonp","resourceSets","resources","point","coordinates","address","formattedAddress","bbox","script","Date","now","createScriptElement","window","EsriProvider","f","locations","feature","geometry","extent","ymin","xmin","ymax","xmax","PeliasProvider","_AbstractProvider","host","_inheritsLoose","REVERSE","reverseParams","features","res","properties","_PeliasProvider","getDefaultExportFromCjs","__esModule","prototype","hasOwnProperty","SuppressedError","LoaderStatus","isEqual","equal","a","b","constructor","i","RegExp","source","flags","valueOf","toString","Loader","apiKey","authReferrerPolicy","channel","client","id","language","libraries","mapIds","nonce","region","retries","version","callbacks","done","loading","errors","instance","status","FAILURE","SUCCESS","LOADING","INITIALIZED","failed","createUrl","deleteScript","getElementById","load","loadPromise","reject","loadCallback","err","error","google","importLibrary","execute","maps","fn","push","setScript","_a","_b","callback","v","g","h","k","p","c","l","m","d","Set","URLSearchParams","u","n","__awaiter","thisArg","generator","replace","t","src","onerror","head","append","P","fulfilled","step","rejected","console","warn","libraryPromises","library","all","ErrorEvent","loadErrorCallback","reset","onerrorEvent","resetIfRetryingFailed","delay","Math","pow","GoogleProvider","loader","geocoder","Geocoder","toJSON","_r$geometry$location$","_r$geometry$viewport$","viewport","formatted_address","south","west","north","east","geocode","code","message","_this2$geocoder2","southwest","northeast","items","reverseUrl","format","lon","display_name","parseFloat","boundingbox","OpenStreetMapProvider","formatted","center","place_name","lat1","lon1","lat2","lon2"],"mappings":"64BAAM,WACJA,EACAC,EACAC,EACAC,QAAmE,IAFnEF,IAAAA,EAA2B,SAE3BE,IAAAA,IAAAA,EAAiE,CAAE,GAEnE,MAAWC,SAASC,cAAcL,GA0BlC,OAxBIC,IACFK,EAAGL,UAAYA,GAGjBM,OAAOC,KAAKL,GAAYM,QAAQ,SAACC,GAC/B,GAA+B,qBAATA,GAAqB,CAEzC,IAAMC,EACkB,IAAtBD,EAAIE,QAAQ,MAAcF,EAAIG,OAAO,GAAGC,cAAgBJ,EAE1DJ,EAAGS,iBAAiBJ,EAAMR,EAAWO,GACtC,KAAkB,SAARA,EACTJ,EAAGU,UAAYb,EAAWO,GACT,SAARA,EACTJ,EAAGW,UAAYd,EAAWO,GAE1BJ,EAAGY,aAAaR,EAAKP,EAAWO,GAEnC,GAEGR,GACFA,EAAOiB,YAAYb,IAItB,UAEKc,EAA0BC,GAC9BA,EAAMC,iBACND,EAAMD,iBACP,CAoBM,MAAW,WAAA,MAChB,GAAWG,MAAAA,KAAAA,WAAAA,OAAOC,SAASC,KAAK,KAAKC,MADrB,EAGF,WACd1B,EACAC,GAEKD,GAAYA,EAAQ2B,YAKNC,MAAMC,QAAQ5B,GAAaA,EAAY,CAACA,IAChDQ,QAAQ,SAACqB,GACb9B,EAAQ2B,UAAUI,SAASD,IAC9B9B,EAAQ2B,UAAUK,IAAIF,EAEzB,EACF,CAEeG,SAAAA,EACdjC,EACAC,GAEKD,GAAYA,EAAQ2B,YAKNC,MAAMC,QAAQ5B,GAAaA,EAAY,CAACA,IAChDQ,QAAQ,SAACqB,GACd9B,EAAQ2B,UAAUI,SAASD,IAC7B9B,EAAQ2B,UAAUO,OAAOJ,EAE5B,EACF,CC7FM,QAAkB,GAEZK,EAAiB,GACLC,EAAG,GAIHC,EAAG,CAC1BC,EAPwB,GASxBH,EACAC,EAP4B,GACC,ICgBVG,0BAOnB,SAIqBA,EAAAC,GAAA,IAAAC,EAAAC,OAHnBC,EAAAA,aACAC,EAEmBJ,EAFnBI,YAEmBC,EAAAL,EADnBM,WAAAA,OAAa,IAAAD,EAAA,CACM,SAVrBE,eAUqB,EAAAL,KATrBM,UACAC,EAAAA,KAAAA,WACAN,EAAAA,KAAAA,kBACAO,EAAAA,KAAAA,UAAW,EAOTR,KAAKK,UAAY1C,EACf,MACA8C,EAAG,YAAaL,EAAWC,YAG7BL,KAAKM,KAAO3C,EACV,OACA,CAAC,GAAIyC,EAAWE,MAAMvB,KAAK,KAC3BiB,KAAKK,UACL,CACEK,aAAc,OACdC,QAASjC,EACTkC,WAAYlC,EACZmC,WAAYnC,EACZoC,SAAUpC,IAIdsB,KAAKO,MAAQ5C,EACX,QACA,CAAC,QAASyC,EAAWG,OAAOxB,KAAK,KACjCiB,KAAKM,KACL,CACErC,KAAM,OACN8C,YAAab,GAAe,SAC5Bc,QAAShB,KAAKgB,QACdC,QAAS,SAACC,GAAD,SAAYD,QAAQC,EAApB,EACTC,WAAY,SAACD,UAAUnB,EAACoB,WAAWD,EAAvB,EACZE,QAASpB,KAAKoB,QACdC,OAAQrB,KAAKqB,OAMbV,QAAS,WACPZ,EAAKQ,MAAMe,QACXvB,EAAKQ,MAAMgB,cAAc,UAAU,SACpC,IAILvB,KAAKC,aAAeA,CACrB,4BAEDmB,QAAA,WACEI,EAAaxB,KAAKM,KAAM,SACzB,IAEDe,OAAA,WACE9B,EAAgBS,KAAKM,KAAM,SAC5B,IAEKmB,SAAS9C,SAAAA,GAAY,IAAA,IAAA+C,EAER1B,KAFQ,OACzBtB,EAAgBC,GFalBY,EAJAjC,EERmBoE,EAAKrB,UAAW,SFanCmB,EAAalE,EEb+B,2BAEpCoE,EAAKzB,aAAa,CAAE0B,MAAOD,EAAKnB,MAAMqB,yBAC5CrC,EAAgBmC,EAAKrB,UAAW,UALP,yCFU3B/C,KEFA0D,QAAA,WACOhB,KAAKQ,WAIVjB,EAAgBS,KAAKK,UAAW,SAChCL,KAAKQ,UAAW,EACjB,EAEDS,EAAAA,QAAA,SAAQtC,GDtGgB,KCuGlBA,EAAMkD,UAIVtC,EAAgBS,KAAKK,UAAW,CAAC,UAAW,WAE5CL,KAAKO,MAAMqB,MAAQ,GAEnBlE,SAASoE,KAAKR,QACd5D,SAASoE,KAAKC,OACf,IAEDZ,WAAA,SAAWxC,GACLA,EAAMkD,UAAYjC,GAItBI,KAAKyB,SAAS9C,EACf,EAEDqD,EAAAA,SAAA,SAASL,GACP3B,KAAKO,MAAMqB,MAAQD,CACpB,OCjHkBM,0BASnB,SAIkBA,EAAAnC,GAAA,IAAAC,EAAAC,KAAAkC,EAAApC,EAHhBoC,YAGgB/B,EAAAL,EAFhBM,WAAAA,OAAa,IAAAD,EAAA,CAEG,EADhBgC,EAAAA,IAAAA,gBACgBnC,KAZlBkC,iBAYkB,EAAAlC,KAXlBoC,UAAY,EAWMpC,KAVlBqC,QAA0B,GAURrC,KARlBK,eACAiC,EAAAA,KAAAA,gBACAH,EAAAA,KAAAA,qBA6EAxB,EAAAA,KAAAA,QAAU,SAAChC,GACT,GAAgC,qBAAhBuD,YAAhB,CAIA,IAAYK,EAAG5D,EAAM4D,OACrB,GACGA,GACAxC,EAAKM,UAAUhB,SAASkD,IACxBA,EAAOC,aAAa,YAHvB,CAQA,MAAYC,OAAOF,EAAOG,aAAa,aACvC3C,EAAKmC,YAAY,CAAES,OAAQ5C,EAAKsC,QAAQO,IAHvC,CATA,CAaF,EAtFC5C,KAAKkC,YAAcA,EACnBlC,KAAKmC,gBAAoBA,EACrBxE,EACE,MACA8C,EAAGL,EAAWyC,eACdC,EACA,CAAEC,KAAMZ,SAEVW,EAEJ9C,KAAKK,UAAY1C,EACf,MACA8C,EAAG,UAAWL,EAAW4C,aAE3BhD,KAAKK,UAAUhC,iBAAiB,QAAS2B,KAAKW,SAAS,GAEvDX,KAAKsC,WAAa3E,EAA8B,MAAO8C,EAAGL,EAAW6C,MACtE,KAEDC,EAAAA,EAAAA,iBAAAA,EAAAA,OAAA,SACEb,EACAc,GAAwD,IAAAC,EAAApD,UAAA,IADxDqC,IAAAA,EAA0B,IAG1BrC,KAAKqD,QAELhB,EAAQtE,QAAQ,SAAC4E,EAAQC,GACvB,IAAWU,EAAGF,EAAKd,WAAWiB,WAAU,GACxCD,EAAM9E,aAAa,WAAeoE,GAAAA,GAClCU,EAAMhF,UAAY6E,EAAa,CAAER,OAAAA,IACjCS,EAAK/C,UAAU5B,YAAY6E,EAC5B,GAEGjB,EAAQmB,OAAS,GACnBhC,EAAaxB,KAAKK,UAAUoD,cAAe,QAC3CjC,EAAaxB,KAAKK,UAAW,WAClBL,KAAKmC,kBAChBnC,KAAKK,UAAU5B,YAAYuB,KAAKmC,iBAChCX,EAAaxB,KAAKK,UAAUoD,cAAe,SAG7CzD,KAAKqC,QAAUA,CAChB,EAEDqB,EAAAA,OAAA,SAAOC,GASL,OAPAzE,MAAM0E,KAAK5D,KAAKK,UAAUwD,UAAU9F,QAAQ,SAACuF,EAAOV,GAAR,OACvCA,IAAKe,EACJnC,EAAa8B,EAAO,UACpB/D,EAAgB+D,EAAO,SAHe,GAM5CtD,KAAKoC,SAAWuB,OACJtB,QAAQsB,EACrB,IAEDG,MAAA,WACE,OAAO9D,KAAKqC,QAAUrC,KAAKqC,QAAQmB,OAAS,CAC7C,IAEDH,MAAA,WAGE,IAFArD,KAAKoC,UAAY,EAEVpC,KAAKK,UAAU0D,WACpB/D,KAAKK,UAAU2D,YAAYhE,KAAKK,UAAU0D,WAG5CxE,EAAgBS,KAAKK,UAAUoD,cAAe,QAC9ClE,EAAgBS,KAAKK,UAAW,SACjC,OCzEiB4D,EAAyC,CAC3DC,SAAU,UACVC,MAAO,SACPC,YAAY,EACZC,WAAW,EACXC,YAAa,SAAAxE,GAAmB6C,MAAAA,GAAhBA,EAAAA,OAAuB4B,KAA1B,EACbpB,aAAc,SAAAqB,GAAmB7B,MAAAA,GAAnB6B,EAAG7B,OAAuB4B,KAA1B,EACdE,OAAQ,CACNC,KAAMC,GAAKA,EAAEC,KAAO,IAAID,EAAEC,KAAKC,aAAY/B,EAC3CgC,WAAW,GAEbC,WAAY,EACZC,eAAgB,EAChBC,iBAAiB,EACjBC,aAAa,EACbhF,YAAa,gBACbiF,iBAAkB,eAClBhD,gBAAiB,GACjBiD,iBAAkB,IAClBC,UAAW,GACXjF,WAAY,CACVC,UAAW,wDACXiF,OAAQ,2CACRC,YAAa,QACbC,OAAQ,sBACRlF,KAAM,GACNC,MAAO,GACPyC,WAAY,GACZC,KAAM,GACNJ,SAAU,wBAEZ4C,cAAc,EACdC,kBAAmB,IACnBC,WAAW,EACXC,YAAY,EACZC,WAAW,GAGPC,EACJ,sEA+F6B,CAC7BC,QAAc9B,EAAAA,CAAAA,EAAAA,GACd7D,WAAiB6D,EAAAA,CAAAA,EAAAA,EAAe7D,YAEhC4F,WAAWD,SAAAA,GAA6B,IC9JxCE,EACAC,EACAC,EAEAC,ED0JwCrG,EAAAC,KACtC,IAAK2E,EACH,MAAM,UAAUmB,GAGlB,IAAKC,EAAQM,SACX,UAAMC,MAAU,oCAIlBtG,KAAK+F,QAAe9B,EAAAA,CAAAA,EAAAA,EAAmB8B,GACvC/F,KAAKI,WAAkBmG,EAAA,CAAA,EAAAvG,KAAKI,WAAe2F,EAAQ3F,YAEnDJ,KAAKwG,QAAU,MAAMC,aACrBzG,KAAKI,WAAWC,WAAmC,sBAAAL,KAAK+F,QAAQ5B,MAEhEnE,KAAK0G,cAAgB,IAAA7G,EAAkB,CACrCK,YAAaF,KAAK+F,QAAQ7F,YAC1BE,WAAY,CACVC,UAAWL,KAAKI,WAAWC,UAC3BC,KAAMN,KAAKI,WAAWE,KACtBC,MAAOP,KAAKI,WAAWG,OAEzBN,aAAc,SAAC0C,GAAW,OAAA5C,EAAK0B,SAASkB,EAA1B,IAGhB3C,KAAKsF,OAAS3H,EACZ,IACAqC,KAAKI,WAAWkF,OAChBtF,KAAK0G,cAAcrG,UACnB,CACEsG,MAAO3G,KAAK+F,QAAQ7F,YACpB0G,KAAM,IACNjG,QAAS,SAACO,UAAUnB,EAACY,QAAQO,EAApB,IAIbyD,EAAEkC,SAASC,wBAAwB9G,KAAKsF,QAExCtF,KAAKuF,YAAc5H,EACjB,SACAqC,KAAKI,WAAWmF,YAChBvF,KAAK0G,cAAcpG,KACnB,CACEyG,KAAM,IACN,aAAc/G,KAAK+F,QAAQZ,iBAC3BxE,QAAS,WACgC,KAAnCZ,EAAK2G,cAAcnG,MAAMqB,MAC3B7B,EAAKiH,QAELjH,EAAKkH,aAAa,MAAM,EAE3B,IAILtC,EAAEkC,SAASC,wBAAwB9G,KAAKuF,aAEpCvF,KAAK+F,QAAQN,eACfzF,KAAKkH,WAAa,IAAAjF,EAAe,CAC/BC,YAAa,YAAGS,IAAAA,EAAAA,EAAAA,OACd5C,EAAK2G,cAAcnG,MAAMqB,MAAQe,EAAO4B,MACxCxE,EAAK0B,SAAS,CAAEE,MAAOgB,EAAO4B,MAAO4C,KAAMxE,GAC5C,EACDvC,WAAY,CACV4C,WAAYhD,KAAKI,WAAW4C,WAC5BC,KAAMjD,KAAKI,WAAW6C,KACtBJ,SAAU7C,KAAKI,WAAWyC,UAE5BV,gBAAiBnC,KAAK+F,QAAQ5D,kBAGhCnC,KAAK0G,cAAcpG,KAAK7B,YAAYuB,KAAKkH,WAAW7G,WAEpDL,KAAK0G,cAAcnG,MAAMlC,iBACvB,SCzON4H,ED2OQ,SAAC/E,UAAyBnB,EAACqH,WAAWlG,EAAtC,OC1ORgF,KAAAA,ED2OQlG,KAAK+F,QAAQL,qBC3OrBQ,EAAO,UACU,IAAjBC,IAAAA,GAAY,GAIoB,WAAA,IAAAkB,EAAA,GAAAC,MAAAC,KAAAC,WAC1BpB,GACFqB,aAAarB,GAGfA,EAAUsB,WAAW,WACnBtB,EAAU,KAELD,GACHF,EAAE0B,aAAIN,EAET,EAAEnB,GAECC,IAAcC,GAChBH,EAAE0B,aAAIN,EAET,IDwNK,GAGFrH,KAAK0G,cAAcnG,MAAMlC,iBACvB,UACA,SAAC6C,GAAqB,OAAAnB,EAAK6H,aAAa1G,EAAxC,GACA,GAGFlB,KAAK0G,cAAcnG,MAAMlC,iBACvB,UACA,SAAC6C,GAAqB,OAAAnB,EAAKkH,aAAa/F,GAAG,EAA3C,GACA,IAIJlB,KAAK0G,cAAcpG,KAAKjC,iBACtB,QACA,SAAC6C,GACCA,EAAEtC,gBACH,GACD,EAEH,EAEDiJ,eAAMC,GACJ,IAA8BC,EAAA/H,KAAK+F,QAA3B3B,EAAAA,EAAAA,WAAYD,IAAAA,MAOpB,GALAnE,KAAK8H,IAAMA,EACP1D,GACFpE,KAAKwG,QAAQwB,MAAMF,GAGP,QAAV3D,EAAiB,CACnB,MAAa2D,EACVG,eACAC,cAAc,8BAEjBlI,KAAKK,UAAY1C,EACf,MACA,mDAGFqC,KAAKK,UAAU5B,YAAYuB,KAAK0G,cAAcpG,MAC9C6H,EAAM1J,YAAYuB,KAAKK,UACxB,CAGD,OADAsE,EAAEkC,SAASC,wBAAwB9G,KAAK0G,cAAcpG,MAC/CN,KAAK0G,cAAcrG,SAC3B,EAED+H,SAvI6B,WAwI3B,IAAAC,EACA,OADgB7I,OAAhB6I,EAAArI,KAAKK,YAAWb,EAAAA,SAEjBQ,IAAA,EAEDsI,KA5I6B,WA6I3B,IAA6BC,EAAAvI,KAAK0G,cAAfnG,IAAAA,MACnBiB,EADQnB,EAAAA,UACgB,UACxBE,EAAMe,OACP,EAED0F,iBAEEzH,EADsBS,KAAK0G,cAAnBrG,UACmB,UAC3BL,KAAKiH,cACN,EAEDtG,QAxJ6B,SAwJrBhC,GACNA,EAAMC,iBACND,EAAMD,kBAEgBsB,KAAK0G,cAAnBrG,UAEMpB,UAAUI,SAAS,UAC/BW,KAAKgH,QAELhH,KAAKsI,MAER,EAEDV,aArK6B,SAqKhBjJ,GACX,IACwE,IAAtE,CAACiB,EAAWH,EAAgBC,GAAcxB,QAAQS,EAAMkD,SAO1D,GAFAlD,EAAMC,iBAEFD,EAAMkD,UAAYjC,EAAtB,CAMA,IAAM4I,EAAMxI,KAAKkH,WAAWpD,QAAU,EACtC,KAAI0E,EAAM,GAAV,CAIA,IAAApG,EAAqBpC,KAAKkH,WAAlB9E,SACEqG,EAAG9J,EAAMkD,UAAYpC,EAAiB2C,EAAW,EAAIA,EAAW,EAGhEa,EAAGjD,KAAKkH,WAAWxD,OAFjB+E,EAAO,EAAID,EAAMC,EAAOD,EAAM,EAAIC,GAG9CzI,KAAK0G,cAAcnG,MAAMqB,MAAQqB,EAAKsB,KAPrC,CALA,KAJD,CACE,IAAUmE,EAAG1I,KAAKkH,WAAWxD,OAAO1D,KAAKkH,WAAW9E,UACpDpC,KAAKyB,SAAS,CAAEE,MAAO3B,KAAK0G,cAAcnG,MAAMqB,MAAOuF,KAAMlE,GAE9D,CAaF,EAEDgE,aAAatI,SAAAA,EAA6BgK,GACxC,QADwCA,IAAAA,IAAAA,GAAQ,IAC5ChK,GH7VkB,KG6VTA,EAAMkD,QAAnB,CAIA,IAAqC+G,EAAA5I,KAAK+F,QAAtBN,IAAAA,cAEhBkD,GAFI/C,EAAAA,aAGN5F,KAAK0G,cAAcnG,MAAMqB,MAAQ,GACjC5B,KAAKwG,QAAQqC,eAGXpD,GACFzF,KAAKkH,WAAW7D,OAVjB,CAYF,EAEK+D,WAlNuB,SAkNZzI,GAlNY,UAwNNqB,KALrB,GAAIL,EAAazB,QAAQS,EAAMkD,UAAY,EACzC,OACDiH,QAAAC,UAED,IAAMpH,EAAShD,EAAM4D,OAA4BX,MACjDyE,EAAqB3E,EAAKqE,QAAlBM,SANY2C,EAAA,WAAA,GAQhBrH,EAAM6B,OARU,OAAAsF,QAAAC,QASE1C,EAAU4C,OAAO,CAAEtH,MAAAA,KAAnCU,KAAAA,SAAAA,GACJA,EAAUA,EAAQiF,MAAM,EAAG5F,EAAKqE,QAAQf,gBACxCtD,EAAKwF,WAAWhE,OAAOb,EAASX,EAAKqE,QAAQ5C,aAX3B,GAalBzB,EAAKwF,WAAW7D,OAEnB,CAfqB,GAerB,OAAAyF,QAAAC,QAAAC,GAAAA,EAAAE,KAAAF,EAAAE,KAAA,WAAA,QAAA,GAjO4B,oCAmOvBzH,SAnOuB,SAmOdE,GAnOc,IAoO3B,IAAAwH,EAAAnJ,KADkB,OAClBmJ,EAAKjC,WAAW7D,wBACK8F,EAAKpD,QAAlBM,SAEwB4C,OAAOtH,IAAjCU,KAAAA,SAAAA,GAEFA,GAAWA,EAAQmB,OAAS,GAC9B2F,EAAKC,WAAW/G,EAAQ,GAAIV,EAE/B,GA5O4B,oCA8O7ByH,WA9O6B,SA8OlBzG,EAAQhB,GACjB,IAAiC0H,EAAArJ,KAAK+F,QAA9BJ,EAAAA,EAAAA,UAAWE,IAAAA,UAEbW,EAAUxG,KAAKwG,QAAQ8C,YACzB9C,EAAQhD,QAAUxD,KAAK+F,QAAQhB,YACjC/E,KAAKwG,QAAQ+C,YAAY/C,EAAQ,IAGnC,MAAexG,KAAKwJ,UAAU7G,EAAQhB,GAElCkE,GACF7F,KAAKyJ,UAAU9G,GAGjB3C,KAAK8H,IAAI4B,UAAU,yBAA0B,CAC3CC,SAAUhH,EACV8B,OAAAA,IAGEkB,GACF3F,KAAK4J,cAER,EAEDA,aAAY,WACV,IAAQvJ,EAAcL,KAAK0G,cAAnBrG,UAEJA,EAAUpB,UAAUI,SAAS,WAC/BE,EAAgBc,EAAW,UAG7BL,KAAKiH,cACN,EAEDuC,UAAU7G,SAAAA,EAAQhB,cACoCkI,EAAA7J,KAAK+F,QAAzCA,EAAhB8D,EAAQpF,OAAiBJ,EAAAA,EAAAA,UAAWC,IAAAA,YAC9BG,EAAS,MAAMqF,OAAO,CAACnH,EAAOoH,EAAGpH,EAAOqH,GAAIjE,GACpCkE,EAAGtH,EAAO4B,MAuBxB,MArB2B,mBAAhBD,IACT2F,EAAa3F,EAAY,CAAE3C,MAAAA,EAAOgB,OAAAA,KAGpC8B,EAAOyF,UAAUD,GAEjBjK,KAAKwG,QAAQ2D,SAAS1F,GAElBJ,GACFI,EAAO2F,YAGLrE,EAAQjB,WACVL,EAAO4F,GAAG,UAAW,SAAChD,GACpBiD,EAAKxC,IAAI4B,UAAU,2BAA4B,CAC7CC,SAAUlF,EAAO8F,YACjB5L,MAAO0I,GAEV,IAIJ,EAEDoC,UAAU9G,SAAAA,GACR,IAAA6H,EAAyCxK,KAAK+F,QAAtCd,IAAAA,gBAAiBC,EAAzBsF,EAAyBtF,YAEPuF,EAAG9H,EAAO+H,OACxB,IAAK/F,EAACgG,aAAahI,EAAO+H,QAC1B,IAAK/F,EAACiG,OAAOjI,EAAOoH,EAAGpH,EAAOqH,GAAGa,SAAS,IAExCH,EAASD,EAAaK,UACxBL,EACAzK,KAAKwG,QAAQuE,aAEZ9F,GAAmBwF,EAAaK,YAAcnI,EAAO+H,QAI9CzF,IAAmBwF,EAAaK,UAH1C9K,KAAK8H,IAAIkD,QAAQN,EAAOO,YAAajL,KAAKkL,UAAW,CACnDC,QAASjG,IAGXlF,KAAK8H,IAAIsD,UAAUV,EAAQ,CAAES,QAASjG,GAMzC,EAEDgG,QArU6B,WAsU3B,IAAAG,EAAuCrL,KAAK+F,QAAnBV,IAAAA,UACzB,OADAgG,EAAQpG,gBACiBjF,KAAK8H,IAAIoD,UAAY7F,CAC/C,GAGqBiG,SAAAA,IACtB,IAAK3G,EACH,MAAM,UAAUmB,GAGlB,IAAMyF,EAAW5G,EAAE6G,QAAQC,OAAOD,GAClC,OAAWD,EAAAA,EACZ,GAAAjE,MAAAC,KAAAC,WAAA,EEtdD,SAAYkE,GACVA,EAAAA,EAAA,OAAA,GAAA,SACAA,EAAAA,EAAA,QAAA,GAAA,SAFF,CAAA,CAAYA,IAAAA,EAGX,CAHsB,IA2BOC,8BAO5B,WAAY5F,QAA6B,IAA7BA,IAAAA,EAA2B,CAAA,QAFvCA,aAEyC,EACvC/F,KAAK+F,QAAUA,CAChB,4BAOD6F,eAAA,SAAeC,QAAAA,IAAAA,IAAAA,EAAyB,CAAE,GACxC,IAASC,EAAAvF,EAAA,CAAA,EAAQvG,KAAK+F,QAAQ8F,OAAWA,GACzC,cAAc/N,KAAKgO,GAChBhE,IACC,SAAC9J,UAA6B+N,mBAAC/N,GAA/B,IAAuC+N,mBAAmBD,EAAI9N,GAA9D,GAEDe,KAAK,IACT,IAEDiN,OAAA,SAAOC,EAAaJ,GAClB,SAAiB,IAAA7L,KAAK4L,eAAeC,EACtC,IAEK5C,OAAOlD,SAAAA,OACC,IAAA3C,EAAApD,KAANiM,EAAM7I,EAAK8I,SAAS,CACxBvK,MAAOoE,EAAQpE,MACf1D,KAAMyN,EAAYS,SAHc,OAMZC,QAAAA,QAAAA,MAAMH,kBAAtBI,GAN4B,OAAAvD,QAAAC,QAOCsD,EAAQC,QAArCA,KAAAA,SAAAA,GACN,OAAOlJ,EAAKmJ,MAAM,CAAEpF,KAAMmF,GARQ,EAAA,kJCpBAX,SAIpCO,SAAA,WAEE,MAAO,+CACR,EAMDM,EAAAA,wBAAA,SAAwBC,GACtB,MACEA,EAAIC,KAAK,SAACC,GAAD,MAA0B,WAAfC,UAAX,IACTH,EAAIC,KAAK,SAACC,GAAD,MAA0B,YAAhBA,EAACC,UAAX,GACX,OAAYC,EAAGJ,EAAIvO,QAAQ2O,GAAS,CACrC,IAMDC,SAAA,SAASnK,GACP,IAAAoK,EAAAC,EAAAC,EAAAC,EAAA,MAAO,QAELvK,EAAAA,EAAOwK,qBAAPJ,EACE,QAAA/M,KAAKwM,wBACH7J,EAAOyK,iBAAiBD,aAD1B,UAHG,OAAAH,EAQLrK,EAAO0K,WARF,EAQLL,UACEhN,KAAKwM,wBAAwB7J,EAAOyK,iBAAiBC,eAGvD1K,EAAO2K,eACLtN,KAAKwM,wBAAwB7J,EAAOyK,iBAAiBE,iBAblD,SAgBL3K,EAAO4K,eAhBF,EAgBLN,EACEjN,KAAKwM,wBAAwB7J,EAAOyK,iBAAiBG,WAGvD,OApBKL,EAoBLvK,EAAO6K,cAAP,EAAAN,EAAA,SAECrO,OAAOC,SACPC,KAAK,KACT,IAEDwN,MAAA,SAAMkB,GACJ,IAAA1N,EAAAC,KAAA,OAAeyN,EAACtG,KAAKuG,KAAK5F,IAAI,SAAC6F,GAAD,MAAQ,CACpC3D,EAAG2D,EAAEC,QAAQC,IACb9D,EAAG4D,EAAEC,QAAQE,IACbvJ,MAAOxE,EAAK+M,SAASa,GACrBjD,OAAQ,KACRqD,IAAKJ,EALuB,EAO/B,EAEK1E,EAAAA,OAAStH,SAAAA,GAAAA,IAAAA,IAAAA,UAGe,IAAAD,EAAA1B,KAFhB6L,EAAoB,iBAAjBlK,EAA4B,CAAEA,MAAAA,GAAUA,EADnB,OAAAmH,QAAAC,QAGdqD,MAAM1K,EAAKwK,WAAY,CAC3C8B,OAAQ,OACRlM,KAAMmM,KAAKC,UACN3H,EAAA,GAAA7E,EAAKqE,QAAQ8F,OACbA,OAP6B3C,KAAA,SAG9BmD,GAH8B,OAAAvD,QAAAC,QAWjBsD,EAAQC,QAXSpD,KAAA,SAW9BoD,GACN,OAAO5K,EAAK6K,MAAM,CAAEpF,KAAMmF,GAZU,EAarC,EA1EmCX,OAAAA,GAAAA,OAAAA,QAAAA,OAAAA,EAAAA,CAAAA,EAAAA,CAAAA,EAAAA,qHCRpCO,iDAFAiC,UAAY,iDAEZjC,CAAAA,QAAAA,IAAAA,EAAAA,EAAAA,iBAAAA,EAAAA,SAAA,SAAApM,OAA+D6B,EAAA7B,EAApD6B,MACGkK,EAAoB,iBAAVlK,EAAqB,CAAEyM,EAAGzM,GAAUA,EAG1D,OAFAkK,EAAOwC,MAFsDvO,EAA7CuO,MAIJrC,KAAAA,OAAOhM,KAAKmO,UAAWtC,EACpC,EAEDU,EAAAA,MAAA,SAAMkB,GACJ,OAA0C,IAAtCA,EAAStG,KAAKmH,aAAa9K,OACtB,GAGFiK,EAAStG,KAAKmH,aAAa,GAAGC,UAAUzG,IAAI,SAAC6F,GAAD,MAAQ,CACzD3D,EAAG2D,EAAEa,MAAMC,YAAY,GACvB1E,EAAG4D,EAAEa,MAAMC,YAAY,GACvBlK,MAAOoJ,EAAEe,QAAQC,iBACjBjE,OAAQ,CACN,CAACiD,EAAEiB,KAAK,GAAIjB,EAAEiB,KAAK,IACnB,CAACjB,EAAEiB,KAAK,GAAIjB,EAAEiB,KAAK,KAErBb,IAAKJ,EAR4C,EAUpD,EAEK1E,EAAAA,OAAStH,SAAAA,GAAAA,IRnCfsK,EACAhG,EAEY4I,EQgCGlN,EAAAA,EAAAA,UAGX,IAAAD,EAAA1B,KAFSqO,EAAA,iBAAoBS,KAAKC,MADA,OAEjBC,QAAAA,SRrCrB/C,EQsCIvK,EAAKwK,SAAS,CAAEvK,MAAAA,EAAO0M,MAAAA,IRrC3BpI,EQsCIoI,ERpCQQ,EAAGlR,EAAc,SAAU,KAAMD,SAASoE,MACtD+M,EAAOrQ,aAAa,OAAQ,mBAErB,IAAAsK,QAAY,SAACC,GACjBkG,OAAehJ,GAAM,SAACqG,GACrBuC,EAAOrP,gBACeyP,OAAChJ,GACvB8C,EAAQuD,EACT,EAEDuC,EAAOrQ,aAAa,MAAOyN,EAC5B,KQqBqC/C,KAAA,SAE9BoD,GAKN,OAAO5K,EAAK6K,MAAM,CAAEpF,KAAMmF,GAPU,0CA9BEX,GCrBrBuD,eAInBf,SAAAA,GAAAA,SAAAA,IAAAA,IAAAA,IAAAA,EAAAA,EAAAA,UAAAA,OAAAA,EAAAA,IAAAA,MAAAA,GAAAA,EAAAA,EAAAA,EAAAA,EAAAA,IAAAA,EAAAA,GAAAA,UAAAA,GAGAjC,OAHAiC,EAAAA,EAAAA,KAAAA,MAAAA,EAAAA,CAAAA,MAAAA,OAAAA,KAAAA,MAAAA,UACE,2EAEFjC,CAAAA,CAHAiC,EAAAA,EAAAA,GAGAjC,IAAAA,EAAAA,EAAAA,UAPwCP,OAOxCO,EAAAA,SAAA,SAAoCpM,GAAA,IAAA6B,EAAA7B,EAAzB6B,MACHkK,EAA0B,iBAAVlK,EAAqB,CAAEoF,KAAMpF,GAAUA,EAG7D,OAFAkK,EAAOsD,EAAI,OAECnD,KAAAA,OAAOhM,KAAKmO,UAAWtC,EACpC,EAEDU,EAAAA,MAAA,SAAM5J,GACJ,OAAOA,EAAOwE,KAAKiI,UAAUtH,IAAI,SAAC6F,GAAO,MAAA,CACvC3D,EAAG2D,EAAE0B,QAAQC,SAAStF,EACtBD,EAAG4D,EAAE0B,QAAQC,SAASvF,EACtBxF,MAAOoJ,EAAEvO,KACTsL,OAAQ,CACN,CAACiD,EAAE4B,OAAOC,KAAM7B,EAAE4B,OAAOE,MACzB,CAAC9B,EAAE4B,OAAOG,KAAM/B,EAAE4B,OAAOI,OAE3B5B,IAAKJ,EAR0B,EAUlC,EAzBuChC,CAAAA,CAIxCwC,CAJwCxC,GCmErBiE,eAWnB,SAAAC,GAAA,SAAAD,EAAY7J,SAAmC,YAAA,IAAnCA,IAAAA,EAAiC,CAAA,IAC3ChG,EAAMgG,EAAAA,KAAAA,KAAAA,IADuC/F,MAF/C8P,UAE+C,EAE7C/P,EAAK+P,KAAO/J,EAAQ+J,MAAQ,wBAC7B/P,CAAA,CAHDgQ,EAAAH,EAAAC,OAYA3D,EAAAA,EAAAA,iBAAAA,EAAAA,SAAA,SAAApM,GAAW6B,IAAAA,IAAAA,MACT,OADwC7B,EAAxB7B,OAcEyN,EAACsE,QAEHhE,KAAAA,OAAUhM,KAAK8P,KAAmBG,cADP,iBAAVtO,EAAqB,CAA5B,EAAiCA,GAOhD3B,KAAKgM,OAAUhM,KAAK8P,wBADR,iBAAVnO,EAAqB,CAAEoF,KAAMpF,GAAUA,EAGrD,IAED4K,MAAA,SAAMkB,GACJ,OAAOA,EAAStG,KAAK+I,SAASpI,IAAI,SAACuH,GACjC,IAAMc,EAA+B,CACnCnG,EAAGqF,EAAQC,SAASb,YAAY,GAChC1E,EAAGsF,EAAQC,SAASb,YAAY,GAChClK,MAAO8K,EAAQe,WAAW7L,MAC1BmG,OAAQ,KACRqD,IAAKsB,GAYP,OAPInQ,MAAMC,QAAQkQ,EAAQT,OAAiC,IAAxBS,EAAQT,KAAKpL,SAC9C2M,EAAIzF,OAAS,CACX,CAAC2E,EAAQT,KAAK,GAAIS,EAAQT,KAAK,IAC/B,CAACS,EAAQT,KAAK,GAAIS,EAAQT,KAAK,MAI5BuB,CACR,EACF,IA3DD,CAX0CxE,8BCzF1C,SAAY5F,EAAAA,GAAmC,YAAA,IAAnCA,IAAAA,EAAiC,CAAA,GAC3CA,EAAQ+J,KAAO,4BACfO,EAAA9I,KAAAvH,KAAM+F,IACP/F,IAAA,eAJ+C4P,CAAAA,EAAAA,GC8BlD,SAASU,EAAyBtG,GACjC,OAAOA,GAAKA,EAAEuG,YAAc1S,OAAO2S,UAAUC,eAAelJ,KAAKyC,EAAG,WAAaA,EAAW,QAAIA,CACjG,CAP2B,mBAApB0G,iBAAiCA,gBAaxC,IA8DIC,EArBAC,eAAuBN,EAzCP,SAASO,EAAMC,EAAGC,GACpC,GAAID,IAAMC,EAAG,OAAO,EAEpB,GAAID,GAAKC,GAAiB,iBAALD,GAA6B,iBAALC,EAAe,CAC1D,GAAID,EAAEE,cAAgBD,EAAEC,YAAa,OAAO,EAE5C,IAAIxN,EAAQyN,EAAGnT,EACf,GAAIoB,MAAMC,QAAQ2R,GAAI,CAEpB,IADAtN,EAASsN,EAAEtN,SACGuN,EAAEvN,OAAQ,OAAO,EAC/B,IAAKyN,EAAIzN,EAAgB,GAARyN,KACf,IAAKJ,EAAMC,EAAEG,GAAIF,EAAEE,IAAK,OAAO,EACjC,OAAO,CACR,CAID,GAAIH,EAAEE,cAAgBE,OAAQ,OAAOJ,EAAEK,SAAWJ,EAAEI,QAAUL,EAAEM,QAAUL,EAAEK,MAC5E,GAAIN,EAAEO,UAAYxT,OAAO2S,UAAUa,QAAS,OAAOP,EAAEO,YAAcN,EAAEM,UACrE,GAAIP,EAAEQ,WAAazT,OAAO2S,UAAUc,SAAU,OAAOR,EAAEQ,aAAeP,EAAEO,WAIxE,IADA9N,GADA1F,EAAOD,OAAOC,KAAKgT,IACLtN,UACC3F,OAAOC,KAAKiT,GAAGvN,OAAQ,OAAO,EAE7C,IAAKyN,EAAIzN,EAAgB,GAARyN,KACf,IAAKpT,OAAO2S,UAAUC,eAAelJ,KAAKwJ,EAAGjT,EAAKmT,IAAK,OAAO,EAEhE,IAAKA,EAAIzN,EAAgB,GAARyN,KAAY,CAC3B,IAAIjT,EAAMF,EAAKmT,GAEf,IAAKJ,EAAMC,EAAE9S,GAAM+S,EAAE/S,IAAO,OAAO,CACpC,CAED,OAAO,CACR,CAGD,OAAO8S,GAAIA,GAAKC,GAAIA,CACtB,IAwBA,SAAWJ,GACPA,EAAaA,EAA0B,YAAI,GAAK,cAChDA,EAAaA,EAAsB,QAAI,GAAK,UAC5CA,EAAaA,EAAsB,QAAI,GAAK,UAC5CA,EAAaA,EAAsB,QAAI,GAAK,SAC/C,CALD,CAKGA,IAAiBA,EAAe,CAAE,IAoBrC,MAAMY,EAUFP,aAAYQ,OAAEA,EAAMC,mBAAEA,EAAkBC,QAAEA,EAAOC,OAAEA,EAAMC,GAAEA,EAxC5C,uBAwC2DC,SAAEA,EAAQC,UAAEA,EAAY,GAAEC,OAAEA,EAAMC,MAAEA,EAAKC,OAAEA,EAAMC,QAAEA,EAAU,EAACjG,IAAEA,EAAM,0CAAyCkG,QAAEA,IAkBvL,GAjBAnS,KAAKoS,UAAY,GACjBpS,KAAKqS,MAAO,EACZrS,KAAKsS,SAAU,EACftS,KAAKuS,OAAS,GACdvS,KAAKwR,OAASA,EACdxR,KAAKyR,mBAAqBA,EAC1BzR,KAAK0R,QAAUA,EACf1R,KAAK2R,OAASA,EACd3R,KAAK4R,GAAKA,GAjDC,uBAkDX5R,KAAK6R,SAAWA,EAChB7R,KAAK8R,UAAYA,EACjB9R,KAAK+R,OAASA,EACd/R,KAAKgS,MAAQA,EACbhS,KAAKiS,OAASA,EACdjS,KAAKkS,QAAUA,EACflS,KAAKiM,IAAMA,EACXjM,KAAKmS,QAAUA,EACXZ,EAAOiB,SAAU,CACjB,IAAK5B,EAAQ5Q,KAAK+F,QAASwL,EAAOiB,SAASzM,SACvC,MAAM,IAAIO,MAAM,2DAA2D2H,KAAKC,UAAUlO,KAAK+F,gBAAgBkI,KAAKC,UAAUqD,EAAOiB,SAASzM,YAElJ,OAAOwL,EAAOiB,QACjB,CACDjB,EAAOiB,SAAWxS,IACrB,CACG+F,cACA,MAAO,CACHoM,QAASnS,KAAKmS,QACdX,OAAQxR,KAAKwR,OACbE,QAAS1R,KAAK0R,QACdC,OAAQ3R,KAAK2R,OACbC,GAAI5R,KAAK4R,GACTE,UAAW9R,KAAK8R,UAChBD,SAAU7R,KAAK6R,SACfI,OAAQjS,KAAKiS,OACbF,OAAQ/R,KAAK+R,OACbC,MAAOhS,KAAKgS,MACZ/F,IAAKjM,KAAKiM,IACVwF,mBAAoBzR,KAAKyR,mBAEhC,CACGgB,aACA,OAAIzS,KAAKuS,OAAO/O,OACLmN,EAAa+B,QAEpB1S,KAAKqS,KACE1B,EAAagC,QAEpB3S,KAAKsS,QACE3B,EAAaiC,QAEjBjC,EAAakC,WACvB,CACGC,aACA,OAAO9S,KAAKqS,OAASrS,KAAKsS,SAAWtS,KAAKuS,OAAO/O,QAAUxD,KAAKkS,QAAU,CAC7E,CAODa,YACI,IAAI9G,EAAMjM,KAAKiM,IA6Bf,OA5BAA,GAAO,+CACHjM,KAAKwR,SACLvF,GAAO,QAAQjM,KAAKwR,UAEpBxR,KAAK0R,UACLzF,GAAO,YAAYjM,KAAK0R,WAExB1R,KAAK2R,SACL1F,GAAO,WAAWjM,KAAK2R,UAEvB3R,KAAK8R,UAAUtO,OAAS,IACxByI,GAAO,cAAcjM,KAAK8R,UAAU/S,KAAK,QAEzCiB,KAAK6R,WACL5F,GAAO,aAAajM,KAAK6R,YAEzB7R,KAAKiS,SACLhG,GAAO,WAAWjM,KAAKiS,UAEvBjS,KAAKmS,UACLlG,GAAO,MAAMjM,KAAKmS,WAElBnS,KAAK+R,SACL9F,GAAO,YAAYjM,KAAK+R,OAAOhT,KAAK,QAEpCiB,KAAKyR,qBACLxF,GAAO,yBAAyBjM,KAAKyR,sBAElCxF,CACV,CACD+G,eACI,MAAMnE,EAASnR,SAASuV,eAAejT,KAAK4R,IACxC/C,GACAA,EAAOrP,QAEd,CAKD0T,OACI,OAAOlT,KAAKmT,aACf,CAODA,cACI,OAAO,IAAIrK,QAAQ,CAACC,EAASqK,KACzBpT,KAAKqT,aAAcC,IACVA,EAIDF,EAAOE,EAAIC,OAHXxK,EAAQkG,OAAOuE,OAIlB,EACH,EAET,CACDC,cAAcrU,GAEV,OADAY,KAAK0T,UACEF,OAAOG,KAAKF,cAAcrU,EACpC,CAKDiU,aAAaO,GACT5T,KAAKoS,UAAUyB,KAAKD,GACpB5T,KAAK0T,SACR,CAIDI,YACI,IAAIC,EAAIC,EACR,GAAItW,SAASuV,eAAejT,KAAK4R,IAG7B,YADA5R,KAAKiU,WAGT,MAAMpI,EAAS,CACX7N,IAAKgC,KAAKwR,OACVE,QAAS1R,KAAK0R,QACdC,OAAQ3R,KAAK2R,OACbG,UAAW9R,KAAK8R,UAAUtO,QAAUxD,KAAK8R,UACzCoC,EAAGlU,KAAKmS,QACRJ,OAAQ/R,KAAK+R,OACbF,SAAU7R,KAAK6R,SACfI,OAAQjS,KAAKiS,OACbR,mBAAoBzR,KAAKyR,oBAG7B5T,OAAOC,KAAK+N,GAAQ9N,QAEnBC,IAAS6N,EAAO7N,WAAe6N,EAAO7N,KAC4F,QAA5HgW,EAA8E,QAAxED,EAAgB,OAAX9E,aAA8B,IAAXA,YAAoB,EAASA,OAAOuE,cAA2B,IAAPO,OAAgB,EAASA,EAAGJ,YAAyB,IAAPK,OAAgB,EAASA,EAAGP,gBAInK,CAAEU,IAEE,IAAIC,EAAGtD,EAAGuD,EAAGC,EAAI,iCAAkCC,EAAI,SAAUC,EAAI,gBAAiBpG,EAAI,SAAUqG,EAAI/W,SAAUqT,EAAI9B,OAEtH8B,EAAIA,EAAEwD,KAAOxD,EAAEwD,GAAK,CAAA,GAEpB,MAAMG,EAAI3D,EAAE4C,OAAS5C,EAAE4C,KAAO,CAAE,GAAGhG,EAAI,IAAIgH,IAAOzT,EAAI,IAAI0T,gBAAmBC,EAAI,IAEjFT,IAAMA,EAAI,IAAItL,QAAQ,CAACqG,EAAG2F,KAAMC,OAxS7BC,EAwSuChV,KAxSfiV,EAwSqC,YAC5D,IAAIlB,EAKJ,IAAKM,WAJEvD,EAAI2D,EAAE9W,cAAc,UAC3BmT,EAAEc,GAAK5R,KAAK4R,GACZ1Q,EAAE4K,IAAI,YAAa,IAAI6B,GAAK,IAElBwG,EACNjT,EAAE4K,IAAIuI,EAAEa,QAAQ,SAAWC,GAAM,IAAMA,EAAE,GAAG/W,eAAgB+V,EAAEE,IAClEnT,EAAE4K,IAAI,WAAYyI,EAAI,SAAWnG,GACjC0C,EAAEsE,IAAMpV,KAAKiM,IAAM,IAAM/K,EACzBwT,EAAEtG,GAAKe,EACP2B,EAAEuE,QAAU,IAAOjB,EAAIU,EAAExO,MAAMgO,EAAI,qBAEnCxD,EAAEkB,MAAQhS,KAAKgS,QAAsD,QAA3C+B,EAAKU,EAAEvM,cAAc,wBAAqC,IAAP6L,OAAgB,EAASA,EAAG/B,QAAU,GACnHyC,EAAEa,KAAKC,OAAOzE,EACjB,EArTN,KAF6B0E,OAwSgC,KAtSlDA,EAAI1M,UAAU,SAAUC,EAASqK,GAC/C,SAASqC,EAAU7T,GAAS,IAAM8T,EAAKT,EAAUxM,KAAK7G,IAAW,MAAOV,GAAKkS,EAAOlS,GAAO,CAC3F,SAASyU,EAAS/T,GAAS,IAAM8T,EAAKT,EAAiB,MAAErT,IAAW,MAAOV,GAAKkS,EAAOlS,GAAO,CAC9F,SAASwU,EAAK/S,GAJlB,IAAef,EAIae,EAAO0P,KAAOtJ,EAAQpG,EAAOf,QAJ1CA,EAIyDe,EAAOf,MAJhDA,aAAiB4T,EAAI5T,EAAQ,IAAI4T,EAAE,SAAUzM,GAAWA,EAAQnH,EAAO,IAIhBsH,KAAKuM,EAAWE,EAAY,CAC9GD,GAAMT,EAAYA,EAAUtN,MAAMqN,EAAuB,KAAKvM,OACtE,GAPA,IAAmBuM,EAAqBQ,EAAGP,CAuTzB,IAEFP,EAAEF,GAAKoB,QAAQC,KAAKvB,EAAI,8BAA+BH,GAAMO,EAAEF,GAAK,CAACrF,KAAM2F,IAAMnH,EAAErO,IAAI6P,IAAM0F,IAAI3L,KAAK,IAAMwL,EAAEF,GAAGrF,KAAM2F,GAC1H,EA1BD,CA0BGjJ,GAMP,MAAMiK,EAAkB9V,KAAK8R,UAAUhK,IAAKiO,GAAY/V,KAAKyT,cAAcsC,IAEtED,EAAgBtS,QACjBsS,EAAgBjC,KAAK7T,KAAKyT,cAAc,SAE5C3K,QAAQkN,IAAIF,GAAiB5M,KAAK,IAAMlJ,KAAKiU,WAAaV,IACtD,MAAM5U,EAAQ,IAAIsX,WAAW,QAAS,CAAE1C,UACxCvT,KAAKkW,kBAAkBvX,EAAM,EAEpC,CAIDwX,QACInW,KAAKgT,eACLhT,KAAKqS,MAAO,EACZrS,KAAKsS,SAAU,EACftS,KAAKuS,OAAS,GACdvS,KAAKoW,aAAe,IACvB,CACDC,wBACQrW,KAAK8S,QACL9S,KAAKmW,OAEZ,CACDD,kBAAkBhV,GAEd,GADAlB,KAAKuS,OAAOsB,KAAK3S,GACblB,KAAKuS,OAAO/O,QAAUxD,KAAKkS,QAAS,CACpC,MAAMoE,EAAQtW,KAAKuS,OAAO/O,OAAS+S,KAAKC,IAAI,EAAGxW,KAAKuS,OAAO/O,QAC3DoS,QAAQrC,MAAM,kDAAkD+C,SAChE5O,WAAW,KACP1H,KAAKgT,eACLhT,KAAK8T,WAAW,EACjBwC,EACN,MAEGtW,KAAKoW,aAAelV,EACpBlB,KAAKiU,UAEZ,CACDA,WACIjU,KAAKqS,MAAO,EACZrS,KAAKsS,SAAU,EACftS,KAAKoS,UAAUrU,QAASkI,IACpBA,EAAGjG,KAAKoW,aAAa,GAEzBpW,KAAKoS,UAAY,EACpB,CACDsB,UAEI,GADA1T,KAAKqW,wBACDrW,KAAKqS,KACLrS,KAAKiU,eAEJ,CAED,GAAIhF,OAAOuE,QAAUvE,OAAOuE,OAAOG,MAAQ1E,OAAOuE,OAAOG,KAAKxB,QAI1D,OAHAyD,QAAQC,KAAK,6JAEb7V,KAAKiU,WAGLjU,KAAKsS,UAELtS,KAAKsS,SAAU,EACftS,KAAK8T,YAEZ,CACJ,EC5XgB2C,IAAAA,eAOnB,SAAA5G,GAAA,SAAA4G,EAAY1Q,GAA8B,IAAAhG,EAAA,OACxCA,EAAMgG,EAAAA,KAAAA,KAAAA,IADkC/F,MAH1C0W,OAA+C,KAC/CC,EAAAA,SAAwC,KAKhB,oBAAlB1H,SACFlP,EAAK2W,OAAS,IAAAnF,EAAWxL,GAASmN,OAAOhK,KAAK,SAACsK,GAC7C,IAAMmD,EAAW,IAAUnD,EAACG,KAAKiD,SAEjC,OADA7W,EAAK4W,SAAWA,EAEjBA,CAAA,IARqC5W,CAUzC,CAVDgQ,EAAA0G,EAAA5G,qBAP0ClE,SAmB1CO,SAAA,SAAoCpM,GAClC,MAAUwG,IAAAA,MAAM,0BACjB,IAEDiG,MAAA,SACEkB,GAEA,OAAeA,EAACtG,KAAK9E,QAAQyF,IAAI,SAAC6F,GAChC,IAAqBA,EAAAA,EAAE2B,SAAS3F,SAASkN,SAAjC/I,IAAAA,IAAKD,EAAbiJ,EAAajJ,IACbkJ,EAAqCpJ,EAAE2B,SAAS0H,SAASH,SAEzD,MAAO,CACL7M,EAAG6D,EACH9D,EAAG+D,EACHvJ,MAAOoJ,EAAEsJ,kBACTvM,OAAQ,CACN,CAPJqM,EAAqBG,MAArBH,EAA4BI,MAQxB,CARUC,EAAAA,MAAdL,EAAQM,OAUNtJ,IAAKJ,EAER,EACF,IAEK1E,gBACJlD,OAEM4Q,IAAAA,EAAAA,SAAAA,GAEN,IAAKA,EACH,MAAUrQ,IAAAA,MACR,8EANmB,OAAAwC,QAAAC,QAUA4N,EACpBW,QAAQ,CAAE5I,QAAS3I,EAAQpE,OAAS,SAAC8L,SAAc,CAClDpL,QAASoL,EAD0B,GAG9B,MAAA,SAACvM,GAIN,MAHe,iBAAXA,EAAEqW,MACJ3B,QAAQrC,MAASrS,EAAEqW,KAAnB,KAA4BrW,EAAEsW,SAEzB,CAAEnV,QAAS,GACnB,IAnBoB6G,KAAA,SAUjBuE,GAWN,OAAYlB,EAAAA,MAAM,CAAEpF,KAAMsG,GArBH,EAEN,EAAA/L,EAAA1B,OAAA0B,EAAKiV,SAAmB,OAAA7N,QAAAC,QAAA0O,EAAAzO,EAAAyO,GAAA3O,QAAAC,QAAArH,EAAKgV,QAoB/CxN,KAAAF,GAlEyC2C,OAAAA,GAAAA,OAAAA,QAAAA,OAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAO1C,CAP0CA,qHCiB1CO,iDAFAiC,UAAY,oDAEZjC,CAAAA,QAAAA,IAAAA,EAAAA,EAAAA,UANgDP,OAMhDO,EAAAA,SAAA,SAAApM,OAAoC6B,EAAA7B,EAAzB6B,MAET,OAAYqK,KAAAA,OAAOhM,KAAKmO,UADQ,mBAAW,CAAEO,QAAS/M,GAAUA,EAEjE,EAED4K,EAAAA,MAAA,SAAM5J,GACJ,OAAaA,EAACwE,KAAK9E,QAAQyF,IAAI,SAAC6F,GAAD,MAAQ,CACrC3D,EAAG2D,EAAE2B,SAAS3F,SAASkE,IACvB9D,EAAG4D,EAAE2B,SAAS3F,SAASmE,IACvBvJ,MAAOoJ,EAAEsJ,kBACTvM,OAAQ,CACN,CAACiD,EAAE2B,SAAS0H,SAASU,UAAU5J,IAAKH,EAAE2B,SAAS0H,SAASU,UAAU7J,KAClE,CAACF,EAAE2B,SAAS0H,SAASW,UAAU7J,IAAKH,EAAE2B,SAAS0H,SAASW,UAAU9J,MAEpEE,IAAKJ,EARwB,EAUhC,EAtB+ChC,CAAAA,EAAAA,kBCQhDwC,SAAAA,GAAAA,SAAAA,IAAAA,IAAAA,IAAAA,EAAAA,EAAAA,UAAAA,OAAAA,EAAAA,IAAAA,MAAAA,GAAAA,EAAAA,EAAAA,EAAAA,EAAAA,IAAAA,EAAAA,GAAAA,UAAAA,GAEAjC,OAFAiC,EAAAA,EAAAA,KAAAA,MAAAA,EAAAA,CAAAA,MAAAA,OAAAA,KAAAA,MAAAA,UAAY,oDAEZjC,CAAAA,CAFAiC,EAAAA,EAAAA,GAEAjC,IAAAA,EAAAA,EAAAA,iBAAAA,EAAAA,SAAA,SAAoCpM,GAAA,IAAA6B,EAAA7B,EAAzB6B,MAET,OAAYqK,KAAAA,OAAOhM,KAAKmO,UADQ,iBAAjBxM,EAA4B,CAAEyM,EAAGzM,GAAUA,EAE3D,EAED4K,EAAAA,MAAA,SAAMkB,GACJ,OAAeA,EAACtG,KAAKyQ,MAClB/Y,OAAO,SAAC8O,GAAD,YAAsB7K,IAAd6K,EAACzJ,QAAT,GACP4D,IAAI,SAAC6F,GAAO,MAAA,CACX3D,EAAG2D,EAAEzJ,SAAS2J,IACd9D,EAAG4D,EAAEzJ,SAAS4J,IACdvJ,MAAOoJ,EAAEe,QAAQnK,MACjBmG,OAAQ,KACRqD,IAAKJ,EALF,EAOR,IAjBDQ,CAJwCxC,8BCDxC,SAAY5F,EAAAA,GAA0C,IAAAhG,OAA1CgG,IAAAA,IAAAA,EAAwC,CAAE,IACpDhG,EAAA8P,EAAAtI,KAAAvH,KAAM+F,IAAN/F,MAJFmO,eACA0J,EAAAA,EAAAA,gBAKE,EAAA,MAAa,sCAHuC,OAIpD9X,EAAKoO,UAAYpI,EAAQoI,WAAgB2B,EAAxB,UACjB/P,EAAK8X,WAAa9R,EAAQ8R,YAAiB/H,EAA3C,WACD/P,CAAA,YAEDmM,EAAAA,EAAAA,iBAAAA,EAAAA,SAAA,SAAApM,OAA0C6B,EAAA7B,EAA/B6B,MAAO1D,EAAwB6B,EAAxB7B,KACV4N,EAA0B,iBAAjBlK,EAA4B,CAAEyM,EAAGzM,GAAUA,EAG1D,OAFAkK,EAAOiM,OAAS,OAIL9X,KAAKgM,OAFR/N,IACUyN,EAACsE,QACIhQ,KAAK6X,WAGL7X,KAAKmO,UAHYtC,EAKzC,EAEDU,EAAAA,MAAA,SAAMkB,GAKJ,OAJgBvO,MAAMC,QAAQsO,EAAStG,MACnCsG,EAAStG,KACT,CAACsG,EAAStG,OAECW,IAAI,SAAC6F,GAAD,MAAQ,CACzB3D,EAAGvH,OAAOkL,EAAEoK,KACZhO,EAAGtH,OAAOkL,EAAEG,KACZvJ,MAAOoJ,EAAEqK,aACTtN,OAAQ,CACN,CAACuN,WAAWtK,EAAEuK,YAAY,IAAKD,WAAWtK,EAAEuK,YAAY,KACxD,CAACD,WAAWtK,EAAEuK,YAAY,IAAKD,WAAWtK,EAAEuK,YAAY,MAE1DnK,IAAKJ,EARY,EAUpB,KA3CgDhC,8BCnBjD,SAAY5F,EAAAA,GAAqC,wBAE1CA,EADL,CAEEoI,UAFF,uCAGE0J,WAHF,4CAKD7X,IAAA,eAEDuM,EAAAA,UAAAA,MAAA,SACEkB,GAEA,OAAIA,EAAStG,KAAKoM,MACT,GAEIhH,EAAAA,UAAAA,MAAMkB,KAAAA,KAAAA,EACpB,KAhB6C0K,kBC2E9ChK,SAAAA,GAAAA,SAAAA,IAAAA,IAAAA,IAAAA,EAAAA,EAAAA,UAAAA,OAAAA,EAAAA,IAAAA,MAAAA,GAAAA,EAAAA,EAAAA,EAAAA,EAAAA,IAAAA,EAAAA,GAAAA,UAAAA,UAAAA,EAAAA,EAAAA,KAAAA,MAAAA,EAAAA,CAAAA,MAAAA,OAAAA,KAAAA,MAAAA,UAAY,iDAAZA,EAAAA,EAAAA,qBAJ4CxC,SAM5CO,SAAA,YAAWvK,IAAAA,IAAAA,MACHkK,EAA0B,iBAAVlK,EAAqB,CAAEyM,EAAGzM,GAAUA,EAG1D,OAFAkK,EAAOiM,OAAS,OAET9X,KAAKgM,OAAOhM,KAAKmO,UAAWtC,EACpC,EAEDU,EAAAA,MAAA,SAAMkB,GACJ,SAAgBtG,KAAK9E,QAAQyF,IAAI,SAAC6F,GAAD,MAAQ,CACvC3D,EAAG2D,EAAE2B,SAASzB,IACd9D,EAAG4D,EAAE2B,SAASxB,IACdvJ,MAAOoJ,EAAEyK,UACT1N,OAAQ,CACN,CAACiD,EAAEjD,OAAOgN,UAAU5J,IAAKH,EAAEjD,OAAOgN,UAAU7J,KAC5C,CAACF,EAAEjD,OAAOiN,UAAU7J,IAAKH,EAAEjD,OAAOiN,UAAU9J,MAE9CE,IAAKJ,EAR0B,EAUlC,IAEK1E,gBAAOlD,GAAuB,IAElC,OACE+C,QAAAC,QADEhD,EAAQpE,MAAM6B,OAAS,EAClB,GAGIyF,EAAAA,UAAAA,YANqBjJ,KAMd+F,GAhCsB4F,OAAAA,GAAAA,OAAAA,QAAAA,OAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAI5CwC,CAJ4CxC,8BC5C5C,SAAY5F,EAAAA,GAA0C,IAAAhG,OAA1CgG,IAAAA,IAAAA,EAAwC,CAAE,IACpDhG,EAAA8P,EAAAtI,KAAAvH,KAAM+F,IAAN/F,MAJFmO,eACA0J,EAAAA,EAAAA,gBAKE,EAAA,MAAa,oCAHuC,OAIpD9X,EAAKoO,UAAYpI,EAAQoI,WAAgB2B,EAAxB,UACjB/P,EAAK8X,WAAa9R,EAAQ8R,YAAiB/H,EAA3C,WACD/P,CAAA,YAEDmM,EAAAA,EAAAA,iBAAAA,EAAAA,SAAA,SAAApM,OAA0C6B,EAAA7B,EAA/B6B,MAAO1D,EAAwB6B,EAAxB7B,KACV4N,EAA0B,iBAAjBlK,EAA4B,CAAEyM,EAAGzM,GAAUA,EAG1D,OAFAkK,EAAOiM,OAAS,OAIL9X,KAAKgM,OAFR/N,IACUyN,EAACsE,QACIhQ,KAAK6X,WAGL7X,KAAKmO,UAHYtC,EAKzC,EAEDU,EAAAA,MAAA,SAAMkB,GAKJ,OAJgBvO,MAAMC,QAAQsO,EAAStG,MACnCsG,EAAStG,KACT,CAACsG,EAAStG,OAECW,IAAI,SAAC6F,GAAD,MAAQ,CACzB3D,EAAGvH,OAAOkL,EAAEoK,KACZhO,EAAGtH,OAAOkL,EAAEG,KACZvJ,MAAOoJ,EAAEqK,aACTtN,OAAQ,CACN,CAACuN,WAAWtK,EAAEuK,YAAY,IAAKD,WAAWtK,EAAEuK,YAAY,KACxD,CAACD,WAAWtK,EAAEuK,YAAY,IAAKD,WAAWtK,EAAEuK,YAAY,MAE1DnK,IAAKJ,EARY,EAUpB,KA3CkDhC,8BCFnD,SAAY5F,EAAAA,GAAmC,IAAAhG,EAAA,YAAnCgG,IAAAA,IAAAA,EAAiC,CAAA,IAC3ChG,cAAMgG,IAAN/F,MAHFmO,eAKE,EACApO,EAAKoO,UAAYpI,EAAQoI,WAAgB2B,uDAC1C/P,CAAA,YAEDmM,EAAAA,EAAAA,iBAAAA,EAAAA,SAAA,SAAApM,GACE,OAAOE,KAAKgM,OAAU,GAAAhM,KAAKmO,UADOrO,EAAzB6B,cAEV,IAED4K,MAAA,SAAMkB,GAKJ,OAJgBvO,MAAMC,QAAQsO,EAAStG,KAAK+I,UACxCzC,EAAStG,KAAK+I,SACd,IAEWpI,IAAI,SAAC6F,GAClB,MAAa,KAQb,OAPIA,EAAEiB,OACJlE,EAAS,CACP,CAACuN,WAAWtK,EAAEiB,KAAK,IAAKqJ,WAAWtK,EAAEiB,KAAK,KAC1C,CAACqJ,WAAWtK,EAAEiB,KAAK,IAAKqJ,WAAWtK,EAAEiB,KAAK,OAIvC,CACL5E,EAAGvH,OAAOkL,EAAE0K,OAAO,IACnBtO,EAAGtH,OAAOkL,EAAE0K,OAAO,IACnB9T,MAAOoJ,EAAE2K,WAAa3K,EAAE2K,WAAa3K,EAAE5G,KACvC2D,OAAAA,EACAqD,IAAKJ,EAER,EACF,KAvCyChC,8BC+B1C,SAAY5F,EAAAA,GAAAA,IAAAA,WAAAA,IAAAA,EAAmC,CAAA,IAC7ChG,EAAA8P,EAAAtI,KAAAvH,KAAM+F,IAAN/F,MAJFmO,eAGiD,EAAApO,EAFjD8X,gBAKE,EAAA,MAAa,mCAHkC,OAI/C9X,EAAKoO,UAAYpI,EAAQoI,WAAgB2B,YACzC/P,EAAK8X,WAAa9R,EAAQ8R,YAAiB/H,EAAzB,WACnB/P,CAAA,0BAb2C4L,SAe5CO,SAAA,YAAWvK,IAAAA,IAAAA,MAGT,OAEgBqK,KAAAA,OALA/N,EAAAA,OAIEyN,EAACsE,QACIhQ,KAAK6X,WAGL7X,KAAKmO,UAPI,mBAAW,CAAEC,EAAGzM,GAAUA,EAS3D,EAED4K,EAAAA,MAAA,SAAM5J,GACJ,SAAcwE,KAAK+I,SAASpI,IAAI,SAAC6F,GAAO,MAAA,CACtC3D,EAAG2D,EAAE2B,SAASb,YAAY,GAC1B1E,EAAG4D,EAAE2B,SAASb,YAAY,GAC1BlK,MAAOoJ,EAAEyC,WAAW7L,MACpBmG,OAAQ,KACRqD,IAAKJ,EALyB,EAOjC,EAnC2ChC,CAAAA,EAAAA,8BCW5C,SAAY5F,EAAAA,GAAqC,IAAAhG,OAArCgG,IAAAA,IAAAA,EAAmC,CAAA,IAC7ChG,EAAA8P,EAAAtI,KAAAvH,KAAM+F,IAAN/F,MAJFmO,eACA0J,EAAAA,EAAAA,gBAKE,EAAA,MAAa,sCAHkC,OAI/C9X,EAAKoO,UAAYpI,EAAQoI,WAAgB2B,EAAxB,UACjB/P,EAAK8X,WAAa9R,EAAQ8R,YAAiB/H,EAAzB,WAL6B/P,CAMhD,mCAEDmM,SAAA,SAA0CpM,GAAA,MAA/B6B,EAAAA,MAAO1D,EAAAA,EAAAA,KACJ4N,EAAoB,iBAAVlK,EAAqB,CAAEoF,KAAMpF,GAAUA,EAG7D,OAFAkK,EAAOiM,OAAS,OAIA9L,KAAAA,OAFR/N,IACDyN,EAAYsE,QACIhQ,KAAK6X,WAGL7X,KAAKmO,UAHYtC,EAKzC,IAEDU,MAAA,SAAMkB,GAIJ,OAHgBvO,MAAMC,QAAQsO,EAAStG,KAAK9E,SACxCoL,EAAStG,KAAK9E,QACd,CAACoL,EAAStG,KAAK9E,UACJyF,IAAI,SAAC6F,GAAO,MAAA,CACzB3D,EAAGvH,OAAOkL,EAAEoK,KACZhO,EAAGtH,OAAOkL,EAAEG,KACZvJ,MAAOoJ,EAAEyK,UACT1N,OAAQ,CACN,CAACuN,WAAWtK,EAAEiB,KAAK2J,MAAON,WAAWtK,EAAEiB,KAAK4J,OAC5C,CAACP,WAAWtK,EAAEiB,KAAK6J,MAAOR,WAAWtK,EAAEiB,KAAK8J,QAE9C3K,IAAKJ,EARY,EAUpB,KA1C2ChC"}
\No newline at end of file