@maptiler/sdk 1.0.11 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"maptiler-sdk.mjs","sources":["../src/language.ts","../src/config.ts","../src/defaults.ts","../src/LogoControl.ts","../src/MaptilerLogoControl.ts","../src/tools.ts","../src/mapstyle.ts","../src/MaptilerTerrainControl.ts","../src/NavigationControl.ts","../src/MaptilerNavigationControl.ts","../src/GeolocateControl.ts","../src/MaptilerGeolocateControl.ts","../src/AttributionControl.ts","../src/ScaleControl.ts","../src/FullscreenControl.ts","../src/Map.ts","../src/Marker.ts","../src/Popup.ts","../src/Style.ts","../src/CanvasSource.ts","../src/GeoJSONSource.ts","../src/ImageSource.ts","../src/RasterTileSource.ts","../src/RasterDEMTileSource.ts","../src/VectorTileSource.ts","../src/VideoSource.ts","../src/TerrainControl.ts","../src/Point.ts","../src/index.ts"],"sourcesContent":["/**\n * Languages. Note that not all the languages of this list are available but the compatibility list may be expanded in the future.\n */\nconst Language = {\n /**\n * AUTO mode uses the language of the browser\n */\n AUTO: \"auto\",\n\n /**\n * Default fallback languages that uses latin charaters\n */\n LATIN: \"latin\",\n\n /**\n * Default fallback languages that uses non-latin charaters\n */\n NON_LATIN: \"nonlatin\",\n\n /**\n * Labels are in their local language, when available\n */\n LOCAL: \"\",\n\n ALBANIAN: \"sq\",\n AMHARIC: \"am\",\n ARABIC: \"ar\",\n ARMENIAN: \"hy\",\n AZERBAIJANI: \"az\",\n BASQUE: \"eu\",\n BELORUSSIAN: \"be\",\n BOSNIAN: \"bs\",\n BRETON: \"br\",\n BULGARIAN: \"bg\",\n CATALAN: \"ca\",\n CHINESE: \"zh\",\n CORSICAN: \"co\",\n CROATIAN: \"hr\",\n CZECH: \"cs\",\n DANISH: \"da\",\n DUTCH: \"nl\",\n ENGLISH: \"en\",\n ESPERANTO: \"eo\",\n ESTONIAN: \"et\",\n FINNISH: \"fi\",\n FRENCH: \"fr\",\n FRISIAN: \"fy\",\n GEORGIAN: \"ka\",\n GERMAN: \"de\",\n GREEK: \"el\",\n HEBREW: \"he\",\n HINDI: \"hi\",\n HUNGARIAN: \"hu\",\n ICELANDIC: \"is\",\n INDONESIAN: \"id\",\n IRISH: \"ga\",\n ITALIAN: \"it\",\n JAPANESE: \"ja\",\n JAPANESE_HIRAGANA: \"ja-Hira\",\n JAPANESE_KANA: \"ja_kana\",\n JAPANESE_LATIN: \"ja_rm\",\n JAPANESE_2018: \"ja-Latn\",\n KANNADA: \"kn\",\n KAZAKH: \"kk\",\n KOREAN: \"ko\",\n KOREAN_LATIN: \"ko-Latn\",\n KURDISH: \"ku\",\n ROMAN_LATIN: \"la\",\n LATVIAN: \"lv\",\n LITHUANIAN: \"lt\",\n LUXEMBOURGISH: \"lb\",\n MACEDONIAN: \"mk\",\n MALAYALAM: \"ml\",\n MALTESE: \"mt\",\n NORWEGIAN: \"no\",\n OCCITAN: \"oc\",\n POLISH: \"pl\",\n PORTUGUESE: \"pt\",\n ROMANIAN: \"ro\",\n ROMANSH: \"rm\",\n RUSSIAN: \"ru\",\n SCOTTISH_GAELIC: \"gd\",\n SERBIAN_CYRILLIC: \"sr\",\n SERBIAN_LATIN: \"sr-Latn\",\n SLOVAK: \"sk\",\n SLOVENE: \"sl\",\n SPANISH: \"es\",\n SWEDISH: \"sv\",\n TAMIL: \"ta\",\n TELUGU: \"te\",\n THAI: \"th\",\n TURKISH: \"tr\",\n UKRAINIAN: \"uk\",\n WELSH: \"cy\",\n} as const;\n\nconst languagesIsoSet = new Set(Object.values(Language) as Array<string>);\n\nfunction isLanguageSupported(lang: string): boolean {\n return languagesIsoSet.has(lang);\n}\n\nconst languageCodeSet = new Set(Object.values(Language));\n\n/**\n * Type representing the key of the Language object\n */\ntype LanguageKey = keyof typeof Language;\n\ntype Values<T> = T[keyof T];\n\n/**\n * Built-in languages values as strings\n */\ntype LanguageString = Values<typeof Language>;\n\nfunction getBrowserLanguage(): LanguageString {\n if (typeof navigator === \"undefined\") {\n return Intl.DateTimeFormat()\n .resolvedOptions()\n .locale.split(\"-\")[0] as LanguageString;\n }\n\n const canditatelangs = Array.from(\n new Set(navigator.languages.map((l) => l.split(\"-\")[0]))\n ).filter((l) => languageCodeSet.has(l as LanguageString));\n\n return canditatelangs.length\n ? (canditatelangs[0] as LanguageString)\n : Language.LATIN;\n}\n\nexport {\n Language,\n LanguageString,\n LanguageKey,\n getBrowserLanguage,\n isLanguageSupported,\n};\n","import EventEmitter from \"events\";\nimport { Language, LanguageString } from \"./language\";\nimport { config as clientConfig, FetchFunction } from \"@maptiler/client\";\nimport { Unit } from \"./unit\";\n\n/**\n * Configuration class for the SDK\n */\nclass SdkConfig extends EventEmitter {\n /**\n * The primary language. By default, the language of the web browser is used.\n */\n primaryLanguage: LanguageString | null = Language.AUTO;\n\n /**\n * The secondary language, to overwrite the default language defined in the map style.\n * This settings is highly dependant on the style compatibility and may not work in most cases.\n */\n secondaryLanguage: LanguageString | null = null;\n\n /**\n * Setting on whether of not the SDK runs with a session logic.\n * A \"session\" is started at the initialization of the SDK and finished when the browser\n * page is being refreshed.\n * When `session` is enabled (default: true), the extra URL param `mtsid` is added to queries\n * on the MapTiler Cloud API. This allows MapTiler to enable \"session based billing\".\n */\n session = true;\n\n /**\n * Unit to be used\n */\n private _unit: Unit = \"metric\";\n\n /**\n * MapTiler Cloud API key\n */\n private _apiKey = \"\";\n\n constructor() {\n super();\n }\n\n /**\n * Set the unit system\n */\n set unit(u: Unit) {\n this._unit = u;\n this.emit(\"unit\", u);\n }\n\n /**\n * Get the unit system\n */\n get unit(): Unit {\n return this._unit;\n }\n\n /**\n * Set the MapTiler Cloud API key\n */\n set apiKey(k: string) {\n this._apiKey = k;\n clientConfig.apiKey = k;\n this.emit(\"apiKey\", k);\n }\n\n /**\n * Get the MapTiler Cloud API key\n */\n get apiKey(): string {\n return this._apiKey;\n }\n\n /**\n * Set a the custom fetch function to replace the default one\n */\n set fetch(f: FetchFunction) {\n clientConfig.fetch = f;\n }\n\n /**\n * Get the fetch fucntion\n */\n get fetch(): FetchFunction | null {\n return clientConfig.fetch;\n }\n}\n\nconst config = new SdkConfig();\n\nexport { config, SdkConfig };\n","import { Language } from \"./language\";\n\n/**\n * Some default settings for the SDK\n */\nconst defaults = {\n maptilerLogoURL: \"https://api.maptiler.com/resources/logo.svg\",\n maptilerURL: \"https://www.maptiler.com/\",\n maptilerApiHost: \"api.maptiler.com\",\n rtlPluginURL:\n \"https://cdn.maptiler.com/mapbox-gl-rtl-text/v0.2.3/mapbox-gl-rtl-text.min.js\",\n primaryLanguage: Language.AUTO,\n secondaryLanguage: Language.LOCAL,\n terrainSourceURL: \"https://api.maptiler.com/tiles/terrain-rgb-v2/tiles.json\",\n terrainSourceId: \"maptiler-terrain\",\n};\n\nObject.freeze(defaults);\n\nexport { defaults };\n","/**\n * This is an extension of MapLibre LogoControl to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class LogoControl extends maplibregl.LogoControl {\n onAdd(map: Map | MapMLGL) {\n return super.onAdd(map as MapMLGL);\n }\n}\n","import maplibregl from \"maplibre-gl\";\nimport type { LogoOptions as LogoOptionsML } from \"maplibre-gl\";\nimport { defaults } from \"./defaults\";\nimport { Map } from \"./Map\";\nimport { LogoControl } from \"./LogoControl\";\n\ntype LogoOptions = LogoOptionsML & {\n logoURL?: string;\n linkURL?: string;\n};\n\n/**\n * This LogoControl extends the MapLibre LogoControl but instead can use any image URL and\n * any link URL. By default this is using MapTiler logo and URL.\n */\nexport class MaptilerLogoControl extends LogoControl {\n private logoURL = \"\";\n private linkURL = \"\";\n\n constructor(options: LogoOptions = {}) {\n super(options);\n\n this.logoURL = options.logoURL ?? defaults.maptilerLogoURL;\n this.linkURL = options.linkURL ?? defaults.maptilerURL;\n }\n\n onAdd(map: Map): HTMLElement {\n this._map = map;\n this._compact = this.options && this.options.compact;\n this._container = window.document.createElement(\"div\");\n this._container.className = \"maplibregl-ctrl\";\n const anchor = window.document.createElement(\"a\");\n anchor.style.backgroundRepeat = \"no-repeat\";\n anchor.style.cursor = \"pointer\";\n anchor.style.display = \"block\";\n anchor.style.height = \"23px\";\n anchor.style.margin = \"0 0 -4px -4px\";\n anchor.style.overflow = \"hidden\";\n anchor.style.width = \"88px\";\n anchor.style.backgroundImage = `url(${this.logoURL})`;\n anchor.style.backgroundSize = \"100px 30px\";\n anchor.style.width = \"100px\";\n anchor.style.height = \"30px\";\n\n anchor.target = \"_blank\";\n anchor.rel = \"noopener nofollow\";\n anchor.href = this.linkURL;\n anchor.setAttribute(\n \"aria-label\",\n this._map._getUIString(\"LogoControl.Title\")\n );\n anchor.setAttribute(\"rel\", \"noopener nofollow\");\n this._container.appendChild(anchor);\n this._container.style.display = \"block\";\n\n this._map.on(\"resize\", this._updateCompact);\n this._updateCompact();\n\n return this._container;\n }\n}\n","import maplibregl from \"maplibre-gl\";\nimport { defaults } from \"./defaults\";\n\nexport function enableRTL() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (maplibregl.getRTLTextPluginStatus() === \"unavailable\") {\n maplibregl.setRTLTextPlugin(\n defaults.rtlPluginURL,\n null,\n true // Lazy load the plugin\n );\n }\n}\n\n// This comes from:\n// https://github.com/maplibre/maplibre-gl-js/blob/v2.4.0/src/util/util.ts#L223\nexport function bindAll(fns: Array<string>, context: any): void {\n fns.forEach((fn) => {\n if (!context[fn]) {\n return;\n }\n context[fn] = context[fn].bind(context);\n });\n}\n\n// This comes from:\n// https://github.com/maplibre/maplibre-gl-js/blob/v2.4.0/src/util/dom.ts#L22\nexport function DOMcreate<K extends keyof HTMLElementTagNameMap>(\n tagName: K,\n className?: string,\n container?: HTMLElement\n): HTMLElementTagNameMap[K] {\n const el = window.document.createElement(tagName);\n if (className !== undefined) el.className = className;\n if (container) container.appendChild(el);\n return el;\n}\n\n// This comes from:\n// https://github.com/maplibre/maplibre-gl-js/blob/v2.4.0/src/util/dom.ts#L111\nexport function DOMremove(node: HTMLElement) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\n","import {\n MapStyle,\n ReferenceMapStyle,\n MapStyleVariant,\n mapStylePresetList,\n expandMapStyle,\n} from \"@maptiler/client\";\n\nexport function styleToStyle(\n style:\n | string\n | ReferenceMapStyle\n | MapStyleVariant\n | maplibregl.StyleSpecification\n | null\n | undefined\n): string | maplibregl.StyleSpecification {\n if (!style) {\n return MapStyle[mapStylePresetList[0].referenceStyleID]\n .getDefaultVariant()\n .getExpandedStyleURL();\n }\n\n // If the provided style is a shorthand (eg. \"streets-v2\") or a full style URL\n if (typeof style === \"string\" || style instanceof String) {\n if (!style.startsWith(\"http\") && style.toLowerCase().includes(\".json\")) {\n // If a style does not start by http but still contains the extension \".json\"\n // we assume it's a relative path to a style json file\n return style as string;\n } else {\n return expandMapStyle(style);\n }\n }\n\n if (style instanceof MapStyleVariant) {\n return style.getExpandedStyleURL();\n }\n\n if (style instanceof ReferenceMapStyle) {\n return (style.getDefaultVariant() as MapStyleVariant).getExpandedStyleURL();\n }\n\n return style as maplibregl.StyleSpecification;\n}\n","import { bindAll, DOMcreate, DOMremove } from \"./tools\";\n\nimport { Map } from \"./Map\";\nimport maplibregl from \"maplibre-gl\";\n\n/**\n * A `MaptilerTerrainControl` control adds a button to turn terrain on and off\n * by triggering the terrain logic that is already deployed in the Map object.\n */\nexport class MaptilerTerrainControl implements maplibregl.IControl {\n _map: Map;\n _container: HTMLElement;\n _terrainButton: HTMLButtonElement;\n\n constructor() {\n bindAll([\"_toggleTerrain\", \"_updateTerrainIcon\"], this);\n }\n\n onAdd(map: Map) {\n this._map = map;\n this._container = DOMcreate(\"div\", \"maplibregl-ctrl maplibregl-ctrl-group\");\n this._terrainButton = DOMcreate(\n \"button\",\n \"maplibregl-ctrl-terrain\",\n this._container\n );\n DOMcreate(\"span\", \"maplibregl-ctrl-icon\", this._terrainButton).setAttribute(\n \"aria-hidden\",\n \"true\"\n );\n this._terrainButton.type = \"button\";\n this._terrainButton.addEventListener(\"click\", this._toggleTerrain);\n\n this._updateTerrainIcon();\n this._map.on(\"terrain\", this._updateTerrainIcon);\n return this._container;\n }\n\n onRemove() {\n DOMremove(this._container);\n this._map.off(\"terrain\", this._updateTerrainIcon);\n this._map = undefined;\n }\n\n _toggleTerrain() {\n if (this._map.hasTerrain()) {\n this._map.disableTerrain();\n } else {\n this._map.enableTerrain();\n }\n\n this._updateTerrainIcon();\n }\n\n _updateTerrainIcon() {\n this._terrainButton.classList.remove(\"maplibregl-ctrl-terrain\");\n this._terrainButton.classList.remove(\"maplibregl-ctrl-terrain-enabled\");\n // if (this._map.terrain) {\n if (this._map.hasTerrain()) {\n this._terrainButton.classList.add(\"maplibregl-ctrl-terrain-enabled\");\n this._terrainButton.title = this._map._getUIString(\n \"TerrainControl.disableTerrain\"\n );\n } else {\n this._terrainButton.classList.add(\"maplibregl-ctrl-terrain\");\n this._terrainButton.title = this._map._getUIString(\n \"TerrainControl.enableTerrain\"\n );\n }\n }\n}\n","/**\n * This is an extension of MapLibre NavigationControl to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class NavigationControl extends maplibregl.NavigationControl {\n onAdd(map: Map | MapMLGL) {\n return super.onAdd(map as MapMLGL);\n }\n}\n","import { NavigationControl } from \"./NavigationControl\";\n\ntype HTMLButtonElementPlus = HTMLButtonElement & {\n clickFunction: (e?: any) => unknown;\n};\n\nexport class MaptilerNavigationControl extends NavigationControl {\n constructor() {\n super({\n showCompass: true,\n showZoom: true,\n visualizePitch: true,\n });\n\n // Removing the default click event\n this._compass.removeEventListener(\n \"click\",\n (this._compass as HTMLButtonElementPlus).clickFunction\n );\n\n // Adding custom click event\n this._compass.addEventListener(\"click\", (e) => {\n {\n const currentPitch = this._map.getPitch();\n if (currentPitch === 0) {\n this._map.easeTo({ pitch: Math.min(this._map.getMaxPitch(), 80) });\n } else {\n if (this.options.visualizePitch) {\n this._map.resetNorthPitch({}, { originalEvent: e });\n } else {\n this._map.resetNorth({}, { originalEvent: e });\n }\n }\n }\n });\n }\n\n /**\n * Overloading: the button now stores its click callback so that we can later on delete it and replace it\n */\n _createButton(\n className: string,\n fn: (e?: any) => unknown\n ): HTMLButtonElementPlus {\n const button = super._createButton(className, fn) as HTMLButtonElementPlus;\n button.clickFunction = fn;\n return button;\n }\n\n /**\n * Overloading: Limit how flat the compass icon can get\n */\n _rotateCompassArrow() {\n const rotate = this.options.visualizePitch\n ? `scale(${Math.min(\n 1.5,\n 1 /\n Math.pow(Math.cos(this._map.transform.pitch * (Math.PI / 180)), 0.5)\n )}) rotateX(${Math.min(70, this._map.transform.pitch)}deg) rotateZ(${\n this._map.transform.angle * (180 / Math.PI)\n }deg)`\n : `rotate(${this._map.transform.angle * (180 / Math.PI)}deg)`;\n\n this._compassIcon.style.transform = rotate;\n }\n}\n","/**\n * This is an extension of MapLibre GeolocateControl to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class GeolocateControl extends maplibregl.GeolocateControl {\n onAdd(map: Map | MapMLGL) {\n return super.onAdd(map as MapMLGL);\n }\n}\n","import type { LngLatLike } from \"maplibre-gl\";\nimport maplibregl from \"maplibre-gl\";\nimport { GeolocateControl } from \"./GeolocateControl\";\nimport { DOMcreate } from \"./tools\";\n\nconst Marker = maplibregl.Marker;\nconst LngLat = maplibregl.LngLat;\n\n/**\n * The MaptilerGeolocateControl is an extension of the original GeolocateControl\n * with a few changes. In this version, the active mode persists as long as the\n * location is still centered. This means it's robust to rotation, pitch and zoom.\n *\n */\nexport class MaptilerGeolocateControl extends GeolocateControl {\n private lastUpdatedCenter = new LngLat(0, 0);\n\n /**\n * Update the camera location to center on the current position\n *\n * @param {Position} position the Geolocation API Position\n * @private\n */\n _updateCamera(position: GeolocationPosition) {\n const center = new LngLat(\n position.coords.longitude,\n position.coords.latitude\n );\n const radius = position.coords.accuracy;\n const bearing = this._map.getBearing();\n const options = {\n bearing,\n ...this.options.fitBoundsOptions,\n linear: true,\n };\n\n const currentMapZoom = this._map.getZoom();\n\n if (currentMapZoom > this.options.fitBoundsOptions.maxZoom) {\n options.zoom = currentMapZoom;\n }\n\n this._map.fitBounds(center.toBounds(radius), options, {\n geolocateSource: true, // tag this camera change so it won't cause the control to change to background state\n });\n\n let hasFittingBeenDisrupted = false;\n\n const flagFittingDisruption = () => {\n hasFittingBeenDisrupted = true;\n };\n\n this._map.once(\"click\", flagFittingDisruption);\n this._map.once(\"dblclick\", flagFittingDisruption);\n this._map.once(\"dragstart\", flagFittingDisruption);\n this._map.once(\"mousedown\", flagFittingDisruption);\n this._map.once(\"touchstart\", flagFittingDisruption);\n this._map.once(\"wheel\", flagFittingDisruption);\n\n this._map.once(\"moveend\", () => {\n // Removing the events if not used\n this._map.off(\"click\", flagFittingDisruption);\n this._map.off(\"dblclick\", flagFittingDisruption);\n this._map.off(\"dragstart\", flagFittingDisruption);\n this._map.off(\"mousedown\", flagFittingDisruption);\n this._map.off(\"touchstart\", flagFittingDisruption);\n this._map.off(\"wheel\", flagFittingDisruption);\n\n if (hasFittingBeenDisrupted) {\n return;\n }\n\n this.lastUpdatedCenter = this._map.getCenter();\n });\n }\n\n _setupUI(supported: boolean) {\n this.lastUpdatedCenter = this._map.getCenter();\n\n this._container.addEventListener(\"contextmenu\", (e: MouseEvent) =>\n e.preventDefault()\n );\n this._geolocateButton = DOMcreate(\n \"button\",\n \"maplibregl-ctrl-geolocate\",\n this._container\n );\n DOMcreate(\n \"span\",\n \"maplibregl-ctrl-icon\",\n this._geolocateButton\n ).setAttribute(\"aria-hidden\", \"true\");\n this._geolocateButton.type = \"button\";\n\n if (supported === false) {\n // warnOnce('Geolocation support is not available so the GeolocateControl will be disabled.');\n const title = this._map._getUIString(\n \"GeolocateControl.LocationNotAvailable\"\n );\n this._geolocateButton.disabled = true;\n this._geolocateButton.title = title;\n this._geolocateButton.setAttribute(\"aria-label\", title);\n } else {\n const title = this._map._getUIString(\"GeolocateControl.FindMyLocation\");\n this._geolocateButton.title = title;\n this._geolocateButton.setAttribute(\"aria-label\", title);\n }\n\n if (this.options.trackUserLocation) {\n this._geolocateButton.setAttribute(\"aria-pressed\", \"false\");\n this._watchState = \"OFF\";\n }\n\n // when showUserLocation is enabled, keep the Geolocate button disabled until the device location marker is setup on the map\n if (this.options.showUserLocation) {\n this._dotElement = DOMcreate(\"div\", \"maplibregl-user-location-dot\");\n\n this._userLocationDotMarker = new Marker(this._dotElement);\n\n this._circleElement = DOMcreate(\n \"div\",\n \"maplibregl-user-location-accuracy-circle\"\n );\n this._accuracyCircleMarker = new Marker({\n element: this._circleElement,\n pitchAlignment: \"map\",\n });\n\n if (this.options.trackUserLocation) this._watchState = \"OFF\";\n\n this._map.on(\"move\", this._onZoom);\n }\n\n this._geolocateButton.addEventListener(\"click\", this.trigger.bind(this));\n\n this._setup = true;\n\n // when the camera is changed (and it's not as a result of the Geolocation Control) change\n // the watch mode to background watch, so that the marker is updated but not the camera.\n // Addition: Yet the status change does not occur if the ditance it has moved to is less than\n // one meter from the last auto-updated position. This is to guarrantee that if the move\n // is a zoom, rotation or pitch (where the center stays the same) then we can keep the ACTIVE_LOCK\n // mode ON.\n if (this.options.trackUserLocation) {\n this._map.on(\"moveend\", (event: any) => {\n const fromResize =\n event.originalEvent && event.originalEvent.type === \"resize\";\n const movingDistance = this.lastUpdatedCenter.distanceTo(\n this._map.getCenter()\n );\n\n if (\n !event.geolocateSource &&\n this._watchState === \"ACTIVE_LOCK\" &&\n !fromResize &&\n movingDistance > 1\n ) {\n this._watchState = \"BACKGROUND\";\n this._geolocateButton.classList.add(\n \"maplibregl-ctrl-geolocate-background\"\n );\n this._geolocateButton.classList.remove(\n \"maplibregl-ctrl-geolocate-active\"\n );\n\n this.fire(new Event(\"trackuserlocationend\"));\n }\n });\n }\n }\n\n _updateCircleRadius() {\n if (\n this._watchState !== \"BACKGROUND\" &&\n this._watchState !== \"ACTIVE_LOCK\"\n ) {\n return;\n }\n\n const lastKnownLocation: LngLatLike = [\n this._lastKnownPosition.coords.longitude,\n this._lastKnownPosition.coords.latitude,\n ];\n\n const projectedLocation = this._map.project(lastKnownLocation);\n const a = this._map.unproject([projectedLocation.x, projectedLocation.y]);\n const b = this._map.unproject([\n projectedLocation.x + 20,\n projectedLocation.y,\n ]);\n const metersPerPixel = a.distanceTo(b) / 20;\n\n const circleDiameter = Math.ceil((2.0 * this._accuracy) / metersPerPixel);\n this._circleElement.style.width = `${circleDiameter}px`;\n this._circleElement.style.height = `${circleDiameter}px`;\n }\n\n _onZoom() {\n if (this.options.showUserLocation && this.options.showAccuracyCircle) {\n this._updateCircleRadius();\n }\n }\n}\n","/**\n * This is an extension of MapLibre AttributionControl to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class AttributionControl extends maplibregl.AttributionControl {\n onAdd(map: Map | MapMLGL) {\n return super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre ScaleControl to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class ScaleControl extends maplibregl.ScaleControl {\n onAdd(map: Map | MapMLGL) {\n return super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre FullscreenControl to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class FullscreenControl extends maplibregl.FullscreenControl {\n onAdd(map: Map | MapMLGL) {\n return super.onAdd(map as MapMLGL);\n }\n}\n","import maplibregl from \"maplibre-gl\";\nimport { Base64 } from \"js-base64\";\nimport type {\n StyleSpecification,\n MapOptions as MapOptionsML,\n ControlPosition,\n StyleOptions,\n MapDataEvent,\n Tile,\n RasterDEMSourceSpecification,\n TerrainSpecification,\n MapTerrainEvent,\n} from \"maplibre-gl\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { ReferenceMapStyle, MapStyleVariant } from \"@maptiler/client\";\nimport { config, SdkConfig } from \"./config\";\nimport { defaults } from \"./defaults\";\nimport { MaptilerLogoControl } from \"./MaptilerLogoControl\";\nimport { enableRTL } from \"./tools\";\nimport {\n getBrowserLanguage,\n isLanguageSupported,\n Language,\n LanguageString,\n} from \"./language\";\nimport { styleToStyle } from \"./mapstyle\";\nimport { MaptilerTerrainControl } from \"./MaptilerTerrainControl\";\nimport { MaptilerNavigationControl } from \"./MaptilerNavigationControl\";\nimport { geolocation } from \"@maptiler/client\";\nimport { MaptilerGeolocateControl } from \"./MaptilerGeolocateControl\";\nimport { AttributionControl } from \"./AttributionControl\";\nimport { ScaleControl } from \"./ScaleControl\";\nimport { FullscreenControl } from \"./FullscreenControl\";\n\nfunction sleepAsync(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport type LoadWithTerrainEvent = {\n type: \"loadWithTerrain\";\n target: Map;\n terrain: {\n source: string;\n exaggeration: number;\n };\n};\n\n// StyleSwapOptions is not exported by Maplibre, but we can redefine it (used for setStyle)\nexport type TransformStyleFunction = (\n previous: StyleSpecification,\n next: StyleSpecification\n) => StyleSpecification;\n\nexport type StyleSwapOptions = {\n diff?: boolean;\n transformStyle?: TransformStyleFunction;\n};\n\nconst MAPTILER_SESSION_ID = uuidv4();\n\nexport const GeolocationType: {\n POINT: \"POINT\";\n COUNTRY: \"COUNTRY\";\n} = {\n POINT: \"POINT\",\n COUNTRY: \"COUNTRY\",\n} as const;\n\ntype MapTerrainDataEvent = MapDataEvent & {\n isSourceLoaded: boolean;\n tile: Tile;\n sourceId: string;\n source: RasterDEMSourceSpecification;\n};\n\n/**\n * Options to provide to the `Map` constructor\n */\nexport type MapOptions = Omit<MapOptionsML, \"style\" | \"maplibreLogo\"> & {\n /**\n * Style of the map. Can be:\n * - a full style URL (possibly with API key)\n * - a shorthand with only the MapTIler style name (eg. `\"streets-v2\"`)\n * - a longer form with the prefix `\"maptiler://\"` (eg. `\"maptiler://streets-v2\"`)\n */\n style?: ReferenceMapStyle | MapStyleVariant | StyleSpecification | string;\n\n /**\n * Define the language of the map. This can be done directly with a language ISO code (eg. \"en\")\n * or with a built-in shorthand (eg. Language.ENGLISH).\n * Note that this is equivalent to setting the `config.primaryLanguage` and will overwrite it.\n */\n language?: LanguageString;\n\n /**\n * Define the MapTiler Cloud API key to be used. This is strictly equivalent to setting\n * `config.apiKey` and will overwrite it.\n */\n apiKey?: string;\n\n /**\n * Shows or hides the MapTiler logo in the bottom left corner.\n *\n * For paid plans:\n * - `true` shows MapTiler logo\n * - `false` hodes MapTiler logo\n * - default: `false` (hide)\n *\n * For free plans: MapTiler logo always shows, regardless of the value.\n */\n maptilerLogo?: boolean;\n\n /**\n * Enables 3D terrain if `true`. (default: `false`)\n */\n terrain?: boolean;\n\n /**\n * Exaggeration factor of the terrain. (default: `1`, no exaggeration)\n */\n terrainExaggeration?: number;\n\n /**\n * Show the navigation control. (default: `true`, will hide if `false`)\n */\n navigationControl?: boolean | ControlPosition;\n\n /**\n * Show the terrain control. (default: `false`, will show if `true`)\n */\n terrainControl?: boolean | ControlPosition;\n\n /**\n * Show the geolocate control. (default: `true`, will hide if `false`)\n */\n geolocateControl?: boolean | ControlPosition;\n\n /**\n * Show the scale control. (default: `false`, will show if `true`)\n */\n scaleControl?: boolean | ControlPosition;\n\n /**\n * Show the full screen control. (default: `false`, will show if `true`)\n */\n fullscreenControl?: boolean | ControlPosition;\n\n /**\n * Method to position the map at a given geolocation. Only if:\n * - `hash` is `false`\n * - `center` is not provided\n *\n * If the value is `true` of `\"POINT\"` (given by `GeolocationType.POINT`) then the positionning uses the MapTiler Cloud\n * Geolocation to find the non-GPS location point.\n * The zoom level can be provided in the `Map` constructor with the `zoom` option or will be `13` if not provided.\n *\n * If the value is `\"COUNTRY\"` (given by `GeolocationType.COUNTRY`) then the map is centered around the bounding box of the country.\n * In this case, the `zoom` option will be ignored.\n *\n * If the value is `false`, no geolocation is performed and the map centering and zooming depends on other options or on\n * the built-in defaults.\n *\n * If this option is non-false and the options `center` is also provided, then `center` prevails.\n *\n * Default: `false`\n */\n geolocate?: (typeof GeolocationType)[keyof typeof GeolocationType] | boolean;\n};\n\n/**\n * The Map class can be instanciated to display a map in a `<div>`\n */\nexport class Map extends maplibregl.Map {\n private isTerrainEnabled = false;\n private terrainExaggeration = 1;\n private primaryLanguage: LanguageString | null = null;\n private secondaryLanguage: LanguageString | null = null;\n private terrainGrowing = false;\n private terrainFlattening = false;\n\n constructor(options: MapOptions) {\n if (options.apiKey) {\n config.apiKey = options.apiKey;\n }\n\n const style = styleToStyle(options.style);\n const hashPreConstructor = location.hash;\n\n if (!config.apiKey) {\n console.warn(\n \"MapTiler Cloud API key is not set. Visit https://maptiler.com and try Cloud for free!\"\n );\n }\n\n // calling the map constructor with full length style\n super({\n ...options,\n style,\n maplibreLogo: false,\n\n transformRequest: (url: string) => {\n let reqUrl = null;\n\n try {\n // The URL is expected to be absolute.\n // Yet, if it's local we just return it without assuming a 'base' url (in the URL constructor)\n // and we let the URL be locally resolved with a potential base path.\n reqUrl = new URL(url);\n } catch (e) {\n return {\n url,\n headers: {},\n };\n }\n\n if (reqUrl.host === defaults.maptilerApiHost) {\n if (!reqUrl.searchParams.has(\"key\")) {\n reqUrl.searchParams.append(\"key\", config.apiKey);\n }\n\n if (config.session) {\n reqUrl.searchParams.append(\"mtsid\", MAPTILER_SESSION_ID);\n }\n }\n\n return {\n url: reqUrl.href,\n headers: {},\n };\n },\n });\n\n this.primaryLanguage = options.language ?? config.primaryLanguage;\n this.secondaryLanguage = config.secondaryLanguage;\n this.terrainExaggeration =\n options.terrainExaggeration ?? this.terrainExaggeration;\n\n // Map centering and geolocation\n this.once(\"styledata\", async () => {\n // Not using geolocation centering if...\n\n // the geolcoate option is not provided or is falsy\n if (!options.geolocate) {\n return;\n }\n\n // ... a center is provided in options\n if (options.center) {\n return;\n }\n\n // ... the hash option is enabled and a hash is present in the URL\n if (options.hash && !!hashPreConstructor) {\n return;\n }\n\n // If the geolocation is set to COUNTRY:\n try {\n if (options.geolocate === GeolocationType.COUNTRY) {\n await this.fitToIpBounds();\n return;\n }\n } catch (e) {\n // not raising\n console.warn(e.message);\n }\n\n // As a fallback, we want to center the map on the visitor. First with IP geolocation...\n let ipLocatedCameraHash = null;\n try {\n await this.centerOnIpPoint(options.zoom);\n ipLocatedCameraHash = this.getCameraHash();\n } catch (e) {\n // not raising\n console.warn(e.message);\n }\n\n // A more precise localization\n\n // This more advanced localization is commented out because the easeTo animation\n // triggers an error if the terrain grow is enabled (due to being nable to project the center while moving)\n\n // Then, the get a more precise location, we rely on the browser location, but only if it was already granted\n // before (we don't want to ask wih a popup at launch time)\n const locationResult = await navigator.permissions.query({\n name: \"geolocation\",\n });\n\n if (locationResult.state === \"granted\") {\n navigator.geolocation.getCurrentPosition(\n // success callback\n (data) => {\n // If the user has already moved since the ip location, then we no longer want to move the center\n if (ipLocatedCameraHash !== this.getCameraHash()) {\n return;\n }\n\n if (this.terrain) {\n this.easeTo({\n center: [data.coords.longitude, data.coords.latitude],\n zoom: options.zoom || 12,\n duration: 2000,\n });\n } else {\n this.once(\"terrain\", () => {\n this.easeTo({\n center: [data.coords.longitude, data.coords.latitude],\n zoom: options.zoom || 12,\n duration: 2000,\n });\n });\n }\n },\n\n // error callback\n null,\n\n // options\n {\n maximumAge: 24 * 3600 * 1000, // a day in millisec\n timeout: 5000, // milliseconds\n enableHighAccuracy: false,\n }\n );\n }\n });\n\n // If the config includes language changing, we must update the map language\n this.on(\"styledata\", () => {\n this.setPrimaryLanguage(this.primaryLanguage);\n this.setSecondaryLanguage(this.secondaryLanguage);\n });\n\n // this even is in charge of reaplying the terrain elevation after the\n // style has changed because depending on the src/tgt style,\n // the style logic is not always able to resolve the application of terrain\n this.on(\"styledata\", () => {\n // the styling resolver did no manage to reaply the terrain,\n // so let's reload it\n if (this.getTerrain() === null && this.isTerrainEnabled) {\n this.enableTerrain(this.terrainExaggeration);\n }\n });\n\n // load the Right-to-Left text plugin (will happen only once)\n this.once(\"load\", async () => {\n enableRTL();\n });\n\n // Update logo and attibution\n this.once(\"load\", async () => {\n let tileJsonContent = { logo: null };\n\n try {\n const possibleSources = Object.keys(this.style.sourceCaches)\n .map((sourceName) => this.getSource(sourceName))\n .filter(\n (s: any) =>\n typeof s.url === \"string\" && s.url.includes(\"tiles.json\")\n );\n\n const styleUrl = new URL(\n (possibleSources[0] as maplibregl.VectorTileSource).url\n );\n\n if (!styleUrl.searchParams.has(\"key\")) {\n styleUrl.searchParams.append(\"key\", config.apiKey);\n }\n\n const tileJsonRes = await fetch(styleUrl.href);\n tileJsonContent = await tileJsonRes.json();\n } catch (e) {\n // No tiles.json found (should not happen on maintained styles)\n }\n\n // The attribution and logo must show when required\n if (\"logo\" in tileJsonContent && tileJsonContent.logo) {\n const logoURL: string = tileJsonContent.logo;\n\n this.addControl(\n new MaptilerLogoControl({ logoURL }),\n options.logoPosition\n );\n\n // if attribution in option is `false` but the the logo shows up in the tileJson, then the attribution must show anyways\n if (options.attributionControl === false) {\n this.addControl(new AttributionControl(options));\n }\n } else if (options.maptilerLogo) {\n this.addControl(new MaptilerLogoControl(), options.logoPosition);\n }\n\n // the other controls at init time but be after\n // (due to the async nature of logo control)\n\n // By default, no scale control\n if (options.scaleControl) {\n // default position, if not provided, is top left corner\n const position = (\n options.scaleControl === true || options.scaleControl === undefined\n ? \"bottom-right\"\n : options.scaleControl\n ) as ControlPosition;\n\n const scaleControl = new ScaleControl({ unit: config.unit });\n this.addControl(scaleControl, position);\n config.on(\"unit\", (unit) => {\n scaleControl.setUnit(unit);\n });\n }\n\n if (options.navigationControl !== false) {\n // default position, if not provided, is top left corner\n const position = (\n options.navigationControl === true ||\n options.navigationControl === undefined\n ? \"top-right\"\n : options.navigationControl\n ) as ControlPosition;\n this.addControl(new MaptilerNavigationControl(), position);\n }\n\n if (options.geolocateControl !== false) {\n // default position, if not provided, is top left corner\n const position = (\n options.geolocateControl === true ||\n options.geolocateControl === undefined\n ? \"top-right\"\n : options.geolocateControl\n ) as ControlPosition;\n\n this.addControl(\n // new maplibregl.GeolocateControl({\n new MaptilerGeolocateControl({\n positionOptions: {\n enableHighAccuracy: true,\n maximumAge: 0,\n timeout: 6000 /* 6 sec */,\n },\n fitBoundsOptions: {\n maxZoom: 15,\n },\n trackUserLocation: true,\n showAccuracyCircle: true,\n showUserLocation: true,\n }),\n position\n );\n }\n\n if (options.terrainControl) {\n // default position, if not provided, is top left corner\n const position = (\n options.terrainControl === true ||\n options.terrainControl === undefined\n ? \"top-right\"\n : options.terrainControl\n ) as ControlPosition;\n this.addControl(new MaptilerTerrainControl(), position);\n }\n\n // By default, no fullscreen control\n if (options.fullscreenControl) {\n // default position, if not provided, is top left corner\n const position = (\n options.fullscreenControl === true ||\n options.fullscreenControl === undefined\n ? \"top-right\"\n : options.fullscreenControl\n ) as ControlPosition;\n\n this.addControl(new FullscreenControl({}), position);\n }\n });\n\n // Creating a custom event: \"loadWithTerrain\"\n // that fires only once when both:\n // - the map has full loaded (corresponds to the the \"load\" event)\n // - the terrain has loaded (corresponds to the \"terrain\" event with terrain beion non-null)\n // This custom event is necessary to wait for when the map is instanciated with `terrain: true`\n // and some animation (flyTo, easeTo) are running from the begining.\n let loadEventTriggered = false;\n let terrainEventTriggered = false;\n let terrainEventData: LoadWithTerrainEvent = null;\n\n this.once(\"load\", (_) => {\n loadEventTriggered = true;\n if (terrainEventTriggered) {\n this.fire(\"loadWithTerrain\", terrainEventData);\n }\n });\n\n const terrainCallback = (evt) => {\n if (!evt.terrain) return;\n terrainEventTriggered = true;\n terrainEventData = {\n type: \"loadWithTerrain\",\n target: this,\n terrain: evt.terrain,\n };\n this.off(\"terrain\", terrainCallback);\n\n if (loadEventTriggered) {\n this.fire(\"loadWithTerrain\", terrainEventData as LoadWithTerrainEvent);\n }\n };\n\n this.on(\"terrain\", terrainCallback);\n\n // enable 3D terrain if provided in options\n if (options.terrain) {\n this.enableTerrain(\n options.terrainExaggeration ?? this.terrainExaggeration\n );\n }\n }\n\n /**\n * Awaits for _this_ Map instance to be \"loaded\" and returns a Promise to the Map.\n * If _this_ Map instance is already loaded, the Promise is resolved directly,\n * otherwise, it is resolved as a result of the \"load\" event.\n * @returns\n */\n async onLoadAsync() {\n return new Promise<Map>((resolve, reject) => {\n if (this.loaded()) {\n return resolve(this);\n }\n\n this.once(\"load\", (_) => {\n resolve(this);\n });\n });\n }\n\n /**\n * Awaits for _this_ Map instance to be \"loaded\" as well as with terrain being non-null for the first time\n * and returns a Promise to the Map.\n * If _this_ Map instance is already loaded with terrain, the Promise is resolved directly,\n * otherwise, it is resolved as a result of the \"loadWithTerrain\" event.\n * @returns\n */\n async onLoadWithTerrainAsync() {\n return new Promise<Map>((resolve, reject) => {\n if (this.loaded() && this.terrain) {\n return resolve(this);\n }\n\n this.once(\"loadWithTerrain\", (_) => {\n resolve(this);\n });\n });\n }\n\n /**\n * Update the style of the map.\n * Can be:\n * - a full style URL (possibly with API key)\n * - a shorthand with only the MapTIler style name (eg. `\"streets-v2\"`)\n * - a longer form with the prefix `\"maptiler://\"` (eg. `\"maptiler://streets-v2\"`)\n * @param style\n * @param options\n * @returns\n */\n setStyle(\n style: ReferenceMapStyle | MapStyleVariant | StyleSpecification | string,\n options?: StyleSwapOptions & StyleOptions\n ) {\n return super.setStyle(styleToStyle(style), options);\n }\n\n /**\n * Define the primary language of the map. Note that not all the languages shorthands provided are available.\n * This function is a short for `.setPrimaryLanguage()`\n * @param language\n */\n setLanguage(language: LanguageString = defaults.primaryLanguage) {\n if (language === Language.AUTO) {\n return this.setLanguage(getBrowserLanguage());\n }\n this.setPrimaryLanguage(language);\n }\n\n /**\n * Define the primary language of the map. Note that not all the languages shorthands provided are available.\n * @param language\n */\n setPrimaryLanguage(language: LanguageString = defaults.primaryLanguage) {\n if (!isLanguageSupported(language as string)) {\n return;\n }\n\n this.primaryLanguage = language;\n\n this.onStyleReady(() => {\n if (language === Language.AUTO) {\n return this.setPrimaryLanguage(getBrowserLanguage());\n }\n\n const layers = this.getStyle().layers;\n\n // detects pattern like \"{name:somelanguage}\" with loose spacing\n const strLanguageRegex = /^\\s*{\\s*name\\s*(:\\s*(\\S*))?\\s*}$/;\n\n // detects pattern like \"name:somelanguage\" with loose spacing\n const strLanguageInArrayRegex = /^\\s*name\\s*(:\\s*(\\S*))?\\s*$/;\n\n // for string based bilingual lang such as \"{name:latin} {name:nonlatin}\" or \"{name:latin} {name}\"\n const strBilingualRegex =\n /^\\s*{\\s*name\\s*(:\\s*(\\S*))?\\s*}(\\s*){\\s*name\\s*(:\\s*(\\S*))?\\s*}$/;\n\n // Regex to capture when there are more info, such as mountains elevation with unit m/ft\n const strMoreInfoRegex = /^(.*)({\\s*name\\s*(:\\s*(\\S*))?\\s*})(.*)$/;\n\n const langStr = language ? `name:${language}` : \"name\"; // to handle local lang\n const replacer = [\n \"case\",\n [\"has\", langStr],\n [\"get\", langStr],\n [\"get\", \"name:latin\"],\n ];\n\n for (let i = 0; i < layers.length; i += 1) {\n const layer = layers[i];\n const layout = layer.layout;\n\n if (!layout) {\n continue;\n }\n\n if (!layout[\"text-field\"]) {\n continue;\n }\n\n const textFieldLayoutProp = this.getLayoutProperty(\n layer.id,\n \"text-field\"\n );\n\n // Note:\n // The value of the 'text-field' property can take multiple shape;\n // 1. can be an array with 'concat' on its first element (most likely means bilingual)\n // 2. can be an array with 'get' on its first element (monolingual)\n // 3. can be a string of shape '{name:latin}'\n // 4. can be a string referencing another prop such as '{housenumber}' or '{ref}'\n //\n // The case 1, 2 and 3 will be updated while maintaining their original type and shape.\n // The case 3 will not be updated\n\n let regexMatch;\n\n // This is case 1\n if (\n Array.isArray(textFieldLayoutProp) &&\n textFieldLayoutProp.length >= 2 &&\n textFieldLayoutProp[0].trim().toLowerCase() === \"concat\"\n ) {\n const newProp = textFieldLayoutProp.slice(); // newProp is Array\n // The style could possibly have defined more than 2 concatenated language strings but we only want to edit the first\n // The style could also define that there are more things being concatenated and not only languages\n\n for (let j = 0; j < textFieldLayoutProp.length; j += 1) {\n const elem = textFieldLayoutProp[j];\n\n // we are looking for an elem of shape '{name:somelangage}' (string) of `[\"get\", \"name:somelanguage\"]` (array)\n\n // the entry of of shape '{name:somelangage}', possibly with loose spacing\n if (\n (typeof elem === \"string\" || elem instanceof String) &&\n strLanguageRegex.exec(elem.toString())\n ) {\n newProp[j] = replacer;\n break; // we just want to update the primary language\n }\n // the entry is of an array of shape `[\"get\", \"name:somelanguage\"]`\n else if (\n Array.isArray(elem) &&\n elem.length >= 2 &&\n elem[0].trim().toLowerCase() === \"get\" &&\n strLanguageInArrayRegex.exec(elem[1].toString())\n ) {\n newProp[j] = replacer;\n break; // we just want to update the primary language\n } else if (\n Array.isArray(elem) &&\n elem.length === 4 &&\n elem[0].trim().toLowerCase() === \"case\"\n ) {\n newProp[j] = replacer;\n break; // we just want to update the primary language\n }\n }\n\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n\n // This is case 2\n else if (\n Array.isArray(textFieldLayoutProp) &&\n textFieldLayoutProp.length >= 2 &&\n textFieldLayoutProp[0].trim().toLowerCase() === \"get\" &&\n strLanguageInArrayRegex.exec(textFieldLayoutProp[1].toString())\n ) {\n const newProp = replacer;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n\n // This is case 3\n else if (\n (typeof textFieldLayoutProp === \"string\" ||\n textFieldLayoutProp instanceof String) &&\n strLanguageRegex.exec(textFieldLayoutProp.toString())\n ) {\n const newProp = replacer;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n } else if (\n Array.isArray(textFieldLayoutProp) &&\n textFieldLayoutProp.length === 4 &&\n textFieldLayoutProp[0].trim().toLowerCase() === \"case\"\n ) {\n const newProp = replacer;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n } else if (\n (typeof textFieldLayoutProp === \"string\" ||\n textFieldLayoutProp instanceof String) &&\n (regexMatch = strBilingualRegex.exec(\n textFieldLayoutProp.toString()\n )) !== null\n ) {\n const newProp = `{${langStr}}${regexMatch[3]}{name${\n regexMatch[4] || \"\"\n }}`;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n } else if (\n (typeof textFieldLayoutProp === \"string\" ||\n textFieldLayoutProp instanceof String) &&\n (regexMatch = strMoreInfoRegex.exec(\n textFieldLayoutProp.toString()\n )) !== null\n ) {\n const newProp = `${regexMatch[1]}{${langStr}}${regexMatch[5]}`;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n }\n });\n }\n\n /**\n * Define the secondary language of the map. Note that this is not supported by all the map styles\n * Note that most styles do not allow a secondary language and this function only works if the style allows (no force adding)\n * @param language\n */\n setSecondaryLanguage(language: LanguageString = defaults.secondaryLanguage) {\n if (!isLanguageSupported(language as string)) {\n return;\n }\n\n this.secondaryLanguage = language;\n\n this.onStyleReady(() => {\n if (language === Language.AUTO) {\n return this.setSecondaryLanguage(getBrowserLanguage());\n }\n\n const layers = this.getStyle().layers;\n\n // detects pattern like \"{name:somelanguage}\" with loose spacing\n const strLanguageRegex = /^\\s*{\\s*name\\s*(:\\s*(\\S*))?\\s*}$/;\n\n // detects pattern like \"name:somelanguage\" with loose spacing\n const strLanguageInArrayRegex = /^\\s*name\\s*(:\\s*(\\S*))?\\s*$/;\n\n // for string based bilingual lang such as \"{name:latin} {name:nonlatin}\" or \"{name:latin} {name}\"\n const strBilingualRegex =\n /^\\s*{\\s*name\\s*(:\\s*(\\S*))?\\s*}(\\s*){\\s*name\\s*(:\\s*(\\S*))?\\s*}$/;\n\n let regexMatch;\n\n for (let i = 0; i < layers.length; i += 1) {\n const layer = layers[i];\n const layout = layer.layout;\n\n if (!layout) {\n continue;\n }\n\n if (!layout[\"text-field\"]) {\n continue;\n }\n\n const textFieldLayoutProp = this.getLayoutProperty(\n layer.id,\n \"text-field\"\n );\n\n let newProp;\n\n // Note:\n // The value of the 'text-field' property can take multiple shape;\n // 1. can be an array with 'concat' on its first element (most likely means bilingual)\n // 2. can be an array with 'get' on its first element (monolingual)\n // 3. can be a string of shape '{name:latin}'\n // 4. can be a string referencing another prop such as '{housenumber}' or '{ref}'\n //\n // Only the case 1 will be updated because we don't want to change the styling (read: add a secondary language where the original styling is only displaying 1)\n\n // This is case 1\n if (\n Array.isArray(textFieldLayoutProp) &&\n textFieldLayoutProp.length >= 2 &&\n textFieldLayoutProp[0].trim().toLowerCase() === \"concat\"\n ) {\n newProp = textFieldLayoutProp.slice(); // newProp is Array\n // The style could possibly have defined more than 2 concatenated language strings but we only want to edit the first\n // The style could also define that there are more things being concatenated and not only languages\n\n let languagesAlreadyFound = 0;\n\n for (let j = 0; j < textFieldLayoutProp.length; j += 1) {\n const elem = textFieldLayoutProp[j];\n\n // we are looking for an elem of shape '{name:somelangage}' (string) of `[\"get\", \"name:somelanguage\"]` (array)\n\n // the entry of of shape '{name:somelangage}', possibly with loose spacing\n if (\n (typeof elem === \"string\" || elem instanceof String) &&\n strLanguageRegex.exec(elem.toString())\n ) {\n if (languagesAlreadyFound === 1) {\n newProp[j] = `{name:${language}}`;\n break; // we just want to update the secondary language\n }\n\n languagesAlreadyFound += 1;\n }\n // the entry is of an array of shape `[\"get\", \"name:somelanguage\"]`\n else if (\n Array.isArray(elem) &&\n elem.length >= 2 &&\n elem[0].trim().toLowerCase() === \"get\" &&\n strLanguageInArrayRegex.exec(elem[1].toString())\n ) {\n if (languagesAlreadyFound === 1) {\n newProp[j][1] = `name:${language}`;\n break; // we just want to update the secondary language\n }\n\n languagesAlreadyFound += 1;\n } else if (\n Array.isArray(elem) &&\n elem.length === 4 &&\n elem[0].trim().toLowerCase() === \"case\"\n ) {\n if (languagesAlreadyFound === 1) {\n newProp[j] = [\"get\", `name:${language}`]; // the situation with 'case' is supposed to only happen with the primary lang\n break; // but in case a styling also does that for secondary...\n }\n\n languagesAlreadyFound += 1;\n }\n }\n\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n\n // the language (both first and second) are defined into a single string model\n else if (\n (typeof textFieldLayoutProp === \"string\" ||\n textFieldLayoutProp instanceof String) &&\n (regexMatch = strBilingualRegex.exec(\n textFieldLayoutProp.toString()\n )) !== null\n ) {\n const langStr = language ? `name:${language}` : \"name\"; // to handle local lang\n newProp = `{name${regexMatch[1] || \"\"}}${regexMatch[3]}{${langStr}}`;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n }\n });\n }\n\n /**\n * Get the primary language\n * @returns\n */\n getPrimaryLanguage(): LanguageString {\n return this.primaryLanguage;\n }\n\n /**\n * Get the secondary language\n * @returns\n */\n getSecondaryLanguage(): LanguageString {\n return this.secondaryLanguage;\n }\n\n /**\n * Get the exaggeration factor applied to the terrain\n * @returns\n */\n getTerrainExaggeration(): number {\n return this.terrainExaggeration;\n }\n\n /**\n * Know if terrian is enabled or not\n * @returns\n */\n hasTerrain(): boolean {\n return this.isTerrainEnabled;\n }\n\n private growTerrain(exaggeration, durationMs = 1000) {\n // This method assumes the terrain is already built\n if (!this.terrain) {\n return;\n }\n\n const startTime = performance.now();\n // This is supposedly 0, but it could be something else (e.g. already in the middle of growing, or user defined other)\n const currentExaggeration = this.terrain.exaggeration;\n const deltaExaggeration = exaggeration - currentExaggeration;\n\n // This is again called in a requestAnimationFrame ~loop, until the terrain has grown enough\n // that it has reached the target\n const updateExaggeration = () => {\n if (!this.terrain) {\n return;\n }\n\n // If the flattening animation is triggered while the growing animation\n // is running, then the flattening animation is stopped\n if (this.terrainFlattening) {\n return;\n }\n\n // normalized value in interval [0, 1] of where we are currently in the animation loop\n const positionInLoop = (performance.now() - startTime) / durationMs;\n\n // The animation goes on until we reached 99% of the growing sequence duration\n if (positionInLoop < 0.99) {\n const exaggerationFactor = 1 - Math.pow(1 - positionInLoop, 4);\n const newExaggeration =\n currentExaggeration + exaggerationFactor * deltaExaggeration;\n this.terrain.exaggeration = newExaggeration;\n requestAnimationFrame(updateExaggeration);\n } else {\n this.terrainGrowing = false;\n this.terrainFlattening = false;\n this.terrain.exaggeration = exaggeration;\n }\n\n this.triggerRepaint();\n };\n\n this.terrainGrowing = true;\n this.terrainFlattening = false;\n requestAnimationFrame(updateExaggeration);\n }\n\n /**\n * Enables the 3D terrain visualization\n * @param exaggeration\n * @returns\n */\n enableTerrain(exaggeration = this.terrainExaggeration) {\n if (exaggeration < 0) {\n console.warn(\"Terrain exaggeration cannot be negative.\");\n return;\n }\n\n // This function is mapped to a map \"data\" event. It checks that the terrain\n // tiles are loaded and when so, it starts an animation to make the terrain grow\n const dataEventTerrainGrow = async (evt: MapTerrainDataEvent) => {\n if (!this.terrain) {\n return;\n }\n\n if (\n evt.type !== \"data\" ||\n evt.dataType !== \"source\" ||\n !(\"source\" in evt)\n ) {\n return;\n }\n\n if (evt.sourceId !== \"maptiler-terrain\") {\n return;\n }\n\n const source = evt.source;\n\n if (source.type !== \"raster-dem\") {\n return;\n }\n\n if (!evt.isSourceLoaded) {\n return;\n }\n\n // We shut this event off because we want it to happen only once.\n // Yet, we cannot use the \"once\" method because only the last event of the series\n // has `isSourceLoaded` true\n this.off(\"data\", dataEventTerrainGrow);\n\n this.growTerrain(exaggeration);\n };\n\n // This is put into a function so that it can be called regardless\n // of the loading state of _this_ the map instance\n const addTerrain = () => {\n // When style is changed,\n this.isTerrainEnabled = true;\n this.terrainExaggeration = exaggeration;\n\n // Mapping it to the \"data\" event so that we can check that the terrain\n // growing starts only when terrain tiles are loaded (to reduce glitching)\n this.on(\"data\", dataEventTerrainGrow);\n\n this.addSource(defaults.terrainSourceId, {\n type: \"raster-dem\",\n url: defaults.terrainSourceURL,\n });\n\n // Setting up the terrain with a 0 exaggeration factor\n // so it loads ~seamlessly and then can grow from there\n this.setTerrain({\n source: defaults.terrainSourceId,\n exaggeration: 0,\n });\n };\n\n // The terrain has already been loaded,\n // we just update the exaggeration.\n if (this.getTerrain()) {\n this.isTerrainEnabled = true;\n this.growTerrain(exaggeration);\n return;\n }\n\n if (this.loaded() || this.isTerrainEnabled) {\n addTerrain();\n } else {\n this.once(\"load\", () => {\n if (this.getTerrain() && this.getSource(defaults.terrainSourceId)) {\n return;\n }\n addTerrain();\n });\n }\n }\n\n /**\n * Disable the 3D terrain visualization\n */\n disableTerrain() {\n // It could be disabled already\n if (!this.terrain) {\n return;\n }\n\n this.isTerrainEnabled = false;\n // this.stopFlattening = false;\n\n // Duration of the animation in millisec\n const animationLoopDuration = 1 * 1000;\n const startTime = performance.now();\n // This is supposedly 0, but it could be something else (e.g. already in the middle of growing, or user defined other)\n const currentExaggeration = this.terrain.exaggeration;\n\n // This is again called in a requestAnimationFrame ~loop, until the terrain has grown enough\n // that it has reached the target\n const updateExaggeration = () => {\n if (!this.terrain) {\n return;\n }\n\n // If the growing animation is triggered while flattening,\n // then we exist the flatening\n if (this.terrainGrowing) {\n return;\n }\n\n // normalized value in interval [0, 1] of where we are currently in the animation loop\n const positionInLoop =\n (performance.now() - startTime) / animationLoopDuration;\n\n // The animation goes on until we reached 99% of the growing sequence duration\n if (positionInLoop < 0.99) {\n const exaggerationFactor = Math.pow(1 - positionInLoop, 4);\n const newExaggeration = currentExaggeration * exaggerationFactor;\n this.terrain.exaggeration = newExaggeration;\n requestAnimationFrame(updateExaggeration);\n } else {\n this.terrain.exaggeration = 0;\n this.terrainGrowing = false;\n this.terrainFlattening = false;\n this.setTerrain(null);\n if (this.getSource(defaults.terrainSourceId)) {\n this.removeSource(defaults.terrainSourceId);\n }\n }\n\n this.triggerRepaint();\n };\n\n this.terrainGrowing = false;\n this.terrainFlattening = true;\n requestAnimationFrame(updateExaggeration);\n }\n\n /**\n * Sets the 3D terrain exageration factor.\n * If the terrain was not enabled prior to the call of this method,\n * the method `.enableTerrain()` will be called.\n * If `animate` is `true`, the terrain transformation will be animated in the span of 1 second.\n * If `animate` is `false`, no animated transition to the newly defined exaggeration.\n * @param exaggeration\n * @param animate\n */\n setTerrainExaggeration(exaggeration: number, animate = true) {\n if (!animate && this.terrain) {\n this.terrainExaggeration = exaggeration;\n this.terrain.exaggeration = exaggeration;\n this.triggerRepaint();\n } else {\n this.enableTerrain(exaggeration);\n }\n }\n\n /**\n * Perform an action when the style is ready. It could be at the moment of calling this method\n * or later.\n * @param cb\n */\n private onStyleReady(cb) {\n if (this.isStyleLoaded()) {\n cb();\n } else {\n this.once(\"styledata\", () => {\n cb();\n });\n }\n }\n\n async fitToIpBounds() {\n const ipGeolocateResult = await geolocation.info();\n this.fitBounds(\n ipGeolocateResult.country_bounds as [number, number, number, number],\n {\n duration: 0,\n padding: 100,\n }\n );\n }\n\n async centerOnIpPoint(zoom: number | undefined) {\n const ipGeolocateResult = await geolocation.info();\n this.jumpTo({\n center: [ipGeolocateResult.longitude, ipGeolocateResult.latitude],\n zoom: zoom || 11,\n });\n }\n\n getCameraHash() {\n const hashBin = new Float32Array(5);\n const center = this.getCenter();\n hashBin[0] = center.lng;\n hashBin[1] = center.lat;\n hashBin[2] = this.getZoom();\n hashBin[3] = this.getPitch();\n hashBin[4] = this.getBearing();\n return Base64.fromUint8Array(new Uint8Array(hashBin.buffer));\n }\n\n /**\n * Get the SDK config object.\n * This is convenient to dispatch the SDK configuration to externally built layers\n * that do not directly have access to the SDK configuration but do have access to a Map instance.\n * @returns\n */\n getSdkConfig(): SdkConfig {\n return config;\n }\n\n /**\n * Get the MapTiler session ID. Convenient to dispatch to externaly built component\n * that do not directly have access to the SDK configuration but do have access to a Map instance.\n * @returns\n */\n getMaptilerSessionId(): string {\n return MAPTILER_SESSION_ID;\n }\n}\n","/**\n * This is an extension of MapLibre Marker to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class Marker extends maplibregl.Marker {\n addTo(map: Map | MapMLGL): this {\n return super.addTo(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre Popup to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class Popup extends maplibregl.Popup {\n addTo(map: Map | MapMLGL): this {\n return super.addTo(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre Style to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL, StyleOptions } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class Style extends maplibregl.Style {\n constructor(map: Map, options: StyleOptions = {}) {\n super(map as MapMLGL, options);\n }\n}\n","/**\n * This is an extension of MapLibre CanvasSource to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class CanvasSource extends maplibregl.CanvasSource {\n onAdd(map: Map | MapMLGL) {\n super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre GeoJSONSource to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class GeoJSONSource extends maplibregl.GeoJSONSource {\n onAdd(map: Map | MapMLGL) {\n super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre ImageSource to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class ImageSource extends maplibregl.ImageSource {\n onAdd(map: Map | MapMLGL) {\n super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre RasterTileSource to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class RasterTileSource extends maplibregl.RasterTileSource {\n onAdd(map: Map | MapMLGL) {\n super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre RasterDEMTileSource to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class RasterDEMTileSource extends maplibregl.RasterDEMTileSource {\n onAdd(map: Map | MapMLGL) {\n super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre VectorTileSource to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class VectorTileSource extends maplibregl.VectorTileSource {\n onAdd(map: Map | MapMLGL) {\n super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre VideoSource to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class VideoSource extends maplibregl.VideoSource {\n onAdd(map: Map | MapMLGL) {\n super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre TerrainControl to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class TerrainControl extends maplibregl.TerrainControl {\n onAdd(map: Map | MapMLGL) {\n return super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is TypeScript rewrite of the Point class to use instead of the version imported in MapLibre.\n * It also uses a class instead of prototypes.\n */\n\n/**\n * Row major 2x2 matrix\n */\nexport type Matrix2 = [number, number, number, number];\n\n/**\n * a point\n * @param x\n * @param y\n */\nexport class Point {\n public x: number;\n public y: number;\n\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n\n private _matMult(m: Matrix2): Point {\n const x = m[0] * this.x + m[1] * this.y;\n const y = m[2] * this.x + m[3] * this.y;\n this.x = x;\n this.y = y;\n return this;\n }\n\n private _add(p: Point): Point {\n this.x += p.x;\n this.y += p.y;\n return this;\n }\n\n private _sub(p: Point): Point {\n this.x -= p.x;\n this.y -= p.y;\n return this;\n }\n\n private _mult(k: number): Point {\n this.x *= k;\n this.y *= k;\n return this;\n }\n\n private _div(k: number): Point {\n this.x /= k;\n this.y /= k;\n return this;\n }\n\n private _multByPoint(p: Point): Point {\n this.x *= p.x;\n this.y *= p.y;\n return this;\n }\n\n private _divByPoint(p: Point): Point {\n this.x /= p.x;\n this.y /= p.y;\n return this;\n }\n\n private _unit(): Point {\n this._div(this.mag());\n return this;\n }\n\n private _perp(): Point {\n const y = this.y;\n this.y = this.x;\n this.x = -y;\n return this;\n }\n\n private _rotate(angle: number): Point {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const x = cos * this.x - sin * this.y;\n const y = sin * this.x + cos * this.y;\n this.x = x;\n this.y = y;\n return this;\n }\n\n private _rotateAround(angle: number, p: Point): Point {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y);\n const y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);\n this.x = x;\n this.y = y;\n return this;\n }\n\n private _round(): Point {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n return this;\n }\n\n /**\n * Clone this point, returning a new point that can be modified\n * without affecting the old one.\n * @return {Point} the clone\n */\n clone(): Point {\n return new Point(this.x, this.y);\n }\n\n /**\n * Add this point's x & y coordinates to another point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n add(p: Point): Point {\n return this.clone()._add(p);\n }\n\n /**\n * Subtract this point's x & y coordinates to from point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n sub(p: Point): Point {\n return this.clone()._sub(p);\n }\n\n /**\n * Multiply this point's x & y coordinates by point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n multByPoint(p: Point): Point {\n return this.clone()._multByPoint(p);\n }\n\n /**\n * Divide this point's x & y coordinates by point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n divByPoint(p: Point): Point {\n return this.clone()._divByPoint(p);\n }\n\n /**\n * Multiply this point's x & y coordinates by a factor,\n * yielding a new point.\n * @param {Number} k factor\n * @return {Point} output point\n */\n mult(k: number): Point {\n return this.clone()._mult(k);\n }\n\n /**\n * Divide this point's x & y coordinates by a factor,\n * yielding a new point.\n * @param {Point} k factor\n * @return {Point} output point\n */\n div(k: number): Point {\n return this.clone()._div(k);\n }\n\n /**\n * Rotate this point around the 0, 0 origin by an angle a,\n * given in radians\n * @param {Number} a angle to rotate around, in radians\n * @return {Point} output point\n */\n rotate(a: number): Point {\n return this.clone()._rotate(a);\n }\n\n /**\n * Rotate this point around p point by an angle a,\n * given in radians\n * @param {Number} a angle to rotate around, in radians\n * @param {Point} p Point to rotate around\n * @return {Point} output point\n */\n rotateAround(a: number, p: Point): Point {\n return this.clone()._rotateAround(a, p);\n }\n\n /**\n * Multiply this point by a 4x1 transformation matrix\n * @param {Array<Number>} m transformation matrix\n * @return {Point} output point\n */\n matMult(m: Matrix2): Point {\n return this.clone()._matMult(m);\n }\n\n /**\n * Calculate this point but as a unit vector from 0, 0, meaning\n * that the distance from the resulting point to the 0, 0\n * coordinate will be equal to 1 and the angle from the resulting\n * point to the 0, 0 coordinate will be the same as before.\n * @return {Point} unit vector point\n */\n unit(): Point {\n return this.clone()._unit();\n }\n\n /**\n * Compute a perpendicular point, where the new y coordinate\n * is the old x coordinate and the new x coordinate is the old y\n * coordinate multiplied by -1\n * @return {Point} perpendicular point\n */\n perp(): Point {\n return this.clone()._perp();\n }\n\n /**\n * Return a version of this point with the x & y coordinates\n * rounded to integers.\n * @return {Point} rounded point\n */\n round(): Point {\n return this.clone()._round();\n }\n\n /**\n * Return the magnitude of this point: this is the Euclidean\n * distance from the 0, 0 coordinate to this point's x and y\n * coordinates.\n * @return {Number} magnitude\n */\n mag(): number {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n\n /**\n * Judge whether this point is equal to another point, returning\n * true or false.\n * @param {Point} other the other point\n * @return {boolean} whether the points are equal\n */\n equals(other): boolean {\n return this.x === other.x && this.y === other.y;\n }\n\n /**\n * Calculate the distance from this point to another point\n * @param {Point} p the other point\n * @return {Number} distance\n */\n dist(p): number {\n return Math.sqrt(this.distSqr(p));\n }\n\n /**\n * Calculate the distance from this point to another point,\n * without the square root step. Useful if you're comparing\n * relative distances.\n * @param {Point} p the other point\n * @return {Number} distance\n */\n distSqr(p): number {\n const dx = p.x - this.x;\n const dy = p.y - this.y;\n return dx * dx + dy * dy;\n }\n\n /**\n * Get the angle from the 0, 0 coordinate to this point, in radians\n * coordinates.\n * @return {Number} angle\n */\n angle(): number {\n return Math.atan2(this.y, this.x);\n }\n\n /**\n * Get the angle from this point to another point, in radians\n * @param {Point} b the other point\n * @return {Number} angle\n */\n angleTo(b: Point): number {\n return Math.atan2(this.y - b.y, this.x - b.x);\n }\n\n /**\n * Get the angle between this point and another point, in radians\n * @param {Point} b the other point\n * @return {Number} angle\n */\n angleWith(b: Point): number {\n return this.angleWithSep(b.x, b.y);\n }\n\n /*\n * Find the angle of the two vectors, solving the formula for\n * the cross product a x b = |a||b|sin(θ) for θ.\n * @param {Number} x the x-coordinate\n * @param {Number} y the y-coordinate\n * @return {Number} the angle in radians\n */\n angleWithSep(x: number, y: number): number {\n return Math.atan2(this.x * y - this.y * x, this.x * x + this.y * y);\n }\n\n /**\n * Construct a point from an array if necessary, otherwise if the input\n * is already a Point, or an unknown type, return it unchanged\n * @param {Array<number> | Point} a any kind of input value\n * @return {Point} constructed point, or passed-through value.\n * @example\n * // this\n * var point = Point.convert([0, 1]);\n * // is equivalent to\n * var point = new Point(0, 1);\n */\n static convert(a: Point | Array<number>) {\n if (a instanceof Point) {\n return a;\n }\n if (Array.isArray(a)) {\n return new Point(a[0], a[1]);\n }\n return a;\n }\n}\n","/**\n * Maplibre export first, then extensions can overload the exports.\n */\nexport * from \"maplibre-gl\";\n\n/**\n * To perform explicit named export so that they are included in the UMD bundle\n */\n// import * as ML from \"maplibre-gl\";\n\nimport maplibregl from \"maplibre-gl\";\n\nconst {\n supported,\n setRTLTextPlugin,\n getRTLTextPluginStatus,\n LngLat,\n LngLatBounds,\n MercatorCoordinate,\n Evented,\n AJAXError,\n prewarm,\n clearPrewarmedResources,\n version,\n workerCount,\n maxParallelImageRequests,\n workerUrl,\n addProtocol,\n removeProtocol,\n} = maplibregl;\n\n// We still want to export maplibregl.Map, but as a different name\nconst MapMLGL = maplibregl.Map;\nconst MarkerMLGL = maplibregl.Marker;\nconst PopupMLGL = maplibregl.Popup;\nconst StyleMLGL = maplibregl.Style;\nconst CanvasSourceMLGL = maplibregl.CanvasSource;\nconst GeoJSONSourceMLGL = maplibregl.GeoJSONSource;\nconst ImageSourceMLGL = maplibregl.ImageSource;\nconst RasterTileSourceMLGL = maplibregl.RasterTileSource;\nconst RasterDEMTileSourceMLGL = maplibregl.RasterDEMTileSource;\nconst VectorTileSourceMLGL = maplibregl.VectorTileSource;\nconst VideoSourceMLGL = maplibregl.VideoSource;\nconst NavigationControlMLGL = maplibregl.NavigationControl;\nconst GeolocateControlMLGL = maplibregl.GeolocateControl;\nconst AttributionControlMLGL = maplibregl.AttributionControl;\nconst LogoControlMLGL = maplibregl.LogoControl;\nconst ScaleControlMLGL = maplibregl.ScaleControl;\nconst FullscreenControlMLGL = maplibregl.FullscreenControl;\nconst TerrainControlMLGL = maplibregl.TerrainControl;\n\nexport {\n supported,\n setRTLTextPlugin,\n getRTLTextPluginStatus,\n PopupMLGL,\n MarkerMLGL,\n StyleMLGL,\n LngLat,\n LngLatBounds,\n MercatorCoordinate,\n Evented,\n AJAXError,\n CanvasSourceMLGL,\n GeoJSONSourceMLGL,\n ImageSourceMLGL,\n RasterDEMTileSourceMLGL,\n RasterTileSourceMLGL,\n VectorTileSourceMLGL,\n VideoSourceMLGL,\n prewarm,\n clearPrewarmedResources,\n version,\n workerCount,\n maxParallelImageRequests,\n workerUrl,\n addProtocol,\n removeProtocol,\n MapMLGL,\n};\n\n// Exporting types of class instances from MapLibre:\nexport type NavigationControlMLGL = InstanceType<typeof NavigationControlMLGL>;\nexport type GeolocateControlMLGL = InstanceType<typeof GeolocateControlMLGL>;\nexport type AttributionControlMLGL = InstanceType<\n typeof AttributionControlMLGL\n>;\nexport type LogoControlMLGL = InstanceType<typeof LogoControlMLGL>;\nexport type ScaleControlMLGL = InstanceType<typeof ScaleControlMLGL>;\nexport type FullscreenControlMLGL = InstanceType<typeof FullscreenControlMLGL>;\nexport type TerrainControlMLGL = InstanceType<typeof TerrainControlMLGL>;\nexport type MarkerMLGL = InstanceType<typeof MarkerMLGL>;\nexport type PopupMLGL = InstanceType<typeof PopupMLGL>;\nexport type StyleMLGL = InstanceType<typeof StyleMLGL>;\nexport type LngLat = InstanceType<typeof LngLat>;\nexport type LngLatBounds = InstanceType<typeof LngLatBounds>;\nexport type MercatorCoordinate = InstanceType<typeof MercatorCoordinate>;\nexport type Evented = InstanceType<typeof Evented>;\nexport type AJAXError = InstanceType<typeof AJAXError>;\nexport type CanvasSourceMLGL = InstanceType<typeof CanvasSourceMLGL>;\nexport type GeoJSONSourceMLGL = InstanceType<typeof GeoJSONSourceMLGL>;\nexport type ImageSourceMLGL = InstanceType<typeof ImageSourceMLGL>;\nexport type RasterDEMTileSourceMLGL = InstanceType<\n typeof RasterDEMTileSourceMLGL\n>;\nexport type RasterTileSourceMLGL = InstanceType<typeof RasterTileSourceMLGL>;\nexport type VectorTileSourceMLGL = InstanceType<typeof VectorTileSourceMLGL>;\nexport type VideoSourceMLGL = InstanceType<typeof VideoSourceMLGL>;\nexport type MapMLGL = InstanceType<typeof MapMLGL>;\n\n// SDK specific\nimport { Map, GeolocationType } from \"./Map\";\nimport type { MapOptions, LoadWithTerrainEvent } from \"./Map\";\n\nimport { Marker } from \"./Marker\";\nimport { Popup } from \"./Popup\";\nimport { Style } from \"./Style\";\nimport { CanvasSource } from \"./CanvasSource\";\nimport { GeoJSONSource } from \"./GeoJSONSource\";\nimport { ImageSource } from \"./ImageSource\";\nimport { RasterTileSource } from \"./RasterTileSource\";\nimport { RasterDEMTileSource } from \"./RasterDEMTileSource\";\nimport { VectorTileSource } from \"./VectorTileSource\";\nimport { VideoSource } from \"./VideoSource\";\nimport { NavigationControl } from \"./NavigationControl\";\nimport { GeolocateControl } from \"./GeolocateControl\";\nimport { AttributionControl } from \"./AttributionControl\";\nimport { LogoControl } from \"./LogoControl\";\nimport { ScaleControl } from \"./ScaleControl\";\nimport { FullscreenControl } from \"./FullscreenControl\";\nimport { TerrainControl } from \"./TerrainControl\";\n\n// Import of modified versions of the controls\nimport { MaptilerGeolocateControl } from \"./MaptilerGeolocateControl\";\nimport { MaptilerLogoControl } from \"./MaptilerLogoControl\";\nimport { MaptilerTerrainControl } from \"./MaptilerTerrainControl\";\nimport { MaptilerNavigationControl } from \"./MaptilerNavigationControl\";\n\n// importing client functions to expose them as part of the SDK\nimport type {\n BBox,\n Position,\n GeocodingOptions,\n CoordinatesSearchOptions,\n CenteredStaticMapOptions,\n AutomaticStaticMapOptions,\n BoundedStaticMapOptions,\n} from \"@maptiler/client\";\n\nimport {\n geocoding,\n geolocation,\n coordinates,\n data,\n staticMaps,\n ServiceError,\n LanguageGeocoding,\n LanguageGeocodingString,\n ReferenceMapStyle,\n MapStyle,\n MapStyleVariant,\n} from \"@maptiler/client\";\n\nimport type { MapStyleType } from \"@maptiler/client\";\n\nimport { Point } from \"./Point\";\nimport type { Matrix2 } from \"./Point\";\n\n// Importing enums and configs\nimport { config, SdkConfig } from \"./config\";\nimport { Language, LanguageString, LanguageKey } from \"./language\";\nimport type { Unit } from \"./unit\";\n\n// Exporting types\nexport type {\n MapOptions,\n LoadWithTerrainEvent,\n GeocodingOptions,\n BBox,\n Position,\n CoordinatesSearchOptions,\n CenteredStaticMapOptions,\n BoundedStaticMapOptions,\n AutomaticStaticMapOptions,\n LanguageString,\n LanguageKey,\n LanguageGeocodingString,\n Unit,\n MapStyleType,\n Matrix2,\n};\n\n// Exporting classes, objects, functions, etc.\nexport {\n Map,\n Marker,\n Popup,\n Style,\n CanvasSource,\n GeoJSONSource,\n ImageSource,\n RasterTileSource,\n RasterDEMTileSource,\n VideoSource,\n NavigationControl,\n GeolocateControl,\n AttributionControl,\n LogoControl,\n ScaleControl,\n FullscreenControl,\n TerrainControl,\n VectorTileSource,\n GeolocationType,\n SdkConfig,\n config,\n ServiceError,\n geocoding,\n geolocation,\n coordinates,\n data,\n staticMaps,\n MapStyle,\n Language,\n LanguageGeocoding,\n Point,\n ReferenceMapStyle,\n MapStyleVariant,\n MaptilerGeolocateControl,\n MaptilerLogoControl,\n MaptilerTerrainControl,\n MaptilerNavigationControl,\n};\n"],"names":["clientConfig","maplibregl","Marker","LngLat","__spreadProps","__spreadValues","uuidv4"],"mappings":"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"}
1
+ {"version":3,"file":"maptiler-sdk.mjs","sources":["../src/language.ts","../src/config.ts","../src/defaults.ts","../src/LogoControl.ts","../src/MaptilerLogoControl.ts","../src/tools.ts","../src/mapstyle.ts","../src/MaptilerTerrainControl.ts","../src/NavigationControl.ts","../src/MaptilerNavigationControl.ts","../src/GeolocateControl.ts","../src/MaptilerGeolocateControl.ts","../src/AttributionControl.ts","../src/ScaleControl.ts","../src/FullscreenControl.ts","../src/Map.ts","../src/Marker.ts","../src/Popup.ts","../src/Style.ts","../src/CanvasSource.ts","../src/GeoJSONSource.ts","../src/ImageSource.ts","../src/RasterTileSource.ts","../src/RasterDEMTileSource.ts","../src/VectorTileSource.ts","../src/VideoSource.ts","../src/TerrainControl.ts","../src/Point.ts","../src/index.ts"],"sourcesContent":["/**\n * Languages. Note that not all the languages of this list are available but the compatibility list may be expanded in the future.\n */\nconst Language = {\n /**\n * AUTO mode uses the language of the browser\n */\n AUTO: \"auto\",\n\n /**\n * STYLE is a custom flag to keep the language of the map as defined into the style.\n * If STYLE is set in the constructor, then further modification of the language\n * with `.setLanguage()` is not possible.\n */\n STYLE_LOCK: \"style_lock\",\n\n /**\n * Default fallback languages that uses latin charaters\n */\n LATIN: \"latin\",\n\n /**\n * Default fallback languages that uses non-latin charaters\n */\n NON_LATIN: \"nonlatin\",\n\n /**\n * Labels are in their local language, when available\n */\n LOCAL: \"\",\n\n ALBANIAN: \"sq\",\n AMHARIC: \"am\",\n ARABIC: \"ar\",\n ARMENIAN: \"hy\",\n AZERBAIJANI: \"az\",\n BASQUE: \"eu\",\n BELORUSSIAN: \"be\",\n BOSNIAN: \"bs\",\n BRETON: \"br\",\n BULGARIAN: \"bg\",\n CATALAN: \"ca\",\n CHINESE: \"zh\",\n CORSICAN: \"co\",\n CROATIAN: \"hr\",\n CZECH: \"cs\",\n DANISH: \"da\",\n DUTCH: \"nl\",\n ENGLISH: \"en\",\n ESPERANTO: \"eo\",\n ESTONIAN: \"et\",\n FINNISH: \"fi\",\n FRENCH: \"fr\",\n FRISIAN: \"fy\",\n GEORGIAN: \"ka\",\n GERMAN: \"de\",\n GREEK: \"el\",\n HEBREW: \"he\",\n HINDI: \"hi\",\n HUNGARIAN: \"hu\",\n ICELANDIC: \"is\",\n INDONESIAN: \"id\",\n IRISH: \"ga\",\n ITALIAN: \"it\",\n JAPANESE: \"ja\",\n JAPANESE_HIRAGANA: \"ja-Hira\",\n JAPANESE_KANA: \"ja_kana\",\n JAPANESE_LATIN: \"ja_rm\",\n JAPANESE_2018: \"ja-Latn\",\n KANNADA: \"kn\",\n KAZAKH: \"kk\",\n KOREAN: \"ko\",\n KOREAN_LATIN: \"ko-Latn\",\n KURDISH: \"ku\",\n ROMAN_LATIN: \"la\",\n LATVIAN: \"lv\",\n LITHUANIAN: \"lt\",\n LUXEMBOURGISH: \"lb\",\n MACEDONIAN: \"mk\",\n MALAYALAM: \"ml\",\n MALTESE: \"mt\",\n NORWEGIAN: \"no\",\n OCCITAN: \"oc\",\n POLISH: \"pl\",\n PORTUGUESE: \"pt\",\n ROMANIAN: \"ro\",\n ROMANSH: \"rm\",\n RUSSIAN: \"ru\",\n SCOTTISH_GAELIC: \"gd\",\n SERBIAN_CYRILLIC: \"sr\",\n SERBIAN_LATIN: \"sr-Latn\",\n SLOVAK: \"sk\",\n SLOVENE: \"sl\",\n SPANISH: \"es\",\n SWEDISH: \"sv\",\n TAMIL: \"ta\",\n TELUGU: \"te\",\n THAI: \"th\",\n TURKISH: \"tr\",\n UKRAINIAN: \"uk\",\n WELSH: \"cy\",\n} as const;\n\nconst languagesIsoSet = new Set(Object.values(Language) as Array<string>);\n\nfunction isLanguageSupported(lang: string): boolean {\n return languagesIsoSet.has(lang);\n}\n\nconst languageCodeSet = new Set(Object.values(Language));\n\n/**\n * Type representing the key of the Language object\n */\ntype LanguageKey = keyof typeof Language;\n\ntype Values<T> = T[keyof T];\n\n/**\n * Built-in languages values as strings\n */\ntype LanguageString = Values<typeof Language>;\n\nfunction getBrowserLanguage(): LanguageString {\n if (typeof navigator === \"undefined\") {\n return Intl.DateTimeFormat()\n .resolvedOptions()\n .locale.split(\"-\")[0] as LanguageString;\n }\n\n const canditatelangs = Array.from(\n new Set(navigator.languages.map((l) => l.split(\"-\")[0]))\n ).filter((l) => languageCodeSet.has(l as LanguageString));\n\n return canditatelangs.length\n ? (canditatelangs[0] as LanguageString)\n : Language.LATIN;\n}\n\nexport {\n Language,\n LanguageString,\n LanguageKey,\n getBrowserLanguage,\n isLanguageSupported,\n};\n","import EventEmitter from \"events\";\nimport { Language, LanguageString } from \"./language\";\nimport { config as clientConfig, FetchFunction } from \"@maptiler/client\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { Unit } from \"./unit\";\n\nexport const MAPTILER_SESSION_ID = uuidv4();\n\n/**\n * Configuration class for the SDK\n */\nclass SdkConfig extends EventEmitter {\n /**\n * The primary language. By default, the language of the web browser is used.\n */\n primaryLanguage: LanguageString | null = Language.AUTO;\n\n /**\n * The secondary language, to overwrite the default language defined in the map style.\n * This settings is highly dependant on the style compatibility and may not work in most cases.\n */\n secondaryLanguage: LanguageString | null = null;\n\n /**\n * Setting on whether of not the SDK runs with a session logic.\n * A \"session\" is started at the initialization of the SDK and finished when the browser\n * page is being refreshed.\n * When `session` is enabled (default: true), the extra URL param `mtsid` is added to queries\n * on the MapTiler Cloud API. This allows MapTiler to enable \"session based billing\".\n */\n session = true;\n\n /**\n * Unit to be used\n */\n private _unit: Unit = \"metric\";\n\n /**\n * MapTiler Cloud API key\n */\n private _apiKey = \"\";\n\n constructor() {\n super();\n }\n\n /**\n * Set the unit system\n */\n set unit(u: Unit) {\n this._unit = u;\n this.emit(\"unit\", u);\n }\n\n /**\n * Get the unit system\n */\n get unit(): Unit {\n return this._unit;\n }\n\n /**\n * Set the MapTiler Cloud API key\n */\n set apiKey(k: string) {\n this._apiKey = k;\n clientConfig.apiKey = k;\n this.emit(\"apiKey\", k);\n }\n\n /**\n * Get the MapTiler Cloud API key\n */\n get apiKey(): string {\n return this._apiKey;\n }\n\n /**\n * Set a the custom fetch function to replace the default one\n */\n set fetch(f: FetchFunction) {\n clientConfig.fetch = f;\n }\n\n /**\n * Get the fetch fucntion\n */\n get fetch(): FetchFunction | null {\n return clientConfig.fetch;\n }\n}\n\nconst config = new SdkConfig();\n\nexport { config, SdkConfig };\n","import { Language } from \"./language\";\n\n/**\n * Some default settings for the SDK\n */\nconst defaults = {\n maptilerLogoURL: \"https://api.maptiler.com/resources/logo.svg\",\n maptilerURL: \"https://www.maptiler.com/\",\n maptilerApiHost: \"api.maptiler.com\",\n rtlPluginURL:\n \"https://cdn.maptiler.com/mapbox-gl-rtl-text/v0.2.3/mapbox-gl-rtl-text.min.js\",\n primaryLanguage: Language.AUTO,\n secondaryLanguage: Language.LOCAL,\n terrainSourceURL: \"https://api.maptiler.com/tiles/terrain-rgb-v2/tiles.json\",\n terrainSourceId: \"maptiler-terrain\",\n};\n\nObject.freeze(defaults);\n\nexport { defaults };\n","/**\n * This is an extension of MapLibre LogoControl to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class LogoControl extends maplibregl.LogoControl {\n onAdd(map: Map | MapMLGL) {\n return super.onAdd(map as MapMLGL);\n }\n}\n","import maplibregl from \"maplibre-gl\";\nimport type { LogoOptions as LogoOptionsML } from \"maplibre-gl\";\nimport { defaults } from \"./defaults\";\nimport { Map } from \"./Map\";\nimport { LogoControl } from \"./LogoControl\";\n\ntype LogoOptions = LogoOptionsML & {\n logoURL?: string;\n linkURL?: string;\n};\n\n/**\n * This LogoControl extends the MapLibre LogoControl but instead can use any image URL and\n * any link URL. By default this is using MapTiler logo and URL.\n */\nexport class MaptilerLogoControl extends LogoControl {\n private logoURL = \"\";\n private linkURL = \"\";\n\n constructor(options: LogoOptions = {}) {\n super(options);\n\n this.logoURL = options.logoURL ?? defaults.maptilerLogoURL;\n this.linkURL = options.linkURL ?? defaults.maptilerURL;\n }\n\n onAdd(map: Map): HTMLElement {\n this._map = map;\n this._compact = this.options && this.options.compact;\n this._container = window.document.createElement(\"div\");\n this._container.className = \"maplibregl-ctrl\";\n const anchor = window.document.createElement(\"a\");\n anchor.style.backgroundRepeat = \"no-repeat\";\n anchor.style.cursor = \"pointer\";\n anchor.style.display = \"block\";\n anchor.style.height = \"23px\";\n anchor.style.margin = \"0 0 -4px -4px\";\n anchor.style.overflow = \"hidden\";\n anchor.style.width = \"88px\";\n anchor.style.backgroundImage = `url(${this.logoURL})`;\n anchor.style.backgroundSize = \"100px 30px\";\n anchor.style.width = \"100px\";\n anchor.style.height = \"30px\";\n\n anchor.target = \"_blank\";\n anchor.rel = \"noopener\";\n anchor.href = this.linkURL;\n anchor.setAttribute(\"aria-label\", \"MapTiler logo\");\n anchor.setAttribute(\"rel\", \"noopener\");\n this._container.appendChild(anchor);\n this._container.style.display = \"block\";\n\n this._map.on(\"resize\", this._updateCompact);\n this._updateCompact();\n\n return this._container;\n }\n}\n","import maplibregl from \"maplibre-gl\";\nimport type {\n RequestParameters,\n ResourceType,\n RequestTransformFunction,\n} from \"maplibre-gl\";\nimport { defaults } from \"./defaults\";\nimport { config } from \"./config\";\nimport { MAPTILER_SESSION_ID } from \"./config\";\n\nexport function enableRTL() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (maplibregl.getRTLTextPluginStatus() === \"unavailable\") {\n maplibregl.setRTLTextPlugin(\n defaults.rtlPluginURL,\n null,\n true // Lazy load the plugin\n );\n }\n}\n\n// This comes from:\n// https://github.com/maplibre/maplibre-gl-js/blob/v2.4.0/src/util/util.ts#L223\nexport function bindAll(fns: Array<string>, context: any): void {\n fns.forEach((fn) => {\n if (!context[fn]) {\n return;\n }\n context[fn] = context[fn].bind(context);\n });\n}\n\n// This comes from:\n// https://github.com/maplibre/maplibre-gl-js/blob/v2.4.0/src/util/dom.ts#L22\nexport function DOMcreate<K extends keyof HTMLElementTagNameMap>(\n tagName: K,\n className?: string,\n container?: HTMLElement\n): HTMLElementTagNameMap[K] {\n const el = window.document.createElement(tagName);\n if (className !== undefined) el.className = className;\n if (container) container.appendChild(el);\n return el;\n}\n\n// This comes from:\n// https://github.com/maplibre/maplibre-gl-js/blob/v2.4.0/src/util/dom.ts#L111\nexport function DOMremove(node: HTMLElement) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\n\n/**\n * This function is meant to be used as transformRequest by any Map instance created.\n * It adds the session ID as well as the MapTiler Cloud key from the config to all the requests\n * performed on MapTiler Cloud servers.\n * @param url\n * @param resourceType\n * @returns\n */\nexport function maptilerCloudTransformRequest(\n url: string,\n resourceType?: ResourceType\n): RequestParameters {\n let reqUrl = null;\n\n try {\n // The URL is expected to be absolute.\n // Yet, if it's local we just return it without assuming a 'base' url (in the URL constructor)\n // and we let the URL be locally resolved with a potential base path.\n reqUrl = new URL(url);\n } catch (e) {\n return {\n url,\n };\n }\n\n if (reqUrl.host === defaults.maptilerApiHost) {\n if (!reqUrl.searchParams.has(\"key\")) {\n reqUrl.searchParams.append(\"key\", config.apiKey);\n }\n\n if (config.session) {\n reqUrl.searchParams.append(\"mtsid\", MAPTILER_SESSION_ID);\n }\n }\n\n return {\n url: reqUrl.href,\n };\n}\n\n/**\n * This combines a user-defined tranformRequest function (optionnal)\n * with the MapTiler Cloud-specific one: maptilerCloudTransformRequest\n * @param userDefinedRTF\n * @returns\n */\nexport function combineTransformRequest(\n userDefinedRTF: RequestTransformFunction = null\n): RequestTransformFunction {\n return function (\n url: string,\n resourceType?: ResourceType\n ): RequestParameters {\n if (userDefinedRTF) {\n const rp = userDefinedRTF(url, resourceType);\n const rp2 = maptilerCloudTransformRequest(rp.url);\n\n return {\n ...rp,\n ...rp2,\n };\n } else {\n return maptilerCloudTransformRequest(url);\n }\n };\n}\n","import {\n MapStyle,\n ReferenceMapStyle,\n MapStyleVariant,\n mapStylePresetList,\n expandMapStyle,\n} from \"@maptiler/client\";\n\nexport function styleToStyle(\n style:\n | string\n | ReferenceMapStyle\n | MapStyleVariant\n | maplibregl.StyleSpecification\n | null\n | undefined\n): string | maplibregl.StyleSpecification {\n if (!style) {\n return MapStyle[mapStylePresetList[0].referenceStyleID]\n .getDefaultVariant()\n .getExpandedStyleURL();\n }\n\n // If the provided style is a shorthand (eg. \"streets-v2\") or a full style URL\n if (typeof style === \"string\" || style instanceof String) {\n if (!style.startsWith(\"http\") && style.toLowerCase().includes(\".json\")) {\n // If a style does not start by http but still contains the extension \".json\"\n // we assume it's a relative path to a style json file\n return style as string;\n } else {\n return expandMapStyle(style);\n }\n }\n\n if (style instanceof MapStyleVariant) {\n return style.getExpandedStyleURL();\n }\n\n if (style instanceof ReferenceMapStyle) {\n return (style.getDefaultVariant() as MapStyleVariant).getExpandedStyleURL();\n }\n\n return style as maplibregl.StyleSpecification;\n}\n","import { bindAll, DOMcreate, DOMremove } from \"./tools\";\n\nimport { Map } from \"./Map\";\nimport maplibregl from \"maplibre-gl\";\n\n/**\n * A `MaptilerTerrainControl` control adds a button to turn terrain on and off\n * by triggering the terrain logic that is already deployed in the Map object.\n */\nexport class MaptilerTerrainControl implements maplibregl.IControl {\n _map: Map;\n _container: HTMLElement;\n _terrainButton: HTMLButtonElement;\n\n constructor() {\n bindAll([\"_toggleTerrain\", \"_updateTerrainIcon\"], this);\n }\n\n onAdd(map: Map) {\n this._map = map;\n this._container = DOMcreate(\"div\", \"maplibregl-ctrl maplibregl-ctrl-group\");\n this._terrainButton = DOMcreate(\n \"button\",\n \"maplibregl-ctrl-terrain\",\n this._container\n );\n DOMcreate(\"span\", \"maplibregl-ctrl-icon\", this._terrainButton).setAttribute(\n \"aria-hidden\",\n \"true\"\n );\n this._terrainButton.type = \"button\";\n this._terrainButton.addEventListener(\"click\", this._toggleTerrain);\n\n this._updateTerrainIcon();\n this._map.on(\"terrain\", this._updateTerrainIcon);\n return this._container;\n }\n\n onRemove() {\n DOMremove(this._container);\n this._map.off(\"terrain\", this._updateTerrainIcon);\n this._map = undefined;\n }\n\n _toggleTerrain() {\n if (this._map.hasTerrain()) {\n this._map.disableTerrain();\n } else {\n this._map.enableTerrain();\n }\n\n this._updateTerrainIcon();\n }\n\n _updateTerrainIcon() {\n this._terrainButton.classList.remove(\"maplibregl-ctrl-terrain\");\n this._terrainButton.classList.remove(\"maplibregl-ctrl-terrain-enabled\");\n // if (this._map.terrain) {\n if (this._map.hasTerrain()) {\n this._terrainButton.classList.add(\"maplibregl-ctrl-terrain-enabled\");\n this._terrainButton.title = this._map._getUIString(\n \"TerrainControl.disableTerrain\"\n );\n } else {\n this._terrainButton.classList.add(\"maplibregl-ctrl-terrain\");\n this._terrainButton.title = this._map._getUIString(\n \"TerrainControl.enableTerrain\"\n );\n }\n }\n}\n","/**\n * This is an extension of MapLibre NavigationControl to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class NavigationControl extends maplibregl.NavigationControl {\n onAdd(map: Map | MapMLGL) {\n return super.onAdd(map as MapMLGL);\n }\n}\n","import { NavigationControl } from \"./NavigationControl\";\n\ntype HTMLButtonElementPlus = HTMLButtonElement & {\n clickFunction: (e?: any) => unknown;\n};\n\nexport class MaptilerNavigationControl extends NavigationControl {\n constructor() {\n super({\n showCompass: true,\n showZoom: true,\n visualizePitch: true,\n });\n\n // Removing the default click event\n this._compass.removeEventListener(\n \"click\",\n (this._compass as HTMLButtonElementPlus).clickFunction\n );\n\n // Adding custom click event\n this._compass.addEventListener(\"click\", (e) => {\n {\n const currentPitch = this._map.getPitch();\n if (currentPitch === 0) {\n this._map.easeTo({ pitch: Math.min(this._map.getMaxPitch(), 80) });\n } else {\n if (this.options.visualizePitch) {\n this._map.resetNorthPitch({}, { originalEvent: e });\n } else {\n this._map.resetNorth({}, { originalEvent: e });\n }\n }\n }\n });\n }\n\n /**\n * Overloading: the button now stores its click callback so that we can later on delete it and replace it\n */\n _createButton(\n className: string,\n fn: (e?: any) => unknown\n ): HTMLButtonElementPlus {\n const button = super._createButton(className, fn) as HTMLButtonElementPlus;\n button.clickFunction = fn;\n return button;\n }\n\n /**\n * Overloading: Limit how flat the compass icon can get\n */\n _rotateCompassArrow() {\n const rotate = this.options.visualizePitch\n ? `scale(${Math.min(\n 1.5,\n 1 /\n Math.pow(Math.cos(this._map.transform.pitch * (Math.PI / 180)), 0.5)\n )}) rotateX(${Math.min(70, this._map.transform.pitch)}deg) rotateZ(${\n this._map.transform.angle * (180 / Math.PI)\n }deg)`\n : `rotate(${this._map.transform.angle * (180 / Math.PI)}deg)`;\n\n this._compassIcon.style.transform = rotate;\n }\n}\n","/**\n * This is an extension of MapLibre GeolocateControl to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class GeolocateControl extends maplibregl.GeolocateControl {\n onAdd(map: Map | MapMLGL) {\n return super.onAdd(map as MapMLGL);\n }\n}\n","import type { LngLatLike } from \"maplibre-gl\";\nimport maplibregl from \"maplibre-gl\";\nimport { GeolocateControl } from \"./GeolocateControl\";\nimport { DOMcreate } from \"./tools\";\n\nconst Marker = maplibregl.Marker;\nconst LngLat = maplibregl.LngLat;\nconst LngLatBounds = maplibregl.LngLatBounds;\n\n/**\n * The MaptilerGeolocateControl is an extension of the original GeolocateControl\n * with a few changes. In this version, the active mode persists as long as the\n * location is still centered. This means it's robust to rotation, pitch and zoom.\n *\n */\nexport class MaptilerGeolocateControl extends GeolocateControl {\n private lastUpdatedCenter = new LngLat(0, 0);\n\n /**\n * Update the camera location to center on the current position\n *\n * @param {Position} position the Geolocation API Position\n * @private\n */\n _updateCamera(position: GeolocationPosition) {\n const center = new LngLat(\n position.coords.longitude,\n position.coords.latitude\n );\n const radius = position.coords.accuracy;\n const bearing = this._map.getBearing();\n const options = {\n bearing,\n ...this.options.fitBoundsOptions,\n linear: true,\n };\n\n const currentMapZoom = this._map.getZoom();\n\n if (currentMapZoom > this.options.fitBoundsOptions.maxZoom) {\n options.zoom = currentMapZoom;\n }\n\n this._map.fitBounds(LngLatBounds.fromLngLat(center, radius), options, {\n geolocateSource: true, // tag this camera change so it won't cause the control to change to background state\n });\n\n let hasFittingBeenDisrupted = false;\n\n const flagFittingDisruption = () => {\n hasFittingBeenDisrupted = true;\n };\n\n this._map.once(\"click\", flagFittingDisruption);\n this._map.once(\"dblclick\", flagFittingDisruption);\n this._map.once(\"dragstart\", flagFittingDisruption);\n this._map.once(\"mousedown\", flagFittingDisruption);\n this._map.once(\"touchstart\", flagFittingDisruption);\n this._map.once(\"wheel\", flagFittingDisruption);\n\n this._map.once(\"moveend\", () => {\n // Removing the events if not used\n this._map.off(\"click\", flagFittingDisruption);\n this._map.off(\"dblclick\", flagFittingDisruption);\n this._map.off(\"dragstart\", flagFittingDisruption);\n this._map.off(\"mousedown\", flagFittingDisruption);\n this._map.off(\"touchstart\", flagFittingDisruption);\n this._map.off(\"wheel\", flagFittingDisruption);\n\n if (hasFittingBeenDisrupted) {\n return;\n }\n\n this.lastUpdatedCenter = this._map.getCenter();\n });\n }\n\n _setupUI(supported: boolean) {\n this.lastUpdatedCenter = this._map.getCenter();\n\n this._container.addEventListener(\"contextmenu\", (e: MouseEvent) =>\n e.preventDefault()\n );\n this._geolocateButton = DOMcreate(\n \"button\",\n \"maplibregl-ctrl-geolocate\",\n this._container\n );\n DOMcreate(\n \"span\",\n \"maplibregl-ctrl-icon\",\n this._geolocateButton\n ).setAttribute(\"aria-hidden\", \"true\");\n this._geolocateButton.type = \"button\";\n\n if (supported === false) {\n // warnOnce('Geolocation support is not available so the GeolocateControl will be disabled.');\n const title = this._map._getUIString(\n \"GeolocateControl.LocationNotAvailable\"\n );\n this._geolocateButton.disabled = true;\n this._geolocateButton.title = title;\n this._geolocateButton.setAttribute(\"aria-label\", title);\n } else {\n const title = this._map._getUIString(\"GeolocateControl.FindMyLocation\");\n this._geolocateButton.title = title;\n this._geolocateButton.setAttribute(\"aria-label\", title);\n }\n\n if (this.options.trackUserLocation) {\n this._geolocateButton.setAttribute(\"aria-pressed\", \"false\");\n this._watchState = \"OFF\";\n }\n\n // when showUserLocation is enabled, keep the Geolocate button disabled until the device location marker is setup on the map\n if (this.options.showUserLocation) {\n this._dotElement = DOMcreate(\"div\", \"maplibregl-user-location-dot\");\n\n this._userLocationDotMarker = new Marker(this._dotElement);\n\n this._circleElement = DOMcreate(\n \"div\",\n \"maplibregl-user-location-accuracy-circle\"\n );\n this._accuracyCircleMarker = new Marker({\n element: this._circleElement,\n pitchAlignment: \"map\",\n });\n\n if (this.options.trackUserLocation) this._watchState = \"OFF\";\n\n this._map.on(\"move\", this._onZoom);\n }\n\n this._geolocateButton.addEventListener(\"click\", this.trigger.bind(this));\n\n this._setup = true;\n\n // when the camera is changed (and it's not as a result of the Geolocation Control) change\n // the watch mode to background watch, so that the marker is updated but not the camera.\n // Addition: Yet the status change does not occur if the ditance it has moved to is less than\n // one meter from the last auto-updated position. This is to guarrantee that if the move\n // is a zoom, rotation or pitch (where the center stays the same) then we can keep the ACTIVE_LOCK\n // mode ON.\n if (this.options.trackUserLocation) {\n this._map.on(\"moveend\", (event: any) => {\n const fromResize =\n event.originalEvent && event.originalEvent.type === \"resize\";\n const movingDistance = this.lastUpdatedCenter.distanceTo(\n this._map.getCenter()\n );\n\n if (\n !event.geolocateSource &&\n this._watchState === \"ACTIVE_LOCK\" &&\n !fromResize &&\n movingDistance > 1\n ) {\n this._watchState = \"BACKGROUND\";\n this._geolocateButton.classList.add(\n \"maplibregl-ctrl-geolocate-background\"\n );\n this._geolocateButton.classList.remove(\n \"maplibregl-ctrl-geolocate-active\"\n );\n\n this.fire(new Event(\"trackuserlocationend\"));\n }\n });\n }\n }\n\n _updateCircleRadius() {\n if (\n this._watchState !== \"BACKGROUND\" &&\n this._watchState !== \"ACTIVE_LOCK\"\n ) {\n return;\n }\n\n const lastKnownLocation: LngLatLike = [\n this._lastKnownPosition.coords.longitude,\n this._lastKnownPosition.coords.latitude,\n ];\n\n const projectedLocation = this._map.project(lastKnownLocation);\n const a = this._map.unproject([projectedLocation.x, projectedLocation.y]);\n const b = this._map.unproject([\n projectedLocation.x + 20,\n projectedLocation.y,\n ]);\n const metersPerPixel = a.distanceTo(b) / 20;\n\n const circleDiameter = Math.ceil((2.0 * this._accuracy) / metersPerPixel);\n this._circleElement.style.width = `${circleDiameter}px`;\n this._circleElement.style.height = `${circleDiameter}px`;\n }\n\n _onZoom() {\n if (this.options.showUserLocation && this.options.showAccuracyCircle) {\n this._updateCircleRadius();\n }\n }\n}\n","/**\n * This is an extension of MapLibre AttributionControl to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class AttributionControl extends maplibregl.AttributionControl {\n onAdd(map: Map | MapMLGL) {\n return super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre ScaleControl to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class ScaleControl extends maplibregl.ScaleControl {\n onAdd(map: Map | MapMLGL) {\n return super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre FullscreenControl to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class FullscreenControl extends maplibregl.FullscreenControl {\n onAdd(map: Map | MapMLGL) {\n return super.onAdd(map as MapMLGL);\n }\n}\n","import maplibregl from \"maplibre-gl\";\nimport { Base64 } from \"js-base64\";\nimport type {\n StyleSpecification,\n MapOptions as MapOptionsML,\n ControlPosition,\n StyleOptions,\n MapDataEvent,\n Tile,\n RasterDEMSourceSpecification,\n RequestTransformFunction,\n} from \"maplibre-gl\";\nimport { ReferenceMapStyle, MapStyleVariant } from \"@maptiler/client\";\nimport { config, MAPTILER_SESSION_ID, SdkConfig } from \"./config\";\nimport { defaults } from \"./defaults\";\nimport { MaptilerLogoControl } from \"./MaptilerLogoControl\";\nimport { combineTransformRequest, enableRTL } from \"./tools\";\nimport {\n getBrowserLanguage,\n isLanguageSupported,\n Language,\n LanguageString,\n} from \"./language\";\nimport { styleToStyle } from \"./mapstyle\";\nimport { MaptilerTerrainControl } from \"./MaptilerTerrainControl\";\nimport { MaptilerNavigationControl } from \"./MaptilerNavigationControl\";\nimport { geolocation } from \"@maptiler/client\";\nimport { MaptilerGeolocateControl } from \"./MaptilerGeolocateControl\";\nimport { AttributionControl } from \"./AttributionControl\";\nimport { ScaleControl } from \"./ScaleControl\";\nimport { FullscreenControl } from \"./FullscreenControl\";\n\nfunction sleepAsync(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport type LoadWithTerrainEvent = {\n type: \"loadWithTerrain\";\n target: Map;\n terrain: {\n source: string;\n exaggeration: number;\n };\n};\n\n// StyleSwapOptions is not exported by Maplibre, but we can redefine it (used for setStyle)\nexport type TransformStyleFunction = (\n previous: StyleSpecification,\n next: StyleSpecification\n) => StyleSpecification;\n\nexport type StyleSwapOptions = {\n diff?: boolean;\n transformStyle?: TransformStyleFunction;\n};\n\nexport const GeolocationType: {\n POINT: \"POINT\";\n COUNTRY: \"COUNTRY\";\n} = {\n POINT: \"POINT\",\n COUNTRY: \"COUNTRY\",\n} as const;\n\ntype MapTerrainDataEvent = MapDataEvent & {\n isSourceLoaded: boolean;\n tile: Tile;\n sourceId: string;\n source: RasterDEMSourceSpecification;\n};\n\n/**\n * Options to provide to the `Map` constructor\n */\nexport type MapOptions = Omit<MapOptionsML, \"style\" | \"maplibreLogo\"> & {\n /**\n * Style of the map. Can be:\n * - a full style URL (possibly with API key)\n * - a shorthand with only the MapTIler style name (eg. `\"streets-v2\"`)\n * - a longer form with the prefix `\"maptiler://\"` (eg. `\"maptiler://streets-v2\"`)\n */\n style?: ReferenceMapStyle | MapStyleVariant | StyleSpecification | string;\n\n /**\n * Define the language of the map. This can be done directly with a language ISO code (eg. \"en\")\n * or with a built-in shorthand (eg. Language.ENGLISH).\n * Note that this is equivalent to setting the `config.primaryLanguage` and will overwrite it.\n */\n language?: LanguageString;\n\n /**\n * Define the MapTiler Cloud API key to be used. This is strictly equivalent to setting\n * `config.apiKey` and will overwrite it.\n */\n apiKey?: string;\n\n /**\n * Shows or hides the MapTiler logo in the bottom left corner.\n *\n * For paid plans:\n * - `true` shows MapTiler logo\n * - `false` hodes MapTiler logo\n * - default: `false` (hide)\n *\n * For free plans: MapTiler logo always shows, regardless of the value.\n */\n maptilerLogo?: boolean;\n\n /**\n * Enables 3D terrain if `true`. (default: `false`)\n */\n terrain?: boolean;\n\n /**\n * Exaggeration factor of the terrain. (default: `1`, no exaggeration)\n */\n terrainExaggeration?: number;\n\n /**\n * Show the navigation control. (default: `true`, will hide if `false`)\n */\n navigationControl?: boolean | ControlPosition;\n\n /**\n * Show the terrain control. (default: `false`, will show if `true`)\n */\n terrainControl?: boolean | ControlPosition;\n\n /**\n * Show the geolocate control. (default: `true`, will hide if `false`)\n */\n geolocateControl?: boolean | ControlPosition;\n\n /**\n * Show the scale control. (default: `false`, will show if `true`)\n */\n scaleControl?: boolean | ControlPosition;\n\n /**\n * Show the full screen control. (default: `false`, will show if `true`)\n */\n fullscreenControl?: boolean | ControlPosition;\n\n /**\n * Method to position the map at a given geolocation. Only if:\n * - `hash` is `false`\n * - `center` is not provided\n *\n * If the value is `true` of `\"POINT\"` (given by `GeolocationType.POINT`) then the positionning uses the MapTiler Cloud\n * Geolocation to find the non-GPS location point.\n * The zoom level can be provided in the `Map` constructor with the `zoom` option or will be `13` if not provided.\n *\n * If the value is `\"COUNTRY\"` (given by `GeolocationType.COUNTRY`) then the map is centered around the bounding box of the country.\n * In this case, the `zoom` option will be ignored.\n *\n * If the value is `false`, no geolocation is performed and the map centering and zooming depends on other options or on\n * the built-in defaults.\n *\n * If this option is non-false and the options `center` is also provided, then `center` prevails.\n *\n * Default: `false`\n */\n geolocate?: (typeof GeolocationType)[keyof typeof GeolocationType] | boolean;\n};\n\n/**\n * The Map class can be instanciated to display a map in a `<div>`\n */\nexport class Map extends maplibregl.Map {\n private isTerrainEnabled = false;\n private terrainExaggeration = 1;\n private primaryLanguage: LanguageString | null = null;\n private secondaryLanguage: LanguageString | null = null;\n private terrainGrowing = false;\n private terrainFlattening = false;\n\n constructor(options: MapOptions) {\n if (options.apiKey) {\n config.apiKey = options.apiKey;\n }\n\n const style = styleToStyle(options.style);\n const hashPreConstructor = location.hash;\n\n if (!config.apiKey) {\n console.warn(\n \"MapTiler Cloud API key is not set. Visit https://maptiler.com and try Cloud for free!\"\n );\n }\n\n // calling the map constructor with full length style\n super({\n ...options,\n style,\n maplibreLogo: false,\n transformRequest: combineTransformRequest(options.transformRequest),\n });\n\n this.primaryLanguage = options.language ?? config.primaryLanguage;\n this.secondaryLanguage = config.secondaryLanguage;\n this.terrainExaggeration =\n options.terrainExaggeration ?? this.terrainExaggeration;\n\n // Map centering and geolocation\n this.once(\"styledata\", async () => {\n // Not using geolocation centering if...\n\n // the geolcoate option is not provided or is falsy\n if (!options.geolocate) {\n return;\n }\n\n // ... a center is provided in options\n if (options.center) {\n return;\n }\n\n // ... the hash option is enabled and a hash is present in the URL\n if (options.hash && !!hashPreConstructor) {\n return;\n }\n\n // If the geolocation is set to COUNTRY:\n try {\n if (options.geolocate === GeolocationType.COUNTRY) {\n await this.fitToIpBounds();\n return;\n }\n } catch (e) {\n // not raising\n console.warn(e.message);\n }\n\n // As a fallback, we want to center the map on the visitor. First with IP geolocation...\n let ipLocatedCameraHash = null;\n try {\n await this.centerOnIpPoint(options.zoom);\n ipLocatedCameraHash = this.getCameraHash();\n } catch (e) {\n // not raising\n console.warn(e.message);\n }\n\n // A more precise localization\n\n // This more advanced localization is commented out because the easeTo animation\n // triggers an error if the terrain grow is enabled (due to being nable to project the center while moving)\n\n // Then, the get a more precise location, we rely on the browser location, but only if it was already granted\n // before (we don't want to ask wih a popup at launch time)\n const locationResult = await navigator.permissions.query({\n name: \"geolocation\",\n });\n\n if (locationResult.state === \"granted\") {\n navigator.geolocation.getCurrentPosition(\n // success callback\n (data) => {\n // If the user has already moved since the ip location, then we no longer want to move the center\n if (ipLocatedCameraHash !== this.getCameraHash()) {\n return;\n }\n\n if (this.terrain) {\n this.easeTo({\n center: [data.coords.longitude, data.coords.latitude],\n zoom: options.zoom || 12,\n duration: 2000,\n });\n } else {\n this.once(\"terrain\", () => {\n this.easeTo({\n center: [data.coords.longitude, data.coords.latitude],\n zoom: options.zoom || 12,\n duration: 2000,\n });\n });\n }\n },\n\n // error callback\n null,\n\n // options\n {\n maximumAge: 24 * 3600 * 1000, // a day in millisec\n timeout: 5000, // milliseconds\n enableHighAccuracy: false,\n }\n );\n }\n });\n\n // If the config includes language changing, we must update the map language\n this.on(\"styledata\", () => {\n this.setPrimaryLanguage(this.primaryLanguage);\n this.setSecondaryLanguage(this.secondaryLanguage);\n });\n\n // this even is in charge of reaplying the terrain elevation after the\n // style has changed because depending on the src/tgt style,\n // the style logic is not always able to resolve the application of terrain\n this.on(\"styledata\", () => {\n // the styling resolver did no manage to reaply the terrain,\n // so let's reload it\n if (this.getTerrain() === null && this.isTerrainEnabled) {\n this.enableTerrain(this.terrainExaggeration);\n }\n });\n\n // load the Right-to-Left text plugin (will happen only once)\n this.once(\"load\", async () => {\n enableRTL();\n });\n\n // Update logo and attibution\n this.once(\"load\", async () => {\n let tileJsonContent = { logo: null };\n\n try {\n const possibleSources = Object.keys(this.style.sourceCaches)\n .map((sourceName) => this.getSource(sourceName))\n .filter(\n (s: any) =>\n typeof s.url === \"string\" && s.url.includes(\"tiles.json\")\n );\n\n const styleUrl = new URL(\n (possibleSources[0] as maplibregl.VectorTileSource).url\n );\n\n if (!styleUrl.searchParams.has(\"key\")) {\n styleUrl.searchParams.append(\"key\", config.apiKey);\n }\n\n const tileJsonRes = await fetch(styleUrl.href);\n tileJsonContent = await tileJsonRes.json();\n } catch (e) {\n // No tiles.json found (should not happen on maintained styles)\n }\n\n // The attribution and logo must show when required\n if (\"logo\" in tileJsonContent && tileJsonContent.logo) {\n const logoURL: string = tileJsonContent.logo;\n\n this.addControl(\n new MaptilerLogoControl({ logoURL }),\n options.logoPosition\n );\n\n // if attribution in option is `false` but the the logo shows up in the tileJson, then the attribution must show anyways\n if (options.attributionControl === false) {\n this.addControl(\n new AttributionControl({\n customAttribution: options.customAttribution,\n })\n );\n }\n } else if (options.maptilerLogo) {\n this.addControl(new MaptilerLogoControl(), options.logoPosition);\n }\n\n // the other controls at init time but be after\n // (due to the async nature of logo control)\n\n // By default, no scale control\n if (options.scaleControl) {\n // default position, if not provided, is top left corner\n const position = (\n options.scaleControl === true || options.scaleControl === undefined\n ? \"bottom-right\"\n : options.scaleControl\n ) as ControlPosition;\n\n const scaleControl = new ScaleControl({ unit: config.unit });\n this.addControl(scaleControl, position);\n config.on(\"unit\", (unit) => {\n scaleControl.setUnit(unit);\n });\n }\n\n if (options.navigationControl !== false) {\n // default position, if not provided, is top left corner\n const position = (\n options.navigationControl === true ||\n options.navigationControl === undefined\n ? \"top-right\"\n : options.navigationControl\n ) as ControlPosition;\n this.addControl(new MaptilerNavigationControl(), position);\n }\n\n if (options.geolocateControl !== false) {\n // default position, if not provided, is top left corner\n const position = (\n options.geolocateControl === true ||\n options.geolocateControl === undefined\n ? \"top-right\"\n : options.geolocateControl\n ) as ControlPosition;\n\n this.addControl(\n // new maplibregl.GeolocateControl({\n new MaptilerGeolocateControl({\n positionOptions: {\n enableHighAccuracy: true,\n maximumAge: 0,\n timeout: 6000 /* 6 sec */,\n },\n fitBoundsOptions: {\n maxZoom: 15,\n },\n trackUserLocation: true,\n showAccuracyCircle: true,\n showUserLocation: true,\n }),\n position\n );\n }\n\n if (options.terrainControl) {\n // default position, if not provided, is top left corner\n const position = (\n options.terrainControl === true ||\n options.terrainControl === undefined\n ? \"top-right\"\n : options.terrainControl\n ) as ControlPosition;\n this.addControl(new MaptilerTerrainControl(), position);\n }\n\n // By default, no fullscreen control\n if (options.fullscreenControl) {\n // default position, if not provided, is top left corner\n const position = (\n options.fullscreenControl === true ||\n options.fullscreenControl === undefined\n ? \"top-right\"\n : options.fullscreenControl\n ) as ControlPosition;\n\n this.addControl(new FullscreenControl({}), position);\n }\n });\n\n // Creating a custom event: \"loadWithTerrain\"\n // that fires only once when both:\n // - the map has full loaded (corresponds to the the \"load\" event)\n // - the terrain has loaded (corresponds to the \"terrain\" event with terrain beion non-null)\n // This custom event is necessary to wait for when the map is instanciated with `terrain: true`\n // and some animation (flyTo, easeTo) are running from the begining.\n let loadEventTriggered = false;\n let terrainEventTriggered = false;\n let terrainEventData: LoadWithTerrainEvent = null;\n\n this.once(\"load\", (_) => {\n loadEventTriggered = true;\n if (terrainEventTriggered) {\n this.fire(\"loadWithTerrain\", terrainEventData);\n }\n });\n\n const terrainCallback = (evt) => {\n if (!evt.terrain) return;\n terrainEventTriggered = true;\n terrainEventData = {\n type: \"loadWithTerrain\",\n target: this,\n terrain: evt.terrain,\n };\n this.off(\"terrain\", terrainCallback);\n\n if (loadEventTriggered) {\n this.fire(\"loadWithTerrain\", terrainEventData as LoadWithTerrainEvent);\n }\n };\n\n this.on(\"terrain\", terrainCallback);\n\n // enable 3D terrain if provided in options\n if (options.terrain) {\n this.enableTerrain(\n options.terrainExaggeration ?? this.terrainExaggeration\n );\n }\n }\n\n /**\n * Awaits for _this_ Map instance to be \"loaded\" and returns a Promise to the Map.\n * If _this_ Map instance is already loaded, the Promise is resolved directly,\n * otherwise, it is resolved as a result of the \"load\" event.\n * @returns\n */\n async onLoadAsync() {\n return new Promise<Map>((resolve, reject) => {\n if (this.loaded()) {\n return resolve(this);\n }\n\n this.once(\"load\", (_) => {\n resolve(this);\n });\n });\n }\n\n /**\n * Awaits for _this_ Map instance to be \"loaded\" as well as with terrain being non-null for the first time\n * and returns a Promise to the Map.\n * If _this_ Map instance is already loaded with terrain, the Promise is resolved directly,\n * otherwise, it is resolved as a result of the \"loadWithTerrain\" event.\n * @returns\n */\n async onLoadWithTerrainAsync() {\n return new Promise<Map>((resolve, reject) => {\n if (this.loaded() && this.terrain) {\n return resolve(this);\n }\n\n this.once(\"loadWithTerrain\", (_) => {\n resolve(this);\n });\n });\n }\n\n /**\n * Update the style of the map.\n * Can be:\n * - a full style URL (possibly with API key)\n * - a shorthand with only the MapTIler style name (eg. `\"streets-v2\"`)\n * - a longer form with the prefix `\"maptiler://\"` (eg. `\"maptiler://streets-v2\"`)\n * @param style\n * @param options\n * @returns\n */\n setStyle(\n style: ReferenceMapStyle | MapStyleVariant | StyleSpecification | string,\n options?: StyleSwapOptions & StyleOptions\n ) {\n return super.setStyle(styleToStyle(style), options);\n }\n\n /**\n * Define the primary language of the map. Note that not all the languages shorthands provided are available.\n * This function is a short for `.setPrimaryLanguage()`\n * @param language\n */\n setLanguage(language: LanguageString = defaults.primaryLanguage) {\n if (language === Language.AUTO) {\n return this.setLanguage(getBrowserLanguage());\n }\n this.setPrimaryLanguage(language);\n }\n\n /**\n * Define the primary language of the map. Note that not all the languages shorthands provided are available.\n * @param language\n */\n setPrimaryLanguage(language: LanguageString = defaults.primaryLanguage) {\n if (this.primaryLanguage === Language.STYLE_LOCK) {\n console.warn(\n \"The language cannot be changed because this map has been instantiated with the STYLE_LOCK language flag.\"\n );\n return;\n }\n\n if (!isLanguageSupported(language as string)) {\n return;\n }\n\n this.primaryLanguage = language;\n\n this.onStyleReady(() => {\n if (language === Language.AUTO) {\n return this.setPrimaryLanguage(getBrowserLanguage());\n }\n\n const layers = this.getStyle().layers;\n\n // detects pattern like \"{name:somelanguage}\" with loose spacing\n const strLanguageRegex = /^\\s*{\\s*name\\s*(:\\s*(\\S*))?\\s*}$/;\n\n // detects pattern like \"name:somelanguage\" with loose spacing\n const strLanguageInArrayRegex = /^\\s*name\\s*(:\\s*(\\S*))?\\s*$/;\n\n // for string based bilingual lang such as \"{name:latin} {name:nonlatin}\" or \"{name:latin} {name}\"\n const strBilingualRegex =\n /^\\s*{\\s*name\\s*(:\\s*(\\S*))?\\s*}(\\s*){\\s*name\\s*(:\\s*(\\S*))?\\s*}$/;\n\n // Regex to capture when there are more info, such as mountains elevation with unit m/ft\n const strMoreInfoRegex = /^(.*)({\\s*name\\s*(:\\s*(\\S*))?\\s*})(.*)$/;\n\n const langStr = language ? `name:${language}` : \"name\"; // to handle local lang\n const replacer = [\n \"case\",\n [\"has\", langStr],\n [\"get\", langStr],\n [\"get\", \"name\"],\n ];\n\n for (let i = 0; i < layers.length; i += 1) {\n const layer = layers[i];\n const layout = layer.layout;\n\n if (!layout) {\n continue;\n }\n\n if (!layout[\"text-field\"]) {\n continue;\n }\n\n const textFieldLayoutProp = this.getLayoutProperty(\n layer.id,\n \"text-field\"\n );\n\n // Note:\n // The value of the 'text-field' property can take multiple shape;\n // 1. can be an array with 'concat' on its first element (most likely means bilingual)\n // 2. can be an array with 'get' on its first element (monolingual)\n // 3. can be a string of shape '{name:latin}'\n // 4. can be a string referencing another prop such as '{housenumber}' or '{ref}'\n //\n // The case 1, 2 and 3 will be updated while maintaining their original type and shape.\n // The case 3 will not be updated\n\n let regexMatch;\n\n // This is case 1\n if (\n Array.isArray(textFieldLayoutProp) &&\n textFieldLayoutProp.length >= 2 &&\n textFieldLayoutProp[0].trim().toLowerCase() === \"concat\"\n ) {\n const newProp = textFieldLayoutProp.slice(); // newProp is Array\n // The style could possibly have defined more than 2 concatenated language strings but we only want to edit the first\n // The style could also define that there are more things being concatenated and not only languages\n\n for (let j = 0; j < textFieldLayoutProp.length; j += 1) {\n const elem = textFieldLayoutProp[j];\n\n // we are looking for an elem of shape '{name:somelangage}' (string) of `[\"get\", \"name:somelanguage\"]` (array)\n\n // the entry of of shape '{name:somelangage}', possibly with loose spacing\n if (\n (typeof elem === \"string\" || elem instanceof String) &&\n strLanguageRegex.exec(elem.toString())\n ) {\n newProp[j] = replacer;\n break; // we just want to update the primary language\n }\n // the entry is of an array of shape `[\"get\", \"name:somelanguage\"]`\n else if (\n Array.isArray(elem) &&\n elem.length >= 2 &&\n elem[0].trim().toLowerCase() === \"get\" &&\n strLanguageInArrayRegex.exec(elem[1].toString())\n ) {\n newProp[j] = replacer;\n break; // we just want to update the primary language\n } else if (\n Array.isArray(elem) &&\n elem.length === 4 &&\n elem[0].trim().toLowerCase() === \"case\"\n ) {\n newProp[j] = replacer;\n break; // we just want to update the primary language\n }\n }\n\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n\n // This is case 2\n else if (\n Array.isArray(textFieldLayoutProp) &&\n textFieldLayoutProp.length >= 2 &&\n textFieldLayoutProp[0].trim().toLowerCase() === \"get\" &&\n strLanguageInArrayRegex.exec(textFieldLayoutProp[1].toString())\n ) {\n const newProp = replacer;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n\n // This is case 3\n else if (\n (typeof textFieldLayoutProp === \"string\" ||\n textFieldLayoutProp instanceof String) &&\n strLanguageRegex.exec(textFieldLayoutProp.toString())\n ) {\n const newProp = replacer;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n } else if (\n Array.isArray(textFieldLayoutProp) &&\n textFieldLayoutProp.length === 4 &&\n textFieldLayoutProp[0].trim().toLowerCase() === \"case\"\n ) {\n const newProp = replacer;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n } else if (\n (typeof textFieldLayoutProp === \"string\" ||\n textFieldLayoutProp instanceof String) &&\n (regexMatch = strBilingualRegex.exec(\n textFieldLayoutProp.toString()\n )) !== null\n ) {\n const newProp = `{${langStr}}${regexMatch[3]}{name${\n regexMatch[4] || \"\"\n }}`;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n } else if (\n (typeof textFieldLayoutProp === \"string\" ||\n textFieldLayoutProp instanceof String) &&\n (regexMatch = strMoreInfoRegex.exec(\n textFieldLayoutProp.toString()\n )) !== null\n ) {\n const newProp = `${regexMatch[1]}{${langStr}}${regexMatch[5]}`;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n }\n });\n }\n\n /**\n * Define the secondary language of the map. Note that this is not supported by all the map styles\n * Note that most styles do not allow a secondary language and this function only works if the style allows (no force adding)\n * @param language\n */\n setSecondaryLanguage(language: LanguageString = defaults.secondaryLanguage) {\n // Using the lock flag as a primaty language also applies to the secondary\n if (this.primaryLanguage === Language.STYLE_LOCK) {\n console.warn(\n \"The language cannot be changed because this map has been instantiated with the STYLE_LOCK language flag.\"\n );\n return;\n }\n\n if (!isLanguageSupported(language as string)) {\n return;\n }\n\n this.secondaryLanguage = language;\n\n this.onStyleReady(() => {\n if (language === Language.AUTO) {\n return this.setSecondaryLanguage(getBrowserLanguage());\n }\n\n const layers = this.getStyle().layers;\n\n // detects pattern like \"{name:somelanguage}\" with loose spacing\n const strLanguageRegex = /^\\s*{\\s*name\\s*(:\\s*(\\S*))?\\s*}$/;\n\n // detects pattern like \"name:somelanguage\" with loose spacing\n const strLanguageInArrayRegex = /^\\s*name\\s*(:\\s*(\\S*))?\\s*$/;\n\n // for string based bilingual lang such as \"{name:latin} {name:nonlatin}\" or \"{name:latin} {name}\"\n const strBilingualRegex =\n /^\\s*{\\s*name\\s*(:\\s*(\\S*))?\\s*}(\\s*){\\s*name\\s*(:\\s*(\\S*))?\\s*}$/;\n\n let regexMatch;\n\n for (let i = 0; i < layers.length; i += 1) {\n const layer = layers[i];\n const layout = layer.layout;\n\n if (!layout) {\n continue;\n }\n\n if (!layout[\"text-field\"]) {\n continue;\n }\n\n const textFieldLayoutProp = this.getLayoutProperty(\n layer.id,\n \"text-field\"\n );\n\n let newProp;\n\n // Note:\n // The value of the 'text-field' property can take multiple shape;\n // 1. can be an array with 'concat' on its first element (most likely means bilingual)\n // 2. can be an array with 'get' on its first element (monolingual)\n // 3. can be a string of shape '{name:latin}'\n // 4. can be a string referencing another prop such as '{housenumber}' or '{ref}'\n //\n // Only the case 1 will be updated because we don't want to change the styling (read: add a secondary language where the original styling is only displaying 1)\n\n // This is case 1\n if (\n Array.isArray(textFieldLayoutProp) &&\n textFieldLayoutProp.length >= 2 &&\n textFieldLayoutProp[0].trim().toLowerCase() === \"concat\"\n ) {\n newProp = textFieldLayoutProp.slice(); // newProp is Array\n // The style could possibly have defined more than 2 concatenated language strings but we only want to edit the first\n // The style could also define that there are more things being concatenated and not only languages\n\n let languagesAlreadyFound = 0;\n\n for (let j = 0; j < textFieldLayoutProp.length; j += 1) {\n const elem = textFieldLayoutProp[j];\n\n // we are looking for an elem of shape '{name:somelangage}' (string) of `[\"get\", \"name:somelanguage\"]` (array)\n\n // the entry of of shape '{name:somelangage}', possibly with loose spacing\n if (\n (typeof elem === \"string\" || elem instanceof String) &&\n strLanguageRegex.exec(elem.toString())\n ) {\n if (languagesAlreadyFound === 1) {\n newProp[j] = `{name:${language}}`;\n break; // we just want to update the secondary language\n }\n\n languagesAlreadyFound += 1;\n }\n // the entry is of an array of shape `[\"get\", \"name:somelanguage\"]`\n else if (\n Array.isArray(elem) &&\n elem.length >= 2 &&\n elem[0].trim().toLowerCase() === \"get\" &&\n strLanguageInArrayRegex.exec(elem[1].toString())\n ) {\n if (languagesAlreadyFound === 1) {\n newProp[j][1] = `name:${language}`;\n break; // we just want to update the secondary language\n }\n\n languagesAlreadyFound += 1;\n } else if (\n Array.isArray(elem) &&\n elem.length === 4 &&\n elem[0].trim().toLowerCase() === \"case\"\n ) {\n if (languagesAlreadyFound === 1) {\n newProp[j] = [\"get\", `name:${language}`]; // the situation with 'case' is supposed to only happen with the primary lang\n break; // but in case a styling also does that for secondary...\n }\n\n languagesAlreadyFound += 1;\n }\n }\n\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n\n // the language (both first and second) are defined into a single string model\n else if (\n (typeof textFieldLayoutProp === \"string\" ||\n textFieldLayoutProp instanceof String) &&\n (regexMatch = strBilingualRegex.exec(\n textFieldLayoutProp.toString()\n )) !== null\n ) {\n const langStr = language ? `name:${language}` : \"name\"; // to handle local lang\n newProp = `{name${regexMatch[1] || \"\"}}${regexMatch[3]}{${langStr}}`;\n this.setLayoutProperty(layer.id, \"text-field\", newProp);\n }\n }\n });\n }\n\n /**\n * Get the primary language\n * @returns\n */\n getPrimaryLanguage(): LanguageString {\n return this.primaryLanguage;\n }\n\n /**\n * Get the secondary language\n * @returns\n */\n getSecondaryLanguage(): LanguageString {\n return this.secondaryLanguage;\n }\n\n /**\n * Get the exaggeration factor applied to the terrain\n * @returns\n */\n getTerrainExaggeration(): number {\n return this.terrainExaggeration;\n }\n\n /**\n * Know if terrian is enabled or not\n * @returns\n */\n hasTerrain(): boolean {\n return this.isTerrainEnabled;\n }\n\n private growTerrain(exaggeration, durationMs = 1000) {\n // This method assumes the terrain is already built\n if (!this.terrain) {\n return;\n }\n\n const startTime = performance.now();\n // This is supposedly 0, but it could be something else (e.g. already in the middle of growing, or user defined other)\n const currentExaggeration = this.terrain.exaggeration;\n const deltaExaggeration = exaggeration - currentExaggeration;\n\n // This is again called in a requestAnimationFrame ~loop, until the terrain has grown enough\n // that it has reached the target\n const updateExaggeration = () => {\n if (!this.terrain) {\n return;\n }\n\n // If the flattening animation is triggered while the growing animation\n // is running, then the flattening animation is stopped\n if (this.terrainFlattening) {\n return;\n }\n\n // normalized value in interval [0, 1] of where we are currently in the animation loop\n const positionInLoop = (performance.now() - startTime) / durationMs;\n\n // The animation goes on until we reached 99% of the growing sequence duration\n if (positionInLoop < 0.99) {\n const exaggerationFactor = 1 - Math.pow(1 - positionInLoop, 4);\n const newExaggeration =\n currentExaggeration + exaggerationFactor * deltaExaggeration;\n this.terrain.exaggeration = newExaggeration;\n requestAnimationFrame(updateExaggeration);\n } else {\n this.terrainGrowing = false;\n this.terrainFlattening = false;\n this.terrain.exaggeration = exaggeration;\n }\n\n this.triggerRepaint();\n };\n\n this.terrainGrowing = true;\n this.terrainFlattening = false;\n requestAnimationFrame(updateExaggeration);\n }\n\n /**\n * Enables the 3D terrain visualization\n * @param exaggeration\n * @returns\n */\n enableTerrain(exaggeration = this.terrainExaggeration) {\n if (exaggeration < 0) {\n console.warn(\"Terrain exaggeration cannot be negative.\");\n return;\n }\n\n // This function is mapped to a map \"data\" event. It checks that the terrain\n // tiles are loaded and when so, it starts an animation to make the terrain grow\n const dataEventTerrainGrow = async (evt: MapTerrainDataEvent) => {\n if (!this.terrain) {\n return;\n }\n\n if (\n evt.type !== \"data\" ||\n evt.dataType !== \"source\" ||\n !(\"source\" in evt)\n ) {\n return;\n }\n\n if (evt.sourceId !== \"maptiler-terrain\") {\n return;\n }\n\n const source = evt.source;\n\n if (source.type !== \"raster-dem\") {\n return;\n }\n\n if (!evt.isSourceLoaded) {\n return;\n }\n\n // We shut this event off because we want it to happen only once.\n // Yet, we cannot use the \"once\" method because only the last event of the series\n // has `isSourceLoaded` true\n this.off(\"data\", dataEventTerrainGrow);\n\n this.growTerrain(exaggeration);\n };\n\n // This is put into a function so that it can be called regardless\n // of the loading state of _this_ the map instance\n const addTerrain = () => {\n // When style is changed,\n this.isTerrainEnabled = true;\n this.terrainExaggeration = exaggeration;\n\n // Mapping it to the \"data\" event so that we can check that the terrain\n // growing starts only when terrain tiles are loaded (to reduce glitching)\n this.on(\"data\", dataEventTerrainGrow);\n\n this.addSource(defaults.terrainSourceId, {\n type: \"raster-dem\",\n url: defaults.terrainSourceURL,\n });\n\n // Setting up the terrain with a 0 exaggeration factor\n // so it loads ~seamlessly and then can grow from there\n this.setTerrain({\n source: defaults.terrainSourceId,\n exaggeration: 0,\n });\n };\n\n // The terrain has already been loaded,\n // we just update the exaggeration.\n if (this.getTerrain()) {\n this.isTerrainEnabled = true;\n this.growTerrain(exaggeration);\n return;\n }\n\n if (this.loaded() || this.isTerrainEnabled) {\n addTerrain();\n } else {\n this.once(\"load\", () => {\n if (this.getTerrain() && this.getSource(defaults.terrainSourceId)) {\n return;\n }\n addTerrain();\n });\n }\n }\n\n /**\n * Disable the 3D terrain visualization\n */\n disableTerrain() {\n // It could be disabled already\n if (!this.terrain) {\n return;\n }\n\n this.isTerrainEnabled = false;\n // this.stopFlattening = false;\n\n // Duration of the animation in millisec\n const animationLoopDuration = 1 * 1000;\n const startTime = performance.now();\n // This is supposedly 0, but it could be something else (e.g. already in the middle of growing, or user defined other)\n const currentExaggeration = this.terrain.exaggeration;\n\n // This is again called in a requestAnimationFrame ~loop, until the terrain has grown enough\n // that it has reached the target\n const updateExaggeration = () => {\n if (!this.terrain) {\n return;\n }\n\n // If the growing animation is triggered while flattening,\n // then we exist the flatening\n if (this.terrainGrowing) {\n return;\n }\n\n // normalized value in interval [0, 1] of where we are currently in the animation loop\n const positionInLoop =\n (performance.now() - startTime) / animationLoopDuration;\n\n // The animation goes on until we reached 99% of the growing sequence duration\n if (positionInLoop < 0.99) {\n const exaggerationFactor = Math.pow(1 - positionInLoop, 4);\n const newExaggeration = currentExaggeration * exaggerationFactor;\n this.terrain.exaggeration = newExaggeration;\n requestAnimationFrame(updateExaggeration);\n } else {\n this.terrain.exaggeration = 0;\n this.terrainGrowing = false;\n this.terrainFlattening = false;\n this.setTerrain(null);\n if (this.getSource(defaults.terrainSourceId)) {\n this.removeSource(defaults.terrainSourceId);\n }\n }\n\n this.triggerRepaint();\n };\n\n this.terrainGrowing = false;\n this.terrainFlattening = true;\n requestAnimationFrame(updateExaggeration);\n }\n\n /**\n * Sets the 3D terrain exageration factor.\n * If the terrain was not enabled prior to the call of this method,\n * the method `.enableTerrain()` will be called.\n * If `animate` is `true`, the terrain transformation will be animated in the span of 1 second.\n * If `animate` is `false`, no animated transition to the newly defined exaggeration.\n * @param exaggeration\n * @param animate\n */\n setTerrainExaggeration(exaggeration: number, animate = true) {\n if (!animate && this.terrain) {\n this.terrainExaggeration = exaggeration;\n this.terrain.exaggeration = exaggeration;\n this.triggerRepaint();\n } else {\n this.enableTerrain(exaggeration);\n }\n }\n\n /**\n * Perform an action when the style is ready. It could be at the moment of calling this method\n * or later.\n * @param cb\n */\n private onStyleReady(cb) {\n if (this.isStyleLoaded()) {\n cb();\n } else {\n this.once(\"styledata\", () => {\n cb();\n });\n }\n }\n\n async fitToIpBounds() {\n const ipGeolocateResult = await geolocation.info();\n this.fitBounds(\n ipGeolocateResult.country_bounds as [number, number, number, number],\n {\n duration: 0,\n padding: 100,\n }\n );\n }\n\n async centerOnIpPoint(zoom: number | undefined) {\n const ipGeolocateResult = await geolocation.info();\n this.jumpTo({\n center: [ipGeolocateResult.longitude, ipGeolocateResult.latitude],\n zoom: zoom || 11,\n });\n }\n\n getCameraHash() {\n const hashBin = new Float32Array(5);\n const center = this.getCenter();\n hashBin[0] = center.lng;\n hashBin[1] = center.lat;\n hashBin[2] = this.getZoom();\n hashBin[3] = this.getPitch();\n hashBin[4] = this.getBearing();\n return Base64.fromUint8Array(new Uint8Array(hashBin.buffer));\n }\n\n /**\n * Get the SDK config object.\n * This is convenient to dispatch the SDK configuration to externally built layers\n * that do not directly have access to the SDK configuration but do have access to a Map instance.\n * @returns\n */\n getSdkConfig(): SdkConfig {\n return config;\n }\n\n /**\n * Get the MapTiler session ID. Convenient to dispatch to externaly built component\n * that do not directly have access to the SDK configuration but do have access to a Map instance.\n * @returns\n */\n getMaptilerSessionId(): string {\n return MAPTILER_SESSION_ID;\n }\n\n /**\n * Updates the requestManager's transform request with a new function.\n *\n * @param transformRequest A callback run before the Map makes a request for an external URL. The callback can be used to modify the url, set headers, or set the credentials property for cross-origin requests.\n * Expected to return an object with a `url` property and optionally `headers` and `credentials` properties\n *\n * @returns {Map} `this`\n *\n * @example\n * map.setTransformRequest((url: string, resourceType: string) => {});\n */\n setTransformRequest(transformRequest: RequestTransformFunction) {\n super.setTransformRequest(combineTransformRequest(transformRequest));\n return this;\n }\n}\n","/**\n * This is an extension of MapLibre Marker to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class Marker extends maplibregl.Marker {\n addTo(map: Map | MapMLGL): this {\n return super.addTo(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre Popup to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class Popup extends maplibregl.Popup {\n addTo(map: Map | MapMLGL): this {\n return super.addTo(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre Style to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL, StyleOptions } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class Style extends maplibregl.Style {\n constructor(map: Map, options: StyleOptions = {}) {\n super(map as MapMLGL, options);\n }\n}\n","/**\n * This is an extension of MapLibre CanvasSource to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class CanvasSource extends maplibregl.CanvasSource {\n onAdd(map: Map | MapMLGL) {\n super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre GeoJSONSource to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class GeoJSONSource extends maplibregl.GeoJSONSource {\n onAdd(map: Map | MapMLGL) {\n super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre ImageSource to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class ImageSource extends maplibregl.ImageSource {\n onAdd(map: Map | MapMLGL) {\n super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre RasterTileSource to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class RasterTileSource extends maplibregl.RasterTileSource {\n onAdd(map: Map | MapMLGL) {\n super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre RasterDEMTileSource to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class RasterDEMTileSource extends maplibregl.RasterDEMTileSource {\n onAdd(map: Map | MapMLGL) {\n super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre VectorTileSource to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class VectorTileSource extends maplibregl.VectorTileSource {\n onAdd(map: Map | MapMLGL) {\n super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre VideoSource to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class VideoSource extends maplibregl.VideoSource {\n onAdd(map: Map | MapMLGL) {\n super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is an extension of MapLibre TerrainControl to make it fully type compatible with the SDK\n */\n\nimport maplibregl from \"maplibre-gl\";\nimport type { Map as MapMLGL } from \"maplibre-gl\";\nimport { Map } from \"./Map\";\n\nexport class TerrainControl extends maplibregl.TerrainControl {\n onAdd(map: Map | MapMLGL) {\n return super.onAdd(map as MapMLGL);\n }\n}\n","/**\n * This is TypeScript rewrite of the Point class to use instead of the version imported in MapLibre.\n * It also uses a class instead of prototypes.\n */\n\n/**\n * Row major 2x2 matrix\n */\nexport type Matrix2 = [number, number, number, number];\n\n/**\n * a point\n * @param x\n * @param y\n */\nexport class Point {\n public x: number;\n public y: number;\n\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n\n private _matMult(m: Matrix2): Point {\n const x = m[0] * this.x + m[1] * this.y;\n const y = m[2] * this.x + m[3] * this.y;\n this.x = x;\n this.y = y;\n return this;\n }\n\n private _add(p: Point): Point {\n this.x += p.x;\n this.y += p.y;\n return this;\n }\n\n private _sub(p: Point): Point {\n this.x -= p.x;\n this.y -= p.y;\n return this;\n }\n\n private _mult(k: number): Point {\n this.x *= k;\n this.y *= k;\n return this;\n }\n\n private _div(k: number): Point {\n this.x /= k;\n this.y /= k;\n return this;\n }\n\n private _multByPoint(p: Point): Point {\n this.x *= p.x;\n this.y *= p.y;\n return this;\n }\n\n private _divByPoint(p: Point): Point {\n this.x /= p.x;\n this.y /= p.y;\n return this;\n }\n\n private _unit(): Point {\n this._div(this.mag());\n return this;\n }\n\n private _perp(): Point {\n const y = this.y;\n this.y = this.x;\n this.x = -y;\n return this;\n }\n\n private _rotate(angle: number): Point {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const x = cos * this.x - sin * this.y;\n const y = sin * this.x + cos * this.y;\n this.x = x;\n this.y = y;\n return this;\n }\n\n private _rotateAround(angle: number, p: Point): Point {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y);\n const y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);\n this.x = x;\n this.y = y;\n return this;\n }\n\n private _round(): Point {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n return this;\n }\n\n /**\n * Clone this point, returning a new point that can be modified\n * without affecting the old one.\n * @return {Point} the clone\n */\n clone(): Point {\n return new Point(this.x, this.y);\n }\n\n /**\n * Add this point's x & y coordinates to another point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n add(p: Point): Point {\n return this.clone()._add(p);\n }\n\n /**\n * Subtract this point's x & y coordinates to from point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n sub(p: Point): Point {\n return this.clone()._sub(p);\n }\n\n /**\n * Multiply this point's x & y coordinates by point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n multByPoint(p: Point): Point {\n return this.clone()._multByPoint(p);\n }\n\n /**\n * Divide this point's x & y coordinates by point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n divByPoint(p: Point): Point {\n return this.clone()._divByPoint(p);\n }\n\n /**\n * Multiply this point's x & y coordinates by a factor,\n * yielding a new point.\n * @param {Number} k factor\n * @return {Point} output point\n */\n mult(k: number): Point {\n return this.clone()._mult(k);\n }\n\n /**\n * Divide this point's x & y coordinates by a factor,\n * yielding a new point.\n * @param {Point} k factor\n * @return {Point} output point\n */\n div(k: number): Point {\n return this.clone()._div(k);\n }\n\n /**\n * Rotate this point around the 0, 0 origin by an angle a,\n * given in radians\n * @param {Number} a angle to rotate around, in radians\n * @return {Point} output point\n */\n rotate(a: number): Point {\n return this.clone()._rotate(a);\n }\n\n /**\n * Rotate this point around p point by an angle a,\n * given in radians\n * @param {Number} a angle to rotate around, in radians\n * @param {Point} p Point to rotate around\n * @return {Point} output point\n */\n rotateAround(a: number, p: Point): Point {\n return this.clone()._rotateAround(a, p);\n }\n\n /**\n * Multiply this point by a 4x1 transformation matrix\n * @param {Array<Number>} m transformation matrix\n * @return {Point} output point\n */\n matMult(m: Matrix2): Point {\n return this.clone()._matMult(m);\n }\n\n /**\n * Calculate this point but as a unit vector from 0, 0, meaning\n * that the distance from the resulting point to the 0, 0\n * coordinate will be equal to 1 and the angle from the resulting\n * point to the 0, 0 coordinate will be the same as before.\n * @return {Point} unit vector point\n */\n unit(): Point {\n return this.clone()._unit();\n }\n\n /**\n * Compute a perpendicular point, where the new y coordinate\n * is the old x coordinate and the new x coordinate is the old y\n * coordinate multiplied by -1\n * @return {Point} perpendicular point\n */\n perp(): Point {\n return this.clone()._perp();\n }\n\n /**\n * Return a version of this point with the x & y coordinates\n * rounded to integers.\n * @return {Point} rounded point\n */\n round(): Point {\n return this.clone()._round();\n }\n\n /**\n * Return the magnitude of this point: this is the Euclidean\n * distance from the 0, 0 coordinate to this point's x and y\n * coordinates.\n * @return {Number} magnitude\n */\n mag(): number {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n\n /**\n * Judge whether this point is equal to another point, returning\n * true or false.\n * @param {Point} other the other point\n * @return {boolean} whether the points are equal\n */\n equals(other): boolean {\n return this.x === other.x && this.y === other.y;\n }\n\n /**\n * Calculate the distance from this point to another point\n * @param {Point} p the other point\n * @return {Number} distance\n */\n dist(p): number {\n return Math.sqrt(this.distSqr(p));\n }\n\n /**\n * Calculate the distance from this point to another point,\n * without the square root step. Useful if you're comparing\n * relative distances.\n * @param {Point} p the other point\n * @return {Number} distance\n */\n distSqr(p): number {\n const dx = p.x - this.x;\n const dy = p.y - this.y;\n return dx * dx + dy * dy;\n }\n\n /**\n * Get the angle from the 0, 0 coordinate to this point, in radians\n * coordinates.\n * @return {Number} angle\n */\n angle(): number {\n return Math.atan2(this.y, this.x);\n }\n\n /**\n * Get the angle from this point to another point, in radians\n * @param {Point} b the other point\n * @return {Number} angle\n */\n angleTo(b: Point): number {\n return Math.atan2(this.y - b.y, this.x - b.x);\n }\n\n /**\n * Get the angle between this point and another point, in radians\n * @param {Point} b the other point\n * @return {Number} angle\n */\n angleWith(b: Point): number {\n return this.angleWithSep(b.x, b.y);\n }\n\n /*\n * Find the angle of the two vectors, solving the formula for\n * the cross product a x b = |a||b|sin(θ) for θ.\n * @param {Number} x the x-coordinate\n * @param {Number} y the y-coordinate\n * @return {Number} the angle in radians\n */\n angleWithSep(x: number, y: number): number {\n return Math.atan2(this.x * y - this.y * x, this.x * x + this.y * y);\n }\n\n /**\n * Construct a point from an array if necessary, otherwise if the input\n * is already a Point, or an unknown type, return it unchanged\n * @param {Array<number> | Point} a any kind of input value\n * @return {Point} constructed point, or passed-through value.\n * @example\n * // this\n * var point = Point.convert([0, 1]);\n * // is equivalent to\n * var point = new Point(0, 1);\n */\n static convert(a: Point | Array<number>) {\n if (a instanceof Point) {\n return a;\n }\n if (Array.isArray(a)) {\n return new Point(a[0], a[1]);\n }\n return a;\n }\n}\n","/**\n * Maplibre export first, then extensions can overload the exports.\n */\nexport * from \"maplibre-gl\";\n\n/**\n * To perform explicit named export so that they are included in the UMD bundle\n */\n// import * as ML from \"maplibre-gl\";\n\nimport maplibregl from \"maplibre-gl\";\n\nconst {\n // supported,\n setRTLTextPlugin,\n getRTLTextPluginStatus,\n LngLat,\n LngLatBounds,\n MercatorCoordinate,\n Evented,\n AJAXError,\n prewarm,\n clearPrewarmedResources,\n version,\n workerCount,\n maxParallelImageRequests,\n workerUrl,\n addProtocol,\n removeProtocol,\n} = maplibregl;\n\n// We still want to export maplibregl.Map, but as a different name\nconst MapMLGL = maplibregl.Map;\nconst MarkerMLGL = maplibregl.Marker;\nconst PopupMLGL = maplibregl.Popup;\nconst StyleMLGL = maplibregl.Style;\nconst CanvasSourceMLGL = maplibregl.CanvasSource;\nconst GeoJSONSourceMLGL = maplibregl.GeoJSONSource;\nconst ImageSourceMLGL = maplibregl.ImageSource;\nconst RasterTileSourceMLGL = maplibregl.RasterTileSource;\nconst RasterDEMTileSourceMLGL = maplibregl.RasterDEMTileSource;\nconst VectorTileSourceMLGL = maplibregl.VectorTileSource;\nconst VideoSourceMLGL = maplibregl.VideoSource;\nconst NavigationControlMLGL = maplibregl.NavigationControl;\nconst GeolocateControlMLGL = maplibregl.GeolocateControl;\nconst AttributionControlMLGL = maplibregl.AttributionControl;\nconst LogoControlMLGL = maplibregl.LogoControl;\nconst ScaleControlMLGL = maplibregl.ScaleControl;\nconst FullscreenControlMLGL = maplibregl.FullscreenControl;\nconst TerrainControlMLGL = maplibregl.TerrainControl;\n\nexport {\n // supported,\n setRTLTextPlugin,\n getRTLTextPluginStatus,\n PopupMLGL,\n MarkerMLGL,\n StyleMLGL,\n LngLat,\n LngLatBounds,\n MercatorCoordinate,\n Evented,\n AJAXError,\n CanvasSourceMLGL,\n GeoJSONSourceMLGL,\n ImageSourceMLGL,\n RasterDEMTileSourceMLGL,\n RasterTileSourceMLGL,\n VectorTileSourceMLGL,\n VideoSourceMLGL,\n prewarm,\n clearPrewarmedResources,\n version,\n workerCount,\n maxParallelImageRequests,\n workerUrl,\n addProtocol,\n removeProtocol,\n MapMLGL,\n};\n\n// Exporting types of class instances from MapLibre:\nexport type NavigationControlMLGL = InstanceType<typeof NavigationControlMLGL>;\nexport type GeolocateControlMLGL = InstanceType<typeof GeolocateControlMLGL>;\nexport type AttributionControlMLGL = InstanceType<\n typeof AttributionControlMLGL\n>;\nexport type LogoControlMLGL = InstanceType<typeof LogoControlMLGL>;\nexport type ScaleControlMLGL = InstanceType<typeof ScaleControlMLGL>;\nexport type FullscreenControlMLGL = InstanceType<typeof FullscreenControlMLGL>;\nexport type TerrainControlMLGL = InstanceType<typeof TerrainControlMLGL>;\nexport type MarkerMLGL = InstanceType<typeof MarkerMLGL>;\nexport type PopupMLGL = InstanceType<typeof PopupMLGL>;\nexport type StyleMLGL = InstanceType<typeof StyleMLGL>;\nexport type LngLat = InstanceType<typeof LngLat>;\nexport type LngLatBounds = InstanceType<typeof LngLatBounds>;\nexport type MercatorCoordinate = InstanceType<typeof MercatorCoordinate>;\nexport type Evented = InstanceType<typeof Evented>;\nexport type AJAXError = InstanceType<typeof AJAXError>;\nexport type CanvasSourceMLGL = InstanceType<typeof CanvasSourceMLGL>;\nexport type GeoJSONSourceMLGL = InstanceType<typeof GeoJSONSourceMLGL>;\nexport type ImageSourceMLGL = InstanceType<typeof ImageSourceMLGL>;\nexport type RasterDEMTileSourceMLGL = InstanceType<\n typeof RasterDEMTileSourceMLGL\n>;\nexport type RasterTileSourceMLGL = InstanceType<typeof RasterTileSourceMLGL>;\nexport type VectorTileSourceMLGL = InstanceType<typeof VectorTileSourceMLGL>;\nexport type VideoSourceMLGL = InstanceType<typeof VideoSourceMLGL>;\nexport type MapMLGL = InstanceType<typeof MapMLGL>;\n\n// SDK specific\nimport { Map, GeolocationType } from \"./Map\";\nimport type { MapOptions, LoadWithTerrainEvent } from \"./Map\";\n\nimport { Marker } from \"./Marker\";\nimport { Popup } from \"./Popup\";\nimport { Style } from \"./Style\";\nimport { CanvasSource } from \"./CanvasSource\";\nimport { GeoJSONSource } from \"./GeoJSONSource\";\nimport { ImageSource } from \"./ImageSource\";\nimport { RasterTileSource } from \"./RasterTileSource\";\nimport { RasterDEMTileSource } from \"./RasterDEMTileSource\";\nimport { VectorTileSource } from \"./VectorTileSource\";\nimport { VideoSource } from \"./VideoSource\";\nimport { NavigationControl } from \"./NavigationControl\";\nimport { GeolocateControl } from \"./GeolocateControl\";\nimport { AttributionControl } from \"./AttributionControl\";\nimport { LogoControl } from \"./LogoControl\";\nimport { ScaleControl } from \"./ScaleControl\";\nimport { FullscreenControl } from \"./FullscreenControl\";\nimport { TerrainControl } from \"./TerrainControl\";\n\n// Import of modified versions of the controls\nimport { MaptilerGeolocateControl } from \"./MaptilerGeolocateControl\";\nimport { MaptilerLogoControl } from \"./MaptilerLogoControl\";\nimport { MaptilerTerrainControl } from \"./MaptilerTerrainControl\";\nimport { MaptilerNavigationControl } from \"./MaptilerNavigationControl\";\n\n// importing client functions to expose them as part of the SDK\nimport type {\n BBox,\n Position,\n GeocodingOptions,\n CoordinatesSearchOptions,\n CenteredStaticMapOptions,\n AutomaticStaticMapOptions,\n BoundedStaticMapOptions,\n} from \"@maptiler/client\";\n\nimport {\n geocoding,\n geolocation,\n coordinates,\n data,\n staticMaps,\n ServiceError,\n LanguageGeocoding,\n LanguageGeocodingString,\n ReferenceMapStyle,\n MapStyle,\n MapStyleVariant,\n} from \"@maptiler/client\";\n\nimport type { MapStyleType } from \"@maptiler/client\";\n\nimport { Point } from \"./Point\";\nimport type { Matrix2 } from \"./Point\";\n\n// Importing enums and configs\nimport { config, SdkConfig } from \"./config\";\nimport { Language, LanguageString, LanguageKey } from \"./language\";\nimport type { Unit } from \"./unit\";\n\n// Exporting types\nexport type {\n MapOptions,\n LoadWithTerrainEvent,\n GeocodingOptions,\n BBox,\n Position,\n CoordinatesSearchOptions,\n CenteredStaticMapOptions,\n BoundedStaticMapOptions,\n AutomaticStaticMapOptions,\n LanguageString,\n LanguageKey,\n LanguageGeocodingString,\n Unit,\n MapStyleType,\n Matrix2,\n};\n\n// Exporting classes, objects, functions, etc.\nexport {\n Map,\n Marker,\n Popup,\n Style,\n CanvasSource,\n GeoJSONSource,\n ImageSource,\n RasterTileSource,\n RasterDEMTileSource,\n VideoSource,\n NavigationControl,\n GeolocateControl,\n AttributionControl,\n LogoControl,\n ScaleControl,\n FullscreenControl,\n TerrainControl,\n VectorTileSource,\n GeolocationType,\n SdkConfig,\n config,\n ServiceError,\n geocoding,\n geolocation,\n coordinates,\n data,\n staticMaps,\n MapStyle,\n Language,\n LanguageGeocoding,\n Point,\n ReferenceMapStyle,\n MapStyleVariant,\n MaptilerGeolocateControl,\n MaptilerLogoControl,\n MaptilerTerrainControl,\n MaptilerNavigationControl,\n};\n"],"names":["uuidv4","clientConfig","maplibregl","__spreadValues","Marker","LngLat","LngLatBounds","__spreadProps"],"mappings":";;;;;;;;AAGA,MAAM,QAAW,GAAA;AAAA;AAAA;AAAA;AAAA,EAIf,IAAM,EAAA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAON,UAAY,EAAA,YAAA;AAAA;AAAA;AAAA;AAAA,EAKZ,KAAO,EAAA,OAAA;AAAA;AAAA;AAAA;AAAA,EAKP,SAAW,EAAA,UAAA;AAAA;AAAA;AAAA;AAAA,EAKX,KAAO,EAAA,EAAA;AAAA,EAEP,QAAU,EAAA,IAAA;AAAA,EACV,OAAS,EAAA,IAAA;AAAA,EACT,MAAQ,EAAA,IAAA;AAAA,EACR,QAAU,EAAA,IAAA;AAAA,EACV,WAAa,EAAA,IAAA;AAAA,EACb,MAAQ,EAAA,IAAA;AAAA,EACR,WAAa,EAAA,IAAA;AAAA,EACb,OAAS,EAAA,IAAA;AAAA,EACT,MAAQ,EAAA,IAAA;AAAA,EACR,SAAW,EAAA,IAAA;AAAA,EACX,OAAS,EAAA,IAAA;AAAA,EACT,OAAS,EAAA,IAAA;AAAA,EACT,QAAU,EAAA,IAAA;AAAA,EACV,QAAU,EAAA,IAAA;AAAA,EACV,KAAO,EAAA,IAAA;AAAA,EACP,MAAQ,EAAA,IAAA;AAAA,EACR,KAAO,EAAA,IAAA;AAAA,EACP,OAAS,EAAA,IAAA;AAAA,EACT,SAAW,EAAA,IAAA;AAAA,EACX,QAAU,EAAA,IAAA;AAAA,EACV,OAAS,EAAA,IAAA;AAAA,EACT,MAAQ,EAAA,IAAA;AAAA,EACR,OAAS,EAAA,IAAA;AAAA,EACT,QAAU,EAAA,IAAA;AAAA,EACV,MAAQ,EAAA,IAAA;AAAA,EACR,KAAO,EAAA,IAAA;AAAA,EACP,MAAQ,EAAA,IAAA;AAAA,EACR,KAAO,EAAA,IAAA;AAAA,EACP,SAAW,EAAA,IAAA;AAAA,EACX,SAAW,EAAA,IAAA;AAAA,EACX,UAAY,EAAA,IAAA;AAAA,EACZ,KAAO,EAAA,IAAA;AAAA,EACP,OAAS,EAAA,IAAA;AAAA,EACT,QAAU,EAAA,IAAA;AAAA,EACV,iBAAmB,EAAA,SAAA;AAAA,EACnB,aAAe,EAAA,SAAA;AAAA,EACf,cAAgB,EAAA,OAAA;AAAA,EAChB,aAAe,EAAA,SAAA;AAAA,EACf,OAAS,EAAA,IAAA;AAAA,EACT,MAAQ,EAAA,IAAA;AAAA,EACR,MAAQ,EAAA,IAAA;AAAA,EACR,YAAc,EAAA,SAAA;AAAA,EACd,OAAS,EAAA,IAAA;AAAA,EACT,WAAa,EAAA,IAAA;AAAA,EACb,OAAS,EAAA,IAAA;AAAA,EACT,UAAY,EAAA,IAAA;AAAA,EACZ,aAAe,EAAA,IAAA;AAAA,EACf,UAAY,EAAA,IAAA;AAAA,EACZ,SAAW,EAAA,IAAA;AAAA,EACX,OAAS,EAAA,IAAA;AAAA,EACT,SAAW,EAAA,IAAA;AAAA,EACX,OAAS,EAAA,IAAA;AAAA,EACT,MAAQ,EAAA,IAAA;AAAA,EACR,UAAY,EAAA,IAAA;AAAA,EACZ,QAAU,EAAA,IAAA;AAAA,EACV,OAAS,EAAA,IAAA;AAAA,EACT,OAAS,EAAA,IAAA;AAAA,EACT,eAAiB,EAAA,IAAA;AAAA,EACjB,gBAAkB,EAAA,IAAA;AAAA,EAClB,aAAe,EAAA,SAAA;AAAA,EACf,MAAQ,EAAA,IAAA;AAAA,EACR,OAAS,EAAA,IAAA;AAAA,EACT,OAAS,EAAA,IAAA;AAAA,EACT,OAAS,EAAA,IAAA;AAAA,EACT,KAAO,EAAA,IAAA;AAAA,EACP,MAAQ,EAAA,IAAA;AAAA,EACR,IAAM,EAAA,IAAA;AAAA,EACN,OAAS,EAAA,IAAA;AAAA,EACT,SAAW,EAAA,IAAA;AAAA,EACX,KAAO,EAAA,IAAA;AACT,EAAA;AAEA,MAAM,kBAAkB,IAAI,GAAA,CAAI,MAAO,CAAA,MAAA,CAAO,QAAQ,CAAkB,CAAA,CAAA;AAExE,SAAS,oBAAoB,IAAuB,EAAA;AAClD,EAAO,OAAA,eAAA,CAAgB,IAAI,IAAI,CAAA,CAAA;AACjC,CAAA;AAEA,MAAM,kBAAkB,IAAI,GAAA,CAAI,MAAO,CAAA,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAA;AAcvD,SAAS,kBAAqC,GAAA;AAC5C,EAAI,IAAA,OAAO,cAAc,WAAa,EAAA;AACpC,IAAO,OAAA,IAAA,CAAK,gBACT,CAAA,eAAA,GACA,MAAO,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,CAAA;AAAA,GACxB;AAEA,EAAA,MAAM,iBAAiB,KAAM,CAAA,IAAA;AAAA,IAC3B,IAAI,GAAA,CAAI,SAAU,CAAA,SAAA,CAAU,GAAI,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,KAAM,CAAA,GAAG,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;AAAA,IACvD,MAAO,CAAA,CAAC,MAAM,eAAgB,CAAA,GAAA,CAAI,CAAmB,CAAC,CAAA,CAAA;AAExD,EAAA,OAAO,cAAe,CAAA,MAAA,GACjB,cAAe,CAAA,CAAC,IACjB,QAAS,CAAA,KAAA,CAAA;AACf;;ACnIO,MAAM,sBAAsBA,EAAO,EAAA,CAAA;AAK1C,MAAM,kBAAkB,YAAa,CAAA;AAAA,EA+BnC,WAAc,GAAA;AACZ,IAAM,KAAA,EAAA,CAAA;AA5BR;AAAA;AAAA;AAAA,IAAA,IAAA,CAAA,eAAA,GAAyC,QAAS,CAAA,IAAA,CAAA;AAMlD;AAAA;AAAA;AAAA;AAAA,IAA2C,IAAA,CAAA,iBAAA,GAAA,IAAA,CAAA;AAS3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAU,IAAA,CAAA,OAAA,GAAA,IAAA,CAAA;AAKV;AAAA;AAAA;AAAA,IAAA,IAAA,CAAQ,KAAc,GAAA,QAAA,CAAA;AAKtB;AAAA;AAAA;AAAA,IAAA,IAAA,CAAQ,OAAU,GAAA,EAAA,CAAA;AAAA,GAIlB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,KAAK,CAAS,EAAA;AAChB,IAAA,IAAA,CAAK,KAAQ,GAAA,CAAA,CAAA;AACb,IAAK,IAAA,CAAA,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAA;AAAA,GACrB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,IAAa,GAAA;AACf,IAAA,OAAO,IAAK,CAAA,KAAA,CAAA;AAAA,GACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAO,CAAW,EAAA;AACpB,IAAA,IAAA,CAAK,OAAU,GAAA,CAAA,CAAA;AACf,IAAAC,QAAA,CAAa,MAAS,GAAA,CAAA,CAAA;AACtB,IAAK,IAAA,CAAA,IAAA,CAAK,UAAU,CAAC,CAAA,CAAA;AAAA,GACvB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAiB,GAAA;AACnB,IAAA,OAAO,IAAK,CAAA,OAAA,CAAA;AAAA,GACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAM,CAAkB,EAAA;AAC1B,IAAAA,QAAA,CAAa,KAAQ,GAAA,CAAA,CAAA;AAAA,GACvB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,KAA8B,GAAA;AAChC,IAAA,OAAOA,QAAa,CAAA,KAAA,CAAA;AAAA,GACtB;AACF,CAAA;AAEM,MAAA,MAAA,GAAS,IAAI,SAAU;;ACvF7B,MAAM,QAAW,GAAA;AAAA,EACf,eAAiB,EAAA,6CAAA;AAAA,EACjB,WAAa,EAAA,2BAAA;AAAA,EACb,eAAiB,EAAA,kBAAA;AAAA,EACjB,YACE,EAAA,8EAAA;AAAA,EACF,iBAAiB,QAAS,CAAA,IAAA;AAAA,EAC1B,mBAAmB,QAAS,CAAA,KAAA;AAAA,EAC5B,gBAAkB,EAAA,0DAAA;AAAA,EAClB,eAAiB,EAAA,kBAAA;AACnB,CAAA,CAAA;AAEA,MAAA,CAAO,OAAO,QAAQ,CAAA;;ACTT,MAAA,WAAA,SAAoBC,oBAAW,WAAY,CAAA;AAAA,EACtD,MAAM,GAAoB,EAAA;AACxB,IAAO,OAAA,KAAA,CAAM,MAAM,GAAc,CAAA,CAAA;AAAA,GACnC;AACF;;ACGO,MAAM,4BAA4B,WAAY,CAAA;AAAA,EAInD,WAAA,CAAY,OAAuB,GAAA,EAAI,EAAA;AAnBzC,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAoBI,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAJf,IAAA,IAAA,CAAQ,OAAU,GAAA,EAAA,CAAA;AAClB,IAAA,IAAA,CAAQ,OAAU,GAAA,EAAA,CAAA;AAKhB,IAAA,IAAA,CAAK,OAAU,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,OAAR,KAAA,IAAA,GAAA,EAAA,GAAmB,QAAS,CAAA,eAAA,CAAA;AAC3C,IAAA,IAAA,CAAK,OAAU,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,OAAR,KAAA,IAAA,GAAA,EAAA,GAAmB,QAAS,CAAA,WAAA,CAAA;AAAA,GAC7C;AAAA,EAEA,MAAM,GAAuB,EAAA;AAC3B,IAAA,IAAA,CAAK,IAAO,GAAA,GAAA,CAAA;AACZ,IAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAK,OAAW,IAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAA;AAC7C,IAAA,IAAA,CAAK,UAAa,GAAA,MAAA,CAAO,QAAS,CAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AACrD,IAAA,IAAA,CAAK,WAAW,SAAY,GAAA,iBAAA,CAAA;AAC5B,IAAA,MAAM,MAAS,GAAA,MAAA,CAAO,QAAS,CAAA,aAAA,CAAc,GAAG,CAAA,CAAA;AAChD,IAAA,MAAA,CAAO,MAAM,gBAAmB,GAAA,WAAA,CAAA;AAChC,IAAA,MAAA,CAAO,MAAM,MAAS,GAAA,SAAA,CAAA;AACtB,IAAA,MAAA,CAAO,MAAM,OAAU,GAAA,OAAA,CAAA;AACvB,IAAA,MAAA,CAAO,MAAM,MAAS,GAAA,MAAA,CAAA;AACtB,IAAA,MAAA,CAAO,MAAM,MAAS,GAAA,eAAA,CAAA;AACtB,IAAA,MAAA,CAAO,MAAM,QAAW,GAAA,QAAA,CAAA;AACxB,IAAA,MAAA,CAAO,MAAM,KAAQ,GAAA,MAAA,CAAA;AACrB,IAAO,MAAA,CAAA,KAAA,CAAM,eAAkB,GAAA,CAAA,IAAA,EAAO,IAAK,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA;AAC3C,IAAA,MAAA,CAAO,MAAM,cAAiB,GAAA,YAAA,CAAA;AAC9B,IAAA,MAAA,CAAO,MAAM,KAAQ,GAAA,OAAA,CAAA;AACrB,IAAA,MAAA,CAAO,MAAM,MAAS,GAAA,MAAA,CAAA;AAEtB,IAAA,MAAA,CAAO,MAAS,GAAA,QAAA,CAAA;AAChB,IAAA,MAAA,CAAO,GAAM,GAAA,UAAA,CAAA;AACb,IAAA,MAAA,CAAO,OAAO,IAAK,CAAA,OAAA,CAAA;AACnB,IAAO,MAAA,CAAA,YAAA,CAAa,cAAc,eAAe,CAAA,CAAA;AACjD,IAAO,MAAA,CAAA,YAAA,CAAa,OAAO,UAAU,CAAA,CAAA;AACrC,IAAK,IAAA,CAAA,UAAA,CAAW,YAAY,MAAM,CAAA,CAAA;AAClC,IAAK,IAAA,CAAA,UAAA,CAAW,MAAM,OAAU,GAAA,OAAA,CAAA;AAEhC,IAAA,IAAA,CAAK,IAAK,CAAA,EAAA,CAAG,QAAU,EAAA,IAAA,CAAK,cAAc,CAAA,CAAA;AAC1C,IAAA,IAAA,CAAK,cAAe,EAAA,CAAA;AAEpB,IAAA,OAAO,IAAK,CAAA,UAAA,CAAA;AAAA,GACd;AACF;;;;;;;;;;;;;;;;;;AC/CO,SAAS,SAAY,GAAA;AAE1B,EAAI,IAAAA,mBAAA,CAAW,sBAAuB,EAAA,KAAM,aAAe,EAAA;AACzD,IAAWA,mBAAA,CAAA,gBAAA;AAAA,MACT,QAAS,CAAA,YAAA;AAAA,MACT,IAAA;AAAA,MACA,IAAA;AAAA;AAAA,KACF,CAAA;AAAA,GACF;AACF,CAAA;AAIgB,SAAA,OAAA,CAAQ,KAAoB,OAAoB,EAAA;AAC9D,EAAI,GAAA,CAAA,OAAA,CAAQ,CAAC,EAAO,KAAA;AAClB,IAAI,IAAA,CAAC,OAAQ,CAAA,EAAE,CAAG,EAAA;AAChB,MAAA,OAAA;AAAA,KACF;AACA,IAAA,OAAA,CAAQ,EAAE,CAAI,GAAA,OAAA,CAAQ,EAAE,CAAA,CAAE,KAAK,OAAO,CAAA,CAAA;AAAA,GACvC,CAAA,CAAA;AACH,CAAA;AAIgB,SAAA,SAAA,CACd,OACA,EAAA,SAAA,EACA,SAC0B,EAAA;AAC1B,EAAA,MAAM,EAAK,GAAA,MAAA,CAAO,QAAS,CAAA,aAAA,CAAc,OAAO,CAAA,CAAA;AAChD,EAAA,IAAI,SAAc,KAAA,KAAA,CAAA;AAAW,IAAA,EAAA,CAAG,SAAY,GAAA,SAAA,CAAA;AAC5C,EAAI,IAAA,SAAA;AAAW,IAAA,SAAA,CAAU,YAAY,EAAE,CAAA,CAAA;AACvC,EAAO,OAAA,EAAA,CAAA;AACT,CAAA;AAIO,SAAS,UAAU,IAAmB,EAAA;AAC3C,EAAA,IAAI,KAAK,UAAY,EAAA;AACnB,IAAK,IAAA,CAAA,UAAA,CAAW,YAAY,IAAI,CAAA,CAAA;AAAA,GAClC;AACF,CAAA;AAUgB,SAAA,6BAAA,CACd,KACA,YACmB,EAAA;AACnB,EAAA,IAAI,MAAS,GAAA,IAAA,CAAA;AAEb,EAAI,IAAA;AAIF,IAAS,MAAA,GAAA,IAAI,IAAI,GAAG,CAAA,CAAA;AAAA,WACb,CAAP,EAAA;AACA,IAAO,OAAA;AAAA,MACL,GAAA;AAAA,KACF,CAAA;AAAA,GACF;AAEA,EAAI,IAAA,MAAA,CAAO,IAAS,KAAA,QAAA,CAAS,eAAiB,EAAA;AAC5C,IAAA,IAAI,CAAC,MAAA,CAAO,YAAa,CAAA,GAAA,CAAI,KAAK,CAAG,EAAA;AACnC,MAAA,MAAA,CAAO,YAAa,CAAA,MAAA,CAAO,KAAO,EAAA,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA,KACjD;AAEA,IAAA,IAAI,OAAO,OAAS,EAAA;AAClB,MAAO,MAAA,CAAA,YAAA,CAAa,MAAO,CAAA,OAAA,EAAS,mBAAmB,CAAA,CAAA;AAAA,KACzD;AAAA,GACF;AAEA,EAAO,OAAA;AAAA,IACL,KAAK,MAAO,CAAA,IAAA;AAAA,GACd,CAAA;AACF,CAAA;AAQgB,SAAA,uBAAA,CACd,iBAA2C,IACjB,EAAA;AAC1B,EAAO,OAAA,SACL,KACA,YACmB,EAAA;AACnB,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAM,MAAA,EAAA,GAAK,cAAe,CAAA,GAAA,EAAK,YAAY,CAAA,CAAA;AAC3C,MAAM,MAAA,GAAA,GAAM,6BAA8B,CAAA,EAAA,CAAG,GAAG,CAAA,CAAA;AAEhD,MAAA,OAAOC,sCACF,EACA,CAAA,EAAA,GAAA,CAAA,CAAA;AAAA,KAEA,MAAA;AACL,MAAA,OAAO,8BAA8B,GAAG,CAAA,CAAA;AAAA,KAC1C;AAAA,GACF,CAAA;AACF;;AC9GO,SAAS,aACd,KAOwC,EAAA;AACxC,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAO,OAAA,QAAA,CAAS,mBAAmB,CAAC,CAAA,CAAE,gBAAgB,CACnD,CAAA,iBAAA,GACA,mBAAoB,EAAA,CAAA;AAAA,GACzB;AAGA,EAAA,IAAI,OAAO,KAAA,KAAU,QAAY,IAAA,KAAA,YAAiB,MAAQ,EAAA;AACxD,IAAI,IAAA,CAAC,KAAM,CAAA,UAAA,CAAW,MAAM,CAAA,IAAK,MAAM,WAAY,EAAA,CAAE,QAAS,CAAA,OAAO,CAAG,EAAA;AAGtE,MAAO,OAAA,KAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAA,OAAO,eAAe,KAAK,CAAA,CAAA;AAAA,KAC7B;AAAA,GACF;AAEA,EAAA,IAAI,iBAAiB,eAAiB,EAAA;AACpC,IAAA,OAAO,MAAM,mBAAoB,EAAA,CAAA;AAAA,GACnC;AAEA,EAAA,IAAI,iBAAiB,iBAAmB,EAAA;AACtC,IAAQ,OAAA,KAAA,CAAM,iBAAkB,EAAA,CAAsB,mBAAoB,EAAA,CAAA;AAAA,GAC5E;AAEA,EAAO,OAAA,KAAA,CAAA;AACT;;AClCO,MAAM,sBAAsD,CAAA;AAAA,EAKjE,WAAc,GAAA;AACZ,IAAA,OAAA,CAAQ,CAAC,gBAAA,EAAkB,oBAAoB,CAAA,EAAG,IAAI,CAAA,CAAA;AAAA,GACxD;AAAA,EAEA,MAAM,GAAU,EAAA;AACd,IAAA,IAAA,CAAK,IAAO,GAAA,GAAA,CAAA;AACZ,IAAK,IAAA,CAAA,UAAA,GAAa,SAAU,CAAA,KAAA,EAAO,uCAAuC,CAAA,CAAA;AAC1E,IAAA,IAAA,CAAK,cAAiB,GAAA,SAAA;AAAA,MACpB,QAAA;AAAA,MACA,yBAAA;AAAA,MACA,IAAK,CAAA,UAAA;AAAA,KACP,CAAA;AACA,IAAA,SAAA,CAAU,MAAQ,EAAA,sBAAA,EAAwB,IAAK,CAAA,cAAc,CAAE,CAAA,YAAA;AAAA,MAC7D,aAAA;AAAA,MACA,MAAA;AAAA,KACF,CAAA;AACA,IAAA,IAAA,CAAK,eAAe,IAAO,GAAA,QAAA,CAAA;AAC3B,IAAA,IAAA,CAAK,cAAe,CAAA,gBAAA,CAAiB,OAAS,EAAA,IAAA,CAAK,cAAc,CAAA,CAAA;AAEjE,IAAA,IAAA,CAAK,kBAAmB,EAAA,CAAA;AACxB,IAAA,IAAA,CAAK,IAAK,CAAA,EAAA,CAAG,SAAW,EAAA,IAAA,CAAK,kBAAkB,CAAA,CAAA;AAC/C,IAAA,OAAO,IAAK,CAAA,UAAA,CAAA;AAAA,GACd;AAAA,EAEA,QAAW,GAAA;AACT,IAAA,SAAA,CAAU,KAAK,UAAU,CAAA,CAAA;AACzB,IAAA,IAAA,CAAK,IAAK,CAAA,GAAA,CAAI,SAAW,EAAA,IAAA,CAAK,kBAAkB,CAAA,CAAA;AAChD,IAAA,IAAA,CAAK,IAAO,GAAA,KAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,cAAiB,GAAA;AACf,IAAI,IAAA,IAAA,CAAK,IAAK,CAAA,UAAA,EAAc,EAAA;AAC1B,MAAA,IAAA,CAAK,KAAK,cAAe,EAAA,CAAA;AAAA,KACpB,MAAA;AACL,MAAA,IAAA,CAAK,KAAK,aAAc,EAAA,CAAA;AAAA,KAC1B;AAEA,IAAA,IAAA,CAAK,kBAAmB,EAAA,CAAA;AAAA,GAC1B;AAAA,EAEA,kBAAqB,GAAA;AACnB,IAAK,IAAA,CAAA,cAAA,CAAe,SAAU,CAAA,MAAA,CAAO,yBAAyB,CAAA,CAAA;AAC9D,IAAK,IAAA,CAAA,cAAA,CAAe,SAAU,CAAA,MAAA,CAAO,iCAAiC,CAAA,CAAA;AAEtE,IAAI,IAAA,IAAA,CAAK,IAAK,CAAA,UAAA,EAAc,EAAA;AAC1B,MAAK,IAAA,CAAA,cAAA,CAAe,SAAU,CAAA,GAAA,CAAI,iCAAiC,CAAA,CAAA;AACnE,MAAK,IAAA,CAAA,cAAA,CAAe,KAAQ,GAAA,IAAA,CAAK,IAAK,CAAA,YAAA;AAAA,QACpC,+BAAA;AAAA,OACF,CAAA;AAAA,KACK,MAAA;AACL,MAAK,IAAA,CAAA,cAAA,CAAe,SAAU,CAAA,GAAA,CAAI,yBAAyB,CAAA,CAAA;AAC3D,MAAK,IAAA,CAAA,cAAA,CAAe,KAAQ,GAAA,IAAA,CAAK,IAAK,CAAA,YAAA;AAAA,QACpC,8BAAA;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACF;AACF;;AC9Da,MAAA,iBAAA,SAA0BD,oBAAW,iBAAkB,CAAA;AAAA,EAClE,MAAM,GAAoB,EAAA;AACxB,IAAO,OAAA,KAAA,CAAM,MAAM,GAAc,CAAA,CAAA;AAAA,GACnC;AACF;;ACNO,MAAM,kCAAkC,iBAAkB,CAAA;AAAA,EAC/D,WAAc,GAAA;AACZ,IAAM,KAAA,CAAA;AAAA,MACJ,WAAa,EAAA,IAAA;AAAA,MACb,QAAU,EAAA,IAAA;AAAA,MACV,cAAgB,EAAA,IAAA;AAAA,KACjB,CAAA,CAAA;AAGD,IAAA,IAAA,CAAK,QAAS,CAAA,mBAAA;AAAA,MACZ,OAAA;AAAA,MACC,KAAK,QAAmC,CAAA,aAAA;AAAA,KAC3C,CAAA;AAGA,IAAA,IAAA,CAAK,QAAS,CAAA,gBAAA,CAAiB,OAAS,EAAA,CAAC,CAAM,KAAA;AAC7C,MAAA;AACE,QAAM,MAAA,YAAA,GAAe,IAAK,CAAA,IAAA,CAAK,QAAS,EAAA,CAAA;AACxC,QAAA,IAAI,iBAAiB,CAAG,EAAA;AACtB,UAAA,IAAA,CAAK,IAAK,CAAA,MAAA,CAAO,EAAE,KAAA,EAAO,IAAK,CAAA,GAAA,CAAI,IAAK,CAAA,IAAA,CAAK,WAAY,EAAA,EAAG,EAAE,CAAA,EAAG,CAAA,CAAA;AAAA,SAC5D,MAAA;AACL,UAAI,IAAA,IAAA,CAAK,QAAQ,cAAgB,EAAA;AAC/B,YAAA,IAAA,CAAK,KAAK,eAAgB,CAAA,IAAI,EAAE,aAAA,EAAe,GAAG,CAAA,CAAA;AAAA,WAC7C,MAAA;AACL,YAAA,IAAA,CAAK,KAAK,UAAW,CAAA,IAAI,EAAE,aAAA,EAAe,GAAG,CAAA,CAAA;AAAA,WAC/C;AAAA,SACF;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,CACE,WACA,EACuB,EAAA;AACvB,IAAA,MAAM,MAAS,GAAA,KAAA,CAAM,aAAc,CAAA,SAAA,EAAW,EAAE,CAAA,CAAA;AAChD,IAAA,MAAA,CAAO,aAAgB,GAAA,EAAA,CAAA;AACvB,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAsB,GAAA;AACpB,IAAA,MAAM,MAAS,GAAA,IAAA,CAAK,OAAQ,CAAA,cAAA,GACxB,SAAS,IAAK,CAAA,GAAA;AAAA,MACZ,GAAA;AAAA,MACA,CACE,GAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,IAAK,CAAA,SAAA,CAAU,KAAS,IAAA,IAAA,CAAK,EAAK,GAAA,GAAA,CAAI,GAAG,GAAG,CAAA;AAAA,KACvE,CAAA,UAAA,EAAc,KAAK,GAAI,CAAA,EAAA,EAAI,KAAK,IAAK,CAAA,SAAA,CAAU,KAAK,CAAA,CAAA,aAAA,EAClD,IAAK,CAAA,IAAA,CAAK,UAAU,KAAS,IAAA,GAAA,GAAM,KAAK,EAE1C,CAAA,CAAA,IAAA,CAAA,GAAA,CAAA,OAAA,EAAU,KAAK,IAAK,CAAA,SAAA,CAAU,KAAS,IAAA,GAAA,GAAM,IAAK,CAAA,EAAA,CAAA,CAAA,IAAA,CAAA,CAAA;AAEtD,IAAK,IAAA,CAAA,YAAA,CAAa,MAAM,SAAY,GAAA,MAAA,CAAA;AAAA,GACtC;AACF;;ACzDa,MAAA,gBAAA,SAAyBA,oBAAW,gBAAiB,CAAA;AAAA,EAChE,MAAM,GAAoB,EAAA;AACxB,IAAO,OAAA,KAAA,CAAM,MAAM,GAAc,CAAA,CAAA;AAAA,GACnC;AACF;;;;;;;;;;;;;;;;;;;;;ACPA,MAAME,WAASF,mBAAW,CAAA,MAAA,CAAA;AAC1B,MAAMG,WAASH,mBAAW,CAAA,MAAA,CAAA;AAC1B,MAAMI,iBAAeJ,mBAAW,CAAA,YAAA,CAAA;AAQzB,MAAM,iCAAiC,gBAAiB,CAAA;AAAA,EAAxD,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA,CAAA;AACL,IAAA,IAAA,CAAQ,iBAAoB,GAAA,IAAIG,QAAO,CAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ3C,cAAc,QAA+B,EAAA;AAC3C,IAAA,MAAM,SAAS,IAAIA,QAAA;AAAA,MACjB,SAAS,MAAO,CAAA,SAAA;AAAA,MAChB,SAAS,MAAO,CAAA,QAAA;AAAA,KAClB,CAAA;AACA,IAAM,MAAA,MAAA,GAAS,SAAS,MAAO,CAAA,QAAA,CAAA;AAC/B,IAAM,MAAA,OAAA,GAAU,IAAK,CAAA,IAAA,CAAK,UAAW,EAAA,CAAA;AACrC,IAAA,MAAM,OAAU,GAAAE,eAAA,CAAAJ,gBAAA,CAAA;AAAA,MACd,OAAA;AAAA,KACG,EAAA,IAAA,CAAK,QAAQ,gBAFF,CAAA,EAAA;AAAA,MAGd,MAAQ,EAAA,IAAA;AAAA,KACV,CAAA,CAAA;AAEA,IAAM,MAAA,cAAA,GAAiB,IAAK,CAAA,IAAA,CAAK,OAAQ,EAAA,CAAA;AAEzC,IAAA,IAAI,cAAiB,GAAA,IAAA,CAAK,OAAQ,CAAA,gBAAA,CAAiB,OAAS,EAAA;AAC1D,MAAA,OAAA,CAAQ,IAAO,GAAA,cAAA,CAAA;AAAA,KACjB;AAEA,IAAA,IAAA,CAAK,KAAK,SAAU,CAAAG,cAAA,CAAa,WAAW,MAAQ,EAAA,MAAM,GAAG,OAAS,EAAA;AAAA,MACpE,eAAiB,EAAA,IAAA;AAAA;AAAA,KAClB,CAAA,CAAA;AAED,IAAA,IAAI,uBAA0B,GAAA,KAAA,CAAA;AAE9B,IAAA,MAAM,wBAAwB,MAAM;AAClC,MAA0B,uBAAA,GAAA,IAAA,CAAA;AAAA,KAC5B,CAAA;AAEA,IAAK,IAAA,CAAA,IAAA,CAAK,IAAK,CAAA,OAAA,EAAS,qBAAqB,CAAA,CAAA;AAC7C,IAAK,IAAA,CAAA,IAAA,CAAK,IAAK,CAAA,UAAA,EAAY,qBAAqB,CAAA,CAAA;AAChD,IAAK,IAAA,CAAA,IAAA,CAAK,IAAK,CAAA,WAAA,EAAa,qBAAqB,CAAA,CAAA;AACjD,IAAK,IAAA,CAAA,IAAA,CAAK,IAAK,CAAA,WAAA,EAAa,qBAAqB,CAAA,CAAA;AACjD,IAAK,IAAA,CAAA,IAAA,CAAK,IAAK,CAAA,YAAA,EAAc,qBAAqB,CAAA,CAAA;AAClD,IAAK,IAAA,CAAA,IAAA,CAAK,IAAK,CAAA,OAAA,EAAS,qBAAqB,CAAA,CAAA;AAE7C,IAAK,IAAA,CAAA,IAAA,CAAK,IAAK,CAAA,SAAA,EAAW,MAAM;AAE9B,MAAK,IAAA,CAAA,IAAA,CAAK,GAAI,CAAA,OAAA,EAAS,qBAAqB,CAAA,CAAA;AAC5C,MAAK,IAAA,CAAA,IAAA,CAAK,GAAI,CAAA,UAAA,EAAY,qBAAqB,CAAA,CAAA;AAC/C,MAAK,IAAA,CAAA,IAAA,CAAK,GAAI,CAAA,WAAA,EAAa,qBAAqB,CAAA,CAAA;AAChD,MAAK,IAAA,CAAA,IAAA,CAAK,GAAI,CAAA,WAAA,EAAa,qBAAqB,CAAA,CAAA;AAChD,MAAK,IAAA,CAAA,IAAA,CAAK,GAAI,CAAA,YAAA,EAAc,qBAAqB,CAAA,CAAA;AACjD,MAAK,IAAA,CAAA,IAAA,CAAK,GAAI,CAAA,OAAA,EAAS,qBAAqB,CAAA,CAAA;AAE5C,MAAA,IAAI,uBAAyB,EAAA;AAC3B,QAAA,OAAA;AAAA,OACF;AAEA,MAAK,IAAA,CAAA,iBAAA,GAAoB,IAAK,CAAA,IAAA,CAAK,SAAU,EAAA,CAAA;AAAA,KAC9C,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,SAAS,SAAoB,EAAA;AAC3B,IAAK,IAAA,CAAA,iBAAA,GAAoB,IAAK,CAAA,IAAA,CAAK,SAAU,EAAA,CAAA;AAE7C,IAAA,IAAA,CAAK,UAAW,CAAA,gBAAA;AAAA,MAAiB,aAAA;AAAA,MAAe,CAAC,CAC/C,KAAA,CAAA,CAAE,cAAe,EAAA;AAAA,KACnB,CAAA;AACA,IAAA,IAAA,CAAK,gBAAmB,GAAA,SAAA;AAAA,MACtB,QAAA;AAAA,MACA,2BAAA;AAAA,MACA,IAAK,CAAA,UAAA;AAAA,KACP,CAAA;AACA,IAAA,SAAA;AAAA,MACE,MAAA;AAAA,MACA,sBAAA;AAAA,MACA,IAAK,CAAA,gBAAA;AAAA,KACP,CAAE,YAAa,CAAA,aAAA,EAAe,MAAM,CAAA,CAAA;AACpC,IAAA,IAAA,CAAK,iBAAiB,IAAO,GAAA,QAAA,CAAA;AAE7B,IAAA,IAAI,cAAc,KAAO,EAAA;AAEvB,MAAM,MAAA,KAAA,GAAQ,KAAK,IAAK,CAAA,YAAA;AAAA,QACtB,uCAAA;AAAA,OACF,CAAA;AACA,MAAA,IAAA,CAAK,iBAAiB,QAAW,GAAA,IAAA,CAAA;AACjC,MAAA,IAAA,CAAK,iBAAiB,KAAQ,GAAA,KAAA,CAAA;AAC9B,MAAK,IAAA,CAAA,gBAAA,CAAiB,YAAa,CAAA,YAAA,EAAc,KAAK,CAAA,CAAA;AAAA,KACjD,MAAA;AACL,MAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,IAAK,CAAA,YAAA,CAAa,iCAAiC,CAAA,CAAA;AACtE,MAAA,IAAA,CAAK,iBAAiB,KAAQ,GAAA,KAAA,CAAA;AAC9B,MAAK,IAAA,CAAA,gBAAA,CAAiB,YAAa,CAAA,YAAA,EAAc,KAAK,CAAA,CAAA;AAAA,KACxD;AAEA,IAAI,IAAA,IAAA,CAAK,QAAQ,iBAAmB,EAAA;AAClC,MAAK,IAAA,CAAA,gBAAA,CAAiB,YAAa,CAAA,cAAA,EAAgB,OAAO,CAAA,CAAA;AAC1D,MAAA,IAAA,CAAK,WAAc,GAAA,KAAA,CAAA;AAAA,KACrB;AAGA,IAAI,IAAA,IAAA,CAAK,QAAQ,gBAAkB,EAAA;AACjC,MAAK,IAAA,CAAA,WAAA,GAAc,SAAU,CAAA,KAAA,EAAO,8BAA8B,CAAA,CAAA;AAElE,MAAA,IAAA,CAAK,sBAAyB,GAAA,IAAIF,QAAO,CAAA,IAAA,CAAK,WAAW,CAAA,CAAA;AAEzD,MAAA,IAAA,CAAK,cAAiB,GAAA,SAAA;AAAA,QACpB,KAAA;AAAA,QACA,0CAAA;AAAA,OACF,CAAA;AACA,MAAK,IAAA,CAAA,qBAAA,GAAwB,IAAIA,QAAO,CAAA;AAAA,QACtC,SAAS,IAAK,CAAA,cAAA;AAAA,QACd,cAAgB,EAAA,KAAA;AAAA,OACjB,CAAA,CAAA;AAED,MAAA,IAAI,KAAK,OAAQ,CAAA,iBAAA;AAAmB,QAAA,IAAA,CAAK,WAAc,GAAA,KAAA,CAAA;AAEvD,MAAA,IAAA,CAAK,IAAK,CAAA,EAAA,CAAG,MAAQ,EAAA,IAAA,CAAK,OAAO,CAAA,CAAA;AAAA,KACnC;AAEA,IAAA,IAAA,CAAK,iBAAiB,gBAAiB,CAAA,OAAA,EAAS,KAAK,OAAQ,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAEvE,IAAA,IAAA,CAAK,MAAS,GAAA,IAAA,CAAA;AAQd,IAAI,IAAA,IAAA,CAAK,QAAQ,iBAAmB,EAAA;AAClC,MAAA,IAAA,CAAK,IAAK,CAAA,EAAA,CAAG,SAAW,EAAA,CAAC,KAAe,KAAA;AACtC,QAAA,MAAM,UACJ,GAAA,KAAA,CAAM,aAAiB,IAAA,KAAA,CAAM,cAAc,IAAS,KAAA,QAAA,CAAA;AACtD,QAAM,MAAA,cAAA,GAAiB,KAAK,iBAAkB,CAAA,UAAA;AAAA,UAC5C,IAAA,CAAK,KAAK,SAAU,EAAA;AAAA,SACtB,CAAA;AAEA,QACE,IAAA,CAAC,MAAM,eACP,IAAA,IAAA,CAAK,gBAAgB,aACrB,IAAA,CAAC,UACD,IAAA,cAAA,GAAiB,CACjB,EAAA;AACA,UAAA,IAAA,CAAK,WAAc,GAAA,YAAA,CAAA;AACnB,UAAA,IAAA,CAAK,iBAAiB,SAAU,CAAA,GAAA;AAAA,YAC9B,sCAAA;AAAA,WACF,CAAA;AACA,UAAA,IAAA,CAAK,iBAAiB,SAAU,CAAA,MAAA;AAAA,YAC9B,kCAAA;AAAA,WACF,CAAA;AAEA,UAAA,IAAA,CAAK,IAAK,CAAA,IAAI,KAAM,CAAA,sBAAsB,CAAC,CAAA,CAAA;AAAA,SAC7C;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAAA,GACF;AAAA,EAEA,mBAAsB,GAAA;AACpB,IAAA,IACE,IAAK,CAAA,WAAA,KAAgB,YACrB,IAAA,IAAA,CAAK,gBAAgB,aACrB,EAAA;AACA,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,MAAM,iBAAgC,GAAA;AAAA,MACpC,IAAA,CAAK,mBAAmB,MAAO,CAAA,SAAA;AAAA,MAC/B,IAAA,CAAK,mBAAmB,MAAO,CAAA,QAAA;AAAA,KACjC,CAAA;AAEA,IAAA,MAAM,iBAAoB,GAAA,IAAA,CAAK,IAAK,CAAA,OAAA,CAAQ,iBAAiB,CAAA,CAAA;AAC7D,IAAM,MAAA,CAAA,GAAI,KAAK,IAAK,CAAA,SAAA,CAAU,CAAC,iBAAkB,CAAA,CAAA,EAAG,iBAAkB,CAAA,CAAC,CAAC,CAAA,CAAA;AACxE,IAAM,MAAA,CAAA,GAAI,IAAK,CAAA,IAAA,CAAK,SAAU,CAAA;AAAA,MAC5B,kBAAkB,CAAI,GAAA,EAAA;AAAA,MACtB,iBAAkB,CAAA,CAAA;AAAA,KACnB,CAAA,CAAA;AACD,IAAA,MAAM,cAAiB,GAAA,CAAA,CAAE,UAAW,CAAA,CAAC,CAAI,GAAA,EAAA,CAAA;AAEzC,IAAA,MAAM,iBAAiB,IAAK,CAAA,IAAA,CAAM,CAAM,GAAA,IAAA,CAAK,YAAa,cAAc,CAAA,CAAA;AACxE,IAAK,IAAA,CAAA,cAAA,CAAe,KAAM,CAAA,KAAA,GAAQ,CAAG,EAAA,cAAA,CAAA,EAAA,CAAA,CAAA;AACrC,IAAK,IAAA,CAAA,cAAA,CAAe,KAAM,CAAA,MAAA,GAAS,CAAG,EAAA,cAAA,CAAA,EAAA,CAAA,CAAA;AAAA,GACxC;AAAA,EAEA,OAAU,GAAA;AACR,IAAA,IAAI,IAAK,CAAA,OAAA,CAAQ,gBAAoB,IAAA,IAAA,CAAK,QAAQ,kBAAoB,EAAA;AACpE,MAAA,IAAA,CAAK,mBAAoB,EAAA,CAAA;AAAA,KAC3B;AAAA,GACF;AACF;;ACnMa,MAAA,kBAAA,SAA2BF,oBAAW,kBAAmB,CAAA;AAAA,EACpE,MAAM,GAAoB,EAAA;AACxB,IAAO,OAAA,KAAA,CAAM,MAAM,GAAc,CAAA,CAAA;AAAA,GACnC;AACF;;ACJa,MAAA,YAAA,SAAqBA,oBAAW,YAAa,CAAA;AAAA,EACxD,MAAM,GAAoB,EAAA;AACxB,IAAO,OAAA,KAAA,CAAM,MAAM,GAAc,CAAA,CAAA;AAAA,GACnC;AACF;;ACJa,MAAA,iBAAA,SAA0BA,oBAAW,iBAAkB,CAAA;AAAA,EAClE,MAAM,GAAoB,EAAA;AACxB,IAAO,OAAA,KAAA,CAAM,MAAM,GAAc,CAAA,CAAA;AAAA,GACnC;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC4CO,MAAM,eAGT,GAAA;AAAA,EACF,KAAO,EAAA,OAAA;AAAA,EACP,OAAS,EAAA,SAAA;AACX,EAAA;AA0Ga,MAAA,GAAA,SAAYA,oBAAW,GAAI,CAAA;AAAA,EAQtC,YAAY,OAAqB,EAAA;AAhLnC,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAiLI,IAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,MAAA,MAAA,CAAO,SAAS,OAAQ,CAAA,MAAA,CAAA;AAAA,KAC1B;AAEA,IAAM,MAAA,KAAA,GAAQ,YAAa,CAAA,OAAA,CAAQ,KAAK,CAAA,CAAA;AACxC,IAAA,MAAM,qBAAqB,QAAS,CAAA,IAAA,CAAA;AAEpC,IAAI,IAAA,CAAC,OAAO,MAAQ,EAAA;AAClB,MAAQ,OAAA,CAAA,IAAA;AAAA,QACN,uFAAA;AAAA,OACF,CAAA;AAAA,KACF;AAGA,IAAA,KAAA,CAAM,iCACD,OADC,CAAA,EAAA;AAAA,MAEJ,KAAA;AAAA,MACA,YAAc,EAAA,KAAA;AAAA,MACd,gBAAA,EAAkB,uBAAwB,CAAA,OAAA,CAAQ,gBAAgB,CAAA;AAAA,KACnE,CAAA,CAAA,CAAA;AA3BH,IAAA,IAAA,CAAQ,gBAAmB,GAAA,KAAA,CAAA;AAC3B,IAAA,IAAA,CAAQ,mBAAsB,GAAA,CAAA,CAAA;AAC9B,IAAA,IAAA,CAAQ,eAAyC,GAAA,IAAA,CAAA;AACjD,IAAA,IAAA,CAAQ,iBAA2C,GAAA,IAAA,CAAA;AACnD,IAAA,IAAA,CAAQ,cAAiB,GAAA,KAAA,CAAA;AACzB,IAAA,IAAA,CAAQ,iBAAoB,GAAA,KAAA,CAAA;AAwB1B,IAAA,IAAA,CAAK,eAAkB,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,QAAR,KAAA,IAAA,GAAA,EAAA,GAAoB,MAAO,CAAA,eAAA,CAAA;AAClD,IAAA,IAAA,CAAK,oBAAoB,MAAO,CAAA,iBAAA,CAAA;AAChC,IAAA,IAAA,CAAK,mBACH,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,mBAAR,KAAA,IAAA,GAAA,EAAA,GAA+B,IAAK,CAAA,mBAAA,CAAA;AAGtC,IAAK,IAAA,CAAA,IAAA,CAAK,aAAa,MAAY,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAIjC,MAAI,IAAA,CAAC,QAAQ,SAAW,EAAA;AACtB,QAAA,OAAA;AAAA,OACF;AAGA,MAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,QAAA,OAAA;AAAA,OACF;AAGA,MAAA,IAAI,OAAQ,CAAA,IAAA,IAAQ,CAAC,CAAC,kBAAoB,EAAA;AACxC,QAAA,OAAA;AAAA,OACF;AAGA,MAAI,IAAA;AACF,QAAI,IAAA,OAAA,CAAQ,SAAc,KAAA,eAAA,CAAgB,OAAS,EAAA;AACjD,UAAA,MAAM,KAAK,aAAc,EAAA,CAAA;AACzB,UAAA,OAAA;AAAA,SACF;AAAA,eACO,CAAP,EAAA;AAEA,QAAQ,OAAA,CAAA,IAAA,CAAK,EAAE,OAAO,CAAA,CAAA;AAAA,OACxB;AAGA,MAAA,IAAI,mBAAsB,GAAA,IAAA,CAAA;AAC1B,MAAI,IAAA;AACF,QAAM,MAAA,IAAA,CAAK,eAAgB,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AACvC,QAAA,mBAAA,GAAsB,KAAK,aAAc,EAAA,CAAA;AAAA,eAClC,CAAP,EAAA;AAEA,QAAQ,OAAA,CAAA,IAAA,CAAK,EAAE,OAAO,CAAA,CAAA;AAAA,OACxB;AASA,MAAA,MAAM,cAAiB,GAAA,MAAM,SAAU,CAAA,WAAA,CAAY,KAAM,CAAA;AAAA,QACvD,IAAM,EAAA,aAAA;AAAA,OACP,CAAA,CAAA;AAED,MAAI,IAAA,cAAA,CAAe,UAAU,SAAW,EAAA;AACtC,QAAA,SAAA,CAAU,WAAY,CAAA,kBAAA;AAAA;AAAA,UAEpB,CAAC,IAAS,KAAA;AAER,YAAI,IAAA,mBAAA,KAAwB,IAAK,CAAA,aAAA,EAAiB,EAAA;AAChD,cAAA,OAAA;AAAA,aACF;AAEA,YAAA,IAAI,KAAK,OAAS,EAAA;AAChB,cAAA,IAAA,CAAK,MAAO,CAAA;AAAA,gBACV,QAAQ,CAAC,IAAA,CAAK,OAAO,SAAW,EAAA,IAAA,CAAK,OAAO,QAAQ,CAAA;AAAA,gBACpD,IAAA,EAAM,QAAQ,IAAQ,IAAA,EAAA;AAAA,gBACtB,QAAU,EAAA,GAAA;AAAA,eACX,CAAA,CAAA;AAAA,aACI,MAAA;AACL,cAAK,IAAA,CAAA,IAAA,CAAK,WAAW,MAAM;AACzB,gBAAA,IAAA,CAAK,MAAO,CAAA;AAAA,kBACV,QAAQ,CAAC,IAAA,CAAK,OAAO,SAAW,EAAA,IAAA,CAAK,OAAO,QAAQ,CAAA;AAAA,kBACpD,IAAA,EAAM,QAAQ,IAAQ,IAAA,EAAA;AAAA,kBACtB,QAAU,EAAA,GAAA;AAAA,iBACX,CAAA,CAAA;AAAA,eACF,CAAA,CAAA;AAAA,aACH;AAAA,WACF;AAAA;AAAA,UAGA,IAAA;AAAA;AAAA,UAGA;AAAA,YACE,UAAA,EAAY,KAAK,IAAO,GAAA,GAAA;AAAA;AAAA,YACxB,OAAS,EAAA,GAAA;AAAA;AAAA,YACT,kBAAoB,EAAA,KAAA;AAAA,WACtB;AAAA,SACF,CAAA;AAAA,OACF;AAAA,KACD,CAAA,CAAA,CAAA;AAGD,IAAK,IAAA,CAAA,EAAA,CAAG,aAAa,MAAM;AACzB,MAAK,IAAA,CAAA,kBAAA,CAAmB,KAAK,eAAe,CAAA,CAAA;AAC5C,MAAK,IAAA,CAAA,oBAAA,CAAqB,KAAK,iBAAiB,CAAA,CAAA;AAAA,KACjD,CAAA,CAAA;AAKD,IAAK,IAAA,CAAA,EAAA,CAAG,aAAa,MAAM;AAGzB,MAAA,IAAI,IAAK,CAAA,UAAA,EAAiB,KAAA,IAAA,IAAQ,KAAK,gBAAkB,EAAA;AACvD,QAAK,IAAA,CAAA,aAAA,CAAc,KAAK,mBAAmB,CAAA,CAAA;AAAA,OAC7C;AAAA,KACD,CAAA,CAAA;AAGD,IAAK,IAAA,CAAA,IAAA,CAAK,QAAQ,MAAY,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC5B,MAAU,SAAA,EAAA,CAAA;AAAA,KACX,CAAA,CAAA,CAAA;AAGD,IAAK,IAAA,CAAA,IAAA,CAAK,QAAQ,MAAY,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC5B,MAAI,IAAA,eAAA,GAAkB,EAAE,IAAA,EAAM,IAAK,EAAA,CAAA;AAEnC,MAAI,IAAA;AACF,QAAA,MAAM,eAAkB,GAAA,MAAA,CAAO,IAAK,CAAA,IAAA,CAAK,MAAM,YAAY,CAAA,CACxD,GAAI,CAAA,CAAC,UAAe,KAAA,IAAA,CAAK,SAAU,CAAA,UAAU,CAAC,CAC9C,CAAA,MAAA;AAAA,UACC,CAAC,MACC,OAAO,CAAA,CAAE,QAAQ,QAAY,IAAA,CAAA,CAAE,GAAI,CAAA,QAAA,CAAS,YAAY,CAAA;AAAA,SAC5D,CAAA;AAEF,QAAA,MAAM,WAAW,IAAI,GAAA;AAAA,UAClB,eAAA,CAAgB,CAAC,CAAkC,CAAA,GAAA;AAAA,SACtD,CAAA;AAEA,QAAA,IAAI,CAAC,QAAA,CAAS,YAAa,CAAA,GAAA,CAAI,KAAK,CAAG,EAAA;AACrC,UAAA,QAAA,CAAS,YAAa,CAAA,MAAA,CAAO,KAAO,EAAA,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA,SACnD;AAEA,QAAA,MAAM,WAAc,GAAA,MAAM,KAAM,CAAA,QAAA,CAAS,IAAI,CAAA,CAAA;AAC7C,QAAkB,eAAA,GAAA,MAAM,YAAY,IAAK,EAAA,CAAA;AAAA,eAClC,CAAP,EAAA;AAAA,OAEF;AAGA,MAAI,IAAA,MAAA,IAAU,eAAmB,IAAA,eAAA,CAAgB,IAAM,EAAA;AACrD,QAAA,MAAM,UAAkB,eAAgB,CAAA,IAAA,CAAA;AAExC,QAAK,IAAA,CAAA,UAAA;AAAA,UACH,IAAI,mBAAA,CAAoB,EAAE,OAAA,EAAS,CAAA;AAAA,UACnC,OAAQ,CAAA,YAAA;AAAA,SACV,CAAA;AAGA,QAAI,IAAA,OAAA,CAAQ,uBAAuB,KAAO,EAAA;AACxC,UAAK,IAAA,CAAA,UAAA;AAAA,YACH,IAAI,kBAAmB,CAAA;AAAA,cACrB,mBAAmB,OAAQ,CAAA,iBAAA;AAAA,aAC5B,CAAA;AAAA,WACH,CAAA;AAAA,SACF;AAAA,OACF,MAAA,IAAW,QAAQ,YAAc,EAAA;AAC/B,QAAA,IAAA,CAAK,UAAW,CAAA,IAAI,mBAAoB,EAAA,EAAG,QAAQ,YAAY,CAAA,CAAA;AAAA,OACjE;AAMA,MAAA,IAAI,QAAQ,YAAc,EAAA;AAExB,QAAM,MAAA,QAAA,GACJ,QAAQ,YAAiB,KAAA,IAAA,IAAQ,QAAQ,YAAiB,KAAA,KAAA,CAAA,GACtD,iBACA,OAAQ,CAAA,YAAA,CAAA;AAGd,QAAA,MAAM,eAAe,IAAI,YAAA,CAAa,EAAE,IAAM,EAAA,MAAA,CAAO,MAAM,CAAA,CAAA;AAC3D,QAAK,IAAA,CAAA,UAAA,CAAW,cAAc,QAAQ,CAAA,CAAA;AACtC,QAAO,MAAA,CAAA,EAAA,CAAG,MAAQ,EAAA,CAAC,IAAS,KAAA;AAC1B,UAAA,YAAA,CAAa,QAAQ,IAAI,CAAA,CAAA;AAAA,SAC1B,CAAA,CAAA;AAAA,OACH;AAEA,MAAI,IAAA,OAAA,CAAQ,sBAAsB,KAAO,EAAA;AAEvC,QAAM,MAAA,QAAA,GACJ,QAAQ,iBAAsB,KAAA,IAAA,IAC9B,QAAQ,iBAAsB,KAAA,KAAA,CAAA,GAC1B,cACA,OAAQ,CAAA,iBAAA,CAAA;AAEd,QAAA,IAAA,CAAK,UAAW,CAAA,IAAI,yBAA0B,EAAA,EAAG,QAAQ,CAAA,CAAA;AAAA,OAC3D;AAEA,MAAI,IAAA,OAAA,CAAQ,qBAAqB,KAAO,EAAA;AAEtC,QAAM,MAAA,QAAA,GACJ,QAAQ,gBAAqB,KAAA,IAAA,IAC7B,QAAQ,gBAAqB,KAAA,KAAA,CAAA,GACzB,cACA,OAAQ,CAAA,gBAAA,CAAA;AAGd,QAAK,IAAA,CAAA,UAAA;AAAA;AAAA,UAEH,IAAI,wBAAyB,CAAA;AAAA,YAC3B,eAAiB,EAAA;AAAA,cACf,kBAAoB,EAAA,IAAA;AAAA,cACpB,UAAY,EAAA,CAAA;AAAA,cACZ,OAAS,EAAA,GAAA;AAAA,aACX;AAAA,YACA,gBAAkB,EAAA;AAAA,cAChB,OAAS,EAAA,EAAA;AAAA,aACX;AAAA,YACA,iBAAmB,EAAA,IAAA;AAAA,YACnB,kBAAoB,EAAA,IAAA;AAAA,YACpB,gBAAkB,EAAA,IAAA;AAAA,WACnB,CAAA;AAAA,UACD,QAAA;AAAA,SACF,CAAA;AAAA,OACF;AAEA,MAAA,IAAI,QAAQ,cAAgB,EAAA;AAE1B,QAAM,MAAA,QAAA,GACJ,QAAQ,cAAmB,KAAA,IAAA,IAC3B,QAAQ,cAAmB,KAAA,KAAA,CAAA,GACvB,cACA,OAAQ,CAAA,cAAA,CAAA;AAEd,QAAA,IAAA,CAAK,UAAW,CAAA,IAAI,sBAAuB,EAAA,EAAG,QAAQ,CAAA,CAAA;AAAA,OACxD;AAGA,MAAA,IAAI,QAAQ,iBAAmB,EAAA;AAE7B,QAAM,MAAA,QAAA,GACJ,QAAQ,iBAAsB,KAAA,IAAA,IAC9B,QAAQ,iBAAsB,KAAA,KAAA,CAAA,GAC1B,cACA,OAAQ,CAAA,iBAAA,CAAA;AAGd,QAAA,IAAA,CAAK,WAAW,IAAI,iBAAA,CAAkB,EAAE,GAAG,QAAQ,CAAA,CAAA;AAAA,OACrD;AAAA,KACD,CAAA,CAAA,CAAA;AAQD,IAAA,IAAI,kBAAqB,GAAA,KAAA,CAAA;AACzB,IAAA,IAAI,qBAAwB,GAAA,KAAA,CAAA;AAC5B,IAAA,IAAI,gBAAyC,GAAA,IAAA,CAAA;AAE7C,IAAK,IAAA,CAAA,IAAA,CAAK,MAAQ,EAAA,CAAC,CAAM,KAAA;AACvB,MAAqB,kBAAA,GAAA,IAAA,CAAA;AACrB,MAAA,IAAI,qBAAuB,EAAA;AACzB,QAAK,IAAA,CAAA,IAAA,CAAK,mBAAmB,gBAAgB,CAAA,CAAA;AAAA,OAC/C;AAAA,KACD,CAAA,CAAA;AAED,IAAM,MAAA,eAAA,GAAkB,CAAC,GAAQ,KAAA;AAC/B,MAAA,IAAI,CAAC,GAAI,CAAA,OAAA;AAAS,QAAA,OAAA;AAClB,MAAwB,qBAAA,GAAA,IAAA,CAAA;AACxB,MAAmB,gBAAA,GAAA;AAAA,QACjB,IAAM,EAAA,iBAAA;AAAA,QACN,MAAQ,EAAA,IAAA;AAAA,QACR,SAAS,GAAI,CAAA,OAAA;AAAA,OACf,CAAA;AACA,MAAK,IAAA,CAAA,GAAA,CAAI,WAAW,eAAe,CAAA,CAAA;AAEnC,MAAA,IAAI,kBAAoB,EAAA;AACtB,QAAK,IAAA,CAAA,IAAA,CAAK,mBAAmB,gBAAwC,CAAA,CAAA;AAAA,OACvE;AAAA,KACF,CAAA;AAEA,IAAK,IAAA,CAAA,EAAA,CAAG,WAAW,eAAe,CAAA,CAAA;AAGlC,IAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,MAAK,IAAA,CAAA,aAAA;AAAA,QACH,CAAA,EAAA,GAAA,OAAA,CAAQ,mBAAR,KAAA,IAAA,GAAA,EAAA,GAA+B,IAAK,CAAA,mBAAA;AAAA,OACtC,CAAA;AAAA,KACF;AAAA,GACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQM,WAAc,GAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAClB,MAAA,OAAO,IAAI,OAAA,CAAa,CAAC,OAAA,EAAS,MAAW,KAAA;AAC3C,QAAI,IAAA,IAAA,CAAK,QAAU,EAAA;AACjB,UAAA,OAAO,QAAQ,IAAI,CAAA,CAAA;AAAA,SACrB;AAEA,QAAK,IAAA,CAAA,IAAA,CAAK,MAAQ,EAAA,CAAC,CAAM,KAAA;AACvB,UAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,SACb,CAAA,CAAA;AAAA,OACF,CAAA,CAAA;AAAA,KACH,CAAA,CAAA;AAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASM,sBAAyB,GAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC7B,MAAA,OAAO,IAAI,OAAA,CAAa,CAAC,OAAA,EAAS,MAAW,KAAA;AAC3C,QAAA,IAAI,IAAK,CAAA,MAAA,EAAY,IAAA,IAAA,CAAK,OAAS,EAAA;AACjC,UAAA,OAAO,QAAQ,IAAI,CAAA,CAAA;AAAA,SACrB;AAEA,QAAK,IAAA,CAAA,IAAA,CAAK,iBAAmB,EAAA,CAAC,CAAM,KAAA;AAClC,UAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,SACb,CAAA,CAAA;AAAA,OACF,CAAA,CAAA;AAAA,KACH,CAAA,CAAA;AAAA,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,QAAA,CACE,OACA,OACA,EAAA;AACA,IAAA,OAAO,KAAM,CAAA,QAAA,CAAS,YAAa,CAAA,KAAK,GAAG,OAAO,CAAA,CAAA;AAAA,GACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAA,CAAY,QAA2B,GAAA,QAAA,CAAS,eAAiB,EAAA;AAC/D,IAAI,IAAA,QAAA,KAAa,SAAS,IAAM,EAAA;AAC9B,MAAO,OAAA,IAAA,CAAK,WAAY,CAAA,kBAAA,EAAoB,CAAA,CAAA;AAAA,KAC9C;AACA,IAAA,IAAA,CAAK,mBAAmB,QAAQ,CAAA,CAAA;AAAA,GAClC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAA,CAAmB,QAA2B,GAAA,QAAA,CAAS,eAAiB,EAAA;AACtE,IAAI,IAAA,IAAA,CAAK,eAAoB,KAAA,QAAA,CAAS,UAAY,EAAA;AAChD,MAAQ,OAAA,CAAA,IAAA;AAAA,QACN,0GAAA;AAAA,OACF,CAAA;AACA,MAAA,OAAA;AAAA,KACF;AAEA,IAAI,IAAA,CAAC,mBAAoB,CAAA,QAAkB,CAAG,EAAA;AAC5C,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,eAAkB,GAAA,QAAA,CAAA;AAEvB,IAAA,IAAA,CAAK,aAAa,MAAM;AACtB,MAAI,IAAA,QAAA,KAAa,SAAS,IAAM,EAAA;AAC9B,QAAO,OAAA,IAAA,CAAK,kBAAmB,CAAA,kBAAA,EAAoB,CAAA,CAAA;AAAA,OACrD;AAEA,MAAM,MAAA,MAAA,GAAS,IAAK,CAAA,QAAA,EAAW,CAAA,MAAA,CAAA;AAG/B,MAAA,MAAM,gBAAmB,GAAA,kCAAA,CAAA;AAGzB,MAAA,MAAM,uBAA0B,GAAA,6BAAA,CAAA;AAGhC,MAAA,MAAM,iBACJ,GAAA,kEAAA,CAAA;AAGF,MAAA,MAAM,gBAAmB,GAAA,yCAAA,CAAA;AAEzB,MAAM,MAAA,OAAA,GAAU,QAAW,GAAA,CAAA,KAAA,EAAQ,QAAa,CAAA,CAAA,GAAA,MAAA,CAAA;AAChD,MAAA,MAAM,QAAW,GAAA;AAAA,QACf,MAAA;AAAA,QACA,CAAC,OAAO,OAAO,CAAA;AAAA,QACf,CAAC,OAAO,OAAO,CAAA;AAAA,QACf,CAAC,OAAO,MAAM,CAAA;AAAA,OAChB,CAAA;AAEA,MAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,MAAO,CAAA,MAAA,EAAQ,KAAK,CAAG,EAAA;AACzC,QAAM,MAAA,KAAA,GAAQ,OAAO,CAAC,CAAA,CAAA;AACtB,QAAA,MAAM,SAAS,KAAM,CAAA,MAAA,CAAA;AAErB,QAAA,IAAI,CAAC,MAAQ,EAAA;AACX,UAAA,SAAA;AAAA,SACF;AAEA,QAAI,IAAA,CAAC,MAAO,CAAA,YAAY,CAAG,EAAA;AACzB,UAAA,SAAA;AAAA,SACF;AAEA,QAAA,MAAM,sBAAsB,IAAK,CAAA,iBAAA;AAAA,UAC/B,KAAM,CAAA,EAAA;AAAA,UACN,YAAA;AAAA,SACF,CAAA;AAYA,QAAI,IAAA,UAAA,CAAA;AAGJ,QAAA,IACE,KAAM,CAAA,OAAA,CAAQ,mBAAmB,CAAA,IACjC,oBAAoB,MAAU,IAAA,CAAA,IAC9B,mBAAoB,CAAA,CAAC,CAAE,CAAA,IAAA,EAAO,CAAA,WAAA,OAAkB,QAChD,EAAA;AACA,UAAM,MAAA,OAAA,GAAU,oBAAoB,KAAM,EAAA,CAAA;AAI1C,UAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,mBAAoB,CAAA,MAAA,EAAQ,KAAK,CAAG,EAAA;AACtD,YAAM,MAAA,IAAA,GAAO,oBAAoB,CAAC,CAAA,CAAA;AAKlC,YACG,IAAA,CAAA,OAAO,IAAS,KAAA,QAAA,IAAY,IAAgB,YAAA,MAAA,KAC7C,iBAAiB,IAAK,CAAA,IAAA,CAAK,QAAS,EAAC,CACrC,EAAA;AACA,cAAA,OAAA,CAAQ,CAAC,CAAI,GAAA,QAAA,CAAA;AACb,cAAA,MAAA;AAAA,aACF,MAAA,IAGE,MAAM,OAAQ,CAAA,IAAI,KAClB,IAAK,CAAA,MAAA,IAAU,CACf,IAAA,IAAA,CAAK,CAAC,CAAA,CAAE,MAAO,CAAA,WAAA,EAAkB,KAAA,KAAA,IACjC,uBAAwB,CAAA,IAAA,CAAK,KAAK,CAAC,CAAA,CAAE,QAAS,EAAC,CAC/C,EAAA;AACA,cAAA,OAAA,CAAQ,CAAC,CAAI,GAAA,QAAA,CAAA;AACb,cAAA,MAAA;AAAA,aAEA,MAAA,IAAA,KAAA,CAAM,OAAQ,CAAA,IAAI,KAClB,IAAK,CAAA,MAAA,KAAW,CAChB,IAAA,IAAA,CAAK,CAAC,CAAE,CAAA,IAAA,EAAO,CAAA,WAAA,OAAkB,MACjC,EAAA;AACA,cAAA,OAAA,CAAQ,CAAC,CAAI,GAAA,QAAA,CAAA;AACb,cAAA,MAAA;AAAA,aACF;AAAA,WACF;AAEA,UAAA,IAAA,CAAK,iBAAkB,CAAA,KAAA,CAAM,EAAI,EAAA,YAAA,EAAc,OAAO,CAAA,CAAA;AAAA,SACxD,MAAA,IAIE,MAAM,OAAQ,CAAA,mBAAmB,KACjC,mBAAoB,CAAA,MAAA,IAAU,CAC9B,IAAA,mBAAA,CAAoB,CAAC,CAAA,CAAE,MAAO,CAAA,WAAA,EAAkB,KAAA,KAAA,IAChD,uBAAwB,CAAA,IAAA,CAAK,oBAAoB,CAAC,CAAA,CAAE,QAAS,EAAC,CAC9D,EAAA;AACA,UAAA,MAAM,OAAU,GAAA,QAAA,CAAA;AAChB,UAAA,IAAA,CAAK,iBAAkB,CAAA,KAAA,CAAM,EAAI,EAAA,YAAA,EAAc,OAAO,CAAA,CAAA;AAAA,SACxD,MAAA,IAAA,CAIG,OAAO,mBAAA,KAAwB,QAC9B,IAAA,mBAAA,YAA+B,MACjC,KAAA,gBAAA,CAAiB,IAAK,CAAA,mBAAA,CAAoB,QAAS,EAAC,CACpD,EAAA;AACA,UAAA,MAAM,OAAU,GAAA,QAAA,CAAA;AAChB,UAAA,IAAA,CAAK,iBAAkB,CAAA,KAAA,CAAM,EAAI,EAAA,YAAA,EAAc,OAAO,CAAA,CAAA;AAAA,SAEtD,MAAA,IAAA,KAAA,CAAM,OAAQ,CAAA,mBAAmB,KACjC,mBAAoB,CAAA,MAAA,KAAW,CAC/B,IAAA,mBAAA,CAAoB,CAAC,CAAE,CAAA,IAAA,EAAO,CAAA,WAAA,OAAkB,MAChD,EAAA;AACA,UAAA,MAAM,OAAU,GAAA,QAAA,CAAA;AAChB,UAAA,IAAA,CAAK,iBAAkB,CAAA,KAAA,CAAM,EAAI,EAAA,YAAA,EAAc,OAAO,CAAA,CAAA;AAAA,oBAErD,OAAO,mBAAA,KAAwB,YAC9B,mBAA+B,YAAA,MAAA,KAAA,CAChC,aAAa,iBAAkB,CAAA,IAAA;AAAA,UAC9B,oBAAoB,QAAS,EAAA;AAAA,eACxB,IACP,EAAA;AACA,UAAM,MAAA,OAAA,GAAU,IAAI,OAAW,CAAA,CAAA,EAAA,UAAA,CAAW,CAAC,CACzC,CAAA,KAAA,EAAA,UAAA,CAAW,CAAC,CAAK,IAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AAEnB,UAAA,IAAA,CAAK,iBAAkB,CAAA,KAAA,CAAM,EAAI,EAAA,YAAA,EAAc,OAAO,CAAA,CAAA;AAAA,oBAErD,OAAO,mBAAA,KAAwB,YAC9B,mBAA+B,YAAA,MAAA,KAAA,CAChC,aAAa,gBAAiB,CAAA,IAAA;AAAA,UAC7B,oBAAoB,QAAS,EAAA;AAAA,eACxB,IACP,EAAA;AACA,UAAA,MAAM,UAAU,CAAG,EAAA,UAAA,CAAW,CAAC,CAAK,CAAA,CAAA,EAAA,OAAA,CAAA,CAAA,EAAW,WAAW,CAAC,CAAA,CAAA,CAAA,CAAA;AAC3D,UAAA,IAAA,CAAK,iBAAkB,CAAA,KAAA,CAAM,EAAI,EAAA,YAAA,EAAc,OAAO,CAAA,CAAA;AAAA,SACxD;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAA,CAAqB,QAA2B,GAAA,QAAA,CAAS,iBAAmB,EAAA;AAE1E,IAAI,IAAA,IAAA,CAAK,eAAoB,KAAA,QAAA,CAAS,UAAY,EAAA;AAChD,MAAQ,OAAA,CAAA,IAAA;AAAA,QACN,0GAAA;AAAA,OACF,CAAA;AACA,MAAA,OAAA;AAAA,KACF;AAEA,IAAI,IAAA,CAAC,mBAAoB,CAAA,QAAkB,CAAG,EAAA;AAC5C,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,iBAAoB,GAAA,QAAA,CAAA;AAEzB,IAAA,IAAA,CAAK,aAAa,MAAM;AACtB,MAAI,IAAA,QAAA,KAAa,SAAS,IAAM,EAAA;AAC9B,QAAO,OAAA,IAAA,CAAK,oBAAqB,CAAA,kBAAA,EAAoB,CAAA,CAAA;AAAA,OACvD;AAEA,MAAM,MAAA,MAAA,GAAS,IAAK,CAAA,QAAA,EAAW,CAAA,MAAA,CAAA;AAG/B,MAAA,MAAM,gBAAmB,GAAA,kCAAA,CAAA;AAGzB,MAAA,MAAM,uBAA0B,GAAA,6BAAA,CAAA;AAGhC,MAAA,MAAM,iBACJ,GAAA,kEAAA,CAAA;AAEF,MAAI,IAAA,UAAA,CAAA;AAEJ,MAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,MAAO,CAAA,MAAA,EAAQ,KAAK,CAAG,EAAA;AACzC,QAAM,MAAA,KAAA,GAAQ,OAAO,CAAC,CAAA,CAAA;AACtB,QAAA,MAAM,SAAS,KAAM,CAAA,MAAA,CAAA;AAErB,QAAA,IAAI,CAAC,MAAQ,EAAA;AACX,UAAA,SAAA;AAAA,SACF;AAEA,QAAI,IAAA,CAAC,MAAO,CAAA,YAAY,CAAG,EAAA;AACzB,UAAA,SAAA;AAAA,SACF;AAEA,QAAA,MAAM,sBAAsB,IAAK,CAAA,iBAAA;AAAA,UAC/B,KAAM,CAAA,EAAA;AAAA,UACN,YAAA;AAAA,SACF,CAAA;AAEA,QAAI,IAAA,OAAA,CAAA;AAYJ,QAAA,IACE,KAAM,CAAA,OAAA,CAAQ,mBAAmB,CAAA,IACjC,oBAAoB,MAAU,IAAA,CAAA,IAC9B,mBAAoB,CAAA,CAAC,CAAE,CAAA,IAAA,EAAO,CAAA,WAAA,OAAkB,QAChD,EAAA;AACA,UAAA,OAAA,GAAU,oBAAoB,KAAM,EAAA,CAAA;AAIpC,UAAA,IAAI,qBAAwB,GAAA,CAAA,CAAA;AAE5B,UAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,mBAAoB,CAAA,MAAA,EAAQ,KAAK,CAAG,EAAA;AACtD,YAAM,MAAA,IAAA,GAAO,oBAAoB,CAAC,CAAA,CAAA;AAKlC,YACG,IAAA,CAAA,OAAO,IAAS,KAAA,QAAA,IAAY,IAAgB,YAAA,MAAA,KAC7C,iBAAiB,IAAK,CAAA,IAAA,CAAK,QAAS,EAAC,CACrC,EAAA;AACA,cAAA,IAAI,0BAA0B,CAAG,EAAA;AAC/B,gBAAQ,OAAA,CAAA,CAAC,IAAI,CAAS,MAAA,EAAA,QAAA,CAAA,CAAA,CAAA,CAAA;AACtB,gBAAA,MAAA;AAAA,eACF;AAEA,cAAyB,qBAAA,IAAA,CAAA,CAAA;AAAA,aAC3B,MAAA,IAGE,MAAM,OAAQ,CAAA,IAAI,KAClB,IAAK,CAAA,MAAA,IAAU,CACf,IAAA,IAAA,CAAK,CAAC,CAAA,CAAE,MAAO,CAAA,WAAA,EAAkB,KAAA,KAAA,IACjC,uBAAwB,CAAA,IAAA,CAAK,KAAK,CAAC,CAAA,CAAE,QAAS,EAAC,CAC/C,EAAA;AACA,cAAA,IAAI,0BAA0B,CAAG,EAAA;AAC/B,gBAAA,OAAA,CAAQ,CAAC,CAAA,CAAE,CAAC,CAAA,GAAI,CAAQ,KAAA,EAAA,QAAA,CAAA,CAAA,CAAA;AACxB,gBAAA,MAAA;AAAA,eACF;AAEA,cAAyB,qBAAA,IAAA,CAAA,CAAA;AAAA,aAEzB,MAAA,IAAA,KAAA,CAAM,OAAQ,CAAA,IAAI,KAClB,IAAK,CAAA,MAAA,KAAW,CAChB,IAAA,IAAA,CAAK,CAAC,CAAE,CAAA,IAAA,EAAO,CAAA,WAAA,OAAkB,MACjC,EAAA;AACA,cAAA,IAAI,0BAA0B,CAAG,EAAA;AAC/B,gBAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,CAAC,KAAA,EAAO,QAAQ,QAAU,CAAA,CAAA,CAAA,CAAA;AACvC,gBAAA,MAAA;AAAA,eACF;AAEA,cAAyB,qBAAA,IAAA,CAAA,CAAA;AAAA,aAC3B;AAAA,WACF;AAEA,UAAA,IAAA,CAAK,iBAAkB,CAAA,KAAA,CAAM,EAAI,EAAA,YAAA,EAAc,OAAO,CAAA,CAAA;AAAA,oBAKrD,OAAO,mBAAA,KAAwB,YAC9B,mBAA+B,YAAA,MAAA,KAAA,CAChC,aAAa,iBAAkB,CAAA,IAAA;AAAA,UAC9B,oBAAoB,QAAS,EAAA;AAAA,eACxB,IACP,EAAA;AACA,UAAM,MAAA,OAAA,GAAU,QAAW,GAAA,CAAA,KAAA,EAAQ,QAAa,CAAA,CAAA,GAAA,MAAA,CAAA;AAChD,UAAA,OAAA,GAAU,QAAQ,UAAW,CAAA,CAAC,KAAK,EAAM,CAAA,CAAA,EAAA,UAAA,CAAW,CAAC,CAAK,CAAA,CAAA,EAAA,OAAA,CAAA,CAAA,CAAA,CAAA;AAC1D,UAAA,IAAA,CAAK,iBAAkB,CAAA,KAAA,CAAM,EAAI,EAAA,YAAA,EAAc,OAAO,CAAA,CAAA;AAAA,SACxD;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAqC,GAAA;AACnC,IAAA,OAAO,IAAK,CAAA,eAAA,CAAA;AAAA,GACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,oBAAuC,GAAA;AACrC,IAAA,OAAO,IAAK,CAAA,iBAAA,CAAA;AAAA,GACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,sBAAiC,GAAA;AAC/B,IAAA,OAAO,IAAK,CAAA,mBAAA,CAAA;AAAA,GACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAsB,GAAA;AACpB,IAAA,OAAO,IAAK,CAAA,gBAAA,CAAA;AAAA,GACd;AAAA,EAEQ,WAAA,CAAY,YAAc,EAAA,UAAA,GAAa,GAAM,EAAA;AAEnD,IAAI,IAAA,CAAC,KAAK,OAAS,EAAA;AACjB,MAAA,OAAA;AAAA,KACF;AAEA,IAAM,MAAA,SAAA,GAAY,YAAY,GAAI,EAAA,CAAA;AAElC,IAAM,MAAA,mBAAA,GAAsB,KAAK,OAAQ,CAAA,YAAA,CAAA;AACzC,IAAA,MAAM,oBAAoB,YAAe,GAAA,mBAAA,CAAA;AAIzC,IAAA,MAAM,qBAAqB,MAAM;AAC/B,MAAI,IAAA,CAAC,KAAK,OAAS,EAAA;AACjB,QAAA,OAAA;AAAA,OACF;AAIA,MAAA,IAAI,KAAK,iBAAmB,EAAA;AAC1B,QAAA,OAAA;AAAA,OACF;AAGA,MAAA,MAAM,cAAkB,GAAA,CAAA,WAAA,CAAY,GAAI,EAAA,GAAI,SAAa,IAAA,UAAA,CAAA;AAGzD,MAAA,IAAI,iBAAiB,IAAM,EAAA;AACzB,QAAA,MAAM,qBAAqB,CAAI,GAAA,IAAA,CAAK,GAAI,CAAA,CAAA,GAAI,gBAAgB,CAAC,CAAA,CAAA;AAC7D,QAAM,MAAA,eAAA,GACJ,sBAAsB,kBAAqB,GAAA,iBAAA,CAAA;AAC7C,QAAA,IAAA,CAAK,QAAQ,YAAe,GAAA,eAAA,CAAA;AAC5B,QAAA,qBAAA,CAAsB,kBAAkB,CAAA,CAAA;AAAA,OACnC,MAAA;AACL,QAAA,IAAA,CAAK,cAAiB,GAAA,KAAA,CAAA;AACtB,QAAA,IAAA,CAAK,iBAAoB,GAAA,KAAA,CAAA;AACzB,QAAA,IAAA,CAAK,QAAQ,YAAe,GAAA,YAAA,CAAA;AAAA,OAC9B;AAEA,MAAA,IAAA,CAAK,cAAe,EAAA,CAAA;AAAA,KACtB,CAAA;AAEA,IAAA,IAAA,CAAK,cAAiB,GAAA,IAAA,CAAA;AACtB,IAAA,IAAA,CAAK,iBAAoB,GAAA,KAAA,CAAA;AACzB,IAAA,qBAAA,CAAsB,kBAAkB,CAAA,CAAA;AAAA,GAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAA,CAAc,YAAe,GAAA,IAAA,CAAK,mBAAqB,EAAA;AACrD,IAAA,IAAI,eAAe,CAAG,EAAA;AACpB,MAAA,OAAA,CAAQ,KAAK,0CAA0C,CAAA,CAAA;AACvD,MAAA,OAAA;AAAA,KACF;AAIA,IAAM,MAAA,oBAAA,GAAuB,CAAO,GAA6B,KAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC/D,MAAI,IAAA,CAAC,KAAK,OAAS,EAAA;AACjB,QAAA,OAAA;AAAA,OACF;AAEA,MACE,IAAA,GAAA,CAAI,SAAS,MACb,IAAA,GAAA,CAAI,aAAa,QACjB,IAAA,EAAE,YAAY,GACd,CAAA,EAAA;AACA,QAAA,OAAA;AAAA,OACF;AAEA,MAAI,IAAA,GAAA,CAAI,aAAa,kBAAoB,EAAA;AACvC,QAAA,OAAA;AAAA,OACF;AAEA,MAAA,MAAM,SAAS,GAAI,CAAA,MAAA,CAAA;AAEnB,MAAI,IAAA,MAAA,CAAO,SAAS,YAAc,EAAA;AAChC,QAAA,OAAA;AAAA,OACF;AAEA,MAAI,IAAA,CAAC,IAAI,cAAgB,EAAA;AACvB,QAAA,OAAA;AAAA,OACF;AAKA,MAAK,IAAA,CAAA,GAAA,CAAI,QAAQ,oBAAoB,CAAA,CAAA;AAErC,MAAA,IAAA,CAAK,YAAY,YAAY,CAAA,CAAA;AAAA,KAC/B,CAAA,CAAA;AAIA,IAAA,MAAM,aAAa,MAAM;AAEvB,MAAA,IAAA,CAAK,gBAAmB,GAAA,IAAA,CAAA;AACxB,MAAA,IAAA,CAAK,mBAAsB,GAAA,YAAA,CAAA;AAI3B,MAAK,IAAA,CAAA,EAAA,CAAG,QAAQ,oBAAoB,CAAA,CAAA;AAEpC,MAAK,IAAA,CAAA,SAAA,CAAU,SAAS,eAAiB,EAAA;AAAA,QACvC,IAAM,EAAA,YAAA;AAAA,QACN,KAAK,QAAS,CAAA,gBAAA;AAAA,OACf,CAAA,CAAA;AAID,MAAA,IAAA,CAAK,UAAW,CAAA;AAAA,QACd,QAAQ,QAAS,CAAA,eAAA;AAAA,QACjB,YAAc,EAAA,CAAA;AAAA,OACf,CAAA,CAAA;AAAA,KACH,CAAA;AAIA,IAAI,IAAA,IAAA,CAAK,YAAc,EAAA;AACrB,MAAA,IAAA,CAAK,gBAAmB,GAAA,IAAA,CAAA;AACxB,MAAA,IAAA,CAAK,YAAY,YAAY,CAAA,CAAA;AAC7B,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,IAAI,IAAK,CAAA,MAAA,EAAY,IAAA,IAAA,CAAK,gBAAkB,EAAA;AAC1C,MAAW,UAAA,EAAA,CAAA;AAAA,KACN,MAAA;AACL,MAAK,IAAA,CAAA,IAAA,CAAK,QAAQ,MAAM;AACtB,QAAA,IAAI,KAAK,UAAW,EAAA,IAAK,KAAK,SAAU,CAAA,QAAA,CAAS,eAAe,CAAG,EAAA;AACjE,UAAA,OAAA;AAAA,SACF;AACA,QAAW,UAAA,EAAA,CAAA;AAAA,OACZ,CAAA,CAAA;AAAA,KACH;AAAA,GACF;AAAA;AAAA;AAAA;AAAA,EAKA,cAAiB,GAAA;AAEf,IAAI,IAAA,CAAC,KAAK,OAAS,EAAA;AACjB,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,gBAAmB,GAAA,KAAA,CAAA;AAIxB,IAAA,MAAM,wBAAwB,CAAI,GAAA,GAAA,CAAA;AAClC,IAAM,MAAA,SAAA,GAAY,YAAY,GAAI,EAAA,CAAA;AAElC,IAAM,MAAA,mBAAA,GAAsB,KAAK,OAAQ,CAAA,YAAA,CAAA;AAIzC,IAAA,MAAM,qBAAqB,MAAM;AAC/B,MAAI,IAAA,CAAC,KAAK,OAAS,EAAA;AACjB,QAAA,OAAA;AAAA,OACF;AAIA,MAAA,IAAI,KAAK,cAAgB,EAAA;AACvB,QAAA,OAAA;AAAA,OACF;AAGA,MAAA,MAAM,cACH,GAAA,CAAA,WAAA,CAAY,GAAI,EAAA,GAAI,SAAa,IAAA,qBAAA,CAAA;AAGpC,MAAA,IAAI,iBAAiB,IAAM,EAAA;AACzB,QAAA,MAAM,kBAAqB,GAAA,IAAA,CAAK,GAAI,CAAA,CAAA,GAAI,gBAAgB,CAAC,CAAA,CAAA;AACzD,QAAA,MAAM,kBAAkB,mBAAsB,GAAA,kBAAA,CAAA;AAC9C,QAAA,IAAA,CAAK,QAAQ,YAAe,GAAA,eAAA,CAAA;AAC5B,QAAA,qBAAA,CAAsB,kBAAkB,CAAA,CAAA;AAAA,OACnC,MAAA;AACL,QAAA,IAAA,CAAK,QAAQ,YAAe,GAAA,CAAA,CAAA;AAC5B,QAAA,IAAA,CAAK,cAAiB,GAAA,KAAA,CAAA;AACtB,QAAA,IAAA,CAAK,iBAAoB,GAAA,KAAA,CAAA;AACzB,QAAA,IAAA,CAAK,WAAW,IAAI,CAAA,CAAA;AACpB,QAAA,IAAI,IAAK,CAAA,SAAA,CAAU,QAAS,CAAA,eAAe,CAAG,EAAA;AAC5C,UAAK,IAAA,CAAA,YAAA,CAAa,SAAS,eAAe,CAAA,CAAA;AAAA,SAC5C;AAAA,OACF;AAEA,MAAA,IAAA,CAAK,cAAe,EAAA,CAAA;AAAA,KACtB,CAAA;AAEA,IAAA,IAAA,CAAK,cAAiB,GAAA,KAAA,CAAA;AACtB,IAAA,IAAA,CAAK,iBAAoB,GAAA,IAAA,CAAA;AACzB,IAAA,qBAAA,CAAsB,kBAAkB,CAAA,CAAA;AAAA,GAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,sBAAA,CAAuB,YAAsB,EAAA,OAAA,GAAU,IAAM,EAAA;AAC3D,IAAI,IAAA,CAAC,OAAW,IAAA,IAAA,CAAK,OAAS,EAAA;AAC5B,MAAA,IAAA,CAAK,mBAAsB,GAAA,YAAA,CAAA;AAC3B,MAAA,IAAA,CAAK,QAAQ,YAAe,GAAA,YAAA,CAAA;AAC5B,MAAA,IAAA,CAAK,cAAe,EAAA,CAAA;AAAA,KACf,MAAA;AACL,MAAA,IAAA,CAAK,cAAc,YAAY,CAAA,CAAA;AAAA,KACjC;AAAA,GACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,aAAa,EAAI,EAAA;AACvB,IAAI,IAAA,IAAA,CAAK,eAAiB,EAAA;AACxB,MAAG,EAAA,EAAA,CAAA;AAAA,KACE,MAAA;AACL,MAAK,IAAA,CAAA,IAAA,CAAK,aAAa,MAAM;AAC3B,QAAG,EAAA,EAAA,CAAA;AAAA,OACJ,CAAA,CAAA;AAAA,KACH;AAAA,GACF;AAAA,EAEM,aAAgB,GAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACpB,MAAM,MAAA,iBAAA,GAAoB,MAAM,WAAA,CAAY,IAAK,EAAA,CAAA;AACjD,MAAK,IAAA,CAAA,SAAA;AAAA,QACH,iBAAkB,CAAA,cAAA;AAAA,QAClB;AAAA,UACE,QAAU,EAAA,CAAA;AAAA,UACV,OAAS,EAAA,GAAA;AAAA,SACX;AAAA,OACF,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAAA;AAAA,EAEM,gBAAgB,IAA0B,EAAA;AAAA,IAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAC9C,MAAM,MAAA,iBAAA,GAAoB,MAAM,WAAA,CAAY,IAAK,EAAA,CAAA;AACjD,MAAA,IAAA,CAAK,MAAO,CAAA;AAAA,QACV,MAAQ,EAAA,CAAC,iBAAkB,CAAA,SAAA,EAAW,kBAAkB,QAAQ,CAAA;AAAA,QAChE,MAAM,IAAQ,IAAA,EAAA;AAAA,OACf,CAAA,CAAA;AAAA,KACH,CAAA,CAAA;AAAA,GAAA;AAAA,EAEA,aAAgB,GAAA;AACd,IAAM,MAAA,OAAA,GAAU,IAAI,YAAA,CAAa,CAAC,CAAA,CAAA;AAClC,IAAM,MAAA,MAAA,GAAS,KAAK,SAAU,EAAA,CAAA;AAC9B,IAAQ,OAAA,CAAA,CAAC,IAAI,MAAO,CAAA,GAAA,CAAA;AACpB,IAAQ,OAAA,CAAA,CAAC,IAAI,MAAO,CAAA,GAAA,CAAA;AACpB,IAAQ,OAAA,CAAA,CAAC,CAAI,GAAA,IAAA,CAAK,OAAQ,EAAA,CAAA;AAC1B,IAAQ,OAAA,CAAA,CAAC,CAAI,GAAA,IAAA,CAAK,QAAS,EAAA,CAAA;AAC3B,IAAQ,OAAA,CAAA,CAAC,CAAI,GAAA,IAAA,CAAK,UAAW,EAAA,CAAA;AAC7B,IAAA,OAAO,OAAO,cAAe,CAAA,IAAI,UAAW,CAAA,OAAA,CAAQ,MAAM,CAAC,CAAA,CAAA;AAAA,GAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAA0B,GAAA;AACxB,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAA+B,GAAA;AAC7B,IAAO,OAAA,mBAAA,CAAA;AAAA,GACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,oBAAoB,gBAA4C,EAAA;AAC9D,IAAM,KAAA,CAAA,mBAAA,CAAoB,uBAAwB,CAAA,gBAAgB,CAAC,CAAA,CAAA;AACnE,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF;;ACnqCa,MAAA,MAAA,SAAeA,oBAAW,MAAO,CAAA;AAAA,EAC5C,MAAM,GAA0B,EAAA;AAC9B,IAAO,OAAA,KAAA,CAAM,MAAM,GAAc,CAAA,CAAA;AAAA,GACnC;AACF;;ACJa,MAAA,KAAA,SAAcA,oBAAW,KAAM,CAAA;AAAA,EAC1C,MAAM,GAA0B,EAAA;AAC9B,IAAO,OAAA,KAAA,CAAM,MAAM,GAAc,CAAA,CAAA;AAAA,GACnC;AACF;;ACJa,MAAA,KAAA,SAAcA,oBAAW,KAAM,CAAA;AAAA,EAC1C,WAAY,CAAA,GAAA,EAAU,OAAwB,GAAA,EAAI,EAAA;AAChD,IAAA,KAAA,CAAM,KAAgB,OAAO,CAAA,CAAA;AAAA,GAC/B;AACF;;ACJa,MAAA,YAAA,SAAqBA,oBAAW,YAAa,CAAA;AAAA,EACxD,MAAM,GAAoB,EAAA;AACxB,IAAA,KAAA,CAAM,MAAM,GAAc,CAAA,CAAA;AAAA,GAC5B;AACF;;ACJa,MAAA,aAAA,SAAsBA,oBAAW,aAAc,CAAA;AAAA,EAC1D,MAAM,GAAoB,EAAA;AACxB,IAAA,KAAA,CAAM,MAAM,GAAc,CAAA,CAAA;AAAA,GAC5B;AACF;;ACJa,MAAA,WAAA,SAAoBA,oBAAW,WAAY,CAAA;AAAA,EACtD,MAAM,GAAoB,EAAA;AACxB,IAAA,KAAA,CAAM,MAAM,GAAc,CAAA,CAAA;AAAA,GAC5B;AACF;;ACJa,MAAA,gBAAA,SAAyBA,oBAAW,gBAAiB,CAAA;AAAA,EAChE,MAAM,GAAoB,EAAA;AACxB,IAAA,KAAA,CAAM,MAAM,GAAc,CAAA,CAAA;AAAA,GAC5B;AACF;;ACJa,MAAA,mBAAA,SAA4BA,oBAAW,mBAAoB,CAAA;AAAA,EACtE,MAAM,GAAoB,EAAA;AACxB,IAAA,KAAA,CAAM,MAAM,GAAc,CAAA,CAAA;AAAA,GAC5B;AACF;;ACJa,MAAA,gBAAA,SAAyBA,oBAAW,gBAAiB,CAAA;AAAA,EAChE,MAAM,GAAoB,EAAA;AACxB,IAAA,KAAA,CAAM,MAAM,GAAc,CAAA,CAAA;AAAA,GAC5B;AACF;;ACJa,MAAA,WAAA,SAAoBA,oBAAW,WAAY,CAAA;AAAA,EACtD,MAAM,GAAoB,EAAA;AACxB,IAAA,KAAA,CAAM,MAAM,GAAc,CAAA,CAAA;AAAA,GAC5B;AACF;;ACJa,MAAA,cAAA,SAAuBA,oBAAW,cAAe,CAAA;AAAA,EAC5D,MAAM,GAAoB,EAAA;AACxB,IAAO,OAAA,KAAA,CAAM,MAAM,GAAc,CAAA,CAAA;AAAA,GACnC;AACF;;ACGO,MAAM,KAAM,CAAA;AAAA,EAIjB,WAAA,CAAY,GAAW,CAAW,EAAA;AAChC,IAAA,IAAA,CAAK,CAAI,GAAA,CAAA,CAAA;AACT,IAAA,IAAA,CAAK,CAAI,GAAA,CAAA,CAAA;AAAA,GACX;AAAA,EAEQ,SAAS,CAAmB,EAAA;AAClC,IAAM,MAAA,CAAA,GAAI,EAAE,CAAC,CAAA,GAAI,KAAK,CAAI,GAAA,CAAA,CAAE,CAAC,CAAA,GAAI,IAAK,CAAA,CAAA,CAAA;AACtC,IAAM,MAAA,CAAA,GAAI,EAAE,CAAC,CAAA,GAAI,KAAK,CAAI,GAAA,CAAA,CAAE,CAAC,CAAA,GAAI,IAAK,CAAA,CAAA,CAAA;AACtC,IAAA,IAAA,CAAK,CAAI,GAAA,CAAA,CAAA;AACT,IAAA,IAAA,CAAK,CAAI,GAAA,CAAA,CAAA;AACT,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEQ,KAAK,CAAiB,EAAA;AAC5B,IAAA,IAAA,CAAK,KAAK,CAAE,CAAA,CAAA,CAAA;AACZ,IAAA,IAAA,CAAK,KAAK,CAAE,CAAA,CAAA,CAAA;AACZ,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEQ,KAAK,CAAiB,EAAA;AAC5B,IAAA,IAAA,CAAK,KAAK,CAAE,CAAA,CAAA,CAAA;AACZ,IAAA,IAAA,CAAK,KAAK,CAAE,CAAA,CAAA,CAAA;AACZ,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEQ,MAAM,CAAkB,EAAA;AAC9B,IAAA,IAAA,CAAK,CAAK,IAAA,CAAA,CAAA;AACV,IAAA,IAAA,CAAK,CAAK,IAAA,CAAA,CAAA;AACV,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEQ,KAAK,CAAkB,EAAA;AAC7B,IAAA,IAAA,CAAK,CAAK,IAAA,CAAA,CAAA;AACV,IAAA,IAAA,CAAK,CAAK,IAAA,CAAA,CAAA;AACV,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEQ,aAAa,CAAiB,EAAA;AACpC,IAAA,IAAA,CAAK,KAAK,CAAE,CAAA,CAAA,CAAA;AACZ,IAAA,IAAA,CAAK,KAAK,CAAE,CAAA,CAAA,CAAA;AACZ,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEQ,YAAY,CAAiB,EAAA;AACnC,IAAA,IAAA,CAAK,KAAK,CAAE,CAAA,CAAA,CAAA;AACZ,IAAA,IAAA,CAAK,KAAK,CAAE,CAAA,CAAA,CAAA;AACZ,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEQ,KAAe,GAAA;AACrB,IAAK,IAAA,CAAA,IAAA,CAAK,IAAK,CAAA,GAAA,EAAK,CAAA,CAAA;AACpB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEQ,KAAe,GAAA;AACrB,IAAA,MAAM,IAAI,IAAK,CAAA,CAAA,CAAA;AACf,IAAA,IAAA,CAAK,IAAI,IAAK,CAAA,CAAA,CAAA;AACd,IAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AACV,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEQ,QAAQ,KAAsB,EAAA;AACpC,IAAM,MAAA,GAAA,GAAM,IAAK,CAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAC1B,IAAM,MAAA,GAAA,GAAM,IAAK,CAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAC1B,IAAA,MAAM,CAAI,GAAA,GAAA,GAAM,IAAK,CAAA,CAAA,GAAI,MAAM,IAAK,CAAA,CAAA,CAAA;AACpC,IAAA,MAAM,CAAI,GAAA,GAAA,GAAM,IAAK,CAAA,CAAA,GAAI,MAAM,IAAK,CAAA,CAAA,CAAA;AACpC,IAAA,IAAA,CAAK,CAAI,GAAA,CAAA,CAAA;AACT,IAAA,IAAA,CAAK,CAAI,GAAA,CAAA,CAAA;AACT,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEQ,aAAA,CAAc,OAAe,CAAiB,EAAA;AACpD,IAAM,MAAA,GAAA,GAAM,IAAK,CAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAC1B,IAAM,MAAA,GAAA,GAAM,IAAK,CAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAC1B,IAAM,MAAA,CAAA,GAAI,CAAE,CAAA,CAAA,GAAI,GAAO,IAAA,IAAA,CAAK,CAAI,GAAA,CAAA,CAAE,CAAK,CAAA,GAAA,GAAA,IAAO,IAAK,CAAA,CAAA,GAAI,CAAE,CAAA,CAAA,CAAA,CAAA;AACzD,IAAM,MAAA,CAAA,GAAI,CAAE,CAAA,CAAA,GAAI,GAAO,IAAA,IAAA,CAAK,CAAI,GAAA,CAAA,CAAE,CAAK,CAAA,GAAA,GAAA,IAAO,IAAK,CAAA,CAAA,GAAI,CAAE,CAAA,CAAA,CAAA,CAAA;AACzD,IAAA,IAAA,CAAK,CAAI,GAAA,CAAA,CAAA;AACT,IAAA,IAAA,CAAK,CAAI,GAAA,CAAA,CAAA;AACT,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEQ,MAAgB,GAAA;AACtB,IAAA,IAAA,CAAK,CAAI,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,CAAC,CAAA,CAAA;AAC1B,IAAA,IAAA,CAAK,CAAI,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,CAAC,CAAA,CAAA;AAC1B,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAe,GAAA;AACb,IAAA,OAAO,IAAI,KAAA,CAAM,IAAK,CAAA,CAAA,EAAG,KAAK,CAAC,CAAA,CAAA;AAAA,GACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,CAAiB,EAAA;AACnB,IAAA,OAAO,IAAK,CAAA,KAAA,EAAQ,CAAA,IAAA,CAAK,CAAC,CAAA,CAAA;AAAA,GAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,CAAiB,EAAA;AACnB,IAAA,OAAO,IAAK,CAAA,KAAA,EAAQ,CAAA,IAAA,CAAK,CAAC,CAAA,CAAA;AAAA,GAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,CAAiB,EAAA;AAC3B,IAAA,OAAO,IAAK,CAAA,KAAA,EAAQ,CAAA,YAAA,CAAa,CAAC,CAAA,CAAA;AAAA,GACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW,CAAiB,EAAA;AAC1B,IAAA,OAAO,IAAK,CAAA,KAAA,EAAQ,CAAA,WAAA,CAAY,CAAC,CAAA,CAAA;AAAA,GACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,KAAK,CAAkB,EAAA;AACrB,IAAA,OAAO,IAAK,CAAA,KAAA,EAAQ,CAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AAAA,GAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,CAAkB,EAAA;AACpB,IAAA,OAAO,IAAK,CAAA,KAAA,EAAQ,CAAA,IAAA,CAAK,CAAC,CAAA,CAAA;AAAA,GAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,CAAkB,EAAA;AACvB,IAAA,OAAO,IAAK,CAAA,KAAA,EAAQ,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AAAA,GAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAA,CAAa,GAAW,CAAiB,EAAA;AACvC,IAAA,OAAO,IAAK,CAAA,KAAA,EAAQ,CAAA,aAAA,CAAc,GAAG,CAAC,CAAA,CAAA;AAAA,GACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,CAAmB,EAAA;AACzB,IAAA,OAAO,IAAK,CAAA,KAAA,EAAQ,CAAA,QAAA,CAAS,CAAC,CAAA,CAAA;AAAA,GAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAc,GAAA;AACZ,IAAO,OAAA,IAAA,CAAK,KAAM,EAAA,CAAE,KAAM,EAAA,CAAA;AAAA,GAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAc,GAAA;AACZ,IAAO,OAAA,IAAA,CAAK,KAAM,EAAA,CAAE,KAAM,EAAA,CAAA;AAAA,GAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAe,GAAA;AACb,IAAO,OAAA,IAAA,CAAK,KAAM,EAAA,CAAE,MAAO,EAAA,CAAA;AAAA,GAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,GAAc,GAAA;AACZ,IAAO,OAAA,IAAA,CAAK,KAAK,IAAK,CAAA,CAAA,GAAI,KAAK,CAAI,GAAA,IAAA,CAAK,CAAI,GAAA,IAAA,CAAK,CAAC,CAAA,CAAA;AAAA,GACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,KAAgB,EAAA;AACrB,IAAA,OAAO,KAAK,CAAM,KAAA,KAAA,CAAM,CAAK,IAAA,IAAA,CAAK,MAAM,KAAM,CAAA,CAAA,CAAA;AAAA,GAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAK,CAAW,EAAA;AACd,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,IAAK,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,GAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,QAAQ,CAAW,EAAA;AACjB,IAAM,MAAA,EAAA,GAAK,CAAE,CAAA,CAAA,GAAI,IAAK,CAAA,CAAA,CAAA;AACtB,IAAM,MAAA,EAAA,GAAK,CAAE,CAAA,CAAA,GAAI,IAAK,CAAA,CAAA,CAAA;AACtB,IAAO,OAAA,EAAA,GAAK,KAAK,EAAK,GAAA,EAAA,CAAA;AAAA,GACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAgB,GAAA;AACd,IAAA,OAAO,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,CAAA,EAAG,KAAK,CAAC,CAAA,CAAA;AAAA,GAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,CAAkB,EAAA;AACxB,IAAO,OAAA,IAAA,CAAK,MAAM,IAAK,CAAA,CAAA,GAAI,EAAE,CAAG,EAAA,IAAA,CAAK,CAAI,GAAA,CAAA,CAAE,CAAC,CAAA,CAAA;AAAA,GAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,CAAkB,EAAA;AAC1B,IAAA,OAAO,IAAK,CAAA,YAAA,CAAa,CAAE,CAAA,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAAA,GACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAA,CAAa,GAAW,CAAmB,EAAA;AACzC,IAAA,OAAO,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,CAAA,GAAI,CAAI,GAAA,IAAA,CAAK,CAAI,GAAA,CAAA,EAAG,IAAK,CAAA,CAAA,GAAI,CAAI,GAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,GACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,OAAO,QAAQ,CAA0B,EAAA;AACvC,IAAA,IAAI,aAAa,KAAO,EAAA;AACtB,MAAO,OAAA,CAAA,CAAA;AAAA,KACT;AACA,IAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,CAAG,EAAA;AACpB,MAAA,OAAO,IAAI,KAAM,CAAA,CAAA,CAAE,CAAC,CAAG,EAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AAAA,KAC7B;AACA,IAAO,OAAA,CAAA,CAAA;AAAA,GACT;AACF;;ACnUM,MAAA;AAAA;AAAA,EAEJ,gBAAA;AAAA,EACA,sBAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,uBAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,wBAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AACF,CAAI,GAAAA,oBAAA;AAGJ,MAAM,UAAUA,mBAAW,CAAA,IAAA;AAC3B,MAAM,aAAaA,mBAAW,CAAA,OAAA;AAC9B,MAAM,YAAYA,mBAAW,CAAA,MAAA;AAC7B,MAAM,YAAYA,mBAAW,CAAA,MAAA;AAC7B,MAAM,mBAAmBA,mBAAW,CAAA,aAAA;AACpC,MAAM,oBAAoBA,mBAAW,CAAA,cAAA;AACrC,MAAM,kBAAkBA,mBAAW,CAAA,YAAA;AACnC,MAAM,uBAAuBA,mBAAW,CAAA,iBAAA;AACxC,MAAM,0BAA0BA,mBAAW,CAAA,oBAAA;AAC3C,MAAM,uBAAuBA,mBAAW,CAAA,iBAAA;AACxC,MAAM,kBAAkBA,mBAAW,CAAA,YAAA;AACLA,mBAAW,CAAA,kBAAA;AACZA,mBAAW,CAAA,iBAAA;AACTA,mBAAW,CAAA,mBAAA;AAClBA,mBAAW,CAAA,YAAA;AACVA,mBAAW,CAAA,aAAA;AACNA,mBAAW,CAAA,kBAAA;AACdA,mBAAW,CAAA;;;;"}