{"version":3,"file":"ors-js-client.umd.cjs","sources":["../src/constants.js","../src/OrsUtil.js","../src/OrsBase.js","../src/OrsGeocode.js","../src/OrsPois.js","../src/OrsElevation.js","../src/OrsOptimization.js","../src/index.js","../src/OrsIsochrones.js","../src/OrsDirections.js","../src/OrsMatrix.js","../src/OrsSnap.js"],"sourcesContent":["const constants = {\n  defaultAPIVersion: 'v2',\n  defaultHost: 'https://api.openrouteservice.org',\n  missingAPIKeyMsg: 'Please add your openrouteservice api_key..',\n  baseUrlConstituents: ['host', 'service', 'api_version', 'mime_type'],\n  propNames: {\n    apiKey: 'api_key',\n    host: 'host',\n    service: 'service',\n    apiVersion: 'api_version',\n    mimeType: 'mime_type',\n    profile: 'profile',\n    format: 'format',\n    timeout: 'timeout'\n  }\n}\n\nexport default constants\n","import Constants from './constants.js'\nclass OrsUtil {\n  fillArgs(defaultArgs, requestArgs) {\n    requestArgs = {...defaultArgs, ...requestArgs}\n    return requestArgs\n  }\n\n  saveArgsToCache(args) {\n    return {\n      host: args[Constants.propNames.host],\n      api_version: args[Constants.propNames.apiVersion],\n      profile: args[Constants.propNames.profile],\n      format: args[Constants.propNames.format],\n      service: args[Constants.propNames.service],\n      api_key: args[Constants.propNames.apiKey],\n      mime_type: args[Constants.propNames.mimeType]\n    }\n  }\n\n  prepareRequest(args) {\n    delete args[Constants.propNames.mimeType]\n    delete args[Constants.propNames.host]\n    delete args[Constants.propNames.apiVersion]\n    delete args[Constants.propNames.service]\n    delete args[Constants.propNames.apiKey]\n    delete args[Constants.propNames.profile]\n    delete args[Constants.propNames.format]\n    delete args[Constants.propNames.timeout]\n    return { ...args }\n  }\n\n  /**\n   * Prepare the request url based on url constituents\n   * @param {Object} args\n   * @return {string} url\n   */\n  prepareUrl(args) {\n    let url = args[Constants.propNames.host]\n    let urlPathParts = [\n      args[Constants.propNames.apiVersion],\n      args[Constants.propNames.service],\n      args[Constants.propNames.profile],\n      args[Constants.propNames.format]\n    ]\n\n    urlPathParts = urlPathParts.join('/')\n    urlPathParts = urlPathParts.replace(/\\/(\\/)+/g, '/')\n\n    // The beginning and end of urlPathParts can not be a slash\n    if (urlPathParts[0] === '/') {\n      urlPathParts = urlPathParts.slice(1)\n    }\n    let end = urlPathParts.slice(-1)\n    if (end[0] === '/') {\n      urlPathParts = urlPathParts.slice(0, -1)\n    }\n\n    url = url + '/' + urlPathParts\n\n    return url\n  }\n}\n\nexport default OrsUtil\n","import OrsUtil from './OrsUtil.js'\nimport Constants from './constants.js'\n\nconst orsUtil = new OrsUtil()\n\nclass OrsBase {\n  constructor(args) {\n    this.defaultArgs = {}\n    this.requestArgs = {}\n    this.argsCache = null\n    this.customHeaders = {}\n\n    this._setRequestDefaults(args)\n  }\n\n  /**\n   * Set defaults for a request comparing with and overwriting default class arguments\n   * @param {Object} args - constructor input\n   */\n  _setRequestDefaults(args) {\n    this.defaultArgs[Constants.propNames.host] = Constants.defaultHost\n    if (args[Constants.propNames.host]) {\n      this.defaultArgs[Constants.propNames.host] = args[Constants.propNames.host]\n    }\n    if (args[Constants.propNames.service]) {\n      this.defaultArgs[Constants.propNames.service] = args[Constants.propNames.service]\n    }\n    if (args[Constants.propNames.timeout]) {\n      this.defaultArgs[Constants.propNames.timeout] = args[Constants.propNames.timeout]\n    }\n    if (Constants.propNames.apiKey in args) {\n      this.defaultArgs[Constants.propNames.apiKey] = args[Constants.propNames.apiKey]\n    } else if (!args[Constants.propNames.host]) {\n      // Do not error if a host is specified; useful for locally-run instances of ORS\n      console.error(Constants.missingAPIKeyMsg)\n      throw new Error(Constants.missingAPIKeyMsg)\n    }\n  }\n\n  checkHeaders() {\n    // Get custom header and remove from args\n    if (this.requestArgs.customHeaders) {\n      this.customHeaders = this.requestArgs.customHeaders\n      delete this.requestArgs.customHeaders\n    }\n    // set default Content-type, since Postman sets Content-type to text/plain if not specified\n    if (!('Content-type' in this.customHeaders)) {\n      this.customHeaders = {...this.customHeaders, 'Content-type': 'application/json'}\n    }\n  }\n\n  async fetchRequest(body, controller) {\n    let url = orsUtil.prepareUrl(this.argsCache)\n    if (this.argsCache[Constants.propNames.service] === 'pois') {\n      url += url.indexOf('?') > -1 ? '&' : '?'\n    }\n\n    const authorization = {'Authorization': this.argsCache[Constants.propNames.apiKey]}\n\n    return await fetch(url, {\n      method: 'POST',\n      body: JSON.stringify(body),\n      headers: {...authorization, ...this.customHeaders},\n      signal: controller.signal\n    })\n  }\n\n  async createRequest(body) {\n    const controller = new AbortController()\n    const timeout = setTimeout(() => controller.abort(), this.defaultArgs[Constants.propNames.timeout] || 5000)\n\n    try {\n      const orsResponse = await this.fetchRequest(body, controller)\n\n      if (!orsResponse.ok) {\n        const error = new Error(orsResponse.statusText)\n        error.status = orsResponse.status\n        error.response = orsResponse\n        throw error\n      }\n\n      return this.argsCache?.format === 'gpx' ? await orsResponse.text() : await orsResponse.json()\n    } finally {\n      clearTimeout(timeout)\n    }\n  }\n\n  // is overridden in Directions and Isochrones class\n  getBody() {\n    return this.httpArgs;\n  }\n\n  async calculate(reqArgs) {\n    this.requestArgs = reqArgs\n\n    this.checkHeaders()\n\n    this.requestArgs = orsUtil.fillArgs(this.defaultArgs, this.requestArgs)\n\n    this.argsCache = orsUtil.saveArgsToCache(this.requestArgs)\n\n    this.httpArgs = orsUtil.prepareRequest(this.requestArgs)\n    const postBody = this.getBody(this.httpArgs)\n\n    return await this.createRequest(postBody)\n  }\n}\n\nexport default OrsBase\n","import OrsUtil from './OrsUtil.js'\nimport Constants from './constants.js'\nimport OrsBase from './OrsBase.js'\n\nconst orsUtil = new OrsUtil()\n\nclass OrsGeocode extends OrsBase {\n  constructor(args) {\n    super(args)\n\n    this.lookupParameter = {\n      api_key: function(key, val) {\n        return key + '=' + val\n      },\n      text: function(key, val) {\n        return '&' + key + '=' + encodeURIComponent(val)\n      },\n      focus_point: function(key, val) {\n        let urlParams = ''\n        urlParams += '&' + 'focus.point.lon' + '=' + val[1]\n        urlParams += '&' + 'focus.point.lat' + '=' + val[0]\n        return urlParams\n      },\n      boundary_bbox: function(key, val) {\n        let urlParams = ''\n        urlParams += '&' + 'boundary.rect.min_lon' + '=' + val[0][1]\n        urlParams += '&' + 'boundary.rect.min_lat' + '=' + val[0][0]\n        urlParams += '&' + 'boundary.rect.max_lon' + '=' + val[1][1]\n        urlParams += '&' + 'boundary.rect.max_lat' + '=' + val[1][0]\n\n        return urlParams\n      },\n      point: function(key, val) {\n        if (val && Array.isArray(val.lat_lng)) {\n          let urlParams = ''\n          urlParams += '&' + 'point.lon' + '=' + val.lat_lng[1]\n          urlParams += '&' + 'point.lat' + '=' + val.lat_lng[0]\n          return urlParams\n        }\n      },\n      boundary_circle: function(key, val) {\n        let urlParams = ''\n        urlParams += '&' + 'boundary.circle.lon' + '=' + val.lat_lng[1]\n        urlParams += '&' + 'boundary.circle.lat' + '=' + val.lat_lng[0]\n        urlParams += '&' + 'boundary.circle.radius' + '=' + val.radius\n\n        return urlParams\n      },\n      sources: function(key, val) {\n        let urlParams = '&sources='\n        if (val) {\n          for (const key in val) {\n            if (Number(key) > 0) {\n              urlParams += ','\n            }\n            urlParams += val[key]\n          }\n          return urlParams\n        }\n      },\n      layers: function(key, val) {\n        let urlParams = '&layers='\n        let counter = 0\n        for (key in val) {\n          if (counter > 0) {\n            urlParams += ','\n          }\n          urlParams += val[key]\n          counter++\n        }\n        return urlParams\n      },\n      boundary_country: function(key, val) {\n        return '&' + 'boundary.country' + '=' + val\n      },\n      size: function(key, val) {\n        return '&' + key + '=' + val\n      },\n      address: function(key, val) {\n        return '&' + key + '=' + val\n      },\n      neighbourhood: function(key, val) {\n        return '&' + key + '=' + val\n      },\n      borough: function(key, val) {\n        return '&' + key + '=' + val\n      },\n      locality: function(key, val) {\n        return '&' + key + '=' + val\n      },\n      county: function(key, val) {\n        return '&' + key + '=' + val\n      },\n      region: function(key, val) {\n        return '&' + key + '=' + val\n      },\n      postalcode: function(key, val) {\n        return '&' + key + '=' + val\n      },\n      country: function(key, val) {\n        return '&' + key + '=' + val\n      }\n    }\n  }\n\n  getParametersAsQueryString(args) {\n    let queryString = ''\n    for (const key in args) {\n      const val = args[key]\n      if (Constants.baseUrlConstituents.indexOf(key) <= -1) {\n        queryString += this.lookupParameter[key](key, val)\n      }\n    }\n    return queryString\n  }\n\n  async fetchGetRequest(controller) {\n    let url = orsUtil.prepareUrl(this.requestArgs)\n    // Add url query string from args\n    url += '?' + this.getParametersAsQueryString(this.requestArgs)\n\n    // createRequest function from base class is not applicable: GET instead of POST request\n    return await fetch(url, {\n      method: 'GET',\n      headers: this.customHeaders,\n      signal: controller.signal\n    })\n  }\n\n  async geocodePromise() {\n    const controller = new AbortController()\n    const timeout = setTimeout(() => controller.abort(), this.defaultArgs[Constants.propNames.timeout] || 5000)\n\n    try {\n      const orsResponse = await this.fetchGetRequest(controller)\n\n      if (!orsResponse.ok) {\n        const error = new Error(orsResponse.statusText)\n        error.status = orsResponse.status\n        error.response = orsResponse\n        throw error\n      }\n\n      return await orsResponse.json() || orsResponse.text()\n    } finally {\n      clearTimeout(timeout)\n    }\n  }\n\n  async geocode(reqArgs) {\n    this.requestArgs = reqArgs\n\n    this.checkHeaders()\n\n    if (!this.defaultArgs[Constants.propNames.service] && !this.requestArgs[Constants.propNames.service]) {\n      this.requestArgs.service = 'geocode/search'\n    }\n    this.requestArgs = orsUtil.fillArgs(this.defaultArgs, this.requestArgs)\n\n    return await this.geocodePromise()\n  }\n\n  async reverseGeocode(reqArgs) {\n    this.requestArgs = reqArgs\n\n    this.checkHeaders()\n\n    if (!this.defaultArgs[Constants.propNames.service] && !this.requestArgs[Constants.propNames.service]) {\n      this.requestArgs.service = 'geocode/reverse'\n    }\n    this.requestArgs = orsUtil.fillArgs(this.defaultArgs, this.requestArgs)\n\n    return await this.geocodePromise()\n  }\n\n  async structuredGeocode(reqArgs) {\n    this.requestArgs = reqArgs\n\n    this.checkHeaders()\n\n    if (!this.defaultArgs[Constants.propNames.service] && !this.requestArgs[Constants.propNames.service]) {\n      this.requestArgs.service = 'geocode/search/structured'\n    }\n    this.requestArgs = orsUtil.fillArgs(this.defaultArgs, this.requestArgs)\n\n    return await this.geocodePromise()\n  }\n}\n\nexport default OrsGeocode\n","import OrsUtil from './OrsUtil.js'\nimport Constants from './constants.js'\nimport OrsBase from './OrsBase.js'\n\nconst orsUtil = new OrsUtil()\n\nclass OrsPois extends OrsBase {\n  constructor(args) {\n    super(args);\n    if (!this.defaultArgs[Constants.propNames.service]) {\n      this.defaultArgs[Constants.propNames.service] = 'pois'\n    }\n  }\n\n  generatePayload(args) {\n    const payload = {}\n\n    for (const key in args) {\n      if (\n          !(\n              Constants.baseUrlConstituents.indexOf(key) > -1 ||\n              key === Constants.propNames.apiKey ||\n              key === Constants.propNames.timeout\n          )\n      ) {\n        payload[key] = args[key]\n      }\n    }\n    return payload\n  }\n\n  async poisPromise() {\n    // the request arg is required by the API as part of the body\n    this.requestArgs.request = this.requestArgs.request || 'pois'\n\n    this.argsCache = orsUtil.saveArgsToCache(this.requestArgs)\n\n    if (this.requestArgs[Constants.propNames.service]) {\n      delete this.requestArgs[Constants.propNames.service]\n    }\n\n    const payload = this.generatePayload(this.requestArgs)\n\n    return await this.createRequest(payload)\n  }\n\n  async pois(reqArgs) {\n    this.requestArgs = reqArgs\n\n    this.checkHeaders()\n\n    this.requestArgs = orsUtil.fillArgs(this.defaultArgs, this.requestArgs)\n\n    return await this.poisPromise()\n  }\n}\n\nexport default OrsPois\n","import OrsUtil from './OrsUtil.js'\nimport Constants from './constants.js'\nimport OrsBase from './OrsBase.js'\n\nconst orsUtil = new OrsUtil()\nclass OrsElevation extends OrsBase {\n\n  generatePayload(args) {\n    const payload = {}\n\n    for (const key in args) {\n      if (Constants.baseUrlConstituents.indexOf(key) <= -1) {\n        payload[key] = args[key]\n      }\n    }\n    return payload\n  }\n\n  async elevationPromise() {\n    this.argsCache = orsUtil.saveArgsToCache(this.requestArgs)\n\n    const payload = this.generatePayload(this.requestArgs)\n\n    return await this.createRequest(payload)\n  }\n\n  async lineElevation(reqArgs) {\n    this.requestArgs = reqArgs\n\n    this.checkHeaders()\n\n    if (!this.defaultArgs[Constants.propNames.service] && !this.requestArgs[Constants.propNames.service]) {\n      this.requestArgs[Constants.propNames.service] = 'elevation/line'\n    }\n    this.requestArgs = orsUtil.fillArgs(this.defaultArgs, this.requestArgs)\n\n    return await this.elevationPromise()\n  }\n\n  async pointElevation(reqArgs) {\n    this.requestArgs = reqArgs\n\n    this.checkHeaders()\n\n    if (!this.defaultArgs[Constants.propNames.service] && !this.requestArgs[Constants.propNames.service]) {\n      this.requestArgs[Constants.propNames.service] = 'elevation/point'\n    }\n    this.requestArgs = orsUtil.fillArgs(this.defaultArgs, this.requestArgs)\n\n    return await this.elevationPromise()\n  }\n}\n\nexport default OrsElevation\n","import OrsUtil from \"./OrsUtil.js\"\nimport Constants from \"./constants.js\"\nimport OrsBase from \"./OrsBase.js\"\n\nconst orsUtil = new OrsUtil()\n\nclass OrsOptimization extends OrsBase {\n  generatePayload(args) {\n    let payload = {}\n\n    for (const key in args) {\n      if (Constants.baseUrlConstituents.indexOf(key) <= -1) {\n        payload[key] = args[key]\n      }\n    }\n    return payload\n  }\n\n  async optimizationPromise() {\n    this.argsCache = orsUtil.saveArgsToCache(this.requestArgs)\n\n    const payload = this.generatePayload(this.requestArgs)\n\n    return await this.createRequest(payload)\n  }\n\n  async optimize(reqArgs) {\n    this.requestArgs = reqArgs\n\n    this.checkHeaders()\n\n    if (!this.defaultArgs[Constants.propNames.service] && !reqArgs[Constants.propNames.service]) {\n      reqArgs[Constants.propNames.service] = 'optimization'\n    }\n    this.requestArgs = orsUtil.fillArgs(this.defaultArgs, this.requestArgs)\n\n    return await this.optimizationPromise()\n  }\n}\n\nexport default OrsOptimization\n","import OrsGeocode from './OrsGeocode.js'\nimport OrsIsochrones from './OrsIsochrones.js'\nimport OrsMatrix from './OrsMatrix.js'\nimport OrsDirections from './OrsDirections.js'\nimport OrsPois from './OrsPois.js'\nimport OrsElevation from './OrsElevation.js'\nimport OrsOptimization from './OrsOptimization.js'\nimport OrsSnap from './OrsSnap.js';\n\nconst Openrouteservice = {\n  Geocode: OrsGeocode,\n  Isochrones: OrsIsochrones,\n  Directions: OrsDirections,\n  Matrix: OrsMatrix,\n  Pois: OrsPois,\n  Elevation: OrsElevation,\n  Optimization: OrsOptimization,\n  Snap: OrsSnap\n}\n\n// Define Openrouteservice for Node module pattern loaders, including Browserify\nif (typeof module === 'object' && typeof module.exports === 'object') {\n  module.exports = Openrouteservice\n  // define Openrouteservice as an AMD module\n  // eslint-disable-next-line no-undef\n} else if (typeof define === 'function' && define.amd) {\n  // eslint-disable-next-line no-undef\n  define(Openrouteservice)\n}\n\nif (typeof window !== 'undefined') {\n  window.Openrouteservice = Openrouteservice\n}\n\nexport default Openrouteservice\n","import Constants from './constants.js'\nimport OrsBase from './OrsBase.js'\n\nclass OrsIsochrones extends OrsBase {\n  constructor(args) {\n    super(args);\n    if (!this.defaultArgs[Constants.propNames.service] && !this.requestArgs[Constants.propNames.service]) {\n      this.defaultArgs.service = 'isochrones'\n    }\n    if (!args[Constants.propNames.apiVersion]) {\n      this.defaultArgs.api_version = Constants.defaultAPIVersion\n    }\n  }\n\n  getBody(args) {\n    const options = {}\n\n    if (args.restrictions) {\n      options.profile_params = {\n        restrictions: {\n          ...args.restrictions\n        }\n      }\n      delete args.restrictions\n    }\n    if (args.avoidables) {\n      options.avoid_features = [...args.avoidables]\n      delete args.avoidables\n    }\n\n    if (args.avoid_polygons) {\n      options.avoid_polygons = {\n        ...args.avoid_polygons\n      }\n      delete args.avoid_polygons\n    }\n\n    if (Object.keys(options).length > 0) {\n      return {\n        ...args,\n        options: options\n      }\n    } else {\n      return {\n        ...args\n      }\n    }\n  }\n}\n\nexport default OrsIsochrones\n","import Constants from './constants.js'\nimport OrsBase from './OrsBase.js'\n\nclass OrsDirections extends OrsBase {\n  constructor(args) {\n    super(args);\n    if (!this.defaultArgs[Constants.propNames.service]) {\n      this.defaultArgs[Constants.propNames.service] = 'directions'\n    }\n    if (!args[Constants.propNames.apiVersion]) {\n      this.defaultArgs.api_version = Constants.defaultAPIVersion\n    }\n  }\n\n  getBody(args) {\n    if (args.options && typeof args.options !== 'object') {\n      args.options = JSON.parse(args.options)\n    }\n\n    if (args.restrictions) {\n      args.options = args.options || {}\n      args.options.profile_params = {\n        restrictions: { ...args.restrictions }\n      }\n      delete args.restrictions\n    }\n\n    if (args.avoidables) {\n      args.options = args.options || {}\n      args.options.avoid_features = [...args.avoidables]\n      delete args.avoidables\n    }\n    return args\n  }\n}\n\nexport default OrsDirections\n","import Constants from './constants.js'\nimport OrsBase from './OrsBase.js'\n\nclass OrsMatrix extends OrsBase {\n  constructor(args) {\n    super(args);\n    if (!this.defaultArgs[Constants.propNames.service] && !this.requestArgs[Constants.propNames.service]) {\n      this.defaultArgs[Constants.propNames.service] = 'matrix'\n    }\n    if (!args[Constants.propNames.apiVersion]) {\n      this.defaultArgs.api_version = Constants.defaultAPIVersion\n    }\n  }\n}\n\nexport default OrsMatrix\n","import Constants from './constants.js'\nimport OrsBase from './OrsBase.js'\n\nclass OrsSnap extends OrsBase {\n    constructor(args) {\n        super(args);\n        if (!this.defaultArgs[Constants.propNames.service] && !this.requestArgs[Constants.propNames.service]) {\n            this.defaultArgs[Constants.propNames.service] = 'snap'\n        }\n        if (!args[Constants.propNames.apiVersion]) {\n            this.defaultArgs.api_version = Constants.defaultAPIVersion\n        }\n    }\n}\n\nexport default OrsSnap\n"],"names":["constants","defaultAPIVersion","defaultHost","missingAPIKeyMsg","baseUrlConstituents","propNames","apiKey","host","service","apiVersion","mimeType","profile","format","timeout","OrsUtil","fillArgs","defaultArgs","requestArgs","saveArgsToCache","args","Constants","api_version","api_key","mime_type","prepareRequest","prepareUrl","url","urlPathParts","join","replace","slice","orsUtil","OrsBase","constructor","this","argsCache","customHeaders","_setRequestDefaults","console","error","Error","checkHeaders","fetchRequest","body","controller","indexOf","authorization","Authorization","fetch","method","JSON","stringify","headers","signal","createRequest","AbortController","setTimeout","abort","orsResponse","ok","statusText","status","response","_a","text","json","clearTimeout","getBody","httpArgs","calculate","reqArgs","postBody","Openrouteservice","Geocode","super","lookupParameter","key","val","encodeURIComponent","focus_point","urlParams","boundary_bbox","point","Array","isArray","lat_lng","boundary_circle","radius","sources","Number","layers","counter","boundary_country","size","address","neighbourhood","borough","locality","county","region","postalcode","country","getParametersAsQueryString","queryString","fetchGetRequest","geocodePromise","geocode","reverseGeocode","structuredGeocode","Isochrones","options","restrictions","profile_params","avoidables","avoid_features","avoid_polygons","Object","keys","length","Directions","parse","Matrix","Pois","generatePayload","payload","poisPromise","request","pois","Elevation","elevationPromise","lineElevation","pointElevation","Optimization","optimizationPromise","optimize","Snap","module","exports","define","amd","window"],"mappings":"4OAAA,MAAMA,EAAY,CAChBC,kBAAmB,KACnBC,YAAa,mCACbC,iBAAkB,6CAClBC,oBAAqB,CAAC,OAAQ,UAAW,cAAe,aACxDC,UAAW,CACTC,OAAQ,UACRC,KAAM,OACNC,QAAS,UACTC,WAAY,cACZC,SAAU,YACVC,QAAS,UACTC,OAAQ,SACRC,QAAS,YCZb,MAAMC,EACJ,QAAAC,CAASC,EAAaC,GAEb,OADPA,EAAc,IAAID,KAAgBC,EAEnC,CAED,eAAAC,CAAgBC,GACP,MAAA,CACLZ,KAAMY,EAAKC,EAAUf,UAAUE,MAC/Bc,YAAaF,EAAKC,EAAUf,UAAUI,YACtCE,QAASQ,EAAKC,EAAUf,UAAUM,SAClCC,OAAQO,EAAKC,EAAUf,UAAUO,QACjCJ,QAASW,EAAKC,EAAUf,UAAUG,SAClCc,QAASH,EAAKC,EAAUf,UAAUC,QAClCiB,UAAWJ,EAAKC,EAAUf,UAAUK,UAEvC,CAED,cAAAc,CAAeL,GASN,cARAA,EAAKC,EAAUf,UAAUK,iBACzBS,EAAKC,EAAUf,UAAUE,aACzBY,EAAKC,EAAUf,UAAUI,mBACzBU,EAAKC,EAAUf,UAAUG,gBACzBW,EAAKC,EAAUf,UAAUC,eACzBa,EAAKC,EAAUf,UAAUM,gBACzBQ,EAAKC,EAAUf,UAAUO,eACzBO,EAAKC,EAAUf,UAAUQ,SACzB,IAAKM,EACb,CAOD,UAAAM,CAAWN,GACT,IAAIO,EAAMP,EAAKC,EAAUf,UAAUE,MAC/BoB,EAAe,CACjBR,EAAKC,EAAUf,UAAUI,YACzBU,EAAKC,EAAUf,UAAUG,SACzBW,EAAKC,EAAUf,UAAUM,SACzBQ,EAAKC,EAAUf,UAAUO,SAiBpB,OAdQe,EAAAA,EAAaC,KAAK,KAClBD,EAAAA,EAAaE,QAAQ,WAAY,KAGxB,MAApBF,EAAa,KACAA,EAAAA,EAAaG,MAAM,IAGrB,MADLH,EAAaG,OAAQ,GACvB,KACSH,EAAAA,EAAaG,MAAM,GAAK,IAGzCJ,EAAMA,EAAM,IAAMC,EAEXD,CACR,ECzDGK,MAAAA,EAAU,IAAIjB,EAEpB,MAAMkB,EACJ,WAAAC,CAAYd,GACVe,KAAKlB,YAAc,CAAE,EACrBkB,KAAKjB,YAAc,CAAE,EACrBiB,KAAKC,UAAY,KACjBD,KAAKE,cAAgB,CAAE,EAEvBF,KAAKG,oBAAoBlB,EAC1B,CAMD,mBAAAkB,CAAoBlB,GAWdC,GAVJc,KAAKlB,YAAYI,EAAUf,UAAUE,MAAQa,EAAUlB,YACnDiB,EAAKC,EAAUf,UAAUE,QACtB2B,KAAAlB,YAAYI,EAAUf,UAAUE,MAAQY,EAAKC,EAAUf,UAAUE,OAEpEY,EAAKC,EAAUf,UAAUG,WACtB0B,KAAAlB,YAAYI,EAAUf,UAAUG,SAAWW,EAAKC,EAAUf,UAAUG,UAEvEW,EAAKC,EAAUf,UAAUQ,WACtBqB,KAAAlB,YAAYI,EAAUf,UAAUQ,SAAWM,EAAKC,EAAUf,UAAUQ,UAEvEO,EAAUf,UAAUC,UAAUa,EAC3Be,KAAAlB,YAAYI,EAAUf,UAAUC,QAAUa,EAAKC,EAAUf,UAAUC,iBAC9Da,EAAKC,EAAUf,UAAUE,MAG7B,MADE+B,QAAAC,MAAMnB,EAAUjB,kBAClB,IAAIqC,MAAMpB,EAAUjB,iBAE7B,CAED,YAAAsC,GAEMP,KAAKjB,YAAYmB,gBACdF,KAAAE,cAAgBF,KAAKjB,YAAYmB,qBAC/BF,KAAKjB,YAAYmB,eAGpB,iBAAkBF,KAAKE,gBAC3BF,KAAKE,cAAgB,IAAIF,KAAKE,cAAe,eAAgB,oBAEhE,CAED,kBAAMM,CAAaC,EAAMC,GACvB,IAAIlB,EAAMK,EAAQN,WAAWS,KAAKC,WACkB,SAAhDD,KAAKC,UAAUf,EAAUf,UAAUG,WACrCkB,GAAOA,EAAImB,QAAQ,QAAY,IAAM,KAGjC,MAAAC,EAAgB,CAACC,cAAiBb,KAAKC,UAAUf,EAAUf,UAAUC,SAEpE,aAAM0C,MAAMtB,EAAK,CACtBuB,OAAQ,OACRN,KAAMO,KAAKC,UAAUR,GACrBS,QAAS,IAAIN,KAAkBZ,KAAKE,eACpCiB,OAAQT,EAAWS,QAEtB,CAED,mBAAMC,CAAcX,SACZ,MAAAC,EAAa,IAAIW,gBACjB1C,EAAU2C,YAAW,IAAMZ,EAAWa,SAASvB,KAAKlB,YAAYI,EAAUf,UAAUQ,UAAY,KAElG,IACF,MAAM6C,QAAoBxB,KAAKQ,aAAaC,EAAMC,GAE9C,IAACc,EAAYC,GAAI,CACnB,MAAMpB,EAAQ,IAAIC,MAAMkB,EAAYE,YAG9B,MAFNrB,EAAMsB,OAASH,EAAYG,OAC3BtB,EAAMuB,SAAWJ,EACXnB,CACP,CAEM,MAA2B,SAA3B,OAAAwB,EAAA7B,KAAKC,gBAAL,EAAA4B,EAAgBnD,cAAyB8C,EAAYM,aAAeN,EAAYO,MAC7F,CAAc,QACRC,aAAarD,EACd,CACF,CAGD,OAAAsD,GACE,OAAOjC,KAAKkC,QACb,CAED,eAAMC,CAAUC,GACdpC,KAAKjB,YAAcqD,EAEnBpC,KAAKO,eAELP,KAAKjB,YAAcc,EAAQhB,SAASmB,KAAKlB,YAAakB,KAAKjB,aAE3DiB,KAAKC,UAAYJ,EAAQb,gBAAgBgB,KAAKjB,aAE9CiB,KAAKkC,SAAWrC,EAAQP,eAAeU,KAAKjB,aAC5C,MAAMsD,EAAWrC,KAAKiC,QAAQjC,KAAKkC,UAE5B,aAAMlC,KAAKoB,cAAciB,EACjC,ECrGGxC,MAAAA,EAAU,IAAIjB,ECAdiB,MAAAA,EAAU,IAAIjB,ECAdiB,MAAAA,EAAU,IAAIjB,ECAd,MAAAiB,EAAU,IAAIjB,ECKf,MAAC0D,EAAmB,CACvBC,QJJF,cAAyBzC,EACvB,WAAAC,CAAYd,GACVuD,MAAMvD,GAENe,KAAKyC,gBAAkB,CACrBrD,QAAS,SAASsD,EAAKC,GACrB,OAAOD,EAAM,IAAMC,CACpB,EACDb,KAAM,SAASY,EAAKC,GAClB,MAAO,IAAMD,EAAM,IAAME,mBAAmBD,EAC7C,EACDE,YAAa,SAASH,EAAKC,GACzB,IAAIG,EAAY,GAGT,OAFMA,GAAA,oBAAgCH,EAAI,GACpCG,GAAA,oBAAgCH,EAAI,GAC1CG,CACR,EACDC,cAAe,SAASL,EAAKC,GAC3B,IAAIG,EAAY,GAMT,OALPA,GAAa,0BAAsCH,EAAI,GAAG,GAC1DG,GAAa,0BAAsCH,EAAI,GAAG,GAC1DG,GAAa,0BAAsCH,EAAI,GAAG,GAC1DG,GAAa,0BAAsCH,EAAI,GAAG,GAEnDG,CACR,EACDE,MAAO,SAASN,EAAKC,GACnB,GAAIA,GAAOM,MAAMC,QAAQP,EAAIQ,SAAU,CACrC,IAAIL,EAAY,GAGT,OAFMA,GAAA,cAA0BH,EAAIQ,QAAQ,GACtCL,GAAA,cAA0BH,EAAIQ,QAAQ,GAC5CL,CACR,CACF,EACDM,gBAAiB,SAASV,EAAKC,GAC7B,IAAIG,EAAY,GAKT,OAJMA,GAAA,wBAAoCH,EAAIQ,QAAQ,GAChDL,GAAA,wBAAoCH,EAAIQ,QAAQ,GAC7DL,GAAa,2BAAuCH,EAAIU,OAEjDP,CACR,EACDQ,QAAS,SAASZ,EAAKC,GACrB,IAAIG,EAAY,YAChB,GAAIH,EAAK,CACP,IAAA,MAAWD,KAAOC,EACZY,OAAOb,GAAO,IACHI,GAAA,KAEfA,GAAaH,EAAID,GAEZ,OAAAI,CACR,CACF,EACDU,OAAQ,SAASd,EAAKC,GACpB,IAAIG,EAAY,WACZW,EAAU,EACd,IAAKf,KAAOC,EACNc,EAAU,IACCX,GAAA,KAEfA,GAAaH,EAAID,GACjBe,IAEK,OAAAX,CACR,EACDY,iBAAkB,SAAShB,EAAKC,GAC9B,MAAO,qBAAiCA,CACzC,EACDgB,KAAM,SAASjB,EAAKC,GACX,MAAA,IAAMD,EAAM,IAAMC,CAC1B,EACDiB,QAAS,SAASlB,EAAKC,GACd,MAAA,IAAMD,EAAM,IAAMC,CAC1B,EACDkB,cAAe,SAASnB,EAAKC,GACpB,MAAA,IAAMD,EAAM,IAAMC,CAC1B,EACDmB,QAAS,SAASpB,EAAKC,GACd,MAAA,IAAMD,EAAM,IAAMC,CAC1B,EACDoB,SAAU,SAASrB,EAAKC,GACf,MAAA,IAAMD,EAAM,IAAMC,CAC1B,EACDqB,OAAQ,SAAStB,EAAKC,GACb,MAAA,IAAMD,EAAM,IAAMC,CAC1B,EACDsB,OAAQ,SAASvB,EAAKC,GACb,MAAA,IAAMD,EAAM,IAAMC,CAC1B,EACDuB,WAAY,SAASxB,EAAKC,GACjB,MAAA,IAAMD,EAAM,IAAMC,CAC1B,EACDwB,QAAS,SAASzB,EAAKC,GACd,MAAA,IAAMD,EAAM,IAAMC,CAC1B,EAEJ,CAED,0BAAAyB,CAA2BnF,GACzB,IAAIoF,EAAc,GAClB,IAAA,MAAW3B,KAAOzD,EAAM,CAChB,MAAA0D,EAAM1D,EAAKyD,GACbxD,EAAUhB,oBAAoByC,QAAQ+B,KAAY,IACpD2B,GAAerE,KAAKyC,gBAAgBC,GAAKA,EAAKC,GAEjD,CACM,OAAA0B,CACR,CAED,qBAAMC,CAAgB5D,GACpB,IAAIlB,EAAMK,EAAQN,WAAWS,KAAKjB,aAK3B,OAHPS,GAAO,IAAMQ,KAAKoE,2BAA2BpE,KAAKjB,mBAGrC+B,MAAMtB,EAAK,CACtBuB,OAAQ,MACRG,QAASlB,KAAKE,cACdiB,OAAQT,EAAWS,QAEtB,CAED,oBAAMoD,GACE,MAAA7D,EAAa,IAAIW,gBACjB1C,EAAU2C,YAAW,IAAMZ,EAAWa,SAASvB,KAAKlB,YAAYI,EAAUf,UAAUQ,UAAY,KAElG,IACF,MAAM6C,QAAoBxB,KAAKsE,gBAAgB5D,GAE3C,IAACc,EAAYC,GAAI,CACnB,MAAMpB,EAAQ,IAAIC,MAAMkB,EAAYE,YAG9B,MAFNrB,EAAMsB,OAASH,EAAYG,OAC3BtB,EAAMuB,SAAWJ,EACXnB,CACP,CAED,aAAamB,EAAYO,QAAUP,EAAYM,MACrD,CAAc,QACRE,aAAarD,EACd,CACF,CAED,aAAM6F,CAAQpC,GAUL,OATPpC,KAAKjB,YAAcqD,EAEnBpC,KAAKO,eAEAP,KAAKlB,YAAYI,EAAUf,UAAUG,UAAa0B,KAAKjB,YAAYG,EAAUf,UAAUG,WAC1F0B,KAAKjB,YAAYT,QAAU,kBAE7B0B,KAAKjB,YAAcc,EAAQhB,SAASmB,KAAKlB,YAAakB,KAAKjB,mBAE9CiB,KAAKuE,gBACnB,CAED,oBAAME,CAAerC,GAUZ,OATPpC,KAAKjB,YAAcqD,EAEnBpC,KAAKO,eAEAP,KAAKlB,YAAYI,EAAUf,UAAUG,UAAa0B,KAAKjB,YAAYG,EAAUf,UAAUG,WAC1F0B,KAAKjB,YAAYT,QAAU,mBAE7B0B,KAAKjB,YAAcc,EAAQhB,SAASmB,KAAKlB,YAAakB,KAAKjB,mBAE9CiB,KAAKuE,gBACnB,CAED,uBAAMG,CAAkBtC,GAUf,OATPpC,KAAKjB,YAAcqD,EAEnBpC,KAAKO,eAEAP,KAAKlB,YAAYI,EAAUf,UAAUG,UAAa0B,KAAKjB,YAAYG,EAAUf,UAAUG,WAC1F0B,KAAKjB,YAAYT,QAAU,6BAE7B0B,KAAKjB,YAAcc,EAAQhB,SAASmB,KAAKlB,YAAakB,KAAKjB,mBAE9CiB,KAAKuE,gBACnB,GI/KDI,WCRF,cAA4B7E,EAC1B,WAAAC,CAAYd,GACVuD,MAAMvD,GACDe,KAAKlB,YAAYI,EAAUf,UAAUG,UAAa0B,KAAKjB,YAAYG,EAAUf,UAAUG,WAC1F0B,KAAKlB,YAAYR,QAAU,cAExBW,EAAKC,EAAUf,UAAUI,cACvByB,KAAAlB,YAAYK,YAAcD,EAAUnB,kBAE5C,CAED,OAAAkE,CAAQhD,GACN,MAAM2F,EAAU,CAAE,EAsBlB,OApBI3F,EAAK4F,eACPD,EAAQE,eAAiB,CACvBD,aAAc,IACT5F,EAAK4F,sBAGL5F,EAAK4F,cAEV5F,EAAK8F,aACPH,EAAQI,eAAiB,IAAI/F,EAAK8F,mBAC3B9F,EAAK8F,YAGV9F,EAAKgG,iBACPL,EAAQK,eAAiB,IACpBhG,EAAKgG,uBAEHhG,EAAKgG,gBAGVC,OAAOC,KAAKP,GAASQ,OAAS,EACzB,IACFnG,EACH2F,WAGK,IACF3F,EAGR,GDnCDoG,WETF,cAA4BvF,EAC1B,WAAAC,CAAYd,GACVuD,MAAMvD,GACDe,KAAKlB,YAAYI,EAAUf,UAAUG,WACxC0B,KAAKlB,YAAYI,EAAUf,UAAUG,SAAW,cAE7CW,EAAKC,EAAUf,UAAUI,cACvByB,KAAAlB,YAAYK,YAAcD,EAAUnB,kBAE5C,CAED,OAAAkE,CAAQhD,GAkBC,OAjBHA,EAAK2F,SAAmC,iBAAjB3F,EAAK2F,UAC9B3F,EAAK2F,QAAU5D,KAAKsE,MAAMrG,EAAK2F,UAG7B3F,EAAK4F,eACF5F,EAAA2F,QAAU3F,EAAK2F,SAAW,CAAE,EACjC3F,EAAK2F,QAAQE,eAAiB,CAC5BD,aAAc,IAAK5F,EAAK4F,sBAEnB5F,EAAK4F,cAGV5F,EAAK8F,aACF9F,EAAA2F,QAAU3F,EAAK2F,SAAW,CAAE,EACjC3F,EAAK2F,QAAQI,eAAiB,IAAI/F,EAAK8F,mBAChC9F,EAAK8F,YAEP9F,CACR,GFpBDsG,OGVF,cAAwBzF,EACtB,WAAAC,CAAYd,GACVuD,MAAMvD,GACDe,KAAKlB,YAAYI,EAAUf,UAAUG,UAAa0B,KAAKjB,YAAYG,EAAUf,UAAUG,WAC1F0B,KAAKlB,YAAYI,EAAUf,UAAUG,SAAW,UAE7CW,EAAKC,EAAUf,UAAUI,cACvByB,KAAAlB,YAAYK,YAAcD,EAAUnB,kBAE5C,GHEDyH,KHRF,cAAsB1F,EACpB,WAAAC,CAAYd,GACVuD,MAAMvD,GACDe,KAAKlB,YAAYI,EAAUf,UAAUG,WACxC0B,KAAKlB,YAAYI,EAAUf,UAAUG,SAAW,OAEnD,CAED,eAAAmH,CAAgBxG,GACd,MAAMyG,EAAU,CAAE,EAElB,IAAA,MAAWhD,KAAOzD,EAGRC,EAAUhB,oBAAoByC,QAAQ+B,IAAO,GAC7CA,IAAQxD,EAAUf,UAAUC,QAC5BsE,IAAQxD,EAAUf,UAAUQ,UAG1B+G,EAAAhD,GAAOzD,EAAKyD,IAGjB,OAAAgD,CACR,CAED,iBAAMC,GAEJ3F,KAAKjB,YAAY6G,QAAU5F,KAAKjB,YAAY6G,SAAW,OAEvD5F,KAAKC,UAAYJ,EAAQb,gBAAgBgB,KAAKjB,aAE1CiB,KAAKjB,YAAYG,EAAUf,UAAUG,iBAChC0B,KAAKjB,YAAYG,EAAUf,UAAUG,SAG9C,MAAMoH,EAAU1F,KAAKyF,gBAAgBzF,KAAKjB,aAEnC,aAAMiB,KAAKoB,cAAcsE,EACjC,CAED,UAAMG,CAAKzD,GAOF,OANPpC,KAAKjB,YAAcqD,EAEnBpC,KAAKO,eAELP,KAAKjB,YAAcc,EAAQhB,SAASmB,KAAKlB,YAAakB,KAAKjB,mBAE9CiB,KAAK2F,aACnB,GGvCDG,UFVF,cAA2BhG,EAEzB,eAAA2F,CAAgBxG,GACd,MAAMyG,EAAU,CAAE,EAElB,IAAA,MAAWhD,KAAOzD,EACZC,EAAUhB,oBAAoByC,QAAQ+B,KAAY,IAC5CgD,EAAAhD,GAAOzD,EAAKyD,IAGjB,OAAAgD,CACR,CAED,sBAAMK,GACJ/F,KAAKC,UAAYJ,EAAQb,gBAAgBgB,KAAKjB,aAE9C,MAAM2G,EAAU1F,KAAKyF,gBAAgBzF,KAAKjB,aAEnC,aAAMiB,KAAKoB,cAAcsE,EACjC,CAED,mBAAMM,CAAc5D,GAUX,OATPpC,KAAKjB,YAAcqD,EAEnBpC,KAAKO,eAEAP,KAAKlB,YAAYI,EAAUf,UAAUG,UAAa0B,KAAKjB,YAAYG,EAAUf,UAAUG,WAC1F0B,KAAKjB,YAAYG,EAAUf,UAAUG,SAAW,kBAElD0B,KAAKjB,YAAcc,EAAQhB,SAASmB,KAAKlB,YAAakB,KAAKjB,mBAE9CiB,KAAK+F,kBACnB,CAED,oBAAME,CAAe7D,GAUZ,OATPpC,KAAKjB,YAAcqD,EAEnBpC,KAAKO,eAEAP,KAAKlB,YAAYI,EAAUf,UAAUG,UAAa0B,KAAKjB,YAAYG,EAAUf,UAAUG,WAC1F0B,KAAKjB,YAAYG,EAAUf,UAAUG,SAAW,mBAElD0B,KAAKjB,YAAcc,EAAQhB,SAASmB,KAAKlB,YAAakB,KAAKjB,mBAE9CiB,KAAK+F,kBACnB,GElCDG,aDVF,cAA8BpG,EAC5B,eAAA2F,CAAgBxG,GACd,IAAIyG,EAAU,CAAE,EAEhB,IAAA,MAAWhD,KAAOzD,EACZC,EAAUhB,oBAAoByC,QAAQ+B,KAAY,IAC5CgD,EAAAhD,GAAOzD,EAAKyD,IAGjB,OAAAgD,CACR,CAED,yBAAMS,GACJnG,KAAKC,UAAYJ,EAAQb,gBAAgBgB,KAAKjB,aAE9C,MAAM2G,EAAU1F,KAAKyF,gBAAgBzF,KAAKjB,aAEnC,aAAMiB,KAAKoB,cAAcsE,EACjC,CAED,cAAMU,CAAShE,GAUN,OATPpC,KAAKjB,YAAcqD,EAEnBpC,KAAKO,eAEAP,KAAKlB,YAAYI,EAAUf,UAAUG,UAAa8D,EAAQlD,EAAUf,UAAUG,WACzEY,EAAAA,EAAUf,UAAUG,SAAW,gBAEzC0B,KAAKjB,YAAcc,EAAQhB,SAASmB,KAAKlB,YAAakB,KAAKjB,mBAE9CiB,KAAKmG,qBACnB,GCpBDE,KIdF,cAAsBvG,EAClB,WAAAC,CAAYd,GACRuD,MAAMvD,GACDe,KAAKlB,YAAYI,EAAUf,UAAUG,UAAa0B,KAAKjB,YAAYG,EAAUf,UAAUG,WACxF0B,KAAKlB,YAAYI,EAAUf,UAAUG,SAAW,QAE/CW,EAAKC,EAAUf,UAAUI,cACrByB,KAAAlB,YAAYK,YAAcD,EAAUnB,kBAEhD,UJSiB,iBAAXuI,QAAiD,iBAAnBA,OAAOC,QAC9CD,OAAOC,QAAUjE,EAGU,mBAAXkE,QAAyBA,OAAOC,KAEhDD,OAAOlE,GAGa,oBAAXoE,SACTA,OAAOpE,iBAAmBA"}