diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 0e324c98..3b2d82ff 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -15,4 +15,6 @@ jobs: lint: uses: yoriiis/actions/.github/workflows/lint.yml@main with: + eslint-config: 'config/.eslintrc.cjs' + stylelint-config: 'config/stylelint.config.cjs' typescript-status: false diff --git a/.github/workflows/vercel-deploy-functions.yml b/.github/workflows/vercel-deploy-functions.yml deleted file mode 100644 index 71956cdd..00000000 --- a/.github/workflows/vercel-deploy-functions.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: Deploy Vercel Functions - -on: - workflow_call: - merge_group: - push: - branches: - - main - -jobs: - build: - uses: yoriiis/actions/.github/workflows/vercel-deploy-functions.yml@main - with: - node-version: 18 - secrets: - VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index f06235c4..6f625fd2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ node_modules dist +credentials.json +.env +*.tgz diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..7bde396f --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +src/core/check.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 64bc1da2..4ccda982 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -78,7 +78,7 @@ ### Updates -- Add prefix `.storelocator-` before all CSS classes use by storelocatorjs to prevent conflicts +- Add prefix `.st-` before all CSS classes use by storelocatorjs to prevent conflicts - Rename all CSS class with [FUN](https://benfrain.com/enduring-css-writing-style-sheets-rapidly-changing-long-lived-projects/#h-H2_5) methodology ## 1.0.0 diff --git a/README.md b/README.md index 7e92858e..62fcc5b2 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,22 @@ [![GitHub Workflow Status (branch)](https://img.shields.io/github/actions/workflow/status/yoriiis/storelocatorjs/build.yml?branch=main&style=for-the-badge)](https://github.com/yoriiis/storelocatorjs/actions/workflows/build.yml) [![jsDelivr](https://img.shields.io/jsdelivr/npm/hm/storelocatorjs?color=%23ff5627&style=for-the-badge)](https://www.jsdelivr.com/package/npm/storelocatorjs) -Storelocatorjs is a **fast** and **lightweight** Javascript library to easily build a store locator using Google Maps API V3. Only **6Kb** on production with gzip, Storelocatorjs has no dependency with any framework or library and is written in **Javascript native**.

+ + +## Features + +- **Video & audio** - [HTML5 video](./src/providers/html5/README.md), [HTML5 audio](./src/providers/html5/README.md), [Youtube](./src/providers/youtube/README.md), [Vimeo](./src/providers/vimeo/README.md), [Dailymotion](./src/providers/dailymotion/README.md). +- **Customization** - Choose the control elements you want to display. +- **No dependency** - Written in native Javascript without any framework. +- [**Provider API**](./src/providers/README.md) - Use the available providers or create your own. +- [**Geocoder API**](./src/plugins/README.md) - Use the available geocoder or create your own. +- [**Events**](#events) - Standardized events for all web browsers, providers and plugins. +- **Autoload API** - Google Maps, Leaflet, Mapbox and MapLibre API are automatically loaded by their provider. +- **SVG icons** - SVG are inlined into the library, no sprites to includes. +- [**Shortcuts**](#shortcuts) - Supports keyboard shortcuts. + + +

@@ -10,7 +25,13 @@ Storelocatorjs is a **fast** and **lightweight** Javascript library to easily bu

-## Examples +:sparkles: You can support this project with [GitHub Sponsors](https://github.com/sponsors/storelocatorjs)! ♡ + +## License + +The project is available with a license key on the Lemon Squeezy store. [Read more about fullPage's license](https://storelocator.lemonsqueezy.com/checkout/buy/5d697bb7-4cc8-4e6e-b7d7-fec4372a94b1?discount=0). + +### Examples The project includes several examples of `storelocatorjs` implementation in the directory `examples`. Run the following commands to build the assets for the examples: @@ -20,7 +41,11 @@ npm run build && npm run build:example ## Installation -The library is available as the `storelocatorjs` package name on [npm](https://www.npmjs.com/package/storelocatorjs). +> **Warning** storelocatorjs@3 is ESM and uses the [Node.js package `exports`](https://nodejs.org/api/packages.html#exports). + +### NPM + +NPM is the recommended installation method. Install `storelocatorjs` in your project with the following command: ```bash npm install storelocatorjs --save-dev @@ -30,104 +55,167 @@ npm install storelocatorjs --save-dev yarn add storelocatorjs --dev ``` -## Demo +> **Note** Minimum supported `Node.js` version is `16.20.0`. -Online demo is available on [https://storelocatorjs.github.io/demo](https://storelocatorjs.github.io/demo). +### CDN -## How it works +You can also download it and include it with a script tag as an ESM. -### Cloud functions +```html + + +``` -All requests to filter stores by geoposition are send to a cloud function as a web service. Storelocatorjs includes the cloud functions project from [Google Firebase](https://firebase.google.com/docs/functions) located in the `./functions` folder. +> **Note** You can browse the source of the NPM package at [jsdelivr.com/package/npm/storelocatorjs](https://www.jsdelivr.com/package/npm/storelocatorjs). -### Structure +## How it works -The extended usage of the Storelocatorjs with filters and store categories used a minimalist HTML structure. +### HTML ```html -
-
-
-
- -
-
-
- - -
-
- - -
-
-
-
- - -
-
-
-
- -
-
-
-
- -
-
+
``` -### Options +### Initialization -Storelocatorjs contains many options to allow you to easily configure your map according to your needs. Options are available on the [Storelocatorjs website](https://storelocatorjs.github.io/available-options.html). +Import `storelocatorjs` styleheet and the JavaScript library as an ES6 modules. + +```javascript +import 'storelocatorjs/storelocator.css'; +import Storelocatorjs from 'storelocatorjs'; +``` + +The `storelocatorjs` constructor accepts an object as configuration with the following parameters: + +| Arguments | Type | Description | +| ------------------- | :----------------: | -------------------------------------------------------------------------------- | +| `target` | `HTMLElement` | Unique `HTMLElement` to target the storelocator | +| `licenseKey` | `String` | Mandatory license key | +| `api.url` | `String` | Endpoint to request and search stores | +| `api.radius` | `Number` | Radius in km for the research | +| `api.limit` | `Number` | Limit of search result in the research | +| `map.provider` | `String` | Map provider | +| `map.token` | `String` | Map provider token | +| `map.options` | `String` | Map provider options | +| `geocoder.provider` | `String\|Function` | Geocoder provider | +| `geocoder.token` | `String` | Geocoder provider token | +| `templates.popup` | `Function` | Custom template for marker popup | +| `templates.result` | `Function` | Custom template for search result | +| `onReady` | `Function` | Callback function executed when the [storelocator is ready](#storelocator-ready) | + +Initialize the storelocator with the configuration object. + +```javascript +new Storelocatorjs({ + target: document.querySelector('#app'), + licenseKey: 'LICENSE_KEY', + api: { + url: 'ENDPOINT_URL' + }, + map: { + provider: GoogleMaps, + token: 'MAP_PROVIDER_TOKEN' + }, + geocoder: { + provider: 'mapbox', + token: 'GEOCODER_PROVIDER_TOKEN' + } +}); +``` -#### Example with the onReady function +--- -The `onReady` function expose the Google Maps instance as `map` variable and is called when the map is instantiated and ready. With the example below, an automatic search is triggered with location coordinates passed in parameters. + + -```js -new Storelocator({ - apiKey: '', - webServiceUrl: '' -}, onReady: function(map) { - this.triggerRequest({ - 'lat': 48.8589507, - 'lng': 2.2770202 +### Storelocator ready + +The callback function `onReady` is automatically executed when the storelocator is ready. The Google Maps, Leaflet, Mapbox and MapLibre provider listen to the `onready` event returned by their API. + +The function exposes the `storelocator` parameter as the storelocator instance. You can use it to interact with the storelocator instance and the [storelocator methods](#methods). + +Example of a storelocator with geolocation requested when ready: + +```javascript +new Storelocatorjs({ + onReady: function (storelocator) { + storelocator.requestUserPosition(); + } +}); +``` + +> **Note** The `onReady` function can also be written with an arrow function. + +### Events + +`storelocatorjs` exposes the following native `Event` on the `.sl-app` element. Events are standardized for all providers. + +| Event Type | Description | +| --------------- | -------------------------------------------------------------------------------- | +| `progress` | Sent periodically to inform interested parties of progress downloading the media | +| `userPosition` | Sent when the user location is requested | +| `storeFound` | Sent when results where found | +| `storeNotFound` | Sent when no results found | +| `zoomIn` | Sent when zooming in | +| `zoomOut` | Sent when zooming out | + +Example of a listener when the storelocator triggers the user position event. + +```javascript +new Storelocatorjs({ + onReady: (storelocator) => { + storelocator.on('userPosition', () => { + // The user location is requested }); -}) + } +}); ``` -## Browsers support +### Methods + +The storelocator instance exposes the following methods, accessible when the storelocator is ready. -The project is fully compatible with the most popular web browsers. More information about the Google Maps support on Google Developers. HTML and CSS files are W3C valid. +| Method | Parameters | Promise | Description | +| ----------------------- | :----------------: | :-----: | ------------------------------------------------------------------- | +| `requestUserPosition()` | - | - | Request the user position to search for results around its position | +| `getInstance()` | - | - | Get the storelocator instance | +| `loading()` | `Boolean` | - | Set the loading status | +| `on(event, function)` | `String, Function` | - | Add an event listener | +| `off(event, function)` | `String, Function` | - | Remove an event listener | +| `destroy()` | - | - | Destroy the storelocator | + +Example of media `duration` recovery. + +```javascript +new Storelocatorjs({ + onReady: (storelocator) => { + storelocator.requestUserPosition(); + } +}); +``` -## Licenses +### Custom CSS properties -### Commercial license +The storelocator exposes some custom CSS properties, locally scopped under the `.v-vlite` selector. You can use them to customize the design. -If you want to use Storelocatorjs to develop commercial sites, themes, projects, and applications, the Commercial License is the appropriate license. With this option, your source code is kept proprietary. -Purchase a Storelocatorjs Commercial License on the [license page](https://storelocatorjs.github.io/licenses.html#purchasing). +| Name | Value | Description | +| ----------------------------- | ------------ | ------------------------ | +| `--sl-markerSearchColor` | `#107a8b` | Marker search color | +| `--sl-markerGeolocationColor` | `#107a8b` | Marker geolocation color | +| `--sl-colorSecondary` | `0.25s ease` | Secondary color | +| `--sl-transition` | `0.25s ease` | Transition | +| `--sl-controlsColor` | `0.25s ease` | Controls color | -### Open source license +--- -If you are creating an open source application under a license compatible with the [GNU GPL license v3](https://www.gnu.org/licenses/gpl-3.0.html), you may use Storelocatorjs under the terms of the GPLv3. +## License -## Contributors + -Created with ♥ by [@yoriiis](http://github.com/yoriiis) +Created with ♡ by [@yoriiis](https://github.com/yoriiis). diff --git a/config/.eslintrc.js b/config/.eslintrc.cjs similarity index 91% rename from config/.eslintrc.js rename to config/.eslintrc.cjs index d8e67d01..c3eeada4 100644 --- a/config/.eslintrc.js +++ b/config/.eslintrc.cjs @@ -34,5 +34,5 @@ module.exports = { window: false }, - ignorePatterns: ['node_modules', 'dist'] + ignorePatterns: ['node_modules', 'dist', 'src/core/check.js'] } diff --git a/config/babel.config.js b/config/babel.config.js deleted file mode 100644 index 6574aafd..00000000 --- a/config/babel.config.js +++ /dev/null @@ -1,21 +0,0 @@ -module.exports = function (api) { - const presets = [ - '@babel/preset-env', - [ - '@babel/preset-react', - { - runtime: 'automatic', - importSource: 'jsx-dom-cjs' - } - ] - ] - - api.cache(true) - - const plugins = ['@babel/plugin-proposal-class-properties'] - - return { - presets, - plugins - } -} diff --git a/config/package.js b/config/package.js new file mode 100644 index 00000000..fd23170e --- /dev/null +++ b/config/package.js @@ -0,0 +1,11 @@ +import { license, name, version, author } from '../package.json' + +export const banner = + '/*!\n' + + ` * @license ${license}\n` + + ` * @name ${name}\n` + + ` * @version ${version}\n` + + ` * @copyright ${new Date().getUTCFullYear()} ${author}\n` + + ' */' + +export const mapProviders = ['google-maps', 'leaflet', 'mapbox', 'maplibre'] diff --git a/config/postcss.config.cjs b/config/postcss.config.cjs new file mode 100644 index 00000000..58da132d --- /dev/null +++ b/config/postcss.config.cjs @@ -0,0 +1,22 @@ +module.exports = { + plugins: { + 'postcss-import': {}, + 'postcss-url': {}, + 'postcss-nested': {}, + + 'postcss-preset-env': { + stage: 2, + features: { + 'nesting-rules': false, + 'custom-properties': { + warnings: true, + preserve: true + } + } + }, + + 'postcss-custom-media': { + preserve: false + } + } +} diff --git a/config/postcss.config.js b/config/postcss.config.js deleted file mode 100644 index dbe7b737..00000000 --- a/config/postcss.config.js +++ /dev/null @@ -1,34 +0,0 @@ -const path = require('path') - -module.exports = { - plugins: [ - [ - '@csstools/postcss-global-data', - { - files: [path.resolve(__dirname, '../src/css/vars.css')] - } - ], - 'postcss-import', - 'postcss-url', - 'postcss-nested', - [ - 'postcss-preset-env', - { - stage: 2, - features: { - 'nesting-rules': false, - 'custom-properties': { - warnings: true, - preserve: true - } - } - } - ], - [ - 'postcss-custom-media', - { - preserve: false - } - ] - ] -} diff --git a/config/prettier.config.js b/config/prettier.config.cjs similarity index 100% rename from config/prettier.config.js rename to config/prettier.config.cjs diff --git a/config/rollup.config.js b/config/rollup.config.js new file mode 100644 index 00000000..438aec5b --- /dev/null +++ b/config/rollup.config.js @@ -0,0 +1,69 @@ +import { resolve } from 'path' +import { nodeResolve } from '@rollup/plugin-node-resolve' +import svg from 'rollup-plugin-svg' +import postcss from 'rollup-plugin-postcss' +import alias from '@rollup/plugin-alias' +import { terser } from 'rollup-plugin-terser' +import commonjs from '@rollup/plugin-commonjs' +import { banner, mapProviders } from './package' +import copy from 'rollup-plugin-copy' + +const isProduction = process.env.ENV === 'production' +const outputDirectory = resolve(__dirname, '../dist') + +const createConfig = ({ input, outputFile }) => { + return { + input, + output: [ + { + banner, + file: `${outputDirectory}/${outputFile}`, + format: 'es' + } + ], + plugins: [ + commonjs(), + nodeResolve({ browser: true }), + svg(), + postcss({ + config: { + path: resolve(__dirname, 'postcss.config.cjs') + }, + extract: true, + minimize: isProduction + }), + alias({ + entries: [ + { find: 'core', replacement: resolve('src/core') }, + { find: 'shared', replacement: resolve('src/shared') }, + { find: 'components', replacement: resolve('src/components') }, + { find: 'map', replacement: resolve('src/map') }, + { find: 'geocoder', replacement: resolve('src/geocoder') }, + { find: 'check', replacement: resolve('../license-check/index.js') } + ] + }), + copy({ + targets: [ + { + src: resolve('node_modules/leaflet/dist/images'), + dest: `${outputDirectory}/map` + } + ] + }), + ...(isProduction ? [terser()] : []) + ] + } +} + +export default [ + ...mapProviders.map((name) => + createConfig({ + input: `./src/map/${name}/${name}.js`, + outputFile: `map/${name}.js` + }) + ), + createConfig({ + input: `./src/core/app.js`, + outputFile: `storelocator.js` + }) +] diff --git a/config/setup.js b/config/setup.js new file mode 100644 index 00000000..b5af516f --- /dev/null +++ b/config/setup.js @@ -0,0 +1,33 @@ +import fs from 'fs' +import path from 'path' +import dotenv from 'dotenv' + +const appDirectory = fs.realpathSync(process.cwd()) +const resolveApp = (relativePath) => path.resolve(appDirectory, relativePath) + +dotenv.config({ path: resolveApp('examples/.env') }) + +try { + const data = JSON.stringify( + { + GOOGLEMAPS_TOKEN: process.env.GOOGLEMAPS_TOKEN, + MAPBOX_TOKEN: process.env.MAPBOX_TOKEN, + JAWG_TOKEN: process.env.JAWG_TOKEN, + LEMON_SQUEEZY_LICENSE_KEY: process.env.LEMON_SQUEEZY_LICENSE_KEY + }, + null, + '\t' + ) + + fs.writeFile(resolveApp('examples/credentials.json'), data, 'utf8', (err) => { + if (err) { + console.error('An error occured when creating credentials file', err) + } else { + console.log('Credentials file created') + } + }) +} catch (error) { + throw new Error( + 'Environments variables are missing in .env ("GOOGLEMAPS_TOKEN", "MAPBOX_TOKEN", "JAWG_TOKEN")' + ) +} diff --git a/config/stylelint.config.js b/config/stylelint.config.cjs similarity index 51% rename from config/stylelint.config.js rename to config/stylelint.config.cjs index df8ee8ae..43923c69 100644 --- a/config/stylelint.config.js +++ b/config/stylelint.config.cjs @@ -5,21 +5,15 @@ module.exports = { 'declaration-colon-newline-after': null, 'value-list-comma-newline-after': null, 'custom-property-pattern': [ - '([a-z][a-zA-Z0-9]*)(-[a-zA-Z0-9]+)?$', + '^sl(-[a-zA-Z]+)?$', { - message: 'Expected custom property name to be FUN-case' + message: 'Expected custom property name to be FUN-case with prefix "sl-"' } ], 'selector-class-pattern': [ - '^([a-z][a-zA-Z0-9]*)(-[a-zA-Z0-9]+)?$', + '^sl(-[a-zA-Z0-9]+)?$', { - message: 'Expected class selector to be FUN-case' - } - ], - 'selector-id-pattern': [ - '^([a-z][a-zA-Z0-9]*)(-[a-z][a-zA-Z0-9]+)?$', - { - message: 'Expected id selector to be FUN-case' + message: 'Expected class selector to be FUN-case with prefix "sl-"' } ] } diff --git a/config/webpack.config.js b/config/webpack.config.js deleted file mode 100644 index 4d9e9cba..00000000 --- a/config/webpack.config.js +++ /dev/null @@ -1,121 +0,0 @@ -const fs = require('fs') -const path = require('path') -const webpack = require('webpack') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') -const CssMinimizerPlugin = require('css-minimizer-webpack-plugin') -const TerserPlugin = require('terser-webpack-plugin') - -const appDirectory = fs.realpathSync(process.cwd()) -const resolveApp = (relativePath) => path.resolve(appDirectory, relativePath) - -module.exports = (env, argv) => { - const isProduction = argv.mode === 'production' - - const config = { - context: appDirectory, - watch: !isProduction, - entry: { - storelocator: resolveApp('src/config.js') - }, - watchOptions: { - ignored: /node_modules/ - }, - devtool: isProduction ? false : 'source-map', - output: { - path: resolveApp('dist'), - publicPath: '/dist/', - filename: '[name].js', - library: { - name: 'storelocatorjs', - type: 'umd', - export: 'default' - } - }, - module: { - rules: [ - { - test: /\.js$/, - include: resolveApp('src'), - use: [ - { - loader: 'babel-loader', - options: { - configFile: resolveApp('config/babel.config.js') - } - } - ] - }, - { - test: /\.css$/, - include: [resolveApp('src'), resolveApp('node_modules/leaflet')], - use: [ - MiniCssExtractPlugin.loader, - { - loader: 'css-loader' - }, - { - loader: 'postcss-loader', - options: { - postcssOptions: { - config: resolveApp('config/postcss.config.js') - } - } - } - ] - }, - { - test: /\.svg$/, - loader: 'svg-inline-loader' - } - ] - }, - plugins: [ - new MiniCssExtractPlugin({ - filename: '[name].css', - chunkFilename: '[name].css' - }), - new webpack.optimize.ModuleConcatenationPlugin() - ], - stats: { - assets: true, - colors: true, - hash: false, - timings: true, - chunks: false, - chunkModules: false, - modules: false, - children: false, - entrypoints: false, - excludeAssets: /.map$/, - assetsSort: '!size' - }, - optimization: { - minimizer: [ - new TerserPlugin({ - extractComments: false, - parallel: true, - terserOptions: { - compress: { - // Drop console.log|console.info|console.debug - // Keep console.warn|console.error - pure_funcs: ['console.log', 'console.info', 'console.debug'] - } - } - }), - new CssMinimizerPlugin() - ], - chunkIds: 'deterministic', // or 'named' - removeAvailableModules: true, - removeEmptyChunks: true, - mergeDuplicateChunks: true, - providedExports: false, - splitChunks: false - } - } - - if (!isProduction) { - config.plugins.push(new webpack.ProgressPlugin()) - } - - return config -} diff --git a/examples/.env.local b/examples/.env.local new file mode 100644 index 00000000..dc30d44e --- /dev/null +++ b/examples/.env.local @@ -0,0 +1,3 @@ +GOOGLEMAPS_TOKEN= +MAPBOX_TOKEN= +JAWG_TOKEN= \ No newline at end of file diff --git a/examples/assets/custom-style.css b/examples/assets/custom-style.css deleted file mode 100644 index b235ab73..00000000 --- a/examples/assets/custom-style.css +++ /dev/null @@ -1,41 +0,0 @@ -.storelocator { - font-family: 'Roboto', arial, sans-serif; -} - -/* Override form filters style */ -.storelocator-formFilters label.category-1::before { - border: 2px solid #f60; -} - -.storelocator-formFilters label.category-1::after { - background-color: #f60; -} - -.storelocator-formFilters label.category-2::before { - border: 2px solid #fc3; -} - -.storelocator-formFilters label.category-2::after { - background-color: #fc3; -} - -.storelocator-formFilters label.category-3::before { - border: 2px solid #ea4c89; -} - -.storelocator-formFilters label.category-3::after { - background-color: #ea4c89; -} - -/* Override result list item style */ -.storelocator-sidebarResultsListItem[data-category="1"] { - border-left: 5px solid #f60; -} - -.storelocator-sidebarResultsListItem[data-category="2"] { - border-left: 5px solid #fc3; -} - -.storelocator-sidebarResultsListItem[data-category="3"] { - border-left: 5px solid #ea4c89; -} \ No newline at end of file diff --git a/examples/google-maps/config.js b/examples/google-maps/config.js new file mode 100644 index 00000000..2808f18d --- /dev/null +++ b/examples/google-maps/config.js @@ -0,0 +1,55 @@ +import '../../dist/storelocator.css' +import Storelocatorjs from '../../dist/storelocator.js' +import GoogleMaps from '../../dist/map/google-maps.js' +import credentials from '../credentials.json' +import mapStyles from './styles.json' + +/* eslint-disable no-unused-vars */ +const storelocator = new Storelocatorjs({ + target: document.querySelector('#app'), + licenseKey: credentials.LEMON_SQUEEZY_LICENSE_KEY, + api: { + url: 'https://storelocatorjs-functions.vercel.app' + }, + map: { + provider: GoogleMaps, + token: credentials.GOOGLEMAPS_TOKEN, + options: { + styles: mapStyles.styles + } + }, + geocoder: { + provider: 'mapbox', + token: credentials.MAPBOX_TOKEN + }, + // templates: { + // popup: ({ feature }) => { + // return `${feature.properties.title}` + // }, + // result: ({ feature }) => { + // return `${feature.properties.title}` + // } + // }, + onReady: (map) => { + console.log('onReady', map) + + map.on('progress', () => { + console.log('progress') + }) + map.on('userPosition', (data) => { + console.log('userPosition', data) + }) + map.on('storeFound', () => { + console.log('storeFound') + }) + map.on('storeNotFound', () => { + console.log('storeNotFound') + }) + map.on('zoomIn', () => { + console.log('zoomIn') + }) + map.on('zoomOut', () => { + console.log('zoomOut') + }) + } +}) diff --git a/examples/google-maps/index.html b/examples/google-maps/index.html new file mode 100644 index 00000000..3e4dbf1b --- /dev/null +++ b/examples/google-maps/index.html @@ -0,0 +1,16 @@ + + + + + Storelocatorjs - Google Maps + + + + +
+ + diff --git a/examples/google-maps/styles.json b/examples/google-maps/styles.json new file mode 100644 index 00000000..8a3a3812 --- /dev/null +++ b/examples/google-maps/styles.json @@ -0,0 +1,119 @@ +{ + "styles": [ + { + "featureType": "administrative", + "elementType": "labels.text.fill", + "stylers": [{ "color": "#6195a0" }] + }, + { + "featureType": "administrative.province", + "elementType": "geometry.stroke", + "stylers": [{ "visibility": "off" }] + }, + { + "featureType": "landscape", + "elementType": "geometry", + "stylers": [ + { "lightness": "0" }, + { "saturation": "0" }, + { "color": "#f5f5f2" }, + { "gamma": "1" } + ] + }, + { + "featureType": "landscape.man_made", + "elementType": "all", + "stylers": [{ "lightness": "-3" }, { "gamma": "1.00" }] + }, + { + "featureType": "landscape.natural.terrain", + "elementType": "all", + "stylers": [{ "visibility": "off" }] + }, + { + "featureType": "poi", + "elementType": "all", + "stylers": [{ "visibility": "off" }] + }, + { + "featureType": "poi.park", + "elementType": "geometry.fill", + "stylers": [{ "color": "#bae5ce" }, { "visibility": "on" }] + }, + { + "featureType": "road", + "elementType": "all", + "stylers": [{ "saturation": -100 }, { "lightness": 45 }, { "visibility": "simplified" }] + }, + { + "featureType": "road.highway", + "elementType": "all", + "stylers": [{ "visibility": "simplified" }] + }, + { + "featureType": "road.highway", + "elementType": "geometry.fill", + "stylers": [{ "color": "#fac9a9" }, { "visibility": "simplified" }] + }, + { + "featureType": "road.highway", + "elementType": "labels.text", + "stylers": [{ "color": "#4e4e4e" }] + }, + { + "featureType": "road.arterial", + "elementType": "labels.text.fill", + "stylers": [{ "color": "#787878" }] + }, + { + "featureType": "road.arterial", + "elementType": "labels.icon", + "stylers": [{ "visibility": "off" }] + }, + { + "featureType": "transit", + "elementType": "all", + "stylers": [{ "visibility": "simplified" }] + }, + { + "featureType": "transit.station.airport", + "elementType": "labels.icon", + "stylers": [ + { "hue": "#0a00ff" }, + { "saturation": "-77" }, + { "gamma": "0.57" }, + { "lightness": "0" } + ] + }, + { + "featureType": "transit.station.rail", + "elementType": "labels.text.fill", + "stylers": [{ "color": "#43321e" }] + }, + { + "featureType": "transit.station.rail", + "elementType": "labels.icon", + "stylers": [ + { "hue": "#ff6c00" }, + { "lightness": "4'" }, + { "gamma": "0.75" }, + { "saturation": "-68" } + ] + }, + { + "featureType": "water", + "elementType": "all", + "stylers": [{ "color": "#eaf6f8" }, { "visibility": "on'" }] + }, + { + "featureType": "water", + "elementType": "geometry.fill", + "stylers": [{ "color": "#c7eced" }] + }, + { + "featureType": "water", + "elementType": "labels.text.fill", + "stylers": [{ "lightness": "-49" }, { "saturation": "-53" }, { "gamma": "0.79" }] + } + ] +} diff --git a/examples/home/index.html b/examples/home/index.html index 21513bec..9a3fa757 100644 --- a/examples/home/index.html +++ b/examples/home/index.html @@ -12,19 +12,10 @@
- Usage basic - Usage with callback - Usage with categories - Usage with clusters - Usage with map styles + Google Maps + Leaflet + Mapbox + MapLibre
diff --git a/examples/leaflet/config.js b/examples/leaflet/config.js new file mode 100644 index 00000000..e293f17c --- /dev/null +++ b/examples/leaflet/config.js @@ -0,0 +1,23 @@ +import '../../dist/storelocator.css' +import '../../dist/map/leaflet.css' +import Storelocatorjs from '../../dist/storelocator.js' +import Leaflet from '../../dist/map/leaflet.js' +import credentials from '../credentials.json' + +/* eslint-disable no-unused-vars */ +const storelocator = new Storelocatorjs({ + target: document.querySelector('#app'), + api: { + url: 'https://storelocatorjs-functions.vercel.app' + }, + map: { + provider: Leaflet + }, + geocoder: { + provider: 'mapbox', + token: credentials.MAPBOX_TOKEN + }, + onReady: (map) => { + console.log('onReady', map) + } +}) diff --git a/examples/leaflet/index.html b/examples/leaflet/index.html new file mode 100644 index 00000000..e74dbe95 --- /dev/null +++ b/examples/leaflet/index.html @@ -0,0 +1,16 @@ + + + + + Storelocatorjs - Leaflet + + + + +
+ + diff --git a/examples/mapbox/config.js b/examples/mapbox/config.js new file mode 100644 index 00000000..6ee4e1ec --- /dev/null +++ b/examples/mapbox/config.js @@ -0,0 +1,24 @@ +import '../../dist/storelocator.css' +import '../../dist/map/mapbox.css' +import Storelocatorjs from '../../dist/storelocator.js' +import Mapbox from '../../dist/map/mapbox.js' +import credentials from '../credentials.json' + +/* eslint-disable no-unused-vars */ +const storelocator = new Storelocatorjs({ + target: document.querySelector('#app'), + api: { + url: 'https://storelocatorjs-functions.vercel.app' + }, + map: { + provider: Mapbox, + token: credentials.MAPBOX_TOKEN + }, + geocoder: { + provider: 'mapbox', + token: credentials.MAPBOX_TOKEN + }, + onReady: (map) => { + console.log('onReady', map) + } +}) diff --git a/examples/mapbox/index.html b/examples/mapbox/index.html new file mode 100644 index 00000000..044128ec --- /dev/null +++ b/examples/mapbox/index.html @@ -0,0 +1,16 @@ + + + + + Storelocatorjs - Mapbox + + + + +
+ + diff --git a/examples/maplibre/config.js b/examples/maplibre/config.js new file mode 100644 index 00000000..9dfeb32b --- /dev/null +++ b/examples/maplibre/config.js @@ -0,0 +1,26 @@ +import '../../dist/storelocator.css' +import '../../dist/map/maplibre.css' +import Storelocatorjs from '../../dist/storelocator.js' +import MapLibre from '../../dist/map/maplibre.js' +import credentials from '../credentials.json' + +/* eslint-disable no-unused-vars */ +const storelocator = new Storelocatorjs({ + target: document.querySelector('#app'), + api: { + url: 'https://storelocatorjs-functions.vercel.app' + }, + map: { + provider: MapLibre, + options: { + style: `https://api.jawg.io/styles/jawg-sunny.json?access-token=${credentials.JAWG_TOKEN}` + } + }, + geocoder: { + provider: 'mapbox', + token: credentials.MAPBOX_TOKEN + }, + onReady: (map) => { + console.log('onReady', map) + } +}) diff --git a/examples/maplibre/index.html b/examples/maplibre/index.html new file mode 100644 index 00000000..334de468 --- /dev/null +++ b/examples/maplibre/index.html @@ -0,0 +1,16 @@ + + + + + Storelocatorjs - MapLibre + + + + +
+ + diff --git a/examples/usage-basic/config.js b/examples/usage-basic/config.js deleted file mode 100644 index 5cd1e58d..00000000 --- a/examples/usage-basic/config.js +++ /dev/null @@ -1,11 +0,0 @@ -import '../assets/custom-style.css' -import '../../dist/storelocator.css' -import Storelocatorjs from '../../dist/storelocator.js' - -/* eslint-disable no-unused-vars */ -const myStorelocator = new Storelocatorjs({ - options: { - apiKey: 'CREATE_YOUR_API_KEY', - webServiceUrl: 'https://storelocator-functions.vercel.app' - } -}) diff --git a/examples/usage-basic/index.html b/examples/usage-basic/index.html deleted file mode 100644 index 8ae75778..00000000 --- a/examples/usage-basic/index.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - Storelocatorjs - Usage basic - - -
-
-
-
- -
- -
-
-
-
- -
-
- - diff --git a/examples/usage-with-callback/config.js b/examples/usage-with-callback/config.js deleted file mode 100644 index efffe9ce..00000000 --- a/examples/usage-with-callback/config.js +++ /dev/null @@ -1,45 +0,0 @@ -import '../assets/custom-style.css' -import '../../dist/storelocator.css' -import Storelocatorjs from '../../dist/storelocator.js' - -/* eslint-disable no-unused-vars */ -const myStorelocator = new Storelocatorjs({ - options: { - apiKey: 'CREATE_YOUR_API_KEY', - webServiceUrl: 'https://storelocator-functions.vercel.app', - map: { - markers: { - width: 30, - height: 40, - styles: [ - { - category: 'userPosition', - colorBackground: '#33ccff', - colorText: '#fff' - }, - { - category: '1', - colorBackground: '#ff6600', - colorText: '#fff' - }, - { - category: '2', - colorBackground: '#ffcc33', - colorText: '#fff' - }, - { - category: '3', - colorBackground: '#ea4c89', - colorText: '#fff' - } - ] - } - } - }, - onReady: function (map) { - this.triggerRequest({ - lat: 48.8589507, - lng: 2.2770202 - }) - } -}) diff --git a/examples/usage-with-callback/index.html b/examples/usage-with-callback/index.html deleted file mode 100644 index 479d30c6..00000000 --- a/examples/usage-with-callback/index.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - Storelocatorjs - Usage with callback - - -
-
-
-
- -
-
-
- - -
-
- - -
-
-
-
- - -
-
-
-
- -
-
-
-
- -
-
- - diff --git a/examples/usage-with-categories/config.js b/examples/usage-with-categories/config.js deleted file mode 100644 index a30de880..00000000 --- a/examples/usage-with-categories/config.js +++ /dev/null @@ -1,39 +0,0 @@ -import '../assets/custom-style.css' -import '../../dist/storelocator.css' -import Storelocatorjs from '../../dist/storelocator.js' - -/* eslint-disable no-unused-vars */ -const myStorelocator = new Storelocatorjs({ - options: { - apiKey: 'CREATE_YOUR_API_KEY', - webServiceUrl: 'https://storelocator-functions.vercel.app', - map: { - markers: { - width: 30, - height: 40, - styles: [ - { - category: 'userPosition', - colorBackground: '#33ccff', - colorText: '#fff' - }, - { - category: '1', - colorBackground: '#ff6600', - colorText: '#fff' - }, - { - category: '2', - colorBackground: '#ffcc33', - colorText: '#fff' - }, - { - category: '3', - colorBackground: '#ea4c89', - colorText: '#fff' - } - ] - } - } - } -}) diff --git a/examples/usage-with-categories/index.html b/examples/usage-with-categories/index.html deleted file mode 100644 index 40266f3f..00000000 --- a/examples/usage-with-categories/index.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - Storelocatorjs - Usage with categories - - -
-
-
-
- -
-
-
- - -
-
- - -
-
-
-
- - -
-
-
-
- -
-
-
-
- -
-
- - diff --git a/examples/usage-with-clusters/config.js b/examples/usage-with-clusters/config.js deleted file mode 100644 index a60571e3..00000000 --- a/examples/usage-with-clusters/config.js +++ /dev/null @@ -1,52 +0,0 @@ -import '../assets/custom-style.css' -import '../../dist/storelocator.css' -import Storelocatorjs from '../../dist/storelocator.js' - -/* eslint-disable no-unused-vars */ -const myStorelocator = new Storelocatorjs({ - options: { - apiKey: 'CREATE_YOUR_API_KEY', - webServiceUrl: 'https://storelocator-functions.vercel.app', - map: { - markers: { - width: 30, - height: 40, - styles: [ - { - category: 'userPosition', - colorBackground: '#33ccff', - colorText: '#fff' - }, - { - category: '1', - colorBackground: '#ff6600', - colorText: '#fff' - }, - { - category: '2', - colorBackground: '#ffcc33', - colorText: '#fff' - }, - { - category: '3', - colorBackground: '#ea4c89', - colorText: '#fff' - } - ] - } - }, - cluster: { - status: true, - options: { - gridSize: 50, - maxZoom: 13, - imagePath: - 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m', - zoomOnClick: true, - averageCenter: true, - minimumClusterSize: 2, - styles: [] - } - } - } -}) diff --git a/examples/usage-with-clusters/index.html b/examples/usage-with-clusters/index.html deleted file mode 100644 index 31f679d6..00000000 --- a/examples/usage-with-clusters/index.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - Storelocatorjs - Usage with clusters - - - -
-
-
-
- -
-
-
- - -
-
- - -
-
-
-
- - -
-
-
-
- -
-
-
-
- -
-
- - diff --git a/examples/usage-with-map-styles/config.js b/examples/usage-with-map-styles/config.js deleted file mode 100644 index a091461c..00000000 --- a/examples/usage-with-map-styles/config.js +++ /dev/null @@ -1,145 +0,0 @@ -import '../assets/custom-style.css' -import '../../dist/storelocator.css' -import Storelocatorjs from '../../dist/storelocator.js' - -/* eslint-disable no-unused-vars */ -const myStorelocator = new Storelocatorjs({ - options: { - apiKey: 'CREATE_YOUR_API_KEY', - webServiceUrl: 'https://storelocator-functions.vercel.app', - map: { - options: { - center: [46.227638, 2.213749], - mapTypeId: 'roadmap', - zoom: 6, - scrollwheel: true, - disableDefaultUI: false, - mapTypeControl: false, - streetViewControl: false, - scaleControl: false, - fullscreenControl: false, - styles: [ - { - featureType: 'administrative', - elementType: 'labels.text.fill', - stylers: [{ color: '#6195a0' }] - }, - { - featureType: 'administrative.province', - elementType: 'geometry.stroke', - stylers: [{ visibility: 'off' }] - }, - { - featureType: 'landscape', - elementType: 'geometry', - stylers: [ - { lightness: '0' }, - { saturation: '0' }, - { color: '#f5f5f2' }, - { gamma: '1' } - ] - }, - { - featureType: 'landscape.man_made', - elementType: 'all', - stylers: [{ lightness: '-3' }, { gamma: '1.00' }] - }, - { - featureType: 'landscape.natural.terrain', - elementType: 'all', - stylers: [{ visibility: 'off' }] - }, - { - featureType: 'poi', - elementType: 'all', - stylers: [{ visibility: 'off' }] - }, - { - featureType: 'poi.park', - elementType: 'geometry.fill', - stylers: [{ color: '#bae5ce' }, { visibility: 'on' }] - }, - { - featureType: 'road', - elementType: 'all', - stylers: [ - { saturation: -100 }, - { lightness: 45 }, - { visibility: 'simplified' } - ] - }, - { - featureType: 'road.highway', - elementType: 'all', - stylers: [{ visibility: 'simplified' }] - }, - { - featureType: 'road.highway', - elementType: 'geometry.fill', - stylers: [{ color: '#fac9a9' }, { visibility: 'simplified' }] - }, - { - featureType: 'road.highway', - elementType: 'labels.text', - stylers: [{ color: '#4e4e4e' }] - }, - { - featureType: 'road.arterial', - elementType: 'labels.text.fill', - stylers: [{ color: '#787878' }] - }, - { - featureType: 'road.arterial', - elementType: 'labels.icon', - stylers: [{ visibility: 'off' }] - }, - { - featureType: 'transit', - elementType: 'all', - stylers: [{ visibility: 'simplified' }] - }, - { - featureType: 'transit.station.airport', - elementType: 'labels.icon', - stylers: [ - { hue: '#0a00ff' }, - { saturation: '-77' }, - { gamma: '0.57' }, - { lightness: '0' } - ] - }, - { - featureType: 'transit.station.rail', - elementType: 'labels.text.fill', - stylers: [{ color: '#43321e' }] - }, - { - featureType: 'transit.station.rail', - elementType: 'labels.icon', - stylers: [ - { hue: '#ff6c00' }, - { lightness: '4' }, - { gamma: '0.75' }, - { saturation: '-68' } - ] - }, - { - featureType: 'water', - elementType: 'all', - stylers: [{ color: '#eaf6f8' }, { visibility: 'on' }] - }, - { - featureType: 'water', - elementType: 'geometry.fill', - stylers: [{ color: '#c7eced' }] - }, - { - featureType: 'water', - elementType: 'labels.text.fill', - stylers: [{ lightness: '-49' }, { saturation: '-53' }, { gamma: '0.79' }] - } - ] - } - } - } -}) diff --git a/examples/usage-with-map-styles/index.html b/examples/usage-with-map-styles/index.html deleted file mode 100644 index 0d9ec125..00000000 --- a/examples/usage-with-map-styles/index.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - Storelocatorjs - Usage with map styles - - -
-
-
-
- -
- -
-
-
-
- -
-
- - diff --git a/examples/webpack.config.js b/examples/webpack.config.js index 8403c112..8bf8f612 100644 --- a/examples/webpack.config.js +++ b/examples/webpack.config.js @@ -1,26 +1,25 @@ -const fs = require('fs') -const path = require('path') -const webpack = require('webpack') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') -const CssMinimizerPlugin = require('css-minimizer-webpack-plugin') -const TerserPlugin = require('terser-webpack-plugin') -const HtmlWebpackPlugin = require('html-webpack-plugin') +import fs from 'fs' +import path from 'path' +import webpack from 'webpack' +import MiniCssExtractPlugin from 'mini-css-extract-plugin' +import CssMinimizerPlugin from 'css-minimizer-webpack-plugin' +import TerserPlugin from 'terser-webpack-plugin' +import HtmlWebpackPlugin from 'html-webpack-plugin' const appDirectory = fs.realpathSync(process.cwd()) const resolveApp = (relativePath) => path.resolve(appDirectory, relativePath) -module.exports = (env, argv) => { +export default function webpackConfig(env, argv) { const isProduction = argv.mode === 'production' const config = { context: appDirectory, entry: { home: resolveApp('examples/home/config.js'), - 'usage-basic': resolveApp('examples/usage-basic/config.js'), - 'usage-with-callback': resolveApp('examples/usage-with-callback/config.js'), - 'usage-with-categories': resolveApp('examples/usage-with-categories/config.js'), - 'usage-with-clusters': resolveApp('examples/usage-with-clusters/config.js'), - 'usage-with-map-styles': resolveApp('examples/usage-with-map-styles/config.js') + 'google-maps': resolveApp('examples/google-maps/config.js'), + leaflet: resolveApp('examples/leaflet/config.js'), + mapbox: resolveApp('examples/mapbox/config.js'), + maplibre: resolveApp('examples/maplibre/config.js') }, watchOptions: { ignored: /node_modules/ @@ -34,15 +33,7 @@ module.exports = (env, argv) => { rules: [ { test: /\.js$/, - include: [resolveApp('examples'), resolveApp('dist')], - use: [ - { - loader: 'babel-loader', - options: { - configFile: resolveApp('config/babel.config.js') - } - } - ] + include: [resolveApp('examples'), resolveApp('dist')] }, { test: /\.css$/, @@ -56,7 +47,7 @@ module.exports = (env, argv) => { loader: 'postcss-loader', options: { postcssOptions: { - config: resolveApp('config/postcss.config.js') + config: resolveApp('config/postcss.config.cjs') } } } @@ -80,36 +71,47 @@ module.exports = (env, argv) => { chunks: ['home'] }), new HtmlWebpackPlugin({ - filename: 'usage-basic/index.html', - template: resolveApp('examples/usage-basic/index.html'), - chunks: ['usage-basic'], + filename: 'google-maps/index.html', + template: resolveApp('examples/google-maps/index.html'), + chunks: ['google-maps'], publicPath: '../' }), new HtmlWebpackPlugin({ - filename: 'usage-with-callback/index.html', - template: resolveApp('examples/usage-with-callback/index.html'), - chunks: ['usage-with-callback'], + filename: 'leaflet/index.html', + template: resolveApp('examples/leaflet/index.html'), + chunks: ['leaflet'], publicPath: '../' }), new HtmlWebpackPlugin({ - filename: 'usage-with-categories/index.html', - template: resolveApp('examples/usage-with-categories/index.html'), - chunks: ['usage-with-categories'], + filename: 'mapbox/index.html', + template: resolveApp('examples/mapbox/index.html'), + chunks: ['mapbox'], publicPath: '../' }), new HtmlWebpackPlugin({ - filename: 'usage-with-clusters/index.html', - template: resolveApp('examples/usage-with-clusters/index.html'), - chunks: ['usage-with-clusters'], - publicPath: '../' - }), - new HtmlWebpackPlugin({ - filename: 'usage-with-map-styles/index.html', - template: resolveApp('examples/usage-with-map-styles/index.html'), - chunks: ['usage-with-map-styles'], + filename: 'maplibre/index.html', + template: resolveApp('examples/maplibre/index.html'), + chunks: ['maplibre'], publicPath: '../' }) ], + resolve: { + alias: { + 'images/layers.png$': resolveApp('node_modules/leaflet/dist/images/layers.png'), + 'images/layers-2x.png$': resolveApp( + 'node_modules/leaflet/dist/images/layers-2x.png' + ), + 'images/marker-icon.png$': resolveApp( + 'node_modules/leaflet/dist/images/marker-icon.png' + ), + 'images/marker-icon-2x.png$': resolveApp( + 'node_modules/leaflet/dist/images/marker-icon-2x.png' + ), + 'images/marker-shadow.png$': resolveApp( + 'node_modules/leaflet/dist/images/marker-shadow.png' + ) + } + }, stats: { assets: true, colors: true, @@ -156,7 +158,8 @@ module.exports = (env, argv) => { historyApiFallback: true, port: 3000, compress: true, - hot: true + hot: true, + https: true } } diff --git a/functions/.vercel/project.json b/functions/.vercel/project.json deleted file mode 100644 index 7456dcc4..00000000 --- a/functions/.vercel/project.json +++ /dev/null @@ -1 +0,0 @@ -{"orgId":"team_MyxDHTeMB1OYXDPhsw2upoio","projectId":"prj_4Nj1Gao2YWY9b2g3Eax6dPUCF9S1"} \ No newline at end of file diff --git a/functions/api/index.js b/functions/api/index.js deleted file mode 100644 index a588ba89..00000000 --- a/functions/api/index.js +++ /dev/null @@ -1,45 +0,0 @@ -const storesDB = require('../database.json') -const Stores = require('../stores.js') -const express = require('express') -const cors = require('cors') - -const app = express() -app.use(cors()) -app.use(express.urlencoded({ extended: true })) -app.use(express.json()) - -// Set the default route -app.post('/', (request, response) => { - response.header('Content-type', 'application/json') - - // Get request parameters - const lat = request.body.lat || null - const lng = request.body.lng || null - const categories = request.body.categories || [] - const radius = request.body.radius || null - const limit = request.body.limit || null - let results = null - - // Filter stores if parameters are valid - if (lat && lng && !isNaN(lat) && !isNaN(lng)) { - const appStores = new Stores({ - database: storesDB, - lat, - lng, - categories, - radius, - limit - }) - results = appStores.filter() - } - - // Send status 200 with JSON results - response.json(results) -}) - -const port = process.env.PORT || 8000 -app.listen(port, () => { - console.log(`Example app listening on port ${port}`) -}) - -module.exports = app diff --git a/functions/database.json b/functions/database.json deleted file mode 100644 index a9082b7e..00000000 --- a/functions/database.json +++ /dev/null @@ -1,19651 +0,0 @@ -[{ - "address": " 31 GALERIE MARCHANDE CARREFOUR", - "category": "1", - "city": "PUGET-SUR-ARGENS", - "id": 14907, - "lat": 43.443868, - "lng": 6.7045033, - "phone": "04 94 45 25 25", - "title": "FORUM SANTE", - "zipcode": "83480" -}, { - "address": " CENTRE COMMERCIAL CARREFOUR RUE JEAN DE LA FONTAINE", - "category": "3", - "city": "MABLY", - "id": 14909, - "lat": 46.0660493, - "lng": 4.0603189, - "phone": "04 77 71 93 89", - "title": "GRANDE PHARMACIE DE MABLY", - "zipcode": "42300" -}, { - "address": " ROUTE DE LIMOGES LIEU DIT PERUZET", - "category": "3", - "city": "RIVIERES", - "id": 14957, - "lat": 45.752793, - "lng": 0.3861297, - "phone": "05 45 63 06 82", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "16110" -}, { - "address": "01 RUE CHRISTINO GARCIA", - "category": "2", - "city": "EAUBONNE", - "id": 15898, - "lat": 48.9914385, - "lng": 2.2765656, - "phone": "01 39 59 62 56", - "title": "PHARMACIE ABITBOL MADAR", - "zipcode": "95600" -}, { - "address": "01 RUE DE SAINT ETIENNE", - "category": "1", - "city": "MEAUX", - "id": 16828, - "lat": 48.9597709, - "lng": 2.8793068, - "phone": "01 64 34 04 72", - "title": "PHARMACIE DE LA CATHEDRALE", - "zipcode": "77100" -}, { - "address": "02 PLACE GUYNEMER", - "category": "2", - "city": "ANTIBES", - "id": 15451, - "lat": 43.5805503, - "lng": 7.1220751, - "phone": "04 93 34 16 12", - "title": "GRANDE PHARMACIE D ANTIBES", - "zipcode": "6600" -}, { - "address": "02 RUE JEAN JAURES", - "category": "2", - "city": "RIVE-DE-GIER", - "id": 15854, - "lat": 45.529338, - "lng": 4.6165862, - "phone": "04 77 75 01 12", - "title": "PHARMA DUBOIS", - "zipcode": "42800" -}, { - "address": "02/04 PLACE GAMBETTA", - "category": "3", - "city": "PARIS", - "id": 14753, - "lat": 48.864721, - "lng": 2.3991495, - "phone": "01 47 97 50 75", - "title": "PHARMACIE GAMBETTA", - "zipcode": "75020" -}, { - "address": "05 AVENUE DU 11 NOVEMBRE", - "category": "2", - "city": "LA VARENNE ST HILAIRE", - "id": 16646, - "lat": 48.8075973, - "lng": 2.5098527, - "phone": "01 42 83 93 95", - "title": "PHARMACIE DE CHAMPIGNOL", - "zipcode": "94210" -}, { - "address": "06 PLACE JEAN JAURES", - "category": "1", - "city": "FRIVILLE-ESCARBOTIN", - "id": 16393, - "lat": 50.0904811, - "lng": 1.5489981, - "phone": "03 22 30 20 38", - "title": "PHARMACIE CENTRALE DU VIMEU", - "zipcode": "80130" -}, { - "address": "06 PLACE JEAN JAURES", - "category": "2", - "city": "FRIVILLE-ESCARBOTIN", - "id": 16393, - "lat": 50.0904811, - "lng": 1.5489981, - "phone": "03 22 30 20 38", - "title": "PHARMACIE CENTRALE DU VIMEU", - "zipcode": "80130" -}, { - "address": "1 RUE NATIONALE", - "category": "1", - "city": "LES SABLES D OLONNE", - "id": 18927, - "lat": 46.495696, - "lng": -1.7810789, - "phone": "02 51 32 04 76", - "title": "PHARMACIE MERCIER", - "zipcode": "85100" -}, { - "address": "1 ARISTIDES DE SOUSA MENDES", - "category": "2", - "city": "BAYONNE", - "id": 19071, - "lat": 43.491548, - "lng": -1.4772498, - "phone": "05 59 25 59 28", - "title": "PHARMACIE ORBE", - "zipcode": "64100" -}, { - "address": "1 AV DU PDT VINCENT AURIOL CENTRE COMMERCIAL GEANT", - "category": "3", - "city": "ABBEVILLE", - "id": 16768, - "lat": 50.0996867, - "lng": 1.8599269, - "phone": "03 22 24 76 25", - "title": "PHARMACIE DE L EUROPE", - "zipcode": "80100" -}, { - "address": "1 AV VICTOR HUGO CCIAL DE RANGUIN", - "category": "1", - "city": "CANNES ", - "id": 14971, - "lat": 43.5681763, - "lng": 6.9661512, - "phone": "04 93 47 00 37", - "title": "PHARMACIE AUDUGE", - "zipcode": "6150" -}, { - "address": "1 AVENUE CHARLES PERIE", - "category": "3", - "city": "MAURIAC", - "id": 18940, - "lat": 45.2191731, - "lng": 2.3352914, - "phone": "04 71 68 02 01", - "title": "PHARMACIE MEYNIER DE SALINELLES", - "zipcode": "15200" -}, { - "address": "1 AVENUE DE LA PTE DE MONTMARTRE", - "category": "3", - "city": "PARIS", - "id": 14539, - "lat": 48.8978608, - "lng": 2.3374046, - "phone": "01 42 23 17 87", - "title": "PHARMACIE DU BOULEVARD NEY", - "zipcode": "75018" -}, { - "address": "1 AVENUE DU GENERAL DE GAULLE", - "category": "1", - "city": "ROUTOT", - "id": 15975, - "lat": 49.378531, - "lng": 0.7333796, - "phone": "02 32 57 31 06", - "title": "PHARMACIE AUZERAIS MUTA", - "zipcode": "27350" -}, { - "address": "1 AVENUE DU MONT FROUZI", - "category": "1", - "city": "VENERQUE", - "id": 16010, - "lat": 43.4343804, - "lng": 1.4440974, - "phone": "05 61 08 50 35", - "title": "PHARMACIE BAT ET PERIOLE FERRER", - "zipcode": "31810" -}, { - "address": "1 AVENUE GEORGES POMPIDOU CTRE CIAL DE LA GRANDE VALLEE", - "category": "2", - "city": "GONESSE", - "id": 15763, - "lat": 48.9900042, - "lng": 2.4302404, - "phone": "01 39 87 06 06", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "95500" -}, { - "address": "1 AVENUE JACQUES ANQUETIL", - "category": "3", - "city": "GOUSSAINVILLE", - "id": 17568, - "lat": 49.0205417, - "lng": 2.4565434, - "phone": "01 30 18 03 52", - "title": "PHARMACIE DES OLYMPIADES.", - "zipcode": "95190" -}, { - "address": "1 AVENUE LAVOISIER", - "category": "2", - "city": "DAINVILLE", - "id": 18321, - "lat": 50.2872758, - "lng": 2.7440819, - "phone": "03 21 71 49 28", - "title": "PHARMACIE EVERARTS", - "zipcode": "62000" -}, { - "address": "1 AVENUE TAVEL CC GRAND ANGLES", - "category": "3", - "city": "LES ANGLES", - "id": 15652, - "lat": 43.9608277, - "lng": 4.7473169, - "phone": "04 90 15 23 00", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "30133" -}, { - "address": "1 BIS RUE D ALIGRE ", - "category": "2", - "city": "MARANS", - "id": 15055, - "lat": 46.312612, - "lng": -0.9915516, - "phone": "05 46 01 10 52", - "title": "PHARMACIE DU MARCHE", - "zipcode": "17230" -}, { - "address": "1 BOULEVARD DE REUILLY", - "category": "3", - "city": "PARIS", - "id": 14532, - "lat": 48.8392791, - "lng": 2.3894433, - "phone": "01 43 43 54 24", - "title": "PHARMACIE DICHAMP", - "zipcode": "75012" -}, { - "address": "1 BOULEVARD JEAN GAY CTRE COMMERCIAL ESPACE CAP 200", - "category": "2", - "city": "TOURNEFEUILLE", - "id": 16263, - "lat": 43.5753575, - "lng": 1.3186172, - "phone": "05 62 48 81 30", - "title": "PHARMACIE CAP 2000", - "zipcode": "31170" -}, { - "address": "1 BOULEVARD MARECHAL FAYOLLE", - "category": "2", - "city": "LE PUY", - "id": 19116, - "lat": 45.0422762, - "lng": 3.8856063, - "phone": "04 71 09 01 45", - "title": "PHARMACIE PELISSIER", - "zipcode": "43000" -}, { - "address": "1 BOULEVARD PUYBLANC", - "category": "1", - "city": "BRIVE-LA-GAILLARDE", - "id": 16759, - "lat": 45.1569185, - "lng": 1.5332198, - "phone": "05 55 74 33 47", - "title": "PHARMACIE DE L EUROPE", - "zipcode": "19100" -}, { - "address": "1 BOULEVARD SADI CARNOT", - "category": "2", - "city": "LE CANNET", - "id": 18185, - "lat": 43.5752706, - "lng": 7.0221255, - "phone": "04 93 45 84 62", - "title": "PHARMACIE DU TERMINUS", - "zipcode": "6110" -}, { - "address": "1 CHEMIN DES REGNIERS", - "category": "1", - "city": "COULOGNE", - "id": 18098, - "lat": 50.935143, - "lng": 1.8540448, - "phone": "03 21 36 42 43", - "title": "PHARMACIE DU PONT", - "zipcode": "62100" -}, { - "address": "1 COURS SEXTIUS", - "category": "2", - "city": "AIX-EN-PROVENCE", - "id": 19548, - "lat": 43.5275969, - "lng": 5.4436298, - "phone": "04 42 26 03 61", - "title": "PHARMACIE SEXTIUS", - "zipcode": "13090" -}, { - "address": "1 PASSAGE DE L EUROPE", - "category": "2", - "city": "LA ROCHELLE", - "id": 17212, - "lat": 46.1664562, - "lng": -1.1790598, - "phone": "05 46 42 32 00", - "title": "PHARMACIE DE L'EUROPE", - "zipcode": "17000" -}, { - "address": "1 PLACE CLAIRE GIRARD", - "category": "2", - "city": "COURDIMANCHE", - "id": 19453, - "lat": 49.0353511, - "lng": 2.001291, - "phone": "01 34 46 30 00", - "title": "PHARMACIE SAINT MARTIN", - "zipcode": "95800" -}, { - "address": "1 PLACE DE L HOTEL DE VILLE", - "category": "3", - "city": "NEUILLY-SAINT-FRONT", - "id": 17261, - "lat": 49.17108, - "lng": 3.261361, - "phone": "03 23 71 00 15", - "title": "PHARMACIE DE NEUILLY ST FRONT", - "zipcode": "2470" -}, { - "address": "1 PLACE DE LA BUSSIE CENTRE COMMERCIAL LA BUSSIE", - "category": "2", - "city": "VAUREAL", - "id": 16236, - "lat": 49.0329598, - "lng": 2.019704, - "phone": "01 34 30 92 77", - "title": "PHARMACIE BUSSIE-FAMILLE", - "zipcode": "95490" -}, { - "address": "1 PLACE DE LA GARE", - "category": "3", - "city": "LILLE", - "id": 15422, - "lat": 50.6368465, - "lng": 3.0690742, - "phone": "03 20 06 20 64", - "title": "GRANDE PHARMACIE DE PARIS", - "zipcode": "59000" -}, { - "address": "1 PLACE DE LA REPUBLIQUE", - "category": "1", - "city": "DRAVEIL", - "id": 17785, - "lat": 48.6861182, - "lng": 2.4088186, - "phone": "01 69 03 72 03", - "title": "PHARMACIE DU CENTRE", - "zipcode": "91210" -}, { - "address": "1 PLACE DES MARCHES", - "category": "1", - "city": "AUMALE", - "id": 16741, - "lat": 49.7691367, - "lng": 1.7520642, - "phone": "02 35 93 40 46", - "title": "PHARMACIE DE L EGLISE", - "zipcode": "76390" -}, { - "address": "1 PLACE DU 14 JUILLET", - "category": "2", - "city": "AGEN", - "id": 17072, - "lat": 44.2050757, - "lng": 0.6256783, - "phone": "05 53 66 10 63", - "title": "PHARMACIE DE LA PORTE DU PIN", - "zipcode": "47000" -}, { - "address": "1 PLACE DU COMMERCE CTRE CIAL BEAUSSERIE", - "category": "2", - "city": "PANAZOL", - "id": 16813, - "lat": 45.8373255, - "lng": 1.3078195, - "phone": "05 55 30 64 42", - "title": "PHARMACIE DE LA BEAUSSERIE", - "zipcode": "87350" -}, { - "address": "1 PLACE DU MARCHE NEUF CENTRE COMMERCIAL CHEVRY II", - "category": "2", - "city": "GIF-SUR-YVETTE", - "id": 18057, - "lat": 48.6879938, - "lng": 2.1149219, - "phone": "01 60 12 35 15", - "title": "PHARMACIE DU PARC", - "zipcode": "91190" -}, { - "address": "1 PLACE DU MARCHE", - "category": "1", - "city": "JONZAC", - "id": 17978, - "lat": 45.4440326, - "lng": -0.4361875, - "phone": null, - "title": "PHARMACIE DU MARCHE", - "zipcode": "17500" -}, { - "address": "1 PLACE FRANCOIS MITTERRAND", - "category": "2", - "city": "SAINT-AVE", - "id": 15093, - "lat": 47.690462, - "lng": -2.736572, - "phone": "02 97 60 71 94", - "title": "PHARMACIE LEPORCQ-TRAISNEL", - "zipcode": "56890" -}, { - "address": "1 PLACE GAMBETTA", - "category": "2", - "city": "CANNES", - "id": 19611, - "lat": 43.5530556, - "lng": 7.0230454, - "phone": "04 93 39 11 37", - "title": "PHARMACIE TAVARD", - "zipcode": "6400" -}, { - "address": "1 PLACE JOSEPH LE BRIX", - "category": "1", - "city": "VANNES", - "id": 16346, - "lat": 47.6591603, - "lng": -2.7584494, - "phone": "02 97 47 11 05", - "title": "PHARMACIE CENTRALE", - "zipcode": "56000" -}, { - "address": "1 PLACE JULIE SAINT AVIT", - "category": "1", - "city": "VIC-FEZENSAC", - "id": 19128, - "lat": 43.7583883, - "lng": 0.3030846, - "phone": "05 62 06 30 19", - "title": "PHARMACIE PERES", - "zipcode": "32190" -}, { - "address": "1 PLACE LAMARTINE", - "category": "2", - "city": "BRENOUILLE", - "id": 19568, - "lat": 49.304058, - "lng": 2.534414, - "phone": "03 44 70 06 90", - "title": "PHARMACIE SOENE", - "zipcode": "60870" -}, { - "address": "1 PLACE LEON BLUM", - "category": "2", - "city": "OUTREAU", - "id": 16382, - "lat": 50.7047579, - "lng": 1.5941604, - "phone": "03 21 31 64 83", - "title": "PHARMACIE CENTRALE", - "zipcode": "62230" -}, { - "address": "1 PLACE LITTRE", - "category": "1", - "city": "CLERMONT-FERRAND", - "id": 18616, - "lat": 45.7681186, - "lng": 3.0789716, - "phone": "04 73 93 10 13", - "title": "PHARMACIE JEANNE D'ARC", - "zipcode": "63000" -}, { - "address": "1 PLACE MARC LANVIN", - "category": "2", - "city": "ARRAS", - "id": 17438, - "lat": 50.2937848, - "lng": 2.7471717, - "phone": "03 21 71 04 54", - "title": "PHARMACIE DES BLANCS MONTS", - "zipcode": "62000" -}, { - "address": "1 PLACE MARCEAU", - "category": "1", - "city": "LIMOGES", - "id": 18876, - "lat": 45.839433, - "lng": 1.2599277, - "phone": "05 55 77 48 10", - "title": "PHARMACIE MARCEAU", - "zipcode": "87000" -}, { - "address": "1 PLACE MARTYRS DE LA RESISTANCE", - "category": "2", - "city": "SOTTEVILLE-LES-ROUEN", - "id": 17936, - "lat": 49.4199716, - "lng": 1.0786103, - "phone": "02 35 72 58 45", - "title": "PHARMACIE DU JARDIN DES PLANTES", - "zipcode": "76300" -}, { - "address": "1 PLACE MONUMENT", - "category": "2", - "city": "RIOM-ES-MONTAGNES", - "id": 18633, - "lat": 45.2829251, - "lng": 2.6588848, - "phone": "04 71 78 01 86", - "title": "PHARMACIE JUILLARD", - "zipcode": "15400" -}, { - "address": "1 PLACE SAINTE EUGENIE", - "category": "2", - "city": "BIARRITZ", - "id": 19491, - "lat": 43.481986, - "lng": -1.564077, - "phone": "05 59 24 00 33", - "title": "PHARMACIE SAINTE EUGENIE", - "zipcode": "64200" -}, { - "address": "1 PLACE STALINGRAD", - "category": "2", - "city": "SAINT-QUENTIN", - "id": 19681, - "lat": 49.8365557, - "lng": 3.3060017, - "phone": "03 23 68 07 82", - "title": "PHARMACIE VALLEZ BOONNE", - "zipcode": "2100" -}, { - "address": "1 PLACE VICTOR HUGO", - "category": "2", - "city": "PARIS", - "id": 14418, - "lat": 48.8677072, - "lng": 2.2792421, - "phone": "01 45 00 71 96", - "title": "PHARMACIE BRAITMAN", - "zipcode": "75016" -}, { - "address": "1 QUAI JULES SANDEAU", - "category": "2", - "city": "LE POULIGUEN", - "id": 18127, - "lat": 47.2782085, - "lng": -2.4284354, - "phone": "02 40 42 33 71", - "title": "PHARMACIE DU PORT", - "zipcode": "44510" -}, { - "address": "1 R MONTPENSIER PLACE 7 CANTONS", - "category": "2", - "city": "PAU", - "id": 17392, - "lat": 43.2986275, - "lng": -0.3707664, - "phone": "05 59 27 71 91", - "title": "PHARMACIE DES 7 CANTONS", - "zipcode": "64000" -}, { - "address": "1 ROND POINT DE LA LIBERATION", - "category": "1", - "city": "VALREAS", - "id": 15657, - "lat": 44.387046, - "lng": 5.0068097, - "phone": "04 90 35 33 33", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "84600" -}, { - "address": "1 ROUTE D AUSSONNE LA GRANDE BARTHE", - "category": "3", - "city": "CORNEBARRIEU", - "id": 19146, - "lat": 43.6553641, - "lng": 1.3225085, - "phone": "05 61 85 21 28", - "title": "PHARMACIE PEYRE", - "zipcode": "31700" -}, { - "address": "1 ROUTE DE ST GERVAIS", - "category": "2", - "city": "MONTELIMAR", - "id": 15465, - "lat": 44.5554552, - "lng": 4.7589018, - "phone": "04 75 01 30 30", - "title": "GRANDE PHARMACIE DE L'EUROPE", - "zipcode": "26200" -}, { - "address": "1 RUE AU FIL", - "category": "1", - "city": "BREZOLLES", - "id": 16630, - "lat": 48.6897847, - "lng": 1.0736052, - "phone": "02 37 48 20 47", - "title": "PHARMACIE DE BREZOLLES", - "zipcode": "28270" -}, { - "address": "1 RUE AUBER", - "category": "3", - "city": "PARIS", - "id": 14633, - "lat": 48.8714782, - "lng": 2.3307189, - "phone": "01 42 65 88 29", - "title": "PHARMACIE OPERA", - "zipcode": "75009" -}, { - "address": "1 RUE CALMETTE", - "category": "1", - "city": "AUBIGNY-AU-BAC", - "id": 17142, - "lat": 50.2635578, - "lng": 3.1646295, - "phone": "03 27 80 90 17", - "title": "PHARMACIE DE LA SENSEE", - "zipcode": "59265" -}, { - "address": "1 RUE CHRISTOPHE THIVRIER", - "category": "3", - "city": "COMMENTRY", - "id": 18700, - "lat": 46.288394, - "lng": 2.7432552, - "phone": "04 70 64 31 13", - "title": "PHARMACIE LAFANECHERE-BOUQUET", - "zipcode": "3600" -}, { - "address": "1 RUE DE L ABATTOIR", - "category": "3", - "city": "FIRMINY", - "id": 16438, - "lat": 45.3935198, - "lng": 4.2916689, - "phone": "04 77 56 04 42", - "title": "PHARMACIE CHARRETIER", - "zipcode": "42700" -}, { - "address": "1 RUE DE L IMPERATRICE", - "category": "1", - "city": "BERCK", - "id": 16380, - "lat": 50.4047169, - "lng": 1.5631714, - "phone": "03 21 09 07 31", - "title": "PHARMACIE CENTRALE", - "zipcode": "62600" -}, { - "address": "1 RUE DE LA CHAPELLE SAINT YVES", - "category": "1", - "city": "LARMOR-PLAGE", - "id": 17287, - "lat": 47.7273783, - "lng": -3.3829586, - "phone": "02 97 65 51 12", - "title": "PHARMACIE DE QUELISOY", - "zipcode": "56260" -}, { - "address": "1 RUE DE LA FORET DE SENART ", - "category": "2", - "city": "SOISY-SUR-SEINE", - "id": 15152, - "lat": 48.652238, - "lng": 2.4627289, - "phone": "01 60 75 27 81", - "title": "PHARMACIE RABADEUX", - "zipcode": "91450" -}, { - "address": "1 RUE DE LA REPUBLIQUE", - "category": "1", - "city": "SAINT-YORRE", - "id": 18964, - "lat": 46.0660345, - "lng": 3.4619422, - "phone": "04 70 59 20 43", - "title": "PHARMACIE MONANY", - "zipcode": "3270" -}, { - "address": "1 RUE DE LA REPUBLIQUE", - "category": "2", - "city": "MONTHYON", - "id": 19420, - "lat": 49.0074085, - "lng": 2.8268009, - "phone": "01 64 36 10 10", - "title": "PHARMACIE SAINT GEORGES", - "zipcode": "77122" -}, { - "address": "1 RUE DE LA REPUBLIQUE", - "category": "3", - "city": "ARGENTEUIL", - "id": 18500, - "lat": 48.9499861, - "lng": 2.2581315, - "phone": "01 39 80 67 52", - "title": "PHARMACIE GUETTA", - "zipcode": "95100" -}, { - "address": "1 RUE DE LILLE 5 RESIDENCE MASUREL", - "category": "2", - "city": "LINSELLES", - "id": 19155, - "lat": 50.7365398, - "lng": 3.0784291, - "phone": "03 20 46 68 80", - "title": "PHARMACIE PHILIPPE VANHUYSE", - "zipcode": "59126" -}, { - "address": "1 RUE DE VERDUN", - "category": "3", - "city": "MONTPELLIER", - "id": 16847, - "lat": 43.6082549, - "lng": 3.8800989, - "phone": "04 67 58 25 01", - "title": "PHARMACIE DE LA COMEDIE", - "zipcode": "34000" -}, { - "address": "1 RUE DES FOURNEAUX", - "category": "2", - "city": "AUXERRE", - "id": 17461, - "lat": 47.8120069, - "lng": 3.5707602, - "phone": "03 86 52 26 98", - "title": "PHARMACIE DES CLAIRIONS", - "zipcode": "89000" -}, { - "address": "1 RUE DES MOULINADES", - "category": "1", - "city": "ARVERT", - "id": 19688, - "lat": 45.7431639, - "lng": -1.121134, - "phone": "05 46 36 45 13", - "title": "PHARMACIE VASSAL LERNO", - "zipcode": "17530" -}, { - "address": "1 RUE DES PORCHES", - "category": "3", - "city": "HYERES", - "id": 16410, - "lat": 43.1205554, - "lng": 6.1285984, - "phone": "04 94 65 00 16", - "title": "PHARMACIE CERCLIER-BEJAT", - "zipcode": "83400" -}, { - "address": "1 RUE DES VOYAGEURS GARE SNCF SAINT CHRISTOPHE", - "category": "2", - "city": "CERGY", - "id": 16777, - "lat": 49.0496469, - "lng": 2.0342711, - "phone": "01 30 38 96 26", - "title": "PHARMACIE DE L HORLOGE", - "zipcode": "95800" -}, { - "address": "1 RUE DORIA LIVRAISON QUE LE MATIN", - "category": "1", - "city": "MONTPELLIER", - "id": 17420, - "lat": 43.6099433, - "lng": 3.8628464, - "phone": "04 67 63 73 71", - "title": "PHARMACIE DES ARCEAUX", - "zipcode": "34000" -}, { - "address": "1 RUE DU DOCTEUR GRINGOIRE", - "category": "3", - "city": "DOL-DE-BRETAGNE", - "id": 19298, - "lat": 48.5493044, - "lng": -1.7432837, - "phone": "02 99 48 05 88", - "title": "PHARMACIE REHEL SELARL", - "zipcode": "35120" -}, { - "address": "1 RUE DU MARECHAL MARMONT", - "category": "2", - "city": "CASTELNAU-LE-LEZ", - "id": 17543, - "lat": 43.6409273, - "lng": 3.9239229, - "phone": "04 67 03 03 63", - "title": "PHARMACIE DES LAURIERS", - "zipcode": "34170" -}, { - "address": "1 RUE DU PRES DES ANGLES", - "category": "2", - "city": "PARAY-LE-MONIAL", - "id": 16545, - "lat": 46.456036, - "lng": 4.109126, - "phone": "03 85 81 06 08", - "title": "PHARMACIE CROSETTO", - "zipcode": "71600" -}, { - "address": "1 RUE DUBAN", - "category": "1", - "city": "PARIS", - "id": 14601, - "lat": 48.8564369, - "lng": 2.2777418, - "phone": "01 42 88 63 36", - "title": "PHARMACIE LB CHOPIN", - "zipcode": "75016" -}, { - "address": "1 RUE FERNAND BENOIT", - "category": "2", - "city": "ARLES", - "id": 19858, - "lat": 43.671227, - "lng": 4.6206999, - "phone": "04 90 93 45 30", - "title": "PHARMACIE FAUBOURG DU CIRQUE ROMAIN", - "zipcode": "13200" -}, { - "address": "1 RUE FONTAINE", - "category": "3", - "city": "PARIS", - "id": 14528, - "lat": 48.8807158, - "lng": 2.3347542, - "phone": "01 48 74 29 10", - "title": "PHARMACIE DES THEATRES", - "zipcode": "75009" -}, { - "address": "1 RUE FRANCOIS MAURIAC", - "category": "1", - "city": "LANESTER", - "id": 15720, - "lat": 47.7658164, - "lng": -3.3486894, - "phone": "02 97 76 98 76", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "56600" -}, { - "address": "1 RUE FREVENT", - "category": "2", - "city": "SAINT-POL-SUR-TERNOISE", - "id": 17666, - "lat": 50.3808927, - "lng": 2.3358515, - "phone": "03 21 03 09 98", - "title": "PHARMACIE DEVILLERS", - "zipcode": "62130" -}, { - "address": "1 RUE JEAN BAPTISTE CHASTAING", - "category": "3", - "city": "LIMOGES", - "id": 18689, - "lat": 45.842536, - "lng": 1.2527203, - "phone": "05 55 77 34 89", - "title": "PHARMACIE LABUSSIERE", - "zipcode": "87000" -}, { - "address": "1 RUE JEAN CHARCOT", - "category": "2", - "city": "BENODET", - "id": 19060, - "lat": 47.8768625, - "lng": -4.1126051, - "phone": "02 98 57 00 19", - "title": "PHARMACIE OCEANE", - "zipcode": "29950" -}, { - "address": "1 RUE JEAN JAURES", - "category": "2", - "city": "LE DONJON", - "id": 18053, - "lat": 46.3506403, - "lng": 3.7950617, - "phone": "04 70 99 50 10", - "title": "PHARMACIE DU PARC", - "zipcode": "3130" -}, { - "address": "1 RUE JOUFFROY D ABBANS", - "category": "1", - "city": "PARIS", - "id": 14477, - "lat": 48.8870792, - "lng": 2.3133988, - "phone": "01 47 63 48 99", - "title": "PHARMACIE DE LA GARE", - "zipcode": "75017" -}, { - "address": "1 RUE JULES GUESDE", - "category": "3", - "city": "SAINGHIN-EN-WEPPES", - "id": 16274, - "lat": 50.5596229, - "lng": 2.9030787, - "phone": "03 20 58 41 96", - "title": "PHARMACIE CARETTE - PARENT", - "zipcode": "59184" -}, { - "address": "1 RUE LEON BOURGEOIS", - "category": "2", - "city": "CHALONS-EN-CHAMPAGNE", - "id": 19040, - "lat": 48.9578551, - "lng": 4.3640166, - "phone": "03 26 65 17 38", - "title": "PHARMACIE NOTRE DAME", - "zipcode": "51000" -}, { - "address": "1 RUE MERCIERE", - "category": "1", - "city": "CLUNY", - "id": 17425, - "lat": 46.4337279, - "lng": 4.6579, - "phone": "03 85 59 07 83", - "title": "PHARMACIE DES ARTS", - "zipcode": "71250" -}, { - "address": "1 RUE NATIONALE", - "category": "1", - "city": "TALMONT-SAINT-HILAIRE", - "id": 17840, - "lat": 46.465041, - "lng": -1.6190568, - "phone": "02 51 90 62 70", - "title": "PHARMACIE DU CHATEAU", - "zipcode": "85440" -}, { - "address": "1 RUE NELSON MANDELA ZAC DE SAINT ELOI", - "category": "2", - "city": "POITIERS", - "id": 19411, - "lat": 46.5889195, - "lng": 0.3708849, - "phone": "05 49 01 97 94", - "title": "PHARMACIE SAINT ELOI", - "zipcode": "86000" -}, { - "address": "1 RUE RENE ORDRONNEAU C.C. LECLERC", - "category": "1", - "city": "REZE", - "id": 15798, - "lat": 47.1933934, - "lng": -1.5738779, - "phone": "02 51 70 70 70", - "title": "PARAPHARMACIE LECLERC ATOUT SUD", - "zipcode": "44400" -}, { - "address": "1 RUE WINSTON CHURCHILL", - "category": "2", - "city": "LAPALISSE", - "id": 15864, - "lat": 46.2484593, - "lng": 3.6356648, - "phone": "04 70 99 06 34", - "title": "PHARMACIE BONNIN", - "zipcode": "3120" -}, { - "address": "1 Rue du Docteur Jean Debegue", - "category": "2", - "city": "FRONTENAY-ROHAN-ROHAN", - "id": 15139, - "lat": 46.2491978, - "lng": -0.540964, - "phone": "05 49 04 50 07", - "title": "PHARMACIE NOGARET", - "zipcode": "79270" -}, { - "address": "1 TER DU CINTRE", - "category": "2", - "city": "LE RHEU", - "id": 17775, - "lat": 48.099541, - "lng": -1.79665, - "phone": "02 99 60 70 48", - "title": "PHARMACIE DU CENTRE", - "zipcode": "35650" -}, { - "address": "10 12 RUE BELLEVUE", - "category": "1", - "city": "SAINT-QUENTIN", - "id": 17291, - "lat": 49.8516691, - "lng": 3.2985921, - "phone": "03 23 62 38 58", - "title": "PHARMACIE DE REMICOURT", - "zipcode": "2100" -}, { - "address": "10 A 12 AVENUE DU MARCHE", - "category": "3", - "city": "LA BAULE-ESCOUBLAC", - "id": 19073, - "lat": 47.2851559, - "lng": -2.3945695, - "phone": "02 40 60 21 86", - "title": "PHARMACIE ORIO", - "zipcode": "44500" -}, { - "address": "10 ALLEE DU BEARN", - "category": "2", - "city": "COLOMIERS", - "id": 18207, - "lat": 43.6122848, - "lng": 1.3304311, - "phone": "05 61 78 04 60", - "title": "PHARMACIE DU VAL D ARAN", - "zipcode": "31770" -}, { - "address": "10 AV BONAPARTE", - "category": "2", - "city": "PIERRELATTE", - "id": 17830, - "lat": 44.3756249, - "lng": 4.6965688, - "phone": "04 75 04 00 25", - "title": "PHARMACIE DU CHAMPS DE MARS", - "zipcode": "26700" -}, { - "address": "10 AVENUE AUGUSTE BLANQUI", - "category": "2", - "city": "VILLEPINTE", - "id": 19563, - "lat": 48.9464312, - "lng": 2.5615124, - "phone": "01 48 61 51 34", - "title": "PHARMACIE SNC DU VERT GALANT", - "zipcode": "93420" -}, { - "address": "10 AVENUE DE ROYAT CTRE COM LA ROTONDE BOISVALLON", - "category": "2", - "city": "CEYRAT", - "id": 16486, - "lat": 45.7471222, - "lng": 3.0641528, - "phone": "04 73 61 43 76", - "title": "PHARMACIE CLUZEL", - "zipcode": "63122" -}, { - "address": "10 AVENUE DES LISSIERS", - "category": "2", - "city": "AUBUSSON", - "id": 18708, - "lat": 45.9543712, - "lng": 2.1700215, - "phone": "05 55 66 84 02", - "title": "PHARMACIE LAGRANGE", - "zipcode": "23200" -}, { - "address": "10 AVENUE FELIX RAYBAUD", - "category": "2", - "city": "GRASSE", - "id": 17322, - "lat": 43.6410399, - "lng": 6.9114141, - "phone": "04 93 70 26 42", - "title": "PHARMACIE DE ST JACQUES", - "zipcode": "6130" -}, { - "address": "10 AVENUE JEAN JAURES", - "category": "2", - "city": "MALEMORT-SUR-CORREZE", - "id": 15502, - "lat": 45.1697536, - "lng": 1.5630981, - "phone": "05 55 92 28 27", - "title": "GRANDE PHARMACIE MALEMORTOISE", - "zipcode": "19360" -}, { - "address": "10 AVENUE JEAN MOULIN", - "category": "2", - "city": "BAUD", - "id": 17500, - "lat": 47.8742679, - "lng": -3.016931, - "phone": "02 97 51 07 40", - "title": "PHARMACIE DES FONTAINES", - "zipcode": "56150" -}, { - "address": "10 BOULEVARD DE SEBASTOPOL", - "category": "1", - "city": "PARIS", - "id": 14741, - "lat": 48.8591498, - "lng": 2.3489124, - "phone": "01 42 72 03 23", - "title": "PHARMACIE DES HALLES", - "zipcode": "75004" -}, { - "address": "10 COURS DES CHAPITEAUX", - "category": "1", - "city": "CERGY", - "id": 17708, - "lat": 49.0463809, - "lng": 2.0337686, - "phone": "01 30 73 98 36", - "title": "PHARMACIE DU BELVEDERE", - "zipcode": "95800" -}, { - "address": "10 PLACE DE L ABBE DE L EPEE", - "category": "2", - "city": "RONCHIN", - "id": 18076, - "lat": 50.609072, - "lng": 3.0861161, - "phone": "03 20 88 18 64", - "title": "PHARMACIE DU PETIT RONCHIN", - "zipcode": "59790" -}, { - "address": "10 PLACE DE LA REPUBLIQUE", - "category": "3", - "city": "MIREBEAU", - "id": 18885, - "lat": 46.7861633, - "lng": 0.1809466, - "phone": "05 49 50 40 11", - "title": "PHARMACIE MARIT", - "zipcode": "86110" -}, { - "address": "10 PLACE DU COLOMBIER", - "category": "1", - "city": "RENNES", - "id": 18283, - "lat": 48.1044862, - "lng": -1.6803704, - "phone": "02 99 31 48 37", - "title": "PHARMACIE DUVAL GUIHARD", - "zipcode": "35000" -}, { - "address": "10 PLACE MONTGOLFIER", - "category": "2", - "city": "SAINT-MAURICE", - "id": 18975, - "lat": 48.8146378, - "lng": 2.4593344, - "phone": "01 48 86 51 60", - "title": "PHARMACIE MONTGOLFIER", - "zipcode": "94410" -}, { - "address": "10 PLACE RAOUL DAUTRY", - "category": "1", - "city": "PARIS", - "id": 14696, - "lat": 48.84175, - "lng": 2.3207282, - "phone": "01 43 21 42 42", - "title": "PHARMACIE DE LA GARE MONTPARNASSE", - "zipcode": "75015" -}, { - "address": "10 ROND POINT DE LA CORBINERIE", - "category": "2", - "city": "REZE", - "id": 19133, - "lat": 47.1611573, - "lng": -1.5458306, - "phone": "02 40 75 48 99", - "title": "PHARMACIE PERINEAU FABRE", - "zipcode": "44400" -}, { - "address": "10 RUE DE BRETAGNE", - "category": "2", - "city": "PARIS", - "id": 14459, - "lat": 48.8624931, - "lng": 2.3636125, - "phone": "01 42 78 43 31", - "title": "PHARMACiE DE BRETAGNE", - "zipcode": "75003" -}, { - "address": "10 RUE DE LA REPUBLIQUE", - "category": "1", - "city": "AUBAGNE", - "id": 16774, - "lat": 43.2923454, - "lng": 5.5679013, - "phone": "04 42 03 10 66", - "title": "PHARMACIE DE L HORLOGE", - "zipcode": "13400" -}, { - "address": "10 RUE DE LA REPUBLIQUE", - "category": "2", - "city": "BARENTIN", - "id": 17427, - "lat": 49.5459322, - "lng": 0.9522434, - "phone": "02 35 91 78 11", - "title": "PHARMACIE DES ARTS", - "zipcode": "76360" -}, { - "address": "10 RUE DE PARIS", - "category": "1", - "city": "VICHY", - "id": 16183, - "lat": 46.1260977, - "lng": 3.4243134, - "phone": "04 70 98 23 03", - "title": "PHARMACIE BOURRACHOT", - "zipcode": "3200" -}, { - "address": "10 RUE DES REMISES", - "category": "3", - "city": "SAINT-MAUR-DES-FOSSES", - "id": 19307, - "lat": 48.8067659, - "lng": 2.4734649, - "phone": "01 42 83 80 41", - "title": "PHARMACIE REVEILLEAU", - "zipcode": "94100" -}, { - "address": "10 RUE DU PLATEAU", - "category": "1", - "city": "BRUNOY", - "id": 16142, - "lat": 48.7073515, - "lng": 2.5170095, - "phone": "01 60 46 06 72", - "title": "PHARMACIE BONNET", - "zipcode": "91800" -}, { - "address": "10 RUE GEORGES CLEMENCEAU", - "category": "2", - "city": "VERSAILLES", - "id": 19118, - "lat": 48.8042448, - "lng": 2.1324023, - "phone": "01 39 50 12 89", - "title": "PHARMACIE PELLEGRIN", - "zipcode": "78000" -}, { - "address": "10 RUE GEORGES CLEMENCEAU", - "category": "3", - "city": "LA LONDE-LES-MAURES", - "id": 16476, - "lat": 43.1379468, - "lng": 6.2353754, - "phone": "04 94 66 81 43", - "title": "PHARMACIE CLEMENCEAU", - "zipcode": "83250" -}, { - "address": "10 RUE GRASLAS", - "category": "2", - "city": "CHAUCHE", - "id": 16686, - "lat": 46.8293225, - "lng": -1.2729448, - "phone": "02 51 41 84 33", - "title": "PHARMACIE DE GRASLA", - "zipcode": "85140" -}, { - "address": "10 RUE GUICHARD", - "category": "2", - "city": "CACHAN", - "id": 17418, - "lat": 48.7944209, - "lng": 2.3354726, - "phone": "01 46 65 64 57", - "title": "PHARMACIE DES ARCADES", - "zipcode": "94230" -}, { - "address": "10 RUE JEAN JAURES", - "category": "1", - "city": "PARTHENAY", - "id": 16943, - "lat": 46.6482545, - "lng": -0.2479529, - "phone": "05 49 64 00 29", - "title": "PHARMACIE DE LA GATINE", - "zipcode": "79200" -}, { - "address": "10 RUE JULES BLONDEAU", - "category": "2", - "city": "AY", - "id": 19430, - "lat": 49.0533662, - "lng": 4.0056921, - "phone": "03 26 55 43 01", - "title": "PHARMACIE SAINT JACQUES", - "zipcode": "51160" -}, { - "address": "10 RUE MAURICE SEGONDS", - "category": "1", - "city": "BEAUVAIS", - "id": 18832, - "lat": 49.421371, - "lng": 2.074082, - "phone": "03 44 02 39 33", - "title": "PHARMACIE LOMBARD UNIVERS PHARMACIE", - "zipcode": "60000" -}, { - "address": "10 RUE SAINT JACQUES", - "category": "1", - "city": "VERNON", - "id": 19431, - "lat": 49.0921415, - "lng": 1.4856194, - "phone": "02 32 21 00 70", - "title": "PHARMACIE SAINT JACQUES", - "zipcode": "27200" -}, { - "address": "10/12 RUE DE PARIS", - "category": "1", - "city": "VALENCIENNES", - "id": 16888, - "lat": 50.3589009, - "lng": 3.5230699, - "phone": "03 27 46 20 75", - "title": "PHARMACIE DE LA FONTAINE", - "zipcode": "59300" -}, { - "address": "10/12 RUE DU 08 MAI 45", - "category": "2", - "city": "PARIS", - "id": 14778, - "lat": 48.8764906, - "lng": 2.3567965, - "phone": "01 40 36 52 75", - "title": "PHARMACIE CENTRALE DE L EST", - "zipcode": "75010" -}, { - "address": "100 AVENUE JACQUES VOGT", - "category": "2", - "city": "PERSAN", - "id": 15034, - "lat": 49.1533649, - "lng": 2.2717473, - "phone": "01 30 34 61 20", - "title": "PHARMACIE DES ARCADES", - "zipcode": "95340" -}, { - "address": "100 CENTRE COMMERCIAL CC EURALILLE", - "category": "2", - "city": "LILLE", - "id": 15266, - "lat": 50.6374385, - "lng": 3.0745684, - "phone": "03 28 52 98 19", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "59000" -}, { - "address": "100 RUE DES PUITS DE LA VILLE CENTRE COMMERCIAL NIORT EST", - "category": "2", - "city": "CHAURAY", - "id": 19930, - "lat": 46.3412111, - "lng": -0.3827516, - "phone": "05 49 08 22 56", - "title": "THERIAQUE", - "zipcode": "79180" -}, { - "address": "100 RUE DU ROUET", - "category": "2", - "city": "MARSEILLE", - "id": 14815, - "lat": 43.2808242, - "lng": 5.3894105, - "phone": "04 91 78 50 12", - "title": "PHARMACIE DU GRAND PRADO", - "zipcode": "13008" -}, { - "address": "100 RUE PUITS DE LA VILLE", - "category": "1", - "city": "CHAURAY", - "id": 15350, - "lat": 46.3397909, - "lng": -0.383331, - "phone": "05 49 17 34 00", - "title": "CASINO FRANCE ", - "zipcode": "79180" -}, { - "address": "1001 BLD DU KENT CITE DE L EUROPE", - "category": "2", - "city": "COQUELLES", - "id": 15246, - "lat": 50.93374, - "lng": 1.809074, - "phone": "03 91 91 02 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "62231" -}, { - "address": "101 AVENUE DE LA REPUBLIQUE", - "category": "2", - "city": "SAINT-LOUBES", - "id": 17421, - "lat": 44.9153147, - "lng": -0.4220888, - "phone": "05 56 20 41 34", - "title": "PHARMACIE DES ARCEAUX", - "zipcode": "33450" -}, { - "address": "101 RUE ARMAND SILVESTRE", - "category": "3", - "city": "COURBEVOIE", - "id": 15452, - "lat": 48.9025776, - "lng": 2.2685136, - "phone": "01 43 33 11 41", - "title": "GRANDE PHARMACIE DE BECON", - "zipcode": "92400" -}, { - "address": "102 AVENUE ROBERT FAGES LA PYRAMIDE EDEN", - "category": "2", - "city": "LA GRANDE-MOTTE", - "id": 18122, - "lat": 43.5604287, - "lng": 4.0805405, - "phone": "04 67 12 06 79", - "title": "PHARMACIE DU PORT", - "zipcode": "34280" -}, { - "address": "102 CHEMIN DE LARRAMET", - "category": "1", - "city": "TOURNEFEUILLE", - "id": 17111, - "lat": 43.5594628, - "lng": 1.3457628, - "phone": "05 61 07 19 02", - "title": "PHARMACIE DE LA RAMEE", - "zipcode": "31170" -}, { - "address": "102 GRANDE RUE CHARLES DE GAULLE", - "category": "3", - "city": "NOGENT-SUR-MARNE", - "id": 16398, - "lat": 48.836901, - "lng": 2.484497, - "phone": "01 48 73 02 94", - "title": "PHARMACIE CENTRALE NOGENT", - "zipcode": "94130" -}, { - "address": "102 ROUTE DE CRECY", - "category": "2", - "city": "VERNOUILLET", - "id": 17472, - "lat": 48.727442, - "lng": 1.3325255, - "phone": "02 37 46 29 62", - "title": "PHARMACIE DES CORVEES", - "zipcode": "28500" -}, { - "address": "102 RUE NATIONALE", - "category": "3", - "city": "GIMONT", - "id": 18907, - "lat": 43.6259287, - "lng": 0.8763321, - "phone": "05 62 67 70 74", - "title": "PHARMACIE MATHE", - "zipcode": "32200" -}, { - "address": "103 AVENUE DE L EUROPE CENTRE COMMERCIAL AUCHAN", - "category": "2", - "city": "NOGENT-SUR-OISE", - "id": 16767, - "lat": 49.27122, - "lng": 2.483253, - "phone": "03 44 55 47 00", - "title": "PHARMACIE DE L EUROPE", - "zipcode": "60180" -}, { - "address": "103 AVENUE DE L EUROPE TOUR EUROPA CCIAL BELLE EPINE", - "category": "2", - "city": "THIAIS", - "id": 15595, - "lat": 48.7555674, - "lng": 2.3700854, - "phone": "01 49 78 75 75", - "title": "PARAPHARMACIE A PETIT PRIX", - "zipcode": "94320" -}, { - "address": "103 COURS BOURNISSAC", - "category": "2", - "city": "CAVAILLON", - "id": 16979, - "lat": 43.8350217, - "lng": 5.0378729, - "phone": "04 90 78 00 46", - "title": "PHARMACIE DE LA MAIRIE", - "zipcode": "84300" -}, { - "address": "103 ROUTE DE MONS", - "category": "1", - "city": "MAUBEUGE", - "id": 17897, - "lat": 50.2900662, - "lng": 3.9745866, - "phone": "03 27 64 77 45", - "title": "PHARMACIE DU FAUBOURG DE MONS", - "zipcode": "59600" -}, { - "address": "103 RUE D ESTIENNE D ORVES", - "category": "3", - "city": "VERRIERES-LE-BUISSON", - "id": 17728, - "lat": 48.7410818, - "lng": 2.2599555, - "phone": "01 69 53 01 10", - "title": "PHARMACIE DU BUISSON", - "zipcode": "91370" -}, { - "address": "103BIS AVENUE CARNOT", - "category": "2", - "city": "CONFLANS-SAINTE-HONORINE", - "id": 16277, - "lat": 49.0012661, - "lng": 2.0932673, - "phone": "01 39 19 62 01", - "title": "PHARMACiE CARNOT", - "zipcode": "78700" -}, { - "address": "104 RUE D HURLUPIN", - "category": "2", - "city": "COMINES", - "id": 19531, - "lat": 50.762738, - "lng": 3.010834, - "phone": "03 20 39 05 03", - "title": "PHARMACIE SEGARD", - "zipcode": "59560" -}, { - "address": "104 RUE DE L ALAM", - "category": "2", - "city": "RENNES", - "id": 18937, - "lat": 48.0976719, - "lng": -1.6755761, - "phone": "02 99 50 53 41", - "title": "PHARMACIE METRO JACQUES CARTIER", - "zipcode": "35000" -}, { - "address": "105 AVENUE DU MARECHAL LECLERC", - "category": "3", - "city": "LUNEL", - "id": 15924, - "lat": 43.6813203, - "lng": 4.1343044, - "phone": "04 67 83 24 45", - "title": "PHARMACIE AMBRUSSUM", - "zipcode": "34400" -}, { - "address": "1051 GRANDE RUE", - "category": "2", - "city": "MIRIBEL", - "id": 16328, - "lat": 45.8244347, - "lng": 4.9534323, - "phone": "04 78 55 44 79", - "title": "PHARMACIE CENTRALE", - "zipcode": "1700" -}, { - "address": "106 AV ALBERT 1ER PATIOT DE RUEIL CCIAL ALBERT 1", - "category": "2", - "city": "RUEIL-MALMAISON", - "id": 18419, - "lat": 48.8865366, - "lng": 2.170863, - "phone": "01 47 49 27 36", - "title": "PHARMACIE GARE RER", - "zipcode": "92500" -}, { - "address": "106 AVENUE CHARLES DE GAULLE", - "category": "1", - "city": "NEUILLY-SUR-SEINE", - "id": 16068, - "lat": 48.8831536, - "lng": 2.2686063, - "phone": "01 46 24 14 96", - "title": "PHARMACIE BERNARD DAHAN", - "zipcode": "92200" -}, { - "address": "106 AVENUE DU GENERAL DE GAULLE", - "category": "1", - "city": "LE PERREUX-SUR-MARNE", - "id": 16390, - "lat": 48.8418167, - "lng": 2.5054228, - "phone": "01 43 24 20 93", - "title": "PHARMACIE CENTRALE DU MARCHE", - "zipcode": "94170" -}, { - "address": "106 BOULEVARD AUGUSTE BLANQUI", - "category": "2", - "city": "PARIS", - "id": 14732, - "lat": 48.8314739, - "lng": 2.3435194, - "phone": "01 43 31 62 10", - "title": "PHARMACIE D2B", - "zipcode": "75013" -}, { - "address": "106 BOULEVARD DE COURCELLES", - "category": "2", - "city": "PARIS", - "id": 14446, - "lat": 48.8791481, - "lng": 2.3020348, - "phone": "01 47 63 45 48", - "title": "PHARMACIE COURCELLES", - "zipcode": "75017" -}, { - "address": "106 RUE CAULAINCOURT", - "category": "2", - "city": "PARIS", - "id": 14615, - "lat": 48.8894971, - "lng": 2.3399209, - "phone": "01 46 06 15 56", - "title": "PHARMACIE MATHIEU LE MAREC", - "zipcode": "75018" -}, { - "address": "106 RUE PETIT", - "category": "2", - "city": "PARIS", - "id": 14412, - "lat": 48.886043, - "lng": 2.3918319, - "phone": "01 42 08 69 08", - "title": "PHARMACIE BOKOBZA", - "zipcode": "75019" -}, { - "address": "106 RUE VERON", - "category": "2", - "city": "ALFORTVILLE", - "id": 19374, - "lat": 48.8100866, - "lng": 2.4142047, - "phone": "01 43 75 28 73", - "title": "PHARMACIE ROUSTAN", - "zipcode": "94140" -}, { - "address": "107 AVENUE PARMENTIER", - "category": "3", - "city": "PARIS", - "id": 14377, - "lat": 48.8674309, - "lng": 2.3726925, - "phone": "09 54 95 53 15", - "title": "PARASIA", - "zipcode": "75011" -}, { - "address": "108 AVENUE DU MARECHAL LECLERC", - "category": "3", - "city": "BREVIANDES", - "id": 16207, - "lat": 48.2550865, - "lng": 4.0959159, - "phone": "03 25 82 17 16", - "title": "PHARMACIE BREVIANDES", - "zipcode": "10800" -}, { - "address": "108 BD DE CRETEIL", - "category": "1", - "city": "SAINT-MAUR-DES-FOSSES", - "id": 18190, - "lat": 48.8050591, - "lng": 2.4692703, - "phone": "01 48 83 02 13", - "title": "PHARMACIE DU THEATRE", - "zipcode": "94100" -}, { - "address": "108 RUE DES FONTAINES", - "category": "1", - "city": "TOULOUSE", - "id": 18366, - "lat": 43.6007307, - "lng": 1.4204303, - "phone": "05 61 42 79 89", - "title": "PHARMACIE FONTAINE", - "zipcode": "31000" -}, { - "address": "108BIS AVENUE DES ALPES", - "category": "2", - "city": "CAGNES-SUR-MER", - "id": 15221, - "lat": 43.6633754, - "lng": 7.1310701, - "phone": "04 93 20 19 99", - "title": "BAZERIES PHARMACIE SAINT JEAN", - "zipcode": "6800" -}, { - "address": "109 ROUTE DE LYON", - "category": "2", - "city": "MOULINS", - "id": 17455, - "lat": 46.5482849, - "lng": 3.3393085, - "phone": "04 70 46 30 68", - "title": "PHARMACIE DES CHAMPINS", - "zipcode": "3000" -}, { - "address": "109 RUE ARISTIDE BRIAND", - "category": "1", - "city": "VILLERS-SAINT-PAUL", - "id": 16092, - "lat": 49.2915777, - "lng": 2.4967833, - "phone": "03 44 71 08 32", - "title": "PHARMACIE BIGOURD", - "zipcode": "60870" -}, { - "address": "11 A RUE JEAN BAPTISTE LEBAS", - "category": "1", - "city": "PHALEMPIN", - "id": 17696, - "lat": 50.5184003, - "lng": 3.0185034, - "phone": "03 20 90 30 42", - "title": "PHARMACIE DRUON", - "zipcode": "59133" -}, { - "address": "11 AVENUE BONNEVILLE", - "category": "1", - "city": "AIGUILHE", - "id": 19514, - "lat": 45.0508126, - "lng": 3.8847989, - "phone": "04 71 09 34 49", - "title": "PHARMACIE SAVAJOLS", - "zipcode": "43000" -}, { - "address": "11 AVENUE JEAN JAURES CENTRE COMMERCIAL LECLERC", - "category": "2", - "city": "BOIS-D'ARCY", - "id": 15797, - "lat": 48.7988796, - "lng": 2.0371723, - "phone": "01 30 14 41 69", - "title": "PARAPHARMACIE LECLERC ARCYCOM SAS", - "zipcode": "78390" -}, { - "address": "11 AVENUE MARECHAL JUIN", - "category": "2", - "city": "CARRIERES-SUR-SEINE", - "id": 17452, - "lat": 48.9118736, - "lng": 2.179198, - "phone": "01 39 14 73 48", - "title": "PHARMACIE DES CATELAINES", - "zipcode": "78420" -}, { - "address": "11 AVENUE ST ANTOINE CC GD LITTORAL", - "category": "1", - "city": "MARSEILLE", - "id": 14333, - "lat": 43.3638538, - "lng": 5.3506607, - "phone": "04 91 03 92 19", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "13015" -}, { - "address": "11 BIS RUE DE LA POSTE", - "category": "2", - "city": "TILLIERES", - "id": 18465, - "lat": 47.1435068, - "lng": -1.16386, - "phone": "02 41 70 44 33", - "title": "PHARMACIE GODARD", - "zipcode": "49230" -}, { - "address": "11 BOULEVARD CHARLES DE GAULLE", - "category": "1", - "city": "SAINT-GAUDENS", - "id": 17602, - "lat": 43.1091487, - "lng": 0.7217381, - "phone": "05 61 89 75 01", - "title": "PHARMACIE DES PYRENEES", - "zipcode": "31800" -}, { - "address": "11 BOULEVARD GAMBETTA", - "category": "3", - "city": "UZES", - "id": 19111, - "lat": 44.0131512, - "lng": 4.4187979, - "phone": "04 66 22 10 74", - "title": "PHARMACIE PAYAN SEDILLE", - "zipcode": "30700" -}, { - "address": "11 BOULEVARD MARECHAL FOCH", - "category": "2", - "city": "DRAGUIGNAN", - "id": 19618, - "lat": 43.538719, - "lng": 6.4623111, - "phone": "04 94 50 42 70", - "title": "PHARMACIE TERRAS", - "zipcode": "83300" -}, { - "address": "11 BOULEVARD PESCHAIRE ALIZON", - "category": "2", - "city": "VALLON-PONT-D'ARC", - "id": 18221, - "lat": 44.4069305, - "lng": 4.3949376, - "phone": "04 75 88 03 68", - "title": "PHARMACIE DU VERGER", - "zipcode": "7150" -}, { - "address": "11 GRAND PLACE", - "category": "1", - "city": "HERMIES", - "id": 16509, - "lat": 50.110917, - "lng": 3.0372586, - "phone": "03 21 07 41 00", - "title": "PHARMACIE CORBIER", - "zipcode": "62147" -}, { - "address": "11 MAIL OUEST", - "category": "1", - "city": "PITHIVIERS", - "id": 18019, - "lat": 48.1740006, - "lng": 2.253672, - "phone": "02 38 34 53 60", - "title": "PHARMACIE DU MARTROI", - "zipcode": "45300" -}, { - "address": "11 PLACE DE LA REPUBLIQUE", - "category": "1", - "city": "SAINT-JUST-SAINT-RAMBERT", - "id": 19471, - "lat": 45.4999535, - "lng": 4.2399819, - "phone": "04 77 52 34 05", - "title": "PHARMACIE SAINT RAMBERT", - "zipcode": "42170" -}, { - "address": "11 PLACE JEAN JAURES", - "category": "1", - "city": "LENS", - "id": 16153, - "lat": 50.4288624, - "lng": 2.8328045, - "phone": "03 21 67 73 45", - "title": "PHARMACIE BOTTAZINI", - "zipcode": "62300" -}, { - "address": "11 RUE DE MOGADOR", - "category": "2", - "city": "PARIS", - "id": 14634, - "lat": 48.8739843, - "lng": 2.3310205, - "phone": "01 48 74 22 01", - "title": "PHARMACIE OPERA MOGADOR", - "zipcode": "75009" -}, { - "address": "11 RUE DES QUINZE FUSILLES", - "category": "2", - "city": "MORTAGNE-AU-PERCHE", - "id": 17445, - "lat": 48.5210796, - "lng": 0.5455715, - "phone": "02 33 25 47 78", - "title": "PHARMACIE DES CADRANS", - "zipcode": "61400" -}, { - "address": "11 RUE EUGENE FLOQUET", - "category": "3", - "city": "COMPIEGNE", - "id": 18434, - "lat": 49.4184843, - "lng": 2.8257147, - "phone": "03 44 40 11 56", - "title": "PHARMACIE GENGEMBRE", - "zipcode": "60200" -}, { - "address": "11 RUE EUGENE FLOQUET", - "category": "3", - "city": "COMPIEGNE", - "id": 18434, - "lat": 49.4184843, - "lng": 2.8257147, - "phone": "03 44 40 11 56", - "title": "PHARMACIE GENGEMBRE", - "zipcode": "60200" -}, { - "address": "11 RUE GRENETTE", - "category": "2", - "city": "LYON", - "id": 14578, - "lat": 45.7634893, - "lng": 4.8338477, - "phone": "04 78 37 74 92", - "title": "PHARMACIE FLORIT", - "zipcode": "69002" -}, { - "address": "11 RUE LEPIC", - "category": "1", - "city": "PARIS", - "id": 14819, - "lat": 48.8845615, - "lng": 2.3332878, - "phone": "01 46 06 01 50", - "title": "PHARMACIE LEPIC-BLANCHE", - "zipcode": "75018" -}, { - "address": "11 RUE PASTEUR", - "category": "2", - "city": "MARCHIENNES", - "id": 19634, - "lat": 50.4073276, - "lng": 3.2818478, - "phone": "03 27 90 40 17", - "title": "PHARMACIE THORIUM", - "zipcode": "59870" -}, { - "address": "11 RUE VICTOR HUGO", - "category": "3", - "city": "ESCAUDAIN", - "id": 17524, - "lat": 50.3335526, - "lng": 3.3452801, - "phone": "03 27 31 94 91", - "title": "PHARMACIE DES HAUTS DE FRANCE", - "zipcode": "59124" -}, { - "address": "110 AVENUE DE LYON CENTRE COMMERCIAL INTERMARCHE", - "category": "2", - "city": "NEMOURS", - "id": 16610, - "lat": 48.2533839, - "lng": 2.702352, - "phone": "01 64 29 17 52", - "title": "PHARMACIE DE BEAUREGARD", - "zipcode": "77140" -}, { - "address": "110 AVENUE DE ROYAT", - "category": "2", - "city": "CHAMALIERES", - "id": 17660, - "lat": 45.768584, - "lng": 3.0567475, - "phone": "04 73 35 84 98", - "title": "PHARMACIE DESCHLER", - "zipcode": "63400" -}, { - "address": "111 AVENUE DES SOURCES", - "category": "2", - "city": "MONTROND-LES-BAINS", - "id": 17628, - "lat": 45.6433164, - "lng": 4.2320944, - "phone": "04 77 54 44 93", - "title": "PHARMACIE DES THERMES", - "zipcode": "42210" -}, { - "address": "111 AVENUE DU GENERAL DE GAULLE", - "category": "2", - "city": "LA BAULE-ESCOUBLAC", - "id": 15174, - "lat": 47.2851611, - "lng": -2.3920147, - "phone": "02 40 60 20 15", - "title": "2B PHARMACIE", - "zipcode": "44500" -}, { - "address": "111 AVENUE VICTOR HUGO", - "category": "2", - "city": "PARIS", - "id": 14382, - "lat": 48.8684277, - "lng": 2.2829504, - "phone": "01 45 53 82 20", - "title": "PHARMACIE 111", - "zipcode": "75016" -}, { - "address": "111 ROUTE DES CAMOINS QUARTIER DES 4 SAISONS", - "category": "1", - "city": "MARSEILLE", - "id": 14552, - "lat": 43.2983163, - "lng": 5.4983441, - "phone": "04 91 27 25 88", - "title": "PHARMACIE DU MIDI", - "zipcode": "13011" -}, { - "address": "1115 AVENUE DE LA LIBERATION BP34", - "category": "2", - "city": "BRUAY-LA-BUISSIERE", - "id": 15613, - "lat": 50.4950707, - "lng": 2.5683279, - "phone": "03 21 01 71 00", - "title": "PARAPHARMACIE CORA", - "zipcode": "62700" -}, { - "address": "111AVENUE STALINGRAD", - "category": "1", - "city": "ARLES", - "id": 19590, - "lat": 43.6919086, - "lng": 4.6380332, - "phone": "04 90 49 66 24", - "title": "PHARMACIE STALINGRAD", - "zipcode": "13200" -}, { - "address": "112 AVENUE DE LA REPUBLIQUE", - "category": "2", - "city": "AUBERVILLIERS", - "id": 15550, - "lat": 48.9056852, - "lng": 2.3897597, - "phone": "01 48 33 79 53", - "title": "LA PHARMACIE MODERNE", - "zipcode": "93300" -}, { - "address": "112 RUE LECOURBE", - "category": "1", - "city": "PARIS", - "id": 14785, - "lat": 48.842882, - "lng": 2.3028915, - "phone": "01 47 34 05 52", - "title": "GRANDE PHARMACIE LECOURBE", - "zipcode": "75015" -}, { - "address": "113 AVENUE DE LA LIBERATION", - "category": "2", - "city": "SAINT-SATURNIN-LES-AVIGNON", - "id": 16125, - "lat": 43.9560183, - "lng": 4.9299228, - "phone": "04 90 83 81 49", - "title": "PHARMACIE BLONDEL ET VAN DE WIELE", - "zipcode": "84450" -}, { - "address": "113 BOULEVARD CARNOT", - "category": "3", - "city": "AGEN", - "id": 16276, - "lat": 44.2040097, - "lng": 0.6205294, - "phone": "05 53 48 28 56", - "title": "PHARMACIE CARNOT", - "zipcode": "47000" -}, { - "address": "113 BOULEVARD VOLTAIRE", - "category": "2", - "city": "PARIS", - "id": 14714, - "lat": 48.8575374, - "lng": 2.3813125, - "phone": "01 43 79 18 65", - "title": "GRANDE PHARMACIE", - "zipcode": "75011" -}, { - "address": "114 AVENUE DU MEDOC CENTRE COMMERCIAL LE VIGEAN", - "category": "1", - "city": "EYSINES", - "id": 17375, - "lat": 44.8832521, - "lng": -0.6325846, - "phone": "05 56 28 46 32", - "title": "PHARMACIE DENCAUSSE", - "zipcode": "33320" -}, { - "address": "1140 ROUTE DE GRASSE", - "category": "2", - "city": "ANTIBES", - "id": 15450, - "lat": 43.594517, - "lng": 7.0932618, - "phone": "04 93 33 18 62", - "title": "GRANDE PHARMACIE CROIX ROUGE", - "zipcode": "6600" -}, { - "address": "1143 RUE PIERRE BROSSOLETTE", - "category": "2", - "city": "HENIN-BEAUMONT", - "id": 18692, - "lat": 50.4058993, - "lng": 2.940439, - "phone": "03 21 20 26 15", - "title": "PHARMACIE LACINA", - "zipcode": "62110" -}, { - "address": "115 RUE SAINT SPIRE", - "category": "1", - "city": "CORBEIL-ESSONNES", - "id": 19136, - "lat": 48.6071026, - "lng": 2.4843059, - "phone": "01 64 96 10 68", - "title": "PHARMACIE PERRICHES SAYANOFF", - "zipcode": "91100" -}, { - "address": "115B AVENUE DU GENERAL DE GAUL", - "category": "2", - "city": "NEUILLY-SUR-MARNE", - "id": 19308, - "lat": 48.8587494, - "lng": 2.5341223, - "phone": "01 43 08 22 56", - "title": "PHARMACIE REVEL", - "zipcode": "93330" -}, { - "address": "116 BIS RUIE THEOPHILE ROUSSEL", - "category": "2", - "city": "SAINT-CHELY-D'APCHER", - "id": 18688, - "lat": 44.8029315, - "lng": 3.2757679, - "phone": "04 66 31 00 24", - "title": "PHARMACIE LABORIE", - "zipcode": "48200" -}, { - "address": "116 BOULEVARD GALLIENI", - "category": "1", - "city": "ISSY-LES-MOULINEAUX", - "id": 17743, - "lat": 48.8227402, - "lng": 2.2678751, - "phone": "01 46 42 22 07", - "title": "PHARMACIE DU CARREFOUR WEIDEN", - "zipcode": "92130" -}, { - "address": "116 RUE DE LA BOETIE", - "category": "3", - "city": "PARIS", - "id": 14410, - "lat": 48.8715676, - "lng": 2.3073016, - "phone": "01 43 59 35 50", - "title": "PHARMACIE BOETIE CHAMPS ELYSEES", - "zipcode": "75008" -}, { - "address": "116 RUE SULLY", - "category": "2", - "city": "CLERMONT-FERRAND", - "id": 16945, - "lat": 45.7926006, - "lng": 3.0787271, - "phone": "04 73 37 09 64", - "title": "PHARMACIE DE LA GLACIERE", - "zipcode": "63100" -}, { - "address": "117 AV DE LA VICTOIRE", - "category": "1", - "city": "TOULON", - "id": 19484, - "lat": 43.1305796, - "lng": 5.9280327, - "phone": "04 94 89 22 77", - "title": "PHARMACIE SAINTE ANNE", - "zipcode": "83000" -}, { - "address": "117 AVENUE LAZARE CARNOT", - "category": "2", - "city": "TOULON", - "id": 15430, - "lat": 43.1273837, - "lng": 5.9247124, - "phone": "04 94 89 58 57", - "title": "GRANDE PHARMACIE LAZARE CARNOT", - "zipcode": "83000" -}, { - "address": "117 RUE DE DESVRES", - "category": "3", - "city": "SAMER", - "id": 15007, - "lat": 50.6402248, - "lng": 1.747294, - "phone": "03 21 87 67 78", - "title": "PHARMACIE DE L ABBAYE", - "zipcode": "62830" -}, { - "address": "117 RUE NATIONALE", - "category": "3", - "city": "MEZIERES-SUR-SEINE", - "id": 18902, - "lat": 48.960035, - "lng": 1.7962741, - "phone": "01 30 95 61 36", - "title": "PHARMACIE MASSELIN", - "zipcode": "78970" -}, { - "address": "118 AV DES PROVINCES", - "category": "2", - "city": "LE GRAND-QUEVILLY", - "id": 15966, - "lat": 49.4091774, - "lng": 1.0509305, - "phone": "02 35 69 56 58", - "title": "PHARMACIE AUDENET", - "zipcode": "76120" -}, { - "address": "118 AVENUE DE VILLIERS", - "category": "1", - "city": "PARIS", - "id": 14673, - "lat": 48.8854057, - "lng": 2.2960441, - "phone": "01 43 80 86 09", - "title": "PHARMACIE SATELLITE", - "zipcode": "75017" -}, { - "address": "119 RUE SAINT ANTOINE", - "category": "2", - "city": "PARIS", - "id": 14746, - "lat": 48.8549981, - "lng": 2.3603289, - "phone": "01 42 72 20 44", - "title": "PHARMACIE DU MARAIS", - "zipcode": "75004" -}, { - "address": "119 RUE SAINT CHARLES", - "category": "1", - "city": "PARIS", - "id": 14356, - "lat": 48.8444418, - "lng": 2.2838542, - "phone": "01 45 77 88 46", - "title": "GRANDE PHARMACIE DU 15 EME", - "zipcode": "75015" -}, { - "address": "11TER RUE AUX HUILLIERS", - "category": "2", - "city": "VERNON", - "id": 15973, - "lat": 49.0918029, - "lng": 1.4832877, - "phone": "02 32 51 00 77", - "title": "PHARMACIE AUX HUILIERS", - "zipcode": "27200" -}, { - "address": "12 14 PLACE DES COMBATTANTS", - "category": "3", - "city": "MONTBRISON", - "id": 16326, - "lat": 45.6063072, - "lng": 4.0670151, - "phone": "04 77 58 03 55", - "title": "PHARMACIE CENTRALE", - "zipcode": "42600" -}, { - "address": "12 ALLEE DE LA FOSSE MAUSSOIN CENTRE COMMERCIAL CLICHY 2", - "category": "2", - "city": "CLICHY-SOUS-BOIS", - "id": 15856, - "lat": 48.9047217, - "lng": 2.5322425, - "phone": "01 43 81 01 31", - "title": "PHARMA FOLCHER ZINETTI ASSO", - "zipcode": "93390" -}, { - "address": "12 AV LOUIS PASTEUR", - "category": "3", - "city": "BAGNEUX", - "id": 16470, - "lat": 48.7982, - "lng": 2.317879, - "phone": "01 46 65 89 15", - "title": "PHARMACIE CITTANOVA PERICAUD", - "zipcode": "92220" -}, { - "address": "12 AVENUE JEAN MOULIN", - "category": "2", - "city": "GONDRIN", - "id": 19169, - "lat": 43.8826768, - "lng": 0.2356423, - "phone": "05 62 29 15 06", - "title": "PHARMACIE PILET CASSE", - "zipcode": "32330" -}, { - "address": "12 AVENUE STEPHANE MALLARME", - "category": "2", - "city": "PARIS", - "id": 14436, - "lat": 48.8861523, - "lng": 2.2916521, - "phone": "01 43 80 58 00", - "title": "PHARMACIE CHAMPERRET SEROR", - "zipcode": "75017" -}, { - "address": "12 BOULEVARD ST MICHEL", - "category": "1", - "city": "PARIS", - "id": 14395, - "lat": 48.8524483, - "lng": 2.3433425, - "phone": "01 43 26 92 66", - "title": "PHARMACIE BADER", - "zipcode": "75006" -}, { - "address": "12 CITE DE LA MONTADE", - "category": "1", - "city": "AURILLAC", - "id": 17025, - "lat": 44.9125678, - "lng": 2.4394871, - "phone": "04 71 48 00 22", - "title": "PHARMACIE DE LA MONTADE", - "zipcode": "15000" -}, { - "address": "12 PLACE DE VERDUN", - "category": "3", - "city": "TARBES", - "id": 17334, - "lat": 43.2329492, - "lng": 0.0744759, - "phone": "05 62 34 45 86", - "title": "PHARMACIE DE VERDUN", - "zipcode": "65000" -}, { - "address": "12 PLACE HOCHE", - "category": "2", - "city": "QUIBERON", - "id": 17067, - "lat": 47.4804881, - "lng": -3.1211994, - "phone": "02 97 50 09 30", - "title": "PHARMACIE DE LA PLAGE", - "zipcode": "56170" -}, { - "address": "12 PLACE JEAN JAURES", - "category": "1", - "city": "LA VALETTE-DU-VAR", - "id": 18610, - "lat": 43.1373652, - "lng": 5.9814393, - "phone": "04 94 27 00 88", - "title": "PHARMACIE JEAN JAURES", - "zipcode": "83160" -}, { - "address": "12 PLACE SAINT SEURIN", - "category": "2", - "city": "LE PORGE", - "id": 16558, - "lat": 44.8731557, - "lng": -1.092752, - "phone": "05 56 26 51 44", - "title": "PHARMACIE D ALIENOR", - "zipcode": "33680" -}, { - "address": "12 ROUTE DE SAINT POURCAIN", - "category": "2", - "city": "CHARMEIL", - "id": 15600, - "lat": 46.1562551, - "lng": 3.3921056, - "phone": "04 70 32 67 67", - "title": "PARAPHARMACIE CONCEPT", - "zipcode": "3110" -}, { - "address": "12 RUE ANDRE MORIZET", - "category": "2", - "city": "BOULOGNE-BILLANCOURT", - "id": 16711, - "lat": 48.8344219, - "lng": 2.2424991, - "phone": "01 46 95 09 00", - "title": "PHARMACIE DE L AMICALE", - "zipcode": "92100" -}, { - "address": "12 RUE COLONEL PLEVEN", - "category": "1", - "city": "PLOUBALAY", - "id": 19182, - "lat": 48.5807383, - "lng": -2.1420764, - "phone": "02 96 27 27 58", - "title": "PHARMACIE PLOUBALAY", - "zipcode": "22650" -}, { - "address": "12 RUE DE LA REPUBLIQUE", - "category": "2", - "city": "TROYES", - "id": 18338, - "lat": 48.2982469, - "lng": 4.073777, - "phone": "03 25 73 01 97", - "title": "PHARMACIE FERNANDES", - "zipcode": "10000" -}, { - "address": "12 RUE DES GLENAN", - "category": "2", - "city": "FOUESNANT", - "id": 16611, - "lat": 47.8628918, - "lng": -3.9887551, - "phone": "02 98 94 95 39", - "title": "PHARMACIE DE BEG MEIL", - "zipcode": "29170" -}, { - "address": "12 RUE DES LONGRAIS", - "category": "1", - "city": "LA CHAPELLE-DES-FOUGERETZ", - "id": 17502, - "lat": 48.1759191, - "lng": -1.7336875, - "phone": "02 99 66 56 87", - "title": "PHARMACIE DES FOUGERETZ", - "zipcode": "35520" -}, { - "address": "12 RUE DU GENERAL LECLERC", - "category": "2", - "city": "FRUGES", - "id": 19853, - "lat": 50.5146444, - "lng": 2.1345391, - "phone": "03 21 04 42 63", - "title": "PHARMACIE DU HAUT PAYS", - "zipcode": "62310" -}, { - "address": "12 RUE DU GENERAL LECLERC", - "category": "2", - "city": "PLOUESCAT", - "id": 19363, - "lat": 48.6571178, - "lng": -4.1755059, - "phone": "02 98 69 60 67", - "title": "PHARMACIE ROSAIS", - "zipcode": "29430" -}, { - "address": "12 RUE DU MARECHAL FOCH", - "category": "2", - "city": "VIC-EN-BIGORRE", - "id": 16312, - "lat": 43.3856823, - "lng": 0.0536309, - "phone": "05 62 96 71 88", - "title": "PHARMACIE CENTRALE", - "zipcode": "65500" -}, { - "address": "12 RUE JULES GUESDE", - "category": "1", - "city": "ARQUES", - "id": 18097, - "lat": 50.7371034, - "lng": 2.3014163, - "phone": "03 21 88 52 10", - "title": "PHARMACIE DU PONT", - "zipcode": "62510" -}, { - "address": "12 RUE MARCELIN TRUQUIN", - "category": "2", - "city": "CORBIE", - "id": 19185, - "lat": 49.9083083, - "lng": 2.511618, - "phone": "03 22 96 95 65", - "title": "PHARMACIE POINTIN", - "zipcode": "80800" -}, { - "address": "12 RUE MISS CAWELL", - "category": "2", - "city": "ARQUES", - "id": 19662, - "lat": 50.7353914, - "lng": 2.2958275, - "phone": "03 21 38 29 51", - "title": "PHARMACIE TROUART", - "zipcode": "62510" -}, { - "address": "12 Rue du Levant", - "category": "2", - "city": "EPINAY-SOUS-SENART", - "id": 15153, - "lat": 48.6950512, - "lng": 2.5212025, - "phone": "01 60 46 66 45", - "title": "PHARMACIE RACINE", - "zipcode": "91860" -}, { - "address": "121 131 RUE GEORGES LATAPIE", - "category": "2", - "city": "RESSONS-SUR-MATZ", - "id": 19297, - "lat": 49.5422449, - "lng": 2.74543, - "phone": "03 44 42 61 55", - "title": "PHARMACIE REGIONALE", - "zipcode": "60490" -}, { - "address": "121 AVENUE DE ST OUEN", - "category": "1", - "city": "PARIS", - "id": 14679, - "lat": 48.895329, - "lng": 2.3279521, - "phone": "01 46 27 22 32", - "title": "PHARMACIE SOUIED", - "zipcode": "75017" -}, { - "address": "121 TER JOSEPH CLAUSSAT", - "category": "1", - "city": "CHAMALIERES", - "id": 17386, - "lat": 45.7836167, - "lng": 3.0627233, - "phone": "04 73 37 69 87", - "title": "PHARMACIE DES 4 ROUTES", - "zipcode": "63400" -}, { - "address": "1212 AVENUE CHARLES DE GAULLE", - "category": "2", - "city": "COQUELLES", - "id": 18506, - "lat": 50.9341949, - "lng": 1.7992007, - "phone": "03 21 82 23 10", - "title": "PHARMACIE GUILBERT", - "zipcode": "62231" -}, { - "address": "122 AVENUE DU GENERAL LECLERC", - "category": "2", - "city": "PARIS", - "id": 14549, - "lat": 48.8248769, - "lng": 2.3255128, - "phone": "01 45 39 13 14", - "title": "PHARMACIE DU GRAND PARIS", - "zipcode": "75014" -}, { - "address": "123 AVENUE ARISTIDE BRIAND", - "category": "1", - "city": "ANTONY", - "id": 16867, - "lat": 48.7627186, - "lng": 2.3081336, - "phone": "01 46 66 51 68", - "title": "PHARMACIE DE LA CROIX DE BERNY", - "zipcode": "92160" -}, { - "address": "123 AVENUE DE CLICHY", - "category": "3", - "city": "PARIS", - "id": 14619, - "lat": 48.8900144, - "lng": 2.3208697, - "phone": "01 46 27 67 50", - "title": "PHARMACIE MINEL", - "zipcode": "75017" -}, { - "address": "123 RUE GABRIEL PERI", - "category": "3", - "city": "SAINT-DENIS", - "id": 15429, - "lat": 48.9381962, - "lng": 2.355977, - "phone": "01 48 20 06 90", - "title": "GRANDE PHARMACIE DU MARCHE", - "zipcode": "93200" -}, { - "address": "124 BOULEVARD SAINT DENIS", - "category": "1", - "city": "COURBEVOIE", - "id": 18816, - "lat": 48.8991467, - "lng": 2.2668345, - "phone": "01 43 33 19 47", - "title": "PHARMACIE LEVY", - "zipcode": "92400" -}, { - "address": "125 AVENUE DE LA REPUBLIQUE", - "category": "2", - "city": "MONTGERON", - "id": 16598, - "lat": 48.7002741, - "lng": 2.4678359, - "phone": "01 69 03 52 11", - "title": "PHARMACIE DAVENET", - "zipcode": "91230" -}, { - "address": "125 AVENUE DU GAL DE GAULLE", - "category": "2", - "city": "CHAMPIGNY-SUR-MARNE", - "id": 18202, - "lat": 48.8240206, - "lng": 2.4971597, - "phone": "01 47 06 54 48", - "title": "PHARMACIE DU TREMBLAY", - "zipcode": "94500" -}, { - "address": "126 AVENUE D ARGENTEUIL", - "category": "2", - "city": "ASNIERES-SUR-SEINE", - "id": 17693, - "lat": 48.9161979, - "lng": 2.2825633, - "phone": "01 47 93 01 68", - "title": "PHARMACIE DRIGHES", - "zipcode": "92600" -}, { - "address": "126 BOULEVARD DE PLIMOUTH", - "category": "3", - "city": "BREST", - "id": 15325, - "lat": 48.387977, - "lng": -4.525921, - "phone": "02 98 31 42 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "29200" -}, { - "address": "126 ROUTE DE LA REINE", - "category": "1", - "city": "BOULOGNE-BILLANCOURT", - "id": 18930, - "lat": 48.8404177, - "lng": 2.2342496, - "phone": "01 46 04 00 62", - "title": "PHARMACIE MERGUI.", - "zipcode": "92100" -}, { - "address": "129 AVENUE DE LANDOUGE LOTISSEMENT LE MAS NEUF", - "category": "1", - "city": "LIMOGES", - "id": 18669, - "lat": 45.8297934, - "lng": 1.2971145, - "phone": "05 55 01 51 51", - "title": "PHARMACIE L HORTOLARY", - "zipcode": "87000" -}, { - "address": "129 AVENUE HENRI BARBUSSE", - "category": "1", - "city": "DRANCY", - "id": 17387, - "lat": 48.9197625, - "lng": 2.4504853, - "phone": "01 48 30 22 65", - "title": "PHARMACIE DES 4 ROUTES", - "zipcode": "93700" -}, { - "address": "129 B AVENUE DE LODEVE", - "category": "2", - "city": "MONTPELLIER", - "id": 15334, - "lat": 43.611843, - "lng": 3.839889, - "phone": "04 99 77 34 00", - "title": "CASINO FRANCE ", - "zipcode": "34080" -}, { - "address": "13 ALLEE DES HALLES", - "category": "1", - "city": "NOISY-LE-GRAND", - "id": 18834, - "lat": 48.8296417, - "lng": 2.5671308, - "phone": "01 43 03 34 81", - "title": "PHARMACIE LONGATELLI", - "zipcode": "93160" -}, { - "address": "13 ALLEE JACQUARD", - "category": "2", - "city": "EVRY", - "id": 17625, - "lat": 48.6273557, - "lng": 2.4291427, - "phone": "01 69 36 22 88", - "title": "PHARMACIE DES TERRASSES", - "zipcode": "91000" -}, { - "address": "13 ALLEE LEON MASSE", - "category": "1", - "city": "ORAISON", - "id": 19643, - "lat": 43.916508, - "lng": 5.91895, - "phone": "04 92 78 60 46", - "title": "PHARMACIE TOCHE", - "zipcode": "4700" -}, { - "address": "13 AV DE LA DIVISION LECLERC", - "category": "2", - "city": "CACHAN", - "id": 16042, - "lat": 48.7854349, - "lng": 2.3284475, - "phone": "01 46 64 05 46", - "title": "PHARMACIE BEHAR", - "zipcode": "94230" -}, { - "address": "13 AV HENRI BARBUSSE", - "category": "3", - "city": "LE BLANC-MESNIL", - "id": 17799, - "lat": 48.9367678, - "lng": 2.4578159, - "phone": "01 48 67 32 30", - "title": "PHARMACIE DU CENTRE", - "zipcode": "93150" -}, { - "address": "13 AVENUE DES FARCIENNES", - "category": "2", - "city": "BEAUCAIRE", - "id": 19619, - "lat": 43.8107479, - "lng": 4.636401, - "phone": "04 66 59 21 41", - "title": "PHARMACIE TERRIN - VIGNAUD", - "zipcode": "30300" -}, { - "address": "13 BOULEVARD DES REMPARTS", - "category": "1", - "city": "SAINT-HIPPOLYTE-DU-FORT", - "id": 19366, - "lat": 43.9623425, - "lng": 3.8558477, - "phone": "04 66 77 22 42", - "title": "PHARMACIE ROUAN", - "zipcode": "30170" -}, { - "address": "13 PLACE ALSACE LORRAINE", - "category": "2", - "city": "LORIENT", - "id": 18597, - "lat": 47.7501703, - "lng": -3.3615495, - "phone": "02 97 21 14 61", - "title": "PHARMACIE JAHIER BILLOIR", - "zipcode": "56100" -}, { - "address": "13 PLACE CHARLES DE GAULLE", - "category": "2", - "city": "BAVAY", - "id": 17673, - "lat": 50.2983901, - "lng": 3.7940281, - "phone": "03 27 63 10 27", - "title": "PHARMACIE DILLIES", - "zipcode": "59570" -}, { - "address": "13 PLACE D ARMES", - "category": "2", - "city": "RUFFEC", - "id": 19174, - "lat": 46.0278442, - "lng": 0.1994022, - "phone": "05 45 31 01 91", - "title": "PHARMACIE PLACE D ARMES", - "zipcode": "16700" -}, { - "address": "13 PLACE DE LA NATION", - "category": "2", - "city": "PARIS", - "id": 14718, - "lat": 48.8490415, - "lng": 2.3974317, - "phone": "01 43 73 24 03", - "title": "GRANDE PHARMACIE DE LA NATION", - "zipcode": "75011" -}, { - "address": "13 PLACE DE VENETIE", - "category": "2", - "city": "PARIS", - "id": 14449, - "lat": 48.8216943, - "lng": 2.3649705, - "phone": "01 44 06 72 72", - "title": "PHARMACIE CTRE CIAL MASSENA 13", - "zipcode": "75013" -}, { - "address": "13 PLACE DU PEUPLE", - "category": "3", - "city": "SAINT-ETIENNE", - "id": 18136, - "lat": 45.437107, - "lng": 4.38894, - "phone": "04 77 32 93 51", - "title": "PHARMACIE DU PROGRES", - "zipcode": "42000" -}, { - "address": "13 PLACE FERDINAND BUISSON", - "category": "2", - "city": "L ISLE-SUR-LA-SORGUE", - "id": 15057, - "lat": 43.9198768, - "lng": 5.0524281, - "phone": "04 90 38 00 20", - "title": "Pharmacie du Marché", - "zipcode": "84800" -}, { - "address": "13 RUE DE CHATEAUBRIANT", - "category": "2", - "city": "VERN-SUR-SEICHE", - "id": 16011, - "lat": 48.045714, - "lng": -1.6019504, - "phone": "02 99 62 74 15", - "title": "PHARMACIE BATALLA", - "zipcode": "35770" -}, { - "address": "13 RUE DE LA TREMOILLE", - "category": "3", - "city": "PARIS", - "id": 14571, - "lat": 48.8673991, - "lng": 2.303276, - "phone": "01 47 23 39 25", - "title": "PHARMACIE EUROPEENNE", - "zipcode": "75008" -}, { - "address": "13 RUE DES GATINES", - "category": "1", - "city": "PARIS", - "id": 14740, - "lat": 48.8654835, - "lng": 2.3976681, - "phone": "01 46 36 86 01", - "title": "PHARMACIE DES GATINES", - "zipcode": "75020" -}, { - "address": "13 RUE HENRI FABRE", - "category": "2", - "city": "AVIGNON", - "id": 17471, - "lat": 43.9451784, - "lng": 4.8073774, - "phone": "04 90 82 55 17", - "title": "PHARMACIE DES CORPS SAINTS", - "zipcode": "84000" -}, { - "address": "13 RUE TOUR DE VILLE", - "category": "1", - "city": "MAURS", - "id": 18872, - "lat": 44.7108936, - "lng": 2.1974438, - "phone": "04 71 49 03 74", - "title": "PHARMACIE MANHES", - "zipcode": "15600" -}, { - "address": "13 RUE VICTOR HUGO", - "category": "2", - "city": "LYON", - "id": 14823, - "lat": 45.7556367, - "lng": 4.8311697, - "phone": "04 78 37 42 22", - "title": "PARAPHARMACIE TANGUY COSMETIQUES", - "zipcode": "69002" -}, { - "address": "130 AV CHARLES DE GAULLE", - "category": "2", - "city": "NEUILLY-SUR-SEINE", - "id": 17699, - "lat": 48.8833215, - "lng": 2.2662009, - "phone": "01 46 24 03 17", - "title": "PHARMACIE DU 130", - "zipcode": "92200" -}, { - "address": "130 BOULEVARD HAUSSMANN", - "category": "2", - "city": "PARIS", - "id": 14589, - "lat": 48.8753358, - "lng": 2.3169387, - "phone": "01 45 22 16 72", - "title": "PHARMACIE HAUSSMANN-LABORDE", - "zipcode": "75008" -}, { - "address": "130 BVD CHARLES DE GAULLE ZAC DES 4 CHEMINS", - "category": "2", - "city": "COLOMBES", - "id": 15594, - "lat": 48.914203, - "lng": 2.2303963, - "phone": "01 41 30 00 76", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "92700" -}, { - "address": "130 CHEMIN RURAL VALBARELLE SAINT MARCEL", - "category": "1", - "city": "MARSEILLE", - "id": 14560, - "lat": 43.2815798, - "lng": 5.4431056, - "phone": "04 91 44 94 93", - "title": "PHARMACIE DU PARC ST CYR", - "zipcode": "13011" -}, { - "address": "130 RUE DE LA BOETIE", - "category": "1", - "city": "PARIS", - "id": 14695, - "lat": 48.8708706, - "lng": 2.3056282, - "phone": "01 43 59 82 30", - "title": "PHARMACIE ANGLAISE DES CHAMPS ELYSEES", - "zipcode": "75008" -}, { - "address": "130 RUE DU GRAND BUT", - "category": "2", - "city": "LOMME", - "id": 15267, - "lat": 50.6515319, - "lng": 2.9759749, - "phone": "03 20 08 59 59", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "59160" -}, { - "address": "130 RUE JEAN BAPTISTE MARTINI", - "category": "2", - "city": "GLEIZE", - "id": 16840, - "lat": 45.9871838, - "lng": 4.7095836, - "phone": "04 74 68 38 11", - "title": "PHARMACIE DE LA CLAIRE", - "zipcode": "69400" -}, { - "address": "1303 ROUTE DE DRAGUIGNAN CENTRE COMMERCIAL CARREFOUR", - "category": "2", - "city": "TRANS-EN-PROVENCE", - "id": 18084, - "lat": 43.5102455, - "lng": 6.4787082, - "phone": "04 94 67 74 95", - "title": "PHARMACIE DU PLAN", - "zipcode": "83720" -}, { - "address": "132 PLACE D ARMES", - "category": "2", - "city": "GUISE", - "id": 19809, - "lat": 49.9007992, - "lng": 3.6270263, - "phone": "03 23 61 12 64", - "title": "PHARMACIE COURTOIS CLIN SNC", - "zipcode": "2120" -}, { - "address": "133 AVENUE DES CHAMPS ELYSEES", - "category": "2", - "city": "PARIS", - "id": 14546, - "lat": 48.8725243, - "lng": 2.2970531, - "phone": "01 47 20 39 25", - "title": "PHARMACIE DU DRUGSTORE", - "zipcode": "75008" -}, { - "address": "134 AVENUE GABRIEL PERI", - "category": "2", - "city": "GENNEVILLIERS", - "id": 16994, - "lat": 48.9242873, - "lng": 2.2947138, - "phone": "01 47 98 80 43", - "title": "PHARMACIE DE LA MAIRIE", - "zipcode": "92230" -}, { - "address": "134 AVENUE JEAN JAURES", - "category": "3", - "city": "REIMS", - "id": 15947, - "lat": 49.2605666, - "lng": 4.0485677, - "phone": "03 26 07 21 85", - "title": "PHARMACIE ARDENNAISE", - "zipcode": "51100" -}, { - "address": "134 RUE DE LA GIRARDIERE", - "category": "3", - "city": "CHOLET", - "id": 15348, - "lat": 47.0422618, - "lng": -0.9031023, - "phone": "02 41 75 34 00", - "title": "CASINO FRANCE ", - "zipcode": "49300" -}, { - "address": "135 CHEMIN DE CHATEAU GOMBERT", - "category": "1", - "city": "MARSEILLE", - "id": 14612, - "lat": 43.3422088, - "lng": 5.4200689, - "phone": "04 91 70 17 61", - "title": "PHARMACIE MARSEILLAISE SAINT MITRE", - "zipcode": "13013" -}, { - "address": "135 RUE DE CHARONNE", - "category": "1", - "city": "PARIS", - "id": 14580, - "lat": 48.8552265, - "lng": 2.3867836, - "phone": "01 43 70 59 53", - "title": "PHARMACIE FOURNEUF", - "zipcode": "75011" -}, { - "address": "136 BOULEVARD JOLIOT CURIE", - "category": "2", - "city": "VENISSIEUX", - "id": 15291, - "lat": 45.7164776, - "lng": 4.8750807, - "phone": "04 37 90 49 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "69200" -}, { - "address": "137 RUE DU FAUBOURG ST ANTOINE", - "category": "1", - "city": "PARIS", - "id": 14492, - "lat": 48.8510615, - "lng": 2.3780473, - "phone": "01 44 68 21 39", - "title": "PHARMACIE DE LA SEMEUSE", - "zipcode": "75011" -}, { - "address": "1370 AVENUE DE LA MER", - "category": "2", - "city": "SIX-FOURS-LES-PLAGES", - "id": 16633, - "lat": 43.1032779, - "lng": 5.8205092, - "phone": "04 94 25 67 14", - "title": "PHARMACIE DE BUCARIN", - "zipcode": "83140" -}, { - "address": "14 AVENUE DE MADRID", - "category": "3", - "city": "NEUILLY-SUR-SEINE", - "id": 15979, - "lat": 48.8832741, - "lng": 2.2598321, - "phone": "01 46 24 03 34", - "title": "PHARMACIE AZOGUI", - "zipcode": "92200" -}, { - "address": "14 AVENUE JEAN JAURES", - "category": "2", - "city": "ROUSSILLON", - "id": 15457, - "lat": 45.3646714, - "lng": 4.8044207, - "phone": "04 74 86 33 65", - "title": "GRANDE PHARMACIE DE L AVENUE", - "zipcode": "38150" -}, { - "address": "14 BOULEVARD MARECHAL LECLERC L ILETTE", - "category": "1", - "city": "ANTIBES", - "id": 16789, - "lat": 43.5756152, - "lng": 7.1241257, - "phone": "04 93 34 81 32", - "title": "PHARMACIE DE L ILETTE", - "zipcode": "6160" -}, { - "address": "14 CLOS DU VERGER", - "category": "1", - "city": "VERNEUIL-SUR-SEINE", - "id": 17860, - "lat": 48.9810612, - "lng": 1.9743991, - "phone": "01 39 71 16 63", - "title": "PHARMACIE DU CLOS VERGER", - "zipcode": "78480" -}, { - "address": "14 PLACE CARNOT", - "category": "2", - "city": "MARSEILLAN", - "id": 16007, - "lat": 43.3559146, - "lng": 3.5282464, - "phone": "04 67 77 23 14", - "title": "PHARMACIE BASTIDE", - "zipcode": "34340" -}, { - "address": "14 PLACE DU GENERAL DE GAULLE", - "category": "1", - "city": "MONTDIDIER", - "id": 16483, - "lat": 49.6472221, - "lng": 2.5673274, - "phone": "03 22 78 08 46", - "title": "PHARMACIE CLEMENT CHASSANG", - "zipcode": "80500" -}, { - "address": "14 PLACE DU MARCHE", - "category": "1", - "city": "CHATEAU-LANDON", - "id": 16021, - "lat": 48.1494421, - "lng": 2.7026407, - "phone": "01 64 29 30 21", - "title": "PHARMACIE BAUVRESSE", - "zipcode": "77570" -}, { - "address": "14 RUE COLONEL DENFERT", - "category": "2", - "city": "MARTIGUES", - "id": 16667, - "lat": 43.4084271, - "lng": 5.054721, - "phone": "04 42 80 49 51", - "title": "PHARMACIE DE FERRIERES", - "zipcode": "13500" -}, { - "address": "14 RUE DE LA FRIPERIE", - "category": "2", - "city": "PROVINS", - "id": 16897, - "lat": 48.5598784, - "lng": 3.2993586, - "phone": "01 64 00 00 09", - "title": "PHARMACIE DE LA FRIPERIE", - "zipcode": "77160" -}, { - "address": "14 RUE DE LA PIE", - "category": "2", - "city": "HOUDAN", - "id": 16950, - "lat": 48.7906349, - "lng": 1.6017815, - "phone": "01 30 59 60 46", - "title": "PHARMACIE DE LA GRANDE RUE", - "zipcode": "78550" -}, { - "address": "14 RUE DE LA POSTE", - "category": "1", - "city": "NOGARO", - "id": 16562, - "lat": 43.7596701, - "lng": -0.0337993, - "phone": "05 62 09 00 53", - "title": "PHARMACIE D ARMAGNAC", - "zipcode": "32110" -}, { - "address": "14 RUE DE PARIS", - "category": "3", - "city": "LE PECQ", - "id": 17793, - "lat": 48.8962091, - "lng": 2.105505, - "phone": "01 34 51 10 42", - "title": "PHARMACIE DU CENTRE", - "zipcode": "78230" -}, { - "address": "14 RUE DES CAILLOTIERES", - "category": "1", - "city": "LA FLOTTE", - "id": 15573, - "lat": 46.1803809, - "lng": -1.3262449, - "phone": "06 81 48 80 23", - "title": "PAR ' A LA PLAGE", - "zipcode": "17630" -}, { - "address": "14 RUE DES MENHIRS", - "category": "2", - "city": "ERDEVEN", - "id": 17554, - "lat": 47.6391582, - "lng": -3.1540652, - "phone": "02 97 55 63 49", - "title": "PHARMACIE DES MENHIRS", - "zipcode": "56410" -}, { - "address": "14 RUE DU 11 NOVEMBRE", - "category": "1", - "city": "SAINT-MARTIN-LA-PLAINE", - "id": 17310, - "lat": 45.5463456, - "lng": 4.5922252, - "phone": "04 77 75 54 46", - "title": "PHARMACIE DE SAINT MARTIN", - "zipcode": "42800" -}, { - "address": "14 RUE DU RENDEZ VOUS", - "category": "1", - "city": "PARIS", - "id": 14563, - "lat": 48.8453575, - "lng": 2.404437, - "phone": "01 43 43 89 93", - "title": "PHARMACIE DU RENDEZ VOUS", - "zipcode": "75012" -}, { - "address": "14 RUE MECHIN", - "category": "3", - "city": "L ILE-SAINT-DENIS", - "id": 18644, - "lat": 48.9357645, - "lng": 2.3396051, - "phone": "01 48 20 05 41", - "title": "PHARMACIE KANN", - "zipcode": "93450" -}, { - "address": "14 RUE PAUL CHENAVARD", - "category": "2", - "city": "LYON", - "id": 14343, - "lat": 45.765957, - "lng": 4.832903, - "phone": "04 78 28 03 37", - "title": "PHARMACIE DU SERPENT", - "zipcode": "69001" -}, { - "address": "14 RUE ROYALE", - "category": "2", - "city": "VERSAILLES", - "id": 17634, - "lat": 48.7979652, - "lng": 2.1267122, - "phone": "01 39 50 20 25", - "title": "PHARMACIE DES TOURNELLES", - "zipcode": "78000" -}, { - "address": "14/16 AVENUE JEAN JAURES", - "category": "2", - "city": "AUXERRE", - "id": 15721, - "lat": 47.7975931, - "lng": 3.5805379, - "phone": "03 86 46 46 00", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "89000" -}, { - "address": "140 AVENUE CHARLES DE GAULLE", - "category": "1", - "city": "SUCY-EN-BRIE", - "id": 16522, - "lat": 48.7635901, - "lng": 2.5357774, - "phone": "01 45 90 18 08", - "title": "PHARMACIE COUFFIGNAL.", - "zipcode": "94370" -}, { - "address": "140 PLACE DU 8 MAI", - "category": "2", - "city": "MAZAN", - "id": 18038, - "lat": 44.0568811, - "lng": 5.1307527, - "phone": "04 90 69 70 16", - "title": "PHARMACIE DU MONT VENTOUX", - "zipcode": "84380" -}, { - "address": "140 RUE JEAN JAURES", - "category": "2", - "city": "BELLAING", - "id": 19043, - "lat": 50.3659621, - "lng": 3.4171164, - "phone": "03 27 24 04 18", - "title": "PHARMACIE NOTREDAME", - "zipcode": "59135" -}, { - "address": "141 BOULEVARD DE LA LIBERTE", - "category": "1", - "city": "LILLE", - "id": 16968, - "lat": 50.6322667, - "lng": 3.0607213, - "phone": "03 20 54 63 05", - "title": "PHARMACIE DE LA LIBERTE", - "zipcode": "59000" -}, { - "address": "141 RUE DE LA TOUR", - "category": "2", - "city": "PARIS", - "id": 14675, - "lat": 48.8636683, - "lng": 2.2725789, - "phone": "01 45 04 32 33", - "title": "PHARMACIE SEGUIN", - "zipcode": "75016" -}, { - "address": "1416 BLD JEAN MOULIN", - "category": "2", - "city": "SAINT-RAPHAEL", - "id": 17506, - "lat": 43.4281061, - "lng": 6.7908514, - "phone": "04 94 95 93 87", - "title": "PHARMACIE DES GENETS", - "zipcode": "83700" -}, { - "address": "142 AVENUE DE SAINT ANTOINE", - "category": "1", - "city": "MARSEILLE", - "id": 14765, - "lat": 43.3715046, - "lng": 5.3560981, - "phone": "04 91 51 33 62", - "title": "PHARMACIE PHARMABRIAN", - "zipcode": "13015" -}, { - "address": "142 AVENUE DU MARECHAL JUIN", - "category": "3", - "city": "SAINT-CYR-SUR-MER", - "id": 15841, - "lat": 43.1817969, - "lng": 5.7074232, - "phone": "04 94 26 15 03", - "title": "PHARMACIE DU PAS DE GRAINE", - "zipcode": "83270" -}, { - "address": "142 BOULEVARD NEY", - "category": "1", - "city": "PARIS", - "id": 14709, - "lat": 48.8979884, - "lng": 2.3376967, - "phone": "01 46 06 24 29", - "title": "PHARMACIE DE LA PORTE MONTMARTRE", - "zipcode": "75018" -}, { - "address": "142 ROUTE DE PAVILLY", - "category": "2", - "city": "LIMESY", - "id": 18377, - "lat": 49.5829591, - "lng": 0.9783648, - "phone": "02 35 92 28 72", - "title": "PHARMACIE FOURDRAINE", - "zipcode": "76570" -}, { - "address": "145 BOULEVARD DE CABRY", - "category": "2", - "city": "SIX-FOURS-LES-PLAGES", - "id": 16303, - "lat": 43.1140987, - "lng": 5.811199, - "phone": "04 94 07 18 03", - "title": "PHARMACIE CECCALDI", - "zipcode": "83140" -}, { - "address": "1459 AVENUE D ANTIBES GALERIE GEANT CASINO", - "category": "3", - "city": "AMILLY", - "id": 18112, - "lat": 47.9748606, - "lng": 2.7364583, - "phone": "02 38 93 05 38", - "title": "PHARMACIE DU PONT GAILLARD", - "zipcode": "45200" -}, { - "address": "146 AVENUE DES SCIENCES", - "category": "3", - "city": "CHELLES", - "id": 17473, - "lat": 48.9048358, - "lng": 2.5863924, - "phone": "01 60 20 00 02", - "title": "PHARMACIE DES COUDREAUX", - "zipcode": "77490" -}, { - "address": "146 AVENUE PARMENTIER", - "category": "3", - "city": "PARIS", - "id": 14365, - "lat": 48.8696974, - "lng": 2.3715195, - "phone": "01 43 57 55 55", - "title": "PHARMACIE GONCOURT", - "zipcode": "75011" -}, { - "address": "147 AVENUE ALBERT THOMAS", - "category": "2", - "city": "MONTLUCON", - "id": 17459, - "lat": 46.3578248, - "lng": 2.5844834, - "phone": "04 70 02 24 00", - "title": "PHARMACIE DES CITES", - "zipcode": "3100" -}, { - "address": "148 AV JEAN JAURES", - "category": "1", - "city": "PARIS", - "id": 14407, - "lat": 48.8869423, - "lng": 2.387138, - "phone": "01 42 08 27 71", - "title": "PHARMACIE BETHOUX ET POUGET", - "zipcode": "75019" -}, { - "address": "14BIS ROUTE DE BONDY", - "category": "2", - "city": "AULNAY-SOUS-BOIS", - "id": 18006, - "lat": 48.9308692, - "lng": 2.4933416, - "phone": "01 48 66 63 23", - "title": "PHARMACIE DU MARCHE", - "zipcode": "93600" -}, { - "address": "15 17 BOULEVARD DES ILES", - "category": "1", - "city": "ISSY-LES-MOULINEAUX", - "id": 16788, - "lat": 48.8229109, - "lng": 2.2500924, - "phone": "01 46 42 28 05", - "title": "PHARMACIE DE L ILE SAINT GERMA", - "zipcode": "92130" -}, { - "address": "15 17 RUE HENRI RIBIERE", - "category": "2", - "city": "PARIS", - "id": 14733, - "lat": 48.8770058, - "lng": 2.3951651, - "phone": "01 53 38 60 00", - "title": "PHARMACIE DALOY", - "zipcode": "75019" -}, { - "address": "15 ALLEE DES SOUDANES CENTRE COMMERCIAL DU CLOS", - "category": "2", - "city": "LOUVECIENNES", - "id": 17856, - "lat": 48.8619537, - "lng": 2.1233478, - "phone": "01 39 69 46 26", - "title": "PHARMACIE DU CLOS", - "zipcode": "78430" -}, { - "address": "15 ALLEE GABRIEL ZIRNHELT FACE 78 AV DU GENERAL DE GAULLE", - "category": "2", - "city": "ROSNY-SOUS-BOIS", - "id": 17681, - "lat": 48.8780833, - "lng": 2.478907, - "phone": "01 48 94 71 21", - "title": "PHARMACIE DOMUS", - "zipcode": "93110" -}, { - "address": "15 AV ESTIENNE D ORVES", - "category": "1", - "city": "ST MAXIMIN LA STE BAUME", - "id": 17139, - "lat": 43.4499017, - "lng": 5.8619075, - "phone": "04 98 05 20 98", - "title": "PHARMACIE DE LA SAINTE BAUME", - "zipcode": "83470" -}, { - "address": "15 AV JACQUES CARTIER", - "category": "2", - "city": "BUSSY-SAINT-GEORGES", - "id": 19054, - "lat": 48.8354061, - "lng": 2.7101895, - "phone": "01 64 76 30 82", - "title": "PHARMACIE O VERT", - "zipcode": "77600" -}, { - "address": "15 AVENUE DE LA LIBERTE", - "category": "2", - "city": "AIGUES-MORTES", - "id": 18167, - "lat": 43.5685972, - "lng": 4.1940027, - "phone": "04 66 53 61 30", - "title": "PHARMACIE DU SOLEIL", - "zipcode": "30220" -}, { - "address": "15 AVENUE DU BERRY", - "category": "1", - "city": "GOUZON", - "id": 19029, - "lat": 46.1966838, - "lng": 2.2377479, - "phone": "05 55 62 20 19", - "title": "PHARMACIE NICOULAUD", - "zipcode": "23230" -}, { - "address": "15 AVENUE DU GENERAL DE GAULLE", - "category": "2", - "city": "ANGOULEME", - "id": 16782, - "lat": 45.6492052, - "lng": 0.1568095, - "phone": "05 45 95 05 50", - "title": "PHARMACIE DE L HOTEL DE VILLE", - "zipcode": "16000" -}, { - "address": "15 AVENUE JEAN MABUSE", - "category": "3", - "city": "MAUBEUGE", - "id": 19119, - "lat": 50.2779226, - "lng": 3.9741372, - "phone": "03 27 64 74 31", - "title": "PHARMACIE PELTIER", - "zipcode": "59600" -}, { - "address": "15 AVENUE LONGUEIL", - "category": "2", - "city": "MAISONS-LAFFITTE", - "id": 19248, - "lat": 48.9469562, - "lng": 2.1469214, - "phone": "01 39 62 01 09", - "title": "PHARMACIE PRINCIPALE", - "zipcode": "78600" -}, { - "address": "15 BOULEVARD FEART", - "category": "2", - "city": "DINARD", - "id": 19804, - "lat": 48.6338006, - "lng": -2.0547213, - "phone": "02 99 46 88 04", - "title": "PHARMACIE CENTRALE FRANCAISE ANGLAISE", - "zipcode": "35800" -}, { - "address": "15 GRANDE RUE", - "category": "2", - "city": "CHATEAU-THIERRY", - "id": 16372, - "lat": 49.0453904, - "lng": 3.4016196, - "phone": "03 23 83 00 40", - "title": "PHARMACIE CENTRALE", - "zipcode": "2400" -}, { - "address": "15 PLACE DE L EGLISE", - "category": "2", - "city": "ORGEVAL", - "id": 17205, - "lat": 48.9197892, - "lng": 1.9764242, - "phone": "01 39 75 85 89", - "title": "PHARMACIE DE L'EGLISE", - "zipcode": "78630" -}, { - "address": "15 PLACE PUTTLINGEN ", - "category": "1", - "city": "SAINT-MICHEL-SUR-ORGE", - "id": 14993, - "lat": 48.636608, - "lng": 2.3198721, - "phone": "01 60 15 41 80", - "title": "PHARMACIE CHABRIER", - "zipcode": "91240" -}, { - "address": "15 PLACE SAINT GERARD", - "category": "2", - "city": "WATTRELOS", - "id": 19422, - "lat": 50.7226363, - "lng": 3.1860188, - "phone": "03 20 76 39 27", - "title": "PHARMACIE SAINT GERARD", - "zipcode": "59150" -}, { - "address": "15 PLACE VIARME", - "category": "2", - "city": "NANTES", - "id": 19714, - "lat": 47.2215639, - "lng": -1.5622706, - "phone": "02 40 20 25 11", - "title": "PHARMACIE VIARME", - "zipcode": "44000" -}, { - "address": "15 RUE ANATOLE FRANCE", - "category": "2", - "city": "MAING", - "id": 17366, - "lat": 50.309247, - "lng": 3.4842196, - "phone": "03 27 24 54 21", - "title": "PHARMACIE DELSARTE", - "zipcode": "59233" -}, { - "address": "15 RUE CHAMPAGNE SAINT GEORGES ", - "category": "1", - "city": "SAINTES", - "id": 14934, - "lat": 45.7474159, - "lng": -0.6784347, - "phone": "05 46 93 26 96", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "17100" -}, { - "address": "15 RUE DE L ANCIEN MARCHE", - "category": "2", - "city": "SAINT-LUNAIRE", - "id": 19319, - "lat": 48.6359948, - "lng": -2.1103617, - "phone": "02 99 46 02 97", - "title": "PHARMACIE RICHARD DELAHAYE", - "zipcode": "35800" -}, { - "address": "15 RUE DE ROME", - "category": "1", - "city": "PARIS", - "id": 14347, - "lat": 48.875643, - "lng": 2.3236292, - "phone": "01 53 42 10 10", - "title": "GRANDE PHARMACIE BAILLY", - "zipcode": "75008" -}, { - "address": "15 RUE DES LACS", - "category": "2", - "city": "SAINT-FLOUR", - "id": 19677, - "lat": 45.0330042, - "lng": 3.0917892, - "phone": "04 71 60 36 88", - "title": "PHARMACIE VALETTE", - "zipcode": "15100" -}, { - "address": "15 RUE DU COMMERCE", - "category": "2", - "city": "RIOM", - "id": 18900, - "lat": 45.8932442, - "lng": 3.1131825, - "phone": "04 73 38 22 52", - "title": "PHARMACIE MASSARDIER", - "zipcode": "63200" -}, { - "address": "15 RUE GAMBETTA", - "category": "2", - "city": "POUILLON", - "id": 16580, - "lat": 43.6047261, - "lng": -0.996091, - "phone": "05 58 98 20 09", - "title": "PHARMACIE DAGOUASSAT DESERT", - "zipcode": "40350" -}, { - "address": "15 RUE GEORGES MAERTENS", - "category": "2", - "city": "MARQUETTE-LEZ-LILLE", - "id": 17495, - "lat": 50.6665781, - "lng": 3.04389, - "phone": "03 20 40 68 59", - "title": "PHARMACIE DES FLANDRES", - "zipcode": "59520" -}, { - "address": "15 RUE HENRI DURANT", - "category": "3", - "city": "HOUDAIN", - "id": 16965, - "lat": 50.4511135, - "lng": 2.5358774, - "phone": "03 21 65 87 83", - "title": "PHARMACIE DE LA LAWE", - "zipcode": "62150" -}, { - "address": "15 RUE KERDURAND", - "category": "3", - "city": "RIANTEC", - "id": 19344, - "lat": 47.7142358, - "lng": -3.3139137, - "phone": "02 97 33 51 51", - "title": "PHARMACIE ROCHE", - "zipcode": "56670" -}, { - "address": "15 Rue du Général Montcalm", - "category": "3", - "city": "CHATEAU-D'OLONNE", - "id": 15099, - "lat": 46.4866283, - "lng": -1.7475357, - "phone": "02 51 22 14 71", - "title": "PHARMACIE MALEZE DUPOUEY", - "zipcode": "85180" -}, { - "address": "15 rue des Sources", - "category": "3", - "city": "SAINTE-VERGE", - "id": 14994, - "lat": 47.009424, - "lng": -0.2120896, - "phone": "05 49 96 22 30", - "title": "PHARMACIE CHARPENTIER", - "zipcode": "79100" -}, { - "address": "150 AVENUE MAJORAL ARNAUD IMMEUBLE SUD", - "category": "2", - "city": "MANOSQUE", - "id": 17494, - "lat": 43.8304626, - "lng": 5.7828732, - "phone": "04 92 72 00 88", - "title": "PHARMACIE DES FERRAGES", - "zipcode": "4100" -}, { - "address": "150 ROUTE DE BREST", - "category": "2", - "city": "QUIMPER", - "id": 15732, - "lat": 48.0153956, - "lng": -4.0807789, - "phone": "02 98 98 50 50", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "29000" -}, { - "address": "150 RUE PAUL BERT", - "category": "2", - "city": "LYON", - "id": 14491, - "lat": 45.7569229, - "lng": 4.8562917, - "phone": "04 78 60 84 83", - "title": "PHARMACIE DE LA RIZE", - "zipcode": "69003" -}, { - "address": "151 AVENUE ROGER SALENGRO", - "category": "2", - "city": "VILLEURBANNE", - "id": 16664, - "lat": 45.7805283, - "lng": 4.8822743, - "phone": "04 78 93 27 12", - "title": "PHARMACIE DE CROIX LUIZET", - "zipcode": "69100" -}, { - "address": "151 BOULEVARD MALESHERBES", - "category": "2", - "city": "PARIS", - "id": 14424, - "lat": 48.8848708, - "lng": 2.3071961, - "phone": "01 42 27 50 40", - "title": "PHARMACiE CARNOT", - "zipcode": "75017" -}, { - "address": "1520 ROUTE DE FRANS", - "category": "1", - "city": "VILLEFRANCHE-SUR-SAONE", - "id": 16613, - "lat": 45.98361, - "lng": 4.7401509, - "phone": "04 74 68 19 11", - "title": "PHARMACIE DE BELIGNY", - "zipcode": "69400" -}, { - "address": "153 AVENUE JACQUES DOUZANS", - "category": "1", - "city": "MURET", - "id": 16450, - "lat": 43.4676675, - "lng": 1.3279057, - "phone": "05 61 48 62 93", - "title": "PHARMACIE CHAVOIX", - "zipcode": "31600" -}, { - "address": "154 RUE DU COLONEL MULLER", - "category": "3", - "city": "LORIENT", - "id": 19934, - "lat": 47.7662896, - "lng": -3.4022102, - "phone": "02 90 38 00 00", - "title": "VITALYA. DEMAVIE", - "zipcode": "56100" -}, { - "address": "155 BLD DE LA PAIX", - "category": "1", - "city": "PAU", - "id": 17033, - "lat": 43.3184939, - "lng": -0.3461193, - "phone": "05 59 02 66 47", - "title": "PHARMACIE DE LA PAIX", - "zipcode": "64000" -}, { - "address": "156 AVENUE VICTOR HUGO", - "category": "2", - "city": "PARIS", - "id": 14690, - "lat": 48.8666727, - "lng": 2.2775706, - "phone": "01 47 27 68 14", - "title": "PHARMACIE VICTOR HUGO", - "zipcode": "75016" -}, { - "address": "156 BOULEVARD DE MAGENTA", - "category": "2", - "city": "PARIS", - "id": 14636, - "lat": 48.8819449, - "lng": 2.3509782, - "phone": "01 48 78 19 23", - "title": "PHARMACIE PARIS MAGENTA.", - "zipcode": "75010" -}, { - "address": "156 RUE ALEXANDRE FOURNY CTRE COM LECLERC", - "category": "3", - "city": "CHAMPIGNY SUR MARNE", - "id": 19607, - "lat": 48.8194355, - "lng": 2.530858, - "phone": "01 47 06 34 96", - "title": "PHARMACIE TAN", - "zipcode": "94500" -}, { - "address": "156 RUE DANIELLE CASANOVA", - "category": "2", - "city": "AUBERVILLIERS", - "id": 17798, - "lat": 48.9151974, - "lng": 2.4030454, - "phone": "01 43 52 49 86", - "title": "PHARMACIE DU CENTRE", - "zipcode": "93300" -}, { - "address": "157 GRANDE RUE", - "category": "3", - "city": "OULLINS", - "id": 19547, - "lat": 45.7129176, - "lng": 4.8044892, - "phone": "04 78 51 32 12", - "title": "PHARMACIE SERVILLAT", - "zipcode": "69600" -}, { - "address": "158 BD STE MARGUERITE", - "category": "3", - "city": "MARSEILLE", - "id": 14342, - "lat": 43.2659981, - "lng": 5.4085102, - "phone": "04 91 75 16 22", - "title": "PHARMACIE DE L'INSTITUT", - "zipcode": "13009" -}, { - "address": "158 RTE DE CANNES GALERIE AUCHAN", - "category": "2", - "city": "GRASSE", - "id": 15414, - "lat": 43.6351261, - "lng": 6.9506454, - "phone": "04 83 26 21 40", - "title": "ERE COSPRO FRANCE", - "zipcode": "6130" -}, { - "address": "158 RUE NATIONALE", - "category": "1", - "city": "CHOLET", - "id": 18333, - "lat": 47.0622199, - "lng": -0.8813705, - "phone": "02 41 62 30 27", - "title": "PHARMACIE FAYE", - "zipcode": "49300" -}, { - "address": "16 - 18 RUE JEAN HOET CENTRE COMMERCIAL INTERMARCHE", - "category": "2", - "city": "MANTES-LA-JOLIE", - "id": 18574, - "lat": 48.997581, - "lng": 1.710747, - "phone": "01 30 63 08 70", - "title": "PHARMACIE HUBERT", - "zipcode": "78200" -}, { - "address": "16 -18 AVENUE MORANE SAULNIER", - "category": "1", - "city": "VELIZY-VILLACOUBLAY", - "id": 19831, - "lat": 48.784502, - "lng": 2.218101, - "phone": "09 80 64 14 19", - "title": "PHARMACIE DE L'EUROPE", - "zipcode": "78140" -}, { - "address": "16 AVENUE DE LA GARE", - "category": "2", - "city": "MARGAUX", - "id": 16903, - "lat": 45.0371393, - "lng": -0.684709, - "phone": "05 57 88 70 26", - "title": "PHARMACIE DE LA GARE", - "zipcode": "33460" -}, { - "address": "16 AVENUE JEAN GIONO", - "category": "1", - "city": "AIX-EN-PROVENCE", - "id": 19191, - "lat": 43.5165038, - "lng": 5.4358889, - "phone": "04 42 59 27 65", - "title": "PHARMACIE POMIES", - "zipcode": "13090" -}, { - "address": "16 AVENUE NIEL", - "category": "1", - "city": "PARIS", - "id": 14630, - "lat": 48.8800789, - "lng": 2.295198, - "phone": "01 47 54 00 39", - "title": "PHARMACIE NIEL CASSAM", - "zipcode": "75017" -}, { - "address": "16 BLD THIERS", - "category": "1", - "city": "SAINT-JEAN-DE-LUZ", - "id": 18310, - "lat": 43.3903077, - "lng": -1.6588973, - "phone": "05 59 26 02 98", - "title": "PHARMACIE ESPARCEIL", - "zipcode": "64500" -}, { - "address": "16 BOULEVARD DE LA MADELEINE", - "category": "2", - "city": "MARTRES-TOLOSANE", - "id": 15399, - "lat": 43.1983887, - "lng": 1.0111849, - "phone": "05 61 98 80 13", - "title": "CAZELLES", - "zipcode": "31220" -}, { - "address": "16 BOULEVARD DE LA REPUBLIQUE", - "category": "2", - "city": "COURTHEZON", - "id": 19652, - "lat": 44.0854137, - "lng": 4.8840637, - "phone": "04 90 70 70 47", - "title": "PHARMACIE TREMOLIERES", - "zipcode": "84350" -}, { - "address": "16 PLACE DE LA REPUBLIQUE", - "category": "2", - "city": "DUNKERQUE", - "id": 17124, - "lat": 51.0321623, - "lng": 2.3752933, - "phone": "03 28 66 88 73", - "title": "PHARMACIE DE LA REPUBLIQUE", - "zipcode": "59140" -}, { - "address": "16 PLACE DU GENERAL DE GAULLE", - "category": "2", - "city": "LE RAINCY", - "id": 16367, - "lat": 48.8906325, - "lng": 2.5124508, - "phone": "01 43 81 07 79", - "title": "PHARMACIE CENTRALE", - "zipcode": "93340" -}, { - "address": "16 PLACE DUGAS", - "category": "2", - "city": "THURINS", - "id": 19610, - "lat": 45.6820449, - "lng": 4.639974, - "phone": "04 78 48 91 14", - "title": "PHARMACIE TARLET", - "zipcode": "69510" -}, { - "address": "16 PLACE HOTEL DE VILLE", - "category": "2", - "city": "BOUSSAC", - "id": 17047, - "lat": 46.3487261, - "lng": 2.2141385, - "phone": "05 55 65 00 59", - "title": "PHARMACIE DE LA PLACE", - "zipcode": "23600" -}, { - "address": "16 ROUTE DE MONTILLY CTRE COM INTERMARCHE", - "category": "2", - "city": "MOULINS", - "id": 18359, - "lat": 46.5639875, - "lng": 3.3185724, - "phone": "04 70 44 10 01", - "title": "PHARMACIE FLEURY", - "zipcode": "3000" -}, { - "address": "16 RUE AUGUSTE HUDIER", - "category": "1", - "city": "OZOIR-LA-FERRIERE", - "id": 17787, - "lat": 48.7631435, - "lng": 2.675115, - "phone": "01 64 40 30 58", - "title": "PHARMACIE DU CENTRE", - "zipcode": "77330" -}, { - "address": "16 RUE D ARMOR", - "category": "1", - "city": "PABU", - "id": 16719, - "lat": 48.565658, - "lng": -3.1446404, - "phone": "02 96 21 32 85", - "title": "PHARMACIE DE L ARMOR", - "zipcode": "22200" -}, { - "address": "16 RUE DE TOURNAI", - "category": "3", - "city": "LANNOY", - "id": 19011, - "lat": 50.6667309, - "lng": 3.2118202, - "phone": "03 20 89 45 60", - "title": "PHARMACIE MUTUALISTE DU NORD", - "zipcode": "59390" -}, { - "address": "16 RUE DU GENERAL LECLERC", - "category": "2", - "city": "MEAUX", - "id": 19180, - "lat": 48.9595187, - "lng": 2.8817707, - "phone": "01 64 34 06 23", - "title": "PHARMACIE PLATEAU", - "zipcode": "77100" -}, { - "address": "16/18 PLACE LOUIS XIII", - "category": "2", - "city": "RUNGIS", - "id": 17409, - "lat": 48.7510263, - "lng": 2.3453373, - "phone": "01 46 86 19 00", - "title": "PHARMACIE DES ANTES", - "zipcode": "94150" -}, { - "address": "161 CHEMIN DEPARTEMENTAL ", - "category": "3", - "city": "PLAISIR", - "id": 14852, - "lat": 48.828126, - "lng": 1.9571057, - "phone": "01 30 81 76 35", - "title": "AUCHAN ESPACE SANTE BEAUTE ", - "zipcode": "78370" -}, { - "address": "162 R DE COURCELLES 94 RUE PIERRE DEMOURS", - "category": "2", - "city": "PARIS", - "id": 14447, - "lat": 48.8833, - "lng": 2.2991341, - "phone": "01 47 63 60 67", - "title": "PHARMACIE COURCELLES DEMOURS", - "zipcode": "75017" -}, { - "address": "163 ROUTE DE BENODET GALERIE MARCHANDE HYPER GEANT", - "category": "2", - "city": "QUIMPER", - "id": 18640, - "lat": 47.974751, - "lng": -4.095089, - "phone": "02 98 90 53 16", - "title": "PHARMACIE JULIEN GANIS", - "zipcode": "29000" -}, { - "address": "164 AVENUE BOEUF", - "category": "2", - "city": "SAINT-AYGULF", - "id": 16743, - "lat": 43.3829534, - "lng": 6.7219574, - "phone": "04 94 81 01 61", - "title": "PHARMACIE DE L EMERAUDE", - "zipcode": "83370" -}, { - "address": "164 BOULEVARD PEDRO DE LUNA MAS DREVON", - "category": "1", - "city": "MONTPELLIER", - "id": 18020, - "lat": 43.5954725, - "lng": 3.8679131, - "phone": "04 67 42 51 11", - "title": "PHARMACIE DU MAS DREVON", - "zipcode": "34000" -}, { - "address": "164 RUE SAINT HONORE", - "category": "1", - "city": "PARIS", - "id": 14748, - "lat": 48.86225, - "lng": 2.3396696, - "phone": "01 42 60 34 36", - "title": "PHARMACIE DU PALAIS ROYAL", - "zipcode": "75001" -}, { - "address": "166 ROUTE DE BAYONNE", - "category": "2", - "city": "TOULOUSE", - "id": 19216, - "lat": 43.6091457, - "lng": 1.3802616, - "phone": "05 61 49 18 22", - "title": "PHARMACIE PRADEL", - "zipcode": "31300" -}, { - "address": "1668 CHELIN DE PERROT", - "category": "2", - "city": "AIRE-SUR-L'ADOUR", - "id": 15646, - "lat": 43.7229194, - "lng": -0.2672859, - "phone": "05 58 51 36 70", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "40800" -}, { - "address": "167 AVENUE DU GENERAL LECLERC", - "category": "2", - "city": "DIZY", - "id": 19708, - "lat": 49.0619186, - "lng": 3.9648117, - "phone": "03 26 51 94 27", - "title": "PHARMACIE VERONIQUE VAZART", - "zipcode": "51530" -}, { - "address": "167 BOULEVARD VICTOR HUGO L AUBRIERE", - "category": "2", - "city": "CLICHY", - "id": 15758, - "lat": 48.9045272, - "lng": 2.3206596, - "phone": "01 41 40 20 07", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "92110" -}, { - "address": "168 RUE DU GENERAL DE GAULLE", - "category": "1", - "city": "DAMMARTIN-EN-GOELE", - "id": 17289, - "lat": 49.0535611, - "lng": 2.684153, - "phone": "01 60 03 03 72", - "title": "PHARMACIE DE QUER", - "zipcode": "77230" -}, { - "address": "169 AVENUE DE L EUROPE", - "category": "2", - "city": "ORANGE", - "id": 19227, - "lat": 44.1200572, - "lng": 4.8404651, - "phone": "04 90 34 00 80", - "title": "PHARMACIE PRINCIPALE", - "zipcode": "84100" -}, { - "address": "169 RUE GAMBETTA", - "category": "1", - "city": "PEYREHORADE", - "id": 19597, - "lat": 43.5449401, - "lng": -1.1073044, - "phone": "05 58 73 00 08", - "title": "PHARMACIE SUPERVIELLE DUTHIL", - "zipcode": "40300" -}, { - "address": "16TER AVENUE KENNEDY", - "category": "3", - "city": "ARRAS", - "id": 19157, - "lat": 50.2891236, - "lng": 2.7582254, - "phone": "03 21 71 32 49", - "title": "PHARMACIE PIAU BOUTHORS", - "zipcode": "62000" -}, { - "address": "17 AVENUE DU DRAPEAU", - "category": "3", - "city": "CUSSET", - "id": 17893, - "lat": 46.1332524, - "lng": 3.4562676, - "phone": "04 70 98 38 84", - "title": "PHARMACIE DU DRAPEAU", - "zipcode": "3300" -}, { - "address": "17 AVENUE CENTRALE", - "category": "2", - "city": "LE CENDRE", - "id": 17550, - "lat": 45.7217518, - "lng": 3.1869043, - "phone": "04 73 84 00 90", - "title": "PHARMACIE DES MARONNIERS", - "zipcode": "63670" -}, { - "address": "17 AVENUE DU GENERAL DE GAULLE", - "category": "2", - "city": "ROQUEBRUNE-SUR-ARGENS", - "id": 18719, - "lat": 43.4454654, - "lng": 6.637102, - "phone": "04 94 45 70 42", - "title": "PHARMACIE LANDREAT", - "zipcode": "83520" -}, { - "address": "17 AVENUE PIERRE GUEGUIN", - "category": "2", - "city": "CONCARNEAU", - "id": 18128, - "lat": 47.8736897, - "lng": -3.9188597, - "phone": "02 98 97 06 60", - "title": "PHARMACIE DU PORT", - "zipcode": "29900" -}, { - "address": "17 BIS COURS GENERAL DE GAULLE", - "category": "1", - "city": "NANS-LES-PINS", - "id": 15926, - "lat": 43.3704295, - "lng": 5.7826205, - "phone": "04 94 78 90 45", - "title": "PHARMACIE ANCEL", - "zipcode": "83860" -}, { - "address": "17 BOULEVARD PORTALET", - "category": "2", - "city": "SAINT-AMBROIX", - "id": 19190, - "lat": 44.2604015, - "lng": 4.1974108, - "phone": "04 66 24 00 41", - "title": "PHARMACIE POMARET", - "zipcode": "30500" -}, { - "address": "17 COUR D AMSTERDAM", - "category": "2", - "city": "PARIS", - "id": 14780, - "lat": 48.8775223, - "lng": 2.3264502, - "phone": "01 43 87 48 98", - "title": "PHARMACIE DE LA GARE ST LAZARE", - "zipcode": "75008" -}, { - "address": "17 PLACE DE LA LIBERATION", - "category": "2", - "city": "GUILERS", - "id": 16966, - "lat": 48.4245636, - "lng": -4.558877, - "phone": "02 98 07 54 65", - "title": "PHARMACIE DE LA LIBERATION", - "zipcode": "29820" -}, { - "address": "17 PLACE QUEINNEC", - "category": "2", - "city": "MALESTROIT", - "id": 16550, - "lat": 47.8097964, - "lng": -2.3838636, - "phone": "02 97 75 11 53", - "title": "PHARMACIE CRUSSARD", - "zipcode": "56140" -}, { - "address": "17 ROUTE DU STADE", - "category": "2", - "city": "ARGELES-GAZOST", - "id": 19272, - "lat": 43.0062732, - "lng": -0.0902753, - "phone": "05 62 97 27 78", - "title": "PHARMACIE PYRENEES", - "zipcode": "65400" -}, { - "address": "17 RUE DE LA BOSSERIE", - "category": "2", - "city": "GIEN", - "id": 15718, - "lat": 47.708401, - "lng": 2.635254, - "phone": "02 38 05 16 30", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "45500" -}, { - "address": "17 RUE DU CHATEAU", - "category": "2", - "city": "SAINT-GEORGES-SUR-BAULCHE", - "id": 16812, - "lat": 47.8007152, - "lng": 3.5360432, - "phone": "03 86 48 10 74", - "title": "PHARMACIE DE LA BAULCHES", - "zipcode": "89000" -}, { - "address": "17 RUE SAINT JEAN", - "category": "1", - "city": "LE TOUQUET-PARIS-PLAGE", - "id": 17605, - "lat": 50.5244416, - "lng": 1.5833561, - "phone": "03 21 05 04 66", - "title": "PHARMACIE DES QUATRE SAISONS", - "zipcode": "62520" -}, { - "address": "17 RUE SOUFFLOT", - "category": "2", - "city": "PARIS", - "id": 14678, - "lat": 48.846937, - "lng": 2.3415888, - "phone": "01 43 54 56 67", - "title": "PHARMACIE SOUFFLOT", - "zipcode": "75005" -}, { - "address": "17/19 RUE LAFAYETTE", - "category": "1", - "city": "PARIS", - "id": 14372, - "lat": 48.8740664, - "lng": 2.3365552, - "phone": "07 82 89 77 79", - "title": "PARAPHARMACIE ANNAH", - "zipcode": "75009" -}, { - "address": "170 RUE AIRE ANGLE 10 RUE PASTEUR", - "category": "1", - "city": "BETHUNE", - "id": 16641, - "lat": 50.5369267, - "lng": 2.636293, - "phone": "03 21 56 60 20", - "title": "PHARMACIE DE CATORIVE", - "zipcode": "62400" -}, { - "address": "170 RUE DU 4 AOUT 1789", - "category": "3", - "city": "VILLEURBANNE", - "id": 15234, - "lat": 45.765239, - "lng": 4.8956565, - "phone": "04 78 78 80 78", - "title": "CARRE SANTE", - "zipcode": "69100" -}, { - "address": "170 RUE DU PARC SAINT JEAN", - "category": "2", - "city": "SAINT-JEAN-D'ARDIERES", - "id": 16863, - "lat": 46.115169, - "lng": 4.733755, - "phone": "04 74 66 10 38", - "title": "PHARMACIE DE LA CROISE", - "zipcode": "69220" -}, { - "address": "171 AVENUE CHARLES DE GAULLE", - "category": "2", - "city": "NEUILLY-SUR-SEINE", - "id": 19765, - "lat": 48.8835305, - "lng": 2.2629782, - "phone": "01 46 24 01 38", - "title": "PHARMACIE YAICHE", - "zipcode": "92200" -}, { - "address": "173 AVENUE GABRIEL PERI", - "category": "2", - "city": "SAINTE-GENEVIEVE-DES-BOIS", - "id": 16047, - "lat": 48.6475, - "lng": 2.327358, - "phone": "01 60 16 63 55", - "title": "PHARMACIE BELIN", - "zipcode": "91700" -}, { - "address": "175A AVENUE DES LANDES", - "category": "3", - "city": "BRAX", - "id": 16086, - "lat": 44.1995174, - "lng": 0.5540849, - "phone": "05 53 68 69 97", - "title": "PHARMACIE BESSOU", - "zipcode": "47310" -}, { - "address": "175BD GUSTAVE FLAUBERT", - "category": "3", - "city": "CLERMONT-FERRAND", - "id": 18684, - "lat": 45.7620619, - "lng": 3.1283076, - "phone": "04 73 26 45 22", - "title": "PHARMACIE LA PARDIEU", - "zipcode": "63000" -}, { - "address": "178 AVENUE DES PROVINCES", - "category": "1", - "city": "LE GRAND-QUEVILLY", - "id": 18643, - "lat": 49.4071331, - "lng": 1.0494884, - "phone": "02 35 69 65 75", - "title": "PHARMACIE KACZKOWSKI", - "zipcode": "76120" -}, { - "address": "178 RUE MONTMARTRE", - "category": "2", - "city": "PARIS", - "id": 14521, - "lat": 48.8710747, - "lng": 2.3435333, - "phone": "01 42 33 23 96", - "title": "PHARMACIE DES GRANDS BOULEVARDS", - "zipcode": "75002" -}, { - "address": "18 AVENUE CHARLES CAZIN", - "category": "2", - "city": "LE LAVANDOU", - "id": 17076, - "lat": 43.1377162, - "lng": 6.3675887, - "phone": "04 94 71 10 32", - "title": "PHARMACIE DE LA POSTE", - "zipcode": "83980" -}, { - "address": "18 AVENUE DE STALINGRAD", - "category": "1", - "city": "ALES", - "id": 18403, - "lat": 44.1247586, - "lng": 4.0864171, - "phone": "04 66 30 83 96", - "title": "PHARMACIE GALHAC FAVIER", - "zipcode": "30100" -}, { - "address": "18 AVENUE DU TARTRE", - "category": "1", - "city": "LE CHESNAY", - "id": 18204, - "lat": 48.8285875, - "lng": 2.1197524, - "phone": "01 39 54 10 41", - "title": "PHARMACIE DU TRIANON", - "zipcode": "78150" -}, { - "address": "18 AVENUE VICTOR HUGO", - "category": "3", - "city": "BIARRITZ", - "id": 18372, - "lat": 43.4811038, - "lng": -1.5614478, - "phone": "05 59 24 00 29", - "title": "PHARMACIE FOUCHER", - "zipcode": "64200" -}, { - "address": "18 BD GAMBETTA", - "category": "2", - "city": "TARASCON", - "id": 16850, - "lat": 43.806358, - "lng": 4.662933, - "phone": "04 90 91 00 76", - "title": "PHARMACIE DE LA CONDAMINE", - "zipcode": "13150" -}, { - "address": "18 BD MARECHAL ALPHONSE JUIN", - "category": "2", - "city": "CARNOUX-EN-PROVENCE", - "id": 18855, - "lat": 43.255687, - "lng": 5.566169, - "phone": "04 42 73 71 57", - "title": "PHARMACIE LYAUTEY", - "zipcode": "13470" -}, { - "address": "18 COURS YACINTHE BELLON PLACE DE L EGLISE", - "category": "1", - "city": "FONTVIEILLE", - "id": 17423, - "lat": 43.72625, - "lng": 4.709452, - "phone": "04 90 54 72 84", - "title": "PHARMACIE DES ARENES", - "zipcode": "13990" -}, { - "address": "18 PLACE D ARMES", - "category": "1", - "city": "ALBERT", - "id": 18957, - "lat": 50.0038556, - "lng": 2.6475953, - "phone": "03 22 74 45 00", - "title": "PHARMACIE MOITIER", - "zipcode": "80300" -}, { - "address": "18 R DE LA DUCHESSE DE CHARTRES", - "category": "1", - "city": "VINEUIL-SAINT-FIRMIN", - "id": 16120, - "lat": 49.1981756, - "lng": 2.4982738, - "phone": "03 44 57 06 20", - "title": "PHARMACIE BLIN", - "zipcode": "60500" -}, { - "address": "18 ROUTE DE TOULOUSE", - "category": "2", - "city": "AUTERIVE", - "id": 19361, - "lat": 43.3528831, - "lng": 1.4696227, - "phone": "05 61 50 26 10", - "title": "PHARMACIE ROPARS", - "zipcode": "31190" -}, { - "address": "18 RUE CARNOT", - "category": "1", - "city": "SOISY-SOUS-MONTMORENCY", - "id": 17485, - "lat": 48.9876282, - "lng": 2.2992338, - "phone": "01 39 89 02 70", - "title": "PHARMACIE DES ECOLES", - "zipcode": "95230" -}, { - "address": "18 RUE DE DUNKERQUE", - "category": "1", - "city": "PARIS", - "id": 14772, - "lat": 48.8809481, - "lng": 2.3553137, - "phone": "09 62 37 78 09", - "title": "PHARMACIE TOROSSIAN", - "zipcode": "75010" -}, { - "address": "18 RUE DE LA REPUBLIQUE", - "category": "2", - "city": "SAINT-POL-SUR-MER", - "id": 18259, - "lat": 51.0287083, - "lng": 2.3589944, - "phone": "03 28 64 93 25", - "title": "PHARMACIE DUFOUR ROBERT", - "zipcode": "59430" -}, { - "address": "18 RUE DES PELLETIERS", - "category": "1", - "city": "LA FERTE-SOUS-JOUARRE", - "id": 17579, - "lat": 48.9495277, - "lng": 3.1304046, - "phone": "01 60 22 00 44", - "title": "PHARMACIE DES PELLETIERS", - "zipcode": "77260" -}, { - "address": "18 RUE DU GENERAL LECLERC", - "category": "2", - "city": "ISSY-LES-MOULINEAUX", - "id": 16364, - "lat": 48.8261471, - "lng": 2.2779518, - "phone": "01 40 93 44 74", - "title": "PHARMACIE CENTRALE", - "zipcode": "92130" -}, { - "address": "18 RUE DU MARECHAL FOCH", - "category": "1", - "city": "LE VESINET", - "id": 16368, - "lat": 48.8919036, - "lng": 2.1346026, - "phone": "01 39 76 06 60", - "title": "PHARMACIE CENTRALE", - "zipcode": "78110" -}, { - "address": "18 RUE DU MARECHAL FOCH", - "category": "2", - "city": "VERSAILLES", - "id": 19243, - "lat": 48.8072693, - "lng": 2.1326082, - "phone": "01 39 50 09 23", - "title": "PHARMACIE PRINCIPALE", - "zipcode": "78000" -}, { - "address": "18 RUE DU MOULIN", - "category": "1", - "city": "LONGPRE-LES-CORPS-SAINTS", - "id": 19517, - "lat": 50.0119375, - "lng": 1.9919166, - "phone": "03 22 31 90 26", - "title": "PHARMACIE SAVARY PATOU", - "zipcode": "80510" -}, { - "address": "18 RUE DU MOULIN", - "category": "1", - "city": "LONGPRE-LES-CORPS-SAINTS", - "id": 19517, - "lat": 50.0119375, - "lng": 1.9919166, - "phone": "03 22 31 90 26", - "title": "PHARMACIE SAVARY PATOU", - "zipcode": "80510" -}, { - "address": "18 RUE EMILE ZOLA", - "category": "1", - "city": "TROYES", - "id": 19008, - "lat": 48.2974582, - "lng": 4.0764795, - "phone": "03 25 43 44 01", - "title": "PHARMACIE MUTUALISTE", - "zipcode": "10000" -}, { - "address": "18 RUE ERNEST CAUVIN", - "category": "1", - "city": "AMIENS", - "id": 19178, - "lat": 49.8919521, - "lng": 2.2996446, - "phone": "03 22 22 45 85", - "title": "PHARMACIE PLAQUIN", - "zipcode": "80000" -}, { - "address": "18 RUE HENRI THIRARD", - "category": "2", - "city": "L HAY-LES-ROSES", - "id": 15549, - "lat": 48.7773621, - "lng": 2.3445927, - "phone": "01 46 64 49 39", - "title": "LA PHARMACIE DU MARCHE", - "zipcode": "94240" -}, { - "address": "18 RUE ISAMBARD", - "category": "1", - "city": "PACY-SUR-EURE", - "id": 18343, - "lat": 49.0134797, - "lng": 1.3788793, - "phone": "02 32 36 01 08", - "title": "PHARMACIE FERRAND-GAILLARD", - "zipcode": "27120" -}, { - "address": "18 RUE JULES GUESDE BP 10454", - "category": "1", - "city": "VILLENEUVE-D'ASCQ", - "id": 15616, - "lat": 50.636175, - "lng": 3.1197565, - "phone": "03 20 64 44 44", - "title": "PARAPHARMACIE CORA FLERS", - "zipcode": "59650" -}, { - "address": "18 RUE ROULEAU", - "category": "2", - "city": "GLAGEON", - "id": 18596, - "lat": 50.0565934, - "lng": 4.0776302, - "phone": "03 27 57 03 71", - "title": "PHARMACIE JAGIELSKI", - "zipcode": "59132" -}, { - "address": "18 RUE SAINT HILAIRE", - "category": "2", - "city": "LA VARENNE ST HILAIRE", - "id": 19424, - "lat": 48.7923112, - "lng": 2.5136743, - "phone": "01 48 83 12 38", - "title": "PHARMACIE SAINT HILAIRE", - "zipcode": "94210" -}, { - "address": "18 RUE VICTOR HUGO", - "category": "2", - "city": "SAINTES-MARIES-DE-LA-MER", - "id": 16253, - "lat": 43.4511995, - "lng": 4.4278186, - "phone": "04 90 97 83 02", - "title": "PHARMACIE CAMBON NEUVILLE CORU", - "zipcode": "13460" -}, { - "address": "180 ROUTE NATIONALE 7", - "category": "3", - "city": "ATHIS-MONS", - "id": 15241, - "lat": 48.7121636, - "lng": 2.373502, - "phone": "08 25 34 20 13", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "91200" -}, { - "address": "180 rue Louise Michel", - "category": "1", - "city": "MARGON", - "id": 14956, - "lat": 48.3304707, - "lng": 0.8306062, - "phone": "02 37 53 49 00", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "28400" -}, { - "address": "181 RUE NATIONALE", - "category": "1", - "city": "TRIE-CHATEAU", - "id": 18400, - "lat": 49.2821231, - "lng": 1.8268992, - "phone": "03 44 49 71 04", - "title": "PHARMACIE GAILLARD", - "zipcode": "60590" -}, { - "address": "185 RUE DE VAUGIRARD", - "category": "1", - "city": "PARIS", - "id": 14725, - "lat": 48.8426805, - "lng": 2.3122353, - "phone": "01 47 34 35 66", - "title": "PHARMACIE BUFFON", - "zipcode": "75015" -}, { - "address": "186 RUE DE PARIS", - "category": "2", - "city": "MONTREUIL", - "id": 15847, - "lat": 48.855861, - "lng": 2.422953, - "phone": "01 48 97 14 41", - "title": "PHARMACIE ECCEL DANJON", - "zipcode": "93100" -}, { - "address": "188 AVENUE GEORGES CLEMENCEAU", - "category": "2", - "city": "DAX", - "id": 18709, - "lat": 43.7063312, - "lng": -1.040985, - "phone": "05 58 74 16 89", - "title": "PHARMACIE LAHET", - "zipcode": "40100" -}, { - "address": "188 PLACE DU GENERAL DE GAULLE", - "category": "1", - "city": "AUDRUICQ", - "id": 19056, - "lat": 50.8781797, - "lng": 2.0816386, - "phone": "03 21 35 32 05", - "title": "PHARMACIE OBERT", - "zipcode": "62370" -}, { - "address": "189 BOULEVARD BAZEILLES", - "category": "2", - "city": "TOULON", - "id": 18711, - "lat": 43.1122527, - "lng": 5.9384608, - "phone": "04 94 41 46 56", - "title": "PHARMACIE LAMALGUE", - "zipcode": "83000" -}, { - "address": "19 AV ALPHONSE DAUDET", - "category": "1", - "city": "TOURNEFEUILLE", - "id": 15945, - "lat": 43.5874057, - "lng": 1.3507107, - "phone": "05 61 86 21 54", - "title": "PHARMACIE ARC EN CIEL", - "zipcode": "31170" -}, { - "address": "19 AVENUE CLAUDE MONET", - "category": "2", - "city": "MARSEILLE", - "id": 14671, - "lat": 43.3251977, - "lng": 5.3933862, - "phone": "04 91 94 02 41", - "title": "PHARMACIE SAINT-BARTHELEMY", - "zipcode": "13014" -}, { - "address": "19 AVENUE DE L OCEAN", - "category": "2", - "city": "VENDAYS-MONTALIVET", - "id": 17066, - "lat": 45.3783922, - "lng": -1.1559744, - "phone": "05 56 09 31 39", - "title": "PHARMACIE DE LA PLAGE", - "zipcode": "33930" -}, { - "address": "19 AVENUE DE LA COLOMBIERE", - "category": "1", - "city": "SAINT-SYMPHORIEN-D'OZON", - "id": 17202, - "lat": 45.6317661, - "lng": 4.8549633, - "phone": "04 78 02 50 50", - "title": "PHARMACIE DE L'EGLISE", - "zipcode": "69360" -}, { - "address": "19 BIS RUE DU PRESIDENT AUGUSTE DURAND", - "category": "2", - "city": "CUGAND", - "id": 18516, - "lat": 47.0658501, - "lng": -1.2543988, - "phone": "02 51 42 15 23", - "title": "PHARMACIE GUIOT", - "zipcode": "85610" -}, { - "address": "19 BIS RUE JEAN PERRIN", - "category": "2", - "city": "SAINT-MAURICE-L'EXIL", - "id": 18810, - "lat": 45.398449, - "lng": 4.780119, - "phone": "04 74 86 28 18", - "title": "PHARMACIE LES CRAIES", - "zipcode": "38550" -}, { - "address": "19 BOULEVARD DES GUILHEMS", - "category": "1", - "city": "PALAVAS-LES-FLOTS", - "id": 15432, - "lat": 43.5268315, - "lng": 3.9268293, - "phone": "04 67 68 28 51", - "title": "GRANDE PHARMACIE PALAVASIENNE", - "zipcode": "34250" -}, { - "address": "19 BOULEVARD DU REDON", - "category": "2", - "city": "MARSEILLE", - "id": 14557, - "lat": 43.2562286, - "lng": 5.4199366, - "phone": "04 91 82 01 46", - "title": "PHARMACIE DU PARC BELFONTAINE", - "zipcode": "13009" -}, { - "address": "19 BOULEVARD FERNAND HOSTACHY", - "category": "2", - "city": "CROISSY-SUR-SEINE", - "id": 18987, - "lat": 48.8780087, - "lng": 2.1446019, - "phone": "01 39 76 21 69", - "title": "PHARMACIE MORNAS", - "zipcode": "78290" -}, { - "address": "19 PLACE ARISTIDE BRIAND", - "category": "1", - "city": "LORIENT", - "id": 19338, - "lat": 47.7481015, - "lng": -3.3635484, - "phone": "02 97 21 65 72", - "title": "PHARMACIE ROBINET", - "zipcode": "56100" -}, { - "address": "19 PLACE DU DOCTEUR MOUFLIER", - "category": "2", - "city": "VILLERS-COTTERETS", - "id": 19559, - "lat": 49.2542258, - "lng": 3.0897404, - "phone": "03 23 96 11 31", - "title": "PHARMACIE SNC CENTRALE", - "zipcode": "2600" -}, { - "address": "19 RUE DE LA MAUVENDIERE", - "category": "1", - "city": "LIMOGES", - "id": 17017, - "lat": 45.8316827, - "lng": 1.2503529, - "phone": "05 55 77 21 54", - "title": "PHARMACIE DE LA MAUVENDIERE", - "zipcode": "87000" -}, { - "address": "19 RUE DE LA REPUBLIQUE", - "category": "2", - "city": "ORLEANS", - "id": 16348, - "lat": 47.9044946, - "lng": 1.9041237, - "phone": "02 38 62 24 56", - "title": "PHARMACIE CENTRALE", - "zipcode": "45000" -}, { - "address": "19 RUE DE LOURMEL", - "category": "1", - "city": "PARIS", - "id": 14801, - "lat": 48.8492266, - "lng": 2.2914519, - "phone": "01 45 78 86 18", - "title": "PHARMACIE PITOUN ZANA", - "zipcode": "75015" -}, { - "address": "19 RUE DE SEVRES", - "category": "2", - "city": "PARIS", - "id": 17963, - "lat": 48.8513699, - "lng": 2.3276466, - "phone": "01 45 48 32 55", - "title": "PHARMACIE DU LUTETIA", - "zipcode": "75006" -}, { - "address": "19 RUE DROUOT", - "category": "2", - "city": "PARIS", - "id": 14743, - "lat": 48.8739241, - "lng": 2.3405646, - "phone": "01 47 70 04 00", - "title": "PHARMACIE DROUOT", - "zipcode": "75009" -}, { - "address": "19 RUE DU COLONEL FABIEN", - "category": "2", - "city": "VALENTON", - "id": 17824, - "lat": 48.7462081, - "lng": 2.4685152, - "phone": "01 43 89 03 27", - "title": "PHARMACIE DU CENTRE VILLE", - "zipcode": "94460" -}, { - "address": "19 RUE DU PRE SAINT GERVAIS CENTRE COMMERCIAL VERPANTIN", - "category": "1", - "city": "PANTIN", - "id": 15954, - "lat": 48.8905538, - "lng": 2.403306, - "phone": "01 48 45 18 53", - "title": "PHARMACIE ASSAAD", - "zipcode": "93500" -}, { - "address": "19 RUE JOUALLAN", - "category": "2", - "city": "SAINT-BRIEUC", - "id": 16517, - "lat": 48.5132851, - "lng": -2.7606752, - "phone": "02 96 33 15 09", - "title": "PHARMACIE COSSON", - "zipcode": "22000" -}, { - "address": "19 RUE JULES FERRY", - "category": "1", - "city": "BRIGNOLES", - "id": 19101, - "lat": 43.406628, - "lng": 6.0634499, - "phone": "04 94 69 00 54", - "title": "PHARMACIE PASCAL", - "zipcode": "83170" -}, { - "address": "19 RUE PIERRE CARBON", - "category": "3", - "city": "FONTAINES-SUR-SAONE", - "id": 15570, - "lat": 45.8335086, - "lng": 4.847705, - "phone": "04 78 22 26 81", - "title": "NOVOPHARMA", - "zipcode": "69270" -}, { - "address": "19 RUE VICTOR HUGO", - "category": "1", - "city": "PONT-L'ABBE", - "id": 17193, - "lat": 47.868961, - "lng": -4.222316, - "phone": "02 98 87 05 47", - "title": "PHARMACIE DE LAMBOUR", - "zipcode": "29120" -}, { - "address": "191 RUE CHAMPIONNET", - "category": "1", - "city": "PARIS", - "id": 14498, - "lat": 48.8940312, - "lng": 2.3325614, - "phone": "01 46 27 37 64", - "title": "PHARMACIE DE L'EDEN", - "zipcode": "75018" -}, { - "address": "191 RUE DU FAUBOURG SAINT ANTOINE", - "category": "2", - "city": "PARIS", - "id": 14816, - "lat": 48.8507002, - "lng": 2.3818427, - "phone": "01 43 72 15 74", - "title": "PHARMACIE STEUER", - "zipcode": "75011" -}, { - "address": "192 AVNUE CHARLES FLOQUET", - "category": "1", - "city": "LE BLANC-MESNIL", - "id": 15760, - "lat": 48.9411735, - "lng": 2.4434932, - "phone": "01 49 39 57 30", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "93150" -}, { - "address": "194 RUE DE LONGPAON", - "category": "2", - "city": "DARNETAL", - "id": 18282, - "lat": 49.4481364, - "lng": 1.1503221, - "phone": "02 35 08 42 19", - "title": "PHARMACIE DUVAL", - "zipcode": "76160" -}, { - "address": "195BIS RUE JEAN JAURES", - "category": "3", - "city": "SAINT-SAULVE", - "id": 17692, - "lat": 50.3708422, - "lng": 3.5574258, - "phone": "03 27 46 20 79", - "title": "PHARMACIE DRESZER", - "zipcode": "59880" -}, { - "address": "196 RUE DE PARIS", - "category": "2", - "city": "MONTREUIL", - "id": 19336, - "lat": 48.8557058, - "lng": 2.4221308, - "phone": "01 42 87 02 64", - "title": "PHARMACIE ROBESPIERRE", - "zipcode": "93100" -}, { - "address": "1965 AVENUE DU MARECHAL JUIN ZONE 2000", - "category": "2", - "city": "NIMES", - "id": 15839, - "lat": 43.8194465, - "lng": 4.3518975, - "phone": "04 66 67 41 05", - "title": "PERIF SANTE", - "zipcode": "30900" -}, { - "address": "199 RUE DU CHEVALERET", - "category": "2", - "city": "PARIS", - "id": 14541, - "lat": 48.8343565, - "lng": 2.3673629, - "phone": "01 45 84 86 18", - "title": "PHARMACIE DU CHEVALERET", - "zipcode": "75013" -}, { - "address": "19BIS RUE ERNEST RENAN", - "category": "1", - "city": "ISSY-LES-MOULINEAUX", - "id": 16772, - "lat": 48.8281368, - "lng": 2.2814622, - "phone": "01 40 93 51 00", - "title": "PHARMACIE DE L HOPITAL", - "zipcode": "92130" -}, { - "address": "1BIS PLACE D'AINE", - "category": "2", - "city": "LIMOGES", - "id": 18046, - "lat": 45.8301916, - "lng": 1.2554657, - "phone": "05 55 34 16 65", - "title": "PHARMACIE DU PALAIS", - "zipcode": "87000" -}, { - "address": "1BIS RUE SAINTE MARTHE", - "category": "1", - "city": "NIORT", - "id": 15585, - "lat": 46.324316, - "lng": -0.462806, - "phone": "05 49 24 43 12", - "title": "PARA NOVA", - "zipcode": "79000" -}, { - "address": "2 4 RUE GABRIEL PERI", - "category": "1", - "city": "SAINT-MARTIN-DU-TERTRE", - "id": 18750, - "lat": 49.1079517, - "lng": 2.3486769, - "phone": "01 30 35 71 44", - "title": "PHARMACIE LAWNICZAK", - "zipcode": "95270" -}, { - "address": "2 ALLEE DE L EST CENTRE COMMERCIAL CORA", - "category": "1", - "city": "LIVRY-GARGAN", - "id": 18251, - "lat": 48.9273071, - "lng": 2.5543536, - "phone": "01 49 36 10 84", - "title": "PHARMACIE DUCHON ET PEZZANA", - "zipcode": "93190" -}, { - "address": "2 ALLEE DES EPICES C.COM ST QUENTIN", - "category": "3", - "city": "MONTIGNY-LE-BRETONNEUX", - "id": 15903, - "lat": 48.7845372, - "lng": 2.0448399, - "phone": "01 30 43 23 73", - "title": "PHARMACIE ADDA PIQUET", - "zipcode": "78180" -}, { - "address": "2 ALLEE EMILE ZOLA CCIAL LECLERC", - "category": "2", - "city": "BLAGNAC", - "id": 15957, - "lat": 43.645909, - "lng": 1.3712657, - "phone": "05 61 71 27 59", - "title": "PHARMACIE ASSOUN OLDAK", - "zipcode": "31700" -}, { - "address": "2 AV DU GEN DE GAULLE", - "category": "1", - "city": "QUIBERON", - "id": 17284, - "lat": 47.4874896, - "lng": -3.1197406, - "phone": "02 97 30 52 62", - "title": "PHARMACIE DE PORT HALIGUEN", - "zipcode": "56170" -}, { - "address": "2 AV FRANCOIS MITTERAND", - "category": "1", - "city": "OISEMONT", - "id": 18235, - "lat": 49.9589741, - "lng": 1.7660918, - "phone": "03 22 25 22 22", - "title": "PHARMACIE DU VIMEU VERT", - "zipcode": "80140" -}, { - "address": "2 AV FRANCOIS MITTERAND", - "category": "2", - "city": "OISEMONT", - "id": 18235, - "lat": 49.9589741, - "lng": 1.7660918, - "phone": "03 22 25 22 22", - "title": "PHARMACIE DU VIMEU VERT", - "zipcode": "80140" -}, { - "address": "2 AV GUSTAVE PICARD", - "category": "1", - "city": "TOURVILLE-LA-RIVIERE", - "id": 15289, - "lat": 49.3295756, - "lng": 1.096851, - "phone": "02 35 74 67 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "76410" -}, { - "address": "2 AVENUE CHARLES DE MASSOT", - "category": "2", - "city": "VALS-PRES-LE-PUY", - "id": 19135, - "lat": 45.0293745, - "lng": 3.876463, - "phone": "04 71 09 21 88", - "title": "PHARMACIE PERRAZI", - "zipcode": "43750" -}, { - "address": "2 AVENUE D ALSACE", - "category": "3", - "city": "AUCH", - "id": 18350, - "lat": 43.6485498, - "lng": 0.5905418, - "phone": "05 62 05 03 44", - "title": "PHARMACIE FIEUX", - "zipcode": "32000" -}, { - "address": "2 AVENUE DAUPHINE", - "category": "2", - "city": "ORLEANS", - "id": 15972, - "lat": 47.8943853, - "lng": 1.9043535, - "phone": "02 38 66 24 96", - "title": "PHARMACIE AUROUX ROUX", - "zipcode": "45000" -}, { - "address": "2 AVENUE DES CITES UNIES C COMMERCIAL INTERMARCHE", - "category": "1", - "city": "PONTIVY", - "id": 17460, - "lat": 48.0521122, - "lng": -2.9581945, - "phone": "02 97 25 02 66", - "title": "PHARMACIE DES CITES UNIES", - "zipcode": "56300" -}, { - "address": "2 AVENUE DES VIGNES", - "category": "2", - "city": "SAINT-JUST-LUZAC", - "id": 17309, - "lat": 45.7987983, - "lng": -1.047933, - "phone": "05 46 85 13 04", - "title": "PHARMACIE DE SAINT JUST", - "zipcode": "17320" -}, { - "address": "2 AVENUE DESGENETTES", - "category": "2", - "city": "SAINT-MAUR-DES-FOSSES", - "id": 17997, - "lat": 48.8070822, - "lng": 2.4714464, - "phone": "01 48 83 29 29", - "title": "PHARMACIE DU MARCHE", - "zipcode": "94100" -}, { - "address": "2 AVENUE DU GRAOUX", - "category": "2", - "city": "BELIN-BELIET", - "id": 18252, - "lat": 44.5064334, - "lng": -0.7965383, - "phone": "05 56 88 00 65", - "title": "PHARMACIE DUCOUT LARTIGUE", - "zipcode": "33830" -}, { - "address": "2 AVENUE DU LAURAGAIS", - "category": "3", - "city": "VERNET", - "id": 18222, - "lat": 43.433278, - "lng": 1.433489, - "phone": "05 61 08 07 36", - "title": "PHARMACIE DU VERNET", - "zipcode": "31810" -}, { - "address": "2 AVENUE JOFFRE", - "category": "1", - "city": "LOURDES", - "id": 19684, - "lat": 43.094496, - "lng": -0.045897, - "phone": "05 62 94 08 23", - "title": "PHARMACIE VARICHON", - "zipcode": "65100" -}, { - "address": "2 AVENUE ROBERT DAUGEY CENTRE COMMERCIAL", - "category": "1", - "city": "LUYNES", - "id": 17308, - "lat": 43.4853317, - "lng": 5.4173759, - "phone": "04 42 24 11 75", - "title": "PHARMACIE DE SAINT JEAN", - "zipcode": "13080" -}, { - "address": "2 B RUE DES CHARRONS", - "category": "2", - "city": "MARZY", - "id": 18728, - "lat": 46.9809622, - "lng": 3.0936145, - "phone": "03 86 59 33 62", - "title": "PHARMACIE LARROQUE", - "zipcode": "58180" -}, { - "address": "2 BIS QUAI DU GENERAL DE GAULLE", - "category": "2", - "city": "SANARY-SUR-MER", - "id": 16735, - "lat": 43.118006, - "lng": 5.8015403, - "phone": "04 94 74 11 32", - "title": "PHARMACIE DE L EGLISE", - "zipcode": "83110" -}, { - "address": "2 BOULEVARD BEL AIR", - "category": "2", - "city": "LIMOGES", - "id": 19815, - "lat": 45.8192542, - "lng": 1.2511819, - "phone": "05 55 34 11 56", - "title": "PHARMACIE DE L EUROPE-PHARMA SEL LIMOGES", - "zipcode": "87000" -}, { - "address": "2 BOULEVARD BOMPARD", - "category": "2", - "city": "MARSEILLE", - "id": 14507, - "lat": 43.2849693, - "lng": 5.359915, - "phone": "04 91 52 13 58", - "title": "PHARMACIE D'ENDOUME", - "zipcode": "13007" -}, { - "address": "2 BOULEVARD DE DIEPHOLZ", - "category": "2", - "city": "THOUARS", - "id": 15574, - "lat": 46.9820096, - "lng": -0.1964396, - "phone": "05 49 66 30 34", - "title": "PARA U", - "zipcode": "79100" -}, { - "address": "2 BOURG ROUTE DE QUIMPER", - "category": "3", - "city": "PLEUVEN", - "id": 18778, - "lat": 47.906823, - "lng": -4.045824, - "phone": "02 98 54 80 79", - "title": "PHARMACIE LECUP", - "zipcode": "29170" -}, { - "address": "2 CHEMIN DE LA PRAIRIE", - "category": "1", - "city": "SAINT-MARTIN-DE-LONDRES", - "id": 19558, - "lat": 43.7946315, - "lng": 3.7367215, - "phone": "04 67 55 00 14", - "title": "PHARMACIE SNC CAUSSE", - "zipcode": "34380" -}, { - "address": "2 CHEMIN DU VALLON VERT", - "category": "2", - "city": "MARSEILLE", - "id": 14530, - "lat": 43.3348518, - "lng": 5.4505532, - "phone": "04 91 68 15 32", - "title": "PHARMACIE DESMOULINS", - "zipcode": "13013" -}, { - "address": "2 CHEMIN ROYE", - "category": "2", - "city": "SEILH", - "id": 16868, - "lat": 43.6890833, - "lng": 1.3594706, - "phone": "05 62 21 06 46", - "title": "PHARMACIE DE LA CROIX DE SEILH", - "zipcode": "31840" -}, { - "address": "2 PARVIS DE LA DEFENSE CTRE COM LES 4 TEMPS QUAI B56", - "category": "3", - "city": "PUTEAUX", - "id": 17390, - "lat": 48.8902324, - "lng": 2.2361674, - "phone": "01 47 73 56 92", - "title": "PHARMACIE DES 4 TEMPS", - "zipcode": "92800" -}, { - "address": "2 PLACE ACHILLE JUBINAL", - "category": "1", - "city": "BAGNERES-DE-BIGORRE", - "id": 19624, - "lat": 43.0630402, - "lng": 0.1501754, - "phone": "05 62 91 00 29", - "title": "PHARMACIE THERMALE", - "zipcode": "65200" -}, { - "address": "2 PLACE ANDRE MALRAUX", - "category": "1", - "city": "PARIS", - "id": 14565, - "lat": 48.8640368, - "lng": 2.3357595, - "phone": "01 42 96 29 33", - "title": "PHARMACIE DU THEATRE FRANCAIS", - "zipcode": "75001" -}, { - "address": "2 PLACE DE L EGLISE", - "category": "2", - "city": "CHARBONNIERES-LES-BAINS", - "id": 18631, - "lat": 45.7784279, - "lng": 4.7441372, - "phone": "04 78 87 05 49", - "title": "PHARMACIE JOUVE", - "zipcode": "69260" -}, { - "address": "2 PLACE DE L HOTEL DE VILLE", - "category": "2", - "city": "LA CHATRE", - "id": 17217, - "lat": 46.5817492, - "lng": 1.9868193, - "phone": "02 54 48 00 23", - "title": "PHARMACIE DE L'HOTEL DE VILL", - "zipcode": "36400" -}, { - "address": "2 PLACE DE LA DEFENCE IMMEUBLE CNIT", - "category": "2", - "city": "PUTEAUX", - "id": 15852, - "lat": 48.8929569, - "lng": 2.2384426, - "phone": "01 46 98 02 85", - "title": "PHARMA CNIT", - "zipcode": "92800" -}, { - "address": "2 PLACE DE LA LIBERATION", - "category": "1", - "city": "LA FERTE-ALAIS", - "id": 15442, - "lat": 48.483705, - "lng": 2.3475216, - "phone": "01 64 57 78 49", - "title": "GRANDE PHARMACIE", - "zipcode": "91590" -}, { - "address": "2 PLACE DE LA REPUBLIQUE", - "category": "3", - "city": "SAINT-BENIN-D'AZY", - "id": 17406, - "lat": 46.9989856, - "lng": 3.3928509, - "phone": "03 86 58 40 58", - "title": "PHARMACIE DES AMOGNES", - "zipcode": "58270" -}, { - "address": "2 PLACE DE LISBONNE CTRE COML ODYSSEUM PAKING ESPACE PENELOPE", - "category": "2", - "city": "MONTPELLIER", - "id": 15541, - "lat": 43.6033866, - "lng": 3.9204039, - "phone": "04 67 10 89 09", - "title": "LA GRANDE PHARMACIE ODYSSEUM", - "zipcode": "34000" -}, { - "address": "2 PLACE DES MARELLES", - "category": "3", - "city": "CHANTEPIE", - "id": 19931, - "lat": 48.0877522, - "lng": -1.6208663, - "phone": "02 99 41 44 77", - "title": "THORRE PHARMACIE DE CHANTEPIE", - "zipcode": "35135" -}, { - "address": "2 PLACE DU COMTE HAYMON", - "category": "1", - "city": "CORBEIL-ESSONNES", - "id": 16353, - "lat": 48.612986, - "lng": 2.4830256, - "phone": "01 64 96 02 75", - "title": "PHARMACIE CENTRALE", - "zipcode": "91100" -}, { - "address": "2 PLACE DU VIEUX MARCHE", - "category": "1", - "city": "ROUEN", - "id": 17521, - "lat": 49.4427708, - "lng": 1.0890585, - "phone": "02 35 71 32 62", - "title": "PHARMACIE DES HALLETTES", - "zipcode": "76000" -}, { - "address": "2 PLACE JACQUES FROMENT", - "category": "1", - "city": "PARIS", - "id": 14729, - "lat": 48.8907008, - "lng": 2.3313317, - "phone": "01 46 27 29 54", - "title": "PHARMACIE CHARBONNIER", - "zipcode": "75018" -}, { - "address": "2 QUAI CARNOT", - "category": "3", - "city": "CHATEAULIN", - "id": 16350, - "lat": 48.1966183, - "lng": -4.0937656, - "phone": "02 98 86 21 56", - "title": "PHARMACIE CENTRALE", - "zipcode": "29150" -}, { - "address": "2 ROUTE DE ROUEN", - "category": "2", - "city": "GRANDVILLIERS", - "id": 16219, - "lat": 49.6635261, - "lng": 1.9353005, - "phone": "03 44 46 63 07", - "title": "PHARMACIE BRISSET PAQUE", - "zipcode": "60210" -}, { - "address": "2 RUE DE GOMICOURT", - "category": "2", - "city": "ALBERT", - "id": 18274, - "lat": 50.0034214, - "lng": 2.64915, - "phone": "03 22 75 12 71", - "title": "PHARMACIE DUPLAN LAMBEAUX", - "zipcode": "80300" -}, { - "address": "2 RUE DE L AIGLE", - "category": "2", - "city": "LA GARENNE-COLOMBES", - "id": 16705, - "lat": 48.9108924, - "lng": 2.2539853, - "phone": "01 42 42 15 25", - "title": "PHARMACIE DE L AIGLE", - "zipcode": "92250" -}, { - "address": "2 RUE DE L EGLISE", - "category": "2", - "city": "YERRES", - "id": 16063, - "lat": 48.7159203, - "lng": 2.4915342, - "phone": "01 69 48 45 43", - "title": "PHARMACIE BERENGUER", - "zipcode": "91330" -}, { - "address": "2 RUE DE LA POSTE", - "category": "1", - "city": "EU", - "id": 18486, - "lat": 50.0499433, - "lng": 1.4201079, - "phone": "02 35 86 02 89", - "title": "PHARMACIE GRANDSERT", - "zipcode": "76260" -}, { - "address": "2 RUE DE LA POSTE", - "category": "3", - "city": "EU", - "id": 18486, - "lat": 50.0499433, - "lng": 1.4201079, - "phone": "02 35 86 02 89", - "title": "PHARMACIE GRANDSERT", - "zipcode": "76260" -}, { - "address": "2 RUE DE LA RIVE", - "category": "1", - "city": "CHALLANS", - "id": 17127, - "lat": 46.8527121, - "lng": -1.8928396, - "phone": "02 28 12 07 30", - "title": "PHARMACIE DE LA RIVE", - "zipcode": "85300" -}, { - "address": "2 RUE DES CARMES", - "category": "2", - "city": "PAVIE", - "id": 18330, - "lat": 43.6104723, - "lng": 0.5905882, - "phone": "05 62 05 20 52", - "title": "PHARMACIE FASSERO", - "zipcode": "32550" -}, { - "address": "2 RUE DES TILLEULS", - "category": "1", - "city": "EAUBONNE", - "id": 17632, - "lat": 48.9922936, - "lng": 2.2807444, - "phone": "01 39 59 01 18", - "title": "PHARMACIE DES TILLEULS", - "zipcode": "95600" -}, { - "address": "2 RUE DU MARECHAL MAUNOURY", - "category": "2", - "city": "VINCENNES", - "id": 17647, - "lat": 48.8439571, - "lng": 2.4310323, - "phone": "01 43 28 05 81", - "title": "PHARMACIE DES VIGNERONS", - "zipcode": "94300" -}, { - "address": "2 RUE DU MONT VALERIEN", - "category": "2", - "city": "SURESNES", - "id": 18619, - "lat": 48.8703265, - "lng": 2.2268213, - "phone": "01 45 06 76 49", - "title": "PHARMACIE JEGOU", - "zipcode": "92150" -}, { - "address": "2 RUE DU PONT DE LA GRAVIERE", - "category": "3", - "city": "CHAMALIERES", - "id": 18435, - "lat": 45.775805, - "lng": 3.0665224, - "phone": "04 73 37 31 51", - "title": "PHARMACIE GENILLON", - "zipcode": "63400" -}, { - "address": "2 RUE EDITH CAVELL", - "category": "2", - "city": "RENNES", - "id": 18842, - "lat": 48.1112176, - "lng": -1.6778199, - "phone": "02 99 79 17 93", - "title": "PHARMACIE LUCAS", - "zipcode": "35000" -}, { - "address": "2 RUE EUGENE HENAFF", - "category": "1", - "city": "VITRY-SUR-SEINE", - "id": 15755, - "lat": 48.7953981, - "lng": 2.4155414, - "phone": "01 47 18 19 20", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "94400" -}, { - "address": "2 RUE JEAN JAURES", - "category": "1", - "city": "BRUAY-LA-BUISSIERE", - "id": 18638, - "lat": 50.4904659, - "lng": 2.5644602, - "phone": "03 21 62 40 76", - "title": "PHARMACIE JULIE HAIGNERE", - "zipcode": "62700" -}, { - "address": "2 RUE LAVOISIER 17 201", - "category": "2", - "city": "ROYAN", - "id": 15679, - "lat": 45.6308221, - "lng": -0.9937508, - "phone": "05 46 05 11 89", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "17200" -}, { - "address": "2 RUE LEON GAMBETTA", - "category": "3", - "city": "LE QUESNOY", - "id": 17607, - "lat": 50.2473918, - "lng": 3.6374132, - "phone": "03 27 49 03 26", - "title": "PHARMACIE DES REMPARTS", - "zipcode": "59530" -}, { - "address": "2 RUE MENDES FRANCE CENTRE COMMERCIAL AUCHAN", - "category": "2", - "city": "SAINT-SEBASTIEN-SUR-LOIRE", - "id": 19588, - "lat": 47.191192, - "lng": -1.493565, - "phone": "02 40 03 15 95", - "title": "PHARMACIE ST SEB SNC", - "zipcode": "44230" -}, { - "address": "2 RUE PEYRESC", - "category": "2", - "city": "AIX-EN-PROVENCE", - "id": 18504, - "lat": 43.5290132, - "lng": 5.4507332, - "phone": "04 42 38 18 60", - "title": "PHARMACIE GUIGONNET CUVELLE", - "zipcode": "13100" -}, { - "address": "2 RUE PIERRE DEMOURS", - "category": "1", - "city": "PARIS", - "id": 14421, - "lat": 48.8797318, - "lng": 2.2914705, - "phone": "01 45 74 65 23", - "title": "PHARMACIE CAILLAULT", - "zipcode": "75017" -}, { - "address": "2 RUE WINSTON CHURCHILL CENTRE COMMERCIAL LE COLVERT", - "category": "2", - "city": "AMIENS", - "id": 18696, - "lat": 49.9108239, - "lng": 2.3068043, - "phone": "03 22 69 31 31", - "title": "PHARMACIE LACOUDRE", - "zipcode": "80000" -}, { - "address": "2 RUE WINSTON CHURCHILL CENTRE COMMERCIAL LE COLVERT", - "category": "3", - "city": "AMIENS", - "id": 18696, - "lat": 49.9108239, - "lng": 2.3068043, - "phone": "03 22 69 31 31", - "title": "PHARMACIE LACOUDRE", - "zipcode": "80000" -}, { - "address": "2-4 PLACE DE BRETAGNE", - "category": "3", - "city": "MAUREPAS", - "id": 16628, - "lat": 48.7642671, - "lng": 1.933652, - "phone": "01 30 50 30 35", - "title": "PHARMACIE DE BRETAGNE", - "zipcode": "78310" -}, { - "address": "20 22 RUE LEON GAMBETTA", - "category": "1", - "city": "ARRAS", - "id": 17098, - "lat": 50.288102, - "lng": 2.778612, - "phone": "03 21 23 57 44", - "title": "PHARMACIE DE LA POSTE", - "zipcode": "62000" -}, { - "address": "20 22 RUE PIERRE DELANSORNE", - "category": "1", - "city": "ARRAS", - "id": 19144, - "lat": 50.2906727, - "lng": 2.7762834, - "phone": "03 21 51 31 10", - "title": "PHARMACIE PETIT GILLES", - "zipcode": "62000" -}, { - "address": "20 ALLEE MARINES", - "category": "2", - "city": "CAPBRETON", - "id": 18980, - "lat": 43.6404291, - "lng": -1.4320734, - "phone": "05 58 72 11 19", - "title": "PHARMACIE MOREAUX DUCASSOU", - "zipcode": "40130" -}, { - "address": "20 AVENUE 1ERE ARMEE FRANCAISE", - "category": "1", - "city": "MONTMORENCY", - "id": 18646, - "lat": 49.001304, - "lng": 2.3212376, - "phone": "01 39 89 49 32", - "title": "PHARMACIE KASSENTINI", - "zipcode": "95160" -}, { - "address": "20 AVENUE DE LA LIBERATION", - "category": "3", - "city": "MONISTROL-SUR-LOIRE", - "id": 19342, - "lat": 45.291623, - "lng": 4.1720129, - "phone": "04 71 66 55 51", - "title": "PHARMACIE ROCHE", - "zipcode": "43120" -}, { - "address": "20 AVENUE DE LA REPUBLIQUE", - "category": "2", - "city": "CEBAZAT", - "id": 18324, - "lat": 45.8268566, - "lng": 3.1026546, - "phone": "04 73 24 30 77", - "title": "PHARMACIE F GUINARD", - "zipcode": "63118" -}, { - "address": "20 AVENUE DE SAINTES", - "category": "2", - "city": "COGNAC", - "id": 19428, - "lat": 45.6987556, - "lng": -0.344162, - "phone": "05 45 82 03 72", - "title": "PHARMACIE SAINT JACQUES", - "zipcode": "16100" -}, { - "address": "20 BOULEVARD EMILE LOUBET", - "category": "2", - "city": "FUVEAU", - "id": 18165, - "lat": 43.4538688, - "lng": 5.5614338, - "phone": "04 42 68 18 91", - "title": "PHARMACIE DU SOLEIL", - "zipcode": "13710" -}, { - "address": "20 BOULEVARD LAENNEC", - "category": "3", - "city": "PLOERMEL", - "id": 18699, - "lat": 47.9330986, - "lng": -2.3942867, - "phone": "02 97 93 64 71", - "title": "PHARMACIE LAENNEC", - "zipcode": "56800" -}, { - "address": "20 COURS BARTHELEMY", - "category": "2", - "city": "AUBAGNE", - "id": 15991, - "lat": 43.292931, - "lng": 5.5658117, - "phone": "04 42 03 09 09", - "title": "PHARMACIE BANCHET", - "zipcode": "13400" -}, { - "address": "20 GRANDE RUE", - "category": "1", - "city": "CONDRIEU", - "id": 17546, - "lat": 45.4624941, - "lng": 4.7666808, - "phone": "04 74 59 50 30", - "title": "PHARMACIE DES LONES", - "zipcode": "69420" -}, { - "address": "20 PLACE CHARLES DE GAULLE", - "category": "2", - "city": "SAINT-MAUR-DES-FOSSES", - "id": 16989, - "lat": 48.8045155, - "lng": 2.4855637, - "phone": "01 48 83 00 43", - "title": "PHARMACIE DE LA MAIRIE", - "zipcode": "94100" -}, { - "address": "20 PLACE SAINT JEAN", - "category": "2", - "city": "MELUN", - "id": 19439, - "lat": 48.5387813, - "lng": 2.6630631, - "phone": "01 64 52 02 32", - "title": "PHARMACIE SAINT JEAN", - "zipcode": "77000" -}, { - "address": "20 PLACE SAINTE ANNE", - "category": "3", - "city": "TREGASTEL", - "id": 18748, - "lat": 48.8266362, - "lng": -3.5106358, - "phone": "02 96 23 49 99", - "title": "PHARMACIE LAVANANT", - "zipcode": "22730" -}, { - "address": "20 RUE GABRIEL PERI", - "category": "1", - "city": "LEVALLOIS-PERRET", - "id": 15561, - "lat": 48.8904899, - "lng": 2.2893732, - "phone": "01 47 57 67 95", - "title": "MONOPRIX N°1214", - "zipcode": "92300" -}, { - "address": "20 RUE GEORGES CLEMENCEAU", - "category": "2", - "city": "VICHY", - "id": 19868, - "lat": 46.124899, - "lng": 3.4227393, - "phone": "04 70 98 20 98", - "title": "PHARMACIE LAFAYETTE CENTRALE", - "zipcode": "3200" -}, { - "address": "20 RUE JULES CESAR", - "category": "3", - "city": "GIEN", - "id": 19221, - "lat": 47.6965369, - "lng": 2.625266, - "phone": "02 38 67 22 40", - "title": "PHARMACIE PRET", - "zipcode": "45500" -}, { - "address": "20 RUE LOUIS TALAMONI", - "category": "1", - "city": "CHAMPIGNY-SUR-MARNE", - "id": 16363, - "lat": 48.811443, - "lng": 2.5184735, - "phone": "01 47 06 00 65", - "title": "PHARMACIE CENTRALE", - "zipcode": "94500" -}, { - "address": "20 RUE MAURICE AUDIN", - "category": "2", - "city": "LE BLANC-MESNIL", - "id": 17631, - "lat": 48.9473846, - "lng": 2.4505954, - "phone": "01 48 67 07 81", - "title": "PHARMACIE DES TILLEULS", - "zipcode": "93150" -}, { - "address": "20 RUE VICTOR HUGO", - "category": "2", - "city": "LA TALAUDIERE", - "id": 19887, - "lat": 45.4801995, - "lng": 4.4326874, - "phone": "04 77 53 60 22", - "title": "PHARMACIE TROISGROS SNC", - "zipcode": "42350" -}, { - "address": "20 ZONE INDUSTRIELLE DE JALDAY", - "category": "1", - "city": "SAINT-JEAN-DE-LUZ", - "id": 15591, - "lat": 43.4052242, - "lng": -1.6267486, - "phone": "05 59 85 19 60", - "title": "PARAJALDAI", - "zipcode": "64500" -}, { - "address": "202 RUE DU CHATEAU DES RENTIERS", - "category": "1", - "city": "PARIS", - "id": 14408, - "lat": 48.8312784, - "lng": 2.3609931, - "phone": "01 45 85 15 08", - "title": "PHARMACIE BICHET", - "zipcode": "75013" -}, { - "address": "203 AV ALFRED MOTTE", - "category": "1", - "city": "ROUBAIX", - "id": 17522, - "lat": 50.6757937, - "lng": 3.1940374, - "phone": "03 20 81 96 81", - "title": "PHARMACIE DES HAUTS CHAMPS", - "zipcode": "59100" -}, { - "address": "203 RUE D ALESIA", - "category": "2", - "city": "PARIS", - "id": 14662, - "lat": 48.8313935, - "lng": 2.3146877, - "phone": "01 45 43 15 54", - "title": "PHARMACIE ROUSSY", - "zipcode": "75014" -}, { - "address": "204 B Centre Cial Agora", - "category": "3", - "city": "EVRY", - "id": 15159, - "lat": 48.6279161, - "lng": 2.4262021, - "phone": "01 60 77 32 15", - "title": "PHARMACIE RUSSO", - "zipcode": "91000" -}, { - "address": "204 RUE DES COMBATTANTS EN AFRIQUE DU NORD", - "category": "2", - "city": "FREJUS", - "id": 17733, - "lat": 43.4390247, - "lng": 6.7216615, - "phone": "04 94 40 89 32", - "title": "PHARMACIE DU CAIS", - "zipcode": "83600" -}, { - "address": "21 23 AVENUE DU GENERAL GALLIE", - "category": "1", - "city": "SAINTE-SAVINE", - "id": 18067, - "lat": 48.2942409, - "lng": 4.0598388, - "phone": "03 25 79 34 69", - "title": "PHARMACIE DU PARVIS", - "zipcode": "10300" -}, { - "address": "21 ALLEE DES FRERES LUMIERES CTRE COM DE LA PEPINIER", - "category": "2", - "city": "SAINT-SAULVE", - "id": 16523, - "lat": 50.3659778, - "lng": 3.557924, - "phone": "03 27 42 92 47", - "title": "PHARMACIE COULON DELPACE", - "zipcode": "59880" -}, { - "address": "21 AVENUE DE LA GARE", - "category": "2", - "city": "VILLEPINTE", - "id": 15559, - "lat": 48.9456952, - "lng": 2.5644988, - "phone": "01 48 61 59 99", - "title": "MICROMEGAS", - "zipcode": "93420" -}, { - "address": "21 AVENUE GABRIEL PERI", - "category": "2", - "city": "LE PRADET", - "id": 18765, - "lat": 43.106583, - "lng": 6.022692, - "phone": "04 94 21 72 93", - "title": "PHARMACIE LE SAGITTAIRE", - "zipcode": "83220" -}, { - "address": "21 AVENUE KENNEDY", - "category": "2", - "city": "BIARRITZ", - "id": 18648, - "lat": 43.4724593, - "lng": -1.5556178, - "phone": "05 59 41 74 14", - "title": "PHARMACIE KENNEDY", - "zipcode": "64200" -}, { - "address": "21 BD GEORGES CLEMENCEAU", - "category": "3", - "city": "LA BOURBOULE", - "id": 19700, - "lat": 45.5886656, - "lng": 2.7379271, - "phone": "04 73 81 04 62", - "title": "PHARMACIE VERDIER", - "zipcode": "63150" -}, { - "address": "21 CEHMIN DES 9 PONTS", - "category": "3", - "city": "VERGEZE", - "id": 19498, - "lat": 43.740973, - "lng": 4.2165039, - "phone": "04 66 73 71 00", - "title": "PHARMACIE SALEIL MONTICELLI", - "zipcode": "30310" -}, { - "address": "21 COURS DES QUAIS", - "category": "1", - "city": "LA TRINITE-SUR-MER", - "id": 18499, - "lat": 47.5872695, - "lng": -3.0277953, - "phone": "02 97 55 72 38", - "title": "PHARMACIE GUENIN", - "zipcode": "56470" -}, { - "address": "21 ESPLANADE DU GRAND SIECLE", - "category": "2", - "city": "VERSAILLES", - "id": 18477, - "lat": 48.8038464, - "lng": 2.1564977, - "phone": "01 39 50 80 81", - "title": "PHARMACIE GRAND SIECLE", - "zipcode": "78000" -}, { - "address": "21 PLACE CENDRILLON", - "category": "2", - "city": "GUYANCOURT", - "id": 18110, - "lat": 48.7741509, - "lng": 2.0758129, - "phone": "01 30 43 78 76", - "title": "PHARMACIE DU PONT DU ROUTOIR", - "zipcode": "78280" -}, { - "address": "21 PLACE DU THEATRE", - "category": "2", - "city": "ARRAS", - "id": 15505, - "lat": 50.2902934, - "lng": 2.7731897, - "phone": "03 21 21 36 36", - "title": "GRANDE PHARMACIE NORMALE", - "zipcode": "62000" -}, { - "address": "21 PLACE FELIX FAURE", - "category": "3", - "city": "RAMBOUILLET", - "id": 18056, - "lat": 48.6433509, - "lng": 1.8260723, - "phone": "01 34 83 00 31", - "title": "PHARMACIE DU PARC", - "zipcode": "78120" -}, { - "address": "21 RUE CARNOT", - "category": "2", - "city": "MONTCEAU-LES-MINES", - "id": 18509, - "lat": 46.6737883, - "lng": 4.3632064, - "phone": "03 85 57 34 84", - "title": "PHARMACIE GUILLAUMIN", - "zipcode": "71300" -}, { - "address": "21 RUE DE LA PAROISSE", - "category": "2", - "city": "FONTAINEBLEAU", - "id": 17990, - "lat": 48.405826, - "lng": 2.700251, - "phone": "01 64 22 22 66", - "title": "PHARMACIE DU MARCHE", - "zipcode": "77300" -}, { - "address": "21 RUE DE PARIS", - "category": "1", - "city": "HERBLAY", - "id": 19005, - "lat": 48.9920767, - "lng": 2.168103, - "phone": "01 39 97 15 91", - "title": "PHARMACIE MURAZ", - "zipcode": "95220" -}, { - "address": "21 RUE DE POMMARD", - "category": "2", - "city": "PARIS", - "id": 14749, - "lat": 48.8360077, - "lng": 2.3842238, - "phone": "01 53 33 01 02", - "title": "PHARMACIE DU PARC", - "zipcode": "75012" -}, { - "address": "21 RUE DU GRAND SULLY", - "category": "2", - "city": "SULLY-SUR-LOIRE", - "id": 18480, - "lat": 47.7661102, - "lng": 2.3744047, - "phone": "02 38 36 27 31", - "title": "PHARMACIE GRAND SULLY", - "zipcode": "45600" -}, { - "address": "21 RUE ERNEST COGNACQ", - "category": "1", - "city": "LEVALLOIS-PERRET", - "id": 18236, - "lat": 48.8962627, - "lng": 2.2767424, - "phone": "01 47 57 16 14", - "title": "PHARMACIE DU VINCI", - "zipcode": "92300" -}, { - "address": "21 RUE EUGENE DOR LA PALLICE", - "category": "2", - "city": "LA ROCHELLE", - "id": 17036, - "lat": 46.1629319, - "lng": -1.20898, - "phone": "05 46 42 60 58", - "title": "PHARMACIE DE LA PALLICE", - "zipcode": "17000" -}, { - "address": "21 RUE JULES MICHELET", - "category": "2", - "city": "COLOMBES", - "id": 15759, - "lat": 48.9322396, - "lng": 2.2684304, - "phone": "01 46 49 44 00", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "92700" -}, { - "address": "21 RUE SAINT ANTOINE", - "category": "3", - "city": "PARIS", - "id": 14401, - "lat": 48.8535216, - "lng": 2.3657377, - "phone": "01 42 72 04 75", - "title": "PHARMACIE BATTINO BORGEL", - "zipcode": "75004" -}, { - "address": "212 RUE HERMINE", - "category": "3", - "city": "BURY", - "id": 19509, - "lat": 49.3203043, - "lng": 2.3286733, - "phone": "03 44 56 52 55", - "title": "PHARMACIE SARMIENTO J.J", - "zipcode": "60250" -}, { - "address": "215 AV DU COMTAT VENAISSIN", - "category": "1", - "city": "CARPENTRAS", - "id": 16749, - "lat": 44.0514744, - "lng": 5.0536316, - "phone": "04 90 63 13 20", - "title": "PHARMACIE DE L ESCULAPE", - "zipcode": "84200" -}, { - "address": "216 AVENUE ARISTIDE BRIAND", - "category": "2", - "city": "ROBION", - "id": 19472, - "lat": 43.8477401, - "lng": 5.1085401, - "phone": "04 90 76 60 63", - "title": "PHARMACIE SAINT ROCH", - "zipcode": "84440" -}, { - "address": "217 RUE LA FAYETTE", - "category": "2", - "city": "PARIS", - "id": 14383, - "lat": 48.8816356, - "lng": 2.364955, - "phone": "01 46 07 86 44", - "title": "PHARMACIE 217", - "zipcode": "75010" -}, { - "address": "219 AVENUE DES ALLIES", - "category": "2", - "city": "CAVALAIRE-SUR-MER", - "id": 17911, - "lat": 43.1720985, - "lng": 6.5301973, - "phone": "04 94 64 00 21", - "title": "PHARMACIE DU GOLFE", - "zipcode": "83240" -}, { - "address": "219 BIS BOULEVARD JEAN JAURES", - "category": "3", - "city": "BOULOGNE-BILLANCOURT", - "id": 15500, - "lat": 48.8322177, - "lng": 2.2445258, - "phone": "01 46 21 12 03", - "title": "GRANDE PHARMACIE JAURES", - "zipcode": "92100" -}, { - "address": "22 AVENUE CHARLES MONNIER", - "category": "2", - "city": "CESSON", - "id": 15909, - "lat": 48.5629024, - "lng": 2.6052681, - "phone": "01 60 63 21 58", - "title": "PHARMACIE ALBARET", - "zipcode": "77240" -}, { - "address": "22 24 RUE BEAUVAU", - "category": "1", - "city": "MARSEILLE", - "id": 14472, - "lat": 43.2939553, - "lng": 5.3754377, - "phone": "04 91 33 32 20", - "title": "PHARMACIE DE L OPERA", - "zipcode": "13001" -}, { - "address": "22 AVENUE ARISTIDE BRIAND", - "category": "1", - "city": "CARRY-LE-ROUET", - "id": 17751, - "lat": 43.3317966, - "lng": 5.152059, - "phone": "04 42 44 57 77", - "title": "PHARMACIE DU CENTRE", - "zipcode": "13620" -}, { - "address": "22 AVENUE DE L EUROPE", - "category": "2", - "city": "ANNONAY", - "id": 16760, - "lat": 45.2419376, - "lng": 4.6715936, - "phone": "04 75 33 49 15", - "title": "PHARMACIE DE L EUROPE", - "zipcode": "7100" -}, { - "address": "22 AVENUE DOCTEUR JEAN LAMBERT", - "category": "2", - "city": "VIC-SUR-CERE", - "id": 18914, - "lat": 44.9800633, - "lng": 2.6250275, - "phone": "04 71 47 51 72", - "title": "PHARMACIE MAURS", - "zipcode": "15800" -}, { - "address": "22 BOULEVARD DE L ALMONT", - "category": "2", - "city": "MELUN", - "id": 19513, - "lat": 48.5430078, - "lng": 2.6791151, - "phone": "01 60 68 79 34", - "title": "PHARMACIE SAUVAGE", - "zipcode": "77000" -}, { - "address": "22 PLACE DE LA LIBERTE", - "category": "2", - "city": "SIN-LE-NOBLE", - "id": 19683, - "lat": 50.3622767, - "lng": 3.1150169, - "phone": "03 27 88 61 85", - "title": "PHARMACIE VANHILLE GAUDET", - "zipcode": "59450" -}, { - "address": "22 ROUTE DE CHAUNY", - "category": "1", - "city": "HAM", - "id": 16690, - "lat": 49.7412348, - "lng": 3.0891138, - "phone": "03 23 81 16 80", - "title": "PHARMACIE DE HAM", - "zipcode": "80400" -}, { - "address": "22 ROUTE DE CORLEY", - "category": "1", - "city": "GUINGAMP", - "id": 16724, - "lat": 48.5547916, - "lng": -3.1502271, - "phone": "02 96 43 71 85", - "title": "PHARMACIE DE L AVENIR", - "zipcode": "22200" -}, { - "address": "22 ROUTE DE VARVANNES", - "category": "1", - "city": "VAL-DE-SAANE", - "id": 19542, - "lat": 49.6985994, - "lng": 0.9639746, - "phone": "02 35 32 31 85", - "title": "PHARMACIE SENECAL", - "zipcode": "76890" -}, { - "address": "22 RUE DE L ARONDE", - "category": "1", - "city": "CLAIROIX", - "id": 17908, - "lat": 49.4415052, - "lng": 2.8452821, - "phone": "03 44 83 29 00", - "title": "PHARMACIE DU GINKGO", - "zipcode": "60280" -}, { - "address": "22 RUE DE LA CROIX AUX MERLES", - "category": "2", - "city": "SAINT-CAST-LE-GUILDO", - "id": 16439, - "lat": 48.582305, - "lng": -2.2347522, - "phone": "02 96 41 17 26", - "title": "PHARMACIE CHARRUEY", - "zipcode": "22380" -}, { - "address": "22 RUE DES SARRAZINS", - "category": "2", - "city": "LILLE", - "id": 19745, - "lat": 50.6254598, - "lng": 3.0501491, - "phone": "03 20 57 21 36", - "title": "PHARMACIE WAMBERGUE FOREST", - "zipcode": "59000" -}, { - "address": "22 RUE DU GENERAL LECLERC", - "category": "2", - "city": "NANGIS", - "id": 16958, - "lat": 48.5564005, - "lng": 3.0121636, - "phone": "01 64 08 00 23", - "title": "PHARMACIE DE LA HALLE", - "zipcode": "77370" -}, { - "address": "22 RUE DU MARECHAL DE BOUFFLERS", - "category": "3", - "city": "SONGEONS", - "id": 16959, - "lat": 49.5474992, - "lng": 1.8542918, - "phone": "03 44 82 30 36", - "title": "PHARMACIE DE LA HALLE", - "zipcode": "60380" -}, { - "address": "22 RUE JEAN JAURES", - "category": "1", - "city": "VILLEJUIF", - "id": 17482, - "lat": 48.7954211, - "lng": 2.3661967, - "phone": "01 46 77 61 22", - "title": "PHARMACIE DES ECOLES", - "zipcode": "94800" -}, { - "address": "22 RUE ROGER SALENGRO", - "category": "2", - "city": "HOUDAIN", - "id": 19751, - "lat": 50.4519873, - "lng": 2.5381887, - "phone": "03 21 65 86 87", - "title": "PHARMACIE WESTERLOPPE", - "zipcode": "62150" -}, { - "address": "220 AVENUE DU DR CLAUDE BAILLET 30918 NIMES CEDEX 2", - "category": "1", - "city": "NIMES", - "id": 15110, - "lat": 43.813092, - "lng": 4.36252, - "phone": "04 66 27 74 00", - "title": "DISTRIBUTION CASINO FRANCE CG222", - "zipcode": "30000" -}, { - "address": "221 BOULEVARD GALLIENI", - "category": "2", - "city": "VILLENEUVE-LA-GARENNE", - "id": 16396, - "lat": 48.9347637, - "lng": 2.3327328, - "phone": "01 47 98 59 32", - "title": "PHARMACIE CENTRALE LEBEAU", - "zipcode": "92390" -}, { - "address": "223 ROUTE D AGEN", - "category": "1", - "city": "AUCH", - "id": 19787, - "lat": 43.661868, - "lng": 0.5995448, - "phone": "05 62 05 34 71", - "title": "PHARMACIE AGNES MAUROUX LEYGUE", - "zipcode": "32000" -}, { - "address": "224 ROUTE DE PERRIER", - "category": "2", - "city": "ISSOIRE", - "id": 18766, - "lat": 45.5437142, - "lng": 3.2355949, - "phone": "04 73 89 07 56", - "title": "PHARMACIE LE SANCY", - "zipcode": "63500" -}, { - "address": "226 BOULEVARD SAINT DENIS", - "category": "1", - "city": "COURBEVOIE", - "id": 19616, - "lat": 48.902521, - "lng": 2.2754027, - "phone": "01 43 33 52 28", - "title": "PHARMACIE TEMAM", - "zipcode": "92400" -}, { - "address": "226 RUE DU GENERAL DE GAULLE", - "category": "2", - "city": "BILLY-BERCLAU", - "id": 17938, - "lat": 50.5229726, - "lng": 2.8738008, - "phone": "03 21 40 84 18", - "title": "PHARMACIE DU JEU DE PAUME", - "zipcode": "62138" -}, { - "address": "23 AV DE LA MOTTE PIQUET", - "category": "3", - "city": "PARIS", - "id": 14413, - "lat": 48.8553834, - "lng": 2.3077471, - "phone": "01 47 05 40 61", - "title": "PHARMACIE BONNEL", - "zipcode": "75007" -}, { - "address": "23 AV DU GENERAL DE GAULLE", - "category": "2", - "city": "FONTENAY-TRESIGNY", - "id": 18466, - "lat": 48.7067337, - "lng": 2.8686734, - "phone": "01 64 25 95 69", - "title": "PHARMACIE GODART", - "zipcode": "77610" -}, { - "address": "23 AV DU GENERAL GALLIENI", - "category": "2", - "city": "JOINVILLE-LE-PONT", - "id": 18102, - "lat": 48.8200815, - "lng": 2.4772826, - "phone": "01 48 83 20 80", - "title": "PHARMACIE DU PONT DE JOINVILLE", - "zipcode": "94340" -}, { - "address": "23 AV GEORGES POMPIDOU", - "category": "1", - "city": "PIERREFORT", - "id": 16069, - "lat": 44.9212385, - "lng": 2.8391706, - "phone": "04 71 23 30 06", - "title": "PHARMACIE BERNARD TRONCHE", - "zipcode": "15230" -}, { - "address": "23 AVENUE DE LERINS", - "category": "3", - "city": "CANNES", - "id": 17206, - "lat": 43.5437198, - "lng": 7.0382713, - "phone": "04 93 43 57 15", - "title": "PHARMACIE DE LERINS", - "zipcode": "6400" -}, { - "address": "23 AVENUE DU GENERAL DE GAULLE", - "category": "1", - "city": "HYERES", - "id": 19184, - "lat": 43.1205101, - "lng": 6.1307267, - "phone": "04 94 65 00 78", - "title": "PHARMACIE POINT MASSILLON", - "zipcode": "83400" -}, { - "address": "23 AVENUE PASTEUR", - "category": "3", - "city": "ROUEN", - "id": 19051, - "lat": 49.4449015, - "lng": 1.0788668, - "phone": "02 35 71 21 51", - "title": "PHARMACIE NOUVELLE PREFECTURE", - "zipcode": "76000" -}, { - "address": "23 BOULEVARD CHARLES DE GAULLE", - "category": "1", - "city": "SANNOIS", - "id": 18531, - "lat": 48.9703922, - "lng": 2.2609186, - "phone": "01 39 81 20 43", - "title": "PHARMACIE HARMAN BOUNETTA", - "zipcode": "95110" -}, { - "address": "23 PLACE DU MARCHE", - "category": "2", - "city": "CHAUVIGNY", - "id": 17985, - "lat": 46.5700697, - "lng": 0.6434299, - "phone": "05 49 46 30 92", - "title": "PHARMACIE DU MARCHE", - "zipcode": "86300" -}, { - "address": "23 RTE DU CHATEAU", - "category": "2", - "city": "SALLES", - "id": 18210, - "lat": 44.5486165, - "lng": -0.8685528, - "phone": "05 56 88 40 36", - "title": "PHARMACIE DU VAL DE L EYRE", - "zipcode": "33770" -}, { - "address": "23 RUE DE LA CHAPELLE CTRE COM CHAMPION", - "category": "1", - "city": "CHARNAY-LES-MACON", - "id": 16859, - "lat": 46.3099756, - "lng": 4.8138703, - "phone": "03 85 34 18 43", - "title": "PHARMACIE DE LA COUPEE", - "zipcode": "71850" -}, { - "address": "23 RUE DES MOINES", - "category": "2", - "city": "PARIS", - "id": 14632, - "lat": 48.8888533, - "lng": 2.3192941, - "phone": "01 46 27 04 02", - "title": "PHARMACIE NOUVELLE DES BATIGNOLLES", - "zipcode": "75017" -}, { - "address": "23 RUE FERME DU PARADIS", - "category": "1", - "city": "MEULAN", - "id": 19090, - "lat": 49.0114488, - "lng": 1.916743, - "phone": "01 34 74 27 68", - "title": "PHARMACIE PARADIS", - "zipcode": "78250" -}, { - "address": "23 RUE MONTORGUEIL", - "category": "1", - "city": "PARIS", - "id": 14805, - "lat": 48.8639604, - "lng": 2.346212, - "phone": "01 42 36 24 26", - "title": "PHARMACIE SAINT EUSTACHE", - "zipcode": "75001" -}, { - "address": "23 RUE MONTREUIL", - "category": "3", - "city": "VINCENNES", - "id": 15419, - "lat": 48.8479533, - "lng": 2.4345076, - "phone": "01 43 28 22 44", - "title": "GRANDE PHARMACIE DE LA GARE", - "zipcode": "94300" -}, { - "address": "23 RUE RENE D HESPEL", - "category": "3", - "city": "BONDUES", - "id": 18530, - "lat": 50.7058201, - "lng": 3.0915565, - "phone": "03 20 23 17 43", - "title": "PHARMACIE HAQUETTE", - "zipcode": "59910" -}, { - "address": "23/27 AV LEONARD DE VINCI", - "category": "3", - "city": "COURBEVOIE", - "id": 18800, - "lat": 48.8968003, - "lng": 2.2357917, - "phone": "01 46 67 11 11", - "title": "PHARMACIE LEONARD DE VINCI", - "zipcode": "92400" -}, { - "address": "230 RUE DE ROMAONVILLE", - "category": "1", - "city": "MONTREUIL", - "id": 15426, - "lat": 48.8758716, - "lng": 2.4499374, - "phone": "01 42 87 78 34", - "title": "GRANDE PHARMACIE DES CASTORS", - "zipcode": "93100" -}, { - "address": "234 AVENUE FRANKLIN ROOSEVELT CENTRE COMMERCIAL CARREFOUR", - "category": "1", - "city": "VAULX-EN-VELIN", - "id": 17621, - "lat": 45.7476821, - "lng": 4.9294879, - "phone": "04 78 41 19 64", - "title": "PHARMACIE DES SEPT CHEMINS", - "zipcode": "69120" -}, { - "address": "234 CHEMIN DE SAINTE MARTHE", - "category": "1", - "city": "MARSEILLE", - "id": 14504, - "lat": 43.331186, - "lng": 5.3895175, - "phone": "04 96 16 04 65", - "title": "PHARMACIE DECAROLI", - "zipcode": "13014" -}, { - "address": "234 RUE MAURICE MENTON", - "category": "2", - "city": "SAINT-PAUL-LES-DAX", - "id": 15580, - "lat": 43.7304197, - "lng": -1.0413876, - "phone": "05 58 56 55 55", - "title": "PARA LECLERC", - "zipcode": "40990" -}, { - "address": "237 CHEMIN DE CHATEAU GOMBERT", - "category": "3", - "city": "MARSEILLE", - "id": 14768, - "lat": 43.3465316, - "lng": 5.4254435, - "phone": "04 91 50 88 20", - "title": "PHARMACIE SAINT ELOI", - "zipcode": "13013" -}, { - "address": "239 RUE DU FAUBOURG ST HONORE", - "category": "3", - "city": "PARIS", - "id": 14713, - "lat": 48.8774641, - "lng": 2.2983301, - "phone": "01 42 67 27 60", - "title": "GRANDE PHARMACIE WAGRAM", - "zipcode": "75008" -}, { - "address": "23BIS RUE DU GENERAL DE GAULLE", - "category": "1", - "city": "SAINT-LYE", - "id": 16508, - "lat": 48.3631716, - "lng": 4.0006309, - "phone": "03 25 76 63 08", - "title": "PHARMACIE CONTINANT", - "zipcode": "10600" -}, { - "address": "24 AVENUE DE PARIS", - "category": "3", - "city": "CUBZAC-LES-PONTS", - "id": 17592, - "lat": 44.9706428, - "lng": -0.4537379, - "phone": "05 57 43 26 46", - "title": "PHARMACIE DES PONTS EIFFEL", - "zipcode": "33240" -}, { - "address": "24 ALLEE DES ARCADES", - "category": "1", - "city": "PARON", - "id": 17416, - "lat": 48.1904833, - "lng": 3.2535241, - "phone": "03 86 83 72 55", - "title": "PHARMACIE DES ARCADES", - "zipcode": "89100" -}, { - "address": "24 AVENUE ALBERT 1ER", - "category": "2", - "city": "VALENCIENNES", - "id": 17215, - "lat": 50.3585435, - "lng": 3.5257856, - "phone": "03 27 46 25 07", - "title": "PHARMACIE DE L'EUROPE", - "zipcode": "59300" -}, { - "address": "24 AVENUE BILLAUD VARENNE CENTRE COMMERCIALE VILLENEUVE", - "category": "1", - "city": "LA ROCHELLE", - "id": 17619, - "lat": 46.1516851, - "lng": -1.1229488, - "phone": "05 46 44 12 98", - "title": "PHARMACIE DES SALINES", - "zipcode": "17000" -}, { - "address": "24 AVENUE DE LA REPUBLIQUE", - "category": "2", - "city": "SAINT-PALAIS-SUR-MER", - "id": 16658, - "lat": 45.6432694, - "lng": -1.0892382, - "phone": "05 46 23 11 51", - "title": "PHARMACIE DE CORDOUAN", - "zipcode": "17420" -}, { - "address": "24 AVENUE GENERAL DE GAULLE", - "category": "1", - "city": "CHATEAURENARD", - "id": 17635, - "lat": 43.8831076, - "lng": 4.8530561, - "phone": "04 90 94 00 60", - "title": "PHARMACIE DES TOURS", - "zipcode": "13160" -}, { - "address": "24 AVENUE MAC MAHON", - "category": "1", - "city": "PARIS", - "id": 14384, - "lat": 48.8783534, - "lng": 2.2945077, - "phone": "01 43 80 11 96", - "title": "PHARMACIE 24", - "zipcode": "75017" -}, { - "address": "24 BLD SEBASTOPOL", - "category": "2", - "city": "PARIS", - "id": 14652, - "lat": 48.8606377, - "lng": 2.3497636, - "phone": "01 48 87 62 30", - "title": "PHARMACIE PREMIERE SELAS", - "zipcode": "75004" -}, { - "address": "24 BOULEVARD DE COURTAIS", - "category": "2", - "city": "MONTLUCON", - "id": 19313, - "lat": 46.3397483, - "lng": 2.6014833, - "phone": "04 70 05 41 85", - "title": "PHARMACIE REYNAUD", - "zipcode": "3100" -}, { - "address": "24 COURS DES JUILLOTTES", - "category": "2", - "city": "MAISONS-ALFORT", - "id": 16445, - "lat": 48.8034223, - "lng": 2.4436481, - "phone": "01 43 76 22 83", - "title": "PHARMACIE CHATAP", - "zipcode": "94700" -}, { - "address": "24 GRANDE RUE", - "category": "2", - "city": "GANNAT", - "id": 17874, - "lat": 46.1014654, - "lng": 3.1970928, - "phone": "04 70 90 01 39", - "title": "PHARMACIE DU COURS", - "zipcode": "3800" -}, { - "address": "24 PLACE AUBAN MOET", - "category": "2", - "city": "EPERNAY", - "id": 18133, - "lat": 49.0450754, - "lng": 3.9550068, - "phone": "03 26 55 32 26", - "title": "PHARMACIE DU PRESSOIR", - "zipcode": "51200" -}, { - "address": "24 PLACE DE LA REPUBLIQUE", - "category": "2", - "city": "ISSOIRE", - "id": 15503, - "lat": 45.544043, - "lng": 3.2484751, - "phone": "04 73 89 21 78", - "title": "GRANDE PHARMACIE MARTIN", - "zipcode": "63500" -}, { - "address": "24 PLACE DU MARCHE", - "category": "1", - "city": "ARPAJON", - "id": 19523, - "lat": 48.5889909, - "lng": 2.249509, - "phone": "01 64 90 00 15", - "title": "PHARMACIE SCHOM", - "zipcode": "91290" -}, { - "address": "24 PLACE DU MARCHE", - "category": "1", - "city": "BRIE-COMTE-ROBERT", - "id": 17519, - "lat": 48.6909055, - "lng": 2.6094165, - "phone": "01 64 05 00 91", - "title": "PHARMACIE DES HALLES", - "zipcode": "77170" -}, { - "address": "24 PLACE JEAN JAURES", - "category": "1", - "city": "PUY-GUILLAUME", - "id": 16595, - "lat": 45.9599717, - "lng": 3.474032, - "phone": "04 73 94 70 23", - "title": "PHARMACIE DASSOT", - "zipcode": "63290" -}, { - "address": "24 PLACE SAINT CORENTIN", - "category": "1", - "city": "QUIMPER", - "id": 16825, - "lat": 47.9959797, - "lng": -4.1032263, - "phone": "02 98 95 00 20", - "title": "PHARMACIE DE LA CATHEDRALE", - "zipcode": "29000" -}, { - "address": "24 RUE ALEXANDRE ROCHE", - "category": "2", - "city": "ROANNE", - "id": 17084, - "lat": 46.0413766, - "lng": 4.0729375, - "phone": "04 77 71 33 23", - "title": "PHARMACIE DE LA POSTE", - "zipcode": "42300" -}, { - "address": "24 RUE CHARLES LESCOT", - "category": "2", - "city": "PONT-SAINTE-MAXENCE", - "id": 16999, - "lat": 49.3014045, - "lng": 2.6052656, - "phone": "03 44 31 64 64", - "title": "PHARMACIE DE LA MAIRIE", - "zipcode": "60700" -}, { - "address": "24 RUE DE CAUMARTIN", - "category": "1", - "city": "PARIS", - "id": 14426, - "lat": 48.871884, - "lng": 2.3287978, - "phone": "01 42 65 10 28", - "title": "PHARMACIE CAUMARTIN", - "zipcode": "75009" -}, { - "address": "24 RUE DES ETATS UNIS", - "category": "2", - "city": "SAINTE-FLORINE", - "id": 18910, - "lat": 45.4043874, - "lng": 3.3187737, - "phone": "04 73 54 08 97", - "title": "PHARMACIE MATHON MEUNIER", - "zipcode": "43250" -}, { - "address": "24 RUE DU MARECHAL FOCH", - "category": "1", - "city": "ABBEVILLE", - "id": 16379, - "lat": 50.1052888, - "lng": 1.8343228, - "phone": "03 22 24 02 68", - "title": "PHARMACIE CENTRALE", - "zipcode": "80100" -}, { - "address": "24 RUE DU MARECHAL FOCH", - "category": "2", - "city": "ABBEVILLE", - "id": 16379, - "lat": 50.1052888, - "lng": 1.8343228, - "phone": "03 22 24 02 68", - "title": "PHARMACIE CENTRALE", - "zipcode": "80100" -}, { - "address": "24 RUE EMILE ZOLA", - "category": "3", - "city": "LE CHAMBON-FEUGEROLLES", - "id": 18375, - "lat": 45.3975148, - "lng": 4.3246479, - "phone": "04 77 61 05 74", - "title": "PHARMACIE FOUQUES-GLADYS", - "zipcode": "42500" -}, { - "address": "24 RUE FRANCHET D ESPEREY", - "category": "1", - "city": "DUNKERQUE", - "id": 17702, - "lat": 51.022814, - "lng": 2.3495745, - "phone": "03 28 24 32 56", - "title": "PHARMACIE DU BANC VERT", - "zipcode": "59640" -}, { - "address": "24 RUE GENERAL DE GAULLE", - "category": "2", - "city": "AUBEVOYE", - "id": 16374, - "lat": 49.1678055, - "lng": 1.3361198, - "phone": "02 32 53 04 56", - "title": "PHARMACIE CENTRALE", - "zipcode": "27940" -}, { - "address": "24 RUE PEIRRE SEMARD", - "category": "2", - "city": "SETE", - "id": 18344, - "lat": 43.4050037, - "lng": 3.6997676, - "phone": "04 67 74 36 04", - "title": "PHARMACIE FERRANDO", - "zipcode": "34200" -}, { - "address": "24 RUE PRINCIPALE", - "category": "2", - "city": "TINCQUES", - "id": 16537, - "lat": 50.3549284, - "lng": 2.4906773, - "phone": "03 21 47 39 43", - "title": "PHARMACIE COUVREUR", - "zipcode": "62127" -}, { - "address": "240 AVENUE DU 24 AVRIL 1915", - "category": "2", - "city": "MARSEILLE", - "id": 14429, - "lat": 43.3086041, - "lng": 5.4385954, - "phone": "04 91 93 40 65", - "title": "PHARMACIE CENTRALE", - "zipcode": "13012" -}, { - "address": "244 AV PIERRE BROSSOLETTE", - "category": "1", - "city": "LE PERREUX-SUR-MARNE", - "id": 15842, - "lat": 48.8339119, - "lng": 2.5152918, - "phone": "01 43 24 05 55", - "title": "PHARMACIE DE PONT DE BRY", - "zipcode": "94170" -}, { - "address": "244 AVENUE DU PRADO", - "category": "2", - "city": "MARSEILLE", - "id": 14651, - "lat": 43.2753696, - "lng": 5.3891477, - "phone": "04 91 77 59 64", - "title": "PHARMACIE PRADO MERMOZ", - "zipcode": "13008" -}, { - "address": "247 AVENUE DU GENERAL DE GAULL", - "category": "2", - "city": "CUINCY", - "id": 16731, - "lat": 50.3865076, - "lng": 3.0592213, - "phone": "03 27 88 98 52", - "title": "PHARMACIE DE L AVENUE", - "zipcode": "59553" -}, { - "address": "24BIS AVENUE EDMOND GRASSET", - "category": "3", - "city": "AYTRE", - "id": 17456, - "lat": 46.133962, - "lng": -1.1181072, - "phone": "05 46 44 25 09", - "title": "PHARMACIE DES CHARMILLES", - "zipcode": "17440" -}, { - "address": "25 AV DES CHAMPS ELYSEES", - "category": "2", - "city": "CHADRAC", - "id": 19167, - "lat": 45.0528789, - "lng": 3.898258, - "phone": "04 71 09 20 99", - "title": "PHARMACIE PIERRE SOLELHAC", - "zipcode": "43770" -}, { - "address": "25 AVENUE CHARLES GIDE", - "category": "1", - "city": "LE KREMLIN-BICETRE", - "id": 17901, - "lat": 48.807271, - "lng": 2.3535078, - "phone": "01 46 72 16 29", - "title": "PHARMACIE DU FORT DE BICETRE", - "zipcode": "94270" -}, { - "address": "25 AVENUE VINCENT AURIOL", - "category": "3", - "city": "MURET", - "id": 19057, - "lat": 43.4686918, - "lng": 1.3368681, - "phone": "05 61 51 04 69", - "title": "PHARMACIE OCCITANE", - "zipcode": "31600" -}, { - "address": "25 BLD FELIX MARTIN", - "category": "3", - "city": "ST RAPHAEL", - "id": 16147, - "lat": 43.4235896, - "lng": 6.7677392, - "phone": "04 94 95 04 05", - "title": "PHARMACIE BOREL ET LOUIS", - "zipcode": "83700" -}, { - "address": "25 BOULEVARD HONORE TEISSEIRE", - "category": "2", - "city": "LA COLLE-SUR-LOUP", - "id": 16842, - "lat": 43.6843224, - "lng": 7.108559, - "phone": "04 93 32 66 03", - "title": "PHARMACIE DE LA COLLE", - "zipcode": "6480" -}, { - "address": "25 COURS LAFAYETTE", - "category": "2", - "city": "LYON", - "id": 14452, - "lat": 45.7637643, - "lng": 4.8454905, - "phone": "04 78 52 22 49", - "title": "PHARMACIE DAHAN", - "zipcode": "69006" -}, { - "address": "25 COURS PIERRE PUGET", - "category": "2", - "city": "MARSEILLE", - "id": 14555, - "lat": 43.2901784, - "lng": 5.3760841, - "phone": "04 91 37 15 39", - "title": "PHARMACIE DU PALAIS", - "zipcode": "13006" -}, { - "address": "25 RUE DE LA REPUBLIQUE", - "category": "3", - "city": "SERVON", - "id": 16133, - "lat": 48.7167212, - "lng": 2.586141, - "phone": "01 64 05 13 79", - "title": "PHARMACIE BOIS", - "zipcode": "77170" -}, { - "address": "25 RUE MARSOULAN", - "category": "3", - "city": "PARIS", - "id": 14568, - "lat": 48.8468169, - "lng": 2.4032263, - "phone": "01 43 43 73 73", - "title": "PHARMACIE DUFOUR", - "zipcode": "75012" -}, { - "address": "251 RUE PIERRE BROSSOLETTE", - "category": "2", - "city": "COUTRAS", - "id": 18632, - "lat": 45.0397564, - "lng": -0.1309658, - "phone": "05 57 49 00 22", - "title": "PHARMACIE JOUZIER", - "zipcode": "33230" -}, { - "address": "255 RUE DE CHARENTON", - "category": "2", - "city": "PARIS", - "id": 14373, - "lat": 48.8362682, - "lng": 2.3923982, - "phone": "09 83 35 38 71", - "title": "PARAPHARMACIE BB BEAUTY", - "zipcode": "75012" -}, { - "address": "256 RUE DE VAUGIRARD", - "category": "3", - "city": "PARIS", - "id": 16289, - "lat": 48.8397896, - "lng": 2.3013355, - "phone": "01 45 32 90 90", - "title": "PHARMACIE CASEJUANE VITTE", - "zipcode": "75015" -}, { - "address": "26 AV DOCTEUR RAYMOND PICAUD", - "category": "1", - "city": "CANNES", - "id": 19817, - "lat": 43.5509086, - "lng": 6.9998449, - "phone": "04 93 47 41 87", - "title": "PHARMACIE DE LA CROIX DES GARDES", - "zipcode": "6400" -}, { - "address": "26 AVENUE DE ROYAT", - "category": "2", - "city": "CHAMALIERES", - "id": 18051, - "lat": 45.7759885, - "lng": 3.0677468, - "phone": "04 73 19 80 90", - "title": "PHARMACIE DU PARC", - "zipcode": "63400" -}, { - "address": "26 AVENUE ROCKFELLER", - "category": "2", - "city": "LYON", - "id": 14596, - "lat": 45.7415084, - "lng": 4.8845287, - "phone": "04 78 37 67 88", - "title": "PHARMACIE LABBE DUTILLEUL", - "zipcode": "69008" -}, { - "address": "26 BOULEVARD CARNOT", - "category": "2", - "city": "CANNES", - "id": 19689, - "lat": 43.5563496, - "lng": 7.0171795, - "phone": "04 93 39 08 99", - "title": "PHARMACIE VAUBAN", - "zipcode": "6400" -}, { - "address": "26 PLACE ROGER SALENGRO", - "category": "1", - "city": "BARLIN", - "id": 15539, - "lat": 50.4594477, - "lng": 2.614621, - "phone": "03 21 25 97 92", - "title": "LA GRANDE PHARMACIE", - "zipcode": "62620" -}, { - "address": "26 RUE CROIX DES PETITS CHAMPS", - "category": "2", - "city": "PARIS", - "id": 14473, - "lat": 48.8639062, - "lng": 2.3401719, - "phone": "01 58 62 47 88", - "title": "PHARMACIE DE LA BANQUE", - "zipcode": "75001" -}, { - "address": "26 RUE DE L EGALITE", - "category": "2", - "city": "VIMY", - "id": 18436, - "lat": 50.3703863, - "lng": 2.814585, - "phone": "03 21 55 92 81", - "title": "PHARMACIE GENOIS GUILLAUME", - "zipcode": "62580" -}, { - "address": "26 RUE DE L OUEST", - "category": "2", - "city": "MAGNANVILLE", - "id": 16803, - "lat": 48.9784316, - "lng": 1.6885038, - "phone": "01 30 92 64 63", - "title": "PHARMACIE DE L OUEST", - "zipcode": "78200" -}, { - "address": "26 RUE DE ROCHECHOUART", - "category": "1", - "city": "PARIS", - "id": 14665, - "lat": 48.8781333, - "lng": 2.3449966, - "phone": "01 48 78 23 97", - "title": "PHARMACIE RUE ROCHECHOUART", - "zipcode": "75009" -}, { - "address": "26 RUE DES ESQUERMOISE", - "category": "1", - "city": "LILLE", - "id": 16873, - "lat": 50.6378535, - "lng": 3.0622103, - "phone": "03 20 61 09 07", - "title": "PHARMACIE DE LA DEESSE PASCAL LESNE", - "zipcode": "59800" -}, { - "address": "26 RUE DES ORMEAUX CCIAL RIVE SUD", - "category": "1", - "city": "MURS-ERIGNE", - "id": 19332, - "lat": 47.398917, - "lng": -0.5282074, - "phone": "02 41 57 76 90", - "title": "PHARMACIE RIVE SUD", - "zipcode": "49610" -}, { - "address": "26 RUE DU TEMPLE", - "category": "1", - "city": "CALAIS", - "id": 19010, - "lat": 50.9484962, - "lng": 1.8563291, - "phone": "03 21 46 48 00", - "title": "PHARMACIE MUTUALISTE DE CALAIS", - "zipcode": "62100" -}, { - "address": "26 RUE GAL GALLIENI", - "category": "1", - "city": "ROSNY-SOUS-BOIS", - "id": 16057, - "lat": 48.8731967, - "lng": 2.4839544, - "phone": "01 45 28 00 19", - "title": "PHARMACIE BENICHOU", - "zipcode": "93110" -}, { - "address": "26 RUE JEAN JAURES", - "category": "2", - "city": "FOURMIES", - "id": 16272, - "lat": 50.0157961, - "lng": 4.0489872, - "phone": "03 27 60 02 95", - "title": "PHARMACIE CAPPELIEZ", - "zipcode": "59610" -}, { - "address": "26 RUE NATIONALE", - "category": "3", - "city": "LA QUEUE-LES-YVELINES", - "id": 16434, - "lat": 48.8059058, - "lng": 1.767895, - "phone": "01 34 86 45 81", - "title": "PHARMACIE CHARPENTIER", - "zipcode": "78940" -}, { - "address": "26 RUE RAYMOND LEFEBVRE", - "category": "3", - "city": "BAGNOLET", - "id": 17483, - "lat": 48.8715733, - "lng": 2.4261483, - "phone": "01 43 62 73 80", - "title": "PHARMACIE DES ECOLES", - "zipcode": "93170" -}, { - "address": "260 BOULEVARD RYCKEBUSCH", - "category": "1", - "city": "MANOSQUE", - "id": 18812, - "lat": 43.8307081, - "lng": 5.7979013, - "phone": "04 92 87 88 51", - "title": "PHARMACIE LES VIOLETTES", - "zipcode": "4100" -}, { - "address": "2601 ROUTE NATIONALE 20", - "category": "2", - "city": "SARAN", - "id": 15281, - "lat": 47.9600565, - "lng": 1.8860394, - "phone": "02 38 72 87 19", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "45770" -}, { - "address": "2629 ROUTE DE BERCK", - "category": "2", - "city": "RANG-DU-FLIERS", - "id": 16298, - "lat": 50.4147949, - "lng": 1.6118834, - "phone": "03 21 84 89 82", - "title": "PHARMACIE CAYEUX", - "zipcode": "62180" -}, { - "address": "265 AVENUE MARIO BENARD ZAE ROUBAUD", - "category": "2", - "city": "HYERES", - "id": 15630, - "lat": 43.1120958, - "lng": 6.115187, - "phone": "04 94 12 56 70", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "83400" -}, { - "address": "27 PLACE DE L HOTEL DE VILLE", - "category": "2", - "city": "DOLUS-D'OLERON", - "id": 18535, - "lat": 45.9111053, - "lng": -1.2654528, - "phone": "05 46 75 32 02", - "title": "PHARMACIE HATTABE", - "zipcode": "17550" -}, { - "address": "27 RUE BREZIN", - "category": "2", - "city": "PARIS", - "id": 14480, - "lat": 48.8313615, - "lng": 2.3263029, - "phone": "01 45 40 76 90", - "title": "PHARMACIE DE LA MAIRIE", - "zipcode": "75014" -}, { - "address": "27 RUE DE MIROMESNIL", - "category": "1", - "city": "PARIS", - "id": 14389, - "lat": 48.8729876, - "lng": 2.3158926, - "phone": "01 42 65 27 49", - "title": "PHARMACIE ARTS ELYSEES", - "zipcode": "75008" -}, { - "address": "27 RUE JOUFFROY D ABBANS", - "category": "1", - "city": "PARIS", - "id": 14660, - "lat": 48.8859605, - "lng": 2.3098925, - "phone": "01 47 63 56 80", - "title": "PHARMACIE RONCIN", - "zipcode": "75017" -}, { - "address": "276 RUE DU 8 MAI", - "category": "2", - "city": "LANNEMEZAN", - "id": 16004, - "lat": 43.1186263, - "lng": 0.3827786, - "phone": "05 62 98 11 83", - "title": "PHARMACIE BASCOU PERPERE", - "zipcode": "65300" -}, { - "address": "28 30 RUE FRANCIS DAVSO", - "category": "2", - "city": "MARSEILLE", - "id": 14776, - "lat": 43.2934207, - "lng": 5.3770346, - "phone": "04 91 33 14 99", - "title": "PHARMACIE VONSENSEY", - "zipcode": "13001" -}, { - "address": "28 AVENUE DU GENERAL DE GAULLE CENTRE COMMERCIAL BEL EST", - "category": "2", - "city": "BAGNOLET", - "id": 19769, - "lat": 48.8653078, - "lng": 2.4153621, - "phone": "01 43 62 95 45", - "title": "PHARMACIE ZEMIRO", - "zipcode": "93170" -}, { - "address": "28 AVENUE HENRI BARBUSSE", - "category": "1", - "city": "VILLEURBANNE", - "id": 19837, - "lat": 45.76723, - "lng": 4.8791863, - "phone": "04 78 84 71 63", - "title": "PHARMACIE DES GRATTE CIEL", - "zipcode": "69100" -}, { - "address": "28 BD LEON REVILLON", - "category": "2", - "city": "BOISSY-SAINT-LEGER", - "id": 17931, - "lat": 48.7462402, - "lng": 2.5114537, - "phone": "01 45 95 42 46", - "title": "PHARMACIE DU HAUT BOISSY", - "zipcode": "94470" -}, { - "address": "28 BOULEVARD DU CABOT", - "category": "1", - "city": "MARSEILLE", - "id": 14540, - "lat": 43.2601819, - "lng": 5.4158473, - "phone": "04 91 41 67 34", - "title": "PHARMACIE DU CABOT", - "zipcode": "13009" -}, { - "address": "28 PLACE DU GENERAL LECLERC", - "category": "1", - "city": "SAINT-POL-SUR-TERNOISE", - "id": 18186, - "lat": 50.3824017, - "lng": 2.337122, - "phone": "03 21 03 02 09", - "title": "PHARMACIE DU TERNOIS", - "zipcode": "62130" -}, { - "address": "28 ROUTE DE GRIGNY", - "category": "2", - "city": "VIRY-CHATILLON", - "id": 14946, - "lat": 48.6634377, - "lng": 2.3765104, - "phone": "01 69 12 51 51", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "91170" -}, { - "address": "28 RUE DE LA REGRATTERIE", - "category": "2", - "city": "POITIERS", - "id": 19235, - "lat": 46.5833855, - "lng": 0.3430001, - "phone": "05 49 41 00 77", - "title": "PHARMACIE PRINCIPALE", - "zipcode": "86000" -}, { - "address": "28 RUE DES BOURETS", - "category": "2", - "city": "SURESNES", - "id": 19784, - "lat": 48.8691862, - "lng": 2.2281679, - "phone": "01 45 06 10 33", - "title": "PHARMAVANCE SURESNES", - "zipcode": "92150" -}, { - "address": "28 RUE RENE VIELLE", - "category": "2", - "city": "GRENADE-SUR-L'ADOUR", - "id": 18197, - "lat": 43.7726778, - "lng": -0.4275354, - "phone": "05 58 45 12 86", - "title": "PHARMACIE DU TILLEUL", - "zipcode": "40270" -}, { - "address": "28/30 AVENUE DE PARIS", - "category": "3", - "city": "SOISY-SOUS-MONTMORENCY", - "id": 15551, - "lat": 48.9917453, - "lng": 2.2910998, - "phone": "01 34 17 15 84", - "title": "LA PHARMACIE VERTE", - "zipcode": "95230" -}, { - "address": "280 AV GABRIEL PERI CENTRE CIAL DE MONTESSON", - "category": "3", - "city": "MONTESSON", - "id": 17812, - "lat": 48.928488, - "lng": 2.145016, - "phone": "01 39 13 00 82", - "title": "PHARMACIE DU CENTRE CIAL MONTESSON", - "zipcode": "78360" -}, { - "address": "282 BOULEVARD RASPAIL", - "category": "3", - "city": "PARIS", - "id": 14655, - "lat": 48.8355409, - "lng": 2.331631, - "phone": "01 43 35 02 71", - "title": "PHARMACIE RASPAIL 14EME", - "zipcode": "75014" -}, { - "address": "285 AVENUE DU 15E CORPS D ARME", - "category": "1", - "city": "FREJUS", - "id": 18176, - "lat": 43.4365282, - "lng": 6.739719, - "phone": "04 94 53 98 48", - "title": "PHARMACIE DU STADE", - "zipcode": "83600" -}, { - "address": "286 AVENUE DES CAILLOLS", - "category": "2", - "city": "MARSEILLE", - "id": 14512, - "lat": 43.3027185, - "lng": 5.4487613, - "phone": "04 91 93 20 80", - "title": "PHARMACIE DES CAILLOLS", - "zipcode": "13012" -}, { - "address": "289 291 RUE DE BOURGOGNE", - "category": "2", - "city": "ORLEANS", - "id": 16676, - "lat": 47.8997875, - "lng": 1.90593, - "phone": "02 38 53 26 14", - "title": "PHARMACIE DE FRANCE", - "zipcode": "45000" -}, { - "address": "28BIS RUE GABRIEL PERI CENTRE COMMERCIAL DES CHARPENN", - "category": "1", - "city": "VILLEURBANNE", - "id": 16194, - "lat": 45.771747, - "lng": 4.865352, - "phone": "04 78 89 07 60", - "title": "PHARMACIE BRAHIC", - "zipcode": "69100" -}, { - "address": "29 AVENUE CHARLES DE GAULLE", - "category": "1", - "city": "TULLE", - "id": 18201, - "lat": 45.2683915, - "lng": 1.7697779, - "phone": "05 55 26 14 05", - "title": "PHARMACIE DU TRECH", - "zipcode": "19000" -}, { - "address": "29 AVENUE DES TERNES", - "category": "2", - "city": "PARIS", - "id": 14529, - "lat": 48.8781923, - "lng": 2.2946752, - "phone": "01 46 22 28 12", - "title": "PHARMACIE DES TROIS AVENUES", - "zipcode": "75017" -}, { - "address": "29 AVENUE GENERAL DE GAULLE", - "category": "2", - "city": "MASSIAC", - "id": 16525, - "lat": 45.2522721, - "lng": 3.1972962, - "phone": "04 71 23 02 45", - "title": "PHARMACIE COUMOUL", - "zipcode": "15500" -}, { - "address": "29 PLACE DE LA CATHEDRALE", - "category": "2", - "city": "ROUEN", - "id": 18404, - "lat": 49.4406038, - "lng": 1.0936305, - "phone": "02 35 71 33 17", - "title": "PHARMACIE GALIEN", - "zipcode": "76000" -}, { - "address": "29 PLACE JEAN JAURES", - "category": "2", - "city": "SOLESMES", - "id": 18489, - "lat": 50.1853746, - "lng": 3.4968058, - "phone": "03 27 37 32 83", - "title": "PHARMACIE GRARD CANONNE", - "zipcode": "59730" -}, { - "address": "29 PLACE NATIONALE", - "category": "2", - "city": "GOURNAY-EN-BRAY", - "id": 19257, - "lat": 49.4825004, - "lng": 1.7246369, - "phone": "02 35 90 00 82", - "title": "PHARMACIE PRINCIPALE", - "zipcode": "76220" -}, { - "address": "29 R DES MARINS FRANCAIS LIBRES", - "category": "2", - "city": "CARANTEC", - "id": 18353, - "lat": 48.6575464, - "lng": -3.919535, - "phone": "02 98 67 00 28", - "title": "PHARMACIE FIOCCHI", - "zipcode": "29660" -}, { - "address": "29 RUE DE L EGLISE", - "category": "2", - "city": "HAZEBROUCK", - "id": 15845, - "lat": 50.7208319, - "lng": 2.5361647, - "phone": "03 28 41 82 81", - "title": "PHARMACIE DEGRAVE DELGRANGE LUTTUN", - "zipcode": "59190" -}, { - "address": "29 RUE DE LA GARE", - "category": "1", - "city": "BOURG-DES-COMPTES", - "id": 16174, - "lat": 47.9295434, - "lng": -1.7420529, - "phone": "02 99 57 41 49", - "title": "PHARMACIE BOURG DES COMPTES", - "zipcode": "35890" -}, { - "address": "29 RUE DU COMMERCE", - "category": "1", - "city": "BRIOUDE", - "id": 16538, - "lat": 45.292962, - "lng": 3.3847437, - "phone": "04 71 74 93 13", - "title": "PHARMACIE CRAVINHO DUMAS", - "zipcode": "43100" -}, { - "address": "29 RUE DURET", - "category": "2", - "city": "PARIS", - "id": 14359, - "lat": 48.8753435, - "lng": 2.2863758, - "phone": "01 45 00 10 20", - "title": "GRANDE PHARMACIE DURET", - "zipcode": "75016" -}, { - "address": "29 RUE PIERRE DEMOURS", - "category": "2", - "city": "PARIS", - "id": 14602, - "lat": 48.8816516, - "lng": 2.2948623, - "phone": "01 47 63 71 49", - "title": "PHARMACIE LECLERC", - "zipcode": "75017" -}, { - "address": "29 RUE ST MARTIN", - "category": "2", - "city": "DREUX", - "id": 19452, - "lat": 48.7341137, - "lng": 1.367046, - "phone": "02 37 50 00 59", - "title": "PHARMACIE SAINT MARTIN", - "zipcode": "28100" -}, { - "address": "29 Rue de Paris", - "category": "1", - "city": "LA FERTE-GAUCHER", - "id": 15138, - "lat": 48.780833, - "lng": 3.305048, - "phone": "01 64 04 00 74", - "title": "PHARMACIE NOEL", - "zipcode": "77320" -}, { - "address": "29/31 PLACE DE LA REPUBLIQUE", - "category": "1", - "city": "MONTVILLE", - "id": 16170, - "lat": 49.5479415, - "lng": 1.0744076, - "phone": "02 35 33 70 16", - "title": "PHARMACIE BOULAY", - "zipcode": "76710" -}, { - "address": "2BIS AVENUE DE L EUROPE", - "category": "2", - "city": "SEVRES", - "id": 19475, - "lat": 48.8233399, - "lng": 2.2094836, - "phone": "01 46 26 03 73", - "title": "PHARMACIE SAINT ROMAIN", - "zipcode": "92310" -}, { - "address": "2BIS AVENUE DE VERDUN", - "category": "1", - "city": "LIMEIL-BREVANNES", - "id": 16409, - "lat": 48.7519661, - "lng": 2.4873117, - "phone": "01 45 69 12 57", - "title": "PHARMACIE CENTRE LIMEIL", - "zipcode": "94450" -}, { - "address": "3 11 BOULEVARD DU MARECHAL FOCH C COMMERCIAL BAOBAB", - "category": "2", - "city": "NEUILLY-SUR-MARNE", - "id": 17703, - "lat": 48.8539722, - "lng": 2.5170199, - "phone": "01 43 08 93 12", - "title": "PHARMACIE DU BAOBAB", - "zipcode": "93330" -}, { - "address": "3 5 7 RUE DE LA DRAPERIE", - "category": "1", - "city": "AUXERRE", - "id": 15492, - "lat": 47.7953046, - "lng": 3.5692247, - "phone": "03 86 52 01 26", - "title": "GRANDE PHARMACIE DU PROGRES", - "zipcode": "89000" -}, { - "address": "3 ALLEES RAYMOND FARBOS ESPLANADE DU MIDOU", - "category": "2", - "city": "MONT-DE-MARSAN", - "id": 15872, - "lat": 43.8914931, - "lng": -0.4989995, - "phone": "05 58 06 27 10", - "title": "PHARMACIE DUFOURNIAUD", - "zipcode": "40000" -}, { - "address": "3 AV DU PDT F MITTERRAND", - "category": "2", - "city": "SAINT-GAUDENS", - "id": 19115, - "lat": 43.1095858, - "lng": 0.7292756, - "phone": "05 61 89 15 43", - "title": "PHARMACIE PEGOT", - "zipcode": "31800" -}, { - "address": "3 AVENUE ALAIN LE LAY", - "category": "3", - "city": "CONCARNEAU", - "id": 18575, - "lat": 47.8750033, - "lng": -3.9185446, - "phone": "02 98 97 02 08", - "title": "PHARMACIE HUETTE", - "zipcode": "29900" -}, { - "address": "3 AVENUE ARISTIDE BERGES", - "category": "1", - "city": "SAINT-GIRONS", - "id": 19606, - "lat": 42.9861671, - "lng": 1.1401598, - "phone": "05 61 66 00 67", - "title": "PHARMACIE TALOBRE", - "zipcode": "9200" -}, { - "address": "3 AVENUE DE LA LIBERATION", - "category": "1", - "city": "ROGNONAS", - "id": 19464, - "lat": 43.8983497, - "lng": 4.8027023, - "phone": "04 90 94 80 33", - "title": "PHARMACIE SAINT PIERRE", - "zipcode": "13870" -}, { - "address": "3 AVENUE DE LA REDOUTE CTRE CIAL LES QUATRES ROUTES", - "category": "1", - "city": "ASNIERES-SUR-SEINE", - "id": 17900, - "lat": 48.9273838, - "lng": 2.2740078, - "phone": "01 47 98 32 86", - "title": "PHARMACIE DU FLORE", - "zipcode": "92600" -}, { - "address": "3 AVENUE RAYMONDE FIOLET", - "category": "3", - "city": "SOISSONS", - "id": 15610, - "lat": 49.3691926, - "lng": 3.3135709, - "phone": "03 23 73 88 88", - "title": "PARAPHARMACIE CORA", - "zipcode": "2200" -}, { - "address": "3 BIS RUE DE MAINVILLE", - "category": "2", - "city": "DRAVEIL", - "id": 17992, - "lat": 48.6861562, - "lng": 2.412099, - "phone": "01 69 03 71 28", - "title": "PHARMACIE DU MARCHE", - "zipcode": "91210" -}, { - "address": "3 COURS MIRABEAU", - "category": "1", - "city": "AIX-EN-PROVENCE", - "id": 17138, - "lat": 43.5266171, - "lng": 5.4463731, - "phone": "04 42 26 12 15", - "title": "PHARMACIE DE LA ROTONDE", - "zipcode": "13100" -}, { - "address": "3 PL DE LA HALLE AUX DRAPIERS", - "category": "2", - "city": "LOUVIERS", - "id": 19255, - "lat": 49.2111907, - "lng": 1.1693948, - "phone": "02 32 40 30 99", - "title": "PHARMACIE PRINCIPALE", - "zipcode": "27400" -}, { - "address": "3 PLACE DE L HOTEL DE VILLE", - "category": "1", - "city": "GUER", - "id": 16347, - "lat": 47.904097, - "lng": -2.119809, - "phone": "02 97 22 00 47", - "title": "PHARMACIE CENTRALE", - "zipcode": "56380" -}, { - "address": "3 PLACE DES VICTOIRES", - "category": "2", - "city": "ASNIERES-SUR-SEINE", - "id": 16186, - "lat": 48.9106875, - "lng": 2.292083, - "phone": "01 41 11 85 65", - "title": "PHARMACIE BOUSSIRON", - "zipcode": "92600" -}, { - "address": "3 PLACE DU PONTEL", - "category": "2", - "city": "AMBERT", - "id": 18581, - "lat": 45.549963, - "lng": 3.7428766, - "phone": "04 73 82 36 71", - "title": "PHARMACIE IMBERDIS", - "zipcode": "63600" -}, { - "address": "3 PLACE GAMBETTA", - "category": "2", - "city": "LA TREMBLADE", - "id": 17765, - "lat": 45.7689592, - "lng": -1.1417555, - "phone": "05 46 36 01 04", - "title": "PHARMACIE DU CENTRE", - "zipcode": "17390" -}, { - "address": "3 ROND POINT THIERS", - "category": "1", - "city": "LE RAINCY", - "id": 16991, - "lat": 48.8993256, - "lng": 2.5169059, - "phone": "01 43 81 00 50", - "title": "PHARMACIE DE LA MAIRIE", - "zipcode": "93340" -}, { - "address": "3 ROUTE DE MARINGUES", - "category": "2", - "city": "ENNEZAT", - "id": 19885, - "lat": 45.8965696, - "lng": 3.2295579, - "phone": "04 73 63 80 06", - "title": "PHARMACIE SNC BARBALAT MEGEMONT", - "zipcode": "63720" -}, { - "address": "3 RUE CAMILLE PELLETAN", - "category": "2", - "city": "RUELLE-SUR-TOUVRE", - "id": 18450, - "lat": 45.6783644, - "lng": 0.2258064, - "phone": "05 45 65 41 18", - "title": "PHARMACIE GIN MARTIN", - "zipcode": "16600" -}, { - "address": "3 RUE CARNOT", - "category": "2", - "city": "CHALLANS", - "id": 16456, - "lat": 46.8457429, - "lng": -1.8796866, - "phone": "02 51 35 69 39", - "title": "PHARMACIE CHEVILLON", - "zipcode": "85300" -}, { - "address": "3 RUE CLAUDE DEBUSSY CTRE COM INTERMARCHE", - "category": "2", - "city": "MONTMAGNY", - "id": 17617, - "lat": 48.962694, - "lng": 2.33713, - "phone": "01 39 83 99 98", - "title": "PHARMACIE DES SABLONS", - "zipcode": "95360" -}, { - "address": "3 RUE DE GRENOBLE", - "category": "3", - "city": "EVREUX", - "id": 19894, - "lat": 49.0263225, - "lng": 1.1484806, - "phone": "02 32 38 25 34", - "title": "PRO SANTE BEAUTE", - "zipcode": "27000" -}, { - "address": "3 RUE DE L AMIRAL MOUCHEZ", - "category": "2", - "city": "PARIS", - "id": 14556, - "lat": 48.8260554, - "lng": 2.3418855, - "phone": "01 45 89 48 51", - "title": "PHARMACIE DU PARC", - "zipcode": "75013" -}, { - "address": "3 RUE DE LA BASTIDE CENTRE COMMERCIAL LA BASTIDE", - "category": "2", - "city": "LEGUEVIN", - "id": 18672, - "lat": 43.5993312, - "lng": 1.2349293, - "phone": "05 61 07 53 07", - "title": "PHARMACIE LA BASTIDE", - "zipcode": "31490" -}, { - "address": "3 RUE DE LA CHESNAIE", - "category": "1", - "city": "REZE", - "id": 16870, - "lat": 47.1795787, - "lng": -1.5586211, - "phone": "02 40 75 49 00", - "title": "PHARMACIE DE LA CROIX REZE", - "zipcode": "44400" -}, { - "address": "3 RUE DE LA POSTE", - "category": "2", - "city": "MONTBERT", - "id": 19640, - "lat": 47.0563865, - "lng": -1.4876914, - "phone": "02 40 04 75 84", - "title": "PHARMACIE TILLY", - "zipcode": "44140" -}, { - "address": "3 RUE DE ROYE", - "category": "2", - "city": "MONTDIDIER", - "id": 17662, - "lat": 49.6486714, - "lng": 2.5798668, - "phone": "03 22 78 02 48", - "title": "PHARMACIE DESESQUELLES", - "zipcode": "80500" -}, { - "address": "3 RUE DE ROYE", - "category": "2", - "city": "MONTDIDIER", - "id": 17662, - "lat": 49.6486714, - "lng": 2.5798668, - "phone": "03 22 78 02 48", - "title": "PHARMACIE DESESQUELLES", - "zipcode": "80500" -}, { - "address": "3 RUE DE VOUILLE", - "category": "1", - "city": "PARIS", - "id": 14692, - "lat": 48.8354408, - "lng": 2.30303, - "phone": "01 48 28 21 10", - "title": "PHARMACIE VOUILLE CONVENTION", - "zipcode": "75015" -}, { - "address": "3 RUE GAMBETTA", - "category": "2", - "city": "CHATILLON-SUR-CHALARONNE", - "id": 16424, - "lat": 46.120854, - "lng": 4.9561912, - "phone": "04 74 55 00 81", - "title": "PHARMACIE CHANEL SNC", - "zipcode": "1400" -}, { - "address": "3 RUE JEAN JAURES", - "category": "1", - "city": "PLAN-DE-LA-TOUR", - "id": 18085, - "lat": 43.3379346, - "lng": 6.546996, - "phone": "04 94 43 71 06", - "title": "PHARMACIE DU PLAN DE LA TOUR", - "zipcode": "83120" -}, { - "address": "3 RUE ORSON", - "category": "2", - "city": "VERN-SUR-SEICHE", - "id": 15066, - "lat": 48.062918, - "lng": -1.6234554, - "phone": "02 99 51 81 15", - "title": "PHARMACIE DU VAL D'ORSON", - "zipcode": "35770" -}, { - "address": "3 RUE ROGER SALENGRO", - "category": "1", - "city": "BRAY-DUNES", - "id": 16102, - "lat": 51.0700592, - "lng": 2.5165655, - "phone": "03 28 29 91 83", - "title": "PHARMACIE BIREMBAUX BONNEVILLE", - "zipcode": "59123" -}, { - "address": "3 RUE SAINT CHRISTOPHE CENTRE COMMERCIAL CROISE LAROC", - "category": "2", - "city": "MARCQ-EN-BAROEUL", - "id": 18397, - "lat": 50.6639895, - "lng": 3.1012692, - "phone": "03 20 72 14 24", - "title": "PHARMACIE FRYS MANGIN", - "zipcode": "59700" -}, { - "address": "3 RUE SARRETTE", - "category": "2", - "city": "PARIS", - "id": 14807, - "lat": 48.8273261, - "lng": 2.3318948, - "phone": "01 43 27 17 57", - "title": "PHARMACIE SARRETTE", - "zipcode": "75014" -}, { - "address": "3 RUE WILSON ANGLE 2 RUE DE LA PAIX", - "category": "2", - "city": "SAINT-ETIENNE", - "id": 15562, - "lat": 45.4244684, - "lng": 4.3912532, - "phone": "04 77 32 24 29", - "title": "MUTUALITE FRANCAISE LOIRE SSAM", - "zipcode": "42000" -}, { - "address": "30 ALLEE DU 4 SEPTEMBRE", - "category": "3", - "city": "VALENCE", - "id": 17401, - "lat": 44.1068047, - "lng": 0.8917496, - "phone": "05 63 39 50 76", - "title": "PHARMACIE DES ALLEES", - "zipcode": "82400" -}, { - "address": "30 AVENUE GEORGES CLEMENCEAU", - "category": "2", - "city": "MONTPELLIER", - "id": 16478, - "lat": 43.6032259, - "lng": 3.871456, - "phone": "04 67 92 41 31", - "title": "PHARMACIE CLEMENCEAU", - "zipcode": "34000" -}, { - "address": "30 AVENUE JEAN JAURES", - "category": "1", - "city": "PANTIN", - "id": 19575, - "lat": 48.901126, - "lng": 2.38943, - "phone": "01 48 45 04 33", - "title": "PHARMACIE SOUSSAN", - "zipcode": "93500" -}, { - "address": "30 PL DU GRAND JARDIN", - "category": "1", - "city": "VENCE", - "id": 17917, - "lat": 43.7224235, - "lng": 7.1110377, - "phone": "04 93 58 00 39", - "title": "PHARMACIE DU GRAND JARDIN", - "zipcode": "6140" -}, { - "address": "30 PLACE DU GENERAL DE GAULLE", - "category": "2", - "city": "ORCHIES", - "id": 18863, - "lat": 50.473894, - "lng": 3.2412883, - "phone": "03 20 71 82 99", - "title": "PHARMACIE MAGNEZ", - "zipcode": "59310" -}, { - "address": "30 RUE CHEVREUL", - "category": "3", - "city": "LYON", - "id": 14629, - "lat": 45.74851, - "lng": 4.839441, - "phone": "04 78 72 31 89", - "title": "PHARMACIE NESME", - "zipcode": "69007" -}, { - "address": "30 RUE GAMBETTA", - "category": "2", - "city": "CREVECOEUR-LE-GRAND", - "id": 19525, - "lat": 49.6070891, - "lng": 2.0757573, - "phone": "03 44 46 87 22", - "title": "PHARMACIE SCHWEIG", - "zipcode": "60360" -}, { - "address": "30 RUE SADI CARNOT", - "category": "2", - "city": "CAMBRAI", - "id": 17074, - "lat": 50.1773606, - "lng": 3.2347325, - "phone": "03 27 81 38 43", - "title": "PHARMACIE DE LA PORTE NOTRE DA", - "zipcode": "59400" -}, { - "address": "31 33 AVENUE MAC ORLAN", - "category": "1", - "city": "PERONNE", - "id": 16040, - "lat": 49.9389496, - "lng": 2.9417929, - "phone": "03 22 84 36 66", - "title": "PHARMACIE BECU HIRSCH", - "zipcode": "80200" -}, { - "address": "31 33 AVENUE MAC ORLAN", - "category": "2", - "city": "PERONNE", - "id": 16040, - "lat": 49.9389496, - "lng": 2.9417929, - "phone": "03 22 84 36 66", - "title": "PHARMACIE BECU HIRSCH", - "zipcode": "80200" -}, { - "address": "31 AVENUE FRANKLIN ROOSEVELT", - "category": "1", - "city": "AVON", - "id": 16729, - "lat": 48.4151062, - "lng": 2.7186206, - "phone": "01 64 22 39 93", - "title": "PHARMACIE DE L AVENUE", - "zipcode": "77210" -}, { - "address": "31 AVENUE LAZARE CARNOT", - "category": "1", - "city": "DRAGUIGNAN", - "id": 16275, - "lat": 43.5351933, - "lng": 6.4669335, - "phone": "04 94 67 22 25", - "title": "PHARMACIE CARNOT", - "zipcode": "83300" -}, { - "address": "31 BOULEVARD DES TREMIERES LA PALMYRE", - "category": "2", - "city": "LES MATHES", - "id": 16858, - "lat": 45.6898827, - "lng": -1.180805, - "phone": "05 46 22 40 82", - "title": "PHARMACIE DE LA COUBRE", - "zipcode": "17570" -}, { - "address": "31 GR DE LA CROIX ROUSSE", - "category": "1", - "city": "LYON", - "id": 14593, - "lat": 45.7777484, - "lng": 4.8320884, - "phone": "04 78 29 54 56", - "title": "PHARMACIE KELLER", - "zipcode": "69004" -}, { - "address": "31 PLACE DU GENERAL DE GAULLE", - "category": "2", - "city": "BOURBOURG", - "id": 18389, - "lat": 50.9475254, - "lng": 2.1960423, - "phone": "03 28 22 02 04", - "title": "PHARMACIE FRANCOISE BECART", - "zipcode": "59630" -}, { - "address": "31 PLACE GAMBETTA", - "category": "3", - "city": "SALON-DE-PROVENCE", - "id": 15907, - "lat": 43.6382004, - "lng": 5.0996073, - "phone": "04 90 53 34 42", - "title": "PHARMACIE AILLAUD", - "zipcode": "13300" -}, { - "address": "31 RUE D AVEJAN", - "category": "2", - "city": "ALES", - "id": 16597, - "lat": 44.123243, - "lng": 4.0797761, - "phone": "04 66 52 51 16", - "title": "PHARMACIE D'AVEJAN", - "zipcode": "30100" -}, { - "address": "31 RUE DE REIMS", - "category": "1", - "city": "EPERNAY", - "id": 16934, - "lat": 49.0454787, - "lng": 3.961514, - "phone": "03 26 55 26 07", - "title": "PHARMACIE DE LA GARE", - "zipcode": "51200" -}, { - "address": "31 RUE DU GENERAL LECLERC", - "category": "2", - "city": "HEM", - "id": 16281, - "lat": 50.6529797, - "lng": 3.1846356, - "phone": "03 20 75 50 14", - "title": "PHARMACIE CARON", - "zipcode": "59510" -}, { - "address": "31 RUE LE CORBUSIER", - "category": "1", - "city": "BOULOGNE-BILLANCOURT", - "id": 17577, - "lat": 48.8374691, - "lng": 2.2394651, - "phone": "01 46 05 09 94", - "title": "PHARMACIE DES PASSAGES", - "zipcode": "92100" -}, { - "address": "31 RUE MAURICE THOREZ", - "category": "1", - "city": "NANTERRE", - "id": 16403, - "lat": 48.8919441, - "lng": 2.1954777, - "phone": "01 47 21 11 97", - "title": "PHARMACIE CENTRALE SOL TOUTON", - "zipcode": "92000" -}, { - "address": "312 BOULEVARD DES ECUREUILS IMMEUBLE LE GALION", - "category": "1", - "city": "MANDELIEU-LA-NAPOULE", - "id": 18014, - "lat": 43.5419724, - "lng": 6.9427773, - "phone": "04 93 49 24 68", - "title": "PHARMACIE DU MARCO POLO", - "zipcode": "6210" -}, { - "address": "32 AV RENE CASSIN", - "category": "2", - "city": "MONTEUX", - "id": 16037, - "lat": 44.0351213, - "lng": 5.0007932, - "phone": "04 90 61 37 30", - "title": "PHARMACIE BECKER", - "zipcode": "84170" -}, { - "address": "32 AVENUE DU GENERAL LECLERC", - "category": "2", - "city": "LA ROCHELLE", - "id": 17576, - "lat": 46.1640412, - "lng": -1.1635797, - "phone": "05 46 34 15 34", - "title": "PHARMACIE DES PARCS", - "zipcode": "17000" -}, { - "address": "32 AVENUE OUTREBON", - "category": "2", - "city": "VILLEMOMBLE", - "id": 19077, - "lat": 48.8885067, - "lng": 2.5112258, - "phone": "01 48 54 05 32", - "title": "PHARMACIE OUTREBON", - "zipcode": "93250" -}, { - "address": "32 CHEMIN DE MEAUX", - "category": "1", - "city": "NEUILLY-PLAISANCE", - "id": 17278, - "lat": 48.8623406, - "lng": 2.5121059, - "phone": "01 43 00 49 59", - "title": "PHARMACIE DE PLAISANCE", - "zipcode": "93360" -}, { - "address": "32 RUE ALBERT DUPUIS", - "category": "1", - "city": "ROUEN", - "id": 18356, - "lat": 49.4510322, - "lng": 1.1232355, - "phone": "02 35 60 07 81", - "title": "PHARMACIE FLAUBERT", - "zipcode": "76000" -}, { - "address": "32 RUE ANNA BIBERT", - "category": "2", - "city": "TARARE", - "id": 19233, - "lat": 45.8961745, - "lng": 4.4338326, - "phone": "04 74 63 13 34", - "title": "PHARMACIE PRINCIPALE", - "zipcode": "69170" -}, { - "address": "32 RUE DES ECOLES ROMPSAY", - "category": "2", - "city": "PERIGNY", - "id": 17297, - "lat": 46.1676159, - "lng": -1.111391, - "phone": "05 46 44 67 22", - "title": "PHARMACIE DE ROMPSAY", - "zipcode": "17180" -}, { - "address": "32 RUE JEANNE D HARCOURT", - "category": "3", - "city": "ALBERT", - "id": 17807, - "lat": 50.002469, - "lng": 2.6493058, - "phone": "03 22 74 45 50", - "title": "PHARMACIE DU CENTRE", - "zipcode": "80300" -}, { - "address": "32 RUE PAUL MASSY", - "category": "2", - "city": "MESCHERS-SUR-GIRONDE", - "id": 18626, - "lat": 45.559132, - "lng": -0.953095, - "phone": "05 46 02 70 37", - "title": "PHARMACIE JOSSE", - "zipcode": "17132" -}, { - "address": "32 RUE PAUL VALENTIN", - "category": "2", - "city": "ANNET-SUR-MARNE", - "id": 19113, - "lat": 48.9257807, - "lng": 2.7206595, - "phone": "01 60 26 03 93", - "title": "PHARMACIE PEDA", - "zipcode": "77410" -}, { - "address": "324 AVENUE DE CANNES RN 2085", - "category": "2", - "city": "MOUANS-SARTOUX", - "id": 17453, - "lat": 43.6212718, - "lng": 6.9976953, - "phone": "04 93 75 75 99", - "title": "PHARMACIE DES CEDRES", - "zipcode": "6370" -}, { - "address": "328 PLACE EDOUARD HERRIOT RESIDENCE TARENTELLE", - "category": "2", - "city": "SETE", - "id": 16852, - "lat": 43.3941177, - "lng": 3.6770838, - "phone": "04 67 53 11 44", - "title": "PHARMACIE DE LA CORNICHE", - "zipcode": "34200" -}, { - "address": "33 RUE JEAN JAURES", - "category": "2", - "city": "WIGNEHIES", - "id": 17341, - "lat": 50.0169949, - "lng": 4.0045983, - "phone": "03 27 60 21 76", - "title": "PHARMACIE DE WIGNEHIES", - "zipcode": "59212" -}, { - "address": "33 RUE PIERRE OGEE", - "category": "1", - "city": "ANNOEULLIN", - "id": 18354, - "lat": 50.5281655, - "lng": 2.9334068, - "phone": "03 20 85 56 41", - "title": "PHARMACIE FLAMENT", - "zipcode": "59112" -}, { - "address": "33 Rue des Quatre Vents", - "category": "2", - "city": "LANMEUR", - "id": 14984, - "lat": 48.6421393, - "lng": -3.7203238, - "phone": "02 98 67 51 20", - "title": "PHARMACIE BODENES TANGUY", - "zipcode": "29620" -}, { - "address": "332 ROUTE DE LA COTE D AMOUR CCIAL GEANT OCEANIS", - "category": "2", - "city": "SAINT-NAZAIRE", - "id": 19061, - "lat": 47.256858, - "lng": -2.2640509, - "phone": "02 40 70 36 31", - "title": "PHARMACIE OCEANIS", - "zipcode": "44600" -}, { - "address": "332 RUE NATIONALE", - "category": "1", - "city": "VILLEFRANCHE-SUR-SAONE", - "id": 16734, - "lat": 45.9928608, - "lng": 4.7188641, - "phone": "04 74 68 18 67", - "title": "PHARMACIE DE L EDEN", - "zipcode": "69400" -}, { - "address": "337 RUE ALBERT CAMU", - "category": "2", - "city": "VAUVERT", - "id": 15918, - "lat": 43.698155, - "lng": 4.2797602, - "phone": "04 66 88 83 97", - "title": "PHARMACIE ALPHONSE DAUDET", - "zipcode": "30600" -}, { - "address": "338 CORNICHE DES ISSAMBRES", - "category": "2", - "city": "LES ISSAMBRES", - "id": 19658, - "lat": 43.3522912, - "lng": 6.7124781, - "phone": "04 94 96 91 25", - "title": "PHARMACIE TROADEC", - "zipcode": "83380" -}, { - "address": "34 AVENUE D AUVERGNE", - "category": "1", - "city": "GUERET", - "id": 17007, - "lat": 46.1680692, - "lng": 1.8841526, - "phone": "05 55 61 26 26", - "title": "PHARMACIE DE LA MARCHE", - "zipcode": "23000" -}, { - "address": "34 AVENUE DU GENERAL DE GAULLE", - "category": "2", - "city": "LES SABLES-D'OLONNE", - "id": 16913, - "lat": 46.4988911, - "lng": -1.7806044, - "phone": "02 51 95 56 23", - "title": "PHARMACIE DE LA GARE", - "zipcode": "85100" -}, { - "address": "34 GRANDE RUE", - "category": "2", - "city": "BLANGY-SUR-BRESLE", - "id": 16820, - "lat": 49.9316539, - "lng": 1.6286908, - "phone": "02 35 93 50 16", - "title": "PHARMACIE DE LA BRESLE", - "zipcode": "76340" -}, { - "address": "34 PLACE DU MARCHE", - "category": "2", - "city": "SAINT-AMAND-MONTROND", - "id": 17451, - "lat": 46.7222868, - "lng": 2.5076091, - "phone": "02 48 96 02 92", - "title": "PHARMACIE DES CARMES", - "zipcode": "18200" -}, { - "address": "34 RUE DE LA REPUBLIQUE", - "category": "3", - "city": "LE NEUBOURG", - "id": 15490, - "lat": 49.1495717, - "lng": 0.9032508, - "phone": "02 32 35 00 35", - "title": "GRANDE PHARMACIE DU NEUBOURG", - "zipcode": "27110" -}, { - "address": "34 RUE DES ABBESSES", - "category": "1", - "city": "PARIS", - "id": 14428, - "lat": 48.8852409, - "lng": 2.3369326, - "phone": "01 46 06 69 10", - "title": "PHARMACIE CAYLA", - "zipcode": "75018" -}, { - "address": "34 RUE JULES SORET", - "category": "2", - "city": "VERNON", - "id": 19324, - "lat": 49.0982975, - "lng": 1.4914449, - "phone": "02 32 51 08 96", - "title": "PHARMACIE RIFFAULT", - "zipcode": "27200" -}, { - "address": "347 ROUTE DE LA BASSEE CENTRE COMMERCIAL LENS 2", - "category": "1", - "city": "VENDIN-LE-VIEIL", - "id": 15404, - "lat": 50.459607, - "lng": 2.824614, - "phone": "03 21 08 76 76", - "title": "CORA", - "zipcode": "62880" -}, { - "address": "35 AV PAUL VAILLANT COUTURIER", - "category": "2", - "city": "LA COURNEUVE", - "id": 18174, - "lat": 48.919748, - "lng": 2.4092104, - "phone": "01 48 36 27 51", - "title": "PHARMACIE DU SOLEIL", - "zipcode": "93120" -}, { - "address": "35 BIS RUE DOCTEUR ROCHEBLAVE", - "category": "1", - "city": "QUISSAC", - "id": 16415, - "lat": 43.9077274, - "lng": 4.003111, - "phone": "04 66 77 31 46", - "title": "PHARMACIE CHABROL", - "zipcode": "30260" -}, { - "address": "35 PLACE DU GENERAL LECLERC", - "category": "3", - "city": "AVESNES-SUR-HELPE", - "id": 19163, - "lat": 50.1217772, - "lng": 3.9322216, - "phone": "03 27 61 01 47", - "title": "PHARMACIE PICHOT", - "zipcode": "59440" -}, { - "address": "35 ROUTE DE PARIS - RN4 ZAC DES 4 CHENES", - "category": "2", - "city": "PONTAULT-COMBAULT", - "id": 15754, - "lat": 48.7765456, - "lng": 2.5905355, - "phone": "01 79 76 97 77", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "77340" -}, { - "address": "35 RUE DE LA SELLERIE", - "category": "1", - "city": "SAINT-QUENTIN", - "id": 19171, - "lat": 49.8459014, - "lng": 3.2896656, - "phone": "03 23 62 58 10", - "title": "PHARMACIE PINCHON", - "zipcode": "2100" -}, { - "address": "35 RUE DE LA SELLERIE", - "category": "2", - "city": "SAINT-QUENTIN", - "id": 19171, - "lat": 49.8459014, - "lng": 3.2896656, - "phone": "03 23 62 58 10", - "title": "PHARMACIE PINCHON", - "zipcode": "2100" -}, { - "address": "35 RUE DE LEVIS", - "category": "1", - "city": "PARIS", - "id": 14493, - "lat": 48.8827438, - "lng": 2.31478, - "phone": "01 47 63 24 12", - "title": "PHARMACIE DE LA TERRASSE", - "zipcode": "75017" -}, { - "address": "35 RUE DE PARIS", - "category": "2", - "city": "AUXERRE", - "id": 18762, - "lat": 47.796385, - "lng": 3.5687442, - "phone": "03 86 52 03 91", - "title": "PHARMACIE LE MAGOAROU", - "zipcode": "89000" -}, { - "address": "35 RUE DE PARIS", - "category": "2", - "city": "GISORS", - "id": 18732, - "lat": 49.2775047, - "lng": 1.7776461, - "phone": "02 32 27 36 83", - "title": "PHARMACIE LARVOR", - "zipcode": "27140" -}, { - "address": "35 RUE DU DOCTEUR ROUX", - "category": "2", - "city": "MONTRY", - "id": 18277, - "lat": 48.8850337, - "lng": 2.8322868, - "phone": "01 60 04 24 55", - "title": "PHARMACIE DUPONT", - "zipcode": "77450" -}, { - "address": "35 RUE JEAN BLEUZEN", - "category": "1", - "city": "VANVES", - "id": 18942, - "lat": 48.8218727, - "lng": 2.2936264, - "phone": "01 46 42 19 53", - "title": "PHARMACIE MEZRAHI - ABIHSSIRA", - "zipcode": "92170" -}, { - "address": "35 RUE MARIETTON", - "category": "2", - "city": "LYON", - "id": 14371, - "lat": 45.7753178, - "lng": 4.804491, - "phone": "04 78 43 46 54", - "title": "PARAPHARMACIE VALMY", - "zipcode": "69009" -}, { - "address": "35 RUE TREBOIS", - "category": "2", - "city": "LEVALLOIS-PERRET", - "id": 19650, - "lat": 48.8917806, - "lng": 2.289117, - "phone": "01 47 37 18 65", - "title": "PHARMACIE TREBOIS", - "zipcode": "92300" -}, { - "address": "357 RUE DE PARIS DOUAI CEDEX", - "category": "3", - "city": "DOUAI", - "id": 19747, - "lat": 50.3648108, - "lng": 3.0796974, - "phone": "03 27 99 14 00", - "title": "PHARMACIE WARTEL ET ASSOCIES", - "zipcode": "59500" -}, { - "address": "35BIS AVENUE JEAN JAURES", - "category": "1", - "city": "CROSNE", - "id": 18730, - "lat": 48.7164419, - "lng": 2.4580188, - "phone": "01 69 48 08 15", - "title": "PHARMACIE LARROQUE STANEK", - "zipcode": "91560" -}, { - "address": "36 AVENUE NIEL", - "category": "2", - "city": "PARIS", - "id": 14726, - "lat": 48.8817007, - "lng": 2.2959783, - "phone": "01 47 63 37 23", - "title": "PHARMACIE CASSAM", - "zipcode": "75017" -}, { - "address": "36 BLD DE LA MISSION MARCHAND", - "category": "1", - "city": "COURBEVOIE", - "id": 18527, - "lat": 48.8977366, - "lng": 2.2411548, - "phone": "01 47 88 94 33", - "title": "PHARMACIE HANNA SITRUK", - "zipcode": "92400" -}, { - "address": "36 BOULEVARD DE VERDUN", - "category": "1", - "city": "COURBEVOIE", - "id": 19596, - "lat": 48.8994377, - "lng": 2.262029, - "phone": "01 47 68 72 79", - "title": "PHARMACIE SUN", - "zipcode": "92400" -}, { - "address": "36 GRANDE RUE", - "category": "2", - "city": "BOURGTHEROULDE-INFREVILLE", - "id": 18474, - "lat": 49.2983887, - "lng": 0.8733313, - "phone": "02 35 87 60 78", - "title": "PHARMACIE GOT", - "zipcode": "27520" -}, { - "address": "36 PLACE DROUET D ERLON", - "category": "2", - "city": "REIMS", - "id": 16211, - "lat": 49.2553691, - "lng": 4.0274256, - "phone": "03 26 47 23 26", - "title": "PHARMACIE BRIDE", - "zipcode": "51100" -}, { - "address": "36 ROUTE DE BAYONNE", - "category": "2", - "city": "TOULOUSE", - "id": 15288, - "lat": 43.6086138, - "lng": 1.3943669, - "phone": "05 34 26 58 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "31000" -}, { - "address": "36 RUE DE L OCEAN", - "category": "1", - "city": "AURAY", - "id": 19204, - "lat": 47.6655657, - "lng": -3.0040491, - "phone": "02 97 50 84 98", - "title": "PHARMACIE PORTE OCEANE", - "zipcode": "56400" -}, { - "address": "36 RUE DE LA REPUBLIQUE", - "category": "1", - "city": "SAINT-DENIS", - "id": 15447, - "lat": 48.9366235, - "lng": 2.3549685, - "phone": "01 48 20 15 92", - "title": "GRANDE PHARMACIE CENTRALE", - "zipcode": "93200" -}, { - "address": "36 RUE DE LA REPUBLIQUE", - "category": "2", - "city": "SAINT-CYR-SUR-MER", - "id": 18422, - "lat": 43.1816549, - "lng": 5.7112875, - "phone": "04 94 26 10 03", - "title": "PHARMACIE GARNIER", - "zipcode": "83270" -}, { - "address": "36 RUE DES MARTYRS", - "category": "3", - "city": "PARIS", - "id": 14788, - "lat": 48.8788779, - "lng": 2.3399817, - "phone": "01 48 78 10 04", - "title": "PHARMACIE CENTRALE MARTYRS", - "zipcode": "75009" -}, { - "address": "36 RUE GAMBETTA", - "category": "3", - "city": "BEAUVAIS", - "id": 18415, - "lat": 49.433392, - "lng": 2.0852416, - "phone": "03 44 48 16 69", - "title": "PHARMACIE GAMBETTA", - "zipcode": "60000" -}, { - "address": "37 39 RUE D ISLE", - "category": "2", - "city": "SAINT-QUENTIN", - "id": 15889, - "lat": 49.8447224, - "lng": 3.2911377, - "phone": "03 23 62 21 48", - "title": "PHARMACIE 3 B", - "zipcode": "2100" -}, { - "address": "37 ALLEE DU PARC ARUNDO", - "category": "1", - "city": "FREJUS", - "id": 16270, - "lat": 43.4366749, - "lng": 6.7589651, - "phone": "04 94 81 24 45", - "title": "PHARMACIE CAP VALESCURE", - "zipcode": "83600" -}, { - "address": "37 AVENUE DE L YSER", - "category": "2", - "city": "AUCH", - "id": 19058, - "lat": 43.649809, - "lng": 0.5934635, - "phone": "05 62 05 08 25", - "title": "PHARMACIE OCCITANE", - "zipcode": "32000" -}, { - "address": "37 AVENUE JEAN JAURES", - "category": "2", - "city": "SAINT-MALO", - "id": 16920, - "lat": 48.6485932, - "lng": -2.0058097, - "phone": "02 99 56 31 96", - "title": "PHARMACIE DE LA GARE", - "zipcode": "35400" -}, { - "address": "37 BOULEVARD GAMBETTA", - "category": "1", - "city": "LURCY-LEVIS", - "id": 16335, - "lat": 46.7305532, - "lng": 2.9389619, - "phone": "04 70 67 80 35", - "title": "PHARMACIE CENTRALE", - "zipcode": "3320" -}, { - "address": "37 RUE DE LA PLAGE", - "category": "1", - "city": "SOULAC-SUR-MER", - "id": 17320, - "lat": 45.5150745, - "lng": -1.1260934, - "phone": "05 56 09 84 04", - "title": "PHARMACIE DE SOULAC", - "zipcode": "33780" -}, { - "address": "37 RUE DE TURENNE", - "category": "2", - "city": "PARIS", - "id": 14618, - "lat": 48.856946, - "lng": 2.3643206, - "phone": "01 48 87 97 60", - "title": "PHARMACIE MEYER POINSOT", - "zipcode": "75003" -}, { - "address": "37 RUE GASTON DE FLOTTE", - "category": "2", - "city": "MARSEILLE", - "id": 14484, - "lat": 43.2965263, - "lng": 5.4260228, - "phone": "04 91 42 27 53", - "title": "PHARMACIE DE LA PARETTE", - "zipcode": "13012" -}, { - "address": "37 RUE GRANDE", - "category": "3", - "city": "FONTAINEBLEAU", - "id": 16227, - "lat": 48.4049176, - "lng": 2.700954, - "phone": "01 64 22 21 60", - "title": "PHARMACIE BRUNET MICHEL", - "zipcode": "77300" -}, { - "address": "37 RUE JEAN LEBAS", - "category": "2", - "city": "NOMAIN", - "id": 19126, - "lat": 50.499082, - "lng": 3.248976, - "phone": "03 20 71 85 26", - "title": "PHARMACIE PERCHE.", - "zipcode": "59310" -}, { - "address": "37BIS AVENUE COLBERT", - "category": "1", - "city": "NEVERS", - "id": 16192, - "lat": 46.9978972, - "lng": 3.1566142, - "phone": "03 86 61 13 66", - "title": "PHARMACIE BOUZAT", - "zipcode": "58000" -}, { - "address": "38 AV JEAN BAPTISTE CLEMENT", - "category": "1", - "city": "BOULOGNE-BILLANCOURT", - "id": 15544, - "lat": 48.8464167, - "lng": 2.2380852, - "phone": "01 46 05 04 59", - "title": "LA PHARMACIE DE ROLAND GARROS", - "zipcode": "92100" -}, { - "address": "38 AV SIMON BOLIVAR", - "category": "2", - "city": "PARIS", - "id": 14442, - "lat": 48.875681, - "lng": 2.3828359, - "phone": "01 42 08 60 77", - "title": "PHARMACIE CONSEIL BOLIVAR -", - "zipcode": "75019" -}, { - "address": "38 AVENUE DE VERDUN", - "category": "2", - "city": "VILLENEUVE-LA-GARENNE", - "id": 16995, - "lat": 48.9364292, - "lng": 2.3314178, - "phone": "01 47 98 15 18", - "title": "PHARMACIE DE LA MAIRIE", - "zipcode": "92390" -}, { - "address": "38 BD LLANTWIT MAJOR", - "category": "1", - "city": "LE POULIGUEN", - "id": 16761, - "lat": 47.2790883, - "lng": -2.4354019, - "phone": "02 40 42 15 10", - "title": "PHARMACIE DE L EUROPE", - "zipcode": "44510" -}, { - "address": "38 ROUTE DE LYON", - "category": "2", - "city": "GENAS", - "id": 17160, - "lat": 45.732313, - "lng": 4.9952549, - "phone": "04 72 47 07 77", - "title": "PHARMACIE DE LA TOUR", - "zipcode": "69740" -}, { - "address": "38 RUE COMPANS", - "category": "1", - "city": "SALIES-DU-SALAT", - "id": 16307, - "lat": 43.1035343, - "lng": 0.9593334, - "phone": "05 61 90 51 24", - "title": "PHARMACIE CENTRALE", - "zipcode": "31260" -}, { - "address": "38 RUE DE L ECU", - "category": "1", - "city": "COURVILLE-SUR-EURE", - "id": 16400, - "lat": 48.448783, - "lng": 1.2414236, - "phone": "02 37 23 20 24", - "title": "PHARMACIE CENTRALE PAYS COURVILLOIS", - "zipcode": "28190" -}, { - "address": "38 RUE DE LA PORTE DE TRIVAUX", - "category": "2", - "city": "CLAMART", - "id": 17933, - "lat": 48.7912939, - "lng": 2.260334, - "phone": "01 46 32 15 70", - "title": "PHARMACIE DU HAUT DE CLAMART", - "zipcode": "92140" -}, { - "address": "38 RUE DE LA REPUBLIQUE", - "category": "2", - "city": "MEUDON", - "id": 18553, - "lat": 48.8070798, - "lng": 2.2355405, - "phone": "01 45 34 12 45", - "title": "PHARMACIE HERVET CAUCHON", - "zipcode": "92190" -}, { - "address": "38 RUE DE LA REPUBLIQUE", - "category": "2", - "city": "SAINT-ETIENNE", - "id": 17112, - "lat": 45.4391553, - "lng": 4.3939196, - "phone": "04 77 32 43 99", - "title": "PHARMACIE DE LA REPUBLIQUE", - "zipcode": "42000" -}, { - "address": "38 RUE DE LA REPUBLIQUE", - "category": "2", - "city": "VERBERIE", - "id": 18470, - "lat": 49.308197, - "lng": 2.728433, - "phone": "03 44 38 80 80", - "title": "PHARMACIE GORIN", - "zipcode": "60410" -}, { - "address": "38 RUE DE PASSY", - "category": "3", - "city": "PARIS", - "id": 14727, - "lat": 48.8578727, - "lng": 2.2806384, - "phone": "01 42 88 21 68", - "title": "PHARMACIE CENTRALE DE PASSY", - "zipcode": "75016" -}, { - "address": "38 RUE DIDEROT", - "category": "2", - "city": "ISSY-LES-MOULINEAUX", - "id": 15179, - "lat": 48.824134, - "lng": 2.2725892, - "phone": "01 46 42 16 51", - "title": "AMAR MAURIERE ZINSIUS", - "zipcode": "92130" -}, { - "address": "38 RUE DU DOCTEUR BLANCHE", - "category": "1", - "city": "PARIS", - "id": 14545, - "lat": 48.8541088, - "lng": 2.2652331, - "phone": "01 46 47 82 90", - "title": "PHARMACIE DU DOCTEUR BLANCHE", - "zipcode": "75016" -}, { - "address": "38 RUE NATIONALE", - "category": "2", - "city": "PONTIVY", - "id": 17415, - "lat": 48.0668339, - "lng": -2.9656825, - "phone": "02 97 25 01 90", - "title": "PHARMACIE DES ARCADES", - "zipcode": "56300" -}, { - "address": "382 AVENUE DU ROSSIGNOL", - "category": "2", - "city": "ARDRES", - "id": 18639, - "lat": 50.8733812, - "lng": 1.9786595, - "phone": "03 21 82 23 33", - "title": "PHARMACIE JULIEN DEMAREZ", - "zipcode": "62610" -}, { - "address": "389 AVENUE DE L' HIPPODROME", - "category": "2", - "city": "LAMBERSART", - "id": 19148, - "lat": 50.6511158, - "lng": 3.0226382, - "phone": "03 20 92 27 47", - "title": "PHARMACIE PEYRONNET WAMBRE", - "zipcode": "59130" -}, { - "address": "39 AVENUE DE LA LIBERATION", - "category": "3", - "city": "COURNON-D'AUVERGNE", - "id": 17942, - "lat": 45.7319868, - "lng": 3.1917159, - "phone": "04 73 84 96 07", - "title": "PHARMACIE DU LAC", - "zipcode": "63800" -}, { - "address": "39 RUE DE L ARCADE", - "category": "2", - "city": "PARIS", - "id": 14607, - "lat": 48.8734911, - "lng": 2.3242086, - "phone": "01 42 65 35 93", - "title": "PHARMACIE LUDERS", - "zipcode": "75008" -}, { - "address": "39 RUE DE LA FALKRIK", - "category": "1", - "city": "CRETEIL", - "id": 19827, - "lat": 48.7714849, - "lng": 2.4606869, - "phone": "01 43 99 44 72", - "title": "PHARMACIE DE LA SOURCE", - "zipcode": "94000" -}, { - "address": "39 RUE JEAN JAURES", - "category": "2", - "city": "BULLY-LES-MINES", - "id": 19767, - "lat": 50.4424748, - "lng": 2.7214827, - "phone": "03 21 72 18 68", - "title": "PHARMACIE ZANETTI-CARDON", - "zipcode": "62160" -}, { - "address": "39 RUE LOUIS PASTEUR", - "category": "2", - "city": "BREST", - "id": 18898, - "lat": 48.3880811, - "lng": -4.4901071, - "phone": "02 98 44 24 91", - "title": "PHARMACIE MARZIN MONGUILLON", - "zipcode": "29200" -}, { - "address": "390 RUE JEAN MARIE TJIBAOU CCIAL CARREFOUR ZI LA COURTINE", - "category": "1", - "city": "AVIGNON", - "id": 16861, - "lat": 43.928242, - "lng": 4.793375, - "phone": "04 90 86 13 93", - "title": "PHARMACIE DE LA COURTINE", - "zipcode": "84000" -}, { - "address": "4 - 6 RUE DE NOISY LE GRAND", - "category": "2", - "city": "BRY-SUR-MARNE", - "id": 17863, - "lat": 48.838906, - "lng": 2.5226284, - "phone": "01 48 81 42 00", - "title": "PHARMACIE DU COLOMBIER", - "zipcode": "94360" -}, { - "address": "4 AVENUE DE BOULOGNE", - "category": "1", - "city": "MARCONNE", - "id": 16730, - "lat": 50.371819, - "lng": 2.0310741, - "phone": "03 21 86 93 78", - "title": "PHARMACIE DE L AVENUE", - "zipcode": "62140" -}, { - "address": "4 AVENUE JACQUES DOUZANS", - "category": "2", - "city": "MURET", - "id": 18913, - "lat": 43.4622057, - "lng": 1.3250822, - "phone": "05 61 51 00 20", - "title": "PHARMACIE MAUREL", - "zipcode": "31600" -}, { - "address": "4 AVENUE WINSTON CHURCHILL LA TERRASSE", - "category": "2", - "city": "AIX-EN-PROVENCE", - "id": 19052, - "lat": 43.5192785, - "lng": 5.4454415, - "phone": "04 42 59 12 12", - "title": "PHARMACIE NOUVELLES FACULTES", - "zipcode": "13090" -}, { - "address": "4 B PLACE GUILLAUME LE CONQUERAN", - "category": "2", - "city": "EU", - "id": 18010, - "lat": 50.0483061, - "lng": 1.4194897, - "phone": "02 35 86 06 01", - "title": "PHARMACIE DU MARCHE", - "zipcode": "76260" -}, { - "address": "4 BIS RUE D INKERMANN", - "category": "1", - "city": "SAINT-MAUR-DES-FOSSES", - "id": 16556, - "lat": 48.7967355, - "lng": 2.486328, - "phone": "01 48 83 01 13", - "title": "PHARMACIE D ADAMVILLE HUARD", - "zipcode": "94100" -}, { - "address": "4 BOULEVARD ARISTIDE BRIAND", - "category": "3", - "city": "ROYAN", - "id": 19211, - "lat": 45.6248943, - "lng": -1.0295325, - "phone": "05 46 05 06 55", - "title": "PHARMACIE POUMAILLOUX", - "zipcode": "17200" -}, { - "address": "4 BOULEVARD DE LA CHAPELLE", - "category": "2", - "city": "PARIS", - "id": 14381, - "lat": 48.8845909, - "lng": 2.3647617, - "phone": "01 40 05 10 47", - "title": "PHARMACIE STEINBERG", - "zipcode": "75018" -}, { - "address": "4 BOULEVARD OSCAR THEVENIN", - "category": "2", - "city": "HERBLAY", - "id": 16932, - "lat": 48.9902729, - "lng": 2.1632788, - "phone": "01 39 97 07 88", - "title": "PHARMACIE DE LA GARE", - "zipcode": "95220" -}, { - "address": "4 CHAUSSEE DE LA MUETTE", - "category": "1", - "city": "PARIS", - "id": 14648, - "lat": 48.8581888, - "lng": 2.2741256, - "phone": "01 42 88 18 30", - "title": "PHARMACIE PONSARD", - "zipcode": "75016" -}, { - "address": "4 COURS FERDINAND DE LESSEPS", - "category": "1", - "city": "RUEIL-MALMAISON", - "id": 17214, - "lat": 48.8889895, - "lng": 2.1673668, - "phone": "01 47 08 04 30", - "title": "PHARMACIE DE L'EUROPE", - "zipcode": "92500" -}, { - "address": "4 PL TAVARNELLE VAL DI PESA", - "category": "2", - "city": "GAGNY", - "id": 18525, - "lat": 48.877393, - "lng": 2.552512, - "phone": "01 43 30 05 92", - "title": "PHARMACIE HAIK", - "zipcode": "93220" -}, { - "address": "4 PLACE ARISTID BRIAND", - "category": "1", - "city": "CASTELNAU-DE-MEDOC", - "id": 16482, - "lat": 45.0273668, - "lng": -0.7986005, - "phone": "05 56 58 16 41", - "title": "PHARMACIE CLEMENT & FRERES", - "zipcode": "33480" -}, { - "address": "4 PLACE CARNOT", - "category": "1", - "city": "GIVET", - "id": 17808, - "lat": 50.1362561, - "lng": 4.8250516, - "phone": "03 24 42 05 38", - "title": "PHARMACIE DU CENTRE", - "zipcode": "8600" -}, { - "address": "4 PLACE DE JAUDE", - "category": "2", - "city": "CLERMONT-FERRAND", - "id": 19006, - "lat": 45.7778097, - "lng": 3.0814434, - "phone": "04 73 19 81 50", - "title": "PHARMACIE MUTUALISTE", - "zipcode": "63000" -}, { - "address": "4 PLACE DE L HOTEL DE VILLE", - "category": "2", - "city": "MERU", - "id": 16998, - "lat": 49.2363233, - "lng": 2.1354682, - "phone": "03 44 22 41 57", - "title": "PHARMACIE DE LA MAIRIE", - "zipcode": "60110" -}, { - "address": "4 PLACE DE L HOTEL DE VILLE", - "category": "2", - "city": "VERZY", - "id": 19645, - "lat": 49.1474292, - "lng": 4.1628836, - "phone": "03 26 97 91 28", - "title": "PHARMACIE TONNEL DEVRIERE", - "zipcode": "51380" -}, { - "address": "4 PLACE DE LA FEVRIERE", - "category": "3", - "city": "SAINT-FLORENT-LE-VIEIL", - "id": 18769, - "lat": 47.3612565, - "lng": -1.016451, - "phone": "02 41 72 50 13", - "title": "PHARMACIE LE VOURCH", - "zipcode": "49410" -}, { - "address": "4 PLACE DE LA REPUBLIQUE", - "category": "2", - "city": "LEVALLOIS-PERRET", - "id": 15461, - "lat": 48.8934457, - "lng": 2.2886715, - "phone": "01 47 37 03 26", - "title": "GRANDE PHARMACIE DE LA MAIRIE", - "zipcode": "92300" -}, { - "address": "4 PLACE DU DOCTEUR CLEMENT", - "category": "2", - "city": "PALAVAS-LES-FLOTS", - "id": 18459, - "lat": 43.5287632, - "lng": 3.929656, - "phone": "04 67 68 00 43", - "title": "PHARMACIE GIRET", - "zipcode": "34250" -}, { - "address": "4 PLACE JEAN MERMOZ", - "category": "3", - "city": "CHATILLON", - "id": 19160, - "lat": 48.8096134, - "lng": 2.2919442, - "phone": "01 47 35 34 48", - "title": "PHARMACIE PICARD", - "zipcode": "92320" -}, { - "address": "4 PLACE PIERRE VICTOR LEGER", - "category": "2", - "city": "VICHY", - "id": 18965, - "lat": 46.1296402, - "lng": 3.4238514, - "phone": "04 70 98 63 75", - "title": "PHARMACIE MONDIALE", - "zipcode": "3200" -}, { - "address": "4 ROND POINT DE MONTFERMEIL", - "category": "2", - "city": "LE RAINCY", - "id": 16123, - "lat": 48.8956376, - "lng": 2.5271706, - "phone": "01 43 81 01 37", - "title": "PHARMACIE BLONDEL", - "zipcode": "93340" -}, { - "address": "4 RUE ALBERT 1ER", - "category": "1", - "city": "ALES", - "id": 15964, - "lat": 44.1253595, - "lng": 4.077571, - "phone": "04 66 52 34 06", - "title": "PHARMACIE AU NATUREL", - "zipcode": "30100" -}, { - "address": "4 RUE DE L AQUEDUC CENTRE COMMERCIAL BEAUREGARD", - "category": "2", - "city": "LA CELLE-SAINT-CLOUD", - "id": 16178, - "lat": 48.8448468, - "lng": 2.1320075, - "phone": "01 39 69 06 99", - "title": "PHARMACIE BOURGEOIS LE VERRE", - "zipcode": "78170" -}, { - "address": "4 RUE DE LA CHEVECHE CHATEAUGAY DISTRIBUTION", - "category": "1", - "city": "DOMERAT", - "id": 15695, - "lat": 46.3652323, - "lng": 2.5633765, - "phone": "04 70 02 31 31", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "3410" -}, { - "address": "4 RUE DE LA PLACE DU CHAMP DE MARS", - "category": "3", - "city": "ANGOULEME", - "id": 19283, - "lat": 45.648978, - "lng": 0.1621724, - "phone": "05 45 92 57 44", - "title": "PHARMACIE RANDAZZO", - "zipcode": "16000" -}, { - "address": "4 RUE DE LYON", - "category": "1", - "city": "LA TOUR-DE-SALVAGNY", - "id": 17466, - "lat": 45.8148967, - "lng": 4.7180292, - "phone": "04 78 48 01 65", - "title": "PHARMACIE DES COQUELICOTS", - "zipcode": "69890" -}, { - "address": "4 RUE DES CHALANDS ENTREE RUE DES FOIRES", - "category": "2", - "city": "BUSSY-SAINT-GEORGES", - "id": 18002, - "lat": 48.838381, - "lng": 2.712139, - "phone": "01 64 66 85 69", - "title": "PHARMACIE DU MARCHE", - "zipcode": "77600" -}, { - "address": "4 RUE DU 8 MAI 1945", - "category": "3", - "city": "AUBERGENVILLE", - "id": 16869, - "lat": 48.9600184, - "lng": 1.850928, - "phone": "01 30 91 03 61", - "title": "PHARMACIE DE LA CROIX GATE", - "zipcode": "78410" -}, { - "address": "4 RUE DU DOCTEUR MAGNE", - "category": "3", - "city": "MEZE", - "id": 17752, - "lat": 43.4253782, - "lng": 3.6063193, - "phone": "04 67 43 82 76", - "title": "PHARMACIE DU CENTRE", - "zipcode": "34140" -}, { - "address": "4 RUE GAMBETTA", - "category": "2", - "city": "SAINT-JEAN-DE-LUZ", - "id": 16082, - "lat": 43.3879615, - "lng": -1.6632904, - "phone": "05 59 26 00 47", - "title": "PHARMACIE BESSE", - "zipcode": "64500" -}, { - "address": "4 RUE GARDINER", - "category": "2", - "city": "DINARD", - "id": 17304, - "lat": 48.6355997, - "lng": -2.0674306, - "phone": "02 99 46 10 44", - "title": "PHARMACIE DE SAINT ENOGAT", - "zipcode": "35800" -}, { - "address": "4 RUE HENRI BARBUSSE", - "category": "1", - "city": "GAGNY", - "id": 17093, - "lat": 48.8846666, - "lng": 2.5332974, - "phone": "01 43 81 09 96", - "title": "PHARMACIE DE LA POSTE", - "zipcode": "93220" -}, { - "address": "4 RUE HENRI BARBUSSE", - "category": "3", - "city": "SAINT-AMAND-MONTROND", - "id": 19236, - "lat": 46.7227313, - "lng": 2.5032683, - "phone": "02 48 82 10 82", - "title": "PHARMACIE PRINCIPALE", - "zipcode": "18200" -}, { - "address": "4 RUE JEAN DE LA FONTAINE", - "category": "2", - "city": "PARIS", - "id": 14595, - "lat": 48.852839, - "lng": 2.2753905, - "phone": "01 42 88 79 51", - "title": "PHARMACIE LA FONTAINE", - "zipcode": "75016" -}, { - "address": "4 RUE JEAN JAURES", - "category": "2", - "city": "GOINCOURT", - "id": 19091, - "lat": 49.426175, - "lng": 2.0376075, - "phone": "03 44 15 33 44", - "title": "PHARMACIE PARAGE", - "zipcode": "60000" -}, { - "address": "4 RUE JEAN JAURES", - "category": "2", - "city": "TULLE", - "id": 18950, - "lat": 45.2653247, - "lng": 1.7694027, - "phone": "05 55 26 65 00", - "title": "PHARMACIE MILHET", - "zipcode": "19000" -}, { - "address": "4 RUE JEAN MOULIN", - "category": "3", - "city": "PONTCHARRA-SUR-TURDINE", - "id": 17169, - "lat": 45.8744149, - "lng": 4.489379, - "phone": "04 74 05 61 64", - "title": "PHARMACIE DE LA TURDINE", - "zipcode": "69490" -}, { - "address": "4 RUE JULES FERRY", - "category": "1", - "city": "LAMBRES-LEZ-DOUAI", - "id": 16529, - "lat": 50.3529224, - "lng": 3.0647013, - "phone": "03 27 88 80 15", - "title": "PHARMACIE COURTECUISSE", - "zipcode": "59552" -}, { - "address": "4 RUE LAVOISIER", - "category": "3", - "city": "PAU", - "id": 16804, - "lat": 43.3110023, - "lng": -0.3649056, - "phone": "05 59 02 74 57", - "title": "PHARMACIE DE L UNIVERSITE", - "zipcode": "64000" -}, { - "address": "4 RUE ORDENER", - "category": "2", - "city": "PARIS", - "id": 14432, - "lat": 48.8903957, - "lng": 2.3591927, - "phone": "01 46 07 68 53", - "title": "PHARMACIE CENTRALE ORDENER", - "zipcode": "75018" -}, { - "address": "4 Rue Claudius Moiroud", - "category": "3", - "city": "COUZON-AU-MONT-D'OR", - "id": 15004, - "lat": 45.8453235, - "lng": 4.8320171, - "phone": "04 78 22 21 37", - "title": "PHARMACIE DE COUZON", - "zipcode": "69270" -}, { - "address": "4 centre Commercial Carré d'As ", - "category": "3", - "city": "BELLERIVE-SUR-ALLIER", - "id": 15045, - "lat": 46.1162047, - "lng": 3.414731, - "phone": "04 70 59 81 11", - "title": "PHARMACIE DU CARRE D AS", - "zipcode": "3700" -}, { - "address": "40 AV MAL DE LATTRE DE TASSIGN", - "category": "2", - "city": "CACHAN", - "id": 17363, - "lat": 48.7863059, - "lng": 2.3324261, - "phone": "01 46 65 68 60", - "title": "PHARMACIE DELPECH", - "zipcode": "94230" -}, { - "address": "40 GRAND RUE", - "category": "2", - "city": "VAISON-LA-ROMAINE", - "id": 16513, - "lat": 44.240499, - "lng": 5.074454, - "phone": "04 90 36 00 66", - "title": "PHARMACIE CORNU-PASTOK", - "zipcode": "84110" -}, { - "address": "40 PL DE L HOT DE VIL C OTTINA", - "category": "1", - "city": "SAINT-PRIEST", - "id": 18895, - "lat": 45.6943666, - "lng": 4.9377778, - "phone": "04 78 20 26 81", - "title": "PHARMACIE MARTINEU", - "zipcode": "69800" -}, { - "address": "40 PLACE DU COLOMBIER CENTRE COMMERCIAL COLOMBIA", - "category": "2", - "city": "RENNES", - "id": 16495, - "lat": 48.1047912, - "lng": -1.6814553, - "phone": "02 99 65 08 08", - "title": "PHARMACIE COLOMBIA", - "zipcode": "35000" -}, { - "address": "40 RUE BOUCICAUT", - "category": "2", - "city": "FONTENAY-AUX-ROSES", - "id": 19615, - "lat": 48.7909555, - "lng": 2.2885019, - "phone": "01 46 61 10 09", - "title": "PHARMACIE TELLE", - "zipcode": "92260" -}, { - "address": "40 RUE DE BELLECHASSE", - "category": "1", - "city": "PARIS", - "id": 14622, - "lat": 48.8577336, - "lng": 2.3221477, - "phone": "01 45 51 78 44", - "title": "PHARMACIE MONTEUX", - "zipcode": "75007" -}, { - "address": "40 RUE DE LA CLE CHAMPS", - "category": "2", - "city": "MAGNY-LE-HONGRE", - "id": 17237, - "lat": 48.8674754, - "lng": 2.8136464, - "phone": "01 60 43 79 29", - "title": "PHARMACIE DE MAGNY", - "zipcode": "77700" -}, { - "address": "40 RUE DU CANAL 76380 BAPEAUME LES ROUEN", - "category": "1", - "city": "CANTELEU", - "id": 15780, - "lat": 49.4577, - "lng": 1.045099, - "phone": "02 32 83 23 00", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "76380" -}, { - "address": "40 RUE DU GENERAL LECLERC", - "category": "3", - "city": "LA BASSEE", - "id": 17431, - "lat": 50.5314633, - "lng": 2.8067613, - "phone": "03 20 29 02 33", - "title": "PHARMACIE DES AUGUSTINS", - "zipcode": "59480" -}, { - "address": "40 RUE GEORGES HAUSSMANN", - "category": "2", - "city": "GUYANCOURT", - "id": 17335, - "lat": 48.7668808, - "lng": 2.0785559, - "phone": "01 30 43 60 00", - "title": "PHARMACIE DE VILLAROY", - "zipcode": "78280" -}, { - "address": "40 RUE HENRI BARBUSSE", - "category": "3", - "city": "CLICHY", - "id": 18293, - "lat": 48.8996979, - "lng": 2.3059436, - "phone": "01 47 37 03 35", - "title": "PHARMACIE ENCAOUA", - "zipcode": "92110" -}, { - "address": "40 RUE ROGER GODARD BP 80210", - "category": "1", - "city": "FLIXECOURT", - "id": 18281, - "lat": 50.0150069, - "lng": 2.0808365, - "phone": "03 22 51 60 31", - "title": "PHARMACIE DUSAUSSOY DEVRED", - "zipcode": "80420" -}, { - "address": "40 RUE ROGER GODARD BP 80210", - "category": "2", - "city": "FLIXECOURT", - "id": 18281, - "lat": 50.0150069, - "lng": 2.0808365, - "phone": "03 22 51 60 31", - "title": "PHARMACIE DUSAUSSOY DEVRED", - "zipcode": "80420" -}, { - "address": "40 Rue de l'Ancienne Route Nationale ", - "category": "3", - "city": "GRANDE-SYNTHE", - "id": 14866, - "lat": 51.0054447, - "lng": 2.2777885, - "phone": "03 28 58 55 93", - "title": "AUCHAN ESPACE SANTE BEAUTE ", - "zipcode": "59760" -}, { - "address": "404 AVENUE DI QUERCY", - "category": "1", - "city": "VALENCE", - "id": 16940, - "lat": 44.1162514, - "lng": 0.8923324, - "phone": "05 63 29 09 31", - "title": "PHARMACIE DE LA GARENNE", - "zipcode": "82400" -}, { - "address": "405 CHEMIN BAS DE MONTPELLIER", - "category": "2", - "city": "NIMES", - "id": 15275, - "lat": 43.8177168, - "lng": 4.343135, - "phone": "04 66 63 32 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "30000" -}, { - "address": "41 AVENUE DE CANNES", - "category": "2", - "city": "VALLAURIS", - "id": 17496, - "lat": 43.5755983, - "lng": 7.0499313, - "phone": "04 93 64 18 20", - "title": "PHARMACIE DES FLORALIES", - "zipcode": "6220" -}, { - "address": "41 AVENUE DE PARIS", - "category": "2", - "city": "POUGUES-LES-EAUX", - "id": 17149, - "lat": 47.0764088, - "lng": 3.0999366, - "phone": "03 86 68 82 65", - "title": "PHARMACIE DE LA SOURCE", - "zipcode": "58320" -}, { - "address": "41 AVENUE JEAN JAURES", - "category": "2", - "city": "NIMES", - "id": 15498, - "lat": 43.8333316, - "lng": 4.3521202, - "phone": "04 66 67 34 82", - "title": "GRANDE PHARMACIE GERBAUD", - "zipcode": "30900" -}, { - "address": "41 BOULEVARD ALBERT BUISSON", - "category": "1", - "city": "ISSOIRE", - "id": 18723, - "lat": 45.5461687, - "lng": 3.2486722, - "phone": "04 73 89 23 67", - "title": "PHARMACIE LAREYRE", - "zipcode": "63500" -}, { - "address": "41 BOULEVARD JEANNE D ARC", - "category": "3", - "city": "MARSEILLE", - "id": 14672, - "lat": 43.2940298, - "lng": 5.4012258, - "phone": "04 91 42 29 44", - "title": "PHARMACIE SAKAKINI", - "zipcode": "13005" -}, { - "address": "41 COURS BRILLIER", - "category": "2", - "city": "VIENNE", - "id": 19654, - "lat": 45.5220807, - "lng": 4.8725621, - "phone": "04 74 85 18 34", - "title": "PHARMACIE TRICAUD", - "zipcode": "38200" -}, { - "address": "41 GRANDE RUE", - "category": "2", - "city": "BOULOGNE-SUR-MER", - "id": 16383, - "lat": 50.7237405, - "lng": 1.6068359, - "phone": "03 21 31 64 51", - "title": "PHARMACIE CENTRALE", - "zipcode": "62200" -}, { - "address": "41 ROUTE DE GENEVE", - "category": "3", - "city": "SAINT-MAURICE-DE-BEYNOST", - "id": 16856, - "lat": 45.8293345, - "lng": 4.9770004, - "phone": "04 78 55 14 06", - "title": "PHARMACIE DE LA COTIERE SNC", - "zipcode": "1700" -}, { - "address": "41 RUE DE L EUROPE", - "category": "3", - "city": "SAINT-CREPIN-IBOUVILLERS", - "id": 17689, - "lat": 49.2618343, - "lng": 2.0789235, - "phone": "03 44 08 78 44", - "title": "PHARMACIE DOUDET VASSOUT", - "zipcode": "60149" -}, { - "address": "42 AV DE BRETEUIL", - "category": "3", - "city": "PARIS", - "id": 14617, - "lat": 48.8505606, - "lng": 2.3113954, - "phone": "01 47 83 59 82", - "title": "PHARMACIE MESNARD", - "zipcode": "75007" -}, { - "address": "42 AV PIERRE LEFAUCHEUX", - "category": "1", - "city": "BOULOGNE-BILLANCOURT", - "id": 18200, - "lat": 48.8251493, - "lng": 2.2398823, - "phone": "01 46 21 13 31", - "title": "PHARMACIE DU TRAPEZE", - "zipcode": "92100" -}, { - "address": "42 AVENUE MARECHAL FOCH", - "category": "2", - "city": "LYON", - "id": 14579, - "lat": 45.770497, - "lng": 4.8431901, - "phone": "04 78 89 14 18", - "title": "PHARMACIE FOCH", - "zipcode": "69006" -}, { - "address": "42 RUE DU THEATRE", - "category": "2", - "city": "PARIS", - "id": 18191, - "lat": 48.848872, - "lng": 2.2881773, - "phone": "01 45 77 15 65", - "title": "PHARMACIE DU THEATRE", - "zipcode": "75015" -}, { - "address": "42 RUE PRESIDENT WILSON", - "category": "1", - "city": "LEVALLOIS-PERRET", - "id": 15501, - "lat": 48.8915683, - "lng": 2.2913941, - "phone": "01 47 37 43 16", - "title": "GRANDE PHARMACIE LEVALLOIS", - "zipcode": "92300" -}, { - "address": "43 AVENUE CARNOT", - "category": "2", - "city": "MASSY", - "id": 17477, - "lat": 48.7245205, - "lng": 2.2610318, - "phone": "01 69 20 12 77", - "title": "PHARMACIE DES DEUX GARES", - "zipcode": "91300" -}, { - "address": "43 AVENUE DE BOUTINY", - "category": "2", - "city": "PEYMEINADE", - "id": 19449, - "lat": 43.6417561, - "lng": 6.8790192, - "phone": "04 93 66 10 97", - "title": "PHARMACIE SAINT MARC", - "zipcode": "6530" -}, { - "address": "43 AVENUE DE LA PAIX", - "category": "2", - "city": "DURTOL", - "id": 16648, - "lat": 45.79084, - "lng": 3.0539626, - "phone": "04 73 37 62 40", - "title": "PHARMACIE DE CHANTEMERLE", - "zipcode": "63830" -}, { - "address": "43 AVENUE MAURICE MARTIN CENTRE COMMERCIAL SEGOSA", - "category": "2", - "city": "MIMIZAN", - "id": 17064, - "lat": 44.2133107, - "lng": -1.2916478, - "phone": "05 58 09 09 26", - "title": "PHARMACIE DE LA PLAGE", - "zipcode": "40200" -}, { - "address": "43 GRANDE RUE", - "category": "1", - "city": "L ISLE-ADAM", - "id": 17588, - "lat": 49.1123437, - "lng": 2.2171586, - "phone": "01 34 69 00 03", - "title": "PHARMACIE DES PLANTES", - "zipcode": "95290" -}, { - "address": "43 ROUTE DE PARIS", - "category": "1", - "city": "NANTES", - "id": 19094, - "lat": 47.249805, - "lng": -1.515271, - "phone": "02 40 93 97 15", - "title": "PHARMACIE PARIDIS", - "zipcode": "44000" -}, { - "address": "43 RUE AMBROISSE PARE ROND POINT DE L EUROPE", - "category": "3", - "city": "SAINT-GILLES-CROIX-DE-VIE", - "id": 15572, - "lat": 46.6946911, - "lng": -1.9157805, - "phone": "02 51 55 91 12", - "title": "OCEANIS", - "zipcode": "85800" -}, { - "address": "43 RUE CARNOT", - "category": "1", - "city": "MACON", - "id": 19917, - "lat": 46.3043834, - "lng": 4.8334693, - "phone": "03 85 38 97 22", - "title": "TANGUY COSMETIQUES MACON", - "zipcode": "71000" -}, { - "address": "43 RUE D'AUTEUIL", - "category": "1", - "city": "PARIS", - "id": 14808, - "lat": 48.8476557, - "lng": 2.2652293, - "phone": "01 42 88 07 96", - "title": "PHARMACIE DE LA CROIX BLEUE", - "zipcode": "75016" -}, { - "address": "43 RUE DE CHARTRES", - "category": "1", - "city": "NEUILLY-SUR-SEINE", - "id": 17260, - "lat": 48.8821772, - "lng": 2.2772383, - "phone": "01 46 24 03 24", - "title": "PHARMACIE DE NEUILLY", - "zipcode": "92200" -}, { - "address": "43 RUE DU BOIS BELIN", - "category": "1", - "city": "ANGLET", - "id": 15635, - "lat": 43.4931804, - "lng": -1.5183789, - "phone": "05 59 03 99 28", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "64600" -}, { - "address": "43-45 AVENUE KLEBER", - "category": "1", - "city": "PARIS", - "id": 14812, - "lat": 48.8683454, - "lng": 2.2914488, - "phone": "01 47 27 83 68", - "title": "PHARMACIE BOISSIERE", - "zipcode": "75016" -}, { - "address": "433 GAL MARCHANDE JEAN MERMOZ CENTRE COMMERCIAL JEAN MERMOZ", - "category": "1", - "city": "SAINTE-MAXIME", - "id": 19737, - "lat": 43.3108909, - "lng": 6.633583, - "phone": "04 94 96 03 05", - "title": "PHARMACIE VIUDES", - "zipcode": "83120" -}, { - "address": "44 AVENUE MARC SANGNIER", - "category": "2", - "city": "ARMENTIERES", - "id": 20176, - "lat": 50.69667, - "lng": 2.8833, - "phone": "03 20 77 27 87", - "title": "PHARMACIE DU BIZET", - "zipcode": "59280" -}, { - "address": "44 AVENUE PAUL LANGEVIN ", - "category": "2", - "city": "RIS-ORANGIS", - "id": 14967, - "lat": 48.6447406, - "lng": 2.3961192, - "phone": "01 69 02 86 01", - "title": "PARASHOP", - "zipcode": "91130" -}, { - "address": "44 BD ALEXANDRE III", - "category": "2", - "city": "CANNES", - "id": 18463, - "lat": 43.5458879, - "lng": 7.0403925, - "phone": "04 93 43 08 29", - "title": "PHARMACIE GODARD", - "zipcode": "6400" -}, { - "address": "44 RUE DE CALAIS", - "category": "2", - "city": "LE TOUQUET-PARIS-PLAGE", - "id": 17288, - "lat": 50.5281173, - "lng": 1.5890823, - "phone": "03 21 05 24 70", - "title": "PHARMACIE DE QUENTOVIC", - "zipcode": "62520" -}, { - "address": "44 RUE DE ROCHECHOUART", - "category": "2", - "city": "PARIS", - "id": 14750, - "lat": 48.8794562, - "lng": 2.3461221, - "phone": "01 48 78 66 15", - "title": "PHARMACIE DUCART LANDRIAU", - "zipcode": "75009" -}, { - "address": "44 RUE ERNEST RENAN", - "category": "1", - "city": "ISSY-LES-MOULINEAUX", - "id": 17676, - "lat": 48.8273438, - "lng": 2.2796311, - "phone": "01 40 93 44 64", - "title": "PHARMACIE D'ISSY", - "zipcode": "92130" -}, { - "address": "44 RUE FAUBOURG DU TEMPLE", - "category": "1", - "city": "PARIS", - "id": 14368, - "lat": 48.8691351, - "lng": 2.3692937, - "phone": "01 43 57 55 79", - "title": "MA PHARMACIE REPUBLIQUE", - "zipcode": "75011" -}, { - "address": "44 RUE LOUIS MARIANO LA TUILERIE", - "category": "1", - "city": "BIARRITZ", - "id": 15619, - "lat": 43.459237, - "lng": -1.542234, - "phone": "05 59 43 98 35", - "title": "PARAPHARMACIE DE LA NEGRESSE", - "zipcode": "64200" -}, { - "address": "440 PLACE DU GENERAL DE GAULLE", - "category": "2", - "city": "AUDRUICQ", - "id": 16948, - "lat": 50.8780163, - "lng": 2.0789279, - "phone": "03 21 35 32 17", - "title": "PHARMACIE DE LA GRAND PLACE", - "zipcode": "62370" -}, { - "address": "442 RUE JULES GUESDE", - "category": "1", - "city": "BRUAY-LA-BUISSIERE", - "id": 18859, - "lat": 50.472342, - "lng": 2.5552499, - "phone": "03 21 62 46 34", - "title": "PHARMACIE MACLOU", - "zipcode": "62700" -}, { - "address": "449 RUE QUESNOY", - "category": "1", - "city": "WAMBRECHIES", - "id": 19102, - "lat": 50.69225, - "lng": 3.0531087, - "phone": "03 20 39 71 61", - "title": "PHARMACIE PASQUIER", - "zipcode": "59118" -}, { - "address": "45 AV JEAN BAPTISTE CLEMENT", - "category": "3", - "city": "BOULOGNE-BILLANCOURT", - "id": 19039, - "lat": 48.8458919, - "lng": 2.2374465, - "phone": "01 46 05 11 78", - "title": "PHARMACIE NOTRE DAME", - "zipcode": "92100" -}, { - "address": "45 BOULEVARD LA FAYETTE", - "category": "2", - "city": "CALAIS", - "id": 19707, - "lat": 50.9473078, - "lng": 1.8562359, - "phone": "03 21 36 27 74", - "title": "PHARMACIE VERNE", - "zipcode": "62100" -}, { - "address": "45 RUE DE LA CONQUE", - "category": "1", - "city": "LIMOGES", - "id": 17333, - "lat": 45.8189466, - "lng": 1.2346433, - "phone": "05 55 01 65 10", - "title": "PHARMACIE DE VANTEAUX", - "zipcode": "87000" -}, { - "address": "45 RUE HOUDAN", - "category": "2", - "city": "SCEAUX", - "id": 15908, - "lat": 48.7777245, - "lng": 2.2930175, - "phone": "01 46 61 00 91", - "title": "PHARMACIE AL OSTENC", - "zipcode": "92330" -}, { - "address": "45 RUE SAINT JEAN", - "category": "2", - "city": "LE TOUQUET-PARIS-PLAGE", - "id": 16854, - "lat": 50.523933, - "lng": 1.5847721, - "phone": "03 21 05 13 42", - "title": "PHARMACIE DE LA COTE D OPALE", - "zipcode": "62520" -}, { - "address": "457 AVENUE TOURING CLUB FRANCA", - "category": "2", - "city": "SOORTS-HOSSEGOR", - "id": 17940, - "lat": 43.6584273, - "lng": -1.4287847, - "phone": "05 58 43 50 53", - "title": "PHARMACIE DU LAC", - "zipcode": "40150" -}, { - "address": "46 AVENUE DE LA REPUBLIQUE", - "category": "2", - "city": "MONTROUGE", - "id": 16737, - "lat": 48.8179818, - "lng": 2.3189719, - "phone": "01 42 53 00 46", - "title": "PHARMACIE DE L EGLISE", - "zipcode": "92120" -}, { - "address": "46 RUE D AMSTERDAM", - "category": "2", - "city": "PARIS", - "id": 14374, - "lat": 48.8785888, - "lng": 2.3270623, - "phone": "01 40 16 91 17", - "title": "PARAPHARMACIE DE L EUROPE", - "zipcode": "75009" -}, { - "address": "46 RUE D ASSAS", - "category": "2", - "city": "PARIS", - "id": 14451, - "lat": 48.8469569, - "lng": 2.3301569, - "phone": "01 45 48 19 51", - "title": "PHARMACIE D ASSAS", - "zipcode": "75006" -}, { - "address": "46 RUE DE LA TETE D OR", - "category": "2", - "city": "LYON", - "id": 14358, - "lat": 45.7693142, - "lng": 4.8521796, - "phone": "04 78 24 47 44", - "title": "GRANDE PHARMACIE DU PARC", - "zipcode": "69006" -}, { - "address": "46 RUE DU GENERAL DE GAULLE", - "category": "2", - "city": "SAINT-JEAN-DE-MONTS", - "id": 16241, - "lat": 46.7932294, - "lng": -2.0603153, - "phone": "02 51 58 17 15", - "title": "PHARMACIE CADUCEE", - "zipcode": "85160" -}, { - "address": "46 RUE DU JARDIN", - "category": "1", - "city": "FLEURIEUX-SUR-L'ARBRESLE", - "id": 18870, - "lat": 45.836317, - "lng": 4.6506718, - "phone": "04 74 01 28 08", - "title": "PHARMACIE MANCIAUX-SALIN", - "zipcode": "69210" -}, { - "address": "46 RUE GAUTIER", - "category": "2", - "city": "SAINTES", - "id": 17190, - "lat": 45.7414062, - "lng": -0.6238465, - "phone": "05 46 93 01 55", - "title": "PHARMACIE DE L'ABBAYE", - "zipcode": "17100" -}, { - "address": "46 RUE RAYMOND LAUBIER", - "category": "2", - "city": "DOURDAN", - "id": 15177, - "lat": 48.52751, - "lng": 2.0221239, - "phone": "01 64 59 71 71", - "title": "ACTION PHARMA", - "zipcode": "91410" -}, { - "address": "460 AVENUE ROLAND HUGUET", - "category": "2", - "city": "FAUQUEMBERGUES", - "id": 17667, - "lat": 50.5989052, - "lng": 2.0956575, - "phone": "03 21 39 55 20", - "title": "PHARMACIE DEVINCRE ET RICART", - "zipcode": "62560" -}, { - "address": "47 AVENUE FREDERIC CHEVILLON", - "category": "2", - "city": "PLAN-DE-CUQUES", - "id": 16397, - "lat": 43.3462931, - "lng": 5.46231, - "phone": "04 91 68 04 42", - "title": "PHARMACIE CENTRALE MR LEMAITRE", - "zipcode": "13380" -}, { - "address": "47 PLACE MARMONTEL", - "category": "2", - "city": "BORT-LES-ORGUES", - "id": 17046, - "lat": 45.4009515, - "lng": 2.4985962, - "phone": "05 55 96 77 73", - "title": "PHARMACIE DE LA PLACE", - "zipcode": "19110" -}, { - "address": "47 ROUTE DE BRIENNON", - "category": "1", - "city": "MABLY", - "id": 17615, - "lat": 46.0587579, - "lng": 4.0729258, - "phone": "04 77 72 93 22", - "title": "PHARMACIE DES SABLES SNC", - "zipcode": "42300" -}, { - "address": "47 RUE ARISTIDE BRIAND", - "category": "1", - "city": "MONTGERON", - "id": 15413, - "lat": 48.702745, - "lng": 2.4590434, - "phone": "01 69 03 50 61", - "title": "DIAMIR", - "zipcode": "91230" -}, { - "address": "47 RUE BALARD", - "category": "2", - "city": "PARIS", - "id": 14516, - "lat": 48.8420965, - "lng": 2.278165, - "phone": "01 45 57 97 51", - "title": "PHARMACIE DES CEVENNES", - "zipcode": "75015" -}, { - "address": "47 RUE BEAUREGARD", - "category": "1", - "city": "BEAUVAIS", - "id": 18618, - "lat": 49.4304087, - "lng": 2.0814421, - "phone": "03 44 45 01 46", - "title": "PHARMACIE JEANNE HACHETTE", - "zipcode": "60000" -}, { - "address": "47 RUE CARNOT", - "category": "2", - "city": "VERSAILLES", - "id": 16362, - "lat": 48.8054272, - "lng": 2.1308475, - "phone": "01 39 50 27 30", - "title": "PHARMACIE CENTRALE", - "zipcode": "78000" -}, { - "address": "47 RUE DU BUISSON", - "category": "1", - "city": "LILLE", - "id": 19350, - "lat": 50.6496415, - "lng": 3.0867339, - "phone": "03 20 55 28 75", - "title": "PHARMACIE ROGEAU CHOPIN", - "zipcode": "59000" -}, { - "address": "47 RUE GEORGES CLEMENCEAU", - "category": "3", - "city": "LANNEMEZAN", - "id": 19519, - "lat": 43.1255999, - "lng": 0.3836213, - "phone": "05 62 98 00 42", - "title": "PHARMACIE SAVES ARQUEY", - "zipcode": "65300" -}, { - "address": "47 RUE HENON", - "category": "3", - "city": "LYON", - "id": 14514, - "lat": 45.779439, - "lng": 4.827217, - "phone": "04 78 29 87 47", - "title": "PHARMACIE DES CANUTS", - "zipcode": "69004" -}, { - "address": "47 RUE JEAN JAURES", - "category": "3", - "city": "LA RIVIERE-DE-CORPS", - "id": 17128, - "lat": 48.2868901, - "lng": 4.0295814, - "phone": "03 25 79 40 15", - "title": "PHARMACIE DE LA RIVIERE", - "zipcode": "10440" -}, { - "address": "47 RUE SAINT THIBAULT", - "category": "3", - "city": "EPERNAY", - "id": 17422, - "lat": 49.0415097, - "lng": 3.9539592, - "phone": "03 26 55 30 00", - "title": "PHARMACIE DES ARCHERS", - "zipcode": "51200" -}, { - "address": "47 TER RUE NOTRE DAME", - "category": "1", - "city": "NIMES", - "id": 16433, - "lat": 43.8387218, - "lng": 4.3685105, - "phone": "04 66 67 48 17", - "title": "PHARMACIE CHARON", - "zipcode": "30000" -}, { - "address": "473 RUE DE LA LIBERATION", - "category": "2", - "city": "PUGET-VILLE", - "id": 17043, - "lat": 43.2895895, - "lng": 6.1369425, - "phone": "04 94 33 54 81", - "title": "PHARMACIE DE LA PLACE", - "zipcode": "83390" -}, { - "address": "476 AVENUE DU 14 JUILLET", - "category": "1", - "city": "AMIENS", - "id": 19186, - "lat": 49.880115, - "lng": 2.2835291, - "phone": "03 22 95 48 73", - "title": "PHARMACIE POIRET-SAHBI", - "zipcode": "80000" -}, { - "address": "47BIS RUE DE PARIS", - "category": "2", - "city": "COMPIEGNE", - "id": 18262, - "lat": 49.4145452, - "lng": 2.8221616, - "phone": "03 44 40 03 75", - "title": "PHARMACIE DUHAMEL HART", - "zipcode": "60200" -}, { - "address": "47BIS RUE DE PARIS", - "category": "2", - "city": "COMPIEGNE", - "id": 18262, - "lat": 49.4145452, - "lng": 2.8221616, - "phone": "03 44 40 03 75", - "title": "PHARMACIE DUHAMEL HART", - "zipcode": "60200" -}, { - "address": "48 AVENUE DE LOMBEZ", - "category": "2", - "city": "TOULOUSE", - "id": 19381, - "lat": 43.5957669, - "lng": 1.4188987, - "phone": "05 62 21 05 25", - "title": "PHARMACIE RUIZ FABRE", - "zipcode": "31000" -}, { - "address": "48 GRANDE RUE", - "category": "3", - "city": "BEAUCHAMPS", - "id": 19811, - "lat": 50.0164411, - "lng": 1.5093696, - "phone": "03 22 26 13 15", - "title": "PHARMACIE DE BEAUCHAMPS", - "zipcode": "80770" -}, { - "address": "48 PLACE DE LA REPUBLIQUE", - "category": "2", - "city": "AURAY", - "id": 17515, - "lat": 47.6668877, - "lng": -2.9839402, - "phone": "02 97 24 03 43", - "title": "PHARMACIE DES HALLES", - "zipcode": "56400" -}, { - "address": "48 RUE AV DE FOUILLEUSE", - "category": "2", - "city": "RUEIL-MALMAISON", - "id": 15485, - "lat": 48.8625688, - "lng": 2.1932962, - "phone": "01 47 51 55 95", - "title": "GRANDE PHARMACIE DU CENTRE", - "zipcode": "92500" -}, { - "address": "48 RUE CHARLES DE GAULLE", - "category": "1", - "city": "ROANNE", - "id": 19918, - "lat": 46.0382122, - "lng": 4.0715788, - "phone": "04 77 72 47 09", - "title": "TANGUY COSMETIQUES ROANNE", - "zipcode": "42300" -}, { - "address": "48 RUE DE LA CHAUSSEE", - "category": "1", - "city": "CHATEAUNEUF-SUR-CHER", - "id": 18468, - "lat": 46.8573691, - "lng": 2.3179747, - "phone": "02 48 60 64 49", - "title": "PHARMACIE GOLDARAZ", - "zipcode": "18190" -}, { - "address": "48 RUE DES SARTS", - "category": "3", - "city": "RIEULAY", - "id": 18567, - "lat": 50.375713, - "lng": 3.259575, - "phone": "03 27 86 05 45", - "title": "PHARMACIE HONVAULT", - "zipcode": "59870" -}, { - "address": "48 RUE JACOB", - "category": "1", - "city": "PARIS", - "id": 14416, - "lat": 48.8561651, - "lng": 2.3328851, - "phone": "01 42 60 27 37", - "title": "PHARMACIE BOUBERT FLORENCE", - "zipcode": "75006" -}, { - "address": "481 RUE DE CAGNY", - "category": "2", - "city": "AMIENS", - "id": 19089, - "lat": 49.8763455, - "lng": 2.3285085, - "phone": "03 22 46 14 48", - "title": "PHARMACIE PAQUE", - "zipcode": "80090" -}, { - "address": "481 RUE DE CAGNY", - "category": "2", - "city": "AMIENS", - "id": 19089, - "lat": 49.8763455, - "lng": 2.3285085, - "phone": "03 22 46 14 48", - "title": "PHARMACIE PAQUE", - "zipcode": "80090" -}, { - "address": "487 RUE JEAN QUEILLAU", - "category": "2", - "city": "MARSEILLE", - "id": 14587, - "lat": 43.340112, - "lng": 5.3864707, - "phone": "04 91 98 24 66", - "title": "PHARMACIE HADJADJ MADAR", - "zipcode": "13014" -}, { - "address": "48BIS AVENUE MOZART", - "category": "1", - "city": "PARIS", - "id": 14396, - "lat": 48.8553166, - "lng": 2.2697994, - "phone": "01 42 88 13 81", - "title": "PHARMACIE BAILLY", - "zipcode": "75016" -}, { - "address": "49 AVENUE DE LA REPUBLIQUE", - "category": "2", - "city": "TASSIN-LA-DEMI-LUNE", - "id": 16874, - "lat": 45.7637613, - "lng": 4.7794026, - "phone": "04 78 34 13 63", - "title": "PHARMACIE DE LA DEMI LUNE.", - "zipcode": "69160" -}, { - "address": "49 BD LEDRU ROLLIN", - "category": "1", - "city": "SAINT-POURCAIN-SUR-SIOULE", - "id": 17474, - "lat": 46.3087721, - "lng": 3.2902579, - "phone": "04 70 45 41 75", - "title": "PHARMACIE DES COURS", - "zipcode": "3500" -}, { - "address": "49 BOULEVARD DES DAMES", - "category": "3", - "city": "MARSEILLE", - "id": 14797, - "lat": 43.3028969, - "lng": 5.3675157, - "phone": "04 91 90 40 78", - "title": "PHARMACIE DU SOLEIL", - "zipcode": "13002" -}, { - "address": "49 BOULEVARD GASSENDI", - "category": "3", - "city": "DIGNE", - "id": 16503, - "lat": 44.0922755, - "lng": 6.2339934, - "phone": "04 92 32 10 10", - "title": "PHARMACIE COMTE", - "zipcode": "4000" -}, { - "address": "49 MAIL DE PINCE VENT CENTRE COMMERCIAL CARREFOUR", - "category": "2", - "city": "CHENNEVIERES-SUR-MARNE", - "id": 16507, - "lat": 48.795711, - "lng": 2.556705, - "phone": "01 45 76 60 00", - "title": "PHARMACIE CONSEIL PINCE VENT", - "zipcode": "94430" -}, { - "address": "49 RUE CHARDON LAGACHE", - "category": "2", - "city": "PARIS", - "id": 14340, - "lat": 48.8430195, - "lng": 2.2650926, - "phone": "01 42 88 37 61", - "title": "GRANDE PHARMACIE JOUVENET", - "zipcode": "75016" -}, { - "address": "49 RUE DU FOUR", - "category": "3", - "city": "PARIS", - "id": 14791, - "lat": 48.8521035, - "lng": 2.3308388, - "phone": "01 45 48 53 58", - "title": "PHARMACIE DE L'EPOQUE", - "zipcode": "75006" -}, { - "address": "49 RUE PAUL BERT", - "category": "1", - "city": "DUNKERQUE", - "id": 15932, - "lat": 51.0478021, - "lng": 2.4170568, - "phone": "03 28 29 08 40", - "title": "PHARMACIE ANGELLIER", - "zipcode": "59240" -}, { - "address": "495 AVENUE DE LA MER LE SAINT VINCENT BATIMENT A", - "category": "2", - "city": "SIX-FOURS-LES-PLAGES", - "id": 18365, - "lat": 43.0980215, - "lng": 5.8278928, - "phone": "04 94 07 62 02", - "title": "PHARMACIE FONT DE FILLOL", - "zipcode": "83140" -}, { - "address": "49B AVENUE F DELANO ROOSEVELT", - "category": "3", - "city": "PARIS", - "id": 14702, - "lat": 48.8703055, - "lng": 2.3098877, - "phone": "01 43 59 23 71", - "title": "PHARMACIE DU ROND POINT DES CHAMPS ELYSEES", - "zipcode": "75008" -}, { - "address": "4A RUE DES ARTISANS CENTRE COMMERCIAL INTERMARCHE", - "category": "3", - "city": "JOUARS-PONTCHARTRAIN", - "id": 16039, - "lat": 48.805703, - "lng": 1.8910295, - "phone": "01 34 89 44 04", - "title": "PHARMACIE BECQUART", - "zipcode": "78760" -}, { - "address": "4BIS AVENUE GEORGES POMPIDOU", - "category": "2", - "city": "VANNES", - "id": 16526, - "lat": 47.6635917, - "lng": -2.7663276, - "phone": "02 97 47 16 46", - "title": "PHARMACIE COUPET", - "zipcode": "56000" -}, { - "address": "5 AV DU CHAMPS DE MARS", - "category": "1", - "city": "SAINT-LEONARD-DE-NOBLAT", - "id": 16532, - "lat": 45.8371096, - "lng": 1.4914379, - "phone": "05 55 56 01 13", - "title": "PHARMACIE COURTIOUX BASSET", - "zipcode": "87400" -}, { - "address": "5 AV MARECHAL DE TASSIGNY", - "category": "3", - "city": "EPINAY-SUR-SEINE", - "id": 18267, - "lat": 48.9535286, - "lng": 2.3137489, - "phone": "09 72 44 68 14", - "title": "PHARMACIE DUMONT", - "zipcode": "93800" -}, { - "address": "5 AVENUE ANATOLE FRANCE", - "category": "2", - "city": "PANTIN", - "id": 17642, - "lat": 48.8944261, - "lng": 2.4253896, - "phone": "01 48 45 78 50", - "title": "PHARMACIE DES TROIS VILLES", - "zipcode": "93500" -}, { - "address": "5 AVENUE D'HAMBOURG", - "category": "2", - "city": "MARSEILLE", - "id": 14558, - "lat": 43.2545454, - "lng": 5.3826266, - "phone": "04 91 73 44 88", - "title": "PHARMACIE DU PARC BORELY", - "zipcode": "13008" -}, { - "address": "5 AVENUE DES PLATANES", - "category": "2", - "city": "SAINT-NOM-LA-BRETECHE", - "id": 19586, - "lat": 48.8567012, - "lng": 2.0197424, - "phone": "01 34 62 60 80", - "title": "PHARMACIE ST NOM", - "zipcode": "78860" -}, { - "address": "5 AVENUE FRANCOIS ABADIE", - "category": "2", - "city": "LOURDES", - "id": 18868, - "lat": 43.1106842, - "lng": -0.0394582, - "phone": "05 62 94 01 35", - "title": "PHARMACIE MALEK", - "zipcode": "65100" -}, { - "address": "5 AVENUE GEORGE SAND", - "category": "2", - "city": "SAINT-DENIS", - "id": 16592, - "lat": 48.9070318, - "lng": 2.3644001, - "phone": "01 48 20 01 82", - "title": "PHARMACIE DARONDEAU", - "zipcode": "93200" -}, { - "address": "5 AVENUE ROBERT SCHUMANN GALERIE CARREFOUR", - "category": "1", - "city": "SAINT-BRICE-SOUS-FORET", - "id": 19279, - "lat": 49.009993, - "lng": 2.349218, - "phone": "01 39 90 56 00", - "title": "PHARMACIE RACHEL BENSIMHON", - "zipcode": "95350" -}, { - "address": "5 AVENUE SAINT GERMAINE", - "category": "2", - "city": "LA SALVETAT-SAINT-GILLES", - "id": 18475, - "lat": 43.5788743, - "lng": 1.2671232, - "phone": "05 61 07 17 82", - "title": "PHARMACIE GOUT FRANCOISE", - "zipcode": "31880" -}, { - "address": "5 COURS ARISTIDE BRIAND", - "category": "3", - "city": "TARASCON", - "id": 17872, - "lat": 43.8037956, - "lng": 4.656714, - "phone": "04 90 91 00 64", - "title": "PHARMACIE DU COURS", - "zipcode": "13150" -}, { - "address": "5 COURS CHARLEMAGNE", - "category": "2", - "city": "LYON", - "id": 14353, - "lat": 45.7471184, - "lng": 4.8249631, - "phone": "04 78 37 10 47", - "title": "GRANDE PHARMACIE DES VOUTES", - "zipcode": "69002" -}, { - "address": "5 COURS FRANKLIN ROOSEVELT", - "category": "1", - "city": "LYON", - "id": 14659, - "lat": 45.7690189, - "lng": 4.8440903, - "phone": "04 78 89 08 19", - "title": "PHARMACIE RIVE GAUCHE", - "zipcode": "69006" -}, { - "address": "5 PLACE BLANCHE", - "category": "2", - "city": "PARIS", - "id": 14351, - "lat": 48.8835333, - "lng": 2.3321363, - "phone": "01 48 74 77 99", - "title": "GRANDE PHARMACIE DE LA PLACE", - "zipcode": "75009" -}, { - "address": "5 PLACE DE L EGLISE", - "category": "1", - "city": "LA NEUVE-LYRE", - "id": 16485, - "lat": 48.9076326, - "lng": 0.7487222, - "phone": "02 32 30 51 73", - "title": "PHARMACIE CLOUARD", - "zipcode": "27330" -}, { - "address": "5 PLACE DE L HOTEL DE VILLE", - "category": "2", - "city": "TOUCY", - "id": 18924, - "lat": 47.7352639, - "lng": 3.2941902, - "phone": "03 86 44 07 66", - "title": "PHARMACIE MENARD", - "zipcode": "89130" -}, { - "address": "5 PLACE DE LA DOMBES", - "category": "2", - "city": "BEYNOST", - "id": 16618, - "lat": 45.8351292, - "lng": 5.0000433, - "phone": "04 72 25 81 79", - "title": "PHARMACIE DE BEYNOST", - "zipcode": "1700" -}, { - "address": "5 PLACE DE LA GARE", - "category": "2", - "city": "SAINT-BRICE-SOUS-FORET", - "id": 16939, - "lat": 48.994822, - "lng": 2.3686024, - "phone": "01 39 90 79 02", - "title": "PHARMACIE DE LA GARE.", - "zipcode": "95350" -}, { - "address": "5 PLACE DE LA LIBERATION", - "category": "2", - "city": "CHATILLON", - "id": 16986, - "lat": 48.7999042, - "lng": 2.289802, - "phone": "01 42 53 09 39", - "title": "PHARMACIE DE LA MAIRIE", - "zipcode": "92320" -}, { - "address": "5 PLACE DE LA REPUBLIQUE", - "category": "2", - "city": "PARIS", - "id": 14803, - "lat": 48.8668649, - "lng": 2.3639738, - "phone": "01 47 00 18 08", - "title": "PHARMACIE PLACE REPUBLIQUE", - "zipcode": "75003" -}, { - "address": "5 PLACE DE LA REVOLUTION ", - "category": "2", - "city": "ROISSY EN BRIE", - "id": 15019, - "lat": 48.7961198, - "lng": 2.6501978, - "phone": "01 60 64 22 88", - "title": "PHARMACIE DE LA GARE", - "zipcode": "77680" -}, { - "address": "5 PLACE DU DOCTEUR BERTHET", - "category": "1", - "city": "LA CELLE-SAINT-CLOUD", - "id": 18090, - "lat": 48.8488271, - "lng": 2.1506633, - "phone": "01 39 69 72 61", - "title": "PHARMACIE DU PLATEAU", - "zipcode": "78170" -}, { - "address": "5 PLACE DU MARCHE", - "category": "1", - "city": "CRECY-LA-CHAPELLE", - "id": 18003, - "lat": 48.8568163, - "lng": 2.9097338, - "phone": "01 64 63 80 73", - "title": "PHARMACIE DU MARCHE", - "zipcode": "77580" -}, { - "address": "5 PLACE JEAN YOLE", - "category": "2", - "city": "SOULLANS", - "id": 16582, - "lat": 46.7962042, - "lng": -1.9011989, - "phone": "02 51 68 01 40", - "title": "PHARMACIE DAHERON", - "zipcode": "85300" -}, { - "address": "5 PLACE LEON BLUM", - "category": "2", - "city": "DESVRES", - "id": 19900, - "lat": 50.6677861, - "lng": 1.8335659, - "phone": "03 21 91 67 05", - "title": "SEL PHARMACIE POYER CHRISTOPHE", - "zipcode": "62240" -}, { - "address": "5 PLACE NOTRE DAME", - "category": "1", - "city": "BLANGY-SUR-BRESLE", - "id": 18387, - "lat": 49.9324168, - "lng": 1.6290784, - "phone": "02 35 93 51 09", - "title": "PHARMACIE FRANCOIS", - "zipcode": "76340" -}, { - "address": "5 PLACE ROGER BASTIDE", - "category": "2", - "city": "NIMES", - "id": 18649, - "lat": 43.8255641, - "lng": 4.3338, - "phone": "04 66 28 84 40", - "title": "PHARMACIE KENNEDY", - "zipcode": "30000" -}, { - "address": "5 RUE BENOIT LAUNAY", - "category": "2", - "city": "GREZIEU-LA-VARENNE", - "id": 15683, - "lat": 45.7419173, - "lng": 4.6924619, - "phone": "04 78 44 85 13", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "69290" -}, { - "address": "5 RUE CHAUVEAU LAGARDE", - "category": "2", - "city": "PARIS", - "id": 14479, - "lat": 48.871285, - "lng": 2.323591, - "phone": "01 42 65 39 75", - "title": "PHARMACIE DE LA MADELEINE", - "zipcode": "75008" -}, { - "address": "5 RUE DE LA BARRE", - "category": "2", - "city": "MACON", - "id": 15579, - "lat": 46.3057131, - "lng": 4.8316456, - "phone": "03 85 21 14 05", - "title": "PARA FIRST", - "zipcode": "71000" -}, { - "address": "5 RUE DE LA CHAPELLE", - "category": "1", - "city": "PARIS", - "id": 16387, - "lat": 48.8908178, - "lng": 2.359228, - "phone": "01 46 07 14 84", - "title": "PHARMACIE CENTRALE DE LA CHAPELLE", - "zipcode": "75018" -}, { - "address": "5 RUE DE LA GARE", - "category": "2", - "city": "SAINT-LEGER-LES-DOMART", - "id": 19164, - "lat": 50.0474264, - "lng": 2.1391779, - "phone": "03 22 52 90 65", - "title": "PHARMACIE PICOT", - "zipcode": "80780" -}, { - "address": "5 RUE DE LA PAIX", - "category": "3", - "city": "CONDETTE", - "id": 16019, - "lat": 50.6510406, - "lng": 1.6243879, - "phone": "03 21 83 75 82", - "title": "PHARMACIE BAURAIN", - "zipcode": "62360" -}, { - "address": "5 RUE DE POULMENACH", - "category": "1", - "city": "SARZEAU", - "id": 16145, - "lat": 47.5269889, - "lng": -2.7679749, - "phone": "02 97 41 75 23", - "title": "PHARMACIE BORDIER", - "zipcode": "56370" -}, { - "address": "5 RUE JULES COURMONT", - "category": "2", - "city": "COURCHELETTES", - "id": 18376, - "lat": 50.3427655, - "lng": 3.0615328, - "phone": "03 27 88 60 33", - "title": "PHARMACIE FOURCARD", - "zipcode": "59552" -}, { - "address": "5 RUE LAVOISIER", - "category": "2", - "city": "FITZ-JAMES", - "id": 16670, - "lat": 49.3947528, - "lng": 2.417561, - "phone": "03 44 78 08 06", - "title": "PHARMACIE DE FITZ JAMES", - "zipcode": "60600" -}, { - "address": "5 RUE MAURICE VIOLLETTE", - "category": "1", - "city": "CHATEAUNEUF-EN-THYMERAIS", - "id": 19637, - "lat": 48.5819944, - "lng": 1.243445, - "phone": "02 37 51 60 04", - "title": "PHARMACIE THYMERAIS", - "zipcode": "28170" -}, { - "address": "5 RUE MEYNADIER", - "category": "2", - "city": "CANNES", - "id": 18939, - "lat": 43.5527976, - "lng": 7.0155493, - "phone": "04 93 39 01 37", - "title": "PHARMACIE MEYNADIER", - "zipcode": "6400" -}, { - "address": "5 RUE SAINT ARMEL", - "category": "2", - "city": "SAINT-JEAN-BREVELAY", - "id": 16516, - "lat": 47.8450506, - "lng": -2.7223908, - "phone": "02 97 60 30 08", - "title": "PHARMACIE COSSON", - "zipcode": "56660" -}, { - "address": "5 RUE SALVADOR ALLENDE", - "category": "3", - "city": "CARHAIX-PLOUGUER", - "id": 19594, - "lat": 48.2819848, - "lng": -3.562253, - "phone": "02 98 93 01 79", - "title": "PHARMACIE STRICOT", - "zipcode": "29270" -}, { - "address": "50 AVENUE DE WAGRAM", - "category": "2", - "city": "PARIS", - "id": 14444, - "lat": 48.8785858, - "lng": 2.2987799, - "phone": "01 47 63 39 93", - "title": "PHARMACIE CONTE ET LORRAINE", - "zipcode": "75017" -}, { - "address": "50 AVENUE DU GENERAL LECLERC", - "category": "2", - "city": "BOULOGNE-BILLANCOURT", - "id": 18026, - "lat": 48.8324534, - "lng": 2.2389587, - "phone": "01 46 05 32 22", - "title": "PHARMACIE DU METRO", - "zipcode": "92100" -}, { - "address": "50 AVENUE ROBERT SCHUMANN", - "category": "2", - "city": "SAINT-BRICE-SOUS-FORET", - "id": 15315, - "lat": 49.0082342, - "lng": 2.3513648, - "phone": "01 39 33 79 19", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "95350" -}, { - "address": "50 BLD DE L EUROPE ZONE D ACTIVITE PARIS SUD 4", - "category": "2", - "city": "COMBS-LA-VILLE", - "id": 14919, - "lat": 48.6492501, - "lng": 2.5466828, - "phone": "01 64 88 10 00", - "title": "MONOPRIX", - "zipcode": "77380" -}, { - "address": "502 RUE JEAN JAURES", - "category": "2", - "city": "TOULON", - "id": 18195, - "lat": 43.123752, - "lng": 5.9322923, - "phone": "04 94 92 21 43", - "title": "PHARMACIE DU THEATRE SNC", - "zipcode": "83000" -}, { - "address": "504 BOULEVARD DE LA PLAGE LES ARBOUSIERS", - "category": "3", - "city": "BORMES-LES-MIMOSAS", - "id": 16880, - "lat": 43.1242992, - "lng": 6.3592461, - "phone": "04 94 71 08 65", - "title": "PHARMACIE DE LA FAVIERE SARL", - "zipcode": "83230" -}, { - "address": "51 AVENUE DU MARECHAL JOFFRE", - "category": "2", - "city": "SAINT-GAUDENS", - "id": 18952, - "lat": 43.1080024, - "lng": 0.7161281, - "phone": "05 62 00 80 08", - "title": "PHARMACIE MINGUEZ", - "zipcode": "31800" -}, { - "address": "51 BD CHEVALIER DE CLERVILLE CTRE COM CHATEAU VERT", - "category": "1", - "city": "SETE", - "id": 17847, - "lat": 43.4073107, - "lng": 3.67931, - "phone": "04 67 53 49 30", - "title": "PHARMACIE DU CHATEAU VERT", - "zipcode": "34200" -}, { - "address": "51 PLACE DU CHAMP DE FOIRE", - "category": "3", - "city": "MONTAIGU", - "id": 18521, - "lat": 46.9781486, - "lng": -1.3113877, - "phone": "02 51 94 06 32", - "title": "PHARMACIE HACHET-RAYMOND", - "zipcode": "85600" -}, { - "address": "51 PLACE FOCH", - "category": "1", - "city": "SAINT-OMER", - "id": 19553, - "lat": 50.7507219, - "lng": 2.2522532, - "phone": "03 21 38 22 53", - "title": "PHARMACIE SILVIE", - "zipcode": "62500" -}, { - "address": "51 ROUTE DE BREST", - "category": "3", - "city": "QUIMPER", - "id": 19123, - "lat": 47.9999016, - "lng": -4.0905236, - "phone": "02 98 95 07 99", - "title": "PHARMACIE PENNANEACH", - "zipcode": "29000" -}, { - "address": "517 AVENUE DE L EUROPE RESIDENCE LES ARGONAUTES", - "category": "1", - "city": "LA GRANDE-MOTTE", - "id": 16758, - "lat": 43.5578791, - "lng": 4.0906173, - "phone": "04 67 56 51 44", - "title": "PHARMACIE DE L EUROPE", - "zipcode": "34280" -}, { - "address": "52 AV HENRI GINOUX", - "category": "1", - "city": "MONTROUGE", - "id": 17270, - "lat": 48.8184105, - "lng": 2.3223942, - "phone": "01 42 53 01 26", - "title": "PHARMACIE DE PARIS", - "zipcode": "92120" -}, { - "address": "52 AVENUE DE BORDEAUX", - "category": "2", - "city": "MIMIZAN", - "id": 15655, - "lat": 44.2047368, - "lng": -1.2197589, - "phone": "05 58 09 04 04", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "40200" -}, { - "address": "52 AVENUE DU MONT AUX MALADES", - "category": "2", - "city": "MONT-SAINT-AIGNAN", - "id": 18655, - "lat": 49.4656603, - "lng": 1.0721004, - "phone": "02 35 76 04 18", - "title": "PHARMACIE KERVELLA", - "zipcode": "76130" -}, { - "address": "52 AVENUE FREDERIC MISTRAL", - "category": "2", - "city": "MARSEILLE", - "id": 14525, - "lat": 43.3231462, - "lng": 5.4536373, - "phone": "04 91 66 22 23", - "title": "PHARMACIE DES OLIVES", - "zipcode": "13013" -}, { - "address": "52 BOULEVARD DES BOUVETS", - "category": "2", - "city": "NANTERRE", - "id": 16078, - "lat": 48.8955652, - "lng": 2.2273459, - "phone": "01 47 21 56 43", - "title": "PHARMACIE BERTRAND", - "zipcode": "92000" -}, { - "address": "52 ROUTE DE PARIS", - "category": "2", - "city": "BONSECOURS", - "id": 16463, - "lat": 49.4214936, - "lng": 1.1268891, - "phone": "02 35 80 06 12", - "title": "PHARMACIE CHRETIEN", - "zipcode": "76240" -}, { - "address": "52 RUE D AUTEUIL", - "category": "2", - "city": "PARIS", - "id": 14759, - "lat": 48.8481649, - "lng": 2.2627373, - "phone": "01 42 88 27 38", - "title": "PHARMACIE LA PORTE D AUTEUIL", - "zipcode": "75016" -}, { - "address": "52 RUE DE LA REPUBLIQUE", - "category": "2", - "city": "GRENADE", - "id": 19064, - "lat": 43.7718978, - "lng": 1.2918062, - "phone": "05 61 82 61 24", - "title": "PHARMACIE OGV", - "zipcode": "31330" -}, { - "address": "52 RUE DE RENNES", - "category": "3", - "city": "MONTAUBAN DE BRETAGNE", - "id": 16631, - "lat": 48.1972117, - "lng": -2.0419201, - "phone": "02 99 06 40 81", - "title": "PHARMACIE DE BROCELIANDE", - "zipcode": "35360" -}, { - "address": "52 RUE DU MARECHAL JOFFRE", - "category": "1", - "city": "PAUILLAC", - "id": 16055, - "lat": 45.2032427, - "lng": -0.7530984, - "phone": "05 56 59 01 05", - "title": "PHARMACIE BENESSE", - "zipcode": "33250" -}, { - "address": "52 RUE DU SAINT ESPRIT", - "category": "2", - "city": "LESNEVEN", - "id": 19276, - "lat": 48.5753173, - "lng": -4.3198883, - "phone": "02 98 21 13 96", - "title": "PHARMACIE QUINCAMPOIX", - "zipcode": "29260" -}, { - "address": "52 RUE JEAN JACQUES ROUSSEAU", - "category": "1", - "city": "SURESNES", - "id": 18060, - "lat": 48.8658089, - "lng": 2.2237844, - "phone": "01 45 06 10 46", - "title": "PHARMACIE DU PARC", - "zipcode": "92150" -}, { - "address": "527 RUE DE SAINT HILAIRE", - "category": "2", - "city": "COUDUN", - "id": 15983, - "lat": 49.4583001, - "lng": 2.81608, - "phone": "03 44 83 44 45", - "title": "PHARMACIE BACCIOCHINI", - "zipcode": "60150" -}, { - "address": "53 ROUTE NATIONALE", - "category": "1", - "city": "SANGATTE", - "id": 18698, - "lat": 50.9578455, - "lng": 1.8222506, - "phone": "03 21 96 16 96", - "title": "PHARMACIE LACROIX", - "zipcode": "62231" -}, { - "address": "53 RUE DE TOLBIAC", - "category": "2", - "city": "PARIS", - "id": 14363, - "lat": 48.8274973, - "lng": 2.3707854, - "phone": "01 45 83 34 37", - "title": "GRANDE PHARMACIE TOLBIAC", - "zipcode": "75013" -}, { - "address": "53 RUE DU BOURNARD", - "category": "2", - "city": "COLOMBES", - "id": 17000, - "lat": 48.9231542, - "lng": 2.2551355, - "phone": "01 42 42 09 09", - "title": "PHARMACIE DE LA MAIRIE COHEN", - "zipcode": "92700" -}, { - "address": "53 RUE MARECHAL FOCH", - "category": "1", - "city": "VERSAILLES", - "id": 19826, - "lat": 48.8102119, - "lng": 2.1340852, - "phone": "01 39 50 08 48", - "title": "PHARMACIE DE LA RIVE DROITE", - "zipcode": "78000" -}, { - "address": "533 avenue Louis Braille", - "category": "3", - "city": "LE PONTET", - "id": 14837, - "lat": 43.9810999, - "lng": 4.8795736, - "phone": "04 90 23 22 16", - "title": "AUCHAN ESPACE SANTE BEAUTE ", - "zipcode": "84130" -}, { - "address": "54 AVENUE DE FRANCE", - "category": "2", - "city": "MAUBEUGE", - "id": 16677, - "lat": 50.2737633, - "lng": 3.9719197, - "phone": "03 27 64 87 55", - "title": "PHARMACIE DE FRANCE", - "zipcode": "59600" -}, { - "address": "54 AVENUE DU GENERAL GALLIENI", - "category": "3", - "city": "JOINVILLE-LE-PONT", - "id": 18408, - "lat": 48.8198416, - "lng": 2.4804862, - "phone": "01 48 83 20 01", - "title": "PHARMACIE GALLIENI", - "zipcode": "94340" -}, { - "address": "54 RUE DE LA BIENFAISANCE", - "category": "2", - "city": "PARIS", - "id": 14813, - "lat": 48.8766899, - "lng": 2.3131667, - "phone": "01 45 63 73 26", - "title": "PHARMACIE DE LA BIENFAISANCE", - "zipcode": "75008" -}, { - "address": "54 RUE DE LA CHAUSSEE D ANTIN", - "category": "2", - "city": "PARIS", - "id": 14474, - "lat": 48.8742872, - "lng": 2.3327321, - "phone": "01 48 74 21 06", - "title": "PHARMACIE DE LA CHAUSSEE D ANTIN", - "zipcode": "75009" -}, { - "address": "54 RUE DE VILLEFRANCHE", - "category": "2", - "city": "SAINT-GIRONS", - "id": 16473, - "lat": 42.9838241, - "lng": 1.142691, - "phone": "05 61 66 02 53", - "title": "PHARMACIE CLAUSTRES", - "zipcode": "9200" -}, { - "address": "54 RUE DU CHEMIN DE FER", - "category": "2", - "city": "LAGNY-SUR-MARNE", - "id": 17849, - "lat": 48.8786239, - "lng": 2.7050051, - "phone": "01 64 30 00 65", - "title": "PHARMACIE DU CHEMIN DE FER", - "zipcode": "77400" -}, { - "address": "54 RUE RAMBUTEAU", - "category": "3", - "city": "PARIS", - "id": 14722, - "lat": 48.8616523, - "lng": 2.3521011, - "phone": "01 48 87 78 19", - "title": "PHARMACIE BEAUBOURG", - "zipcode": "75003" -}, { - "address": "55 AVENUE JEAN LOLIVE", - "category": "2", - "city": "PANTIN", - "id": 18027, - "lat": 48.8913732, - "lng": 2.4022848, - "phone": "01 48 45 14 50", - "title": "PHARMACIE DU METRO", - "zipcode": "93500" -}, { - "address": "55 AVENUE PASTEUR", - "category": "2", - "city": "SAINT-MALO", - "id": 16146, - "lat": 48.6573875, - "lng": -1.9973494, - "phone": "02 99 56 07 51", - "title": "PHARMACIE BORDIER&JAMET", - "zipcode": "35400" -}, { - "address": "55 AVENUE VERDI", - "category": "2", - "city": "AIX-EN-PROVENCE", - "id": 16429, - "lat": 43.5264091, - "lng": 5.4417728, - "phone": "04 42 23 52 65", - "title": "PHARMACIE CHAPELIN ET DELMAR", - "zipcode": "13100" -}, { - "address": "55 BOULEVARD DES DEPORTES CENTRE COMMERCIALE LECLERC", - "category": "1", - "city": "SAINT-MALO", - "id": 15750, - "lat": 48.6583145, - "lng": -1.9729381, - "phone": "02 99 19 97 96", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "35400" -}, { - "address": "55 BOULEVARD ROBESPIERRE", - "category": "1", - "city": "POISSY", - "id": 17262, - "lat": 48.933835, - "lng": 2.0521894, - "phone": "01 39 65 03 73", - "title": "PHARMACIE DE NOAILLES", - "zipcode": "78300" -}, { - "address": "55 CHEMIN DE LA BOUYERE", - "category": "2", - "city": "OLLIOULES", - "id": 14887, - "lat": 43.1227676, - "lng": 5.8765116, - "phone": "04 94 06 82 00", - "title": "CARREFOUR FORME ET BEAUTE ", - "zipcode": "83190" -}, { - "address": "55 RUE DU GENERAL DE GAULLE", - "category": "2", - "city": "ESTAIRES", - "id": 17354, - "lat": 50.6441805, - "lng": 2.7241274, - "phone": "03 28 48 81 76", - "title": "PHARMACIE DELASSUS", - "zipcode": "59940" -}, { - "address": "55 RUE GABRIEL PERI", - "category": "3", - "city": "SAINT-CYR-L'ECOLE", - "id": 17191, - "lat": 48.8017708, - "lng": 2.0614394, - "phone": "01 30 45 01 11", - "title": "PHARMACIE DE L'ABBAYE", - "zipcode": "78210" -}, { - "address": "55 RUE GAMBETTA", - "category": "1", - "city": "ROYAN", - "id": 18265, - "lat": 45.6223897, - "lng": -1.0313762, - "phone": "05 46 38 59 35", - "title": "PHARMACIE DUMAS", - "zipcode": "17200" -}, { - "address": "55 RUE PAUL VAILLANT COUTURIER", - "category": "2", - "city": "MALAKOFF", - "id": 19555, - "lat": 48.8138895, - "lng": 2.295533, - "phone": "01 42 53 41 62", - "title": "PHARMACIE SINE NDEFEU", - "zipcode": "92240" -}, { - "address": "552 AVENUE JEAN MOULIN", - "category": "2", - "city": "VELAUX", - "id": 17567, - "lat": 43.5279704, - "lng": 5.2576524, - "phone": "04 42 74 83 38", - "title": "PHARMACIE DES OLIVIERS", - "zipcode": "13880" -}, { - "address": "554 RUE DU COLLEGE", - "category": "1", - "city": "RENAISON", - "id": 17292, - "lat": 46.0515445, - "lng": 3.9319614, - "phone": "04 77 64 40 28", - "title": "PHARMACIE DE RENAISON", - "zipcode": "42370" -}, { - "address": "56 AVENUE DU GENERAL LECLERC", - "category": "2", - "city": "SAINTE-SAVINE", - "id": 19520, - "lat": 48.2925461, - "lng": 4.0413691, - "phone": "03 25 74 00 00", - "title": "PHARMACIE SAVINIENNE", - "zipcode": "10300" -}, { - "address": "56 AVENUE GEOFFROY PERRET", - "category": "3", - "city": "REMOULINS", - "id": 19069, - "lat": 43.9387663, - "lng": 4.5633956, - "phone": "04 66 37 14 40", - "title": "PHARMACIE OMEGA GRIGNOTE", - "zipcode": "30210" -}, { - "address": "56 BLD JACQUES DUCLOS CTRE COM OCEAN", - "category": "3", - "city": "TARNOS", - "id": 15986, - "lat": 43.5256784, - "lng": -1.4629553, - "phone": "05 59 74 72 64", - "title": "PHARMACIE BAIGTS TRIVES", - "zipcode": "40220" -}, { - "address": "56 RUE DE LA REPUBLIQUE", - "category": "1", - "city": "CLERMONT", - "id": 19156, - "lat": 49.3771608, - "lng": 2.4150709, - "phone": "03 44 50 01 07", - "title": "PHARMACIE PHILIPPOT", - "zipcode": "60600" -}, { - "address": "56 RUE DE SIAM", - "category": "1", - "city": "BREST", - "id": 16395, - "lat": 48.3878631, - "lng": -4.4897038, - "phone": "02 98 44 15 82", - "title": "PHARMACIE CENTRALE HAYEM", - "zipcode": "29200" -}, { - "address": "56 RUE DES CARMES", - "category": "2", - "city": "AURILLAC", - "id": 18303, - "lat": 44.9245363, - "lng": 2.440909, - "phone": "04 71 48 27 49", - "title": "PHARMACIE ESCURA POUGET", - "zipcode": "15000" -}, { - "address": "56 RUE DU CHERCHE MIDI", - "category": "3", - "city": "PARIS", - "id": 14392, - "lat": 48.8490281, - "lng": 2.3251631, - "phone": "01 42 22 26 39", - "title": "PHARMACIE AUTISSIER", - "zipcode": "75006" -}, { - "address": "56 RUE DU FOUR", - "category": "2", - "city": "BAILLEUL", - "id": 18849, - "lat": 50.7322658, - "lng": 2.7316519, - "phone": "03 28 48 73 50", - "title": "PHARMACIE LUTTUN", - "zipcode": "59270" -}, { - "address": "57 AVENUE DES GOBELINS", - "category": "3", - "city": "PARIS", - "id": 14520, - "lat": 48.8341973, - "lng": 2.3540489, - "phone": "01 43 37 56 98", - "title": "PHARMACIE DES GOBELINS", - "zipcode": "75013" -}, { - "address": "57 AVENUE DES PORTES DU SOLEIL", - "category": "1", - "city": "FREJUS", - "id": 17164, - "lat": 43.4503049, - "lng": 6.7542439, - "phone": "04 94 53 26 83", - "title": "PHARMACIE DE LA TOUR DE MARE", - "zipcode": "83600" -}, { - "address": "57 CHEMIN DES CENTURIONS RESIDENCE CENTURIONS", - "category": "3", - "city": "CASTELNAU-LE-LEZ", - "id": 16551, - "lat": 43.6328158, - "lng": 3.9156941, - "phone": "04 67 79 63 87", - "title": "PHARMACIE CRUTCHET GRAND", - "zipcode": "34170" -}, { - "address": "57 PLACE DE LA REPUBLIQUE", - "category": "2", - "city": "LYON", - "id": 14469, - "lat": 45.7600117, - "lng": 4.8359411, - "phone": "04 78 38 13 13", - "title": "PHARMACIE DE L HOTEL DIEU", - "zipcode": "69002" -}, { - "address": "57 RUE D ANGOULEME", - "category": "1", - "city": "COGNAC", - "id": 15446, - "lat": 45.6949264, - "lng": -0.3272495, - "phone": "05 45 82 02 39", - "title": "GRANDE PHARMACIE CENTRALE", - "zipcode": "16100" -}, { - "address": "57 RUE DE CHATEAUDUN", - "category": "2", - "city": "PARIS", - "id": 14495, - "lat": 48.8761741, - "lng": 2.33262, - "phone": "01 48 74 13 13", - "title": "PHARMACIE DE LA TRINITE", - "zipcode": "75009" -}, { - "address": "57 RUE DE L OUEST", - "category": "1", - "city": "PARIS", - "id": 14441, - "lat": 48.8360344, - "lng": 2.3193702, - "phone": "01 43 35 35 95", - "title": "PHARMACIE COHEN BETTAN", - "zipcode": "75014" -}, { - "address": "57 RUE DU GENERAL DE GAULLE", - "category": "1", - "city": "SAINT-GILLES-CROIX-DE-VIE", - "id": 15537, - "lat": 46.6962668, - "lng": -1.9399336, - "phone": "02 51 55 01 05", - "title": "LA GRANDE PHARMACIE", - "zipcode": "85800" -}, { - "address": "58 FBG SAINT NICOLAS", - "category": "2", - "city": "MEAUX", - "id": 16453, - "lat": 48.9581934, - "lng": 2.8879751, - "phone": "01 60 09 52 74", - "title": "PHARMACIE CHERET", - "zipcode": "77100" -}, { - "address": "58 RUE DE LA LIBERATION", - "category": "1", - "city": "ALBERT", - "id": 17370, - "lat": 49.9943339, - "lng": 2.6491915, - "phone": "03 22 75 26 56", - "title": "PHARMACIE DEMAZEAU", - "zipcode": "80300" -}, { - "address": "58 RUE JEANNE D ARC", - "category": "2", - "city": "PARIS", - "id": 14756, - "lat": 48.8315366, - "lng": 2.3663321, - "phone": "01 45 83 78 47", - "title": "PHARMACIE JEANNE D ARC", - "zipcode": "75013" -}, { - "address": "58 RUE MARCEL LEFEVRE", - "category": "2", - "city": "LES ANDELYS", - "id": 19260, - "lat": 49.2476589, - "lng": 1.4183064, - "phone": "02 32 54 22 80", - "title": "PHARMACIE PRINCIPALE DES ANDEL", - "zipcode": "27700" -}, { - "address": "59 RUE JEAN AULAS", - "category": "2", - "city": "MANDELIEU-LA-NAPOULE", - "id": 17029, - "lat": 43.523363, - "lng": 6.940558, - "phone": "04 93 49 82 26", - "title": "PHARMACIE DE LA NAPOULE", - "zipcode": "6210" -}, { - "address": "6 ALLEE DES FRERES VOISINS", - "category": "3", - "city": "PARIS", - "id": 14468, - "lat": 48.8286827, - "lng": 2.2727196, - "phone": "01 45 58 37 45", - "title": "PHARMACIE DE L HELIPORT", - "zipcode": "75015" -}, { - "address": "6 AV DE L'EUROPE ZAC DE VENETTE", - "category": "2", - "city": "VENETTE", - "id": 15290, - "lat": 49.4076589, - "lng": 2.7839155, - "phone": "03 44 90 52 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "60200" -}, { - "address": "6 AV DE L'EUROPE ZAC DE VENETTE", - "category": "3", - "city": "VENETTE", - "id": 15290, - "lat": 49.4076589, - "lng": 2.7839155, - "phone": "03 44 90 52 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "60200" -}, { - "address": "6 AVENUE CAMILLE PAGE CENTRE COMMERCIAL AUCHAN", - "category": "2", - "city": "CHATELLERAULT", - "id": 19813, - "lat": 46.7980542, - "lng": 0.5287264, - "phone": "05 49 21 57 09", - "title": "PHARMACIE DE FLEURIAN LANORE", - "zipcode": "86100" -}, { - "address": "6 AVENUE DE CANTO PERDRIX", - "category": "1", - "city": "MARTIGUES", - "id": 17391, - "lat": 43.4189935, - "lng": 5.0552037, - "phone": "04 42 80 41 75", - "title": "PHARMACIE DES 4 VENTS", - "zipcode": "13500" -}, { - "address": "6 AVENUE DE PARIS", - "category": "2", - "city": "NIORT", - "id": 17267, - "lat": 46.3240087, - "lng": -0.457304, - "phone": "05 49 28 28 25", - "title": "PHARMACIE DE PARIS", - "zipcode": "79000" -}, { - "address": "6 AVENUE DU CHATEAU D EAU CENTRE COMMERCIAL SAINT NICOLA", - "category": "1", - "city": "FONSORBES", - "id": 19526, - "lat": 43.5327609, - "lng": 1.2272466, - "phone": "05 61 91 15 31", - "title": "PHARMACIE SCLAFER", - "zipcode": "31470" -}, { - "address": "6 AVENUE DU DOCTEUR CONTURIE", - "category": "1", - "city": "LANGOGNE", - "id": 19177, - "lat": 44.7259583, - "lng": 3.8547145, - "phone": "04 66 69 00 09", - "title": "PHARMACIE PLANTIER", - "zipcode": "48300" -}, { - "address": "6 AVENUE DU GENERAL LECLERC", - "category": "2", - "city": "AIRAINES", - "id": 19880, - "lat": 49.9650468, - "lng": 1.9426235, - "phone": "03 22 29 40 77", - "title": "PHARMACIE PHILIPPE GRATPANCHE", - "zipcode": "80270" -}, { - "address": "6 AVENUE PAUL CEZANNE CENTRE COMMERCIAL BEAUREGARD", - "category": "2", - "city": "MONTBRISON", - "id": 16032, - "lat": 45.6113057, - "lng": 4.0554724, - "phone": "04 77 58 18 37", - "title": "PHARMACIE BEAUREGARD", - "zipcode": "42600" -}, { - "address": "6 AVENUE RAYMOND POINCARE", - "category": "1", - "city": "AIX-EN-PROVENCE", - "id": 19108, - "lat": 43.539908, - "lng": 5.4487058, - "phone": "04 42 23 07 32", - "title": "PHARMACIE PAUL CEZANNE", - "zipcode": "13090" -}, { - "address": "6 AVENUE VICTOR HUGO", - "category": "2", - "city": "COGNAC", - "id": 16455, - "lat": 45.6897926, - "lng": -0.3192691, - "phone": "05 45 32 07 86", - "title": "PHARMACIE CHEVALERIAS", - "zipcode": "16100" -}, { - "address": "6 BOULEVARD DE GRENELLE", - "category": "2", - "city": "PARIS", - "id": 14458, - "lat": 48.8537049, - "lng": 2.2890224, - "phone": "01 45 77 33 30", - "title": "PHARMACIE DE BIR HAKEIM", - "zipcode": "75015" -}, { - "address": "6 BOULEVARD LATOURETTE", - "category": "2", - "city": "FORCALQUIER", - "id": 18848, - "lat": 43.9591408, - "lng": 5.7803273, - "phone": "04 92 75 00 03", - "title": "PHARMACIE LUTHRINGER", - "zipcode": "4300" -}, { - "address": "6 Grand Place Hubert Jolivet", - "category": "2", - "city": "L ISLE-ADAM", - "id": 15083, - "lat": 49.1211947, - "lng": 2.2258831, - "phone": "01 34 69 52 85", - "title": "PHARMACIE JOLY JOLLY", - "zipcode": "95290" -}, { - "address": "6 PLACE CARNOT", - "category": "2", - "city": "GIVORS", - "id": 16325, - "lat": 45.5860316, - "lng": 4.7717747, - "phone": "04 78 73 02 68", - "title": "PHARMACIE CENTRALE", - "zipcode": "69700" -}, { - "address": "6 PLACE DE CLICHY", - "category": "2", - "city": "PARIS", - "id": 14751, - "lat": 48.8833435, - "lng": 2.3280457, - "phone": "01 48 74 65 18", - "title": "PHARMACIE EUROPEENNE", - "zipcode": "75009" -}, { - "address": "6 PLACE DE LA RENAISSANCE", - "category": "2", - "city": "AIGREFEUILLE-D'AUNIS", - "id": 15079, - "lat": 46.1163366, - "lng": -0.9351895, - "phone": "05 46 35 52 32", - "title": "PHARMACIE GRUEL VILLENEUVE", - "zipcode": "17290" -}, { - "address": "6 PLACE DE LA REPUBLIQUE", - "category": "1", - "city": "CARBONNE", - "id": 18621, - "lat": 43.2955843, - "lng": 1.2254227, - "phone": "05 61 87 81 72", - "title": "PHARMACIE JOANNY MOULIS BLIN RAFFY", - "zipcode": "31390" -}, { - "address": "6 PLACE DE VERDUN", - "category": "3", - "city": "BRINDAS", - "id": 17223, - "lat": 45.7208651, - "lng": 4.6943181, - "phone": "04 78 45 13 41", - "title": "PHARMACIE DE L'OBEANCE", - "zipcode": "69126" -}, { - "address": "6 PLACE DU CHANGE", - "category": "3", - "city": "NANTES", - "id": 17834, - "lat": 47.2154748, - "lng": -1.5548894, - "phone": "02 40 47 43 22", - "title": "PHARMACIE DU CHANGE", - "zipcode": "44000" -}, { - "address": "6 PLACE EDOUARD SOLDANI", - "category": "1", - "city": "LES ARCS", - "id": 17044, - "lat": 43.4610827, - "lng": 6.480783, - "phone": "04 94 73 32 85", - "title": "PHARMACIE DE LA PLACE", - "zipcode": "83460" -}, { - "address": "6 PLACE GABRIEL PERI", - "category": "2", - "city": "BEAUMONT-SUR-OISE", - "id": 19864, - "lat": 49.1426967, - "lng": 2.2860816, - "phone": "01 34 70 00 19", - "title": "PHARMACIE GRIMAUX PARMENTIER", - "zipcode": "95260" -}, { - "address": "6 PLACE GEORGES MARCHAIS", - "category": "2", - "city": "CHAMPIGNY-SUR-MARNE", - "id": 17561, - "lat": 48.808781, - "lng": 2.5389174, - "phone": "01 48 80 58 10", - "title": "PHARMACIE DES MORDACS", - "zipcode": "94500" -}, { - "address": "6 PLACE JEAN JAURES", - "category": "2", - "city": "MONTROUGE", - "id": 18272, - "lat": 48.8163885, - "lng": 2.3107276, - "phone": "01 47 35 29 93", - "title": "PHARMACIE DUPAIN", - "zipcode": "92120" -}, { - "address": "6 PLACE LIBERTE", - "category": "2", - "city": "VILLENEUVE-L'ARCHEVEQUE", - "id": 18341, - "lat": 48.2340173, - "lng": 3.5576499, - "phone": "03 86 86 74 08", - "title": "PHARMACIE FERRAND", - "zipcode": "89190" -}, { - "address": "6 RUE CHARLES DE GAULLE", - "category": "1", - "city": "SAINT-CHERON", - "id": 19733, - "lat": 48.5536498, - "lng": 2.1240727, - "phone": "01 64 56 60 17", - "title": "PHARMACIE VINCENT", - "zipcode": "91530" -}, { - "address": "6 RUE DE DUNKERQUE", - "category": "1", - "city": "PARIS", - "id": 14611, - "lat": 48.8795759, - "lng": 2.3574507, - "phone": "01 40 37 05 15", - "title": "PHARMACIE MARRACHE", - "zipcode": "75010" -}, { - "address": "6 RUE DE L EGLISE", - "category": "1", - "city": "MONTBRON", - "id": 17748, - "lat": 45.6687704, - "lng": 0.5006687, - "phone": "05 45 23 94 10", - "title": "PHARMACIE DU CEDRE", - "zipcode": "16220" -}, { - "address": "6 RUE DE LA CHAPELLE", - "category": "2", - "city": "SAINT-MEXANT", - "id": 17324, - "lat": 45.2800706, - "lng": 1.6600559, - "phone": "05 55 29 36 00", - "title": "PHARMACIE DE ST MEXANT", - "zipcode": "19330" -}, { - "address": "6 RUE DE LA REPUBLIQUE", - "category": "2", - "city": "FLIXECOURT", - "id": 17031, - "lat": 50.0130815, - "lng": 2.0823151, - "phone": "03 22 51 60 92", - "title": "PHARMACIE DE LA NIEVRE", - "zipcode": "80420" -}, { - "address": "6 RUE DIANE DE POITIERS", - "category": "2", - "city": "ANET", - "id": 16583, - "lat": 48.8575993, - "lng": 1.4378355, - "phone": "02 37 41 90 10", - "title": "PHARMACIE DALDOSS", - "zipcode": "28260" -}, { - "address": "6 RUE DU PARC", - "category": "2", - "city": "ESTIVAREILLES", - "id": 18054, - "lat": 46.4259267, - "lng": 2.6144241, - "phone": "04 70 06 00 72", - "title": "PHARMACIE DU PARC", - "zipcode": "3190" -}, { - "address": "6 RUE DU PONT AUX JUIFS", - "category": "3", - "city": "NOGENT-LE-ROI", - "id": 16755, - "lat": 48.6478141, - "lng": 1.5350093, - "phone": "02 37 51 30 51", - "title": "PHARMACIE DE L ETOILE", - "zipcode": "28210" -}, { - "address": "6 RUE JEAN CONDAMiN", - "category": "1", - "city": "MORNANT", - "id": 17165, - "lat": 45.6187402, - "lng": 4.6729653, - "phone": "04 78 44 02 03", - "title": "PHARMACIE DE LA TOUR RONDE SELARL", - "zipcode": "69440" -}, { - "address": "6 RUE LA BARRE", - "category": "3", - "city": "HANCHES", - "id": 16691, - "lat": 48.6021591, - "lng": 1.6451003, - "phone": "02 37 83 70 80", - "title": "PHARMACIE DE HANCHES", - "zipcode": "28130" -}, { - "address": "6 RUE LOUIS GUILLOUX CC CAP NORD", - "category": "2", - "city": "REDON", - "id": 16267, - "lat": 47.6737186, - "lng": -2.0625623, - "phone": "02 99 71 35 42", - "title": "PHARMACIE CAP NORD", - "zipcode": "35600" -}, { - "address": "60 62 AVENUE HENRI BARBUSSE CTRE CIAL ARBRE DE LA LIBERTE", - "category": "1", - "city": "VIGNEUX-SUR-SEINE", - "id": 16967, - "lat": 48.7002353, - "lng": 2.4208772, - "phone": "01 69 03 00 59", - "title": "PHARMACIE DE LA LIBERTE", - "zipcode": "91270" -}, { - "address": "60 AV LA JUSTICE DE CASTELNAU", - "category": "2", - "city": "MONTPELLIER", - "id": 15036, - "lat": 43.6266428, - "lng": 3.8711776, - "phone": "04 67 63 49 96", - "title": "PHARMACIE DES FACULTES", - "zipcode": "34000" -}, { - "address": "60 AVENUE DE FLANDRE", - "category": "2", - "city": "PARIS", - "id": 14683, - "lat": 48.8880591, - "lng": 2.3741105, - "phone": "01 40 36 25 52", - "title": "PHARMACIE TAIEB", - "zipcode": "75019" -}, { - "address": "60 AVENUE FRANKLIN ROOSEVELT", - "category": "1", - "city": "LE CANNET", - "id": 18392, - "lat": 43.5732128, - "lng": 7.0000004, - "phone": "04 93 45 24 62", - "title": "PHARMACIE FRANKLIN", - "zipcode": "6110" -}, { - "address": "60 PLACE DE PROVENCE", - "category": "1", - "city": "POITIERS", - "id": 19632, - "lat": 46.5893761, - "lng": 0.3591878, - "phone": "05 49 41 02 45", - "title": "PHARMACIE THOMAS J.F.", - "zipcode": "86000" -}, { - "address": "60 RUE DE VIENNE", - "category": "1", - "city": "GISORS", - "id": 17846, - "lat": 49.2798799, - "lng": 1.7747115, - "phone": "02 32 55 26 18", - "title": "PHARMACIE DU CHATEAU", - "zipcode": "27140" -}, { - "address": "60 RUE DU VEXIN", - "category": "2", - "city": "OINVILLE-SUR-MONTCIENT", - "id": 16226, - "lat": 49.0109901, - "lng": 1.8997312, - "phone": "01 34 75 47 98", - "title": "PHARMACIE BRUNET", - "zipcode": "78250" -}, { - "address": "60 RUE MARECHAL FOCH", - "category": "1", - "city": "SANTES", - "id": 18815, - "lat": 50.5937451, - "lng": 2.959346, - "phone": "03 20 07 01 76", - "title": "PHARMACIE LETERME", - "zipcode": "59211" -}, { - "address": "60 RUE SAINT STENAY CENTRE COMMERCIAL AVENIR", - "category": "3", - "city": "DRANCY", - "id": 16405, - "lat": 48.9204872, - "lng": 2.4211189, - "phone": "01 48 36 02 30", - "title": "PHARMACIE CENTRE CIAL AVENIR", - "zipcode": "93700" -}, { - "address": "601 AVENUE DE LA CANEBIERE", - "category": "2", - "city": "CHEVAL-BLANC", - "id": 19532, - "lat": 43.7967179, - "lng": 5.0803765, - "phone": "04 90 71 00 94", - "title": "PHARMACIE SEGUR", - "zipcode": "84460" -}, { - "address": "61 AVENUE DU GENERAL DE GAULLE", - "category": "2", - "city": "MAISONS-ALFORT", - "id": 16988, - "lat": 48.8021539, - "lng": 2.4299008, - "phone": "01 43 76 76 10", - "title": "PHARMACIE DE LA MAIRIE", - "zipcode": "94700" -}, { - "address": "61 BOULEVARD CHANZY ANGLE GOERGES POMPIDOU", - "category": "3", - "city": "LE BEAUSSET", - "id": 18149, - "lat": 43.1959386, - "lng": 5.8059816, - "phone": "04 94 90 48 39", - "title": "PHARMACiE DU ROND POINT", - "zipcode": "83330" -}, { - "address": "61 RUE DE L AMIRAL COURBET", - "category": "1", - "city": "L AIGUILLON-SUR-MER", - "id": 16708, - "lat": 46.3336267, - "lng": -1.3088831, - "phone": "02 51 56 40 03", - "title": "PHARMACIE DE L AIGUILLON", - "zipcode": "85460" -}, { - "address": "61 RUE DE LA REPUBLIQUE", - "category": "3", - "city": "SAINT-GEORGES-DE-DIDONNE", - "id": 16003, - "lat": 45.6022753, - "lng": -0.9977555, - "phone": "05 46 05 07 72", - "title": "PHARMACIE BARTHELEMY BRISSARD", - "zipcode": "17110" -}, { - "address": "61 RUE JEAN JAURES", - "category": "2", - "city": "FREJUS", - "id": 18996, - "lat": 43.4330198, - "lng": 6.7352009, - "phone": "04 94 51 16 88", - "title": "PHARMACIE MOURRE", - "zipcode": "83600" -}, { - "address": "61 RUE LIEUTENANT MAURICE ANGE", - "category": "2", - "city": "LES SABLES-D'OLONNE", - "id": 18299, - "lat": 46.4974643, - "lng": -1.7973459, - "phone": "02 51 32 04 29", - "title": "PHARMACIE ERIAU CROCHET", - "zipcode": "85100" -}, { - "address": "62 AVENUE DE LA REPUBLIQUE", - "category": "3", - "city": "MONTROUGE", - "id": 18151, - "lat": 48.8170591, - "lng": 2.3184513, - "phone": "01 42 53 01 53", - "title": "PHARMACiE DU ROND POINT", - "zipcode": "92120" -}, { - "address": "62 AVENUE MONTESQUIEU", - "category": "1", - "city": "SAINT-MEDARD-EN-JALLES", - "id": 16046, - "lat": 44.8953256, - "lng": -0.7169685, - "phone": "05 56 05 02 47", - "title": "PHARMACIE BELHOMME", - "zipcode": "33160" -}, { - "address": "62 BOULEVARD PASTEUR", - "category": "1", - "city": "NANTES", - "id": 17058, - "lat": 47.2140439, - "lng": -1.5851526, - "phone": "09 53 16 79 03", - "title": "PHARMACIE DE LA PLACE ZOLA", - "zipcode": "44000" -}, { - "address": "62 RUE D ESTIENNE D ORVES", - "category": "2", - "city": "RUEIL-MALMAISON", - "id": 17813, - "lat": 48.8863858, - "lng": 2.1803364, - "phone": "01 47 51 03 22", - "title": "PHARMACIE DU CENTRE COLMAR", - "zipcode": "92500" -}, { - "address": "62/64 CHAUSSEE DU BOIS", - "category": "3", - "city": "ABBEVILLE", - "id": 19100, - "lat": 50.1083297, - "lng": 1.8386929, - "phone": "03 22 20 69 69", - "title": "PHARMACIE PAROIELLE", - "zipcode": "80100" -}, { - "address": "62BIS RUE DE LA GARE", - "category": "1", - "city": "ISSOU", - "id": 16515, - "lat": 48.9876129, - "lng": 1.7903197, - "phone": "01 30 93 63 13", - "title": "PHARMACIE CORSON", - "zipcode": "78440" -}, { - "address": "63 AVENUE DE FONTAINEBLEAU", - "category": "2", - "city": "LE KREMLIN-BICETRE", - "id": 18660, - "lat": 48.8116224, - "lng": 2.3627837, - "phone": "01 46 58 28 06", - "title": "PHARMACIE KIV", - "zipcode": "94270" -}, { - "address": "63 AVENUE DE LA GRANDE ARMEE", - "category": "1", - "city": "PARIS", - "id": 14478, - "lat": 48.8760685, - "lng": 2.2866246, - "phone": "01 45 00 56 34", - "title": "PHARMACIE DE LA GRANDE ARMEE", - "zipcode": "75016" -}, { - "address": "63 AVENUE DE LA TRILLADE", - "category": "2", - "city": "AVIGNON", - "id": 17347, - "lat": 43.9352057, - "lng": 4.8207031, - "phone": "04 90 88 50 92", - "title": "PHARMACIE DEFERT", - "zipcode": "84000" -}, { - "address": "63 BOULEVARD KELLERMANN", - "category": "2", - "city": "PARIS", - "id": 14594, - "lat": 48.8205102, - "lng": 2.3509388, - "phone": "01 45 88 23 24", - "title": "PHARMACIE KELLERMANN", - "zipcode": "75013" -}, { - "address": "63 RUE DE COURCELLES", - "category": "2", - "city": "PARIS", - "id": 14420, - "lat": 48.8769918, - "lng": 2.3055915, - "phone": "01 47 66 42 32", - "title": "PHARMACIE BRINGER GRINTAIN", - "zipcode": "75008" -}, { - "address": "63 RUE DE LA FAISANDERIE", - "category": "2", - "city": "PARIS", - "id": 14693, - "lat": 48.8682075, - "lng": 2.2757306, - "phone": "01 47 27 36 76", - "title": "PHARMACIE ZANA", - "zipcode": "75016" -}, { - "address": "63 RUE DE LA PAIX", - "category": "3", - "city": "SAINT-NAZAIRE", - "id": 15967, - "lat": 47.2776277, - "lng": -2.2169774, - "phone": "02 40 22 47 35", - "title": "PHARMACIE AUFAUVRE", - "zipcode": "44600" -}, { - "address": "63 RUE LAUGIER", - "category": "2", - "city": "PARIS", - "id": 14744, - "lat": 48.8836497, - "lng": 2.2926891, - "phone": "01 45 72 36 95", - "title": "PHARMACIE DU CASTOR", - "zipcode": "75017" -}, { - "address": "635 RUE JULES FERRY", - "category": "3", - "city": "WAZIERS", - "id": 18636, - "lat": 50.3930812, - "lng": 3.1259869, - "phone": "03 27 87 15 38", - "title": "PHARMACIE JULES FERRY", - "zipcode": "59119" -}, { - "address": "637 AV DE PROVENCE", - "category": "2", - "city": "FREJUS", - "id": 18246, - "lat": 43.4277606, - "lng": 6.7443302, - "phone": "04 94 53 53 71", - "title": "PHARMACIE DUBREUIL ET GOUTAGNY", - "zipcode": "83600" -}, { - "address": "64 AVENUE CHARLES DE GAULLE", - "category": "3", - "city": "PLOUGASTEL-DAOULAS", - "id": 18573, - "lat": 48.3818851, - "lng": -4.3758914, - "phone": "02 98 04 23 16", - "title": "PHARMACIE HOURMAN", - "zipcode": "29470" -}, { - "address": "64 BOULEVARD MALESHERBES", - "category": "2", - "city": "PARIS", - "id": 14411, - "lat": 48.878137, - "lng": 2.3161814, - "phone": "01 45 22 10 41", - "title": "PHARMACIE BOIRON", - "zipcode": "75008" -}, { - "address": "64 BOULEVARD MARECHAL JUIN", - "category": "1", - "city": "CAGNES-SUR-MER", - "id": 15567, - "lat": 43.655835, - "lng": 7.1509986, - "phone": "04 93 20 09 08", - "title": "NOUVELLE PHARMACIE DES BOULEVARDS", - "zipcode": "6800" -}, { - "address": "65 67 RUE DE LA REPUBLIQUE", - "category": "2", - "city": "PONT-AUDEMER", - "id": 15901, - "lat": 49.3566077, - "lng": 0.5152036, - "phone": "02 32 41 09 48", - "title": "PHARMACIE AC CAMPART", - "zipcode": "27500" -}, { - "address": "65 AV JULES CANTINI", - "category": "1", - "city": "MARSEILLE", - "id": 14760, - "lat": 43.283607, - "lng": 5.3892775, - "phone": "04 91 79 54 93", - "title": "PHARMACIE LA TOUR", - "zipcode": "13006" -}, { - "address": "65 AVENUE D AQUITAINE", - "category": "1", - "city": "LES SABLES D OLONNE", - "id": 18498, - "lat": 46.493618, - "lng": -1.7639693, - "phone": "02 51 32 04 79", - "title": "PHARMACIE GUENIN", - "zipcode": "85100" -}, { - "address": "65 AVENUE DE LA REPUBLIQUE", - "category": "1", - "city": "MONTGERON", - "id": 19349, - "lat": 48.706561, - "lng": 2.4568805, - "phone": "01 69 03 51 30", - "title": "PHARMACIE ROGARD", - "zipcode": "91230" -}, { - "address": "65 AVENUE DES MARTYRS CENTRE COMMERCIAL AUCHAN", - "category": "1", - "city": "DOMERAT", - "id": 16427, - "lat": 46.339536, - "lng": 2.5677338, - "phone": "04 70 29 24 29", - "title": "PHARMACIE CHANTELOT MERLE", - "zipcode": "3410" -}, { - "address": "65 BLD HENRI BARBUSSE CTRE COM DANTON", - "category": "2", - "city": "DRAVEIL", - "id": 18997, - "lat": 48.6746509, - "lng": 2.4114324, - "phone": "01 69 03 46 30", - "title": "PHARMACIE MOUSSEAU SELARL", - "zipcode": "91210" -}, { - "address": "65 ROUTE DE MONTBEUGNY CENTRE CIAL CARREFOUR MARKET", - "category": "1", - "city": "YZEURE", - "id": 16441, - "lat": 46.551886, - "lng": 3.369074, - "phone": "04 70 46 40 96", - "title": "PHARMACIE CHARVET", - "zipcode": "3400" -}, { - "address": "65 RUE DU MARECHAL FOCH", - "category": "2", - "city": "TARBES", - "id": 16778, - "lat": 43.2318509, - "lng": 0.0777524, - "phone": "05 62 93 39 33", - "title": "PHARMACIE DE L HOTEL DE VILLE", - "zipcode": "65000" -}, { - "address": "65 RUE GILET", - "category": "2", - "city": "COLOMIERS", - "id": 16315, - "lat": 43.6107171, - "lng": 1.338974, - "phone": "05 61 78 14 17", - "title": "PHARMACIE CENTRALE", - "zipcode": "31770" -}, { - "address": "65 RUE JEAN JAURES", - "category": "3", - "city": "RIVE-DE-GIER", - "id": 19436, - "lat": 45.5310605, - "lng": 4.6206071, - "phone": "04 77 75 08 72", - "title": "PHARMACIE SAINT JEAN", - "zipcode": "42800" -}, { - "address": "65 RUE PAUL BELLAMY", - "category": "2", - "city": "NANTES", - "id": 19187, - "lat": 47.2252427, - "lng": -1.5593368, - "phone": "02 40 20 33 34", - "title": "PHARMACIE POIRIER THOUZEAU", - "zipcode": "44000" -}, { - "address": "657 AVENUE VICTOR HUGO", - "category": "2", - "city": "APT", - "id": 17565, - "lat": 43.8775875, - "lng": 5.3902776, - "phone": "04 90 74 20 57", - "title": "PHARMACIE DES OCRES", - "zipcode": "84400" -}, { - "address": "658 ROUTE DE ROUEN", - "category": "2", - "city": "AMIENS", - "id": 19282, - "lat": 49.8856763, - "lng": 2.2670528, - "phone": "03 22 91 52 84", - "title": "PHARMACIE RANDANNE", - "zipcode": "80000" -}, { - "address": "66 RUE D HAUTEVILLE", - "category": "1", - "city": "PARIS", - "id": 14590, - "lat": 48.8750938, - "lng": 2.3509834, - "phone": "01 45 23 37 41", - "title": "PHARMACIE HAUTEVILLE", - "zipcode": "75010" -}, { - "address": "66 RUE MOUEXIGNE CCIAL LECLERC", - "category": "1", - "city": "LAMBALLE", - "id": 18759, - "lat": 48.4615287, - "lng": -2.5162124, - "phone": "02 96 31 05 57", - "title": "PHARMACIE LE GAGNE", - "zipcode": "22400" -}, { - "address": "67 AVENUE MATHIEU CHAZOTTE", - "category": "2", - "city": "DEUIL-LA-BARRE", - "id": 18007, - "lat": 48.9709357, - "lng": 2.3210156, - "phone": "01 39 83 34 34", - "title": "PHARMACIE DU MARCHE", - "zipcode": "95170" -}, { - "address": "67 RUE DE GRENELLE", - "category": "2", - "city": "PARIS", - "id": 14393, - "lat": 48.8549996, - "lng": 2.324362, - "phone": "01 45 48 72 70", - "title": "PHARMACIE BAC GRENELLE", - "zipcode": "75007" -}, { - "address": "67 RUE DU MARECHAL LECLERC", - "category": "3", - "city": "EAUBONNE", - "id": 15887, - "lat": 48.9850183, - "lng": 2.2728275, - "phone": "01 39 59 45 14", - "title": "PHARMACIE 2000", - "zipcode": "95600" -}, { - "address": "68 AVENUE DE LA GRANDE ARMEE", - "category": "3", - "city": "PARIS", - "id": 14487, - "lat": 48.8772106, - "lng": 2.2856596, - "phone": "01 45 74 17 31", - "title": "PHARMACIE DE LA PORTE MAILLOT", - "zipcode": "75017" -}, { - "address": "68 AVENUE JEAN JAURES", - "category": "1", - "city": "VENISSIEUX", - "id": 19763, - "lat": 45.7003577, - "lng": 4.8822439, - "phone": "04 72 50 00 17", - "title": "PHARMACIE YACOUB", - "zipcode": "69200" -}, { - "address": "68 Boulevard Jean Jaurès", - "category": "2", - "city": "BOULOGNE BILLANCOURT", - "id": 15071, - "lat": 48.8400069, - "lng": 2.2395696, - "phone": "01 46 05 03 12", - "title": "PHARMACIE EISENBETH", - "zipcode": "92100" -}, { - "address": "68 RUE JEAN JAURES", - "category": "2", - "city": "VILLEJUIF", - "id": 18357, - "lat": 48.7915996, - "lng": 2.3664265, - "phone": "01 46 78 06 33", - "title": "PHARMACIE FLEIFEL", - "zipcode": "94800" -}, { - "address": "680 ROUTE DE LA BUISSONNE CENTRE COMMERCIAL INTERMARCHE", - "category": "1", - "city": "PERNES-LES-FONTAINES", - "id": 16821, - "lat": 44.008746, - "lng": 5.0517149, - "phone": "04 90 61 22 01", - "title": "PHARMACIE DE LA BUISSONNE", - "zipcode": "84210" -}, { - "address": "69 AV FAIDHERBE", - "category": "3", - "city": "DUNKERQUE", - "id": 19664, - "lat": 51.0474548, - "lng": 2.393889, - "phone": "03 28 63 18 50", - "title": "PHARMACIE TURENNE", - "zipcode": "59240" -}, { - "address": "69 AVENUE DE BONNEUIL", - "category": "1", - "city": "LA VARENNE ST HILAIRE", - "id": 16104, - "lat": 48.7888375, - "lng": 2.5024018, - "phone": "01 48 83 11 05", - "title": "PHARMACIE BISMUTH", - "zipcode": "94210" -}, { - "address": "69 AVENUE DE LA CORSE", - "category": "1", - "city": "MARSEILLE", - "id": 14734, - "lat": 43.2887097, - "lng": 5.360657, - "phone": "04 91 52 33 58", - "title": "PHARMACIE DAVAL", - "zipcode": "13007" -}, { - "address": "69 AVENUE DE ROUEN", - "category": "1", - "city": "VERNON", - "id": 17442, - "lat": 49.1001468, - "lng": 1.4716651, - "phone": "02 32 51 00 60", - "title": "PHARMACIE DES BORDS DE SEINE", - "zipcode": "27200" -}, { - "address": "69 RUE DE LA BOULE D OR", - "category": "1", - "city": "ROMILLY-SUR-SEINE", - "id": 19861, - "lat": 48.5164386, - "lng": 3.7266167, - "phone": "03 25 24 84 20", - "title": "PHARMACIE GANDON-JOUET", - "zipcode": "10100" -}, { - "address": "69 RUE DE LA GARE", - "category": "2", - "city": "GOMMEGNIES", - "id": 16722, - "lat": 50.2702562, - "lng": 3.7052871, - "phone": "03 27 49 83 74", - "title": "PHARMACIE DE L AUNELLE", - "zipcode": "59144" -}, { - "address": "69 RUE DE LA GLACIERE", - "category": "1", - "city": "PARIS", - "id": 14564, - "lat": 48.8298354, - "lng": 2.3442651, - "phone": "01 45 80 46 05", - "title": "PHARMACIE DU THEATRE", - "zipcode": "75013" -}, { - "address": "69 RUE DU GENERAL DE GAULLE", - "category": "2", - "city": "VILLENEUVE-LE-ROI", - "id": 15905, - "lat": 48.7349163, - "lng": 2.4200383, - "phone": "01 45 97 41 22", - "title": "PHARMACIE AICHE", - "zipcode": "94290" -}, { - "address": "69TER ROUTE DE PARIS", - "category": "3", - "city": "BONSECOURS", - "id": 16462, - "lat": 49.4227343, - "lng": 1.1252959, - "phone": "02 35 80 61 13", - "title": "PHARMACIE CHOUQUET", - "zipcode": "76240" -}, { - "address": "6BIS RUE DES RESISTANTS", - "category": "1", - "city": "ARMENTIERES", - "id": 17598, - "lat": 50.690161, - "lng": 2.877314, - "phone": "03 20 77 51 41", - "title": "PHARMACIE DES PRES", - "zipcode": "59280" -}, { - "address": "7 AV MARTYRS DE LA RESISTANCE IMMEUBLE FOURNAS", - "category": "3", - "city": "VALLAURIS", - "id": 19339, - "lat": 43.5745677, - "lng": 7.0564388, - "phone": "04 93 63 54 32", - "title": "PHARMACIE ROCHE", - "zipcode": "6220" -}, { - "address": "7 AVENUE ARISTIDE BRIAND", - "category": "1", - "city": "L HAY-LES-ROSES", - "id": 19195, - "lat": 48.7796886, - "lng": 2.3350581, - "phone": "01 46 64 47 09", - "title": "PHARMACIE PONG", - "zipcode": "94240" -}, { - "address": "7 AVENUE CLAUDE DEBUSSY", - "category": "2", - "city": "CLICHY", - "id": 15444, - "lat": 48.9097854, - "lng": 2.3081297, - "phone": "01 47 37 33 58", - "title": "GRANDE PHARMACIE BEAUJON", - "zipcode": "92110" -}, { - "address": "7 AVENUE DE GASCOGNE", - "category": "2", - "city": "LHERM", - "id": 17955, - "lat": 43.4293645, - "lng": 1.2189868, - "phone": "05 61 56 00 74", - "title": "PHARMACIE DU LHERM", - "zipcode": "31600" -}, { - "address": "7 AVENUE DE LA GARE", - "category": "2", - "city": "VERON", - "id": 16089, - "lat": 48.1300507, - "lng": 3.305716, - "phone": "03 86 97 17 76", - "title": "PHARMACIE BIAUD", - "zipcode": "89510" -}, { - "address": "7 AVENUE DE LA REPUBLIQUE", - "category": "3", - "city": "SAINT-MARTIN-DE-CRAU", - "id": 18469, - "lat": 43.6380812, - "lng": 4.8098871, - "phone": "04 90 47 39 33", - "title": "PHARMACIE GOMBERT", - "zipcode": "13310" -}, { - "address": "7 AVENUE DE LA VICTOIRE", - "category": "1", - "city": "CAMBRAI", - "id": 19666, - "lat": 50.174843, - "lng": 3.2342527, - "phone": "03 27 81 30 66", - "title": "PHARMACIE TUROTTE", - "zipcode": "59400" -}, { - "address": "7 AVENUE DU CHATEAU", - "category": "3", - "city": "VINCENNES", - "id": 17844, - "lat": 48.8455809, - "lng": 2.4365916, - "phone": "01 43 28 03 63", - "title": "PHARMACIE DU CHATEAU", - "zipcode": "94300" -}, { - "address": "7 AVENUE DU TEIL", - "category": "3", - "city": "MONTELIMAR", - "id": 18961, - "lat": 44.558151, - "lng": 4.7425687, - "phone": "04 75 01 39 94", - "title": "PHARMACIE MOLLARET", - "zipcode": "26200" -}, { - "address": "7 AVENUE LOUIS FOUCHERE", - "category": "1", - "city": "VARENNES-VAUZELLES", - "id": 16838, - "lat": 47.0088951, - "lng": 3.1377934, - "phone": "03 86 57 10 30", - "title": "PHARMACIE DE LA CITE", - "zipcode": "58640" -}, { - "address": "7 AVENUE MARCEAU", - "category": "3", - "city": "PARIS", - "id": 14610, - "lat": 48.8658423, - "lng": 2.2993295, - "phone": "01 47 20 83 52", - "title": "PHARMACIE MARCEAU", - "zipcode": "75016" -}, { - "address": "7 BIS RUE JULES FERRY", - "category": "2", - "city": "LACROIX-SAINT-OUEN", - "id": 19334, - "lat": 49.35494, - "lng": 2.7847014, - "phone": "03 44 41 50 37", - "title": "PHARMACIE RIZZATO VASSEUR", - "zipcode": "60610" -}, { - "address": "7 BOULEVARD DE STRASBOURG", - "category": "3", - "city": "BUSSY-SAINT-GEORGES", - "id": 15831, - "lat": 48.8313347, - "lng": 2.7353832, - "phone": "01 60 42 50 50", - "title": "PARAPHARMACIE VAL D EUROPE", - "zipcode": "77600" -}, { - "address": "7 GRAND RUE", - "category": "2", - "city": "VILLEFAGNAN", - "id": 15951, - "lat": 46.0124723, - "lng": 0.0798954, - "phone": "05 45 31 60 45", - "title": "PHARMACIE ARRIVE DESNOYERS", - "zipcode": "16240" -}, { - "address": "7 PLACE DES FARGES", - "category": "1", - "city": "TREIGNAC", - "id": 19210, - "lat": 45.5374643, - "lng": 1.7943003, - "phone": "05 55 98 01 38", - "title": "PHARMACIE POULOUX", - "zipcode": "19260" -}, { - "address": "7 PLACE DU MARCHE", - "category": "2", - "city": "THIAIS", - "id": 16985, - "lat": 48.764566, - "lng": 2.391209, - "phone": "01 48 53 83 02", - "title": "PHARMACIE DE LA MAIRIE", - "zipcode": "94320" -}, { - "address": "7 PLACE FERRER 5 COURS DE LA REPUBLIQUE", - "category": "3", - "city": "GARDANNE", - "id": 17975, - "lat": 43.4553285, - "lng": 5.470505, - "phone": "04 42 58 30 14", - "title": "PHARMACIE DU MARCHE", - "zipcode": "13120" -}, { - "address": "7 PLACE FRANCOIS MITTERRAND", - "category": "2", - "city": "VIENNE", - "id": 16781, - "lat": 45.5257502, - "lng": 4.8755804, - "phone": "04 74 85 02 70", - "title": "PHARMACIE DE L HOTEL DE VILLE", - "zipcode": "38200" -}, { - "address": "7 PLACE GALLIENI", - "category": "2", - "city": "MELUN", - "id": 16917, - "lat": 48.5281607, - "lng": 2.6556968, - "phone": "01 64 37 02 53", - "title": "PHARMACIE DE LA GARE", - "zipcode": "77000" -}, { - "address": "7 PLACE GENERAL LECLERC", - "category": "2", - "city": "SANNOIS", - "id": 18860, - "lat": 48.9717832, - "lng": 2.2569817, - "phone": "01 39 81 34 16", - "title": "PHARMACIE MADAR", - "zipcode": "95110" -}, { - "address": "7 ROND POINT DU PONT MIRABEAU", - "category": "1", - "city": "PARIS", - "id": 14431, - "lat": 48.8456715, - "lng": 2.2773343, - "phone": "01 45 77 85 23", - "title": "PHARMACIE CENTRALE MIRABEAU", - "zipcode": "75015" -}, { - "address": "7 RUE BLATIN", - "category": "1", - "city": "CLERMONT-FERRAND", - "id": 18826, - "lat": 45.7768448, - "lng": 3.080622, - "phone": "04 73 93 39 37", - "title": "PHARMACIE LIEURADE EURL", - "zipcode": "63000" -}, { - "address": "7 RUE DE BAILLY", - "category": "2", - "city": "TRACY-LE-MONT", - "id": 17259, - "lat": 49.4798274, - "lng": 3.0012512, - "phone": "03 44 75 20 37", - "title": "PHARMACIE DE NERVAISE", - "zipcode": "60170" -}, { - "address": "7 RUE DE BOURGOGNE", - "category": "2", - "city": "PARIS", - "id": 14464, - "lat": 48.8599571, - "lng": 2.3183491, - "phone": "01 45 51 54 41", - "title": "PHARMACIE DE L ASSEMBLEE", - "zipcode": "75007" -}, { - "address": "7 RUE DE L ABBE ROGER DERRY", - "category": "1", - "city": "VITRY-SUR-SEINE", - "id": 15897, - "lat": 48.7907218, - "lng": 2.3927853, - "phone": "01 46 80 61 61", - "title": "PHARMACIE ABISROR", - "zipcode": "94400" -}, { - "address": "7 RUE DE L ALBONI", - "category": "3", - "city": "PARIS", - "id": 14774, - "lat": 48.8581661, - "lng": 2.2848933, - "phone": "01 42 88 20 34", - "title": "PHARMACIE VOILLOT", - "zipcode": "75016" -}, { - "address": "7 RUE DE MAUBEUGE", - "category": "2", - "city": "PARIS", - "id": 14584, - "lat": 48.8766727, - "lng": 2.3413205, - "phone": "01 48 78 65 84", - "title": "PHARMACIE GOLDFARB", - "zipcode": "75009" -}, { - "address": "7 RUE DES CLAPIERS", - "category": "2", - "city": "MENDE", - "id": 16188, - "lat": 44.5202075, - "lng": 3.5038947, - "phone": "04 66 49 19 43", - "title": "PHARMACIE BOUTET", - "zipcode": "48000" -}, { - "address": "7 RUE DES PETITS CARREAUX", - "category": "1", - "city": "PARIS", - "id": 14800, - "lat": 48.8667121, - "lng": 2.3470235, - "phone": "09 60 09 89 14", - "title": "PHARMACIE MODERNE DU SENTIER", - "zipcode": "75002" -}, { - "address": "7 RUE DES RESISTANTS", - "category": "1", - "city": "FLINES-LEZ-RACHES", - "id": 19176, - "lat": 50.4286538, - "lng": 3.1799482, - "phone": "03 27 91 68 60", - "title": "PHARMACIE PLAETEVOET ME PLAETEVOET", - "zipcode": "59148" -}, { - "address": "7 RUE DU GAL DE GAULLE", - "category": "3", - "city": "PLUMELEC", - "id": 19375, - "lat": 47.8374035, - "lng": -2.6388133, - "phone": "02 97 42 24 26", - "title": "PHARMACIE ROUSTEAU", - "zipcode": "56420" -}, { - "address": "7 RUE DU GENERAL LAMBERT", - "category": "2", - "city": "CARHAIX-PLOUGUER", - "id": 18654, - "lat": 48.2765559, - "lng": -3.5726875, - "phone": "02 98 93 00 40", - "title": "PHARMACIE KEROUEDAN", - "zipcode": "29270" -}, { - "address": "7 RUE FERNAND DARCHICOURT", - "category": "2", - "city": "LIBERCOURT", - "id": 16005, - "lat": 50.481735, - "lng": 3.0043212, - "phone": "03 21 74 63 89", - "title": "PHARMACIE BASILIOS", - "zipcode": "62820" -}, { - "address": "7 RUE GENERAL DE GAULLE", - "category": "1", - "city": "CHATEAU-THIERRY", - "id": 17163, - "lat": 49.044939, - "lng": 3.4027253, - "phone": "03 23 83 00 63", - "title": "PHARMACIE DE LA TOUR", - "zipcode": "2400" -}, { - "address": "7 RUE JEAN PERRIN CTRE COM CARREFOUR MARKET", - "category": "2", - "city": "VANNES", - "id": 19370, - "lat": 47.643054, - "lng": -2.739753, - "phone": "02 97 47 37 37", - "title": "PHARMACIE ROUSSEAU - LA JOIE", - "zipcode": "56000" -}, { - "address": "7 RUE NOTRE DAME DES CHAMPS", - "category": "1", - "city": "PARIS", - "id": 14680, - "lat": 48.8465982, - "lng": 2.327535, - "phone": "01 45 48 86 41", - "title": "PHARMACIE STANISLAS", - "zipcode": "75006" -}, { - "address": "7 RUE PIERRE ET MARIE CURIE", - "category": "2", - "city": "CHADRAC", - "id": 16444, - "lat": 45.0611401, - "lng": 3.9025505, - "phone": "04 71 02 70 79", - "title": "PHARMACIE CHATAIGNER", - "zipcode": "43770" -}, { - "address": "7/9 PLACE LEON BOURGEOIS", - "category": "3", - "city": "AVIZE", - "id": 19359, - "lat": 48.9713455, - "lng": 4.009167, - "phone": "03 26 57 54 64", - "title": "PHARMACIE RONDEAU", - "zipcode": "51190" -}, { - "address": "70 AVENUE DE LYON", - "category": "2", - "city": "LA BAULE-ESCOUBLAC", - "id": 16890, - "lat": 47.2757941, - "lng": -2.3573016, - "phone": "02 40 24 28 38", - "title": "PHARMACIE DE LA FORET", - "zipcode": "44500" -}, { - "address": "70 AVENUE DU ROUSILLON", - "category": "3", - "city": "LIMOGES", - "id": 18594, - "lat": 45.8178563, - "lng": 1.222672, - "phone": "05 55 49 01 62", - "title": "PHARMACIE JACQUET", - "zipcode": "87000" -}, { - "address": "70 RUE DE L'INDUSTRIE", - "category": "3", - "city": "WERVICQ-SUD", - "id": 16385, - "lat": 50.7719979, - "lng": 3.0451542, - "phone": "03 20 39 03 50", - "title": "PHARMACIE CENTRALE", - "zipcode": "59117" -}, { - "address": "70 RUE DU BAC", - "category": "1", - "city": "PARIS", - "id": 14341, - "lat": 48.8556089, - "lng": 2.3248963, - "phone": "01 45 48 99 74", - "title": "PHARMACIE BAC SAINT GERMAIN", - "zipcode": "75007" -}, { - "address": "70 RUE FRANCOIS MITTERRAND", - "category": "2", - "city": "NEVERS", - "id": 19933, - "lat": 46.9901249, - "lng": 3.1623133, - "phone": "03 86 59 07 83", - "title": "VICTOR'S", - "zipcode": "58000" -}, { - "address": "70 RUE SAINT ALYRE", - "category": "2", - "city": "CLERMONT-FERRAND", - "id": 19486, - "lat": 45.7852768, - "lng": 3.0810529, - "phone": "04 73 37 14 30", - "title": "PHARMACIE SAINTE CLAIRE", - "zipcode": "63000" -}, { - "address": "70 RUE SAINT MARTIN", - "category": "1", - "city": "SOISSONS", - "id": 17097, - "lat": 49.3798071, - "lng": 3.3282797, - "phone": "03 23 53 00 55", - "title": "PHARMACIE DE LA POSTE", - "zipcode": "2200" -}, { - "address": "70 RUE SAINT MARTIN", - "category": "2", - "city": "SOISSONS", - "id": 17097, - "lat": 49.3798071, - "lng": 3.3282797, - "phone": "03 23 53 00 55", - "title": "PHARMACIE DE LA POSTE", - "zipcode": "2200" -}, { - "address": "71 AVENUE DE TOURNAMY LA PALOMBIERE", - "category": "2", - "city": "MOUGINS", - "id": 17254, - "lat": 43.5980363, - "lng": 6.9860214, - "phone": "04 93 90 00 46", - "title": "PHARMACIE DE MOUGINS", - "zipcode": "6250" -}, { - "address": "71 BOULEVARD DE PICPUS", - "category": "1", - "city": "PARIS", - "id": 14686, - "lat": 48.8468224, - "lng": 2.3992625, - "phone": "01 43 43 66 20", - "title": "PHARMACIE VALET", - "zipcode": "75012" -}, { - "address": "71 CHEMIN DE FABREGAS", - "category": "2", - "city": "LA SEYNE-SUR-MER", - "id": 18611, - "lat": 43.0820867, - "lng": 5.8788748, - "phone": "04 94 94 61 31", - "title": "PHARMACIE JEAN MICHEL FAVIER", - "zipcode": "83500" -}, { - "address": "71 RUE EDOUARD PLACHEZ", - "category": "1", - "city": "CARVIN", - "id": 17099, - "lat": 50.4902005, - "lng": 2.9553548, - "phone": "03 21 74 30 71", - "title": "PHARMACIE DE LA POSTE", - "zipcode": "62220" -}, { - "address": "71 RUE JEAN JAURES", - "category": "3", - "city": "FENAIN", - "id": 18662, - "lat": 50.3617091, - "lng": 3.3006213, - "phone": "03 27 86 81 10", - "title": "PHARMACIE KONIECZKA", - "zipcode": "59179" -}, { - "address": "72 AVENUE DES CAILLOLS", - "category": "1", - "city": "MARSEILLE", - "id": 14643, - "lat": 43.3028049, - "lng": 5.4301407, - "phone": "04 91 93 64 03", - "title": "PHARMACIE PICHON", - "zipcode": "13012" -}, { - "address": "72 AVENUE KLEBER", - "category": "2", - "city": "PARIS", - "id": 14706, - "lat": 48.8676402, - "lng": 2.2901533, - "phone": "01 47 27 97 51", - "title": "PHARMACIE DUBLY", - "zipcode": "75016" -}, { - "address": "72 RUE ANATOLE FRANCE", - "category": "2", - "city": "LEVALLOIS-PERRET", - "id": 15443, - "lat": 48.8919841, - "lng": 2.2852947, - "phone": "01 47 57 45 55", - "title": "GRANDE PHARMACIE ANATOLE FRANC", - "zipcode": "92300" -}, { - "address": "73 81 AVENUE ARISTIDE BRIAND 34 MAIL FORUM 20", - "category": "2", - "city": "ARCUEIL", - "id": 19649, - "lat": 48.8053455, - "lng": 2.325805, - "phone": "01 45 46 04 50", - "title": "PHARMACIE TRAN VAN THOAN", - "zipcode": "94110" -}, { - "address": "73 AVENUE DE LA RESISTANCE", - "category": "1", - "city": "TOULON", - "id": 16703, - "lat": 43.1176508, - "lng": 5.9463791, - "phone": "04 94 16 00 35", - "title": "PHARMACIE DE L AGUILLON", - "zipcode": "83000" -}, { - "address": "73 CHEMIN DE PALAMA", - "category": "3", - "city": "MARSEILLE", - "id": 14720, - "lat": 43.3569371, - "lng": 5.4399411, - "phone": "04 91 68 25 30", - "title": "PHARMACIE ANDREANI", - "zipcode": "13013" -}, { - "address": "73 RUE DE CLICHY", - "category": "2", - "city": "PARIS", - "id": 14572, - "lat": 48.8820923, - "lng": 2.3279225, - "phone": "01 53 16 49 28", - "title": "PHARMACIE EUROPEENNE MERHOUM", - "zipcode": "75009" -}, { - "address": "73 RUE DU 8 MAI 1945", - "category": "2", - "city": "OLONNE-SUR-MER", - "id": 18625, - "lat": 46.5440273, - "lng": -1.769552, - "phone": "02 51 95 30 15", - "title": "PHARMACIE JOLY", - "zipcode": "85340" -}, { - "address": "73 RUE VICTOR HUGO", - "category": "2", - "city": "LEVALLOIS-PERRET", - "id": 19723, - "lat": 48.8956922, - "lng": 2.2964067, - "phone": "01 47 37 08 04", - "title": "PHARMACIE VICTOR HUGO", - "zipcode": "92300" -}, { - "address": "74 76 AVENUE JEAN JAURES", - "category": "2", - "city": "TERGNIER", - "id": 18147, - "lat": 49.6572236, - "lng": 3.3054874, - "phone": "03 23 57 92 91", - "title": "PHARMACIE DU RIEU", - "zipcode": "2700" -}, { - "address": "74 AVENUE DE LA LIBERTE", - "category": "2", - "city": "GOLFE-JUAN", - "id": 17913, - "lat": 43.5675483, - "lng": 7.0720716, - "phone": "04 93 63 70 01", - "title": "PHARMACIE DU GOLFE", - "zipcode": "6220" -}, { - "address": "74 AVENUE JEAN JAURES", - "category": "3", - "city": "PANTIN", - "id": 15523, - "lat": 48.9035442, - "lng": 2.3923967, - "phone": "01 48 45 73 71", - "title": "GRDE PHARMACIE DES 4 CHEMINS", - "zipcode": "93500" -}, { - "address": "74 RUE MONGE", - "category": "2", - "city": "PARIS", - "id": 14707, - "lat": 48.842575, - "lng": 2.3518511, - "phone": "01 43 31 39 44", - "title": "PHARMACIE MONGE", - "zipcode": "75005" -}, { - "address": "746 AVENUE DE LA LIBERATION CAVAILLON CEDEX", - "category": "3", - "city": "CAVAILLON", - "id": 16845, - "lat": 43.8496729, - "lng": 5.0375222, - "phone": "04 90 71 23 06", - "title": "PHARMACIE DE LA COLLINE", - "zipcode": "84300" -}, { - "address": "75 BOULEVARD DE STRASBOURG", - "category": "2", - "city": "PARIS", - "id": 14798, - "lat": 48.8745028, - "lng": 2.356823, - "phone": "01 47 70 31 56", - "title": "PHARMACIE DU SOLEIL", - "zipcode": "75010" -}, { - "address": "75 RUE DE TOLBIAC", - "category": "1", - "city": "PARIS", - "id": 14506, - "lat": 48.8270908, - "lng": 2.3684438, - "phone": "01 44 24 10 00", - "title": "PHARMACIE DELOUYA", - "zipcode": "75013" -}, { - "address": "75 RUE DUGUESCLIN", - "category": "1", - "city": "LYON", - "id": 14569, - "lat": 45.7707, - "lng": 4.8471336, - "phone": "04 78 89 04 63", - "title": "PHARMACIE DUGUESCLIN", - "zipcode": "69006" -}, { - "address": "75 RUE ST DOMINIQUE", - "category": "2", - "city": "PARIS", - "id": 14704, - "lat": 48.8596766, - "lng": 2.3091367, - "phone": "01 45 51 63 67", - "title": "PHARMACIE DE LA COMETE", - "zipcode": "75007" -}, { - "address": "76 AVENUE GENERAL DE GAULLE", - "category": "2", - "city": "SAINTE-MAXIME", - "id": 14975, - "lat": 43.3086022, - "lng": 6.6390691, - "phone": "04 94 96 19 56", - "title": "PHARMACIE BAUSSET", - "zipcode": "83120" -}, { - "address": "76 ROUTE DE LYON", - "category": "1", - "city": "MACON", - "id": 17923, - "lat": 46.2902872, - "lng": 4.8124362, - "phone": "03 85 38 01 60", - "title": "PHARMACIE DU GRAND SUD", - "zipcode": "71000" -}, { - "address": "76 RUE DE BELLAIN", - "category": "1", - "city": "DOUAI", - "id": 16726, - "lat": 50.3686895, - "lng": 3.0824803, - "phone": "03 27 97 40 45", - "title": "PHARMACIE DE L AVENIR", - "zipcode": "59500" -}, { - "address": "76 RUE DE SEVRES", - "category": "1", - "city": "PARIS", - "id": 14598, - "lat": 48.8480439, - "lng": 2.3180644, - "phone": "01 47 34 76 01", - "title": "PHARMACIE LAFRAGETTE", - "zipcode": "75007" -}, { - "address": "76 RUE EMILE DANTAGNAN", - "category": "1", - "city": "SAINT-ANDRE-DE-CUBZAC", - "id": 19394, - "lat": 44.9944976, - "lng": -0.4417511, - "phone": "05 57 43 18 36", - "title": "PHARMACIE SAINT ANDRE", - "zipcode": "33240" -}, { - "address": "76 RUE PRINCIPALE", - "category": "3", - "city": "ETAULIERS", - "id": 18680, - "lat": 45.2241848, - "lng": -0.5730172, - "phone": "05 57 64 70 11", - "title": "PHARMACIE LA LIVENNE", - "zipcode": "33820" -}, { - "address": "76 RUE ROGER BOUVRY", - "category": "1", - "city": "SECLIN", - "id": 16878, - "lat": 50.5451874, - "lng": 3.0245424, - "phone": "03 20 90 23 61", - "title": "PHARMACIE DE LA DREVE", - "zipcode": "59113" -}, { - "address": "760 AVENUE DU MARECHAL JUIN CENTRE COMMERCIAL BARBE DOR", - "category": "1", - "city": "MONT-DE-MARSAN", - "id": 17811, - "lat": 43.9016341, - "lng": -0.4797911, - "phone": "05 58 75 00 77", - "title": "PHARMACIE DU CENTRE CARREFOUR", - "zipcode": "40000" -}, { - "address": "77 AV JEAN JAURES", - "category": "1", - "city": "MARMANDE", - "id": 19556, - "lat": 44.503133, - "lng": 0.1543361, - "phone": "05 53 64 25 41", - "title": "PHARMACIE SIRON", - "zipcode": "47200" -}, { - "address": "77 RUE SAINT GILLES", - "category": "1", - "city": "ORTHEZ", - "id": 19647, - "lat": 43.4878736, - "lng": -0.7715319, - "phone": "05 59 69 01 26", - "title": "PHARMACIE TOURNE BERNET", - "zipcode": "64300" -}, { - "address": "78 AVENUE FRANCOIS MITTERRAND", - "category": "2", - "city": "LES PENNES-MIRABEAU", - "id": 18379, - "lat": 43.3800554, - "lng": 5.3504323, - "phone": "04 91 51 01 61", - "title": "PHARMACIE FOURNIER", - "zipcode": "13170" -}, { - "address": "78 BOULEVARD DES BATIGNOLLES", - "category": "1", - "city": "PARIS", - "id": 14437, - "lat": 48.8821298, - "lng": 2.3192061, - "phone": "01 43 87 28 58", - "title": "PHARMACIE CHAPTAL", - "zipcode": "75017" -}, { - "address": "78 COURS VITTON", - "category": "1", - "city": "LYON", - "id": 14346, - "lat": 45.7699421, - "lng": 4.8570942, - "phone": "04 78 24 02 66", - "title": "GRANDE PHARMACIE DES BROTTEAUX", - "zipcode": "69006" -}, { - "address": "79 GRANDE RUE LA COUPEE", - "category": "2", - "city": "CHARNAY-LES-MACON", - "id": 16442, - "lat": 46.3084177, - "lng": 4.8094092, - "phone": "03 85 34 48 18", - "title": "PHARMACIE CHARVILLAT", - "zipcode": "71850" -}, { - "address": "79 RUE LAMARCK", - "category": "2", - "city": "PARIS", - "id": 14423, - "lat": 48.8900997, - "lng": 2.3361661, - "phone": "01 46 06 33 33", - "title": "PHARMACIE CARETTE", - "zipcode": "75018" -}, { - "address": "8 ALLEE BRANCAS", - "category": "2", - "city": "NANTES", - "id": 17769, - "lat": 47.2137733, - "lng": -1.5566822, - "phone": "02 40 48 48 98", - "title": "PHARMACIE DU CENTRE", - "zipcode": "44000" -}, { - "address": "8 AV DES THEBAUDIERES CTRE COM ESPACE OCEAN", - "category": "2", - "city": "SAINT-HERBLAIN", - "id": 18164, - "lat": 47.2444831, - "lng": -1.6079248, - "phone": "02 40 63 48 61", - "title": "PHARMACIE DU SILLON SELARL", - "zipcode": "44800" -}, { - "address": "8 AVENUE CHARLES DUPUY", - "category": "2", - "city": "BRIVES-CHARENSAC", - "id": 19570, - "lat": 45.0473867, - "lng": 3.9257526, - "phone": "04 71 09 51 92", - "title": "PHARMACIE SOLELHAC", - "zipcode": "43700" -}, { - "address": "8 AVENUE D ARGENTEUIL", - "category": "2", - "city": "ASNIERES-SUR-SEINE", - "id": 17797, - "lat": 48.9100864, - "lng": 2.2864049, - "phone": "01 47 93 12 23", - "title": "PHARMACIE DU CENTRE", - "zipcode": "92600" -}, { - "address": "8 AVENUE DE LA JEANNOTTE", - "category": "2", - "city": "MENNECY", - "id": 16964, - "lat": 48.5670629, - "lng": 2.44492, - "phone": "01 64 57 12 33", - "title": "PHARMACIE DE LA JEANNOTTE", - "zipcode": "91540" -}, { - "address": "8 AVENUE G CLEMENCEAU", - "category": "1", - "city": "RAMATUELLE", - "id": 19663, - "lat": 43.2157145, - "lng": 6.6119512, - "phone": "04 94 79 20 78", - "title": "PHARMACIE TUJAGUE CHABRELIE", - "zipcode": "83350" -}, { - "address": "8 BOULEVARD DE LA MARNE", - "category": "1", - "city": "COULOMMIERS", - "id": 15756, - "lat": 48.8025315, - "lng": 3.0919811, - "phone": "01 64 03 62 12", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "77120" -}, { - "address": "8 CHEMIN DE LA MONTJOIE", - "category": "2", - "city": "NAY-BOURDETTES", - "id": 15010, - "lat": 43.1783812, - "lng": -0.2570737, - "phone": "05 59 61 04 47", - "title": "PHARMACIE DE LA BASTIDE", - "zipcode": "64800" -}, { - "address": "8 COURS DES MINIMES", - "category": "1", - "city": "AIX-EN-PROVENCE", - "id": 17558, - "lat": 43.5288903, - "lng": 5.4383787, - "phone": "04 42 64 44 99", - "title": "PHARMACIE DES MINIMES", - "zipcode": "13090" -}, { - "address": "8 COURS MARCEL BREMOND", - "category": "3", - "city": "LES MILLES", - "id": 16043, - "lat": 43.5039723, - "lng": 5.3875647, - "phone": "04 42 24 20 07", - "title": "PHARMACIE BEILLIEU", - "zipcode": "13290" -}, { - "address": "8 PLACE DORIAN", - "category": "2", - "city": "SAINT-CHAMOND", - "id": 15470, - "lat": 45.4750698, - "lng": 4.5086763, - "phone": "04 77 29 28 00", - "title": "GRANDE PHARMACIE DE SAINT CHAMOND", - "zipcode": "42400" -}, { - "address": "8 PLACE DU FER A CHEVAL", - "category": "3", - "city": "ORLY", - "id": 15753, - "lat": 48.7432578, - "lng": 2.4073646, - "phone": "01 48 92 18 18", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "94310" -}, { - "address": "8 PLACE DU MARTRAY", - "category": "2", - "city": "LANVOLLON", - "id": 18017, - "lat": 48.6309798, - "lng": -2.9863844, - "phone": "02 96 70 00 40", - "title": "PHARMACIE DU MARTRAY", - "zipcode": "22290" -}, { - "address": "8 PLACE DU VERT BUISSON", - "category": "2", - "city": "BRUZ", - "id": 18857, - "lat": 48.028778, - "lng": -1.7597648, - "phone": "02 23 50 37 21", - "title": "PHARMACIE MACHER-TALIBART", - "zipcode": "35170" -}, { - "address": "8 PLACE LOUIS HERMANT", - "category": "1", - "city": "ANNEZIN", - "id": 16498, - "lat": 50.5330662, - "lng": 2.618584, - "phone": "03 21 57 16 33", - "title": "PHARMACIE COMBAUX", - "zipcode": "62232" -}, { - "address": "8 RUE CHARLES DE GAULLE", - "category": "1", - "city": "ORSAY", - "id": 17236, - "lat": 48.7013649, - "lng": 2.1895613, - "phone": "01 69 28 63 59", - "title": "PHARMACIE DE L'YVETTE", - "zipcode": "91400" -}, { - "address": "8 RUE DES LOMBARD", - "category": "3", - "city": "CHALONS-EN-CHAMPAGNE", - "id": 16370, - "lat": 48.9561615, - "lng": 4.3615115, - "phone": "03 26 68 20 18", - "title": "PHARMACIE CENTRALE", - "zipcode": "51000" -}, { - "address": "8 RUE DU MARECHAL FOCH", - "category": "2", - "city": "TRELON", - "id": 15984, - "lat": 50.0585123, - "lng": 4.1010922, - "phone": "03 27 59 70 59", - "title": "PHARMACIE BADOR", - "zipcode": "59132" -}, { - "address": "8 RUE GAMBETTA", - "category": "3", - "city": "SETE", - "id": 16228, - "lat": 43.4025731, - "lng": 3.6956832, - "phone": "04 67 74 81 24", - "title": "PHARMACIE BRUNIQUEL", - "zipcode": "34200" -}, { - "address": "8 RUE MARIE MADELEINE FOURCADE", - "category": "2", - "city": "LYON", - "id": 14397, - "lat": 45.7370854, - "lng": 4.8376737, - "phone": "04 78 58 97 26", - "title": "PHARMACIE BANGE", - "zipcode": "69007" -}, { - "address": "8 RUE PAUL VAILLANT COUTURIER", - "category": "1", - "city": "CLAMART", - "id": 18571, - "lat": 48.8020222, - "lng": 2.2656292, - "phone": "01 46 42 05 85", - "title": "PHARMACIE HOTTIN", - "zipcode": "92140" -}, { - "address": "8 RUE PIERRE GAUTIER", - "category": "1", - "city": "EYSINES", - "id": 17207, - "lat": 44.877994, - "lng": -0.6482348, - "phone": "05 56 57 55 75", - "title": "PHARMACIE DE LESCOMBES", - "zipcode": "33320" -}, { - "address": "8 RUE RAOUL BRIQUET", - "category": "1", - "city": "BEAURAINS", - "id": 17360, - "lat": 50.2658381, - "lng": 2.7823641, - "phone": "03 21 71 58 90", - "title": "PHARMACIE DELOBELLE", - "zipcode": "62217" -}, { - "address": "8 RUE RICHER", - "category": "2", - "city": "PARIS", - "id": 14542, - "lat": 48.8741953, - "lng": 2.3471236, - "phone": "01 47 70 58 43", - "title": "PHARMACIE DU CONSERVATOIRE", - "zipcode": "75009" -}, { - "address": "8/10 RUE CROIX BELLE PORTE", - "category": "2", - "city": "SAINT-QUENTIN", - "id": 16103, - "lat": 49.8474327, - "lng": 3.2877983, - "phone": "03 23 06 38 83", - "title": "PHARMACIE BISIAUX", - "zipcode": "2100" -}, { - "address": "80 ROUTE DE PARIS", - "category": "1", - "city": "MUILLE-VILLETTE", - "id": 15786, - "lat": 49.7320883, - "lng": 3.0656394, - "phone": "03 23 36 44 44", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "80400" -}, { - "address": "80 ROUTE DE PARIS", - "category": "2", - "city": "MUILLE-VILLETTE", - "id": 15786, - "lat": 49.7320883, - "lng": 3.0656394, - "phone": "03 23 36 44 44", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "80400" -}, { - "address": "80 RUE GRIEU", - "category": "2", - "city": "ROUEN", - "id": 18550, - "lat": 49.4442614, - "lng": 1.1291632, - "phone": "02 35 70 32 87", - "title": "PHARMACIE HEPINEUZE REINBOLD", - "zipcode": "76000" -}, { - "address": "81 AVENUE DE L EUROPE", - "category": "2", - "city": "RILLIEUX-LA-PAPE", - "id": 17211, - "lat": 45.818476, - "lng": 4.9033084, - "phone": "04 78 88 72 33", - "title": "PHARMACIE DE L'EUROPE", - "zipcode": "69140" -}, { - "address": "81 AVENUE DU 22 BMNA", - "category": "2", - "city": "LA CRAU", - "id": 18070, - "lat": 43.1531599, - "lng": 6.0701037, - "phone": "04 94 66 70 02", - "title": "PHARMACIE DU PATRIMOINE", - "zipcode": "83260" -}, { - "address": "81 Boulevard Carnot", - "category": "1", - "city": "CANNES", - "id": 15135, - "lat": 43.5609558, - "lng": 7.0164655, - "phone": "04 93 68 33 16", - "title": "PHARMACIE MODERNE", - "zipcode": "6400" -}, { - "address": "81 RUE DU MARECHAL FOCH", - "category": "3", - "city": "VERSAILLES", - "id": 18956, - "lat": 48.8136746, - "lng": 2.1358862, - "phone": "01 39 54 70 39", - "title": "PHARMACIE MITRE", - "zipcode": "78000" -}, { - "address": "81 RUE JEAN JAURES", - "category": "1", - "city": "ARNOUVILLE-LES-GONESSE", - "id": 17095, - "lat": 48.9904688, - "lng": 2.4181143, - "phone": "01 39 85 07 04", - "title": "PHARMACIE DE LA POSTE", - "zipcode": "95400" -}, { - "address": "82 AVENUE DE SUFFREN", - "category": "1", - "city": "PARIS", - "id": 14682, - "lat": 48.8513334, - "lng": 2.3002178, - "phone": "01 45 67 16 66", - "title": "PHARMACIE SUFFREN", - "zipcode": "75015" -}, { - "address": "82 BIS RUE MAURICE THOREZ", - "category": "3", - "city": "NANTERRE", - "id": 16926, - "lat": 48.8949918, - "lng": 2.1966339, - "phone": "01 47 21 12 23", - "title": "PHARMACIE DE LA GARE", - "zipcode": "92000" -}, { - "address": "82 BOULEVARD VICTOR BORDIER CENTRE COMMERCIAL CARREFOUR", - "category": "1", - "city": "MONTIGNY-LES-CORMEILLES", - "id": 17802, - "lat": 48.994961, - "lng": 2.197823, - "phone": "01 34 50 87 01", - "title": "PHARMACIE DU CENTRE", - "zipcode": "95370" -}, { - "address": "82 GRANDE RUE", - "category": "1", - "city": "ETRECHY", - "id": 17544, - "lat": 48.4900276, - "lng": 2.1888735, - "phone": "01 60 80 40 82", - "title": "PHARMACIE DES LAVANDIERES", - "zipcode": "91580" -}, { - "address": "82 RUE BAUDIN", - "category": "1", - "city": "LEVALLOIS-PERRET", - "id": 16015, - "lat": 48.8987191, - "lng": 2.2875468, - "phone": "01 42 70 95 95", - "title": "PHARMACIE BAUDIN", - "zipcode": "92300" -}, { - "address": "82 RUE DE LA POMPE", - "category": "3", - "city": "PARIS", - "id": 14481, - "lat": 48.8636506, - "lng": 2.2773877, - "phone": "01 45 04 73 66", - "title": "PHARMACIE DE LA MAIRIE", - "zipcode": "75016" -}, { - "address": "82 RUE DE LONGCHAMP", - "category": "3", - "city": "NEUILLY-SUR-SEINE", - "id": 18751, - "lat": 48.8780925, - "lng": 2.2517535, - "phone": "01 46 37 43 40", - "title": "PHARMACIE LAZIMI", - "zipcode": "92200" -}, { - "address": "82 RUE FAIDHERBE", - "category": "2", - "city": "MOUVAUX", - "id": 18423, - "lat": 50.7040449, - "lng": 3.1424048, - "phone": "03 20 36 03 60", - "title": "PHARMACIE GARNIER", - "zipcode": "59420" -}, { - "address": "83 AVENUE LEDRU ROLLIN", - "category": "2", - "city": "PARIS", - "id": 14591, - "lat": 48.8508528, - "lng": 2.3748777, - "phone": "01 43 47 31 30", - "title": "PHARMACIE HOMEOPATHIQUE LAHYAN", - "zipcode": "75012" -}, { - "address": "83 BOULEVARD LEON GAMBETTA", - "category": "2", - "city": "CALAIS", - "id": 18936, - "lat": 50.5165578, - "lng": 2.6902075, - "phone": "03 21 34 46 68", - "title": "PHARMACIE MESSIEN", - "zipcode": "62100" -}, { - "address": "84 AVENUE CHARLES DE GAULLE", - "category": "1", - "city": "SAVIGNY-SUR-ORGE", - "id": 19622, - "lat": 48.6807377, - "lng": 2.3429329, - "phone": "01 69 05 96 80", - "title": "PHARMACIE THAI", - "zipcode": "91600" -}, { - "address": "84 RUE DU MARECHAL LYAUTEY", - "category": "2", - "city": "LA ROCHE-SUR-YON", - "id": 18822, - "lat": 46.6604612, - "lng": -1.4314067, - "phone": "02 51 37 08 57", - "title": "PHARMACIE LIBERTE", - "zipcode": "85000" -}, { - "address": "84 RUE FRANCOIS DE TESSAN CENTRE COMMERCIAL", - "category": "2", - "city": "OZOIR-LA-FERRIERE", - "id": 16048, - "lat": 48.7582612, - "lng": 2.6998124, - "phone": "01 64 40 02 27", - "title": "PHARMACIE BELLE CROIX", - "zipcode": "77330" -}, { - "address": "84 RUE RENE BINET CENTRE COMMERCIAL CARREFOUR", - "category": "2", - "city": "SENS", - "id": 16543, - "lat": 48.1869344, - "lng": 3.3026874, - "phone": "03 86 65 07 92", - "title": "PHARMACIE CROQUET VICHERAT", - "zipcode": "89100" -}, { - "address": "845 ROUTE SALINELLES", - "category": "1", - "city": "SOMMIERES", - "id": 17055, - "lat": 43.7825887, - "lng": 4.0875267, - "phone": "04 66 77 70 65", - "title": "PHARMACIE DE LA PLACE DES AIRES", - "zipcode": "30250" -}, { - "address": "849 AVENUE DE LA REPUBLIQUE", - "category": "1", - "city": "LA ROQUETTE-SUR-SIAGNE", - "id": 19584, - "lat": 43.5803715, - "lng": 6.9474264, - "phone": "04 92 19 11 22", - "title": "PHARMACIE ST JEAN SELARL", - "zipcode": "6550" -}, { - "address": "85 AVENUE DU PONT JUVENAL", - "category": "1", - "city": "MONTPELLIER", - "id": 17682, - "lat": 43.605466, - "lng": 3.892035, - "phone": "04 67 65 65 00", - "title": "PHARMACIE DON BOSCO", - "zipcode": "34000" -}, { - "address": "85 Avenue de Chaponnay", - "category": "2", - "city": "CHAPONNAY", - "id": 14933, - "lat": 45.6496734, - "lng": 4.925319, - "phone": "04 72 70 26 20", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "69970" -}, { - "address": "85 BOULEVARD DE LA PLAGE", - "category": "2", - "city": "AGAY", - "id": 16751, - "lat": 43.432959, - "lng": 6.8576109, - "phone": "04 94 82 00 28", - "title": "PHARMACIE DE L ESTEREL", - "zipcode": "83530" -}, { - "address": "85 RUE ANNE DE BRETAGNE", - "category": "1", - "city": "GUIPAVAS", - "id": 18239, - "lat": 48.4351771, - "lng": -4.4044603, - "phone": "02 98 84 89 33", - "title": "PHARMACIE DU VIZAC.", - "zipcode": "29490" -}, { - "address": "85 RUE DE CONDE", - "category": "2", - "city": "LA FERTE-SOUS-JOUARRE", - "id": 16505, - "lat": 48.9440848, - "lng": 3.1290715, - "phone": "01 60 22 92 80", - "title": "PHARMACIE CONDE", - "zipcode": "77260" -}, { - "address": "85 RUE DE LA MARNE", - "category": "3", - "city": "SAINT-MALO", - "id": 18040, - "lat": 48.6300962, - "lng": -2.0061728, - "phone": "02 99 81 85 93", - "title": "PHARMACIE DU MOUCHOIR VERT", - "zipcode": "35400" -}, { - "address": "86 AVENUE EDOUARD MILLAUD", - "category": "2", - "city": "CRAPONNE", - "id": 19800, - "lat": 45.7475822, - "lng": 4.7232115, - "phone": "04 78 57 08 53", - "title": "PHARMACIE CENTRALE DE CRAPONNE", - "zipcode": "69290" -}, { - "address": "86 BD DE LA REPUBLIQUE", - "category": "1", - "city": "SAINT-CLOUD", - "id": 17526, - "lat": 48.8468657, - "lng": 2.2143932, - "phone": "01 46 02 40 95", - "title": "PHARMACIE DES HAUTS DE ST CLOUD", - "zipcode": "92210" -}, { - "address": "86 BOULEVARD SOULT", - "category": "2", - "city": "PARIS", - "id": 14804, - "lat": 48.8464825, - "lng": 2.4113271, - "phone": "01 43 43 13 68", - "title": "PHARMACIE PORTE DE VINCENNES", - "zipcode": "75012" -}, { - "address": "86 PLACE DE LA REPUBLIQUE", - "category": "1", - "city": "OSTRICOURT", - "id": 16193, - "lat": 50.4546448, - "lng": 3.0309327, - "phone": "03 27 89 81 02", - "title": "PHARMACIE BOYER", - "zipcode": "59162" -}, { - "address": "86 RUE FELIBIEN", - "category": "1", - "city": "NANTES", - "id": 18969, - "lat": 47.2208401, - "lng": -1.5698893, - "phone": "02 40 20 24 83", - "title": "PHARMACIE MONSELET", - "zipcode": "44000" -}, { - "address": "87 AVENUE CHARLES DE GAULLE CENTRE COMM GEANT CASINO", - "category": "1", - "city": "AURILLAC", - "id": 17210, - "lat": 44.9080953, - "lng": 2.4245406, - "phone": "04 71 63 54 26", - "title": "PHARMACIE DE L'EUROPE", - "zipcode": "15000" -}, { - "address": "87 BOULEVARD MALESHERBES", - "category": "1", - "city": "PARIS", - "id": 14609, - "lat": 48.8779023, - "lng": 2.3157291, - "phone": "01 45 22 18 74", - "title": "PHARMACIE MALESHERBES", - "zipcode": "75008" -}, { - "address": "87 RUE JEAN JAURES", - "category": "2", - "city": "NOISY-LE-SEC", - "id": 18345, - "lat": 48.8948574, - "lng": 2.4588244, - "phone": "01 48 44 66 82", - "title": "PHARMACIE FERRARI", - "zipcode": "93130" -}, { - "address": "88 BOULEVARD DE SEBASTOPOL", - "category": "2", - "city": "PARIS", - "id": 14787, - "lat": 48.8659166, - "lng": 2.3527444, - "phone": "01 42 77 57 57", - "title": "PHARMACIE CANONNE REAUMUR", - "zipcode": "75003" -}, { - "address": "88 RUE DE PARIS", - "category": "1", - "city": "LOUVRES", - "id": 18153, - "lat": 49.0459306, - "lng": 2.5103794, - "phone": "01 34 68 11 10", - "title": "PHARMACiE DU ROND POINT", - "zipcode": "95380" -}, { - "address": "89 RUE DU COMMERCE", - "category": "2", - "city": "PARIS", - "id": 14712, - "lat": 48.8442092, - "lng": 2.2936115, - "phone": "01 48 28 43 50", - "title": "GRANDE PHARMACIE DU COMMERCE", - "zipcode": "75015" -}, { - "address": "893 RUE NATIONALE", - "category": "3", - "city": "VILLEFRANCHE-SUR-SAONE", - "id": 16330, - "lat": 45.9873224, - "lng": 4.7185865, - "phone": "04 74 60 41 71", - "title": "PHARMACIE CENTRALE", - "zipcode": "69400" -}, { - "address": "9 11 RUE JEAN DE PONTHIEU", - "category": "1", - "city": "ABBEVILLE", - "id": 17706, - "lat": 50.1065658, - "lng": 1.832595, - "phone": "03 22 24 00 83", - "title": "PHARMACIE DU BEFFROI", - "zipcode": "80100" -}, { - "address": "9 AVENUE CHARLES DE GAULLE", - "category": "1", - "city": "LE PLESSIS-ROBINSON", - "id": 16839, - "lat": 48.7783415, - "lng": 2.2597727, - "phone": "01 46 30 13 06", - "title": "PHARMACIE DE LA CITE", - "zipcode": "92350" -}, { - "address": "9 AVENUE DE LA CADENELLE", - "category": "1", - "city": "MARSEILLE", - "id": 14635, - "lat": 43.2679025, - "lng": 5.3824628, - "phone": "04 91 71 70 59", - "title": "PHARMACIE PALACCI", - "zipcode": "13008" -}, { - "address": "9 AVENUE DE LA GRANDE ARMEE", - "category": "3", - "city": "PARIS", - "id": 14409, - "lat": 48.8743325, - "lng": 2.2919224, - "phone": "01 45 00 10 90", - "title": "PHARMACIE BODINIER IMANE", - "zipcode": "75016" -}, { - "address": "9 BD DE LA LIBERATION", - "category": "2", - "city": "CHATELAILLON-PLAGE", - "id": 16265, - "lat": 46.0744096, - "lng": -1.0903228, - "phone": "05 46 56 23 35", - "title": "PHARMACIE CAP ATLANTIQUE", - "zipcode": "17340" -}, { - "address": "9 PLACE AIME ET MARIE GEOFFROY", - "category": "1", - "city": "MORSANG-SUR-ORGE", - "id": 16953, - "lat": 48.6456051, - "lng": 2.3539879, - "phone": "01 60 15 15 73", - "title": "PHARMACIE DE LA GRIBELETTE", - "zipcode": "91390" -}, { - "address": "9 PLACE CHARLES DE GAULLE", - "category": "2", - "city": "POITIERS", - "id": 17986, - "lat": 46.5828423, - "lng": 0.344128, - "phone": "05 49 41 16 53", - "title": "PHARMACIE DU MARCHE", - "zipcode": "86000" -}, { - "address": "9 PLACE CHARLES MICHELS", - "category": "1", - "city": "PARIS", - "id": 14755, - "lat": 48.8468905, - "lng": 2.2862845, - "phone": "01 45 78 01 51", - "title": "PHARMACIE GOFFIN LEROUX", - "zipcode": "75015" -}, { - "address": "9 PLACE DE MEXICO", - "category": "2", - "city": "PARIS", - "id": 14647, - "lat": 48.8656157, - "lng": 2.2833141, - "phone": "01 47 27 92 28", - "title": "PHARMACIE PLACE DE MEXICO", - "zipcode": "75016" -}, { - "address": "9 PLACE DE VERDUN", - "category": "2", - "city": "GENAY", - "id": 16499, - "lat": 45.8979439, - "lng": 4.8413175, - "phone": "04 78 91 37 49", - "title": "PHARMACIE COMBES", - "zipcode": "69730" -}, { - "address": "9 PLACE DES ECHOPPES", - "category": "2", - "city": "BOUAYE", - "id": 18988, - "lat": 47.1435114, - "lng": -1.686459, - "phone": "02 40 65 40 61", - "title": "PHARMACIE MORVAN", - "zipcode": "44830" -}, { - "address": "9 PLACE DU MARCHE AU BLE", - "category": "1", - "city": "MANTES-LA-JOLIE", - "id": 18012, - "lat": 48.9907783, - "lng": 1.7172124, - "phone": "01 30 33 40 93", - "title": "PHARMACIE DU MARCHE AU BLE", - "zipcode": "78200" -}, { - "address": "9 PLACE REPUBLIQUE", - "category": "2", - "city": "SENS", - "id": 16826, - "lat": 48.1980353, - "lng": 3.2829784, - "phone": "03 86 65 13 75", - "title": "PHARMACIE DE LA CATHEDRALE", - "zipcode": "89100" -}, { - "address": "9 PLACE ROGER LEVANNEUR", - "category": "3", - "city": "MONTMORENCY", - "id": 19250, - "lat": 48.9885815, - "lng": 2.3182879, - "phone": "01 39 64 22 94", - "title": "PHARMACIE PRINCIPALE", - "zipcode": "95160" -}, { - "address": "9 QUAI CHARLES DE GAULLE", - "category": "1", - "city": "SANARY-SUR-MER", - "id": 15491, - "lat": 43.1181404, - "lng": 5.8021596, - "phone": "04 94 74 00 63", - "title": "GRANDE PHARMACIE DU PORT", - "zipcode": "83110" -}, { - "address": "9 QUAI SUFFREN", - "category": "3", - "city": "SAINT-TROPEZ", - "id": 17348, - "lat": 43.2717836, - "lng": 6.6392393, - "phone": "04 94 97 00 06", - "title": "PHARMACIE DEGRELLE DUBUC", - "zipcode": "83990" -}, { - "address": "9 RUE DE LA REPUBLIQUE", - "category": "3", - "city": "SAINT-REMY-LES-CHEVREUSE", - "id": 17314, - "lat": 48.7054442, - "lng": 2.0710946, - "phone": "01 30 52 00 28", - "title": "PHARMACIE DE SAINT REMY", - "zipcode": "78470" -}, { - "address": "9 RUE DES ARCHIVES", - "category": "2", - "city": "PARIS", - "id": 14608, - "lat": 48.8577404, - "lng": 2.3543004, - "phone": "01 42 78 53 58", - "title": "PHARMACIE MAIRIE DE PARIS", - "zipcode": "75004" -}, { - "address": "9 RUE DU 14 JUILLET", - "category": "1", - "city": "BELLEVILLE", - "id": 15992, - "lat": 46.106781, - "lng": 4.7386356, - "phone": "04 74 66 08 28", - "title": "PHARMACIE BANDEL BARDONNET", - "zipcode": "69220" -}, { - "address": "9 RUE DU 4 SEPTEMBRE", - "category": "2", - "city": "FOURCHAMBAULT", - "id": 16882, - "lat": 47.0232571, - "lng": 3.0828742, - "phone": "03 86 58 88 18", - "title": "PHARMACIE DE LA FONDERIE", - "zipcode": "58600" -}, { - "address": "9 RUE DU DOCTEUR BAZELAIRE", - "category": "2", - "city": "REIMS", - "id": 19901, - "lat": 49.2907255, - "lng": 4.0259653, - "phone": "03 26 79 89 40", - "title": "SERVICES ET SANTE", - "zipcode": "51100" -}, { - "address": "9 RUE DU GENERAL LECLERC", - "category": "2", - "city": "TOURCOING", - "id": 16787, - "lat": 50.7230146, - "lng": 3.1598637, - "phone": "03 20 01 00 10", - "title": "PHARMACIE DE L HOTEL VILLE", - "zipcode": "59200" -}, { - "address": "9 RUE GAMBETTA", - "category": "2", - "city": "SAINT-TROPEZ", - "id": 16172, - "lat": 43.2719661, - "lng": 6.640093, - "phone": "04 94 97 13 57", - "title": "PHARMACIE BOURDELEIX SERRAILLE", - "zipcode": "83990" -}, { - "address": "9 RUE GREFFULHE", - "category": "1", - "city": "LEVALLOIS-PERRET", - "id": 16446, - "lat": 48.8940103, - "lng": 2.2765274, - "phone": "01 47 58 75 81", - "title": "PHARMACIE CHATEAU VILLIERS", - "zipcode": "92300" -}, { - "address": "9 RUE JEAN JAURES", - "category": "1", - "city": "COGOLIN", - "id": 19543, - "lat": 43.2515261, - "lng": 6.5340677, - "phone": "04 94 54 64 49", - "title": "PHARMACIE SENEQUIER", - "zipcode": "83310" -}, { - "address": "9 RUE NOEL BALLAY", - "category": "3", - "city": "CHARTRES", - "id": 15575, - "lat": 48.4453917, - "lng": 1.4863307, - "phone": "02 37 36 93 04", - "title": "PARA ACTI SANTE", - "zipcode": "28000" -}, { - "address": "9 RUE SAINT SAUVEUR", - "category": "2", - "city": "LILLE", - "id": 19170, - "lat": 50.6327971, - "lng": 3.0709594, - "phone": "03 20 52 74 80", - "title": "PHARMACIE PIN ET SANTERNE", - "zipcode": "59000" -}, { - "address": "9 SQUARE MERIMEE", - "category": "1", - "city": "CANNES", - "id": 17746, - "lat": 43.5518399, - "lng": 7.017483, - "phone": "04 93 39 25 48", - "title": "PHARMACIE DU CASINO", - "zipcode": "6400" -}, { - "address": "9 TER RUE MAURICE BERTEAUX", - "category": "1", - "city": "SUCY-EN-BRIE", - "id": 17859, - "lat": 48.7717015, - "lng": 2.5193337, - "phone": "01 45 90 28 32", - "title": "PHARMACIE DU CLOS DE PACY", - "zipcode": "94370" -}, { - "address": "9/11 RUE ROBERT DE FLERS", - "category": "1", - "city": "PARIS", - "id": 14379, - "lat": 48.850013, - "lng": 2.2847075, - "phone": "01 56 77 12 51", - "title": "PHARM' A 6", - "zipcode": "75015" -}, { - "address": "90 AVENUE DE SAINT OUEN", - "category": "3", - "city": "PARIS", - "id": 14583, - "lat": 48.8932845, - "lng": 2.3277015, - "phone": "01 46 27 47 25", - "title": "PHARMACIE GEORGEL RENOUL SELARL", - "zipcode": "75018" -}, { - "address": "90 AVENUE DU BAC", - "category": "1", - "city": "LA VARENNE ST HILAIRE", - "id": 15982, - "lat": 48.7931309, - "lng": 2.5148032, - "phone": "01 48 83 10 34", - "title": "PHARMACIE BAC 90", - "zipcode": "94210" -}, { - "address": "90 RUE DES MARTYRS", - "category": "1", - "city": "PARIS", - "id": 14489, - "lat": 48.8837196, - "lng": 2.3398977, - "phone": "01 46 06 02 51", - "title": "PHARMACIE DE LA PROVIDENCE", - "zipcode": "75018" -}, { - "address": "90 RUE PIERRE LEGRAND", - "category": "1", - "city": "LILLE", - "id": 18598, - "lat": 50.6321472, - "lng": 3.0879344, - "phone": "03 20 56 72 55", - "title": "PHARMACIE JANQUIN PARCINSKI", - "zipcode": "59000" -}, { - "address": "90 RUE THIERS", - "category": "2", - "city": "BERNAY", - "id": 19489, - "lat": 49.0911432, - "lng": 0.5988296, - "phone": "02 32 43 03 60", - "title": "PHARMACIE SAINTE CROIX", - "zipcode": "27300" -}, { - "address": "9007 RUE PRESIDENT KENNEDY", - "category": "3", - "city": "BIHOREL", - "id": 18652, - "lat": 49.460005, - "lng": 1.128455, - "phone": "02 35 59 98 50", - "title": "PHARMACIE KENNEDY", - "zipcode": "76420" -}, { - "address": "904 AV EMILE ZOLA", - "category": "2", - "city": "DAMMARIE-LES-LYS", - "id": 18833, - "lat": 48.5151835, - "lng": 2.6408086, - "phone": "01 64 37 36 07", - "title": "PHARMACIE LOMBARDI", - "zipcode": "77190" -}, { - "address": "9051 AVENUE CHARLES DE GAULLE", - "category": "1", - "city": "ORANGE", - "id": 16414, - "lat": 44.1364433, - "lng": 4.8003265, - "phone": "04 90 34 02 82", - "title": "PHARMACIE CHABBAL-NGUYEN", - "zipcode": "84100" -}, { - "address": "91 BOULEVARD BEAUMARCHAIS", - "category": "2", - "city": "PARIS", - "id": 14403, - "lat": 48.8593718, - "lng": 2.3672784, - "phone": "01 42 78 62 99", - "title": "PHARMACIE BEAUMARCHAIS", - "zipcode": "75003" -}, { - "address": "91 RUE DE BOURGOGNE", - "category": "3", - "city": "VIENNE", - "id": 15521, - "lat": 45.5246975, - "lng": 4.8727042, - "phone": "04 74 53 11 98", - "title": "GRANDE PHIE SAINT MAURICE", - "zipcode": "38200" -}, { - "address": "91 RUE REAUMUR", - "category": "3", - "city": "PARIS", - "id": 14370, - "lat": 48.8673113, - "lng": 2.3467045, - "phone": "01 42 36 73 11", - "title": "PARA BEAUTY SENTIER", - "zipcode": "75002" -}, { - "address": "9176 Rue Amiral Romain Desfosses", - "category": "2", - "city": "BREST", - "id": 14944, - "lat": 48.4267803, - "lng": -4.4762767, - "phone": "02 98 41 20 20", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "29200" -}, { - "address": "92 GRANDE RUE", - "category": "2", - "city": "OULLINS", - "id": 15980, - "lat": 45.7156669, - "lng": 4.8087576, - "phone": "04 78 51 31 66", - "title": "PHARMACIE AZOULAI", - "zipcode": "69600" -}, { - "address": "92 RUE ARISTIDE BRIAND", - "category": "2", - "city": "LEVALLOIS-PERRET", - "id": 19049, - "lat": 48.8933284, - "lng": 2.2906624, - "phone": "01 47 37 13 84", - "title": "PHARMACIE NOUVELLE", - "zipcode": "92300" -}, { - "address": "926 BOULEVARD BURDEAU", - "category": "2", - "city": "VILLEFRANCHE-SUR-SAONE", - "id": 17904, - "lat": 45.9971855, - "lng": 4.7310437, - "phone": "04 74 68 19 28", - "title": "PHARMACIE DU GARET", - "zipcode": "69400" -}, { - "address": "93 BOULEVARD DE LA REPUBLIQUE", - "category": "1", - "city": "VAUCRESSON", - "id": 18786, - "lat": 48.8370424, - "lng": 2.1543285, - "phone": "01 47 41 11 20", - "title": "PHARMACIE LEIBA", - "zipcode": "92420" -}, { - "address": "93 ROUTE DE GENCAY CENTRE COMMERCIAL LECLERC", - "category": "2", - "city": "POITIERS", - "id": 18464, - "lat": 46.5663669, - "lng": 0.3586795, - "phone": "08 25 95 00 86", - "title": "PHARMACIE GODARD", - "zipcode": "86000" -}, { - "address": "93 RUE AUDRY DE PUYRAVAULT", - "category": "1", - "city": "SURGERES", - "id": 17984, - "lat": 46.1067901, - "lng": -0.7509325, - "phone": "05 46 07 01 05", - "title": "PHARMACIE DU MARCHE", - "zipcode": "17700" -}, { - "address": "94 AVENUE ANDRE ZENATTI", - "category": "3", - "city": "MARSEILLE", - "id": 14821, - "lat": 43.2455894, - "lng": 5.3903969, - "phone": "04 91 73 33 72", - "title": "PHARMACIE PARC BONEVEINE ZENATTI", - "zipcode": "13008" -}, { - "address": "94 BOULEVARD LEFEBVRE", - "category": "2", - "city": "PARIS", - "id": 14685, - "lat": 48.8281013, - "lng": 2.3007376, - "phone": "01 48 28 32 55", - "title": "PHARMACIE TREIGNIER PORTE BRIANCON", - "zipcode": "75015" -}, { - "address": "94 RUE CARNOT", - "category": "1", - "city": "HAGETMAU", - "id": 16386, - "lat": 43.6543996, - "lng": -0.5927618, - "phone": "05 58 79 30 43", - "title": "PHARMACIE CENTRALE D HAGETMAU", - "zipcode": "40700" -}, { - "address": "94 RUE DE LA LIBERTE", - "category": "2", - "city": "MACON", - "id": 15455, - "lat": 46.3208355, - "lng": 4.8163422, - "phone": "03 85 20 57 85", - "title": "GRANDE PHARMACIE DE FLACE", - "zipcode": "71000" -}, { - "address": "94 RUE DES DEPORTES", - "category": "1", - "city": "CRESPIN", - "id": 19110, - "lat": 50.4066423, - "lng": 3.6654165, - "phone": "03 27 45 41 73", - "title": "PHARMACIE PAUWELS", - "zipcode": "59154" -}, { - "address": "94 RUE MARIUS LACROIX", - "category": "1", - "city": "LA ROCHELLE", - "id": 18979, - "lat": 46.1738648, - "lng": -1.1453336, - "phone": "05 46 34 95 49", - "title": "PHARMACIE MOREAU FAVREAU", - "zipcode": "17000" -}, { - "address": "948 AVENUE DE LA PLAGE", - "category": "1", - "city": "FORT-MAHON-PLAGE", - "id": 17685, - "lat": 50.3395143, - "lng": 1.5574993, - "phone": "03 22 23 34 34", - "title": "PHARMACIE DOREMUS", - "zipcode": "80120" -}, { - "address": "95 AVENUE LOUIS COUDANT", - "category": "1", - "city": "CERCY-LA-TOUR", - "id": 15988, - "lat": 46.8579545, - "lng": 3.6484953, - "phone": "03 86 50 51 04", - "title": "PHARMACIE BAL-LECOINTE", - "zipcode": "58340" -}, { - "address": "95 RUE DE LA CONVENTION", - "category": "1", - "city": "PARIS", - "id": 14554, - "lat": 48.8419105, - "lng": 2.2865872, - "phone": "01 45 54 29 19", - "title": "PHARMACIE DU NOUVEAU BOUCICAUT", - "zipcode": "75015" -}, { - "address": "95 RUE DES FUSILLES", - "category": "1", - "city": "HARNES", - "id": 17711, - "lat": 50.4456132, - "lng": 2.9087939, - "phone": "03 21 20 01 07", - "title": "PHARMACIE DU BIEN ETRE", - "zipcode": "62440" -}, { - "address": "95/97 RUE DE LA REPUBLIQUE", - "category": "2", - "city": "LA FERE", - "id": 17344, - "lat": 49.6603126, - "lng": 3.3705283, - "phone": "03 23 56 23 12", - "title": "PHARMACIE DECOTTE", - "zipcode": "2800" -}, { - "address": "95/97 RUE DE LA REPUBLIQUE", - "category": "2", - "city": "LA FERE", - "id": 17344, - "lat": 49.6603126, - "lng": 3.3705283, - "phone": "03 23 56 23 12", - "title": "PHARMACIE DECOTTE", - "zipcode": "2800" -}, { - "address": "96 AVENUE DE CLICHY", - "category": "2", - "city": "PARIS", - "id": 14789, - "lat": 48.8890901, - "lng": 2.3230483, - "phone": "01 46 27 90 91", - "title": "PHARMACIE CLICHY LEGENDRE", - "zipcode": "75017" -}, { - "address": "96 BOULEVARD BERTHIER", - "category": "3", - "city": "PARIS", - "id": 14708, - "lat": 48.890048, - "lng": 2.3034281, - "phone": "01 47 64 94 12", - "title": "PHARMACIE DE LA PORTE D ASNIERES", - "zipcode": "75017" -}, { - "address": "96 BOULEVARD DAVOUT", - "category": "2", - "city": "PARIS", - "id": 14627, - "lat": 48.8572628, - "lng": 2.4102661, - "phone": "01 43 71 07 43", - "title": "PHARMACIE NADJAR", - "zipcode": "75020" -}, { - "address": "96 RUE MONGE", - "category": "1", - "city": "PARIS", - "id": 14699, - "lat": 48.8407602, - "lng": 2.3514731, - "phone": "01 43 31 72 90", - "title": "PHARMACIE LAXAN GUENON DES MESNARDS", - "zipcode": "75005" -}, { - "address": "96 RUE PHILIPPE DE GIRARD", - "category": "2", - "city": "PARIS", - "id": 14613, - "lat": 48.8898335, - "lng": 2.3604934, - "phone": "01 46 07 31 57", - "title": "PHARMACIE MARX DORMOY", - "zipcode": "75018" -}, { - "address": "97 AV D AUNIS", - "category": "1", - "city": "ROCHEFORT", - "id": 17727, - "lat": 45.9565259, - "lng": -0.9766931, - "phone": "05 46 99 04 64", - "title": "PHARMACIE DU BRILLOUET", - "zipcode": "17300" -}, { - "address": "97 ROUTE NATIONALE", - "category": "2", - "city": "GONDECOURT", - "id": 19591, - "lat": 50.541599, - "lng": 2.9830879, - "phone": "03 20 90 69 98", - "title": "PHARMACIE STATIUS", - "zipcode": "59147" -}, { - "address": "97 RUE NATIONALE", - "category": "1", - "city": "PONTIVY", - "id": 19017, - "lat": 48.0636992, - "lng": -2.9663936, - "phone": "02 97 25 00 84", - "title": "PHARMACIE NAPOLEONVILLE", - "zipcode": "56300" -}, { - "address": "98 AVENUE DU GENERAL DE GAULLE", - "category": "2", - "city": "SAINT-MANDE", - "id": 18306, - "lat": 48.8379513, - "lng": 2.4173632, - "phone": "01 43 28 45 68", - "title": "PHARMACIE ESPACE PHARMA", - "zipcode": "94160" -}, { - "address": "98 RUE JOLIOT CURIE", - "category": "1", - "city": "SAINT-JOACHIM", - "id": 17610, - "lat": 47.3832793, - "lng": -2.2004979, - "phone": "02 40 88 53 11", - "title": "PHARMACIE DES ROSEAUX", - "zipcode": "44720" -}, { - "address": "99 RUE GENERAL DE GAULLE", - "category": "1", - "city": "POISSY", - "id": 15467, - "lat": 48.9289471, - "lng": 2.0437442, - "phone": "01 39 65 03 68", - "title": "GRANDE PHARMACIE DE POISSY", - "zipcode": "78300" -}, { - "address": "9BIS RUE COMMANDANT FOUCAUD", - "category": "1", - "city": "BARBEZIEUX-SAINT-HILAIRE", - "id": 15675, - "lat": 45.4706085, - "lng": -0.1600534, - "phone": "05 45 78 09 55", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "16300" -}, { - "address": "ADS PICARDIE PAE DU HAUT VILLE RUE HIPPOLYTE BAYARD", - "category": "2", - "city": "BEAUVAIS", - "id": 15531, - "lat": 49.4349104, - "lng": 2.1252751, - "phone": "01 49 87 26 95", - "title": "L COMMERCE", - "zipcode": "60000" -}, { - "address": "ADS PICARDIE PAE DU HAUT VILLE RUE HIPPOLYTE BAYARD", - "category": "2", - "city": "BEAUVAIS", - "id": 15531, - "lat": 49.4349104, - "lng": 2.1252751, - "phone": "01 49 87 26 95", - "title": "L COMMERCE", - "zipcode": "60000" -}, { - "address": "AEROGARE SUD BP A 190", - "category": "3", - "city": "ORLY AEROGARE", - "id": 15142, - "lat": 48.745193, - "lng": 2.401373, - "phone": "01 49 75 74 70", - "title": "PHARMACIE ORLY SUD", - "zipcode": "94542" -}, { - "address": "ALLEE DE FLANERIE", - "category": "1", - "city": "AGDE", - "id": 18031, - "lat": 43.283492, - "lng": 3.517748, - "phone": "04 67 21 98 62", - "title": "PHARMACIE DU MOLE", - "zipcode": "34300" -}, { - "address": "ALLEE JACQUES BREL RESIDENCE PRADO DEL SOL", - "category": "1", - "city": "PEROLS", - "id": 18497, - "lat": 43.5620223, - "lng": 3.9520984, - "phone": "04 67 50 03 09", - "title": "PHARMACIE GRUCHET", - "zipcode": "34470" -}, { - "address": "ALLEE MORVAN LEBESQUE CTRE COMMERCIAL DES LONGS CHAM", - "category": "1", - "city": "RENNES", - "id": 17547, - "lat": 48.1307681, - "lng": -1.6329258, - "phone": "02 99 38 41 50", - "title": "PHARMACIE DES LONGS CHAMPS", - "zipcode": "35700" -}, { - "address": "ALLEE SAINT MICHEL RESIDENCE SAINT MICHEL", - "category": "2", - "city": "ARRAS", - "id": 16512, - "lat": 50.292165, - "lng": 2.7831621, - "phone": "03 21 55 74 07", - "title": "PHARMACIE CORNOLLE", - "zipcode": "62000" -}, { - "address": "ALLEE VIVALDI ", - "category": "3", - "city": "VAL-DE-REUIL", - "id": 14974, - "lat": 49.2705737, - "lng": 1.2094235, - "phone": "02 32 61 13 45", - "title": "PHARMACIE BAHU", - "zipcode": "27100" -}, { - "address": "ANCIENNE ROUTE DE SAINT PAUL CENTRE COMMERCIAL LECLERC", - "category": "2", - "city": "BOLLENE", - "id": 16733, - "lat": 44.3207664, - "lng": 4.7448814, - "phone": "04 90 40 09 20", - "title": "PHARMACIE DE L ECLUSE", - "zipcode": "84500" -}, { - "address": "AUCHAN ANGOULEME SECTEUR PGC 16400 LACOURONN ROUTE DE BORDEAUX", - "category": "2", - "city": "LA COURONNE", - "id": 15205, - "lat": 45.6175032, - "lng": 0.1006047, - "phone": "05 45 24 45 24", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "16400" -}, { - "address": "AUCHAN BAGNOLET SECTEUR PGC 26 AVENUE DU GENERAL DE GAULLE F 67554", - "category": "2", - "city": "BAGNOLET", - "id": 15211, - "lat": 48.8656117, - "lng": 2.4161756, - "phone": "01 49 72 62 19", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "93170" -}, { - "address": "AUCHAN BEAUVAIS SECTEUR PGC 1 AVENUE DESCARTES", - "category": "2", - "city": "BEAUVAIS", - "id": 15218, - "lat": 49.4100505, - "lng": 2.1137226, - "phone": "03 44 02 85 00", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "60000" -}, { - "address": "AUCHAN BETHUNE SECTEUR PGC CC DE LA ROTONDE RUE DU DOCTEUR DHENIN", - "category": "2", - "city": "BETHUNE", - "id": 15204, - "lat": 50.5225844, - "lng": 2.628001, - "phone": "03 21 61 71 19", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "62400" -}, { - "address": "AUCHAN CAMBRAI SECTEUR PGC 2 RUE JEAN JAURES", - "category": "3", - "city": "ESCAUDOEUVRES", - "id": 15198, - "lat": 50.1841334, - "lng": 3.253239, - "phone": "03 27 72 51 46", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "59161" -}, { - "address": "AUCHAN DURY SECTEUR PGC ROUTE DE PARIS", - "category": "1", - "city": "AMIENS", - "id": 15183, - "lat": 49.862975, - "lng": 2.277067, - "phone": "03 22 33 53 61", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "80000" -}, { - "address": "AUCHAN DURY SECTEUR PGC ROUTE DE PARIS", - "category": "2", - "city": "AMIENS", - "id": 15183, - "lat": 49.862975, - "lng": 2.277067, - "phone": "03 22 33 53 61", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "80000" -}, { - "address": "AUCHAN LA DEFENSE SECTEUR PGC CENTE CIAL LES 4 TEMPS ", - "category": "1", - "city": "PARIS LA DEFENSE", - "id": 15119, - "lat": 48.8907576, - "lng": 2.2379609, - "phone": "01 41 02 30 30", - "title": "AUCHAN ESPACE SANTE BEAUTE MAG 31", - "zipcode": "92092" -}, { - "address": "AUCHAN LA SEYNE SUR MER SECTEUR PGC QUARTIER LERY RN 63", - "category": "2", - "city": "LA SEYNE-SUR-MER", - "id": 15188, - "lat": 43.1110484, - "lng": 5.85832, - "phone": "04 94 10 39 39", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "83500" -}, { - "address": "AUCHAN MACON SECTEUR PGC 224 AVENUE CHARLES GAULLE", - "category": "3", - "city": "MACON", - "id": 15191, - "lat": 46.3261559, - "lng": 4.8370633, - "phone": "03 85 21 75 75", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "71000" -}, { - "address": "AUCHAN NOYELLES GODAULT SECTEUR PGC ROUTE NATIONALE 43", - "category": "2", - "city": "NOYELLES-GODAULT", - "id": 15112, - "lat": 50.4126473, - "lng": 2.9767639, - "phone": "03 21 69 83 65", - "title": "AUCHAN ESPACE SANTE BEAUTE MAG 7", - "zipcode": "62950" -}, { - "address": "AUCHAN OLIVET SECTEUR PGC AVENUE DE VERDUN", - "category": "3", - "city": "OLIVET", - "id": 15193, - "lat": 47.8670197, - "lng": 1.90877, - "phone": "02 38 69 51 87", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "45160" -}, { - "address": "AUCHAN PETITE FORET CC AUSHOPPING RN 45", - "category": "2", - "city": "PETITE-FORET", - "id": 14861, - "lat": 50.3760837, - "lng": 3.4784326, - "phone": "03 27 28 14 05", - "title": "AUCHAN ESPACE SANTE BEAUTE ", - "zipcode": "59494" -}, { - "address": "AUCHAN POITIERS SUD SECTEUR PGC 250 AV DU 8 MAI 1945", - "category": "2", - "city": "POITIERS", - "id": 15189, - "lat": 46.5518921, - "lng": 0.2995116, - "phone": "05 49 53 72 47", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "86000" -}, { - "address": "AUCHAN ST QUENTIN SECTEUR PGC ROUTE D AMIENS RN.44", - "category": "1", - "city": "FAYET", - "id": 15184, - "lat": 49.8605123, - "lng": 3.2500929, - "phone": "03 23 67 84 00", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "2100" -}, { - "address": "AUCHAN VELIZY SECTEUR PGC 2 AVENUE DE L EUROPE CENTRE COMMERCIAL AUCHAN", - "category": "2", - "city": "VELIZY-VILLACOUBLAY", - "id": 15207, - "lat": 48.781329, - "lng": 2.2198866, - "phone": "01 34 58 42 19", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "78140" -}, { - "address": "AUCHAN VILLARS SECTEUR PGC CHEMIN DE MONTRAVEL", - "category": "2", - "city": "VILLARS", - "id": 15206, - "lat": 45.475268, - "lng": 4.350688, - "phone": "04 77 79 44 19", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "42390" -}, { - "address": "AV DES 40 JOURNAUX CCIAL LE LAC", - "category": "1", - "city": "BORDEAUX", - "id": 16626, - "lat": 44.8821907, - "lng": -0.5670112, - "phone": "05 56 39 39 44", - "title": "PHARMACIE DE BORDEAUX LAC", - "zipcode": "33300" -}, { - "address": "AV DU GENDARME CASTERMANT CC CHELLES 2", - "category": "3", - "city": "CHELLES", - "id": 15304, - "lat": 48.877577, - "lng": 2.613803, - "phone": "01 64 72 67 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "77490" -}, { - "address": "AV DU GENERAL DE GAULLE", - "category": "1", - "city": "MARIGNANE", - "id": 19565, - "lat": 43.4137536, - "lng": 5.2046172, - "phone": "04 42 88 33 50", - "title": "PHARMACIE SNC MARCHI REBOUD", - "zipcode": "13700" -}, { - "address": "AV DU PIC SAINT LOUP", - "category": "2", - "city": "SAINT-GELY-DU-FESC", - "id": 19121, - "lat": 43.693735, - "lng": 3.8068965, - "phone": "04 67 66 76 66", - "title": "PHARMACIE PENERANDA", - "zipcode": "34980" -}, { - "address": "AV GEOFFROY SAINT HILAIRE CENTRE COMMERCIAL CASINO", - "category": "1", - "city": "HYERES", - "id": 17531, - "lat": 43.107426, - "lng": 6.127693, - "phone": "04 94 38 88 20", - "title": "PHARMACIE DES ILES", - "zipcode": "83400" -}, { - "address": "AV JEAN LEON LAPORTE C.COM BAB2", - "category": "2", - "city": "ANGLET", - "id": 19832, - "lat": 43.487942, - "lng": -1.498619, - "phone": "05 59 63 15 44", - "title": "PHARMACIE DE LONGUEVAL ANDREWSKI", - "zipcode": "64600" -}, { - "address": "AVENUE DU GEN DE GAULLE CC CRETEIL SOLEIL", - "category": "3", - "city": "CRETEIL", - "id": 15253, - "lat": 48.7796944, - "lng": 2.4562168, - "phone": "01 45 13 48 19", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "94000" -}, { - "address": "AVENUE ALEXANDER FLEMING", - "category": "2", - "city": "OLORON-SAINTE-MARIE", - "id": 18967, - "lat": 43.1972288, - "lng": -0.617767, - "phone": "05 59 39 02 07", - "title": "PHARMACIE MONGER", - "zipcode": "64400" -}, { - "address": "AVENUE ALPHONSE DAUDET GALERIE INTERMARCHE LA GARAUD", - "category": "2", - "city": "BAGNOLS-SUR-CEZE", - "id": 18628, - "lat": 44.1510193, - "lng": 4.6124485, - "phone": "04 66 89 79 74", - "title": "PHARMACIE JOUCLA BLANC CLOUSCA", - "zipcode": "30200" -}, { - "address": "AVENUE CHARLES DE GAULLE RES ROTONDE DU MAIL BATIMENT 4", - "category": "1", - "city": "PLAN-DE-CUQUES", - "id": 17137, - "lat": 43.344286, - "lng": 5.464982, - "phone": "04 91 05 08 04", - "title": "PHARMACIE DE LA ROTONDE", - "zipcode": "13380" -}, { - "address": "AVENUE CHARLES DE GAULLE", - "category": "2", - "city": "ROISSY CHARLES DE GAULLE", - "id": 15157, - "lat": 48.9967393, - "lng": 2.5042598, - "phone": "01 48 62 24 10", - "title": "PHARMACIE ROISSY 1", - "zipcode": "95700" -}, { - "address": "AVENUE CLEMENT MILLE CENTRE COMMERCIAL CARREFOUR", - "category": "2", - "city": "PORT-DE-BOUC", - "id": 19434, - "lat": 43.416804, - "lng": 5.00167, - "phone": "04 42 06 32 21", - "title": "PHARMACIE SAINT JEAN", - "zipcode": "13110" -}, { - "address": "AVENUE DE BEAUNE", - "category": "2", - "city": "LIMOGES", - "id": 16609, - "lat": 45.91284, - "lng": 1.3019321, - "phone": "05 55 36 80 19", - "title": "PHARMACIE DE BEAUNE", - "zipcode": "87000" -}, { - "address": "AVENUE DE L ALLIER", - "category": "2", - "city": "PERIGNAT-SUR-ALLIER", - "id": 18873, - "lat": 45.7293765, - "lng": 3.2317381, - "phone": "04 73 69 58 46", - "title": "PHARMACIE MANRY", - "zipcode": "63800" -}, { - "address": "AVENUE DE L AQUITAINE", - "category": "1", - "city": "SAINTE-EULALIE", - "id": 15668, - "lat": 44.9049578, - "lng": -0.4883392, - "phone": "05 56 77 35 35", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "33560" -}, { - "address": "AVENUE DE L EUROPE", - "category": "2", - "city": "LE PASSAGE", - "id": 18106, - "lat": 44.196321, - "lng": 0.6008385, - "phone": "05 53 96 71 19", - "title": "PHARMACIE DU PONT DE PIERRE", - "zipcode": "47520" -}, { - "address": "AVENUE DE L'UNIVERSITE CC GRAND VAR", - "category": "2", - "city": "LA VALETTE-DU-VAR", - "id": 15286, - "lat": 43.1409677, - "lng": 6.0162961, - "phone": "04 94 14 63 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "83160" -}, { - "address": "AVENUE DE LA FLAUDAIE CTRE COMMERCIAL DE LA MADELEIN", - "category": "1", - "city": "SAINT-MALO", - "id": 18681, - "lat": 48.624431, - "lng": -1.993486, - "phone": "02 99 81 95 30", - "title": "PHARMACIE LA MADELEINE", - "zipcode": "35400" -}, { - "address": "AVENUE DE LA LIBERATION", - "category": "1", - "city": "ARLES", - "id": 15644, - "lat": 43.7036822, - "lng": 4.6409122, - "phone": "04 90 93 43 27", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "13200" -}, { - "address": "AVENUE DE LA LIBERATION", - "category": "1", - "city": "BRETENOUX", - "id": 16575, - "lat": 44.9130026, - "lng": 1.841395, - "phone": "05 65 38 40 09", - "title": "PHARMACIE D ORLINDE", - "zipcode": "46130" -}, { - "address": "AVENUE DE LA MEDITERRANNEE CENTRE COMMERCIAL 2000", - "category": "1", - "city": "MARSEILLAN", - "id": 17063, - "lat": 43.3159075, - "lng": 3.5497043, - "phone": "04 67 21 96 31", - "title": "PHARMACIE DE LA PLAGE", - "zipcode": "34340" -}, { - "address": "AVENUE DE LA REPUBLIQUE CENTRE COMMERCIAL MATCH", - "category": "2", - "city": "SECLIN", - "id": 17121, - "lat": 50.5564823, - "lng": 3.0349295, - "phone": "03 28 63 89 28", - "title": "PHARMACIE DE LA REPUBLIQUE", - "zipcode": "59113" -}, { - "address": "AVENUE DE LA REPUBLIQUE", - "category": "2", - "city": "PORT-DES-BARQUES", - "id": 16071, - "lat": 45.948735, - "lng": -1.075947, - "phone": "05 46 84 80 23", - "title": "PHARMACIE BERNIER", - "zipcode": "17730" -}, { - "address": "AVENUE DE LA REPUBLIQUE", - "category": "3", - "city": "NOYELLES-GODAULT", - "id": 15000, - "lat": 50.4140745, - "lng": 2.9863092, - "phone": "03 21 20 31 16", - "title": "PHARMACIE COINT MELLICK", - "zipcode": "62950" -}, { - "address": "AVENUE DE LASSEUBE", - "category": "3", - "city": "OLORON-SAINTE-MARIE", - "id": 18824, - "lat": 43.1956569, - "lng": -0.5997396, - "phone": "05 59 39 20 72", - "title": "PHARMACIE LIENARD ROGER", - "zipcode": "64400" -}, { - "address": "AVENUE DE SAINT JEAN", - "category": "2", - "city": "LA CIOTAT", - "id": 17307, - "lat": 43.1887046, - "lng": 5.6305173, - "phone": "04 42 83 13 18", - "title": "PHARMACIE DE SAINT JEAN", - "zipcode": "13600" -}, { - "address": "AVENUE DES CANADIENS CENTRE COMMERCIAL DU BELVEDERE", - "category": "1", - "city": "DIEPPE", - "id": 17709, - "lat": 49.9090197, - "lng": 1.0780232, - "phone": "02 35 84 37 82", - "title": "PHARMACIE DU BELVEDERE", - "zipcode": "76200" -}, { - "address": "AVENUE DES CHAMPS ", - "category": "1", - "city": "NANDY", - "id": 15041, - "lat": 48.587668, - "lng": 2.5727352, - "phone": "01 64 41 11 96", - "title": "PHARMACIE DES TOURNESOLS", - "zipcode": "77176" -}, { - "address": "AVENUE DES CHAMPS CENTRE COMMERCIAL INTERMARCHE", - "category": "2", - "city": "NANDY", - "id": 15107, - "lat": 48.588557, - "lng": 2.5741123, - "phone": "01 64 41 11 96", - "title": "SELARL PHARMACIE DES TOURNESOLS", - "zipcode": "77176" -}, { - "address": "AVENUE DES CHAUVIERES CTRE COM LECLERC", - "category": "1", - "city": "LES HERBIERS", - "id": 18352, - "lat": 46.8569914, - "lng": -1.0141984, - "phone": "02 51 66 85 00", - "title": "PHARMACIE FILLOUX SANTE", - "zipcode": "85500" -}, { - "address": "AVENUE DES FONTAINES", - "category": "1", - "city": "SAINT-DENIS-DE-L'HOTEL", - "id": 15037, - "lat": 47.8715197, - "lng": 2.1264602, - "phone": "02 38 59 04 78", - "title": "PHARMACIE DES FONTAINES", - "zipcode": "45550" -}, { - "address": "AVENUE DES FRAIS FONDS", - "category": "3", - "city": "LONGUENESSE", - "id": 16806, - "lat": 50.7365324, - "lng": 2.2737376, - "phone": "03 21 38 35 56", - "title": "PHARMACIE DE LA AA", - "zipcode": "62219" -}, { - "address": "AVENUE DU 8 MAI 1945 ", - "category": "1", - "city": "BERNAY", - "id": 14970, - "lat": 49.0854642, - "lng": 0.6001655, - "phone": "02 32 45 85 36", - "title": "PHARMACIE DE LA COUTURE", - "zipcode": "27300" -}, { - "address": "AVENUE DU BAULOIS CCIAL INTERMARCHE", - "category": "2", - "city": "PORNICHET", - "id": 16807, - "lat": 47.266182, - "lng": -2.333929, - "phone": "02 40 61 10 90", - "title": "PHARMACIE DE LA BAIE", - "zipcode": "44380" -}, { - "address": "AVENUE DU CAGIRE ZAC DES LANDES", - "category": "3", - "city": "ESTANCARBON", - "id": 19903, - "lat": 43.117858, - "lng": 0.7646684, - "phone": "05 61 94 64 64", - "title": "SODEXCO - CENTRE DIST.ED.LECLERC", - "zipcode": "31800" -}, { - "address": "AVENUE DU CHATER", - "category": "2", - "city": "FRANCHEVILLE", - "id": 15299, - "lat": 45.7423024, - "lng": 4.772213, - "phone": "04 72 16 39 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "69340" -}, { - "address": "AVENUE DU GENERAL DE GAULLE C CIAL ROSNY2", - "category": "2", - "city": "ROSNY-SOUS-BOIS", - "id": 15280, - "lat": 48.883573, - "lng": 2.477632, - "phone": "01 49 35 59 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "93110" -}, { - "address": "AVENUE DU GENERAL DE GAULLE", - "category": "1", - "city": "VAUX-LE-PENIL", - "id": 15058, - "lat": 48.5345851, - "lng": 2.6753644, - "phone": "01 60 68 13 08", - "title": "PHARMACIE DU MOUSTIER", - "zipcode": "77000" -}, { - "address": "AVENUE DU GENERAL HORNE CENTRE COMMERCIAL AUCHAN", - "category": "2", - "city": "VALENCIENNES", - "id": 19674, - "lat": 50.3455815, - "lng": 3.518619, - "phone": "03 27 46 65 50", - "title": "PHARMACIE VAL SUD", - "zipcode": "59300" -}, { - "address": "AVENUE DU GRAND COTTIGNIES", - "category": "2", - "city": "WASQUEHAL", - "id": 15320, - "lat": 50.6820503, - "lng": 3.1294331, - "phone": "03 20 66 54 54", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "59290" -}, { - "address": "AVENUE DU MARECHAL JUIN CENTRE COMMERCIAL FOURCHON", - "category": "2", - "city": "ARLES", - "id": 18888, - "lat": 43.6655282, - "lng": 4.6387319, - "phone": "04 90 96 16 76", - "title": "PHARMACIE MARTIN CAILLE", - "zipcode": "13200" -}, { - "address": "AVENUE DU PERE SYLAVAIN GIRAUD", - "category": "1", - "city": "EGUILLES", - "id": 18452, - "lat": 43.570637, - "lng": 5.3574007, - "phone": "04 42 92 51 35", - "title": "PHARMACIE GINOUX CARBONNIERES", - "zipcode": "13510" -}, { - "address": "AVENUE DU TRAIN DES PIGNES ", - "category": "1", - "city": "SAINT-AYGULF", - "id": 16535, - "lat": 43.3885613, - "lng": 6.7245206, - "phone": "04 94 81 22 19", - "title": "PHARMACIE COUTAREL DE GRIMAL", - "zipcode": "83370" -}, { - "address": "AVENUE FERNAND GASSION CTRE COMMERCIAL RESIDENCE AURO", - "category": "2", - "city": "LA CIOTAT", - "id": 18667, - "lat": 43.1848514, - "lng": 5.6052078, - "phone": "04 42 83 57 34", - "title": "PHARMACIE L AURORE", - "zipcode": "13600" -}, { - "address": "AVENUE FRIDINGEN", - "category": "2", - "city": "NANTEUIL-LES-MEAUX", - "id": 17618, - "lat": 48.936708, - "lng": 2.883474, - "phone": "01 64 33 92 12", - "title": "PHARMACIE DES SAINTS PERES", - "zipcode": "77100" -}, { - "address": "AVENUE GABRIEL PERI", - "category": "1", - "city": "ST MAXIMIN LA STE BAUME", - "id": 17497, - "lat": 43.4542339, - "lng": 5.8556076, - "phone": "04 94 59 73 57", - "title": "PHARMACIE DES FONTAINES", - "zipcode": "83470" -}, { - "address": "AVENUE GEORGES POMPIDOU C COM LES CARABINS", - "category": "1", - "city": "FOS-SUR-MER", - "id": 17450, - "lat": 43.4643877, - "lng": 4.9394823, - "phone": "04 42 05 63 68", - "title": "PHARMACIE DES CARABINS", - "zipcode": "13270" -}, { - "address": "AVENUE HENRI MATISSE CENTRE COMMERCIAL CARREFOUR", - "category": "1", - "city": "AULNOY-LEZ-VALENCIENNES", - "id": 19797, - "lat": 50.3337924, - "lng": 3.5173297, - "phone": "03 27 21 47 00", - "title": "PHARMACIE C C AULNOY LEZ VALENCIENNES", - "zipcode": "59300" -}, { - "address": "AVENUE JACQUES PREVERT CENTRE COMMERCIAL GEANT CASINO", - "category": "2", - "city": "SAINT-VICTORET", - "id": 17379, - "lat": 43.4185834, - "lng": 5.2349908, - "phone": "04 42 89 29 26", - "title": "PHARMACIE DEREGNAUCOURT", - "zipcode": "13730" -}, { - "address": "AVENUE JEAN JAURES", - "category": "1", - "city": "LA SOUTERRAINE", - "id": 15693, - "lat": 46.2385163, - "lng": 1.4788673, - "phone": "05 55 63 95 00", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "23300" -}, { - "address": "AVENUE JEAN LEON LAPROTE ZAC DES PONTOTS - CC BAB2", - "category": "1", - "city": "ANGLET", - "id": 15238, - "lat": 43.4885803, - "lng": -1.5009973, - "phone": "05 59 45 87 19", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "64600" -}, { - "address": "AVENUE JEAN MOULIN CENTRE COMMERCIAL PLEIN SUD", - "category": "1", - "city": "AUBIERE", - "id": 15484, - "lat": 45.7520986, - "lng": 3.127443, - "phone": "04 73 26 88 31", - "title": "GRANDE PHARMACIE DU CENTRE", - "zipcode": "63170" -}, { - "address": "AVENUE JEAN MOULIN", - "category": "2", - "city": "LANGOGNE", - "id": 16318, - "lat": 44.7236089, - "lng": 3.8601497, - "phone": "04 66 69 01 61", - "title": "PHARMACIE CENTRALE", - "zipcode": "48300" -}, { - "address": "AVENUE JEAN MOULIN", - "category": "2", - "city": "MORNAS", - "id": 18148, - "lat": 44.2035854, - "lng": 4.7273995, - "phone": "04 90 37 03 77", - "title": "PHARMACIE DU ROCHER", - "zipcode": "84550" -}, { - "address": "AVENUE JEAN VINATIER", - "category": "1", - "city": "SEILHAC", - "id": 19137, - "lat": 45.3679838, - "lng": 1.7159969, - "phone": "05 55 27 05 48", - "title": "PHARMACIE PERRIER.", - "zipcode": "19700" -}, { - "address": "AVENUE LEO LAGRANGE CENTRE COMMERCIAL LES MOLLES", - "category": "2", - "city": "THIERS", - "id": 18886, - "lat": 45.8497347, - "lng": 3.5372995, - "phone": "04 73 80 05 44", - "title": "PHARMACIE MARME DAUPHANT", - "zipcode": "63300" -}, { - "address": "AVENUE LOUIS SALLENAVE", - "category": "2", - "city": "PAU", - "id": 15634, - "lat": 43.3165555, - "lng": -0.3605351, - "phone": "05 59 80 80 80", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "64000" -}, { - "address": "AVENUE MARCEL PAGNOL CENTRE CCIAL QUARTIER L USSEOU", - "category": "1", - "city": "VAISON-LA-ROMAINE", - "id": 15621, - "lat": 44.244047, - "lng": 5.0873515, - "phone": "04 90 28 85 46", - "title": "PARAPHARMACIE DES CHORALIES", - "zipcode": "84110" -}, { - "address": "AVENUE MAURICE DAUVERGNE", - "category": "3", - "city": "LE MEE-SUR-SEINE", - "id": 16467, - "lat": 48.543614, - "lng": 2.638486, - "phone": "01 60 68 11 06", - "title": "PHARMACIE CHY RADA", - "zipcode": "77350" -}, { - "address": "AVENUE ROBERT SCHUMANN VAL NOTRE DAME", - "category": "2", - "city": "SARTROUVILLE", - "id": 15282, - "lat": 48.945893, - "lng": 2.196532, - "phone": "01 61 04 68 19", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "78500" -}, { - "address": "AVENUE SAINT MAUR CD48 PARC D'ACTIVITES DE SAINT MAUR", - "category": "3", - "city": "COGOLIN", - "id": 15438, - "lat": 43.2576306, - "lng": 6.5183052, - "phone": "04 94 43 39 06", - "title": "GIE PHARMACIENS DU GOLFE", - "zipcode": "83310" -}, { - "address": "AVENUE THYDE MONNIER", - "category": "3", - "city": "SOLLIES-TOUCAS", - "id": 17633, - "lat": 43.2042154, - "lng": 6.0273188, - "phone": "04 94 33 77 77", - "title": "PHARMACIE DES TOURETTES", - "zipcode": "83210" -}, { - "address": "Aushopping Englos Les Géants, 352 Route nationale", - "category": "3", - "city": "ENGLOS", - "id": 14863, - "lat": 50.6317836, - "lng": 2.9684736, - "phone": "03 20 08 40 73", - "title": "AUCHAN ESPACE SANTE BEAUTE ", - "zipcode": "59320" -}, { - "address": "Avenue de Brédasque Centre Commercial Aix Ouest", - "category": "3", - "city": "AIX-EN-PROVENCE", - "id": 14894, - "lat": 43.5337172, - "lng": 5.4194356, - "phone": "04 42 95 84 00", - "title": "CASINO FRANCE ", - "zipcode": "13090" -}, { - "address": "BAT A LES ALDADES ZONE D IRATY 4 RUE DES MESANGES", - "category": "2", - "city": "BIARRITZ", - "id": 15596, - "lat": 43.4626328, - "lng": -1.5388448, - "phone": "05 59 24 80 22", - "title": "PARAPHARMACIE BIARRITZ IRATY", - "zipcode": "64200" -}, { - "address": "BD DE LA MUETTE CCIAL CORA", - "category": "3", - "city": "GARGES-LES-GONESSE", - "id": 18296, - "lat": 48.9757315, - "lng": 2.4181617, - "phone": "01 39 86 23 24", - "title": "PHARMACIE ENNACIRI", - "zipcode": "95140" -}, { - "address": "BD DE LA REPUBLIQUE ANGLE RUE VACASSY", - "category": "1", - "city": "MAUGUIO", - "id": 18587, - "lat": 43.6165563, - "lng": 4.0119421, - "phone": "04 67 29 58 11", - "title": "PHARMACIE JACOBIN CASSE", - "zipcode": "34130" -}, { - "address": "BD DU GENERAL LECLERC", - "category": "1", - "city": "NANTERRE", - "id": 17850, - "lat": 48.8997175, - "lng": 2.1899727, - "phone": "01 47 21 41 75", - "title": "PHARMACIE DU CHEMIN DE L ILE", - "zipcode": "92000" -}, { - "address": "BD ENSEIGNE VAISSEAU M GUES", - "category": "2", - "city": "TOULON", - "id": 18109, - "lat": 43.1144759, - "lng": 5.9808335, - "phone": "04 94 27 44 25", - "title": "PHARMACIE DU PONT DE SUVE", - "zipcode": "83000" -}, { - "address": "BLD HALLUIN CC AUCHAN", - "category": "2", - "city": "RONCQ", - "id": 19582, - "lat": 50.7379762, - "lng": 3.1360174, - "phone": "03 20 01 34 87", - "title": "PHARMACIE ST JACQUES", - "zipcode": "59223" -}, { - "address": "BOULEVARD ALFRED NAQUET PARKiNG CTRE COMMERCIAL LECLER", - "category": "2", - "city": "CARPENTRAS", - "id": 19340, - "lat": 44.0522978, - "lng": 5.0415967, - "phone": "04 90 63 10 13", - "title": "PHARMACIE ROCHE", - "zipcode": "84200" -}, { - "address": "BOULEVARD BEAUREGARD", - "category": "2", - "city": "COULANGES-LES-NEVERS", - "id": 15707, - "lat": 47.013095, - "lng": 3.177432, - "phone": "03 86 71 84 10", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "58660" -}, { - "address": "BOULEVARD DE L EUROPE", - "category": "1", - "city": "VERTOU", - "id": 16422, - "lat": 47.1722608, - "lng": -1.4702721, - "phone": "02 40 03 20 70", - "title": "PHARMACIE CHAMPION GENDRON", - "zipcode": "44120" -}, { - "address": "BOULEVARD DE L'EUROPE", - "category": "3", - "city": "PORTET-SUR-GARONNE", - "id": 15278, - "lat": 43.53401, - "lng": 1.3967116, - "phone": "05 62 20 46 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "31120" -}, { - "address": "BOULEVARD DE LA PRAIRIE CENTRE COMMERCIAL ESPACE 23", - "category": "2", - "city": "SAINT-GEREON", - "id": 18304, - "lat": 47.3734265, - "lng": -1.1956255, - "phone": "02 40 83 08 16", - "title": "PHARMACIE ESPACE 23", - "zipcode": "44150" -}, { - "address": "BOULEVARD DE LA REINE JEANNE", - "category": "2", - "city": "SALON-DE-PROVENCE", - "id": 15227, - "lat": 43.634512, - "lng": 5.0929051, - "phone": "04 90 56 21 27", - "title": "BMJ PHARMACIE", - "zipcode": "13300" -}, { - "address": "BOULEVARD DE LA REPUBLIQUE", - "category": "1", - "city": "BUZET-SUR-BAISE", - "id": 18449, - "lat": 44.258344, - "lng": 0.301653, - "phone": "05 53 84 74 04", - "title": "PHARMACIE GIMET", - "zipcode": "47160" -}, { - "address": "BOULEVARD DE LA REPUBLIQUE", - "category": "2", - "city": "LANDIVISIAU", - "id": 15747, - "lat": 48.5052508, - "lng": -4.0712656, - "phone": "02 98 68 16 49", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "29400" -}, { - "address": "BOULEVARD DE NORMANDIE CENTRE COMMERCIAL CORA", - "category": "2", - "city": "EVREUX", - "id": 17731, - "lat": 49.02218, - "lng": 1.134252, - "phone": "02 32 31 31 05", - "title": "PHARMACIE DU CADRAN", - "zipcode": "27000" -}, { - "address": "BOULEVARD DU PRESIDENT RENE COTY ESPACE COTY", - "category": "3", - "city": "MONTELIMAR", - "id": 17241, - "lat": 44.5370965, - "lng": 4.7626718, - "phone": "04 75 01 13 23", - "title": "PHARMACIE DE MAUBEC", - "zipcode": "26200" -}, { - "address": "BOULEVARD EDISON CENTRE COMMERCIAL ATLANTIQUE", - "category": "1", - "city": "LA ROCHE-SUR-YON", - "id": 15960, - "lat": 46.6823402, - "lng": -1.439216, - "phone": "02 51 37 15 37", - "title": "PHARMACIE ATLANTIQUE", - "zipcode": "85000" -}, { - "address": "BOULEVARD JEAN GUIGUES", - "category": "3", - "city": "PERTUIS", - "id": 15624, - "lat": 43.6958863, - "lng": 5.4977226, - "phone": "04 90 09 32 00", - "title": "PARAPHARMACIE HYPER U SAS SEND", - "zipcode": "84120" -}, { - "address": "BOULEVARD JEAN MOULIN RESIDENCE DES HETRES", - "category": "2", - "city": "HENIN-BEAUMONT", - "id": 15176, - "lat": 50.423066, - "lng": 2.9412379, - "phone": "03 21 75 16 66", - "title": "A LA PHARMACIE", - "zipcode": "62110" -}, { - "address": "C C INTERMARCHE NORD 40 AV DU 8 MAI 1945", - "category": "1", - "city": "BEAUVAIS", - "id": 16280, - "lat": 49.4421698, - "lng": 2.0952119, - "phone": "03 44 10 33 10", - "title": "PHARMACIE CARON", - "zipcode": "60000" -}, { - "address": "C C INTERMARCHE NORD 40 AV DU 8 MAI 1945", - "category": "1", - "city": "BEAUVAIS", - "id": 16280, - "lat": 49.4421698, - "lng": 2.0952119, - "phone": "03 44 10 33 10", - "title": "PHARMACIE CARON", - "zipcode": "60000" -}, { - "address": "C CIAL AUCHAN CASE 54 - 55 ZAC DU CHAMPS PONT BOULEVARD ANDRE BOULLOCHE", - "category": "2", - "city": "SAINT-PRIEST", - "id": 15148, - "lat": 45.722087, - "lng": 4.925772, - "phone": "04 72 37 02 31", - "title": "PHARMACIE PORTES DES ALPES", - "zipcode": "69800" -}, { - "address": "C CIAL DES COUDRAY", - "category": "1", - "city": "ETIOLLES", - "id": 19842, - "lat": 48.6383875, - "lng": 2.4572361, - "phone": "01 60 75 26 27", - "title": "PHARMACIE D'ETIOLLES/PHIE FREDET", - "zipcode": "91450" -}, { - "address": "C COM AUCHAN 1 RUE DE LA FABRIQUE", - "category": "2", - "city": "GIEN", - "id": 16970, - "lat": 47.6884838, - "lng": 2.6185619, - "phone": "02 38 67 20 13", - "title": "PHARMACIE DE LA LOIRE", - "zipcode": "45500" -}, { - "address": "C COM CALUIRE 2 10 CHEMIN PETIT", - "category": "2", - "city": "CALUIRE-ET-CUIRE", - "id": 16249, - "lat": 45.8051335, - "lng": 4.8588574, - "phone": "04 78 23 60 91", - "title": "PHARMACIE CALUIRE 2", - "zipcode": "69300" -}, { - "address": "C COMMERCIAL E LECLERC ROUTE DE LOUVIERS", - "category": "1", - "city": "LE NEUBOURG", - "id": 15768, - "lat": 49.1476915, - "lng": 0.9185303, - "phone": "02 32 35 09 53", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "27110" -}, { - "address": "C COMMERCIAL INTERMARCHE 130 AVENUE MICHEL BAROIN", - "category": "1", - "city": "SAINT-JULIEN-LES-VILLAS", - "id": 18745, - "lat": 48.2812833, - "lng": 4.0964051, - "phone": "03 25 75 36 59", - "title": "PHARMACIE LAURENT EURL", - "zipcode": "10800" -}, { - "address": "C COMMERCIAL VALDOLY 6 RUE DE LA LONGUERAIE", - "category": "3", - "city": "VIGNEUX-SUR-SEINE", - "id": 19803, - "lat": 48.7151034, - "lng": 2.4370593, - "phone": "01 69 42 59 65", - "title": "PHARMACIE CENTRALE DU VALDOLY", - "zipcode": "91270" -}, { - "address": "C-CIAL LES ARCADES-NIVEAU 2", - "category": "1", - "city": "NOISY-LE-GRAND", - "id": 17419, - "lat": 48.840167, - "lng": 2.54605, - "phone": "01 43 05 13 83", - "title": "PHARMACIE DES ARCADES", - "zipcode": "93160" -}, { - "address": "C. C COTE SEINE LOTS 16 62 63 50 AVENUE MARECHAL FOCH", - "category": "2", - "city": "ARGENTEUIL", - "id": 16521, - "lat": 48.944161, - "lng": 2.2533559, - "phone": "01 39 61 02 06", - "title": "PHARMACIE COTE SEINE", - "zipcode": "95100" -}, { - "address": "C. C du champ de Ste Croix rue Bernard Bordier", - "category": "2", - "city": "LONGUEIL-ANNEL", - "id": 15085, - "lat": 49.470267, - "lng": 2.860993, - "phone": "03 44 76 01 56", - "title": "PHARMACIE JULLIEN", - "zipcode": "60150" -}, { - "address": "C.C CARREFOUR ZA DE LA RIGOURDIERE", - "category": "2", - "city": "CESSON-SEVIGNE", - "id": 16182, - "lat": 48.1128456, - "lng": -1.5920646, - "phone": "02 99 83 97 80", - "title": "PHARMACIE BOURIEL & SALMON", - "zipcode": "35510" -}, { - "address": "C.C. Auchan Boissenart ZAC des Saints Pères", - "category": "2", - "city": "CESSON", - "id": 15002, - "lat": 48.5883899, - "lng": 2.5983576, - "phone": "01 60 63 05 03", - "title": "PHARMACIE DE BOISSENART", - "zipcode": "77240" -}, { - "address": "C.C. OPERA LA GIRAUDAIS", - "category": "1", - "city": "PACE", - "id": 15118, - "lat": 48.1376699, - "lng": -1.7674989, - "phone": "02 99 85 65 66", - "title": "PHARMACIE OPERA", - "zipcode": "35740" -}, { - "address": "C.COM LECLERC/ZA DE KEREBARS", - "category": "1", - "city": "GUILERS", - "id": 18932, - "lat": 48.427021, - "lng": -4.573055, - "phone": "02 98 07 63 03", - "title": "PHARMACIE MERLE LE STANC", - "zipcode": "29820" -}, { - "address": "C.COM-RUE DES MIROUELLES", - "category": "2", - "city": "SAINT-PIERRE-D'OLERON", - "id": 16623, - "lat": 45.9462418, - "lng": -1.3176654, - "phone": "05 46 47 00 66", - "title": "PHARMACIE DE BONNEMIE", - "zipcode": "17310" -}, { - "address": "C/C CORA ZI NORD OUEST RUE DES BAS BUISSONS", - "category": "2", - "city": "DREUX", - "id": 19794, - "lat": 48.7492003, - "lng": 1.3456144, - "phone": "02 37 46 03 32", - "title": "PHARMACIE BERTEAUX-PILLEUX", - "zipcode": "28100" -}, { - "address": "CARREFOUR MARKET ZA KERJEAN", - "category": "2", - "city": "LOCMINE", - "id": 14979, - "lat": 47.876891, - "lng": -2.825257, - "phone": "02 97 60 01 61", - "title": "PHARMACIE BESNARD LE FUR", - "zipcode": "56500" -}, { - "address": "CC DU MESNIL ROUX", - "category": "2", - "city": "BARENTIN", - "id": 15242, - "lat": 49.532666, - "lng": 0.965955, - "phone": "02 32 95 39 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "76360" -}, { - "address": "CC Angoulins Rn 137 r Rochefort ", - "category": "1", - "city": "ANGOULINS", - "id": 14890, - "lat": 46.1113117, - "lng": -1.1041117, - "phone": "05 46 51 23 79", - "title": "CARREFOUR FORME ET BEAUTE ", - "zipcode": "17690" -}, { - "address": "CC CARRE SENART", - "category": "2", - "city": "LIEUSAINT", - "id": 15269, - "lat": 48.6138951, - "lng": 2.5486139, - "phone": "01 64 13 76 19", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "77127" -}, { - "address": "CC CLEUNAY CS 86541 RUE JULES VALLES", - "category": "2", - "city": "RENNES", - "id": 15734, - "lat": 48.105042, - "lng": -1.7141139, - "phone": "02 23 40 24 85", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "35000" -}, { - "address": "CC DE LA BAIE RUE DE PENTHIEVRE ", - "category": "1", - "city": "YFFINIAC", - "id": 14925, - "lat": 48.4815094, - "lng": -2.6761736, - "phone": "02 96 63 36 33", - "title": "PARAPHARMACIE HYPER U", - "zipcode": "22120" -}, { - "address": "CC DE NORMANDIE CHEMIN DEPARTEMENTAL 110 AUCHAN MANTES LA JOLIE", - "category": "1", - "city": "BUCHELAY", - "id": 15192, - "lat": 48.9811139, - "lng": 1.6845724, - "phone": "01 30 98 25 26", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "78200" -}, { - "address": "CC DU PLATEAU ZAC DU PLATEAU 2 RUE DU GRAND QUARTIER", - "category": "2", - "city": "PLERIN", - "id": 14945, - "lat": 48.5353698, - "lng": -2.7617815, - "phone": "02 96 79 86 09", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "22190" -}, { - "address": "CC INTERMARCHE AVENUE GEORGES CLEMENCEAU", - "category": "2", - "city": "LAMBALLE", - "id": 17828, - "lat": 48.4621215, - "lng": -2.5009164, - "phone": "02 96 31 16 78", - "title": "PHARMACIE DU CHALET", - "zipcode": "22400" -}, { - "address": "CC Intermarché 181 BLD LOUISE MICHEL", - "category": "2", - "city": "SOMAIN", - "id": 19909, - "lat": 50.3477607, - "lng": 3.2837167, - "phone": "03 27 96 38 48", - "title": "TANGUY COSMETIQUE", - "zipcode": "59490" -}, { - "address": "CC NOYON SUD 32 ZAC DU MONT RENARD", - "category": "2", - "city": "NOYON", - "id": 14834, - "lat": 49.5798321, - "lng": 3.0008927, - "phone": "03 44 09 64 56", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "60400" -}, { - "address": "CC NOYON SUD 32 ZAC DU MONT RENARD", - "category": "3", - "city": "NOYON", - "id": 14834, - "lat": 49.5798321, - "lng": 3.0008927, - "phone": "03 44 09 64 56", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "60400" -}, { - "address": "CC ST QUENTIN 5 PLACE COLBERT", - "category": "3", - "city": "MONTIGNY LE BRETONNEUX", - "id": 14882, - "lat": 48.7838015, - "lng": 2.040438, - "phone": "01 30 48 84 19", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "78180" -}, { - "address": "CCAL LES 3 FONTAINES", - "category": "1", - "city": "CERGY", - "id": 16757, - "lat": 49.03845, - "lng": 2.079859, - "phone": "01 30 30 00 44", - "title": "PHARMACIE DE L ETOILE", - "zipcode": "95000" -}, { - "address": "CCAL LES PORTES DE TAVERNY", - "category": "2", - "city": "TAVERNY", - "id": 19206, - "lat": 49.0140584, - "lng": 2.2207775, - "phone": "01 34 18 95 95", - "title": "PHARMACIE POTOT", - "zipcode": "95150" -}, { - "address": "CCAL SAINT GENIS 2, avenue Charles de Gaulle", - "category": "1", - "city": "SAINT-GENIS-LAVAL", - "id": 14840, - "lat": 45.680602, - "lng": 4.791648, - "phone": "04 78 86 49 19", - "title": "AUCHAN ESPACE SANTE BEAUTE ", - "zipcode": "69230" -}, { - "address": "CCIAL 15 AVENUE FREDERIC MISTRAL", - "category": "1", - "city": "CHASSE-SUR-RHONE", - "id": 15331, - "lat": 45.57525, - "lng": 4.808009, - "phone": "04 72 49 33 00", - "title": "CASINO FRANCE ", - "zipcode": "38670" -}, { - "address": "CCIAL CARREFOUR ST ANDRE D ORNAY", - "category": "2", - "city": "LA ROCHE-SUR-YON", - "id": 19855, - "lat": 46.6660876, - "lng": -1.4528775, - "phone": "02 51 36 24 30", - "title": "PHARMACIE DU VAL D ORNAY", - "zipcode": "85000" -}, { - "address": "CCIAL CENTRE 2", - "category": "1", - "city": "SAINT-ETIENNE", - "id": 16407, - "lat": 45.4231907, - "lng": 4.3937165, - "phone": "04 77 57 05 99", - "title": "PHARMACIE CENTRE II", - "zipcode": "42100" -}, { - "address": "CCIAL CHAMPBENOIST AVENUE DE LA VOULZIE", - "category": "1", - "city": "PROVINS", - "id": 18585, - "lat": 48.547523, - "lng": 3.291928, - "phone": "01 64 00 00 98", - "title": "PHARMACIE JABET", - "zipcode": "77160" -}, { - "address": "CCIAL DE L EUROPE 1 RUE DU TRAITE D AMSTERDAM", - "category": "1", - "city": "PORNIC", - "id": 15708, - "lat": 47.1251238, - "lng": -2.1232916, - "phone": "02 51 74 00 20", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "44210" -}, { - "address": "CCIAL INTERMARCHE RUE JACQUES YVES COUSTEAU", - "category": "1", - "city": "VAUX-SUR-MER", - "id": 15834, - "lat": 45.647703, - "lng": -1.051247, - "phone": "05 46 02 83 87", - "title": "PARAPHARMALIN", - "zipcode": "17640" -}, { - "address": "CCIAL MAISON NEUVE ALLEE DE HUREPOIX", - "category": "3", - "city": "BRETIGNY-SUR-ORGE", - "id": 19873, - "lat": 48.585224, - "lng": 2.303424, - "phone": "01 60 85 04 88", - "title": "PHARMACIE MAISON NEUVE", - "zipcode": "91220" -}, { - "address": "CCIAL SUPER U 08 BIS AVENUE DE VERDUN", - "category": "3", - "city": "BRETIGNOLLES-SUR-MER", - "id": 16528, - "lat": 46.6262836, - "lng": -1.8573327, - "phone": "02 51 90 15 22", - "title": "PHARMACIE COURDENT PENAUD", - "zipcode": "85470" -}, { - "address": "CCIAL SUPER U RUE CHARLES LARGETEAU", - "category": "2", - "city": "POUZAUGES", - "id": 16983, - "lat": 46.774082, - "lng": -0.845136, - "phone": "02 51 57 01 90", - "title": "PHARMACIE DE LA MAIRIE", - "zipcode": "85700" -}, { - "address": "CENTRE COMMERCIAL LECLERC GALERIE MARCHANDE", - "category": "1", - "city": "SAINT-PARRES-AUX-TERTRES", - "id": 16394, - "lat": 48.2981713, - "lng": 4.1308219, - "phone": "03 25 81 14 10", - "title": "PHARMACIE CENTRALE GILLARD", - "zipcode": "10410" -}, { - "address": "CENTRE COM AUCHAN MARTIGUE", - "category": "2", - "city": "MARTIGUES", - "id": 17285, - "lat": 43.423533, - "lng": 5.050899, - "phone": "04 42 80 80 22", - "title": "PHARMACIE DE PROVENCE", - "zipcode": "13500" -}, { - "address": "CENTRE COM LECLERC 51 BD MAL D LATTRE DE TASSIGNY", - "category": "3", - "city": "SAUMUR", - "id": 15712, - "lat": 47.2615163, - "lng": -0.0902536, - "phone": "02 41 83 54 54", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "49400" -}, { - "address": "CENTRE COMMERCIAL 160 ROUTE DE NEUFCHATEL", - "category": "2", - "city": "SERQUEUX", - "id": 16091, - "lat": 49.6223858, - "lng": 1.5387796, - "phone": "02 35 90 52 92", - "title": "PHARMACIE BIGO EGREVIN", - "zipcode": "76440" -}, { - "address": "CENTRE COMMERCIAL AMIENS GLISY ROUTE DE ST QUENTIN", - "category": "1", - "city": "GLISY", - "id": 15330, - "lat": 49.8664301, - "lng": 2.3756987, - "phone": "03 22 38 38 00", - "title": "CASINO FRANCE ", - "zipcode": "80440" -}, { - "address": "CENTRE COMMERCIAL AMIENS GLISY ROUTE DE ST QUENTIN", - "category": "3", - "city": "GLISY", - "id": 15330, - "lat": 49.8664301, - "lng": 2.3756987, - "phone": "03 22 38 38 00", - "title": "CASINO FRANCE ", - "zipcode": "80440" -}, { - "address": "CENTRE COMMERCIAL BELLE EPINE ", - "category": "1", - "city": "THIAIS", - "id": 14881, - "lat": 48.7566294, - "lng": 2.3719927, - "phone": "01 41 80 42 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "94320" -}, { - "address": "CENTRE COMMERCIAL BRETAGNIA", - "category": "1", - "city": "SAINT-MARTIN-DES-CHAMPS", - "id": 15344, - "lat": 48.5736867, - "lng": -3.8505091, - "phone": "02 98 63 94 00", - "title": "CASINO FRANCE ", - "zipcode": "29600" -}, { - "address": "CENTRE COMMERCIAL CARPONT", - "category": "2", - "city": "PLOUFRAGAN", - "id": 15746, - "lat": 48.4983197, - "lng": -2.7788841, - "phone": "02 96 78 86 86", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "22440" -}, { - "address": "CENTRE COMMERCIAL CARREFOUR 10 RUE DU LOUPS", - "category": "1", - "city": "CROUY", - "id": 15005, - "lat": 49.3991706, - "lng": 3.3650455, - "phone": "03 23 59 28 75", - "title": "PHARMACIE DE CROUY", - "zipcode": "2880" -}, { - "address": "CENTRE COMMERCIAL CARREFOUR 10 RUE DU LOUPS", - "category": "2", - "city": "CROUY", - "id": 15005, - "lat": 49.3991706, - "lng": 3.3650455, - "phone": "03 23 59 28 75", - "title": "PHARMACIE DE CROUY", - "zipcode": "2880" -}, { - "address": "CENTRE COMMERCIAL CARREFOUR", - "category": "1", - "city": "FLERS-EN-ESCREBIEUX", - "id": 17810, - "lat": 50.397409, - "lng": 3.046893, - "phone": "03 27 87 50 57", - "title": "PHARMACIE DU CENTRE", - "zipcode": "59128" -}, { - "address": "CENTRE COMMERCIAL CARREFOUR", - "category": "1", - "city": "LA VILLE-DU-BOIS", - "id": 16355, - "lat": 48.6693889, - "lng": 2.2739479, - "phone": "01 64 49 72 84", - "title": "PHARMACIE CENTRALE", - "zipcode": "91620" -}, { - "address": "CENTRE COMMERCIAL CORA AVENUE DE L EUROPE", - "category": "2", - "city": "MASSY", - "id": 16588, - "lat": 48.7245963, - "lng": 2.2775976, - "phone": "01 69 30 01 52", - "title": "PHARMACIE DANIEL", - "zipcode": "91300" -}, { - "address": "CENTRE COMMERCIAL CORA", - "category": "2", - "city": "LEMPDES", - "id": 17971, - "lat": 45.7788716, - "lng": 3.1988361, - "phone": "04 73 61 75 04", - "title": "PHARMACIE DU MARAIS", - "zipcode": "63370" -}, { - "address": "CENTRE COMMERCIAL DE L ETOILE 332 ROUTE DE LA COTE D AMOUR", - "category": "3", - "city": "SAINT-NAZAIRE", - "id": 15351, - "lat": 47.2590104, - "lng": -2.2749853, - "phone": "02 51 16 14 00", - "title": "CASINO FRANCE ", - "zipcode": "44600" -}, { - "address": "CENTRE COMMERCIAL DES BOUCHARDES", - "category": "1", - "city": "CRECHES-SUR-SAONE", - "id": 15252, - "lat": 46.2530041, - "lng": 4.7927897, - "phone": "03 85 35 28 19", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "71680" -}, { - "address": "CENTRE COMMERCIAL DES MERISIERS BLD DE L OISE", - "category": "2", - "city": "JOUY-LE-MOUTIER", - "id": 17556, - "lat": 49.0111607, - "lng": 2.0289996, - "phone": "01 34 21 77 00", - "title": "PHARMACIE DES MERISIERS", - "zipcode": "95280" -}, { - "address": "CENTRE COMMERCIAL HYPER U AVENUE OLIVIER DE SERRES", - "category": "1", - "city": "ALES", - "id": 15508, - "lat": 44.1074999, - "lng": 4.0909195, - "phone": "04 66 52 28 28", - "title": "GRANDE PHARMACIE ROCADE SUD", - "zipcode": "30100" -}, { - "address": "CENTRE COMMERCIAL HYPER U ZI DE LA HAIE PASSART 12 RUE GUSTAVE EIFFEL", - "category": "3", - "city": "BRIE-COMTE-ROBERT", - "id": 15513, - "lat": 48.7039088, - "lng": 2.6009937, - "phone": "01 60 62 09 35", - "title": "GRANDE PHIE DE BRIE COMTE ROBERT", - "zipcode": "77170" -}, { - "address": "CENTRE COMMERCIAL INTERMARCHE RUE ALEXANDRE DUMAS", - "category": "2", - "city": "ROYE", - "id": 18009, - "lat": 49.6974639, - "lng": 2.788831, - "phone": "03 22 87 00 26", - "title": "PHARMACIE DU MARCHE", - "zipcode": "80700" -}, { - "address": "CENTRE COMMERCIAL INTERMARCHE RUE ALEXANDRE DUMAS", - "category": "3", - "city": "ROYE", - "id": 18009, - "lat": 49.6974639, - "lng": 2.788831, - "phone": "03 22 87 00 26", - "title": "PHARMACIE DU MARCHE", - "zipcode": "80700" -}, { - "address": "CENTRE COMMERCIAL LA RETRACHE", - "category": "3", - "city": "LE LUC", - "id": 17125, - "lat": 43.3814335, - "lng": 6.3026792, - "phone": "04 94 60 87 16", - "title": "PHARMACIE DE LA RETRACHE", - "zipcode": "83340" -}, { - "address": "CENTRE COMMERCIAL LE LOREAU RD28", - "category": "1", - "city": "HANCHES", - "id": 15527, - "lat": 48.5956461, - "lng": 1.6759831, - "phone": "02 37 18 28 60", - "title": "HYPER U", - "zipcode": "28130" -}, { - "address": "CENTRE COMMERCIAL LECLERC CHEMIN DE L ORME", - "category": "3", - "city": "GRASSE", - "id": 15857, - "lat": 43.6517904, - "lng": 6.9454364, - "phone": "04 93 40 45 35", - "title": "PHARMA LIAU PUJAL FISSOLO", - "zipcode": "6130" -}, { - "address": "CENTRE COMMERCIAL LECLERC LA SACRISTINE", - "category": "2", - "city": "SAINT-JEAN-D'ANGELY", - "id": 16151, - "lat": 45.9456875, - "lng": -0.5051763, - "phone": "05 46 32 00 14", - "title": "PHARMACIE BOSSIS - LAUNAY", - "zipcode": "17400" -}, { - "address": "CENTRE COMMERCIAL LECLERC", - "category": "2", - "city": "SAINT-MEDARD-EN-JALLES", - "id": 16962, - "lat": 44.8836515, - "lng": -0.6933867, - "phone": "05 56 95 70 30", - "title": "PHARMACIE DE LA JALLE", - "zipcode": "33160" -}, { - "address": "CENTRE COMMERCIAL LES CHARMETT CENTRE SUPER U", - "category": "1", - "city": "LES ESSARTS", - "id": 16088, - "lat": 46.7677718, - "lng": -1.233378, - "phone": "02 51 62 80 38", - "title": "PHARMACIE BEVILLON", - "zipcode": "85140" -}, { - "address": "CENTRE COMMERCIAL PLEIN SUD", - "category": "2", - "city": "PEROLS", - "id": 19181, - "lat": 43.57263, - "lng": 3.941108, - "phone": "04 67 20 15 16", - "title": "PHARMACIE PLEIN SUD", - "zipcode": "34470" -}, { - "address": "CENTRE COMMERCIAL ROUTE PUITS GERARD", - "category": "1", - "city": "MIMET", - "id": 17562, - "lat": 43.428515, - "lng": 5.472714, - "phone": "04 42 51 25 85", - "title": "PHARMACIE DES MOULIERES", - "zipcode": "13105" -}, { - "address": "CENTRE COMMERCIAL SUD 3", - "category": "1", - "city": "LE GRAND-QUEVILLY", - "id": 17717, - "lat": 49.4173687, - "lng": 1.0421938, - "phone": "02 35 68 19 43", - "title": "PHARMACIE DU BOIS CANY.", - "zipcode": "76120" -}, { - "address": "CENTRE COMMERCIAL SUPER HU BLD DOCTEUR LIONET", - "category": "2", - "city": "DOUE-LA-FONTAINE", - "id": 15914, - "lat": 47.191199, - "lng": -0.289637, - "phone": "02 41 59 10 58", - "title": "PHARMACIE ALLAIN PERICHOU", - "zipcode": "49700" -}, { - "address": "CENTRE COMMERCIAL SUPER U", - "category": "3", - "city": "SAINT-RENAN", - "id": 19023, - "lat": 48.43087, - "lng": -4.615927, - "phone": "02 98 84 24 34", - "title": "PHARMACIE NEVEU", - "zipcode": "29290" -}, { - "address": "CENTRE COMMERCIAL ULIS 2 DANS LA GALERIE MARCHANDE", - "category": "2", - "city": "LES ULIS", - "id": 19668, - "lat": 48.6767939, - "lng": 2.1715273, - "phone": "01 69 07 70 37", - "title": "PHARMACIE ULIS 2", - "zipcode": "91940" -}, { - "address": "CENTRE COMMERCIAL V2", - "category": "1", - "city": "VILLENEUVE-D'ASCQ", - "id": 15169, - "lat": 50.617669, - "lng": 3.131092, - "phone": "03 20 91 43 00", - "title": "PHARMACIE LOOCK V2", - "zipcode": "59650" -}, { - "address": "CENTRE COMMERCIAL VAL COURCELLE ROUTE DE LA NOUE", - "category": "2", - "city": "GIF-SUR-YVETTE", - "id": 19755, - "lat": 48.7009158, - "lng": 2.1025154, - "phone": "01 69 07 74 69", - "title": "PHARMACIE WILLEMOT", - "zipcode": "91190" -}, { - "address": "CHE POIRIER CHARLES GUERIN CTRE COM AUCHAN", - "category": "1", - "city": "OSNY", - "id": 16801, - "lat": 49.0769943, - "lng": 2.0776697, - "phone": "01 30 31 00 60", - "title": "PHARMACIE DE L OSERAIE", - "zipcode": "95520" -}, { - "address": "CHEMIN DE LA GARRIGUE", - "category": "2", - "city": "ROCHEFORT-DU-GARD", - "id": 17747, - "lat": 43.9761045, - "lng": 4.6843625, - "phone": "04 90 31 81 52", - "title": "PHARMACIE DU CASTELLAS", - "zipcode": "30650" -}, { - "address": "CHEMIN DE SAINT PIERRE", - "category": "2", - "city": "MARIGNANE", - "id": 15803, - "lat": 43.4124643, - "lng": 5.2085788, - "phone": "04 42 31 00 10", - "title": "PARAPHARMACIE LECLERC MARIGNANE", - "zipcode": "13700" -}, { - "address": "CHEMIN DE SOUHARA ROUTE NAT 10 CTRE COM LECLERC", - "category": "2", - "city": "URRUGNE", - "id": 16261, - "lat": 43.36481, - "lng": -1.698011, - "phone": "05 59 47 80 93", - "title": "PHARMACIE CANTAN", - "zipcode": "64122" -}, { - "address": "CHEMIN DEPARTEMENTAL 14 CENTRE COMMERCIAL CARREFOUR", - "category": "2", - "city": "FLINS-SUR-SEINE", - "id": 19850, - "lat": 48.965193, - "lng": 1.861847, - "phone": "01 30 95 71 41", - "title": "PHARMACIE DU CTRE COMMERCIAL DE FLINS", - "zipcode": "78410" -}, { - "address": "CHEMIN DES HAYETTES CENTRE COMMERCIAL", - "category": "2", - "city": "OSNY", - "id": 16214, - "lat": 49.0654438, - "lng": 2.0887263, - "phone": "01 30 73 20 27", - "title": "PHARMACIE BRIEL", - "zipcode": "95520" -}, { - "address": "CHEMIN DU STADE", - "category": "1", - "city": "SABLET", - "id": 19473, - "lat": 44.1896343, - "lng": 5.0060912, - "phone": "04 90 46 90 16", - "title": "PHARMACIE SAINT ROCH", - "zipcode": "84110" -}, { - "address": "CHEMIN SAINT CLAUDE", - "category": "2", - "city": "ANTIBES", - "id": 15240, - "lat": 43.5992105, - "lng": 7.1009289, - "phone": "04 92 91 46 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "6600" -}, { - "address": "CHEMIN SAINT THIERRY LA CROIX MAURENCIENNE", - "category": "1", - "city": "SAINT-BRICE-COURCELLES", - "id": 15773, - "lat": 49.2810633, - "lng": 3.9980808, - "phone": "03 26 86 98 05", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "51370" -}, { - "address": "CTRE COM DU CHAMPY", - "category": "2", - "city": "NOISY-LE-GRAND", - "id": 17833, - "lat": 48.8434719, - "lng": 2.5784612, - "phone": "01 43 05 51 16", - "title": "PHARMACIE DU CHAMPY", - "zipcode": "93160" -}, { - "address": "CTRE CIAL DU VAL D YERRES II", - "category": "2", - "city": "QUINCY-SOUS-SENART", - "id": 15896, - "lat": 48.6820891, - "lng": 2.5337515, - "phone": "01 69 00 81 23", - "title": "PHARMACIE ABISROR", - "zipcode": "91480" -}, { - "address": "CTRE COM AUCHAN 40 RUE DE L'ANISSERIE", - "category": "2", - "city": "CHATEAUBERNARD", - "id": 15529, - "lat": 45.6835073, - "lng": -0.3058884, - "phone": "05 45 82 69 30", - "title": "INSTITUT SUZANNE", - "zipcode": "16100" -}, { - "address": "CTRE COM AUCHAN PORTE DE BOURGOGNE", - "category": "1", - "city": "SENS", - "id": 19048, - "lat": 48.171701, - "lng": 3.292389, - "phone": "03 86 65 53 67", - "title": "PHARMACIE NOUVELLE", - "zipcode": "89100" -}, { - "address": "CTRE COM BEL AIR", - "category": "1", - "city": "RAMBOUILLET", - "id": 19016, - "lat": 48.625682, - "lng": 1.826466, - "phone": "01 30 41 18 64", - "title": "PHARMACIE NADJAHI", - "zipcode": "78120" -}, { - "address": "CTRE COM CARREFOUR AVENUE DE L ATLANTIQUE", - "category": "1", - "city": "AGEN", - "id": 15821, - "lat": 44.1822603, - "lng": 0.6200719, - "phone": "05 53 47 12 13", - "title": "PARAPHARMACIE PARASUD", - "zipcode": "47000" -}, { - "address": "CTRE COM CARREFOUR", - "category": "2", - "city": "BOISSEUIL", - "id": 15030, - "lat": 45.777491, - "lng": 1.3092829, - "phone": "05 55 06 93 52", - "title": "PHARMACIE DEBEST", - "zipcode": "87220" -}, { - "address": "CTRE COM CENTRE OUEST ROUTE D EPERNAY", - "category": "2", - "city": "FAGNIERES", - "id": 18683, - "lat": 48.96065, - "lng": 4.3169943, - "phone": "03 26 21 39 34", - "title": "PHARMACIE LA NOUE DU MOULIN SVF", - "zipcode": "51510" -}, { - "address": "CTRE COM DE LA BERNUAIS", - "category": "2", - "city": "MONTOIR-DE-BRETAGNE", - "id": 16511, - "lat": 47.326008, - "lng": -2.152714, - "phone": "02 40 88 63 29", - "title": "PHARMACIE CORDIER", - "zipcode": "44550" -}, { - "address": "CTRE COM DU BOIS ST LEU", - "category": "1", - "city": "CESSON", - "id": 16891, - "lat": 48.559693, - "lng": 2.5893, - "phone": "01 60 63 03 14", - "title": "PHARMACIE DE LA FORET", - "zipcode": "77240" -}, { - "address": "CTRE COM DU PARC DE VILLEROY 202 BOULEVARD DE LA VERVILLE", - "category": "2", - "city": "MENNECY", - "id": 17181, - "lat": 48.553922, - "lng": 2.4301659, - "phone": "01 64 99 81 85", - "title": "PHARMACIE DE LA VERVILLE", - "zipcode": "91540" -}, { - "address": "CTRE COM GEAN LE BREZET", - "category": "1", - "city": "CLERMONT-FERRAND", - "id": 15917, - "lat": 45.7830018, - "lng": 3.1198245, - "phone": "04 73 92 12 81", - "title": "PHARMACIE ALPHA", - "zipcode": "63000" -}, { - "address": "CTRE COM GRAND BOIS 74 RUE DE STE GENEVIEVE", - "category": "2", - "city": "SAINT-MICHEL-SUR-ORGE", - "id": 15352, - "lat": 48.637272, - "lng": 2.3198249, - "phone": "01 69 46 84 00", - "title": "CASINO FRANCE ", - "zipcode": "91240" -}, { - "address": "CTRE COM INTERMARCHE RUE DU FRICHE AUDOUIN", - "category": "1", - "city": "AIGREFEUILLE-SUR-MAINE", - "id": 18757, - "lat": 47.0831932, - "lng": -1.4102787, - "phone": "02 40 06 61 05", - "title": "PHARMACIE LE FORESTIER", - "zipcode": "44140" -}, { - "address": "CTRE COM LA PETITE MAILDRE", - "category": "1", - "city": "BEYNES", - "id": 16041, - "lat": 48.8563, - "lng": 1.87333, - "phone": "01 34 89 32 04", - "title": "PHARMACIE BEDEL", - "zipcode": "78650" -}, { - "address": "CTRE COM LECLERC 50 RUE DES LYS", - "category": "2", - "city": "ETAMPES", - "id": 16687, - "lat": 48.4393304, - "lng": 2.1367643, - "phone": "01 64 94 13 33", - "title": "PHARMACIE DE GUINETTE", - "zipcode": "91150" -}, { - "address": "CTRE COM LECLERC LA COULEBART", - "category": "2", - "city": "LEHON", - "id": 19863, - "lat": 48.4458516, - "lng": -2.0676865, - "phone": "02 96 39 61 68", - "title": "PHARMACIE GERNOT LUCAS", - "zipcode": "22100" -}, { - "address": "CTRE COM LES ARCADES DE PERSAN AVENUE JACQUES VOGT", - "category": "1", - "city": "PERSAN", - "id": 15121, - "lat": 49.1556407, - "lng": 2.2668227, - "phone": "01 30 34 61 20", - "title": "SELURL DOC VAUDOU", - "zipcode": "95340" -}, { - "address": "CTRE COM REIMS CERNAY 2 ROUTE DE CERNAY", - "category": "2", - "city": "REIMS", - "id": 16239, - "lat": 49.2611242, - "lng": 4.0652425, - "phone": "03 26 89 08 89", - "title": "PHARMACIE CACHEUX", - "zipcode": "51100" -}, { - "address": "CTRE COM VAL D HALATTE AVENUE D AUVELAIS", - "category": "2", - "city": "PONT-SAINTE-MAXENCE", - "id": 15776, - "lat": 49.3182064, - "lng": 2.6097421, - "phone": "03 44 72 27 77", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "60700" -}, { - "address": "CTRE COM VAL EUROPE 14 COURS DU DANUBE", - "category": "2", - "city": "SERRIS", - "id": 19860, - "lat": 48.8549462, - "lng": 2.7760379, - "phone": "01 60 43 14 66", - "title": "PHARMACIE FORUM SANTE VAL D EUROPE", - "zipcode": "77700" -}, { - "address": "CTRE COMMERCIAL DES COQUETS", - "category": "1", - "city": "MONT-SAINT-AIGNAN", - "id": 17468, - "lat": 49.459778, - "lng": 1.079798, - "phone": "02 35 70 43 13", - "title": "PHARMACIE DES COQUETS", - "zipcode": "76130" -}, { - "address": "CTRE COMMERCIAL GRAND QUARTIER ", - "category": "1", - "city": "SAINT-GREGOIRE", - "id": 15078, - "lat": 48.1360545, - "lng": -1.6934585, - "phone": "02 99 59 38 75", - "title": "PHARMACIE GRAND QUARTIER", - "zipcode": "35760" -}, { - "address": "CTRE COMMERCIAL QWARTZ BLD GALLIENI", - "category": "2", - "city": "VILLENEUVE-LA-GARENNE", - "id": 18287, - "lat": 48.9254954, - "lng": 2.3287101, - "phone": "01 47 94 55 29", - "title": "PHARMACIE EL FARAH", - "zipcode": "92390" -}, { - "address": "CTRE COMMERCIAL RUE CARNOT", - "category": "1", - "city": "WATTRELOS", - "id": 15792, - "lat": 50.6978426, - "lng": 3.2092266, - "phone": "03 20 20 99 99", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "59150" -}, { - "address": "Centre Alma, 1 Avenue du Canada", - "category": "3", - "city": "RENNES", - "id": 14878, - "lat": 48.0828205, - "lng": -1.6793096, - "phone": "02 99 42 83 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "35200" -}, { - "address": "Centre Ccommercial du RER", - "category": "1", - "city": "PUTEAUX", - "id": 15155, - "lat": 48.8920727, - "lng": 2.2381109, - "phone": "01 55 23 03 33", - "title": "PHARMACIE RER", - "zipcode": "92800" -}, { - "address": "Centre Commercial E.Leclerc, D2, Le Pougeau", - "category": "2", - "city": "LE PIAN-MEDOC", - "id": 14929, - "lat": 44.9564023, - "lng": -0.6274323, - "phone": "05 56 95 58 00", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "33290" -}, { - "address": "Centre Commercial La Rode, Route de Carpentras", - "category": "2", - "city": "L ISLE-SUR-LA-SORGUE", - "id": 14973, - "lat": 43.930426, - "lng": 5.061752, - "phone": "04 90 38 16 32", - "title": "PHARMACIE AVY MAILHAC", - "zipcode": "84800" -}, { - "address": "Centre Commercial Verte Campagne, 49 bis Avenue des Pyrénées", - "category": "1", - "city": "LACROIX-FALGARDE", - "id": 15143, - "lat": 43.505803, - "lng": 1.411677, - "phone": "05 61 76 24 09", - "title": "PHARMACIE PAJOT", - "zipcode": "31120" -}, { - "address": "Centre commercial Carrefour Langueux, 1 Rue Jules Verne", - "category": "1", - "city": "LANGUEUX", - "id": 15008, - "lat": 48.494949, - "lng": -2.726719, - "phone": "02 96 61 51 01", - "title": "PHARMACIE DE L ESCALE", - "zipcode": "22360" -}, { - "address": "Centre commercial Carrefour", - "category": "2", - "city": "LIEVIN", - "id": 15163, - "lat": 50.4205468, - "lng": 2.7706361, - "phone": "03 21 44 45 14", - "title": "PHARMACIE SEGARD", - "zipcode": "62800" -}, { - "address": "Cora Saint Maximin, Centre Commercial ", - "category": "2", - "city": "SAINT-MAXIMIN", - "id": 15069, - "lat": 49.2355763, - "lng": 2.4696601, - "phone": "03 44 28 28 28", - "title": "PHARMACIE DUBREUCQ SPIRE", - "zipcode": "60740" -}, { - "address": "Cote d'Opale Rte Nationale 42 ", - "category": "2", - "city": "SAINT-MARTIN-BOULOGNE", - "id": 14829, - "lat": 50.683996, - "lng": 1.6304667, - "phone": "03 21 10 11 66", - "title": "AUCHAN ESPACE SANTE BEAUTE ", - "zipcode": "62200" -}, { - "address": "Créteil Soleil, Centre Commercial Régional", - "category": "2", - "city": "CRETEIL", - "id": 14989, - "lat": 48.7797306, - "lng": 2.4574149, - "phone": "01 49 80 03 14", - "title": "PHARMACIE CAP SANTE I", - "zipcode": "94000" -}, { - "address": "D316 LA CROIX DE L ALOUETTE", - "category": "2", - "city": "CHAUMONTEL", - "id": 18864, - "lat": 49.1201791, - "lng": 2.4255383, - "phone": "01 30 35 03 12", - "title": "PHARMACIE MAGNIER", - "zipcode": "95270" -}, { - "address": "DOMAINE DE L'ESCAPADE 203 DN7", - "category": "3", - "city": "LE THOLONET", - "id": 17266, - "lat": 43.5121522, - "lng": 5.4842035, - "phone": "04 42 66 80 20", - "title": "PHARMACIE DE PALETTE", - "zipcode": "13100" -}, { - "address": "DR MICHEL JEANJEAN 33 RUE ALFONSE KARR", - "category": "2", - "city": "SAINT-RAPHAEL", - "id": 16313, - "lat": 43.4239069, - "lng": 6.7671628, - "phone": "04 94 95 00 40", - "title": "PHARMACIE CENTRALE", - "zipcode": "83700" -}, { - "address": "ESPACE BOCAUD AVENUE DE VENDARGUES", - "category": "2", - "city": "JACOU", - "id": 18305, - "lat": 43.6599612, - "lng": 3.9051942, - "phone": "04 67 55 95 70", - "title": "PHARMACIE ESPACE BOCAUD", - "zipcode": "34830" -}, { - "address": "ESPACES COMMERCIAL LES DONJONS RUE DE LA FAIENCERIE", - "category": "1", - "city": "DIGOIN", - "id": 15699, - "lat": 46.4893787, - "lng": 3.9925667, - "phone": "03 85 53 75 00", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "71160" -}, { - "address": "ESPLANADE SAINT JEAN", - "category": "3", - "city": "SAINT-RAPHAEL", - "id": 18505, - "lat": 43.4165932, - "lng": 6.8082437, - "phone": "04 94 95 21 13", - "title": "PHARMACIE GUILBAUD", - "zipcode": "83700" -}, { - "address": "ETANG AU DIABLE", - "category": "2", - "city": "SAINT-GREGOIRE", - "id": 15737, - "lat": 48.1378275, - "lng": -1.6857019, - "phone": "02 99 84 86 61", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "35760" -}, { - "address": "GALERIE GEANT CENTRE COMMERCIAL BARNEOUD", - "category": "2", - "city": "LES PENNES-MIRABEAU", - "id": 17279, - "lat": 43.41456, - "lng": 5.361695, - "phone": "04 42 02 64 16", - "title": "PHARMACIE DE PLAN DE CAMPAGNE", - "zipcode": "13170" -}, { - "address": "GALERIE MARCHANDE DES SAUGERAIES", - "category": "2", - "city": "MACON", - "id": 17620, - "lat": 46.3275295, - "lng": 4.8267145, - "phone": "03 85 34 44 49", - "title": "PHARMACIE DES SAUGERAIES", - "zipcode": "71000" -}, { - "address": "GALERIE MARCHANDE DU GEANT RN 98 AV EUGENE JOLY", - "category": "1", - "city": "FREJUS", - "id": 17400, - "lat": 43.4236438, - "lng": 6.7325808, - "phone": "04 94 51 27 92", - "title": "PHARMACIE DES ALLEES", - "zipcode": "83600" -}, { - "address": "GARAGE 1 RUE FRANCOIS REBUFFEL", - "category": "3", - "city": "LE CANNET", - "id": 15817, - "lat": 43.5676324, - "lng": 7.0169279, - "phone": "04 93 68 27 12", - "title": "PARAPHARMACIE MARCHE PARA SELECTION", - "zipcode": "6110" -}, { - "address": "GARE DE PARIS LYON C38 4 PLACE LOUIS ARMAND", - "category": "2", - "city": "PARIS", - "id": 14781, - "lat": 48.8443704, - "lng": 2.375401, - "phone": "01 43 43 32 15", - "title": "PHARMACIE DE LA GARE DE LYON", - "zipcode": "75012" -}, { - "address": "GEANT VALMANTE AVENUE J DE LATTRE TASSIGNY", - "category": "2", - "city": "MARSEILLE", - "id": 14337, - "lat": 43.2467062, - "lng": 5.4171936, - "phone": "04 91 17 74 00", - "title": "CASINO FRANCE", - "zipcode": "13009" -}, { - "address": "GRAND PLACE JACQUES D ARAGON", - "category": "1", - "city": "LATTES", - "id": 18485, - "lat": 43.569898, - "lng": 3.904717, - "phone": "04 67 65 21 58", - "title": "PHARMACIE GRAND'PLACE", - "zipcode": "34970" -}, { - "address": "GRAND'RUE ", - "category": "2", - "city": "SAINT-SAVOURNIN", - "id": 15052, - "lat": 43.4057402, - "lng": 5.5284062, - "phone": "04 42 72 40 18", - "title": "PHARMACIE DU GRAND JARDIN", - "zipcode": "13119" -}, { - "address": "GRANDE PHARMACIE MACONNAISE 1351 AVENUE CHARLES DE GAULLE", - "category": "1", - "city": "MACON", - "id": 16024, - "lat": 46.3149016, - "lng": 4.8362072, - "phone": "03 85 38 25 99", - "title": "PHARMACIE BAYLE - BOUFFAULT", - "zipcode": "71000" -}, { - "address": "Galerie Intermarché zi de Lannechuen", - "category": "2", - "city": "BRIEC", - "id": 15090, - "lat": 48.1000539, - "lng": -4.0137897, - "phone": "02 98 57 91 21", - "title": "PHARMACIE LANNECHUEN", - "zipcode": "29510" -}, { - "address": "IMPASSE DE LA TOURETTE", - "category": "3", - "city": "LE BOIS-PLAGE-EN-RE", - "id": 16013, - "lat": 46.185578, - "lng": -1.391819, - "phone": "05 46 09 23 30", - "title": "PHARMACIE BATTAGLIA", - "zipcode": "17580" -}, { - "address": "LD KEROLAY CENTRE CCIAL 6 RUE DE MONISTROL", - "category": "2", - "city": "LORIENT", - "id": 15343, - "lat": 47.7340089, - "lng": -3.3973091, - "phone": "02 97 88 04 00", - "title": "CASINO FRANCE ", - "zipcode": "56100" -}, { - "address": "LE BOURG", - "category": "1", - "city": "ALLOUVILLE-BELLEFOSSE", - "id": 19143, - "lat": 49.5963165, - "lng": 0.6769387, - "phone": "02 35 96 07 02", - "title": "PHARMACIE PETIT", - "zipcode": "76190" -}, { - "address": "LE BOURG", - "category": "1", - "city": "LOUDES", - "id": 18368, - "lat": 45.1434031, - "lng": 3.6688095, - "phone": "04 71 08 60 17", - "title": "PHARMACIE FORCE", - "zipcode": "43320" -}, { - "address": "LE BOURG", - "category": "2", - "city": "PRISSE", - "id": 16132, - "lat": 46.321792, - "lng": 4.744358, - "phone": "03 85 37 84 13", - "title": "PHARMACIE BOILLON", - "zipcode": "71960" -}, { - "address": "LE BOURG", - "category": "2", - "city": "SAINT-AMANS-DES-COTS", - "id": 17182, - "lat": 44.689526, - "lng": 2.658302, - "phone": "05 65 44 86 14", - "title": "PHARMACIE DE LA VIADENE", - "zipcode": "12460" -}, { - "address": "LE CHARREL RESIDENCE VALRIANT", - "category": "3", - "city": "AUBAGNE", - "id": 19613, - "lat": 43.2834944, - "lng": 5.5433421, - "phone": "04 42 03 42 90", - "title": "PHARMACIE TEDJIRIAN", - "zipcode": "13400" -}, { - "address": "LES ALLEES", - "category": "1", - "city": "CAMBO-LES-BAINS", - "id": 15998, - "lat": 43.3603015, - "lng": -1.3988565, - "phone": "05 59 29 72 41", - "title": "PHARMACIE BARDIN SOULES", - "zipcode": "64250" -}, { - "address": "LES DOMAINES DE LA GARE", - "category": "3", - "city": "ANNONAY", - "id": 16906, - "lat": 45.2446888, - "lng": 4.6743957, - "phone": "04 75 33 47 01", - "title": "PHARMACIE DE LA GARE", - "zipcode": "7100" -}, { - "address": "LES EPIS", - "category": "1", - "city": "SIN-LE-NOBLE", - "id": 15182, - "lat": 50.343357, - "lng": 3.10112, - "phone": "03 27 33 98 97", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "59450" -}, { - "address": "LES GRANDES CHAUMES CENTRE COMMERCIAL GEANT CASINO", - "category": "1", - "city": "CHAMPNIERS", - "id": 17559, - "lat": 45.692939, - "lng": 0.18372, - "phone": "05 45 68 22 79", - "title": "PHARMACIE DES MONTAGNES.", - "zipcode": "16430" -}, { - "address": "LESTELLE MICHELE 17 RUE PASCAL DUPRAT", - "category": "2", - "city": "AIRE-SUR-L'ADOUR", - "id": 18813, - "lat": 43.7006518, - "lng": -0.2637013, - "phone": "05 58 71 60 57", - "title": "PHARMACIE LESTELLE", - "zipcode": "40800" -}, { - "address": "LOTISSEMENT L'AVENIR France, 2 RUE ALEXANDRE FLEMING", - "category": "2", - "city": "SAINT-GENIES-DE-MALGOIRES", - "id": 15094, - "lat": 43.9451742, - "lng": 4.2249679, - "phone": "04 66 81 62 04", - "title": "PHARMACIE LES BOULEVARDS", - "zipcode": "30190" -}, { - "address": "La Breche, Cc Super U", - "category": "3", - "city": "ARRADON", - "id": 15080, - "lat": 47.6341967, - "lng": -2.8210723, - "phone": "02 97 44 02 17", - "title": "PHARMACIE GUILLARD", - "zipcode": "56610" -}, { - "address": "La Galerie - Géant Beaulieu, 2 Avenue de Lafayette, ", - "category": "1", - "city": "POITIERS", - "id": 15128, - "lat": 46.5742593, - "lng": 0.3731304, - "phone": "05 49 44 84 00", - "title": "DISTRIBUTION CASINO FRANCE CG319", - "zipcode": "86000" -}, { - "address": "La Galerie - Le Phare de l'Europe, Centre Commercial Geant Route de Gouesnou", - "category": "2", - "city": "BREST", - "id": 15025, - "lat": 48.408174, - "lng": -4.46525, - "phone": "02 98 02 01 04", - "title": "PHARMACIE DE L'EUROPE", - "zipcode": "29200" -}, { - "address": "MADAME MICHELLE PAMPAGNIN 3 RUE ALEXANDRE DUMAS", - "category": "2", - "city": "SAINT-PRIEST-EN-JAREZ", - "id": 19084, - "lat": 45.4739929, - "lng": 4.3778141, - "phone": "04 77 93 00 95", - "title": "PHARMACIE PAMPAGNIN", - "zipcode": "42270" -}, { - "address": "MME CONAN 2 RUE KROEZ ER BLEU", - "category": "2", - "city": "LOCOAL-MENDON", - "id": 17126, - "lat": 47.7099792, - "lng": -3.1047606, - "phone": "02 97 24 66 55", - "title": "PHARMACIE DE LA RIA", - "zipcode": "56550" -}, { - "address": "O'Parinor, Centre Commercial O'Parinor, Le Haut de Galy", - "category": "2", - "city": "AULNAY-SOUS-BOIS", - "id": 15144, - "lat": 48.9566504, - "lng": 2.4752283, - "phone": "01 48 67 47 28", - "title": "PHARMACIE PARINOR", - "zipcode": "93600" -}, { - "address": "PARAPHARMACIE CTRE COM E.LECLERC BLD JEAN JAURES", - "category": "2", - "city": "VERNON", - "id": 15812, - "lat": 49.095122, - "lng": 1.4628661, - "phone": "02 32 64 41 00", - "title": "PARAPHARMACIE LECLERC SAS VERMADIS", - "zipcode": "27200" -}, { - "address": "PARC DU FORAIL", - "category": "3", - "city": "TULLE", - "id": 15673, - "lat": 45.2522042, - "lng": 1.76183, - "phone": "05 55 20 51 00", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "19000" -}, { - "address": "PETIT CHEMIN D AIX CENTRE CCIAL CARREFOUR", - "category": "2", - "city": "GARDANNE", - "id": 16314, - "lat": 43.46664, - "lng": 5.46338, - "phone": "04 42 58 31 39", - "title": "PHARMACIE CENTRALE", - "zipcode": "13120" -}, { - "address": "PHARMACIE ANTUNES 4 AVENUE DU CORPS FRANC POMMIES", - "category": "2", - "city": "FLEURANCE", - "id": 17490, - "lat": 43.853531, - "lng": 0.6643348, - "phone": "05 62 06 10 85", - "title": "PHARMACIE DES ETOILES", - "zipcode": "32500" -}, { - "address": "PHARMACIE LAFAYETTE 7 RUE LAFAYETTE", - "category": "2", - "city": "NANTES", - "id": 19031, - "lat": 47.2161557, - "lng": -1.5616785, - "phone": "02 40 48 68 30", - "title": "PHARMACIE NIVET", - "zipcode": "44000" -}, { - "address": "PLACE CHARRAS CENTRE COMMERCIAL CHARRAS", - "category": "2", - "city": "COURBEVOIE", - "id": 16435, - "lat": 48.8951286, - "lng": 2.251736, - "phone": "01 47 88 11 45", - "title": "PHARMACIE CHARRAS", - "zipcode": "92400" -}, { - "address": "PLACE DE L EUROPDE ", - "category": "1", - "city": "SAINT-GERMAIN-LES-CORBEIL", - "id": 14915, - "lat": 48.627498, - "lng": 2.492031, - "phone": "01 69 89 06 16", - "title": "LA PHARMACIE DU CENTRE", - "zipcode": "91250" -}, { - "address": "PLACE DE L'EVECHE CENTRE COMMERCIAL SUPER U", - "category": "1", - "city": "SAINT-POL-DE-LEON", - "id": 17952, - "lat": 48.6881119, - "lng": -3.9874461, - "phone": "02 98 69 01 42", - "title": "PHARMACIE DU LEON", - "zipcode": "29250" -}, { - "address": "PLACE DE LA CATHEDRALE", - "category": "3", - "city": "DAX", - "id": 15437, - "lat": 43.708244, - "lng": -1.053337, - "phone": "05 58 74 01 04", - "title": "GRANDE PHARMACIE THERMALE LE FLEM", - "zipcode": "40100" -}, { - "address": "PLACE DE LA GARE", - "category": "1", - "city": "JUAN-LES-PINS", - "id": 16902, - "lat": 43.569804, - "lng": 7.116122, - "phone": "04 93 61 01 24", - "title": "PHARMACIE DE LA GARE", - "zipcode": "6160" -}, { - "address": "PLACE DE LA GARE", - "category": "2", - "city": "PORNIC", - "id": 16454, - "lat": 47.1143421, - "lng": -2.0979036, - "phone": "02 40 82 00 20", - "title": "PHARMACIE CHESNEAU DURAND", - "zipcode": "44210" -}, { - "address": "PLACE DE LA LIBERATION CENTRE COMMERCIAL", - "category": "2", - "city": "CHILLY-MAZARIN", - "id": 16356, - "lat": 48.7020019, - "lng": 2.3216966, - "phone": "01 69 09 25 20", - "title": "PHARMACIE CENTRALE", - "zipcode": "91380" -}, { - "address": "PLACE DE LA LIBERATION", - "category": "2", - "city": "LE BOIS-D'OINGT", - "id": 17980, - "lat": 45.921397, - "lng": 4.5850727, - "phone": "04 74 71 60 85", - "title": "PHARMACIE DU MARCHE", - "zipcode": "69620" -}, { - "address": "PLACE DE LA MAIRIE", - "category": "2", - "city": "BAGNOLS-EN-FORET", - "id": 16602, - "lat": 43.5374287, - "lng": 6.6982055, - "phone": "04 94 40 63 99", - "title": "PHARMACIE DE BAGNOLS", - "zipcode": "83600" -}, { - "address": "PLACE DE LA REPUBLIQUE", - "category": "1", - "city": "MONTROND-LES-BAINS", - "id": 17857, - "lat": 45.6444994, - "lng": 4.2280308, - "phone": "04 77 54 43 17", - "title": "PHARMACIE DU CLOS BORIE", - "zipcode": "42210" -}, { - "address": "PLACE DE LA REPUBLIQUE", - "category": "2", - "city": "LANCON-PROVENCE", - "id": 17533, - "lat": 43.590719, - "lng": 5.125266, - "phone": "04 90 42 76 07", - "title": "PHARMACIE DES IRIS", - "zipcode": "13680" -}, { - "address": "PLACE DE LA REPUBLIQUE", - "category": "3", - "city": "SAINT-CERE", - "id": 18451, - "lat": 44.8589249, - "lng": 1.8920916, - "phone": "05 65 38 06 37", - "title": "PHARMACIE GINESTE", - "zipcode": "46400" -}, { - "address": "PLACE DE VERDUN", - "category": "3", - "city": "PAIMPOL", - "id": 16493, - "lat": 48.7784601, - "lng": -3.0486739, - "phone": "02 96 20 81 72", - "title": "PHARMACIE COLLET", - "zipcode": "22500" -}, { - "address": "PLACE DES GOELANDS CTRE COM DE CATANET", - "category": "2", - "city": "NIMES", - "id": 16640, - "lat": 43.839488, - "lng": 4.318069, - "phone": "04 66 64 48 35", - "title": "PHARMACIE DE CASTANET", - "zipcode": "30900" -}, { - "address": "PLACE DES VICTOIRES", - "category": "3", - "city": "LA ROCHE-SUR-YON", - "id": 16942, - "lat": 46.6790807, - "lng": -1.4251449, - "phone": "02 51 37 15 30", - "title": "PHARMACIE DE LA GARENNE", - "zipcode": "85000" -}, { - "address": "PLACE DU 8 MAI 1945", - "category": "2", - "city": "CHECY", - "id": 16653, - "lat": 47.8936348, - "lng": 2.0220305, - "phone": "02 38 86 88 93", - "title": "PHARMACIE DE CHECY", - "zipcode": "45430" -}, { - "address": "PLACE DU CHATEAU", - "category": "3", - "city": "ARNAC-POMPADOUR", - "id": 17281, - "lat": 45.396834, - "lng": 1.3840073, - "phone": "05 55 73 34 86", - "title": "PHARMACIE DE POMPADOUR", - "zipcode": "19230" -}, { - "address": "PLACE DU CHEVALIER DE SAINT POL", - "category": "1", - "city": "SAINT-POL-SUR-MER", - "id": 17123, - "lat": 51.028363, - "lng": 2.352583, - "phone": "03 28 64 89 85", - "title": "PHARMACIE DE LA REPUBLIQUE", - "zipcode": "59430" -}, { - "address": "PLACE DU COMMERCE CENTRE COMMERCIAL CORGNAC", - "category": "2", - "city": "LIMOGES", - "id": 16817, - "lat": 45.840836, - "lng": 1.234035, - "phone": "05 55 01 52 94", - "title": "PHARMACIE DE LA BORIE", - "zipcode": "87100" -}, { - "address": "PLACE DU MARCHE", - "category": "2", - "city": "LE THOR", - "id": 17976, - "lat": 43.928467, - "lng": 4.994809, - "phone": "04 90 33 82 31", - "title": "PHARMACIE DU MARCHE", - "zipcode": "84250" -}, { - "address": "PLACE DU PORTALOU", - "category": "1", - "city": "LA CANOURGUE", - "id": 16823, - "lat": 44.432227, - "lng": 3.215329, - "phone": "04 66 32 80 19", - "title": "PHARMACIE DE LA CANOURGUE", - "zipcode": "48500" -}, { - "address": "PLACE EDOUARD BOUILLIERE CTRE COM REGIONAL GEANT", - "category": "1", - "city": "TOULOUSE", - "id": 16606, - "lat": 43.570027, - "lng": 1.39477, - "phone": "05 61 40 32 89", - "title": "PHARMACIE DE BASSO COMBO", - "zipcode": "31100" -}, { - "address": "PLACE EDOUARD DELAYE", - "category": "3", - "city": "LE BOUSCAT", - "id": 19604, - "lat": 44.8667561, - "lng": -0.6182302, - "phone": "05 56 08 84 50", - "title": "PHARMACIE TAILLEFER", - "zipcode": "33110" -}, { - "address": "PLACE EGLISE", - "category": "2", - "city": "GOUZON", - "id": 16333, - "lat": 46.1918511, - "lng": 2.2393682, - "phone": "05 55 62 20 46", - "title": "PHARMACIE CENTRALE", - "zipcode": "23230" -}, { - "address": "PLACE FLORALE CENTRE COMMERCIAL GRAMOND", - "category": "2", - "city": "EYSINES", - "id": 18949, - "lat": 44.8681238, - "lng": -0.6348407, - "phone": "05 56 28 16 48", - "title": "PHARMACIE MIGRON", - "zipcode": "33320" -}, { - "address": "PLACE FRANCOIS MITTERAND", - "category": "3", - "city": "AUBEVOYE", - "id": 19131, - "lat": 49.1648739, - "lng": 1.3436383, - "phone": "02 32 52 33 24", - "title": "PHARMACIE PERIER", - "zipcode": "27940" -}, { - "address": "PLACE JACQUES RESPLANDIN ZONE INDUSTR SAINT HERMENTAIRE", - "category": "2", - "city": "DRAGUIGNAN", - "id": 18947, - "lat": 43.5283853, - "lng": 6.4501787, - "phone": "04 94 68 04 43", - "title": "PHARMACIE MIFSUD", - "zipcode": "83300" -}, { - "address": "PLACE LOUIS LE MONTAGNER", - "category": "2", - "city": "GUIDEL", - "id": 18316, - "lat": 47.7921133, - "lng": -3.4939033, - "phone": "02 97 65 01 41", - "title": "PHARMACIE EURL LA LAITA", - "zipcode": "56520" -}, { - "address": "PLACE ROCHAID", - "category": "1", - "city": "DINARD", - "id": 17517, - "lat": 48.6327011, - "lng": -2.057899, - "phone": "02 99 46 12 04", - "title": "PHARMACIE DES HALLES", - "zipcode": "35800" -}, { - "address": "PLACE SAINT LEONARD", - "category": "2", - "city": "CORBEIL-ESSONNES", - "id": 19443, - "lat": 48.614227, - "lng": 2.485784, - "phone": "01 60 75 00 90", - "title": "PHARMACIE SAINT LEONARD", - "zipcode": "91100" -}, { - "address": "PLACE STERLING", - "category": "1", - "city": "SOUSTONS", - "id": 19593, - "lat": 43.751215, - "lng": -1.3291788, - "phone": "05 58 41 10 45", - "title": "PHARMACIE STERLING", - "zipcode": "40140" -}, { - "address": "PLATEAU SAINT FIACRE CENTER COMMERCIAL INTERMARCHE", - "category": "1", - "city": "PLOURIN-LES-MORLAIX", - "id": 15124, - "lat": 48.561295, - "lng": -3.824288, - "phone": "02 98 72 63 64", - "title": "SARL PHARMACIE KERBORIOU", - "zipcode": "29600" -}, { - "address": "POLE SANTE RUE RAYMOND SOUDAY", - "category": "2", - "city": "CLEON", - "id": 17167, - "lat": 49.3090598, - "lng": 1.0390288, - "phone": "02 35 81 76 06", - "title": "PHARMACIE DE LA TRAVERSE", - "zipcode": "76410" -}, { - "address": "Place de la Liberté", - "category": "2", - "city": "L ARBRESLE", - "id": 15015, - "lat": 45.8352488, - "lng": 4.6179255, - "phone": "04 74 01 03 90", - "title": "PHARMACIE DE LA BREVENNE", - "zipcode": "69210" -}, { - "address": "Place des Droits de l'Homme", - "category": "2", - "city": "LARDY", - "id": 15018, - "lat": 48.53027, - "lng": 2.2929179, - "phone": "01 60 82 77 15", - "title": "PHARMACIE DE LA GARE", - "zipcode": "91510" -}, { - "address": "QUAI LEDRU ROLLIN", - "category": "3", - "city": "MONTLUCON", - "id": 15298, - "lat": 46.3442709, - "lng": 2.6006728, - "phone": "04 70 03 02 02", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "3100" -}, { - "address": "QUARTIER DE MONTHIEU ", - "category": "1", - "city": "SAINT-ETIENNE", - "id": 14899, - "lat": 45.4422709, - "lng": 4.4199717, - "phone": "04 77 43 03 00", - "title": "CASINO FRANCE ", - "zipcode": "42100" -}, { - "address": "QUARTIER DE VIREBELLE CHEMIN DU PUIT BRUNET", - "category": "1", - "city": "LA CIOTAT", - "id": 15321, - "lat": 43.1871173, - "lng": 5.6013076, - "phone": "04 42 98 86 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "13600" -}, { - "address": "QUARTIER LES BERTRANES 962 AV DU 8 MAI 1945", - "category": "2", - "city": "PERTUIS", - "id": 19293, - "lat": 43.6819859, - "lng": 5.5000791, - "phone": "04 90 79 01 10", - "title": "PHARMACIE REBOUL ICARD", - "zipcode": "84120" -}, { - "address": "QUARTIER TAURELLE RN7 CENTRE CCIAL LEADER PRICE", - "category": "1", - "city": "LE CANNET-DES-MAURES", - "id": 15818, - "lat": 43.3939589, - "lng": 6.3297281, - "phone": "04 94 50 77 95", - "title": "PARAPHARMACIE PARA PROVENCE", - "zipcode": "83340" -}, { - "address": "Quai de la Chapelle", - "category": "2", - "city": "L ILE-D'YEU", - "id": 15061, - "lat": 46.727741, - "lng": -2.351251, - "phone": "02 51 58 35 06", - "title": "PHARMACIE DU PORT", - "zipcode": "85350" -}, { - "address": "RES LE PASSIFLORE ZD 2 RUE PAUL ELUARD/ RUE ANDRE CHAMSON", - "category": "3", - "city": "SAINT-JEAN-DE-VEDAS", - "id": 16468, - "lat": 43.5762499, - "lng": 3.831222, - "phone": "04 67 99 99 80", - "title": "PHARMACIE CIARAMELLA SEGONDY", - "zipcode": "34430" -}, { - "address": "RN7, Quartier Saint-Jean Centre Commercial Saint Jean", - "category": "1", - "city": "BRIGNOLES", - "id": 15027, - "lat": 43.4067, - "lng": 6.048206, - "phone": "04 94 69 00 61", - "title": "PHARMACIE DE PROVENCE", - "zipcode": "83170" -}, { - "address": "ROISSY CHARLES GAULLE ", - "category": "1", - "city": "ROISSY CHARLES DE GAULLE", - "id": 15068, - "lat": 49.0096906, - "lng": 2.5479245, - "phone": "01 48 16 58 58", - "title": "PHARMACIE DU VOYAGE", - "zipcode": "95700" -}, { - "address": "ROND POINT DE LA FOUX 120 CHEMIN COMMUNAL DE LA FOUX", - "category": "2", - "city": "GASSIN", - "id": 15383, - "lat": 43.2624635, - "lng": 6.5798546, - "phone": "04 94 55 24 00", - "title": "CASINO FRANCE ", - "zipcode": "83580" -}, { - "address": "ROND POINT DE LA POSTE", - "category": "2", - "city": "ROYAN", - "id": 17082, - "lat": 45.624857, - "lng": -1.0242293, - "phone": "05 46 05 00 28", - "title": "PHARMACIE DE LA POSTE", - "zipcode": "17200" -}, { - "address": "ROND POINT DU BAGNAS", - "category": "2", - "city": "AGDE", - "id": 19019, - "lat": 43.2967596, - "lng": 3.521553, - "phone": "04 67 26 38 19", - "title": "PHARMACIE NATURE", - "zipcode": "34300" -}, { - "address": "ROND POINT DU TEINCHURIER", - "category": "3", - "city": "BRIVE-LA-GAILLARDE", - "id": 15301, - "lat": 45.145349, - "lng": 1.483251, - "phone": "05 55 86 78 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "19100" -}, { - "address": "ROUTE D AURAY CC FOURCHENE", - "category": "1", - "city": "VANNES", - "id": 15319, - "lat": 47.6586679, - "lng": -2.7918866, - "phone": "02 97 62 17 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "56000" -}, { - "address": "ROUTE D HENNEBONT 78 AVENUE AMBROISE CROIZAT", - "category": "2", - "city": "LANESTER", - "id": 15342, - "lat": 47.7765464, - "lng": -3.3436724, - "phone": "02 97 89 24 00", - "title": "CASINO FRANCE ", - "zipcode": "56600" -}, { - "address": "ROUTE DE BAYONNE", - "category": "2", - "city": "LESCAR", - "id": 15235, - "lat": 43.317652, - "lng": -0.4252075, - "phone": "05 59 77 39 19", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "64230" -}, { - "address": "ROUTE DE BENODET", - "category": "1", - "city": "QUIMPER", - "id": 15340, - "lat": 47.9574736, - "lng": -4.0825478, - "phone": "02 98 10 04 00", - "title": "CASINO FRANCE ", - "zipcode": "29000" -}, { - "address": "ROUTE DE BORDEAUX RN 113", - "category": "2", - "city": "MARMANDE", - "id": 15661, - "lat": 44.509516, - "lng": 0.141322, - "phone": "05 53 20 55 00", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "47200" -}, { - "address": "ROUTE DE BORDEAUX", - "category": "1", - "city": "SERRES-CASTET", - "id": 17388, - "lat": 43.3766773, - "lng": -0.3802912, - "phone": "05 59 33 23 66", - "title": "PHARMACIE DES 4 SAISONS", - "zipcode": "64121" -}, { - "address": "ROUTE DE BRIVE CTRE COM INTER LASCAUX", - "category": "1", - "city": "GLANDON", - "id": 19928, - "lat": 45.495322, - "lng": 1.214544, - "phone": "05 55 70 12 69", - "title": "TANGUY PARAPHARMACIE GLANDON", - "zipcode": "87500" -}, { - "address": "ROUTE DE CARNON CC GRAND SUD", - "category": "3", - "city": "LATTES", - "id": 15264, - "lat": 43.58282, - "lng": 3.928712, - "phone": "04 99 92 27 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "34970" -}, { - "address": "ROUTE DE CLERMONT CTRE CIAL RIOM SUD LOT N 11", - "category": "1", - "city": "MENETROL", - "id": 16084, - "lat": 45.8764416, - "lng": 3.1175829, - "phone": "04 73 38 37 35", - "title": "PHARMACIE BESSON", - "zipcode": "63200" -}, { - "address": "ROUTE DE DOULLENS - RN16 ZAC VALLEE ST LADRE", - "category": "1", - "city": "AMIENS", - "id": 15300, - "lat": 49.9203486, - "lng": 2.3017967, - "phone": "03 22 66 62 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "80000" -}, { - "address": "ROUTE DE LA ROCHELLE", - "category": "3", - "city": "FONTENAY-LE-COMTE", - "id": 15622, - "lat": 46.4524483, - "lng": -0.8041048, - "phone": "02 51 69 19 47", - "title": "PARAPHARMACIE HYPER U", - "zipcode": "85200" -}, { - "address": "ROUTE DE LA VARENNE", - "category": "3", - "city": "SAINT-DENIS-LES-PONTS", - "id": 19197, - "lat": 48.0643894, - "lng": 1.3027194, - "phone": "02 37 45 54 32", - "title": "PHARMACIE PONTOISE", - "zipcode": "28200" -}, { - "address": "ROUTE DE LOUVOIS", - "category": "3", - "city": "CORMONTREUIL", - "id": 15407, - "lat": 49.2119775, - "lng": 4.0510142, - "phone": "03 26 77 66 75", - "title": "CORA PARAPHARMACIE SOLEIL BLEU", - "zipcode": "51350" -}, { - "address": "ROUTE DE MANSLE", - "category": "3", - "city": "SAINT-AMANT-DE-BOIXE", - "id": 18737, - "lat": 45.8052097, - "lng": 0.1398499, - "phone": "05 45 39 72 17", - "title": "PHARMACIE LASSIME", - "zipcode": "16330" -}, { - "address": "ROUTE DE MARSEILLE RES PORTE D AZUR BATIMENT A", - "category": "2", - "city": "BANDOL", - "id": 19201, - "lat": 43.1420674, - "lng": 5.7482628, - "phone": "04 94 29 50 09", - "title": "PHARMACIE PORTE D AZUR", - "zipcode": "83150" -}, { - "address": "ROUTE DE MIRAMAS", - "category": "1", - "city": "SALON-DE-PROVENCE", - "id": 15375, - "lat": 43.6458465, - "lng": 5.0195038, - "phone": "04 90 17 64 00", - "title": "CASINO FRANCE ", - "zipcode": "13300" -}, { - "address": "ROUTE DE MUY CENTRE COMMERCIAL CARREFOUR", - "category": "3", - "city": "SAINTE-MAXIME", - "id": 16536, - "lat": 43.3248422, - "lng": 6.6191213, - "phone": "04 94 43 94 88", - "title": "PHARMACIE COUTIERE-LAMBOU-POLVERELL", - "zipcode": "83120" -}, { - "address": "ROUTE DE PALAVAS AVENUE DU MAS ARGELLIERS", - "category": "2", - "city": "MONTPELLIER", - "id": 15371, - "lat": 43.5895299, - "lng": 3.8927064, - "phone": "04 67 20 34 00", - "title": "CASINO FRANCE ", - "zipcode": "34000" -}, { - "address": "ROUTE DE PARIS ZAC DE LA BEAUJOIRE", - "category": "2", - "city": "NANTES", - "id": 15273, - "lat": 47.2576732, - "lng": -1.5151415, - "phone": "02 51 17 41 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "44000" -}, { - "address": "ROUTE DE PAU CENTRE COMMERCIAL MERIDIEN", - "category": "1", - "city": "IBOS", - "id": 15631, - "lat": 43.2400445, - "lng": 0.0123365, - "phone": "05 62 90 63 93", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "65420" -}, { - "address": "ROUTE DE PENMARCH PENDREFF", - "category": "1", - "city": "PLOMEUR", - "id": 14943, - "lat": 47.8195409, - "lng": -4.2905978, - "phone": "02 98 66 08 88", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "29120" -}, { - "address": "ROUTE DE PERIGUEUX CENTRE CARREFOUR", - "category": "1", - "city": "SOYAUX", - "id": 18705, - "lat": 45.6359413, - "lng": 0.211722, - "phone": "05 45 92 85 62", - "title": "PHARMACIE LAGARDE PIZON SARL", - "zipcode": "16800" -}, { - "address": "ROUTE DE POITIERS C CIAL LES SIVARDIERES", - "category": "2", - "city": "AIRVAULT", - "id": 16173, - "lat": 46.8259367, - "lng": -0.1278238, - "phone": "05 49 64 77 24", - "title": "PHARMACIE BOURDOIS", - "zipcode": "79600" -}, { - "address": "ROUTE DE PONTY", - "category": "1", - "city": "USSEL", - "id": 15676, - "lat": 45.5472063, - "lng": 2.2924105, - "phone": "05 55 46 17 90", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "19200" -}, { - "address": "ROUTE DE SAINT AVIT", - "category": "1", - "city": "GIAT", - "id": 18687, - "lat": 45.806487, - "lng": 2.4707711, - "phone": "04 73 21 71 19", - "title": "PHARMACIE LABONNE MONNERON", - "zipcode": "63620" -}, { - "address": "ROUTE DE SAINT LEU-ZAC NOBEL C COMMERCIAL BIENVENU", - "category": "1", - "city": "VILLETANEUSE", - "id": 19271, - "lat": 48.9496632, - "lng": 2.3443569, - "phone": "01 48 27 82 10", - "title": "PHARMACIE PYRAMIDE", - "zipcode": "93430" -}, { - "address": "ROUTE DE ST CLEMENT", - "category": "3", - "city": "ARS-EN-RE", - "id": 19059, - "lat": 46.2092354, - "lng": -1.5213584, - "phone": "05 46 29 40 03", - "title": "PHARMACIE OCEANE", - "zipcode": "17590" -}, { - "address": "ROUTE DE ST GEORGES D ORQUES", - "category": "2", - "city": "JUVIGNAC", - "id": 19562, - "lat": 43.6115624, - "lng": 3.8061095, - "phone": "04 67 45 37 85", - "title": "PHARMACIE SNC DU SOLEIL", - "zipcode": "34990" -}, { - "address": "ROUTE DE TOULOUSE", - "category": "1", - "city": "GRENADE", - "id": 18479, - "lat": 43.7534261, - "lng": 1.3036541, - "phone": "05 61 21 72 30", - "title": "PHARMACIE GRAND SUD", - "zipcode": "31330" -}, { - "address": "ROUTE DE VANNES CCIAL LECLERC", - "category": "2", - "city": "HENNEBONT", - "id": 16901, - "lat": 47.798092, - "lng": -3.2593583, - "phone": "02 97 36 45 48", - "title": "PHARMACIE DE LA GARDELOUPE", - "zipcode": "56700" -}, { - "address": "ROUTE DE VILLOISON CCIAL VILLABE", - "category": "3", - "city": "VILLABE", - "id": 19844, - "lat": 48.5839109, - "lng": 2.449742, - "phone": "01 60 86 07 85", - "title": "PHARMACIE DU CCIAL VILLABE A6", - "zipcode": "91100" -}, { - "address": "ROUTE DE VOLVIC", - "category": "1", - "city": "ENVAL", - "id": 15535, - "lat": 45.889441, - "lng": 3.070047, - "phone": "04 73 38 98 41", - "title": "LA GDE PHIE DU CTRE COM D'ENVAL", - "zipcode": "63530" -}, { - "address": "ROUTE DEPARTEMENTALE 9 CC LA PIOLINE", - "category": "1", - "city": "LES MILLES", - "id": 15237, - "lat": 43.5083268, - "lng": 5.4075168, - "phone": "04 42 16 91 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "13290" -}, { - "address": "ROUTE DES PETITS PONTS CC BEAU SEVRAN", - "category": "2", - "city": "SEVRAN", - "id": 15284, - "lat": 48.948703, - "lng": 2.526533, - "phone": "01 49 36 79 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "93270" -}, { - "address": "ROUTE DES SABLES CENTRE COMMERCIAL DES JONCS", - "category": "1", - "city": "LA TRANCHE-SUR-MER", - "id": 17645, - "lat": 46.351282, - "lng": -1.429467, - "phone": "02 51 30 38 98", - "title": "PHARMACIE DES TULIPES", - "zipcode": "85360" -}, { - "address": "ROUTE DU MANS", - "category": "1", - "city": "LUCE", - "id": 15349, - "lat": 48.4354042, - "lng": 1.4453875, - "phone": "02 37 91 44 12", - "title": "CASINO FRANCE ", - "zipcode": "28110" -}, { - "address": "ROUTE NAT 3 CTRE COM CARREFOUR", - "category": "1", - "city": "CLAYE-SOUILLY", - "id": 18603, - "lat": 48.94498, - "lng": 2.684166, - "phone": "01 60 27 61 61", - "title": "PHARMACIE JAUGEON", - "zipcode": "77410" -}, { - "address": "ROUTE NATIONALE 113 CENTRE COMMERCIAL CARREFOUR", - "category": "3", - "city": "VITROLLES", - "id": 18481, - "lat": 43.4317791, - "lng": 5.2605218, - "phone": "04 42 46 81 20", - "title": "PHARMACIE GRAND VITROLLES", - "zipcode": "13127" -}, { - "address": "ROUTE NATIONALE 117", - "category": "3", - "city": "ORTHEZ", - "id": 15636, - "lat": 43.5098051, - "lng": -0.8702955, - "phone": "05 59 69 42 22", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "64300" -}, { - "address": "ROUTE NATIONALE 13 CENTRE COMMERCIAL CARREFOUR", - "category": "2", - "city": "GUICHAINVILLE", - "id": 15948, - "lat": 49.013586, - "lng": 1.173343, - "phone": "02 32 33 31 61", - "title": "PHARMACIE ARGENTIN", - "zipcode": "27930" -}, { - "address": "ROUTE NATIONALE 190 CENTRE COMMERCIAL CARREFOUR", - "category": "2", - "city": "LIMAY", - "id": 16054, - "lat": 48.989757, - "lng": 1.7554113, - "phone": "01 34 77 38 03", - "title": "PHARMACIE BENAMRAN", - "zipcode": "78520" -}, { - "address": "ROUTE NATIONALE 31 CENTRE COMMERCIAL MONT SAINT PIERRE", - "category": "2", - "city": "TINQUEUX", - "id": 14885, - "lat": 49.2546991, - "lng": 3.9802158, - "phone": "03 26 78 57 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "51430" -}, { - "address": "ROUTE NATIONALE 4", - "category": "3", - "city": "PONTAULT-COMBAULT", - "id": 15277, - "lat": 48.7747926, - "lng": 2.6079601, - "phone": "01 64 43 48 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "77340" -}, { - "address": "ROUTE NATIONALE 43", - "category": "3", - "city": "NOYELLES-GODAULT", - "id": 14835, - "lat": 50.7350306, - "lng": 1.6743253, - "phone": "03 21 69 83 65", - "title": "AUCHAN ESPACE SANTE BEAUTE", - "zipcode": "62950" -}, { - "address": "ROUTE NATIONALE 51", - "category": "3", - "city": "CHAMPFLEURY", - "id": 15772, - "lat": 49.1991024, - "lng": 4.0132175, - "phone": "03 26 36 33 82", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "51500" -}, { - "address": "ROUTE NATIONALE 6 CENTRE COMMERCIAL PORTE DE LYON", - "category": "2", - "city": "DARDILLY", - "id": 19203, - "lat": 45.8195352, - "lng": 4.7674333, - "phone": "04 78 35 38 53", - "title": "PHARMACIE PORTE DE LYON", - "zipcode": "69570" -}, { - "address": "ROUTE NATIONALE 7", - "category": "1", - "city": "VILLIERS-EN-BIERE", - "id": 14879, - "lat": 48.4916553, - "lng": 2.5861538, - "phone": "01 64 79 56 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "77190" -}, { - "address": "ROUTE NATIONALE 98 LA FOUX", - "category": "1", - "city": "COGOLIN", - "id": 16895, - "lat": 43.2633547, - "lng": 6.580911, - "phone": "04 94 56 05 12", - "title": "PHARMACIE DE LA FOUX", - "zipcode": "83310" -}, { - "address": "RTE DE PERROS GUIREC", - "category": "1", - "city": "LANNION", - "id": 15339, - "lat": 48.7886929, - "lng": -3.4887332, - "phone": "02 96 05 84 00", - "title": "CASINO FRANCE ", - "zipcode": "22300" -}, { - "address": "RUE CLEMENCEAU", - "category": "3", - "city": "WATTIGNIES", - "id": 15614, - "lat": 50.594375, - "lng": 3.0511029, - "phone": "03 20 96 57 70", - "title": "PARAPHARMACIE CORA", - "zipcode": "59139" -}, { - "address": "RUE ALFRED KASTLER CENTRE COMMERCIAL INTERMARCHE", - "category": "1", - "city": "CHECY", - "id": 19639, - "lat": 47.906254, - "lng": 2.036312, - "phone": "02 38 91 15 95", - "title": "PHARMACIE TILLOYE GARAS", - "zipcode": "45430" -}, { - "address": "RUE ANATOLE FRANCE", - "category": "2", - "city": "NAINTRE", - "id": 16420, - "lat": 46.7641529, - "lng": 0.4846263, - "phone": "05 49 90 27 75", - "title": "PHARMACIE CHAMPAGNE FAUX", - "zipcode": "86530" -}, { - "address": "RUE ARISTIDE BOUCICAUT CCIAL LECLERC ZI DU PARC LANN", - "category": "2", - "city": "VANNES", - "id": 18512, - "lat": 47.6677776, - "lng": -2.7934349, - "phone": "02 97 46 54 54", - "title": "PHARMACIE GUILLEROT", - "zipcode": "56000" -}, { - "address": "RUE AUX FLEURS CENTRE COMMERCIAL CHAMFLEURY", - "category": "1", - "city": "VOISINS-LE-BRETONNEUX", - "id": 18602, - "lat": 48.7547642, - "lng": 2.0569502, - "phone": "01 30 43 73 20", - "title": "PHARMACIE JASSERAND SAVILLE", - "zipcode": "78960" -}, { - "address": "RUE BOTTICELLI CENTRE COMMERCIAL CARREFOUR", - "category": "1", - "city": "AMIENS", - "id": 17274, - "lat": 49.9203486, - "lng": 2.3017967, - "phone": "03 22 69 69 00", - "title": "PHARMACIE DE PICARDIE", - "zipcode": "80000" -}, { - "address": "RUE CARNOT", - "category": "1", - "city": "WIMEREUX", - "id": 19501, - "lat": 50.7657804, - "lng": 1.6100339, - "phone": "03 21 32 42 48", - "title": "PHARMACIE SAMARCQ", - "zipcode": "62930" -}, { - "address": "RUE D ARTOIS -C CIAL DU PARC", - "category": "1", - "city": "LESIGNY", - "id": 18059, - "lat": 48.7388269, - "lng": 2.6062818, - "phone": "01 60 02 23 56", - "title": "PHARMACIE DU PARC", - "zipcode": "77150" -}, { - "address": "RUE D ESTAING", - "category": "1", - "city": "MUROL", - "id": 16198, - "lat": 45.5746833, - "lng": 2.9410946, - "phone": "04 73 88 60 42", - "title": "PHARMACIE BRASSIER", - "zipcode": "63790" -}, { - "address": "RUE D OXFORD CENTRE COMMERCIAL D OXFORD", - "category": "3", - "city": "MONTPELLIER", - "id": 16577, - "lat": 43.626714, - "lng": 3.8203861, - "phone": "04 67 75 37 51", - "title": "PHARMACIE D OXFORD", - "zipcode": "34000" -}, { - "address": "RUE DE BELLE EPINE CENTRE COMMERCIAL BOURGCHEVREU", - "category": "1", - "city": "CESSON-SEVIGNE", - "id": 18773, - "lat": 48.1224982, - "lng": -1.5992888, - "phone": "02 99 83 27 76", - "title": "PHARMACIE LEBRET", - "zipcode": "35510" -}, { - "address": "RUE DE L ARGOAT", - "category": "1", - "city": "PLOEMEUR", - "id": 17772, - "lat": 47.7335442, - "lng": -3.4296386, - "phone": "02 97 86 78 69", - "title": "PHARMACIE DU CENTRE", - "zipcode": "56270" -}, { - "address": "RUE DE L AUBEPIN", - "category": "1", - "city": "MILHAUD", - "id": 18378, - "lat": 43.785291, - "lng": 4.303429, - "phone": "04 66 74 31 77", - "title": "PHARMACIE FOURIE", - "zipcode": "30540" -}, { - "address": "RUE DE LA HORIONNE CENTRE COMMERCIAL CARREFOUR", - "category": "2", - "city": "SANNOIS", - "id": 18733, - "lat": 48.964589, - "lng": 2.255526, - "phone": "01 30 25 73 04", - "title": "PHARMACIE LASJUNIES", - "zipcode": "95110" -}, { - "address": "RUE DE LA LIBERATION C CIAL SUPER U", - "category": "2", - "city": "ECOUEN", - "id": 19252, - "lat": 49.027622, - "lng": 2.3694497, - "phone": "01 39 90 07 20", - "title": "PHARMACIE PRINCIPALE", - "zipcode": "95440" -}, { - "address": "RUE DE LA LIBERATION CTE COM ATAC", - "category": "3", - "city": "TOURNAN-EN-BRIE", - "id": 15431, - "lat": 48.7392685, - "lng": 2.7746198, - "phone": "01 64 42 82 24", - "title": "GRANDE PHARMACIE NOUVELLE", - "zipcode": "77220" -}, { - "address": "RUE DE LA MALNOUE CENTRE COMMERCIAL RIVE DROITE", - "category": "3", - "city": "THOUARE-SUR-LOIRE", - "id": 16457, - "lat": 47.2639042, - "lng": -1.4482665, - "phone": "02 40 72 60 69", - "title": "PHARMACIE CHEYMOL", - "zipcode": "44470" -}, { - "address": "RUE DE LA PLAINE ZONE INDUSTRIELLE", - "category": "2", - "city": "CHATEAU-THIERRY", - "id": 15764, - "lat": 49.0378275, - "lng": 3.391318, - "phone": "03 23 84 28 72", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "2400" -}, { - "address": "RUE DE LA REPUBLIQUE", - "category": "1", - "city": "EYGALIERES", - "id": 19670, - "lat": 43.7612608, - "lng": 4.9496479, - "phone": "04 90 95 90 55", - "title": "PHARMACIE URBAINE", - "zipcode": "13810" -}, { - "address": "RUE DE MONTARAN", - "category": "3", - "city": "FLEURY-LES-AUBRAIS", - "id": 15729, - "lat": 47.9443311, - "lng": 1.9163079, - "phone": "02 38 61 43 69", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "45400" -}, { - "address": "RUE DE MONTHETY CENTRE COMMERCIAL CARREFOUR I", - "category": "2", - "city": "PONTAULT-COMBAULT", - "id": 18383, - "lat": 48.7762548, - "lng": 2.6097143, - "phone": "01 60 29 29 30", - "title": "PHARMACIE FRANCILIENNE SELARL", - "zipcode": "77340" -}, { - "address": "RUE DE PIERRE CENTRE COMMERCIAL CARREFOUR", - "category": "3", - "city": "NIORT", - "id": 16721, - "lat": 46.317541, - "lng": -0.482459, - "phone": "05 49 79 00 46", - "title": "PHARMACIE DE L ATLANTIQUE", - "zipcode": "79000" -}, { - "address": "RUE DES CRAYERES", - "category": "2", - "city": "POGNY", - "id": 17024, - "lat": 49.053016, - "lng": 3.9269695, - "phone": "03 26 67 71 24", - "title": "PHARMACIE DE LA MOIVRE", - "zipcode": "51240" -}, { - "address": "RUE DES LAURIERS", - "category": "3", - "city": "NIMES", - "id": 15512, - "lat": 43.816854, - "lng": 4.3522595, - "phone": "04 66 84 30 50", - "title": "GRANDE PHARMACIE VILLE ACTIVE", - "zipcode": "30900" -}, { - "address": "RUE DES LILAS LE BOUCANET", - "category": "2", - "city": "LE GRAU-DU-ROI", - "id": 16162, - "lat": 43.5538701, - "lng": 4.1071782, - "phone": "04 66 51 42 95", - "title": "PHARMACIE BOUCOIRAN", - "zipcode": "30240" -}, { - "address": "RUE DES USINES", - "category": "3", - "city": "FENOUILLET", - "id": 15389, - "lat": 43.6936457, - "lng": 1.4014747, - "phone": "05 61 37 56 00", - "title": "CASINO FRANCE ", - "zipcode": "31150" -}, { - "address": "RUE DESCARTES CHAMBRY", - "category": "1", - "city": "LAON", - "id": 15782, - "lat": 49.589342, - "lng": 3.647713, - "phone": "03 23 27 77 30", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "2000" -}, { - "address": "RUE DESCARTES CHAMBRY", - "category": "2", - "city": "LAON", - "id": 15782, - "lat": 49.589342, - "lng": 3.647713, - "phone": "03 23 27 77 30", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "2000" -}, { - "address": "RUE DU 8 MAI 1945", - "category": "1", - "city": "AMIENS", - "id": 19631, - "lat": 49.8745488, - "lng": 2.3108239, - "phone": "03 22 46 36 49", - "title": "PHARMACIE THOMAS HENOCQ", - "zipcode": "80000" -}, { - "address": "RUE DU COLONEL JEAN MULLER CENTRE COMMERCIAL K2", - "category": "1", - "city": "LORIENT", - "id": 17939, - "lat": 47.7665464, - "lng": -3.3966958, - "phone": "02 97 83 09 66", - "title": "PHARMACIE DU K2", - "zipcode": "56100" -}, { - "address": "RUE DU COMMERCE", - "category": "3", - "city": "CHAURIAT", - "id": 19368, - "lat": 45.7510511, - "lng": 3.2794782, - "phone": "04 73 62 97 13", - "title": "PHARMACIE ROUEL POISSON", - "zipcode": "63117" -}, { - "address": "RUE DU MILLENAIRE", - "category": "3", - "city": "HARLY", - "id": 17867, - "lat": 49.842558, - "lng": 3.3199488, - "phone": "03 23 68 44 24", - "title": "PHARMACIE DU CONTOY", - "zipcode": "2100" -}, { - "address": "RUE DU MURIER CENTRE MAYOL", - "category": "3", - "city": "TOULON", - "id": 15287, - "lat": 43.1201017, - "lng": 5.9369924, - "phone": "04 94 41 97 01", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "83000" -}, { - "address": "RUE DU PARADIS C COMMERCIAL SUPER U", - "category": "2", - "city": "CHATELLERAULT", - "id": 16830, - "lat": 46.797365, - "lng": 0.549297, - "phone": "05 49 21 04 64", - "title": "PHARMACIE DE LA CHEVALERIE", - "zipcode": "86100" -}, { - "address": "RUE EUGENIE COTTON CENTRE COMMERCIAL LE VILLAGE", - "category": "1", - "city": "PERSAN", - "id": 15495, - "lat": 49.151628, - "lng": 2.273692, - "phone": "01 30 34 31 29", - "title": "GRANDE PHARMACIE DU VILLAGE", - "zipcode": "95340" -}, { - "address": "RUE FRANCOIS MITTERRAND", - "category": "2", - "city": "AMPLEPUIS", - "id": 16329, - "lat": 45.972901, - "lng": 4.332454, - "phone": "04 74 89 41 10", - "title": "PHARMACIE CENTRALE", - "zipcode": "69550" -}, { - "address": "RUE GAUTHIER RES MARTIN MARTINE CCIAL ELYSE", - "category": "2", - "city": "CAMBRAI", - "id": 18891, - "lat": 50.1613253, - "lng": 3.2597746, - "phone": "03 27 81 06 29", - "title": "PHARMACIE MARTIN MARTINE", - "zipcode": "59400" -}, { - "address": "RUE GENERAL DE GAULLE", - "category": "2", - "city": "LUNERAY", - "id": 19078, - "lat": 49.8209372, - "lng": 0.9112583, - "phone": "02 35 85 30 12", - "title": "PHARMACIE OUVRY", - "zipcode": "76810" -}, { - "address": "RUE JACQUES CARTIER ZI ATLANTIS MOULIN NEUF", - "category": "1", - "city": "SAINT-HERBLAIN", - "id": 15710, - "lat": 47.2250712, - "lng": -1.6320212, - "phone": "02 40 92 09 10", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "44800" -}, { - "address": "RUE JEAN DE LA FONTAINE", - "category": "2", - "city": "MABLY", - "id": 15296, - "lat": 46.0661547, - "lng": 4.0648463, - "phone": "04 77 44 17 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "42300" -}, { - "address": "RUE JEAN MARIE BIRRIEN", - "category": "2", - "city": "CHATEAUNEUF-DU-FAOU", - "id": 16650, - "lat": 48.1880865, - "lng": -3.8220529, - "phone": "02 98 81 75 44", - "title": "PHARMACIE DE CHATEAUNEUF DU FAOU", - "zipcode": "29520" -}, { - "address": "RUE JEAN MOULIN CENTRE LECLERC", - "category": "2", - "city": "YVETOT", - "id": 15804, - "lat": 49.6123159, - "lng": 0.7726855, - "phone": "02 35 56 19 22", - "title": "PARAPHARMACIE LECLERC PARAMAXDO", - "zipcode": "76190" -}, { - "address": "RUE JULES FERRY", - "category": "3", - "city": "AMBAZAC", - "id": 16158, - "lat": 45.9565472, - "lng": 1.4007909, - "phone": "05 55 56 61 74", - "title": "PHARMACIE BOUCHERON BOURBOULOU", - "zipcode": "87240" -}, { - "address": "RUE JULES GUESDE&RUE INDUSTRIE RESID LE COLOMBIER", - "category": "1", - "city": "GERZAT", - "id": 16067, - "lat": 45.8221105, - "lng": 3.1415627, - "phone": "04 73 24 01 25", - "title": "PHARMACIE BERNADET SELARL", - "zipcode": "63360" -}, { - "address": "RUE LOUIS PASTEUR-C.COM SUPER U", - "category": "2", - "city": "TONNAY-CHARENTE", - "id": 17982, - "lat": 45.9518267, - "lng": -0.896818, - "phone": "05 46 88 70 01", - "title": "PHARMACIE DU MARCHE", - "zipcode": "17430" -}, { - "address": "RUE MICHEL JAZY CTRE COM CONCORDE PLAGE", - "category": "2", - "city": "MARIGNANE", - "id": 17145, - "lat": 43.4209703, - "lng": 5.2053413, - "phone": "04 42 88 29 60", - "title": "PHARMACIE DE LA SIGNORE", - "zipcode": "13700" -}, { - "address": "RUE PAUL LAURENT", - "category": "1", - "city": "SAINT-GILLES", - "id": 15084, - "lat": 43.681715, - "lng": 4.431564, - "phone": "04 66 87 20 81", - "title": "PHARMACIE JOSE LESUR", - "zipcode": "30800" -}, { - "address": "RUE PIERRE MICHAUX", - "category": "1", - "city": "LIMOGES", - "id": 15687, - "lat": 45.871853, - "lng": 1.27055, - "phone": "05 55 38 14 28", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "87280" -}, { - "address": "RUE SAINTE ANNE GALERIE INTERMARCHE", - "category": "1", - "city": "BEAUPREAU", - "id": 18539, - "lat": 47.2037421, - "lng": -0.9749626, - "phone": "02 41 63 00 13", - "title": "PHARMACIE HAVET", - "zipcode": "49600" -}, { - "address": "Rives de l'Aa 2 avenue des frais Fonds", - "category": "2", - "city": "LONGUENESSE", - "id": 14865, - "lat": 50.736061, - "lng": 2.2705, - "phone": "03 21 38 96 69", - "title": "AUCHAN ESPACE SANTE BEAUTE ", - "zipcode": "62219" -}, { - "address": "Route de Vendeville", - "category": "2", - "city": "FACHES-THUMESNIL", - "id": 14862, - "lat": 50.570571, - "lng": 3.0641459, - "phone": "03 20 96 44 94", - "title": "AUCHAN ESPACE SANTE BEAUTE ", - "zipcode": "59155" -}, { - "address": "Rue de la Paix", - "category": "3", - "city": "GIVORS", - "id": 14874, - "lat": 45.5826321, - "lng": 4.7430075, - "phone": "04 72 30 21 79", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "69700" -}, { - "address": "Rue des Plesses", - "category": "2", - "city": "CHATEAU-D'OLONNE", - "id": 15014, - "lat": 46.4914429, - "lng": -1.743675, - "phone": "02 51 95 18 74", - "title": "PHARMACIE DE LA BOUSSOLE", - "zipcode": "85100" -}, { - "address": "S.A.S SEYDIS S.H.O QUARTIER LERY AVENUE JEAN ALBERT LAMARQUE", - "category": "1", - "city": "LA SEYNE-SUR-MER", - "id": 15815, - "lat": 43.108831, - "lng": 5.861592, - "phone": "04 94 11 01 40", - "title": "PARAPHARMACIE LECLERC.", - "zipcode": "83500" -}, { - "address": "SAS PAYS DE REDON DISTRIBUTION AVENUE JEAN BUREL", - "category": "3", - "city": "SAINT-NICOLAS-DE-REDON", - "id": 15716, - "lat": 47.64621, - "lng": -2.0776348, - "phone": "02 99 71 38 22", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "44460" -}, { - "address": "SELARL AGOSTINI ARTIGUES 523 AVENUE DE ROME", - "category": "1", - "city": "LA SEYNE-SUR-MER", - "id": 18308, - "lat": 43.1051703, - "lng": 5.8519276, - "phone": "04 94 94 80 42", - "title": "PHARMACIE ESPACES SANTE", - "zipcode": "83500" -}, { - "address": "SELARL LVMC ZAC LES COGNETS ROUTE DE FOS", - "category": "3", - "city": "ISTRES", - "id": 18854, - "lat": 43.5063756, - "lng": 4.9454874, - "phone": "04 42 56 06 04", - "title": "PHARMACIE LVMC PHIE DU GEANT", - "zipcode": "13800" -}, { - "address": "TASSY", - "category": "2", - "city": "TOURRETTES", - "id": 15059, - "lat": 43.615168, - "lng": 6.718762, - "phone": "04 94 76 10 91", - "title": "PHARMACIE DU PAYS TOURRETTAN", - "zipcode": "83440" -}, { - "address": "TRAVERSE DE LA SABLIERE C.C. GEANT LA VALENTINE", - "category": "2", - "city": "MARSEILLE", - "id": 14548, - "lat": 43.2916987, - "lng": 5.4767582, - "phone": "04 91 35 24 04", - "title": "PHARMACIE DU GEANT LA VALENTINE", - "zipcode": "13011" -}, { - "address": "Z A KERUSCAT BP 27", - "category": "2", - "city": "PLOUDALMEZEAU", - "id": 15583, - "lat": 48.5389678, - "lng": -4.6663655, - "phone": "02 98 38 12 12", - "title": "PARA LECLERC PLOUDAL DISTRIB SAS", - "zipcode": "29830" -}, { - "address": "ZA LES PALUDS FORUM LES ALPILLES", - "category": "2", - "city": "EYGUIERES", - "id": 16229, - "lat": 43.6890823, - "lng": 5.0351743, - "phone": "04 90 57 95 35", - "title": "PHARMACIE BRUNY", - "zipcode": "13430" -}, { - "address": "ZAC DE LA BOISSIERE", - "category": "2", - "city": "MORLAIX", - "id": 15748, - "lat": 48.5889666, - "lng": -3.8153337, - "phone": "02 98 88 03 14", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "29600" -}, { - "address": "ZAC DU GROS GRELOT", - "category": "1", - "city": "THOUROTTE", - "id": 15830, - "lat": 49.4802918, - "lng": 2.8687631, - "phone": "03 44 43 37 44", - "title": "PARAPHARMACIE THOUROTTE", - "zipcode": "60150" -}, { - "address": "ZAC DU TROU GRILLOU ROUTE DE LIEUSAINT", - "category": "2", - "city": "SAINT-PIERRE-DU-PERRAY", - "id": 19633, - "lat": 48.6173304, - "lng": 2.5044811, - "phone": "01 60 75 49 92", - "title": "PHARMACIE THOMELIN", - "zipcode": "91280" -}, { - "address": "ZAC LE DEBUCHER 3 BD DES 4 ARPENTS", - "category": "2", - "city": "ANET", - "id": 16497, - "lat": 48.8617566, - "lng": 1.4601079, - "phone": "02 37 41 46 10", - "title": "PHARMACIE COLSON", - "zipcode": "28260" -}, { - "address": "ZAC LES PORTES DE L ALLIER CTRE COM", - "category": "3", - "city": "AVERMES", - "id": 18247, - "lat": 46.590339, - "lng": 3.332529, - "phone": "04 70 44 53 33", - "title": "PHARMACIE DUC", - "zipcode": "3000" -}, { - "address": "ZAC PENHOAT SALAUN POLE COMMERCIAL QUAI 29", - "category": "2", - "city": "PLEUVEN", - "id": 15727, - "lat": 47.901141, - "lng": -4.0302393, - "phone": "02 98 56 05 67", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "29170" -}, { - "address": "ZAC ROUBAUD CENTRE COMMERCIAL ST JEAN", - "category": "1", - "city": "HYERES", - "id": 15392, - "lat": 43.1155342, - "lng": 6.1073256, - "phone": "04 94 38 04 00", - "title": "CASINO FRANCE ", - "zipcode": "83400" -}, { - "address": "ZI Château Gaillard", - "category": "1", - "city": "BAIN-DE-BRETAGNE", - "id": 15072, - "lat": 47.8537819, - "lng": -1.6811438, - "phone": "02 99 43 70 22", - "title": "PHARMACIE ELY LESCOP", - "zipcode": "35470" -}, { - "address": "ZI DES PRAIRIES IMPASSE DES ARTISANS", - "category": "1", - "city": "FIRMINY", - "id": 15674, - "lat": 45.389152, - "lng": 4.2981542, - "phone": "04 77 40 57 40", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "42700" -}, { - "address": "ZI VALLEE DU GIER CENTRE COMMERCIAL CARREFOUR", - "category": "1", - "city": "GIVORS", - "id": 18270, - "lat": 45.583373, - "lng": 4.749505, - "phone": "04 78 73 15 81", - "title": "PHARMACIE DUMOULIN RUBIN", - "zipcode": "69700" -}, { - "address": "ZONE ACTIVITE DE LA VATINE CENTRE COMMERCIAL CARREFOUR", - "category": "2", - "city": "MONT-SAINT-AIGNAN", - "id": 17179, - "lat": 49.4701046, - "lng": 1.0945009, - "phone": "02 35 59 15 55", - "title": "PHARMACIE DE LA VATINE", - "zipcode": "76130" -}, { - "address": "ZONE ARTISANALE VAL DE BREON", - "category": "3", - "city": "CHATRES", - "id": 14918, - "lat": 48.72849, - "lng": 2.814948, - "phone": "01 75 90 60 01", - "title": "MARIONNAUD LAFAYETTE", - "zipcode": "77610" -}, { - "address": "ZONE COMMERCIALE LA BELLE IDEE ", - "category": "2", - "city": "ROMILLY-SUR-SEINE", - "id": 14965, - "lat": 48.50536, - "lng": 3.763332, - "phone": "03 25 39 58 88", - "title": "PARAPHARMACIE LECLERC SODIROM", - "zipcode": "10100" -}, { - "address": "ZONE D ACTIVITE DE LA GARE", - "category": "2", - "city": "SAINT-REMY-DE-PROVENCE", - "id": 19762, - "lat": 43.794494, - "lng": 4.823465, - "phone": "04 90 92 64 13", - "title": "PHARMACIE XAVIER", - "zipcode": "13210" -}, { - "address": "Zac De Villejames", - "category": "2", - "city": "GUERANDE", - "id": 14940, - "lat": 47.327387, - "lng": -2.4119938, - "phone": "02 40 62 48 48", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "44350" -}, { - "address": "Zone Artisanale KERGUEVILLE", - "category": "2", - "city": "MOELAN-SUR-MER", - "id": 14976, - "lat": 47.811081, - "lng": -3.629917, - "phone": "02 98 39 60 18", - "title": "PHARMACIE BEDAGUE KERVIZIC", - "zipcode": "29350" -}, { - "address": "lieu-dit Vincent RD 562", - "category": "2", - "city": "MONTAUROUX", - "id": 14927, - "lat": 43.606227, - "lng": 6.762009, - "phone": "04 94 60 43 00", - "title": "PARAPHARMACIE LECLERC", - "zipcode": "83440" -}, { - "address": "route Lislet", - "category": "2", - "city": "CHATEAUNEUF-LES-MARTIGUES", - "id": 14888, - "lat": 43.3935819, - "lng": 5.1350686, - "phone": "04 42 13 07 79", - "title": "CARREFOUR FORME ET BEAUTE ", - "zipcode": "13220" -}, { - "address": "route Nationale 13", - "category": "1", - "city": "LE CRES", - "id": 14873, - "lat": 43.6428159, - "lng": 3.9409345, - "phone": "04 67 87 66 66", - "title": "CARREFOUR FORME ET BEAUTE", - "zipcode": "34920" -}] \ No newline at end of file diff --git a/functions/package-lock.json b/functions/package-lock.json deleted file mode 100644 index 71710f20..00000000 --- a/functions/package-lock.json +++ /dev/null @@ -1,11078 +0,0 @@ -{ - "name": "storelocatorjs-functions", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "storelocatorjs-functions", - "version": "1.0.0", - "devDependencies": { - "cors": "2.8.5", - "express": "4.17.1", - "nodemon": "^3.0.1", - "vercel": "^31.0.2" - }, - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz", - "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.8.tgz", - "integrity": "sha512-75+KxFB4CZqYRXjx4NlR4J7yGvKumBuZTmV4NV6v09dVXXkuYVYLT68N6HCzLvfJ+fWCxQsntNzKwwIXL4bHnw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/generator": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.7.tgz", - "integrity": "sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz", - "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-validator-option": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.6.tgz", - "integrity": "sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@nicolo-ribaudo/semver-v6": "^6.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.6.tgz", - "integrity": "sha512-nBookhLKxAWo/TUCmhnaEJyLz2dekjQvv5SRpE9epWQBcpedWLKt8aZdsuT9XV5ovzR3fENLjRXVT0GsSlGGhA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "regexpu-core": "^5.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz", - "integrity": "sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", - "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", - "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz", - "integrity": "sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.7.tgz", - "integrity": "sha512-1whfDtW+CzhETuzYXfcgZAh8/GFMeEbz0V5dVgya8YeJyCU6Y/P2Gnx4Qb3MylK68Zu9UiwUvbPMPTpFAOJ+sQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.7", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.6", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", - "core-js-compat": "^3.31.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz", - "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-typescript": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", - "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.4" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@edge-runtime/format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@edge-runtime/format/-/format-2.1.0.tgz", - "integrity": "sha512-gc2qbYEIIJRczBApBPznVI1c5vZgzrZQOsFZnAxxFiYah9qldHiu1YEitzSvXI8X8ZgvAguuIiyIbpWz17nlXA==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@edge-runtime/node-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@edge-runtime/node-utils/-/node-utils-2.0.3.tgz", - "integrity": "sha512-JUSbi5xu/A8+D2t9B9wfirCI1J8n8q0660FfmqZgA+n3RqxD3y7SnamL1sKRE5/AbHsKs9zcqCbK2YDklbc9Bg==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@edge-runtime/primitives": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@edge-runtime/primitives/-/primitives-2.1.2.tgz", - "integrity": "sha512-SR04SMDybALlhIYIi0hiuEUwIl0b7Sn+RKwQkX6hydg4+AKMzBNDFhj2nqHDD1+xkHArV9EhmJIb6iGjShwSzg==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@edge-runtime/vm": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@edge-runtime/vm/-/vm-3.0.1.tgz", - "integrity": "sha512-69twXLIcqVx0iNlc1vFqnXgka2CZi2c/QBAmMzXBk0M6mPG+ICCBh2dd+cv1K+HW2pfLuSW+EskkFXWGeCf1Vw==", - "dev": true, - "dependencies": { - "@edge-runtime/primitives": "3.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@edge-runtime/vm/node_modules/@edge-runtime/primitives": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@edge-runtime/primitives/-/primitives-3.0.1.tgz", - "integrity": "sha512-l5NNDcPkKW4N6qRmB8zzpCF6uRW1S808V/zm72z7b/aWwZUYbmEPPkzyhGAW0aQxLU1pGdZ8u2gNjamdaU6RXw==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@emotion/hash": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", - "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==", - "dev": true - }, - "node_modules/@esbuild/android-arm": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.6.tgz", - "integrity": "sha512-bSC9YVUjADDy1gae8RrioINU6e1lCkg3VGVwm0QQ2E1CWcC4gnMce9+B6RpxuSsrsXsk1yojn7sp1fnG8erE2g==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.6.tgz", - "integrity": "sha512-YnYSCceN/dUzUr5kdtUzB+wZprCafuD89Hs0Aqv9QSdwhYQybhXTaSTcrl6X/aWThn1a/j0eEpUBGOE7269REg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.6.tgz", - "integrity": "sha512-MVcYcgSO7pfu/x34uX9u2QIZHmXAB7dEiLQC5bBl5Ryqtpj9lT2sg3gNDEsrPEmimSJW2FXIaxqSQ501YLDsZQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.6.tgz", - "integrity": "sha512-bsDRvlbKMQMt6Wl08nHtFz++yoZHsyTOxnjfB2Q95gato+Yi4WnRl13oC2/PJJA9yLCoRv9gqT/EYX0/zDsyMA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.6.tgz", - "integrity": "sha512-xh2A5oPrYRfMFz74QXIQTQo8uA+hYzGWJFoeTE8EvoZGHb+idyV4ATaukaUvnnxJiauhs/fPx3vYhU4wiGfosg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.6.tgz", - "integrity": "sha512-EnUwjRc1inT4ccZh4pB3v1cIhohE2S4YXlt1OvI7sw/+pD+dIE4smwekZlEPIwY6PhU6oDWwITrQQm5S2/iZgg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.6.tgz", - "integrity": "sha512-Uh3HLWGzH6FwpviUcLMKPCbZUAFzv67Wj5MTwK6jn89b576SR2IbEp+tqUHTr8DIl0iDmBAf51MVaP7pw6PY5Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.6.tgz", - "integrity": "sha512-7YdGiurNt7lqO0Bf/U9/arrPWPqdPqcV6JCZda4LZgEn+PTQ5SMEI4MGR52Bfn3+d6bNEGcWFzlIxiQdS48YUw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.6.tgz", - "integrity": "sha512-bUR58IFOMJX523aDVozswnlp5yry7+0cRLCXDsxnUeQYJik1DukMY+apBsLOZJblpH+K7ox7YrKrHmJoWqVR9w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.6.tgz", - "integrity": "sha512-ujp8uoQCM9FRcbDfkqECoARsLnLfCUhKARTP56TFPog8ie9JG83D5GVKjQ6yVrEVdMie1djH86fm98eY3quQkQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.6.tgz", - "integrity": "sha512-y2NX1+X/Nt+izj9bLoiaYB9YXT/LoaQFYvCkVD77G/4F+/yuVXYCWz4SE9yr5CBMbOxOfBcy/xFL4LlOeNlzYQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.6.tgz", - "integrity": "sha512-09AXKB1HDOzXD+j3FdXCiL/MWmZP0Ex9eR8DLMBVcHorrWJxWmY8Nms2Nm41iRM64WVx7bA/JVHMv081iP2kUA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.6.tgz", - "integrity": "sha512-AmLhMzkM8JuqTIOhxnX4ubh0XWJIznEynRnZAVdA2mMKE6FAfwT2TWKTwdqMG+qEaeyDPtfNoZRpJbD4ZBv0Tg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.6.tgz", - "integrity": "sha512-Y4Ri62PfavhLQhFbqucysHOmRamlTVK10zPWlqjNbj2XMea+BOs4w6ASKwQwAiqf9ZqcY9Ab7NOU4wIgpxwoSQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.6.tgz", - "integrity": "sha512-SPUiz4fDbnNEm3JSdUW8pBJ/vkop3M1YwZAVwvdwlFLoJwKEZ9L98l3tzeyMzq27CyepDQ3Qgoba44StgbiN5Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.6.tgz", - "integrity": "sha512-a3yHLmOodHrzuNgdpB7peFGPx1iJ2x6m+uDvhP2CKdr2CwOaqEFMeSqYAHU7hG+RjCq8r2NFujcd/YsEsFgTGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.6.tgz", - "integrity": "sha512-EanJqcU/4uZIBreTrnbnre2DXgXSa+Gjap7ifRfllpmyAU7YMvaXmljdArptTHmjrkkKm9BK6GH5D5Yo+p6y5A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.6.tgz", - "integrity": "sha512-xaxeSunhQRsTNGFanoOkkLtnmMn5QbA0qBhNet/XLVsc+OVkpIWPHcr3zTW2gxVU5YOHFbIHR9ODuaUdNza2Vw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.6.tgz", - "integrity": "sha512-gnMnMPg5pfMkZvhHee21KbKdc6W3GR8/JuE0Da1kjwpK6oiFU3nqfHuVPgUX2rsOx9N2SadSQTIYV1CIjYG+xw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.6.tgz", - "integrity": "sha512-G95n7vP1UnGJPsVdKXllAJPtqjMvFYbN20e8RK8LVLhlTiSOH1sd7+Gt7rm70xiG+I5tM58nYgwWrLs6I1jHqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.6.tgz", - "integrity": "sha512-96yEFzLhq5bv9jJo5JhTs1gI+1cKQ83cUpyxHuGqXVwQtY5Eq54ZEsKs8veKtiKwlrNimtckHEkj4mRh4pPjsg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.6.tgz", - "integrity": "sha512-n6d8MOyUrNp6G4VSpRcgjs5xj4A91svJSaiwLIDWVWEsZtpN5FA9NlBbZHDmAJc2e8e6SF4tkBD3HAvPF+7igA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jspm/core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@jspm/core/-/core-2.0.1.tgz", - "integrity": "sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==", - "dev": true - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", - "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", - "dev": true, - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@nicolo-ribaudo/semver-v6": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", - "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/package-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz", - "integrity": "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^2.3.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@remix-run/dev": { - "name": "@vercel/remix-run-dev", - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@vercel/remix-run-dev/-/remix-run-dev-1.18.1.tgz", - "integrity": "sha512-V9RCT+3VDB0wLbwq8Dp0XO6Cc1LxY4tCyxJ5loyX0L8sPBCgQ3/vMre3VKr8jLhjnfUGSrbXADxFM8/bq4ZeDQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.21.8", - "@babel/generator": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/plugin-syntax-jsx": "^7.21.4", - "@babel/plugin-syntax-typescript": "^7.21.4", - "@babel/preset-env": "^7.21.5", - "@babel/preset-typescript": "^7.21.5", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", - "@npmcli/package-json": "^2.0.0", - "@remix-run/server-runtime": "1.18.1", - "@vanilla-extract/integration": "^6.2.0", - "arg": "^5.0.1", - "cacache": "^15.0.5", - "chalk": "^4.1.2", - "chokidar": "^3.5.1", - "dotenv": "^16.0.0", - "esbuild": "0.17.6", - "esbuild-plugins-node-modules-polyfill": "^1.0.16", - "execa": "5.1.1", - "exit-hook": "2.2.1", - "express": "^4.17.1", - "fast-glob": "3.2.11", - "fs-extra": "^10.0.0", - "get-port": "^5.1.1", - "gunzip-maybe": "^1.4.2", - "inquirer": "^8.2.1", - "jsesc": "3.0.2", - "json5": "^2.2.2", - "lodash": "^4.17.21", - "lodash.debounce": "^4.0.8", - "minimatch": "^9.0.0", - "node-fetch": "^2.6.9", - "ora": "^5.4.1", - "picocolors": "^1.0.0", - "picomatch": "^2.3.1", - "pidtree": "^0.6.0", - "postcss": "^8.4.19", - "postcss-discard-duplicates": "^5.1.0", - "postcss-load-config": "^4.0.1", - "postcss-modules": "^6.0.0", - "prettier": "^2.7.1", - "pretty-ms": "^7.0.1", - "proxy-agent": "^5.0.0", - "react-refresh": "^0.14.0", - "recast": "^0.21.5", - "remark-frontmatter": "4.0.1", - "remark-mdx-frontmatter": "^1.0.1", - "semver": "^7.3.7", - "sort-package-json": "^1.55.0", - "tar-fs": "^2.1.1", - "tsconfig-paths": "^4.0.0", - "ws": "^7.4.5", - "xdm": "^2.0.0" - }, - "bin": { - "remix": "dist/cli.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@remix-run/serve": "^1.18.1" - }, - "peerDependenciesMeta": { - "@remix-run/serve": { - "optional": true - } - } - }, - "node_modules/@remix-run/dev/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@remix-run/dev/node_modules/esbuild": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.6.tgz", - "integrity": "sha512-TKFRp9TxrJDdRWfSsSERKEovm6v30iHnrjlcGhLBOtReE28Yp1VSBRfO3GTaOFMoxsNerx4TjrhzSuma9ha83Q==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.6", - "@esbuild/android-arm64": "0.17.6", - "@esbuild/android-x64": "0.17.6", - "@esbuild/darwin-arm64": "0.17.6", - "@esbuild/darwin-x64": "0.17.6", - "@esbuild/freebsd-arm64": "0.17.6", - "@esbuild/freebsd-x64": "0.17.6", - "@esbuild/linux-arm": "0.17.6", - "@esbuild/linux-arm64": "0.17.6", - "@esbuild/linux-ia32": "0.17.6", - "@esbuild/linux-loong64": "0.17.6", - "@esbuild/linux-mips64el": "0.17.6", - "@esbuild/linux-ppc64": "0.17.6", - "@esbuild/linux-riscv64": "0.17.6", - "@esbuild/linux-s390x": "0.17.6", - "@esbuild/linux-x64": "0.17.6", - "@esbuild/netbsd-x64": "0.17.6", - "@esbuild/openbsd-x64": "0.17.6", - "@esbuild/sunos-x64": "0.17.6", - "@esbuild/win32-arm64": "0.17.6", - "@esbuild/win32-ia32": "0.17.6", - "@esbuild/win32-x64": "0.17.6" - } - }, - "node_modules/@remix-run/dev/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@remix-run/router": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.1.tgz", - "integrity": "sha512-bgVQM4ZJ2u2CM8k1ey70o1ePFXsEzYVZoWghh6WjM8p59jQ7HxzbHW4SbnWFG7V9ig9chLawQxDTZ3xzOF8MkQ==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@remix-run/server-runtime": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-1.18.1.tgz", - "integrity": "sha512-E0sQlgUQG2ytFmUH7zRH7n2MufnP6WWWq1KpRoiuwJZxfTFIzaiCCIiNqbP/uXGWDGcwEevpawNUzzszL1tT0w==", - "dev": true, - "dependencies": { - "@remix-run/router": "1.7.1", - "@types/cookie": "^0.4.1", - "@web3-storage/multipart-parser": "^1.0.0", - "cookie": "^0.4.1", - "set-cookie-parser": "^2.4.8", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@remix-run/server-runtime/node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", - "dev": true - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@ts-morph/common": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.11.1.tgz", - "integrity": "sha512-7hWZS0NRpEsNV8vWJzg7FEz6V8MaLNeJOmwmghqUXTpzk16V1LLZhdo+4QvE/+zv4cVci0OviuJFnqhEfoV3+g==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.7", - "minimatch": "^3.0.4", - "mkdirp": "^1.0.4", - "path-browserify": "^1.0.1" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "node_modules/@types/debug": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", - "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", - "dev": true, - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true - }, - "node_modules/@types/estree-jsx": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-0.0.1.tgz", - "integrity": "sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/hast": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.5.tgz", - "integrity": "sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg==", - "dev": true, - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mdast": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", - "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", - "dev": true, - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "14.18.33", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.33.tgz", - "integrity": "sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==", - "dev": true - }, - "node_modules/@types/node-fetch": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.3.tgz", - "integrity": "sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/unist": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", - "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==", - "dev": true - }, - "node_modules/@vanilla-extract/babel-plugin-debug-ids": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.0.3.tgz", - "integrity": "sha512-vm4jYu1xhSa6ofQ9AhIpR3DkAp4c+eoR1Rpm8/TQI4DmWbmGbOjYRcqV0aWsfaIlNhN4kFuxFMKBNN9oG6iRzA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.20.7" - } - }, - "node_modules/@vanilla-extract/css": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.12.0.tgz", - "integrity": "sha512-TEttZfnqTRtwgVYiBWQSGGUiVaYWReHp59DsavITEvh4TpJNifZFGhBznHx4wQFEsyio6xA513jps4tmqR6zmw==", - "dev": true, - "dependencies": { - "@emotion/hash": "^0.9.0", - "@vanilla-extract/private": "^1.0.3", - "ahocorasick": "1.0.2", - "chalk": "^4.1.1", - "css-what": "^6.1.0", - "cssesc": "^3.0.0", - "csstype": "^3.0.7", - "deep-object-diff": "^1.1.9", - "deepmerge": "^4.2.2", - "media-query-parser": "^2.0.2", - "outdent": "^0.8.0" - } - }, - "node_modules/@vanilla-extract/integration": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@vanilla-extract/integration/-/integration-6.2.1.tgz", - "integrity": "sha512-+xYJz07G7TFAMZGrOqArOsURG+xcYvqctujEkANjw2McCBvGEK505RxQqOuNiA9Mi9hgGdNp2JedSa94f3eoLg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.20.7", - "@babel/plugin-syntax-typescript": "^7.20.0", - "@vanilla-extract/babel-plugin-debug-ids": "^1.0.2", - "@vanilla-extract/css": "^1.10.0", - "esbuild": "0.17.6", - "eval": "0.1.6", - "find-up": "^5.0.0", - "javascript-stringify": "^2.0.1", - "lodash": "^4.17.21", - "mlly": "^1.1.0", - "outdent": "^0.8.0", - "vite": "^4.1.4", - "vite-node": "^0.28.5" - } - }, - "node_modules/@vanilla-extract/integration/node_modules/esbuild": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.6.tgz", - "integrity": "sha512-TKFRp9TxrJDdRWfSsSERKEovm6v30iHnrjlcGhLBOtReE28Yp1VSBRfO3GTaOFMoxsNerx4TjrhzSuma9ha83Q==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.6", - "@esbuild/android-arm64": "0.17.6", - "@esbuild/android-x64": "0.17.6", - "@esbuild/darwin-arm64": "0.17.6", - "@esbuild/darwin-x64": "0.17.6", - "@esbuild/freebsd-arm64": "0.17.6", - "@esbuild/freebsd-x64": "0.17.6", - "@esbuild/linux-arm": "0.17.6", - "@esbuild/linux-arm64": "0.17.6", - "@esbuild/linux-ia32": "0.17.6", - "@esbuild/linux-loong64": "0.17.6", - "@esbuild/linux-mips64el": "0.17.6", - "@esbuild/linux-ppc64": "0.17.6", - "@esbuild/linux-riscv64": "0.17.6", - "@esbuild/linux-s390x": "0.17.6", - "@esbuild/linux-x64": "0.17.6", - "@esbuild/netbsd-x64": "0.17.6", - "@esbuild/openbsd-x64": "0.17.6", - "@esbuild/sunos-x64": "0.17.6", - "@esbuild/win32-arm64": "0.17.6", - "@esbuild/win32-ia32": "0.17.6", - "@esbuild/win32-x64": "0.17.6" - } - }, - "node_modules/@vanilla-extract/private": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.3.tgz", - "integrity": "sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ==", - "dev": true - }, - "node_modules/@vercel/build-utils": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/@vercel/build-utils/-/build-utils-6.8.1.tgz", - "integrity": "sha512-Mydqg+6tAct33j3d3fjSQ9DJj1dsaAuY07glwzGf1NKGMqbfReeZmPl9VcAJ1CBsCBeM4NfJEioS91qK2mcqJA==", - "dev": true - }, - "node_modules/@vercel/error-utils": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@vercel/error-utils/-/error-utils-1.0.10.tgz", - "integrity": "sha512-nsKy2sy+pjUWyKI1V/XXKspVzHMYgSalmj5+EsKWFXZbnNZicqxNtMR94J8Hs7SB4TQxh0s4KhczJtL59AVGMg==", - "dev": true - }, - "node_modules/@vercel/gatsby-plugin-vercel-analytics": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-analytics/-/gatsby-plugin-vercel-analytics-1.0.10.tgz", - "integrity": "sha512-v329WHdtIce+y7oAmaWRvEx59Xfo0FxlQqK4BJG0u6VWYoKWPaflohDAiehIZf/YHCRVb59ZxnzmMOcm/LR8YQ==", - "dev": true, - "dependencies": { - "@babel/runtime": "7.12.1", - "web-vitals": "0.2.4" - } - }, - "node_modules/@vercel/gatsby-plugin-vercel-builder": { - "version": "1.3.12", - "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-builder/-/gatsby-plugin-vercel-builder-1.3.12.tgz", - "integrity": "sha512-9xvDsqxiPAdlO4eSwlhDZHoBb1XZwZ5KI7VtdUx31FoRTJy1mwd5dKmwLUWQF1Yc5WU7CTyaZ8n4fxiMJxUpSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "0.25.24", - "@vercel/build-utils": "6.8.1", - "@vercel/node": "2.15.4", - "@vercel/routing-utils": "2.2.1", - "esbuild": "0.14.47", - "etag": "1.8.1", - "fs-extra": "11.1.0" - } - }, - "node_modules/@vercel/gatsby-plugin-vercel-builder/node_modules/fs-extra": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", - "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@vercel/go": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@vercel/go/-/go-2.5.1.tgz", - "integrity": "sha512-yZGzzGmVXt2Rsy1cR0EDbst0fMhdELQY8c3jXy6/FTWJFG1e/40JYksu+WiRCxRBp8e7zfcxMrv0dN8JWRmbPQ==", - "dev": true - }, - "node_modules/@vercel/hydrogen": { - "version": "0.0.64", - "resolved": "https://registry.npmjs.org/@vercel/hydrogen/-/hydrogen-0.0.64.tgz", - "integrity": "sha512-1rzFB664G6Yzp7j4ezW9hvVjqnaU2BhyUdhchbsxtRuxkMpGgPBZKhjzRQHFvlmkz37XLC658T5Nb1P91b4sBw==", - "dev": true - }, - "node_modules/@vercel/next": { - "version": "3.8.8", - "resolved": "https://registry.npmjs.org/@vercel/next/-/next-3.8.8.tgz", - "integrity": "sha512-h/TcVnrjnRrxkgTod80Wpy9Lo2k+DCpsNtRX+G0tJ8q8/WxMucQQ0dLv0t3J5vwmypowPzYzK5kKSfrewQVMxg==", - "dev": true - }, - "node_modules/@vercel/nft": { - "version": "0.22.5", - "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.22.5.tgz", - "integrity": "sha512-mug57Wd1BL7GMj9gXMgMeKUjdqO0e4u+0QLPYMFE1rwdJ+55oPy6lp3nIBCS8gOvigT62UI4QKUL2sGqcoW4Hw==", - "dev": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.5", - "@rollup/pluginutils": "^4.0.0", - "acorn": "^8.6.0", - "async-sema": "^3.1.1", - "bindings": "^1.4.0", - "estree-walker": "2.0.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.2", - "node-gyp-build": "^4.2.2", - "resolve-from": "^5.0.0" - }, - "bin": { - "nft": "out/cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@vercel/node": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/@vercel/node/-/node-2.15.4.tgz", - "integrity": "sha512-lJ0KytaD4dEpNd0YpGxIYaS35MINdpTI5r2H0AveTen7M0NDUkBx9+sElvIZKFDRVP0mQINSUbllKYD7QT1mUA==", - "dev": true, - "dependencies": { - "@edge-runtime/node-utils": "2.0.3", - "@edge-runtime/primitives": "2.1.2", - "@edge-runtime/vm": "3.0.1", - "@types/node": "14.18.33", - "@types/node-fetch": "2.6.3", - "@vercel/build-utils": "6.8.1", - "@vercel/error-utils": "1.0.10", - "@vercel/static-config": "2.0.17", - "async-listen": "3.0.0", - "edge-runtime": "2.4.3", - "esbuild": "0.14.47", - "exit-hook": "2.2.1", - "node-fetch": "2.6.9", - "path-to-regexp": "6.2.1", - "ts-morph": "12.0.0", - "ts-node": "10.9.1", - "typescript": "4.9.5" - } - }, - "node_modules/@vercel/node/node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", - "dev": true - }, - "node_modules/@vercel/python": { - "version": "3.1.60", - "resolved": "https://registry.npmjs.org/@vercel/python/-/python-3.1.60.tgz", - "integrity": "sha512-1aYinyTfejS8Us+sOum+RQPYcre0vF3XoL7ohL170ZCcHA0l35qV0b1slGAmLt3pqaHKYy3g/nkzUhuR8XXIrQ==", - "dev": true - }, - "node_modules/@vercel/redwood": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@vercel/redwood/-/redwood-1.1.15.tgz", - "integrity": "sha512-j0XaXe4ZpGVHG7XQSmZ3kza6s+ZtOBfRhnSxA70yCkrvPNN3tZgF3fevSKXizfL9fzVDd7Tdj++SCGWMdGfsyA==", - "dev": true, - "dependencies": { - "@vercel/nft": "0.22.5", - "@vercel/routing-utils": "2.2.1", - "semver": "6.1.1" - } - }, - "node_modules/@vercel/redwood/node_modules/semver": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", - "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@vercel/remix-builder": { - "version": "1.8.16", - "resolved": "https://registry.npmjs.org/@vercel/remix-builder/-/remix-builder-1.8.16.tgz", - "integrity": "sha512-yf4FyecPPa2WCBMrd46Urm2XuGL82SqQVUYe99RSYYEgj18mK2Wez7R2uba/EHrxUGh0gB1gM82gWrUOTuT6cQ==", - "dev": true, - "dependencies": { - "@remix-run/dev": "npm:@vercel/remix-run-dev@1.18.1", - "@vercel/build-utils": "6.8.1", - "@vercel/nft": "0.22.5", - "@vercel/static-config": "2.0.17", - "path-to-regexp": "6.2.1", - "semver": "7.3.8", - "ts-morph": "12.0.0" - } - }, - "node_modules/@vercel/remix-builder/node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", - "dev": true - }, - "node_modules/@vercel/remix-builder/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@vercel/routing-utils": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@vercel/routing-utils/-/routing-utils-2.2.1.tgz", - "integrity": "sha512-kzMZsvToDCDskNRZD71B9UAgstec7ujmlGH8cBEo6F/07VaFeji6GQdgd6Zwnrj+TvzQBggKoPQR64VkVY8Lzw==", - "dev": true, - "dependencies": { - "path-to-regexp": "6.1.0" - }, - "optionalDependencies": { - "ajv": "^6.0.0" - } - }, - "node_modules/@vercel/routing-utils/node_modules/path-to-regexp": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.1.0.tgz", - "integrity": "sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw==", - "dev": true - }, - "node_modules/@vercel/ruby": { - "version": "1.3.76", - "resolved": "https://registry.npmjs.org/@vercel/ruby/-/ruby-1.3.76.tgz", - "integrity": "sha512-J8I0B7wAn8piGoPhBroBfJWgMEJTMEL/2o8MCoCyWdaE7MRtpXhI10pj8IvcUvAECoGJ+SM1Pm+SvBqtbtZ5FQ==", - "dev": true - }, - "node_modules/@vercel/static-build": { - "version": "1.3.39", - "resolved": "https://registry.npmjs.org/@vercel/static-build/-/static-build-1.3.39.tgz", - "integrity": "sha512-OtYr8fKFNAlIHsO0Cfu8OpWTI2BS3f+jmy9Pc2r6XyDZoay0eZYHk4G090gdUqyQxNUSj91/Bk6qUqfk3Lm84Q==", - "dev": true, - "dependencies": { - "@vercel/gatsby-plugin-vercel-analytics": "1.0.10", - "@vercel/gatsby-plugin-vercel-builder": "1.3.12" - } - }, - "node_modules/@vercel/static-config": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@vercel/static-config/-/static-config-2.0.17.tgz", - "integrity": "sha512-2f50OTVrN07x7pH+XNW0e7cj7T+Ufg+19+a2N3/XZBjQmV+FaMlmSLiaQ4tBxp2H8lWWHzENua7ZSSQPtRZ3/A==", - "dev": true, - "dependencies": { - "ajv": "8.6.3", - "json-schema-to-ts": "1.6.4", - "ts-morph": "12.0.0" - } - }, - "node_modules/@vercel/static-config/node_modules/ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@vercel/static-config/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/@web3-storage/multipart-parser": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz", - "integrity": "sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ahocorasick": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ahocorasick/-/ahocorasick-1.0.2.tgz", - "integrity": "sha512-hCOfMzbFx5IDutmWLAt6MZwOUjIfSM9G9FyVxytmE4Rs/5YDPWQrD/+IR1w+FweD9H2oOZEnv36TmkjhNURBVA==", - "dev": true - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "optional": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "dev": true, - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/astring": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", - "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==", - "dev": true, - "bin": { - "astring": "bin/astring" - } - }, - "node_modules/async-listen": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/async-listen/-/async-listen-3.0.0.tgz", - "integrity": "sha512-V+SsTpDqkrWTimiotsyl33ePSjA5/KrithwupuvJ6ztsqPvGv6ge4OredFhPffVXiLN/QUWvE0XcqJaYgt6fOg==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/async-sema": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", - "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz", - "integrity": "sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.1", - "@nicolo-ribaudo/semver-v6": "^6.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz", - "integrity": "sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.1", - "core-js-compat": "^3.31.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz", - "integrity": "sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==", - "dev": true, - "dependencies": { - "pako": "~0.2.0" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true, - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001515", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz", - "integrity": "sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/code-block-writer": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-10.1.1.tgz", - "integrity": "sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-hrtime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-3.0.0.tgz", - "integrity": "sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/core-js-compat": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", - "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.9" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true - }, - "node_modules/data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/deasync": { - "version": "0.1.28", - "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.28.tgz", - "integrity": "sha512-QqLF6inIDwiATrfROIyQtwOQxjZuek13WRYZ7donU5wJPLoP67MnYxA6QtqdvdBy2mMqv5m3UefBVdJjvevOYg==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "dependencies": { - "bindings": "^1.5.0", - "node-addon-api": "^1.7.1" - }, - "engines": { - "node": ">=0.11.0" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "dev": true, - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deep-object-diff": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.9.tgz", - "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/degenerator": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.4.tgz", - "integrity": "sha512-Z66uPeBfHZAHVmue3HPfyKu2Q0rC2cRxbTOsvmU/po5fvvcx27W4mIu9n0PUlQih4oUYvcG1BsbtVv8x7KDOSw==", - "dev": true, - "dependencies": { - "ast-types": "^0.13.2", - "escodegen": "^1.8.1", - "esprima": "^4.0.0", - "vm2": "^3.9.17" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", - "dev": true - }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/duplexify/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/edge-runtime": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/edge-runtime/-/edge-runtime-2.4.3.tgz", - "integrity": "sha512-Amv/P+OJhxopvoVXFr7UXAKheBpdLeCcdR5Vw4GSdNFDWVny9sioQbczjEKPLER5WsMXl17P+llS011Xftducw==", - "dev": true, - "dependencies": { - "@edge-runtime/format": "2.1.0", - "@edge-runtime/vm": "3.0.3", - "async-listen": "3.0.0", - "mri": "1.2.0", - "picocolors": "1.0.0", - "pretty-bytes": "5.6.0", - "pretty-ms": "7.0.1", - "signal-exit": "4.0.2", - "time-span": "4.0.0" - }, - "bin": { - "edge-runtime": "dist/cli/index.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/edge-runtime/node_modules/@edge-runtime/primitives": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@edge-runtime/primitives/-/primitives-3.0.3.tgz", - "integrity": "sha512-YnfMWMRQABAH8IsnFMJWMW+SyB4ZeYBPnR7V0aqdnew7Pq60cbH5DyFjS/FhiLwvHQk9wBREmXD7PP0HooEQ1A==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/edge-runtime/node_modules/@edge-runtime/vm": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@edge-runtime/vm/-/vm-3.0.3.tgz", - "integrity": "sha512-SPfI1JeIRNs/4EEE2Oc0X6gG3RqjD1TnKu2lwmwFXq0435xgZGKhc3UiKkYAdoMn2dNFD73nlabMKHBRoMRpxg==", - "dev": true, - "dependencies": { - "@edge-runtime/primitives": "3.0.3" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.456", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.456.tgz", - "integrity": "sha512-d+eSL4mT9m72cnDT/kfQj6Pv6Cid4pUVlLOl8esm2SZuXBgtXtUyvCfc9F++GHLWLoY4gMNqg+0IVAoQ3sosKA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/esbuild": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz", - "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "esbuild-android-64": "0.14.47", - "esbuild-android-arm64": "0.14.47", - "esbuild-darwin-64": "0.14.47", - "esbuild-darwin-arm64": "0.14.47", - "esbuild-freebsd-64": "0.14.47", - "esbuild-freebsd-arm64": "0.14.47", - "esbuild-linux-32": "0.14.47", - "esbuild-linux-64": "0.14.47", - "esbuild-linux-arm": "0.14.47", - "esbuild-linux-arm64": "0.14.47", - "esbuild-linux-mips64le": "0.14.47", - "esbuild-linux-ppc64le": "0.14.47", - "esbuild-linux-riscv64": "0.14.47", - "esbuild-linux-s390x": "0.14.47", - "esbuild-netbsd-64": "0.14.47", - "esbuild-openbsd-64": "0.14.47", - "esbuild-sunos-64": "0.14.47", - "esbuild-windows-32": "0.14.47", - "esbuild-windows-64": "0.14.47", - "esbuild-windows-arm64": "0.14.47" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz", - "integrity": "sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz", - "integrity": "sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz", - "integrity": "sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz", - "integrity": "sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz", - "integrity": "sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz", - "integrity": "sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz", - "integrity": "sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz", - "integrity": "sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz", - "integrity": "sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz", - "integrity": "sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz", - "integrity": "sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz", - "integrity": "sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz", - "integrity": "sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz", - "integrity": "sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz", - "integrity": "sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz", - "integrity": "sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-plugins-node-modules-polyfill": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/esbuild-plugins-node-modules-polyfill/-/esbuild-plugins-node-modules-polyfill-1.2.0.tgz", - "integrity": "sha512-jWyCoWQKRbxUUfWLO900IyBDHihavTMbQLCDRq8xqj6NhQ75eW7YRvdraSDzFqQ6/eLnhNZlvantQtYbZjqU0A==", - "dev": true, - "dependencies": { - "@jspm/core": "^2.0.1", - "local-pkg": "^0.4.3", - "resolve.exports": "^2.0.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "esbuild": "^0.14.0 || ^0.15.0 || ^0.16.0 || ^0.17.0 || ^0.18.0" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz", - "integrity": "sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz", - "integrity": "sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz", - "integrity": "sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.14.47", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz", - "integrity": "sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-util-attach-comments": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.1.1.tgz", - "integrity": "sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-build-jsx": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-2.2.2.tgz", - "integrity": "sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==", - "dev": true, - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "estree-walker": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-build-jsx/node_modules/@types/estree-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", - "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/estree-util-build-jsx/node_modules/estree-util-is-identifier-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz", - "integrity": "sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-build-jsx/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/estree-util-is-identifier-name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-1.1.0.tgz", - "integrity": "sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/estree-util-value-to-estree": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-1.3.0.tgz", - "integrity": "sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==", - "dev": true, - "dependencies": { - "is-plain-obj": "^3.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/estree-util-visit": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.1.tgz", - "integrity": "sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==", - "dev": true, - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-visit/node_modules/@types/estree-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", - "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eval": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz", - "integrity": "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==", - "dev": true, - "dependencies": { - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/exit-hook": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", - "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "optional": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", - "dev": true, - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==", - "dev": true, - "dependencies": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ftp/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/ftp/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ftp/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gauge/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/generic-names": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", - "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", - "dev": true, - "dependencies": { - "loader-utils": "^3.2.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", - "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "data-uri-to-buffer": "3", - "debug": "4", - "file-uri-to-path": "2", - "fs-extra": "^8.1.0", - "ftp": "^0.3.10" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/get-uri/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/get-uri/node_modules/file-uri-to-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", - "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/get-uri/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/get-uri/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/get-uri/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/get-uri/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/git-hooks-list": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-1.0.3.tgz", - "integrity": "sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==", - "dev": true, - "funding": { - "url": "https://github.com/fisker/git-hooks-list?sponsor=1" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.0.tgz", - "integrity": "sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/gunzip-maybe": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz", - "integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==", - "dev": true, - "dependencies": { - "browserify-zlib": "^0.1.4", - "is-deflate": "^1.0.0", - "is-gzip": "^1.0.0", - "peek-stream": "^1.1.0", - "pumpify": "^1.3.3", - "through2": "^2.0.3" - }, - "bin": { - "gunzip-maybe": "bin.js" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "node_modules/hast-util-to-estree": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.3.3.tgz", - "integrity": "sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "estree-util-attach-comments": "^2.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "hast-util-whitespace": "^2.0.0", - "mdast-util-mdx-expression": "^1.0.0", - "mdast-util-mdxjs-esm": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.1", - "unist-util-position": "^4.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-estree/node_modules/@types/estree-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", - "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/hast-util-to-estree/node_modules/estree-util-is-identifier-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz", - "integrity": "sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", - "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", - "dev": true - }, - "node_modules/inquirer": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", - "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", - "dev": true - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "dev": true, - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-deflate": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz", - "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==", - "dev": true - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-gzip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", - "integrity": "sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-reference": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.1.tgz", - "integrity": "sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/javascript-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", - "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-to-ts": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-1.6.4.tgz", - "integrity": "sha512-pR4yQ9DHz6itqswtHCm26mw45FSNfQ9rEQjosaZErhn5J3J2sIViQiz8rDaezjKAhFGpmsoczYVBgGHzFw/stA==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.6", - "ts-toolbelt": "^6.15.5" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "optional": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/markdown-extensions": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz", - "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mdast-util-definitions": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", - "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-frontmatter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-1.0.1.tgz", - "integrity": "sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0", - "micromark-extension-frontmatter": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-1.1.0.tgz", - "integrity": "sha512-leKb9uG7laXdyFlTleYV4ZEaCpsxeU1LlkkR/xp35pgKrfV1Y0fNCuOw9vaRc2a9YDpH22wd145Wt7UY5yzeZw==", - "dev": true, - "dependencies": { - "mdast-util-mdx-expression": "^1.0.0", - "mdast-util-mdx-jsx": "^1.0.0", - "mdast-util-mdxjs-esm": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz", - "integrity": "sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==", - "dev": true, - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression/node_modules/@types/estree-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", - "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/mdast-util-mdx-jsx": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-1.2.0.tgz", - "integrity": "sha512-5+ot/kfxYd3ChgEMwsMUO71oAfYjyRI3pADEK4I7xTmWLGQ8Y7ghm1CG36zUoUvDPxMlIYwQV/9DYHAUWdG4dA==", - "dev": true, - "dependencies": { - "@types/estree-jsx": "^0.0.1", - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz", - "integrity": "sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==", - "dev": true, - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm/node_modules/@types/estree-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", - "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", - "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-11.3.0.tgz", - "integrity": "sha512-4o3Cli3hXPmm1LhB+6rqhfsIUBjnKFlIUZvudaermXB+4/KONdd/W4saWWkC+LBLbPMqhFSSTSRgafHsT5fVJw==", - "dev": true, - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "@types/mdurl": "^1.0.0", - "mdast-util-definitions": "^5.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^3.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", - "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "dev": true - }, - "node_modules/media-query-parser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/media-query-parser/-/media-query-parser-2.0.2.tgz", - "integrity": "sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.12.5" - } - }, - "node_modules/media-query-parser/node_modules/@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-extension-frontmatter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.1.1.tgz", - "integrity": "sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==", - "dev": true, - "dependencies": { - "fault": "^2.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdx-expression": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.8.tgz", - "integrity": "sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/estree": "^1.0.0", - "micromark-factory-mdx-expression": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-extension-mdx-jsx": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.5.tgz", - "integrity": "sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==", - "dev": true, - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "micromark-factory-mdx-expression": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/estree-util-is-identifier-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz", - "integrity": "sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdx-md": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.1.tgz", - "integrity": "sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==", - "dev": true, - "dependencies": { - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.1.tgz", - "integrity": "sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==", - "dev": true, - "dependencies": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^1.0.0", - "micromark-extension-mdx-jsx": "^1.0.0", - "micromark-extension-mdx-md": "^1.0.0", - "micromark-extension-mdxjs-esm": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.5.tgz", - "integrity": "sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "micromark-core-commonmark": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-position-from-estree": "^1.1.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-factory-mdx-expression": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.9.tgz", - "integrity": "sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/estree": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-position-from-estree": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-events-to-acorn": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.3.tgz", - "integrity": "sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "@types/unist": "^2.0.0", - "estree-util-visit": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" - } - }, - "node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/micromark/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/mlly": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.0.tgz", - "integrity": "sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "ufo": "^1.1.2" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", - "dev": true, - "optional": true - }, - "node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/nodemon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz", - "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/outdent": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz", - "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==", - "dev": true - }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pac-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz", - "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4", - "get-uri": "3", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "5", - "pac-resolver": "^5.0.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "5" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/pac-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/pac-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/pac-resolver": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.1.tgz", - "integrity": "sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==", - "dev": true, - "dependencies": { - "degenerator": "^3.0.2", - "ip": "^1.1.5", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true - }, - "node_modules/parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", - "dev": true - }, - "node_modules/peek-stream": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", - "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "duplexify": "^3.5.0", - "through2": "^2.0.3" - } - }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, - "node_modules/periscopic/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pkg-types": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", - "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", - "dev": true, - "dependencies": { - "jsonc-parser": "^3.2.0", - "mlly": "^1.2.0", - "pathe": "^1.1.0" - } - }, - "node_modules/postcss": { - "version": "8.4.25", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.25.tgz", - "integrity": "sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" - }, - "engines": { - "node": ">= 14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-modules": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-6.0.0.tgz", - "integrity": "sha512-7DGfnlyi/ju82BRzTIjWS5C4Tafmzl3R79YP/PASiocj+aa6yYphHhhKUOEoXQToId5rgyFgJ88+ccOUydjBXQ==", - "dev": true, - "dependencies": { - "generic-names": "^4.0.0", - "icss-utils": "^5.1.0", - "lodash.camelcase": "^4.3.0", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "string-hash": "^1.1.1" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-ms": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", - "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", - "dev": true, - "dependencies": { - "parse-ms": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "node_modules/property-information": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", - "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz", - "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.0", - "debug": "4", - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^5.0.0", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^5.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/proxy-agent/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/recast": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", - "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", - "dev": true, - "dependencies": { - "ast-types": "0.15.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/recast/node_modules/ast-types": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/recast/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remark-frontmatter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz", - "integrity": "sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-frontmatter": "^1.0.0", - "micromark-extension-frontmatter": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx-frontmatter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/remark-mdx-frontmatter/-/remark-mdx-frontmatter-1.1.1.tgz", - "integrity": "sha512-7teX9DW4tI2WZkXS4DBxneYSY7NHiXl4AKdWDO9LXVweULlCT8OPWsOjLEnMIXViN1j+QcY8mfbq3k0EK6x3uA==", - "dev": true, - "dependencies": { - "estree-util-is-identifier-name": "^1.0.0", - "estree-util-value-to-estree": "^1.0.0", - "js-yaml": "^4.0.0", - "toml": "^3.0.0" - }, - "engines": { - "node": ">=12.2.0" - } - }, - "node_modules/remark-parse": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", - "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-9.1.0.tgz", - "integrity": "sha512-oLa6YmgAYg19zb0ZrBACh40hpBLteYROaPLhBXzLgjqyHQrN+gVP9N/FJvfzuNNuzCutktkroXEZBrxAxKhh7Q==", - "dev": true, - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-to-hast": "^11.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "3.26.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.2.tgz", - "integrity": "sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", - "dev": true, - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/socks-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socks-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/socks/node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "node_modules/sort-object-keys": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz", - "integrity": "sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==", - "dev": true - }, - "node_modules/sort-package-json": { - "version": "1.57.0", - "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-1.57.0.tgz", - "integrity": "sha512-FYsjYn2dHTRb41wqnv+uEqCUvBpK3jZcTp9rbz2qDTmel7Pmdtf+i2rLaaPMRZeSVM60V3Se31GyWFpmKs4Q5Q==", - "dev": true, - "dependencies": { - "detect-indent": "^6.0.0", - "detect-newline": "3.1.0", - "git-hooks-list": "1.0.3", - "globby": "10.0.0", - "is-plain-obj": "2.1.0", - "sort-object-keys": "^1.1.3" - }, - "bin": { - "sort-package-json": "cli.js" - } - }, - "node_modules/sort-package-json/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/string-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", - "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", - "dev": true, - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/style-to-object": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.1.tgz", - "integrity": "sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==", - "dev": true, - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/tar-fs/node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/time-span": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/time-span/-/time-span-4.0.0.tgz", - "integrity": "sha512-MyqZCTGLDZ77u4k+jqg4UlrzPTPZ49NDlaekU6uuFaJLzPIN1woaRXCbGeqOfxwc3Y37ZROGAJ614Rdv7Olt+g==", - "dev": true, - "dependencies": { - "convert-hrtime": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/toml": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", - "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", - "dev": true - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-morph": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-12.0.0.tgz", - "integrity": "sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA==", - "dev": true, - "dependencies": { - "@ts-morph/common": "~0.11.0", - "code-block-writer": "^10.1.1" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/ts-toolbelt": { - "version": "6.15.5", - "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz", - "integrity": "sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==", - "dev": true - }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tslib": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", - "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ufo": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.1.2.tgz", - "integrity": "sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==", - "dev": true - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/unist-builder": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.1.tgz", - "integrity": "sha512-gnpOw7DIpCA0vpr6NqdPvTWnlPTApCTRzr+38E6hCWx3rz/cjo83SsKIlS1Z+L5ttScQ2AwutNnb8+tAvpb6qQ==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-generated": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz", - "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", - "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position-from-estree": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.2.tgz", - "integrity": "sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.2.tgz", - "integrity": "sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "dev": true, - "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uvu/node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vercel": { - "version": "31.0.2", - "resolved": "https://registry.npmjs.org/vercel/-/vercel-31.0.2.tgz", - "integrity": "sha512-5rOZd7TvFcbYN2MaSajuQm2cWeDHmBY4C8+yl1TWr7AtMBTD6kAlVHPV0BiCR+/VTkPzNd54+F/QYKvmWIkDUg==", - "dev": true, - "dependencies": { - "@vercel/build-utils": "6.8.1", - "@vercel/go": "2.5.1", - "@vercel/hydrogen": "0.0.64", - "@vercel/next": "3.8.8", - "@vercel/node": "2.15.4", - "@vercel/python": "3.1.60", - "@vercel/redwood": "1.1.15", - "@vercel/remix-builder": "1.8.16", - "@vercel/ruby": "1.3.76", - "@vercel/static-build": "1.3.39" - }, - "bin": { - "vc": "dist/index.js", - "vercel": "dist/index.js" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vite": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.3.tgz", - "integrity": "sha512-IMnXQXXWgLi5brBQx/4WzDxdzW0X3pjO4nqFJAuNvwKtxzAmPzFE1wszW3VDpAGQJm3RZkm/brzRdyGsnwgJIA==", - "dev": true, - "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.25", - "rollup": "^3.25.2" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite-node": { - "version": "0.28.5", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.28.5.tgz", - "integrity": "sha512-LmXb9saMGlrMZbXTvOveJKwMTBTNUH66c8rJnQ0ZPNX+myPEol64+szRzXtV5ORb0Hb/91yq+/D3oERoyAt6LA==", - "dev": true, - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.4", - "mlly": "^1.1.0", - "pathe": "^1.1.0", - "picocolors": "^1.0.0", - "source-map": "^0.6.1", - "source-map-support": "^0.5.21", - "vite": "^3.0.0 || ^4.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": ">=v14.16.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/vite-node/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/vite-node/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/vite-node/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.11.tgz", - "integrity": "sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.11.tgz", - "integrity": "sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.11.tgz", - "integrity": "sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.11.tgz", - "integrity": "sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.11.tgz", - "integrity": "sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.11.tgz", - "integrity": "sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.11.tgz", - "integrity": "sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.11.tgz", - "integrity": "sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.11.tgz", - "integrity": "sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.11.tgz", - "integrity": "sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.11.tgz", - "integrity": "sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.11.tgz", - "integrity": "sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.11.tgz", - "integrity": "sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.11.tgz", - "integrity": "sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.11.tgz", - "integrity": "sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.11.tgz", - "integrity": "sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.11.tgz", - "integrity": "sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.11.tgz", - "integrity": "sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.11.tgz", - "integrity": "sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.11.tgz", - "integrity": "sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.11.tgz", - "integrity": "sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.11.tgz", - "integrity": "sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.11.tgz", - "integrity": "sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.11", - "@esbuild/android-arm64": "0.18.11", - "@esbuild/android-x64": "0.18.11", - "@esbuild/darwin-arm64": "0.18.11", - "@esbuild/darwin-x64": "0.18.11", - "@esbuild/freebsd-arm64": "0.18.11", - "@esbuild/freebsd-x64": "0.18.11", - "@esbuild/linux-arm": "0.18.11", - "@esbuild/linux-arm64": "0.18.11", - "@esbuild/linux-ia32": "0.18.11", - "@esbuild/linux-loong64": "0.18.11", - "@esbuild/linux-mips64el": "0.18.11", - "@esbuild/linux-ppc64": "0.18.11", - "@esbuild/linux-riscv64": "0.18.11", - "@esbuild/linux-s390x": "0.18.11", - "@esbuild/linux-x64": "0.18.11", - "@esbuild/netbsd-x64": "0.18.11", - "@esbuild/openbsd-x64": "0.18.11", - "@esbuild/sunos-x64": "0.18.11", - "@esbuild/win32-arm64": "0.18.11", - "@esbuild/win32-ia32": "0.18.11", - "@esbuild/win32-x64": "0.18.11" - } - }, - "node_modules/vm2": { - "version": "3.9.19", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.19.tgz", - "integrity": "sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==", - "deprecated": "The library contains critical security issues and should not be used for production! The maintenance of the project has been discontinued. Consider migrating your code to isolated-vm.", - "dev": true, - "dependencies": { - "acorn": "^8.7.0", - "acorn-walk": "^8.2.0" - }, - "bin": { - "vm2": "bin/vm2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web-vitals": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-0.2.4.tgz", - "integrity": "sha512-6BjspCO9VriYy12z356nL6JBS0GYeEcA457YyRzD+dD6XYCQ75NKhcOHUMHentOE7OcVCIXXDvOm0jKFfQG2Gg==", - "dev": true - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdm": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/xdm/-/xdm-2.1.0.tgz", - "integrity": "sha512-3LxxbxKcRogYY7cQSMy1tUuU1zKNK9YPqMT7/S0r7Cz2QpyF8O9yFySGD7caOZt+LWUOQioOIX+6ZzCoBCpcAA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^4.0.0", - "@types/estree-jsx": "^0.0.1", - "astring": "^1.6.0", - "estree-util-build-jsx": "^2.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "estree-walker": "^3.0.0", - "got": "^11.0.0", - "hast-util-to-estree": "^2.0.0", - "loader-utils": "^2.0.0", - "markdown-extensions": "^1.0.0", - "mdast-util-mdx": "^1.0.0", - "micromark-extension-mdxjs": "^1.0.0", - "periscopic": "^3.0.0", - "remark-parse": "^10.0.0", - "remark-rehype": "^9.0.0", - "source-map": "^0.7.0", - "unified": "^10.0.0", - "unist-util-position-from-estree": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - }, - "optionalDependencies": { - "deasync": "^0.1.0" - } - }, - "node_modules/xdm/node_modules/estree-util-is-identifier-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz", - "integrity": "sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/xdm/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/xdm/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/functions/package.json b/functions/package.json deleted file mode 100644 index a125fe7c..00000000 --- a/functions/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "storelocatorjs-functions", - "version": "1.0.0", - "private": true, - "description": "Storelocatorjs cloud function", - "author": "Yoriiis aka Joris Daniel (joris.daniel@gmail.com)", - "main": "index.js", - "scripts": { - "build": "echo \"No build specified\" && exit 0", - "dev": "nodemon ./api/index.js" - }, - "devDependencies": { - "cors": "2.8.5", - "express": "4.17.1", - "nodemon": "^3.0.1", - "vercel": "^31.0.2" - }, - "engines": { - "node": ">=16.20.0" - } -} diff --git a/functions/public/.gitkeep b/functions/public/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/functions/stores.js b/functions/stores.js deleted file mode 100644 index 99bbb6ff..00000000 --- a/functions/stores.js +++ /dev/null @@ -1,180 +0,0 @@ -/** - * @name Storelocatorjs/Stores - * @version 1.0.0 - * @license GPLv3 for Open Source use or Storelocatorjs Commercial License for commercial use - * @author: Joris DANIEL aka Yoriiis - * @description: Class Stores to filter stores with cloud functions - * {@link https://storelocatorjs.github.io} - * @copyright 2019 Joris DANIEL aka Yoriiis - */ - -/** - * Class Stores to filter stores with cloud functions - * @module storelocatorjs/Stores - */ -const Stores = class Stores { - /** - * Instanciate the constructor - * @constructor - * @param {Object} database Database of stores (JSON) - * @param {String} lat Latitude of the request - * @param {String} lng Longitude of the request - * @param {Array} categories Selected categories of the request - * @param {Integer} radius Radius of the request - * @param {Integer} limit Limit of results of the request - */ - constructor({ database, lat, lng, categories = [], radius = 50, limit = 0 }) { - this.database = database - this.lat = lat - this.lng = lng - this.categories = categories - this.radius = parseInt(radius) - this.limit = parseInt(limit) - } - - /** - * Filter stores according to request options - * @return {Object} List of stores filtered (JSON) - */ - filter() { - // Check if the request is filtered by category - const stores = - this.categories.length === 0 - ? this.database - : this.filterStoreByCategory(this.categories) - - // Filter store by geoposition - return this.filterStoreByGeoPosition(stores) - } - - /** - * Filter store by categories in the database - * @param {Array} categories Array of selected categories - * @return {Object} Stores filtered by categories - */ - filterStoreByCategory(categories) { - const storesFiltered = [] - - // Loop on all stores, with filter - for (let i = 0, lengthStores = this.database.length; i < lengthStores; i++) { - const currentStore = this.database[i] - if (categories.indexOf(currentStore.category) !== -1) { - storesFiltered.push(currentStore) - } - } - - return storesFiltered - } - - /** - * Filter store by geoposition - * @param {Object} stores Stores filtered by categories - * @return {Object} Stores filtered by geoposition - */ - filterStoreByGeoPosition(stores) { - const listStores = [] - let currentStore - let storesByDistance - - // Loop on all store and calculate distance between point - for (let i = 0, lengthStores = stores.length; i < lengthStores; i++) { - currentStore = stores[i] - - // Calculate the distance between store coordinate and request coordinate - storesByDistance = this.getDistanceBetweenCoordinate({ - lat1: this.lat, - lng1: this.lng, - lat2: currentStore.lat, - lng2: currentStore.lng, - unit: 'K' - }) - currentStore.distance = storesByDistance - listStores.push(currentStore) - } - - // Sort by distance to mapcenter - listStores.sort((arrayA, arrayB) => { - if (arrayA.distance < arrayB.distance) { - return -1 - } else if (arrayA.distance > arrayB.distance) { - return 1 - } else { - return 0 - } - }) - - const storesFiltered = [] - for (let i = 0, lengthStores = listStores.length; i < lengthStores; i++) { - if (listStores[i].distance > this.radius) { - break - } - storesFiltered.push(listStores[i]) - if (this.limit !== 0 && storesFiltered.length === this.limit) { - break - } - } - - return storesFiltered - } - - // This routine calculates the distance between two points (given the - // latitude/longitude of those points). It is being used to calculate - // the distance between two locations using GeoDataSource(TM) Products - // - // Definitions: - // South latitudes are negative, east longitudes are positive - // - // Passed to function: - // lat1, lon1 = Latitude and Longitude of point 1 (in decimal degrees) - // lat2, lon2 = Latitude and Longitude of point 2 (in decimal degrees) - // unit = the unit you desire for results - // where: 'M' is statute miles (default) - // 'K' is kilometers - // 'N' is nautical miles - // Worldwide cities and other features databases with latitude longitude - // are available at http://www.geodatasource.com - // - // For enquiries, please contact sales@geodatasource.com - // - // Official Web site: http://www.geodatasource.com - // - // GeoDataSource.com (C) All Rights Reserved 2015 - getDistanceBetweenCoordinate({ lat1, lng1, lat2, lng2, unit }) { - const theta = lng1 - lng2 - const dist = - Math.sin(this.deg2rad(lat1)) * Math.sin(this.deg2rad(lat2)) + - Math.cos(this.deg2rad(lat1)) * - Math.cos(this.deg2rad(lat2)) * - Math.cos(this.deg2rad(theta)) - const miles = this.rad2deg(Math.acos(dist)) * 60 * 1.1515 - unit = unit.toUpperCase() - - if (unit === 'K') { - return miles * 1.609344 - } else if (unit === 'N') { - return miles * 0.8684 - } else { - return miles - } - } - - /** - * Utils function to calculate a degree to a radius - * @param {Float} x Number - * @return Radius number - */ - deg2rad(x) { - return x * (Math.PI / 180) - } - - /** - * Utils function to calculate a radius to a degree - * @param {Float} x Number - * @return Degree number - */ - rad2deg(x) { - return x * (180 / Math.PI) - } -} - -module.exports = Stores diff --git a/functions/vercel.json b/functions/vercel.json deleted file mode 100644 index ec614933..00000000 --- a/functions/vercel.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "rewrites": [{ "source": "/(.*)", "destination": "/api" }] -} diff --git a/package-lock.json b/package-lock.json index d1174a75..78c2e972 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,23 +1,33 @@ { "name": "storelocatorjs", - "version": "2.1.0", + "version": "3.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "storelocatorjs", - "version": "2.1.0", + "version": "3.0.0", + "license": "TODO", + "dependencies": { + "leaflet": "^1.9.3", + "mapbox-gl": "^2.15.0", + "maplibre-gl": "^3.2.2", + "validate-target": "^3.1.1" + }, "devDependencies": { "@babel/core": "^7.22.1", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/preset-env": "^7.21.4", - "@babel/preset-react": "^7.22.5", - "@csstools/postcss-global-data": "^2.0.0", + "@rollup/plugin-alias": "^5.0.0", + "@rollup/plugin-buble": "^0.21.3", + "@rollup/plugin-commonjs": "^25.0.3", + "@rollup/plugin-node-resolve": "^15.0.2", + "@rollup/plugin-replace": "^5.0.2", "babel-loader": "^9.1.2", "css-loader": "^6.7.3", "css-minimizer-webpack-plugin": "^5.0.0", + "dotenv": "^16.3.1", "html-webpack-plugin": "^5.5.1", - "jsx-dom-cjs": "^8.0.7", "mini-css-extract-plugin": "^2.7.5", "postcss": "^8.4.23", "postcss-custom-media": "^9.1.3", @@ -26,6 +36,11 @@ "postcss-nested": "^6.0.1", "postcss-preset-env": "^8.3.2", "postcss-url": "^10.1.1", + "rollup": "^2.64.0", + "rollup-plugin-copy": "^3.4.0", + "rollup-plugin-postcss": "^4.0.2", + "rollup-plugin-svg": "^2.0.0", + "rollup-plugin-terser": "^7.0.2", "style-loader": "^3.3.2", "svg-inline-loader": "0.8.2", "terser-webpack-plugin": "^5.3.7", @@ -659,21 +674,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", @@ -1394,71 +1394,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", - "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", - "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", - "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", - "dev": true, - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", - "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", @@ -1739,26 +1674,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-react": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz", - "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-transform-react-display-name": "^7.22.5", - "@babel/plugin-transform-react-jsx": "^7.22.5", - "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", @@ -2071,28 +1986,6 @@ "postcss": "^8.4" } }, - "node_modules/@csstools/postcss-global-data": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-global-data/-/postcss-global-data-2.0.0.tgz", - "integrity": "sha512-yaI3+hBJw7ljUhM0INqnFzG8nsDD+Si/FFUWw6uRLQHUALnXyxpSeihOIvG35y03GhpmiEU6qsADbVVGDHKSLw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, "node_modules/@csstools/postcss-gradients-interpolation-method": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-3.0.6.tgz", @@ -2744,6 +2637,80 @@ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", "dev": true }, + "node_modules/@mapbox/geojson-rewind": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", + "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "dependencies": { + "get-stream": "^6.0.1", + "minimist": "^1.2.6" + }, + "bin": { + "geojson-rewind": "geojson-rewind" + } + }, + "node_modules/@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mapbox/mapbox-gl-supported": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-2.0.1.tgz", + "integrity": "sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ==" + }, + "node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + }, + "node_modules/@mapbox/tiny-sdf": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", + "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==" + }, + "node_modules/@mapbox/unitbezier": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==" + }, + "node_modules/@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "dependencies": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "node_modules/@mapbox/whoots-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@maplibre/maplibre-gl-style-spec": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-19.3.0.tgz", + "integrity": "sha512-ZbhX9CTV+Z7vHwkRIasDOwTSzr76e8Q6a55RMsAibjyX6+P0ZNL1qAKNzOjjBDP3+aEfNMl7hHo5knuY6pTAUQ==", + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/unitbezier": "^0.0.1", + "json-stringify-pretty-compact": "^3.0.0", + "minimist": "^1.2.8", + "rw": "^1.3.3", + "sort-object": "^3.0.3" + }, + "bin": { + "gl-style-format": "dist/gl-style-format.mjs", + "gl-style-migrate": "dist/gl-style-migrate.mjs", + "gl-style-validate": "dist/gl-style-validate.mjs" + } + }, "node_modules/@nicolo-ribaudo/semver-v6": { "version": "6.3.3", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", @@ -2753,107 +2720,439 @@ "semver": "bin/semver.js" } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { - "node": ">=10.13.0" + "node": ">= 8" } }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "node_modules/@rollup/plugin-alias": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.0.0.tgz", + "integrity": "sha512-l9hY5chSCjuFRPsnRm16twWBiSApl2uYFLsepQYwtBuAxNMQ/1dJqADld40P0Jkqm65GRTLy/AC6hnpVebtLsA==", "dev": true, "dependencies": { - "@types/node": "*" + "slash": "^4.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "node_modules/@rollup/plugin-buble": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-buble/-/plugin-buble-0.21.3.tgz", + "integrity": "sha512-Iv8cCuFPnMdqV4pcyU+OrfjOfagPArRQ1PyQjx5KgHk3dARedI+8PNTLSMpJts0lQJr8yF2pAU4GxpxCBJ9HYw==", "dev": true, "dependencies": { - "@types/node": "*" + "@rollup/pluginutils": "^3.0.8", + "@types/buble": "^0.19.2", + "buble": "^0.20.0" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" } }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "node_modules/@rollup/plugin-commonjs": { + "version": "25.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.3.tgz", + "integrity": "sha512-uBdtWr/H3BVcgm97MUdq2oJmqBR23ny1hOrWe2PKo9FTbjsGqg32jfasJUKYAI5ouqacjRnj65mBB/S79F+GQA==", "dev": true, "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.27.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@types/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==", + "node_modules/@rollup/plugin-commonjs/node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", "dev": true, "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "balanced-match": "^1.0.0" } }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "node_modules/@rollup/plugin-commonjs/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "node_modules/@rollup/plugin-commonjs/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", + "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/@rollup/plugin-replace": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz", + "integrity": "sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.27.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-replace/node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-replace/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/buble": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@types/buble/-/buble-0.19.2.tgz", + "integrity": "sha512-uUD8zIfXMKThmFkahTXDGI3CthFH1kMg2dOm3KLi4GlC5cbARA64bEcUMbbWdWdE73eoc/iBB9PiTMqH0dNS2Q==", + "dev": true, + "dependencies": { + "magic-string": "^0.25.0" + } + }, + "node_modules/@types/buble/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.0.tgz", + "integrity": "sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", + "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/geojson": { + "version": "7946.0.10", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", + "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" } }, "node_modules/@types/html-minifier-terser": { @@ -2907,18 +3206,44 @@ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, + "node_modules/@types/mapbox__point-geometry": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.2.tgz", + "integrity": "sha512-D0lgCq+3VWV85ey1MZVkE8ZveyuvW5VAfuahVTQRpXFQTxw03SuIf1/K4UQ87MMIXVKzpFjXFiFMZzLj2kU+iA==" + }, + "node_modules/@types/mapbox__vector-tile": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.0.tgz", + "integrity": "sha512-kDwVreQO5V4c8yAxzZVQLE5tyWF+IPToAanloQaSnwfXmIcJ7cyOrv8z4Ft4y7PsLYmhWXmON8MBV8RX0Rgr8g==", + "dependencies": { + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, "node_modules/@types/node": { "version": "20.4.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.1.tgz", "integrity": "sha512-JIzsAvJeA/5iY6Y/OxZbv1lUcc8dNSE77lb2gnBH+/PJ3lFR1Ccvgwl5JWnHAkNHcRsT0TbpVOsiMKZ1F/yyJg==", "dev": true }, + "node_modules/@types/pbf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.2.tgz", + "integrity": "sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ==" + }, "node_modules/@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", @@ -2931,6 +3256,12 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, "node_modules/@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", @@ -2976,6 +3307,14 @@ "@types/node": "*" } }, + "node_modules/@types/supercluster": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.0.tgz", + "integrity": "sha512-6JapQ2GmEkH66r23BK49I+u6zczVDGTtiJEVvKDYZVSm/vepWaJuTq6BXzJ6I4agG5s8vA1KM7m/gXWDg03O4Q==", + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/ws": { "version": "8.5.5", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", @@ -3236,6 +3575,15 @@ "acorn": "^8" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -3333,12 +3681,37 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/autoprefixer": { "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", @@ -3578,19 +3951,187 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "node_modules/buble": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/buble/-/buble-0.20.0.tgz", + "integrity": "sha512-/1gnaMQE8xvd5qsNBl+iTuyjJ9XxeaVxAMF86dQ4EyxFJOZtsgOS8Ra+7WHgZTam5IFDtt4BguN0sH0tVTKrOw==", + "dev": true, + "dependencies": { + "acorn": "^6.4.1", + "acorn-dynamic-import": "^4.0.0", + "acorn-jsx": "^5.2.0", + "chalk": "^2.4.2", + "magic-string": "^0.25.7", + "minimist": "^1.2.5", + "regexpu-core": "4.5.4" + }, + "bin": { + "buble": "bin/buble" + } }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "node_modules/buble/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">= 0.8" + "node": ">=0.4.0" + } + }, + "node_modules/buble/node_modules/acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "deprecated": "This is probably built in to whatever tool you're using. If you still need it... idk", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0" + } + }, + "node_modules/buble/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/buble/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/buble/node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/buble/node_modules/regexpu-core": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", + "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.0.2", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/buble/node_modules/regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/buble/node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/buble/node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/buble/node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/buble/node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bytewise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz", + "integrity": "sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ==", + "dependencies": { + "bytewise-core": "^1.2.2", + "typewise": "^1.0.3" + } + }, + "node_modules/bytewise-core": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz", + "integrity": "sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA==", + "dependencies": { + "typewise-core": "^1.2" } }, "node_modules/call-bind": { @@ -3790,6 +4331,12 @@ "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", "dev": true }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -3847,6 +4394,15 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", @@ -4128,6 +4684,11 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/csscolorparser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==" + }, "node_modules/cssdb": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.6.0.tgz", @@ -4264,12 +4825,6 @@ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", "dev": true }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true - }, "node_modules/cuint": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", @@ -4293,6 +4848,15 @@ } } }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -4339,6 +4903,18 @@ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -4431,6 +5007,23 @@ "tslib": "^2.0.3" } }, + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -4577,6 +5170,12 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -4696,12 +5295,39 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -4717,6 +5343,15 @@ "node": ">= 4.9.1" } }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/faye-websocket": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", @@ -4857,6 +5492,20 @@ "node": ">= 0.6" } }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, "node_modules/fs-monkey": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", @@ -4889,6 +5538,24 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "node_modules/generic-names": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", + "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", + "dev": true, + "dependencies": { + "loader-utils": "^3.2.0" + } + }, + "node_modules/generic-names/node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4898,6 +5565,11 @@ "node": ">=6.9.0" } }, + "node_modules/geojson-vt": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" + }, "node_modules/get-intrinsic": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", @@ -4917,7 +5589,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, "engines": { "node": ">=10" }, @@ -4925,6 +5596,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -4975,6 +5659,30 @@ "node": "*" } }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -4984,12 +5692,45 @@ "node": ">=4" } }, + "node_modules/globby": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/globby/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, + "node_modules/grid-index": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", + "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==" + }, "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -5258,6 +5999,12 @@ "node": ">=0.10.0" } }, + "node_modules/icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==", + "dev": true + }, "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", @@ -5270,6 +6017,46 @@ "postcss": "^8.1.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dev": true, + "dependencies": { + "import-from": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -5286,21 +6073,42 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "node_modules/import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", "dev": true, "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "resolve-from": "^5.0.0" }, "engines": { "node": ">=8" - }, + } + }, + "node_modules/import-from/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -5394,6 +6202,11 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, "node_modules/interpret": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", @@ -5430,6 +6243,21 @@ "node": ">=8" } }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-core-module": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", @@ -5457,6 +6285,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -5478,6 +6314,12 @@ "node": ">=0.10.0" } }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -5503,7 +6345,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, "dependencies": { "isobject": "^3.0.1" }, @@ -5511,6 +6352,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -5544,14 +6394,12 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -5733,6 +6581,11 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, + "node_modules/json-stringify-pretty-compact": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz", + "integrity": "sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA==" + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -5745,20 +6598,24 @@ "node": ">=6" } }, - "node_modules/jsx-dom-cjs": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/jsx-dom-cjs/-/jsx-dom-cjs-8.0.7.tgz", - "integrity": "sha512-dQWnuQ+bTm7o72ZlJU4glzeMX8KLxx5U+ZwmEAzVP1+roL7BSM0MrkWdHjdsuNgmxobZCJ+qgiot9EgbJPOoEg==", + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "dependencies": { - "csstype": "^3.1.2" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, + "node_modules/kdbush": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==" + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -5773,6 +6630,11 @@ "shell-quote": "^1.7.3" } }, + "node_modules/leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==" + }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -5844,6 +6706,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -5880,6 +6748,18 @@ "yallist": "^3.0.2" } }, + "node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -5904,6 +6784,74 @@ "semver": "bin/semver.js" } }, + "node_modules/mapbox-gl": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-2.15.0.tgz", + "integrity": "sha512-fjv+aYrd5TIHiL7wRa+W7KjtUqKWziJMZUkK5hm8TvJ3OLeNPx4NmW/DgfYhd/jHej8wWL+QJBDbdMMAKvNC0A==", + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^2.0.1", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.6", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.4", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.4.3", + "grid-index": "^1.1.0", + "kdbush": "^4.0.1", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^2.0.0", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "supercluster": "^8.0.0", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.3" + } + }, + "node_modules/maplibre-gl": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-3.2.2.tgz", + "integrity": "sha512-YCnQZgAlUUyBmPB1umubmmFaiGMyVHRGTe/vNjPDcamlzkgjR4Ouw4pHgciXsxD1ZOr7cjrq3QPyMqrORCMBKQ==", + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.6", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@maplibre/maplibre-gl-style-spec": "^19.2.2", + "@types/geojson": "^7946.0.10", + "@types/mapbox__point-geometry": "^0.1.2", + "@types/mapbox__vector-tile": "^1.3.0", + "@types/pbf": "^3.0.2", + "@types/supercluster": "^7.1.0", + "earcut": "^2.2.4", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.4.3", + "global-prefix": "^3.0.0", + "kdbush": "^4.0.2", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^2.0.0", + "quickselect": "^2.0.0", + "supercluster": "^8.0.1", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.3" + }, + "engines": { + "node": ">=16.14.0", + "npm": ">=8.1.0" + }, + "funding": { + "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" + } + }, "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", @@ -5943,6 +6891,15 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -6048,7 +7005,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6072,6 +7028,11 @@ "multicast-dns": "cli.js" } }, + "node_modules/murmurhash-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==" + }, "node_modules/nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", @@ -6148,6 +7109,18 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -6258,6 +7231,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/p-limit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", @@ -6288,6 +7270,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-retry": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", @@ -6301,6 +7299,18 @@ "node": ">=8" } }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -6417,6 +7427,18 @@ "node": ">=8" } }, + "node_modules/pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -6948,6 +7970,35 @@ "postcss": "^8.4" } }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, "node_modules/postcss-loader": { "version": "7.3.3", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", @@ -7093,6 +8144,25 @@ "postcss": "^8.2.15" } }, + "node_modules/postcss-modules": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz", + "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", + "dev": true, + "dependencies": { + "generic-names": "^4.0.0", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, "node_modules/postcss-modules-extract-imports": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", @@ -7641,6 +8711,11 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "node_modules/potpack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.0.0.tgz", + "integrity": "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==" + }, "node_modules/pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", @@ -7657,6 +8732,20 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "node_modules/promise.series": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", + "integrity": "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -7703,6 +8792,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -7831,146 +8945,1011 @@ "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-copy": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", + "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^8.0.1", + "colorette": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "10.0.1", + "is-plain-object": "^3.0.0" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/rollup-plugin-copy/node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "node_modules/rollup-plugin-copy/node_modules/is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup-plugin-postcss": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz", + "integrity": "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "concat-with-sourcemaps": "^1.1.0", + "cssnano": "^5.0.1", + "import-cwd": "^3.0.0", + "p-queue": "^6.6.2", + "pify": "^5.0.0", + "postcss-load-config": "^3.0.0", + "postcss-modules": "^4.0.0", + "promise.series": "^0.2.0", + "resolve": "^1.19.0", + "rollup-pluginutils": "^2.8.2", + "safe-identifier": "^0.4.2", + "style-inject": "^0.3.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "8.x" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/rollup-plugin-postcss/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dev": true, + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/rollup-plugin-postcss/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "node_modules/rollup-plugin-postcss/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", "dev": true, "dependencies": { - "jsesc": "~0.5.0" + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" }, "bin": { - "regjsparser": "bin/parser" + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "node_modules/rollup-plugin-svg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-svg/-/rollup-plugin-svg-2.0.0.tgz", + "integrity": "sha512-DmE7dSQHo1SC5L2uH2qul3Mjyd5oV6U1aVVkyvTLX/mUsRink7f1b1zaIm+32GEBA6EHu8H/JJi3DdWqM53ySQ==", "dev": true, - "bin": { - "jsesc": "bin/jsesc" + "dependencies": { + "rollup-pluginutils": "^1.3.1" } }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "node_modules/rollup-plugin-svg/node_modules/estree-walker": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz", + "integrity": "sha512-6/I1dwNKk0N9iGOU3ydzAAurz4NPo/ttxZNCqgIVbWFvWyzWBSNonRrJ5CpjDuyBfmM7ENN7WCzUi9aT/UPXXQ==", + "dev": true + }, + "node_modules/rollup-plugin-svg/node_modules/rollup-pluginutils": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz", + "integrity": "sha512-SjdWWWO/CUoMpDy8RUbZ/pSpG68YHmhk5ROKNIoi2En9bJ8bTt3IhYi254RWiTclQmL7Awmrq+rZFOhZkJAHmQ==", "dev": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "estree-walker": "^0.2.1", + "minimatch": "^3.0.2" } }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", "dev": true, "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "node_modules/rollup-plugin-terser/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 10.13.0" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", "dev": true, "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" + "randombytes": "^2.1.0" } }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/rollup-plugin-terser/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "estree-walker": "^0.6.1" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "queue-microtask": "^1.2.2" } }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -7991,6 +9970,12 @@ } ] }, + "node_modules/safe-identifier": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", + "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", + "dev": true + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -8226,6 +10211,20 @@ "node": ">= 0.8.0" } }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -8300,6 +10299,18 @@ "integrity": "sha512-Mc/gH3RvlKvB/gkp9XwgDKEWrSYyefIJPGG8Jk1suZms/rISdUuVEMx5O1WBnTWaScvxXDvGJrZQWblUmQHjkQ==", "dev": true }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -8311,6 +10322,38 @@ "websocket-driver": "^0.7.4" } }, + "node_modules/sort-asc": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz", + "integrity": "sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-desc": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz", + "integrity": "sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-object": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-3.0.3.tgz", + "integrity": "sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ==", + "dependencies": { + "bytewise": "^1.1.0", + "get-value": "^2.0.2", + "is-extendable": "^0.1.1", + "sort-asc": "^0.2.0", + "sort-desc": "^0.2.0", + "union-value": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8339,6 +10382,13 @@ "source-map": "^0.6.0" } }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -8369,6 +10419,47 @@ "wbuf": "^1.7.3" } }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -8387,6 +10478,12 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==", + "dev": true + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -8408,6 +10505,12 @@ "node": ">=6" } }, + "node_modules/style-inject": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", + "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==", + "dev": true + }, "node_modules/style-loader": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", @@ -8440,6 +10543,14 @@ "postcss": "^8.2.15" } }, + "node_modules/supercluster": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", + "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "dependencies": { + "kdbush": "^4.0.2" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -8739,6 +10850,11 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, + "node_modules/tinyqueue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -8788,6 +10904,19 @@ "node": ">= 0.6" } }, + "node_modules/typewise": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", + "integrity": "sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ==", + "dependencies": { + "typewise-core": "^1.2.0" + } + }, + "node_modules/typewise-core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz", + "integrity": "sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg==" + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -8828,6 +10957,29 @@ "node": ">=4" } }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -8906,6 +11058,14 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/validate-target": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/validate-target/-/validate-target-3.1.1.tgz", + "integrity": "sha512-MRTgeSwwI8fyNPzRi8SsZiU6LSwlsRE3cLiynyse8G82hjEkfq/setjs0D789FwKrtnDCZn7m0MHlklDPzs74g==", + "engines": { + "node": ">=16.20.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -8915,6 +11075,16 @@ "node": ">= 0.8" } }, + "node_modules/vt-pbf": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "dependencies": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", @@ -9277,6 +11447,15 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/yocto-queue": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", diff --git a/package.json b/package.json index f31654a5..d0685922 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "storelocatorjs", - "version": "2.1.0", + "version": "3.0.0", "description": "Storelocatorjs is a fast and lightweight Javascript library for build your own customizable store locator with a minimalist theme. The cloud function is included to handle store filter requests.", "keywords": [ "cloud function", @@ -19,30 +19,47 @@ "homepage": "https://storelocatorjs.github.io", "bugs": "https://github.com/yoriiis/storelocatorjs/issues", "repository": "https://github.com/yoriiis/storelocatorjs.git", + "license": "TODO", "author": "Joris DANIEL", + "type": "module", "main": "dist/storelocator.js", "files": [ - "./src" + "./src", + "./dist" ], "scripts": { - "build": "rm -rf ./dist/ && webpack --mode=production --config=./config/webpack.config.js", - "build:example": "rm -rf ./examples/dist/ && webpack --mode=production --config=./examples/webpack.config.js", - "dev": "rm -rf ./dist/ && webpack --mode=development --config=./config/webpack.config.js", - "start:example": "rm -rf ./examples/dist/ && webpack serve --mode=development --config=./examples/webpack.config.js", + "build": "rm -rf ./dist/ && rollup --config ./config/rollup.config.js --environment ENV:production", + "build:example": "rm -rf ./examples/dist/ && npm run credentials && webpack --mode=production --config=./examples/webpack.config.js", + "credentials": "node ./config/setup.js", + "dev": "rm -rf ./dist/ && rollup --config ./config/rollup.config.js --environment ENV:development --watch --sourcemap", + "start:example": "rm -rf ./examples/dist/ && npm run credentials && webpack serve --mode=development --config=./examples/webpack.config.js", "test": "echo \"No test specified\" && exit 0" }, - "prettier": "./config/prettier.config.js", + "browserslist": [ + "defaults", + "not ie 11" + ], + "prettier": "./config/prettier.config.cjs", + "dependencies": { + "leaflet": "^1.9.3", + "mapbox-gl": "^2.15.0", + "maplibre-gl": "^3.2.2", + "validate-target": "^3.1.1" + }, "devDependencies": { "@babel/core": "^7.22.1", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/preset-env": "^7.21.4", - "@babel/preset-react": "^7.22.5", - "@csstools/postcss-global-data": "^2.0.0", + "@rollup/plugin-alias": "^5.0.0", + "@rollup/plugin-buble": "^0.21.3", + "@rollup/plugin-commonjs": "^25.0.3", + "@rollup/plugin-node-resolve": "^15.0.2", + "@rollup/plugin-replace": "^5.0.2", "babel-loader": "^9.1.2", "css-loader": "^6.7.3", "css-minimizer-webpack-plugin": "^5.0.0", + "dotenv": "^16.3.1", "html-webpack-plugin": "^5.5.1", - "jsx-dom-cjs": "^8.0.7", "mini-css-extract-plugin": "^2.7.5", "postcss": "^8.4.23", "postcss-custom-media": "^9.1.3", @@ -51,6 +68,11 @@ "postcss-nested": "^6.0.1", "postcss-preset-env": "^8.3.2", "postcss-url": "^10.1.1", + "rollup": "^2.64.0", + "rollup-plugin-copy": "^3.4.0", + "rollup-plugin-postcss": "^4.0.2", + "rollup-plugin-svg": "^2.0.0", + "rollup-plugin-terser": "^7.0.2", "style-loader": "^3.3.2", "svg-inline-loader": "0.8.2", "terser-webpack-plugin": "^5.3.7", diff --git a/src/css/loader.css b/src/components/loader/loader.css similarity index 71% rename from src/css/loader.css rename to src/components/loader/loader.css index e1c6679d..787d44b1 100644 --- a/src/css/loader.css +++ b/src/components/loader/loader.css @@ -17,23 +17,23 @@ } } -.storelocator { +.sl { &-loader { - transition: transform 150ms ease-in-out, opacity 150ms ease-in; + transition: transform var(--sl-transition), opacity var(--sl-transition); display: block; position: absolute; top: 0; left: 0; width: 100%; height: 4px; - z-index: 10; + z-index: 1002; opacity: 0; - &.active { + &.sl-active { opacity: 1; } - .storelocator-loaderBar { + &-bar { content: ''; display: inline-block; position: absolute; @@ -43,17 +43,17 @@ text-align: center; &:nth-child(1) { - background-color: var(--colorLoader1); + background-color: #f60; animation: loading 3s linear infinite; } &:nth-child(2) { - background-color: var(--colorLoader2); + background-color: #fc3; animation: loading 3s linear 1s infinite; } &:nth-child(3) { - background-color: var(--colorLoader3); + background-color: #ea4c89; animation: loading 3s linear 2s infinite; } } diff --git a/src/components/loader/templates/loader.js b/src/components/loader/templates/loader.js new file mode 100644 index 00000000..f47c02d6 --- /dev/null +++ b/src/components/loader/templates/loader.js @@ -0,0 +1,9 @@ +export default function TemplateLoader() { + return ` +
+
+
+
+
+ ` +} diff --git a/src/components/map/map.css b/src/components/map/map.css new file mode 100644 index 00000000..f202461e --- /dev/null +++ b/src/components/map/map.css @@ -0,0 +1,96 @@ +.sl { + &-map { + position: relative; + aspect-ratio: 16/9; + } + + &-mapCanvas { + width: 100%; + height: 100%; + } + + &-button { + width: 40px; + height: 40px; + background-color: #fff; + z-index: 500; + border: none; + cursor: pointer; + border-radius: 10px; + appearance: none; + outline: none; + color: inherit; + font-size: inherit; + font-family: inherit; + transition: opacity var(--sl-transition); + opacity: 0.9; + + * { + pointer-events: none; + } + + &:hover { + opacity: 1; + } + + svg { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 20px; + height: 20px; + transition: fill var(--sl-transition); + fill: var(--sl-controlsColor); + } + } + + &-geolocButton { + position: absolute; + top: 15px; + right: 15px; + + &.sl-error { + cursor: not-allowed; + + svg { + fill: var(--sl-colorSecondary); + } + } + + &.sl-active svg { + fill: var(--sl-markerGeolocationColor); + } + } + + &-resultButton { + position: absolute; + top: 70px; + right: 15px; + } + + &-zoomInButton { + position: absolute; + bottom: 75px; + right: 15px; + } + + &-zoomOutButton { + position: absolute; + bottom: 20px; + right: 15px; + } + + &-marker { + width: 20px; + height: 20px; + } +} + +@media only screen and (min-width: 750px) { + .sl { + &-geolocButton { + top: 15px; + } + } +} diff --git a/src/components/map/templates/map.js b/src/components/map/templates/map.js new file mode 100644 index 00000000..0b161ad3 --- /dev/null +++ b/src/components/map/templates/map.js @@ -0,0 +1,19 @@ +import locationSvg from 'shared/assets/svgs/location.svg' +import plusSvg from 'shared/assets/svgs/plus.svg' +import minusSvg from 'shared/assets/svgs/minus.svg' + +export default function TemplateMap() { + return ` +
+
+
+
+ + + +
+
+
+
+ ` +} diff --git a/src/components/popup/popup.css b/src/components/popup/popup.css new file mode 100644 index 00000000..d52044c2 --- /dev/null +++ b/src/components/popup/popup.css @@ -0,0 +1,44 @@ +.sl { + &-popup { + padding: 10px 0 10px 10px; + max-width: 250px; + + &-picture { + margin-bottom: 20px; + display: block; + max-width: 250px; + + img { + display: block; + width: 100%; + height: auto; + } + } + + &-title { + display: block; + font-weight: 600; + margin-bottom: 10px; + } + + &-address { + display: inline-block; + margin-bottom: 10px; + } + + &-phone { + display: block; + color: #000; + + &:focus-visible { + outline: none; + } + } + + &-url { + margin-top: 10px; + display: block; + color: #000; + } + } +} diff --git a/src/components/popup/templates/popup.js b/src/components/popup/templates/popup.js new file mode 100644 index 00000000..34eeb1cd --- /dev/null +++ b/src/components/popup/templates/popup.js @@ -0,0 +1,16 @@ +export default function TemplatePopup({ feature }) { + return ` +
+ + ${feature.properties.title} + + + ${feature.properties?.address} ${feature.properties?.zipcode} + ${feature.properties?.city} + + + ${feature.properties.phone} + +
+ ` +} diff --git a/src/components/result/result.css b/src/components/result/result.css new file mode 100644 index 00000000..39dde9b3 --- /dev/null +++ b/src/components/result/result.css @@ -0,0 +1,79 @@ +.sl { + &-results { + display: none; + position: absolute; + top: 70px; + left: 0; + width: 100%; + height: 100%; + background-color: #fff; + z-index: 1000; + overflow: hidden; + + &.sl-visible { + display: block; + } + + &-list { + padding: 0; + margin: 0; + height: 100%; + overflow: auto; + } + } + + &-noResults { + margin: 0; + padding: 20px; + font-size: 13px; + line-height: 20px; + color: var(--sl-colorSecondary); + font-style: italic; + } + + &-result { + display: block; + padding: 15px; + cursor: pointer; + + &:not(:last-child) { + border-bottom: 1px solid #e7e7e7; + } + + * { + pointer-events: none; + } + + &-title { + margin-bottom: 10px; + font-weight: 600; + font-size: 16px; + display: block; + background-color: transparent; + border: none; + padding: 0; + cursor: pointer; + } + + &-adress { + display: block; + } + } +} + +@media only screen and (min-width: 750px) { + .sl { + &-results { + top: auto; + bottom: 15px; + left: 15px; + width: 350px; + height: calc(100% - 115px); + border-radius: 10px; + + &.sl-active { + display: block; + } + } + } +} diff --git a/src/components/result/templates/result.js b/src/components/result/templates/result.js new file mode 100644 index 00000000..1782b5ef --- /dev/null +++ b/src/components/result/templates/result.js @@ -0,0 +1,11 @@ +export default function TemplateResult({ feature }) { + return ` + + ${feature.properties.title} + + + ${feature.properties?.address} ${feature.properties?.zipcode}${' '} + ${feature.properties?.city} + + ` +} diff --git a/src/components/search/search.css b/src/components/search/search.css new file mode 100644 index 00000000..952c44a7 --- /dev/null +++ b/src/components/search/search.css @@ -0,0 +1,160 @@ +.sl { + &-search { + position: relative; + display: flex; + flex-direction: column; + background: #fff; + padding: 15px; + z-index: 1002; + + &-form { + position: relative; + width: 100%; + height: auto; + border-radius: 5px; + } + + &-glass { + position: absolute; + top: 13px; + left: 10px; + pointer-events: none; + + svg { + width: 15px; + height: 15px; + fill: var(--sl-colorSecondary); + } + } + + &-input { + width: 100%; + height: 40px; + padding-left: 35px; + font-size: 15px; + border: none; + outline: none; + box-shadow: 0 2px 4px rgb(0 0 0 / 20%), 0 -1px 0 rgb(0 0 0 / 2%); + } + + &-toggleButton { + position: absolute; + top: 0; + right: 0; + width: 40px; + height: 40px; + cursor: pointer; + display: none; + background-color: transparent; + justify-content: center; + align-items: center; + border: none; + appearance: none; + outline: none; + + * { + pointer-events: none; + } + + &.sl-active { + display: flex; + } + + svg { + width: 15px; + height: 15px; + fill: var(--sl-controlsColor); + } + } + + &-toggleMap { + svg { + width: 18px; + } + } + + &-toggleList { + svg { + width: 16px; + } + } + + &-toggleMap, + &-toggleList { + display: none; + + &.sl-active { + display: flex; + } + } + + &-autocomplete { + margin-top: 5px; + padding: 15px 10px; + width: 100%; + height: auto; + z-index: 1; + display: none; + position: absolute; + top: 56px; + left: 0; + background-color: #fff; + + &.sl-active { + display: block; + } + } + + &-autocompleteItem { + cursor: pointer; + padding-top: 5px; + padding-bottom: 5px; + + &:not(:first-child) { + border-top: 1px solid var(--sl-colorSecondary); + } + } + } +} + +@media only screen and (min-width: 750px) { + .sl { + &-search { + position: absolute; + top: 15px; + left: 15px; + width: 350px; + height: auto; + max-height: calc(100% - calc(15px * 2)); + border-radius: 10px; + background-color: #fff; + box-shadow: 0 2px 4px rgb(0 0 0 / 20%), 0 -1px 0 rgb(0 0 0 / 2%); + + &-toggleButton { + &, + &.sl-active { + display: none; + } + } + + &-autocomplete { + position: relative; + top: auto; + left: auto; + padding-bottom: 0; + } + } + } +} + +@media (hover: hover) { + .sl { + &-search { + &-autocompleteItem { + &:hover { + background-color: rgba(60 64 67 / 4%); + } + } + } + } +} diff --git a/src/components/search/search.js b/src/components/search/search.js new file mode 100644 index 00000000..9fd62a13 --- /dev/null +++ b/src/components/search/search.js @@ -0,0 +1,125 @@ +import TemplateSearch from 'components/search/templates/search' +import validateTarget from 'validate-target' +import geocoderMapBox from 'geocoder/mapbox' +import geocoderGoogleMaps from 'geocoder/google-maps' +import geocoderJawg from 'geocoder/jawg' + +export default class Search { + constructor({ map }) { + this.map = map + this.geocoderFunctions = { + mapbox: geocoderMapBox, + googlemaps: geocoderGoogleMaps, + jawg: geocoderJawg + } + this.timerAutocomplete = null + + this.onClickOnAutocomplete = this.onClickOnAutocomplete.bind(this) + this.onKeyupOnInputSearch = this.onKeyupOnInputSearch.bind(this) + this.onClickOnToggleButton = this.onClickOnToggleButton.bind(this) + } + + init() { + this.render() + + this.map.elements.search = this.map.elements.container.querySelector('.sl-search') + this.map.elements.searchForm = this.map.elements.container.querySelector('.sl-search-form') + this.map.elements.searchInput = + this.map.elements.container.querySelector('.sl-search-input') + this.map.elements.searchAutocomplete = + this.map.elements.container.querySelector('.sl-search-autocomplete') + this.map.elements.searchToggleButton = + this.map.elements.container.querySelector('.sl-search-toggleButton') + + this.addEvents() + } + + render() { + this.map.elements.container.insertAdjacentHTML('afterbegin', TemplateSearch()) + } + + addEvents() { + this.map.elements.searchAutocomplete.addEventListener('click', this.onClickOnAutocomplete) + this.map.elements.searchInput.addEventListener('keyup', this.onKeyupOnInputSearch) + this.map.elements.searchForm.addEventListener('submit', (e) => e.preventDefault()) + this.map.elements.searchToggleButton.addEventListener('click', this.onClickOnToggleButton) + } + + onClickOnAutocomplete(e) { + const target = e.target + const isAutocompleteItem = validateTarget({ + target, + selectorString: '.sl-search-autocompleteItem', + nodeName: 'div' + }) + + if (isAutocompleteItem) { + this.onClickOnAutocompleteItem(e) + } + } + + onClickOnAutocompleteItem(e) { + const target = e.target + + this.map.elements.searchAutocomplete.classList.remove('sl-active') + this.map.elements.searchAutocomplete.replaceChildren() + this.map.userPositionChecked = false + + this.map.requestStores({ + lat: parseFloat(target.getAttribute('data-lat')), + lng: parseFloat(target.getAttribute('data-lng')) + }) + } + + onKeyupOnInputSearch(e) { + e.preventDefault() + + if (e.target.value !== '') { + window.clearTimeout(this.timerAutocomplete) + this.timerAutocomplete = window.setTimeout(() => this.onFormSearchSubmit(), 200) + } + } + + onFormSearchSubmit() { + if ( + typeof this.map.geocoder.provider === 'string' && + this.geocoderFunctions[this.map.geocoder.provider] + ) { + this.geocoderFunctions[this.map.geocoder.provider]({ + value: this.map.elements.searchInput.value, + token: this.map.geocoder?.token, + countries: this.map.geocoder.countries?.join(',') || 'fr' + }).then((results) => { + this.renderAutocomplete({ + results + }) + }) + } else if (this.map.geocoder.provider instanceof Function) { + this.map.geocoder + .provider({ + value: this.map.elements.searchInput.value + }) + .then((results) => { + this.renderAutocomplete({ + results + }) + }) + } + } + + renderAutocomplete({ results }) { + const html = results + .map(({ text, lat, lng }) => { + return `
${text}
` + }) + .join('') + this.map.elements.searchAutocomplete.innerHTML = html + this.map.elements.results.classList.contains('sl-visible') && this.map.toggleMapList() + this.map.elements.searchAutocomplete.classList.add('sl-active') + } + + onClickOnToggleButton(e) { + e.preventDefault() + this.map.toggleMapList() + } +} diff --git a/src/components/search/templates/search.js b/src/components/search/templates/search.js new file mode 100644 index 00000000..ca727b1c --- /dev/null +++ b/src/components/search/templates/search.js @@ -0,0 +1,19 @@ +import glassSvg from 'shared/assets/svgs/glass.svg' +import listSvg from 'shared/assets/svgs/list.svg' +import mapSvg from 'shared/assets/svgs/map.svg' + +export default function TemplateSearch() { + return ` + + ` +} diff --git a/src/config.js b/src/config.js deleted file mode 100644 index 589daccf..00000000 --- a/src/config.js +++ /dev/null @@ -1,15 +0,0 @@ -// Import JS -import storelocatorjs from './js/storelocator.js' - -// Import CSS -import './css/vars.css' -import './css/loader.css' -import './css/detail-store.css' -import './css/form-search.css' -import './css/info-window.css' -import './css/nav.css' -import './css/sidebar.css' -import './css/map.css' -import './css/storelocator.css' - -export default storelocatorjs diff --git a/src/core/app.css b/src/core/app.css new file mode 100644 index 00000000..e7302e1a --- /dev/null +++ b/src/core/app.css @@ -0,0 +1,18 @@ +.sl { + &-app { + --sl-markerSearchColor: #107a8b; + --sl-markerGeolocationColor: #1da1f2; + --sl-colorSecondary: rgba(0 0 0 / 15%); + --sl-transition: 0.25s ease; + --sl-controlsColor: #000; + + position: relative; + font-family: -apple-system, system-ui, BlinkMacSystemFont, 'Segoe UI', Roboto, + 'Helvetica Neue', Arial, sans-serif; + + &, + * { + box-sizing: border-box; + } + } +} diff --git a/src/core/app.js b/src/core/app.js new file mode 100644 index 00000000..ea79a730 --- /dev/null +++ b/src/core/app.js @@ -0,0 +1,68 @@ +import './app.css' +import 'components/loader/loader.css' +import 'components/map/map.css' +import 'components/popup/popup.css' +import 'components/search/search.css' +import 'components/result/result.css' + +import Map from 'core/map' +// import check from './check' +import check from 'check' +import TemplateMap from 'components/map/templates/map' +import TemplateLoader from 'components/loader/templates/loader' + +class Storelocator { + constructor({ target, licenseKey, api, map, geocoder, templates, onReady }) { + this.target = target + this.licenseKey = licenseKey + + const MapProvider = map.provider(Map) + this.mapProvider = new MapProvider({ + api: Object.assign( + {}, + { + radius: 50, + limit: 50 + }, + api + ), + map: { + token: map.token, + options: map.options + }, + geocoder, + templates, + onReady + }) + + this.init() + } + + init() { + check(this.licenseKey) + .then(({ valid, message }) => { + if (valid) { + message && console.warn(message) + this.render() + this.buildLoader() + this.mapProvider.build() + } + }) + .catch((error) => console.error(error)) + } + + render() { + this.target.insertAdjacentHTML('beforeend', TemplateMap()) + } + + buildLoader() { + this.target.querySelector('.sl-app').insertAdjacentHTML('afterbegin', TemplateLoader()) + this.mapProvider.elements.loader = this.target.querySelector('.sl-loader') + } + + destroy() { + this.mapProvider.destroy() + } +} + +export default Storelocator diff --git a/src/core/check.js b/src/core/check.js new file mode 100644 index 00000000..00fc2b0a --- /dev/null +++ b/src/core/check.js @@ -0,0 +1 @@ +function _0x4494(_0x295c2c,_0x4ecaf7){const _0x4db4d7=_0x4db4();return _0x4494=function(_0x449498,_0x3711d8){_0x449498=_0x449498-0x73;let _0x5463c6=_0x4db4d7[_0x449498];return _0x5463c6;},_0x4494(_0x295c2c,_0x4ecaf7);}(function(_0x1c6839,_0x3783f8){const _0x59517c=_0x4494,_0x2ef4e8=_0x1c6839();while(!![]){try{const _0xd71e95=-parseInt(_0x59517c(0xa5))/0x1*(parseInt(_0x59517c(0x9a))/0x2)+parseInt(_0x59517c(0xa0))/0x3*(parseInt(_0x59517c(0xa3))/0x4)+parseInt(_0x59517c(0x7d))/0x5+-parseInt(_0x59517c(0x9f))/0x6*(parseInt(_0x59517c(0x73))/0x7)+-parseInt(_0x59517c(0xa2))/0x8+-parseInt(_0x59517c(0x78))/0x9*(-parseInt(_0x59517c(0x80))/0xa)+parseInt(_0x59517c(0x81))/0xb*(parseInt(_0x59517c(0x84))/0xc);if(_0xd71e95===_0x3783f8)break;else _0x2ef4e8['push'](_0x2ef4e8['shift']());}catch(_0x3777e2){_0x2ef4e8['push'](_0x2ef4e8['shift']());}}}(_0x4db4,0x313df));function stringToHex(_0x1bbea4){const _0x1f2921=_0x4494;let _0x54962d='';for(let _0x49d441=0x0;_0x49d441<_0x1bbea4[_0x1f2921(0x79)];_0x49d441++){const _0x9a6f1f=_0x1bbea4[_0x1f2921(0x97)](_0x49d441),_0x348cc0=_0x9a6f1f[_0x1f2921(0x96)](0x10);_0x54962d+=_0x348cc0[_0x1f2921(0x91)](0x2,'0');}return _0x54962d;}function hexaToText(_0x4bb610){const _0x2da634=_0x4494;var _0x2622b8=_0x4bb610[_0x2da634(0x96)](),_0x58fe6a='';for(var _0x49943c=0x0;_0x49943c<_0x2622b8['length'];_0x49943c+=0x2)_0x58fe6a+=String['fromCharCode'](parseInt(_0x2622b8[_0x2da634(0x7f)](_0x49943c,0x2),0x10));return _0x58fe6a;}async function activate(_0x5abe91){const _0x4eccb8=_0x4494;return fetch(_0x4eccb8(0x94),{'method':_0x4eccb8(0x75),'headers':{'Accept':_0x4eccb8(0x95),'Content-Type':_0x4eccb8(0x82)},'body':new URLSearchParams({'license_key':_0x5abe91,'instance_name':_0x4eccb8(0x88)})})[_0x4eccb8(0xa4)](_0x41087d=>_0x41087d[_0x4eccb8(0x8d)]());}function _0x4db4(){const _0x114d85=['sessionStorage','2442NLApxw','156810UdDkFT','license_key','339128EiwhDK','8XGXoQw','then','390501GbVvPN','4403vjaUVt','hostname','POST','status','getItem','2933883wHSQTe','length','Storelocatorjs:\x20License\x20key\x20verification\x20failed','|0.1_z','valid','1661050lfgHhC','includes','substr','10BZxRWf','649tetAXF','application/x-www-form-urlencoded','validate','26004RwtsCX','localhost','split','removeItem','storelocator-default-license','sl-check','log','setItem','316c','json','getTime','316c|0.1_z;','$1.','padStart','location','Promise','https://api.lemonsqueezy.com/v1/licenses/activate','application/json','toString','charCodeAt','replace','3073','2juOGLT','activated','https://api.lemonsqueezy.com/v1/licenses/validate','activate'];_0x4db4=function(){return _0x114d85;};return _0x4db4();}function validate(_0x4c0762){const _0x430176=_0x4494;return fetch(_0x430176(0x9c),{'method':_0x430176(0x75),'headers':{'Accept':'application/json','Content-Type':_0x430176(0x82)},'body':new URLSearchParams({'license_key':_0x4c0762})})[_0x430176(0xa4)](_0x19d50d=>_0x19d50d[_0x430176(0x8d)]());}function successCallback(){}export default async function check(_0x61e21b){const _0x473299=_0x4494;return new window[(_0x473299(0x93))]((_0x374038,_0x255142)=>{const _0x42a4bb=_0x473299;if(![]&&[_0x42a4bb(0x85),'storelocator.js.org'][_0x42a4bb(0x7e)](window[_0x42a4bb(0x92)][_0x42a4bb(0x74)])){_0x374038({'valid':!![],'dev':'Storelocatorjs::License\x20key\x20is\x20missing,\x20for\x20development\x20purposes\x20only.'});return;}else{const _0x5679d3=new Date(),_0x56d18f=stringToHex(_0x42a4bb(0x89))[_0x42a4bb(0x98)](/(.{3})/g,_0x42a4bb(0x90)),_0x2713c7=0x3c*0x3c*0x3e8*0x6;let _0x41df12=window['sessionStorage'][_0x42a4bb(0x77)](_0x56d18f);if(_0x41df12){const _0x16e46b=_0x41df12['replace']('3073','')[_0x42a4bb(0x98)](_0x42a4bb(0x8c),'')[_0x42a4bb(0x86)](_0x42a4bb(0x7b))[0x0];if(_0x5679d3[_0x42a4bb(0x8e)]()-hexaToText(_0x16e46b)<_0x2713c7){_0x374038({'valid':!![]});return;}else window[_0x42a4bb(0x9e)][_0x42a4bb(0x87)](_0x56d18f),_0x41df12=undefined;}validate(_0x61e21b)[_0x42a4bb(0xa4)](_0xb4d9c2=>{const _0x1d9fc6=_0x42a4bb;console[_0x1d9fc6(0x8a)](_0x1d9fc6(0x83),_0xb4d9c2);if(_0xb4d9c2[_0x1d9fc6(0x7c)]){if(_0xb4d9c2['license_key']['status']==='inactive')activate(_0x61e21b)['then'](_0x26f2c4=>{const _0x241c76=_0x1d9fc6;console['log'](_0x241c76(0x9d),_0x26f2c4);if(_0x26f2c4[_0x241c76(0x9b)])window[_0x241c76(0x9e)][_0x241c76(0x8b)](_0x56d18f,_0x241c76(0x99)+stringToHex(_0x5679d3[_0x241c76(0x8e)]()+'')+_0x241c76(0x8f)),_0x374038({'valid':!![]});else _0x255142(new Error(_0x241c76(0x7a)));});else{if(_0xb4d9c2[_0x1d9fc6(0xa1)][_0x1d9fc6(0x76)]==='active')window['sessionStorage']['setItem'](_0x56d18f,_0x1d9fc6(0x99)+stringToHex(_0x5679d3[_0x1d9fc6(0x8e)]()+'')+_0x1d9fc6(0x8f)),_0x374038(_0xb4d9c2);else _0x255142(new Error('Storelocatorjs:\x20License\x20key\x20verification\x20failed'));}}else _0x255142(new Error('Storelocatorjs:\x20License\x20key\x20verification\x20failed'));});}});} \ No newline at end of file diff --git a/src/core/map.js b/src/core/map.js new file mode 100644 index 00000000..2c519d20 --- /dev/null +++ b/src/core/map.js @@ -0,0 +1,407 @@ +import validateTarget from 'validate-target' +import { extend } from 'shared/utils/utils' +import markerSvg from 'shared/assets/svgs/marker.svg' +import Search from 'components/search/search' +import TemplateResult from 'components/result/templates/result' +import TemplatePopup from 'components/popup/templates/popup.js' + +export default class Map { + constructor({ api, map, geocoder, templates, onReady }) { + this.api = api + this.map = map + this.geocoder = geocoder + this.templates = templates + this.callback = onReady + + this.elements = { + container: null, + search: null, + searchForm: null, + searchInput: null, + searchToggleButton: null, + searchAutocomplete: null, + map: null, + results: null, + controls: null, + geolocButton: null, + zoomInButton: null, + zoomOutButton: null + } + this.mapEvents = [] + + this.search = new Search({ + map: this + }) + + this.onClickResult = this.onClickResult.bind(this) + this.onClickGeolocationButton = this.onClickGeolocationButton.bind(this) + this.onClickZoomInButton = this.onClickZoomInButton.bind(this) + this.onClickZoomOutButton = this.onClickZoomOutButton.bind(this) + } + + build() { + const container = document.querySelector('.sl-app') + this.elements.container = container + this.elements.results = container.querySelector('.sl-results') + this.elements.map = container.querySelector('.sl-map') + this.elements.controls = container.querySelector('.sl-controls') + this.elements.geolocButton = container.querySelector('.sl-geolocButton') + this.elements.zoomInButton = container.querySelector('.sl-zoomInButton') + this.elements.zoomOutButton = container.querySelector('.sl-zoomOutButton') + + this.init() + this.search.init() + } + + init() { + throw new Error('You have to implement the function "init".') + } + + waitUntilApiIsReady() { + throw new Error('You have to implement the function "waitUntilApiIsReady".') + } + + getInstance() { + throw new Error('You have to implement the function "getInstance".') + } + + getMarkerLatLng() { + throw new Error('You have to implement the function "getMarkerLatLng".') + } + + panTo() { + throw new Error('You have to implement the function "panTo".') + } + + setZoom() { + throw new Error('You have to implement the function "setZoom".') + } + + getZoom() { + throw new Error('You have to implement the function "getZoom".') + } + + latLngBounds() { + throw new Error('You have to implement the function "latLngBounds".') + } + + latLngBoundsExtend() { + throw new Error('You have to implement the function "latLngBoundsExtend".') + } + + fitBounds() { + throw new Error('You have to implement the function "fitBounds".') + } + + latLng() { + throw new Error('You have to implement the function "latLng".') + } + + createMarker() { + throw new Error('You have to implement the function "createMarker".') + } + + openPopup() { + throw new Error('You have to implement the function "openPopup".') + } + + removeMarker() { + throw new Error('You have to implement the function "removeMarker".') + } + + resize() { + throw new Error('You have to implement the function "resize".') + } + + onReady() { + this.markers = [] + this.markerWithColors = this.getMarkerWithColors() + this.addEvents() + this.elements.searchInput.focus() + this.callback instanceof Function && this.callback(this) + } + + on(type, listener) { + if (listener instanceof Function) { + this.mapEvents.push({ type, listener }) + this.elements.container.addEventListener(type, listener) + } + } + + off(type, listener) { + if (listener instanceof Function) { + this.elements.container.removeEventListener(type, listener) + } + } + + dispatchEvent(type, detail) { + this.elements.container.dispatchEvent( + new window.CustomEvent(type, { + detail + }) + ) + } + + getMarkerWithColors() { + const styles = getComputedStyle(this.elements.container) + const searchColor = styles.getPropertyValue('--sl-markerSearchColor') + const geolocationColor = styles.getPropertyValue('--sl-markerGeolocationColor') + + return { + search: markerSvg.replace('{{markerColor}}', searchColor), + geolocation: markerSvg.replace('{{markerColor}}', geolocationColor) + } + } + + addEvents() { + this.elements.results.addEventListener('click', this.onClickResult) + this.elements.geolocButton.addEventListener('click', this.onClickGeolocationButton) + this.elements.zoomInButton.addEventListener('click', this.onClickZoomInButton) + this.elements.zoomOutButton.addEventListener('click', this.onClickZoomOutButton) + } + + onClickResult(e) { + const target = e.target + const isResultItem = validateTarget({ + target, + selectorString: '.sl-result', + nodeName: 'div' + }) + + if (isResultItem) { + this.onClickResultItem(e) + } + } + + onClickResultItem(e) { + e.preventDefault() + + const target = e.target + const markerIndex = target.getAttribute('data-marker-index') + const marker = this.markers[markerIndex] + + if (this.isMobile()) { + this.panTo(this.getMarkerLatLng(marker)) + } else { + this.panTo( + this.getLatLngWithOffset({ + latLng: this.getMarkerLatLng(marker), + offsetX: this.elements.search.offsetWidth / 2 + }) + ) + } + + this.openPopup(marker) + this.resize() + this.elements.results.classList.contains('sl-visible') && this.toggleMapList() + } + + toggleMapList() { + this.elements.results.classList.toggle('sl-visible') + this.elements.searchToggleButton + .querySelector('.sl-search-toggleMap') + .classList.toggle('sl-active') + this.elements.searchToggleButton + .querySelector('.sl-search-toggleList') + .classList.toggle('sl-active') + } + + onClickGeolocationButton(e) { + e.preventDefault() + if (navigator.geolocation) { + this.requestUserPosition() + } else { + this.elements.geolocButton.classList.add('sl-error') + } + } + + onClickZoomInButton(e) { + e.preventDefault() + this.setZoom(this.getZoom() + 1) + this.dispatchEvent('zoomIn') + } + + onClickZoomOutButton(e) { + e.preventDefault() + this.setZoom(this.getZoom() - 1) + this.dispatchEvent('zoomOut') + } + + requestUserPosition() { + this.loading(true) + navigator.geolocation.getCurrentPosition( + ({ coords: { latitude: lat, longitude: lng } }) => { + this.dispatchEvent('userPosition', { + lat, + lng + }) + this.createMarker({ + feature: { + latLng: this.latLng({ + lat, + lng + }) + }, + type: 'geolocation' + }) + + if (this.elements.searchInput.value !== '') { + this.elements.searchInput.value = '' + } + + this.requestStores({ + lat, + lng + }).then(() => { + this.elements.geolocButton.classList.add('sl-active') + }) + }, + (error) => { + console.warn('Storelocator: requestUserPosition', error) + this.elements.geolocButton.classList.add('sl-error') + this.loading(false) + } + ) + } + + requestStores({ lat, lng }) { + this.loading(true) + + return new window.Promise((resolve) => { + try { + fetch(this.api.url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + lat, + lng, + radius: this.api.radius, + limit: this.api.limit + }) + }) + .then((response) => { + console.log(response) + if (response.ok) { + return response.json() + } + + console.warn('Storelocatorjs: requestStores', response) + this.loading(false) + }) + .then((features) => { + features && + this.parseStores({ + features + }) + resolve() + }) + } catch (error) { + console.warn('Storelocatorjs: requestStores', error) + this.loading(false) + } + }) + } + + parseStores({ features }) { + this.destroyMarkers() + this.boundsGlobal = this.latLngBounds() + + if (features.length) { + let html = '' + + this.elements.results.innerHTML = html + + this.fitBounds({ latLngBounds: this.boundsGlobal }) + !this.isMobile() && + this.onFitBoundsEnd(() => this.panBy(-(this.elements.search.offsetWidth / 2), 0)) + + this.dispatchEvent('storeFound') + } else { + this.dispatchEvent('storeNotFound') + this.elements.results.innerHTML = + '

No results for your request.
Please try a new search with differents choices.

' + } + + this.elements.searchToggleButton.classList.add('sl-active') + this.elements.results.classList.add('sl-active') + this.loading(false) + } + + destroyMarkers() { + for (let i = this.markers.length - 1; i >= 0; i--) { + this.removeMarker(this.markers[i]) + } + this.markers = [] + } + + loading(state) { + this.isLoading = state + this.elements.loader.classList[state ? 'add' : 'remove']('sl-active') + this.dispatchEvent('progress') + } + + getPopupTemplate() { + if (this.templates?.popup instanceof Function) { + return this.templates.popup + } + + return TemplatePopup + } + + getResultTemplate() { + if (this.templates?.result instanceof Function) { + return this.templates.result + } + + return TemplateResult + } + + utils() { + return { + extend + } + } + + isMobile() { + return !window.matchMedia('(min-width: 750px)').matches + } + + removeEvents() { + this.elements.results.removeEventListener('click', this.onClickResult) + this.elements.geolocButton.removeEventListener('click', this.onClickGeolocationButton) + this.elements.zoomInButton.removeEventListener('click', this.onClickZoomInButton) + this.elements.zoomOutButton.removeEventListener('click', this.onClickZoomOutButton) + } + + destroy() { + this.instance = null + this.removeEvents() + this.elements.container.remove() + } +} diff --git a/src/css/detail-store.css b/src/css/detail-store.css deleted file mode 100644 index 5e2dade5..00000000 --- a/src/css/detail-store.css +++ /dev/null @@ -1,67 +0,0 @@ -.storelocator { - &-detailStore { - position: relative; - font-size: 13px; - color: var(--colorDetailStore); - } - - &-detailStoreTitle { - margin-bottom: 10px; - text-transform: capitalize; - font-weight: 500; - font-size: 16px; - display: block; - - a { - text-decoration: none; - color: var(--colorDetailStore); - } - - span { - display: inline; - } - } - - &-detailStoreDistance { - position: absolute; - top: 50%; - right: 0; - transform: translateY(-50%); - color: var(--colorDetailStoreDistance); - display: flex; - flex-direction: row; - align-items: center; - text-decoration: none; - } - - &-detailStoreIconRoute { - fill: var(--colorDetailStoreDistance); - width: 20px; - margin-left: 10px; - } - - &-detailStoreCity { - display: inline-block; - vertical-align: top; - padding-bottom: 12px; - } - - &-detailStoreAddress { - display: block; - padding-bottom: 12px; - padding-right: 90px; - } - - &-detailStoreZipcode { - padding-bottom: 12px; - } - - &-detailStorePhone { - display: block; - - a { - text-decoration: none; - color: var(--colorDetailStore); - } - } -} diff --git a/src/css/form-search.css b/src/css/form-search.css deleted file mode 100644 index 07dae853..00000000 --- a/src/css/form-search.css +++ /dev/null @@ -1,97 +0,0 @@ -.storelocator { - &-formSearch { - position: relative; - width: 100%; - height: auto; - padding: 20px; - background-color: #fff; - } - - &-inputSearch { - width: 100%; - height: 40px; - padding-left: 10px; - font-size: 15px; - border: none; - outline: none; - box-shadow: 0 2px 4px rgb(0 0 0 / 20%), 0 -1px 0 rgb(0 0 0 / 2%); - } - - &-formFilters { - margin-top: 20px; - - label { - position: relative; - padding: 5px 5px 6px 37px; - font-size: 14px; - cursor: pointer; - - &::before { - content: ''; - display: block; - width: 20px; - height: 20px; - position: absolute; - top: 0; - left: 0; - border: 1px solid var(--colorFilters); - border-radius: 3px; - border-width: 2px; - } - - &::after { - content: ''; - display: block; - opacity: 0; - position: absolute; - width: 14px; - height: 14px; - top: 5px; - left: 5px; - border-radius: 3px; - transition: opacity 200ms ease-out; - background-color: var(--colorFilters); - } - } - - input[type='checkbox'] { - position: absolute; - opacity: 0; - top: 4px; - left: 4px; - - &:checked + label::after { - opacity: 1; - } - } - } - - &-formFiltersRow { - display: flex; - align-items: center; - margin-top: 15px; - - &:first-child { - margin-top: 0; - } - } - - &-formCheckbox { - font-size: 13px; - position: relative; - display: block; - width: 50%; - padding: 4px 0; - } -} - -@media (--media-tablet) { - .storelocator { - &-formSearch { - height: auto; - z-index: 5; - border-radius: 5px 5px 0 0; - box-shadow: 0 2px 4px rgb(0 0 0 / 20%), 0 -1px 0 rgb(0 0 0 / 2%); - } - } -} diff --git a/src/css/info-window.css b/src/css/info-window.css deleted file mode 100644 index 4597da83..00000000 --- a/src/css/info-window.css +++ /dev/null @@ -1,38 +0,0 @@ -.storelocator { - &-infoWindow { - padding: 10px 0 10px 10px; - - .storelocator-pictureStore { - margin-bottom: 20px; - display: block; - max-width: 250px; - - img { - display: block; - width: 100%; - height: auto; - } - } - - .storelocator-detailStore { - max-width: 250px; - } - - .storelocator-detailStoreAddress { - padding-right: 0; - } - - .storelocator-detailStoreTitle { - padding-right: 90px; - } - - .storelocator-detailStoreDistance { - top: 0; - transform: none; - } - - .storelocator-detailStoreUrl { - color: #000; - } - } -} diff --git a/src/css/map.css b/src/css/map.css deleted file mode 100644 index 3a9a9ebe..00000000 --- a/src/css/map.css +++ /dev/null @@ -1,71 +0,0 @@ -.storelocator { - &-googleMaps { - position: relative; - height: 0; - padding-top: 100%; - display: none; - overflow: hidden; - width: 100%; - - &.active { - display: block; - } - - #storelocator-googleMapsCanvas { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - } - } - - &-geolocButton { - position: absolute; - right: 10px; - bottom: 105px; - width: 40px; - height: 40px; - background-color: #fff; - border: none; - cursor: pointer; - - &::before { - content: ''; - background-image: url('//maps.gstatic.com/tactile/mylocation/mylocation-sprite-2x.png'); - background-size: 180px 18px; - display: block; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: 18px; - height: 18px; - } - } -} - -/* Override autocomplete styles */ -.pac-container { - .pac-item { - padding: 4px 5px 3px; - } - - .pac-icon { - margin-right: 9px; - margin-left: 5px; - } -} - -@media (--media-tablet) { - .storelocator { - &-googleMaps { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - padding-top: 0; - } - } -} diff --git a/src/css/nav.css b/src/css/nav.css deleted file mode 100644 index 639c9e21..00000000 --- a/src/css/nav.css +++ /dev/null @@ -1,54 +0,0 @@ -.storelocator { - &-nav { - height: 40px; - position: relative; - z-index: 10; - } - - &-navList { - display: flex; - align-items: center; - text-align: center; - height: 100%; - margin: 0; - padding: 0; - } - - &-navButton { - display: block; - width: 100%; - height: 100%; - position: relative; - color: var(--grey); - border: 0; - appearance: none; - font-size: 16px; - font-family: inherit; - cursor: pointer; - background: none; - outline: none; - } - - &-navListItem { - width: 50%; - height: 100%; - list-style-type: none; - border-bottom: 1px solid var(--grey); - - &.active { - border-bottom: 2px solid #000; - - .storelocator-navButton { - color: #000; - } - } - } -} - -@media (--media-tablet) { - .storelocator { - .storelocator-nav { - display: none; - } - } -} diff --git a/src/css/sidebar.css b/src/css/sidebar.css deleted file mode 100644 index e6971a0c..00000000 --- a/src/css/sidebar.css +++ /dev/null @@ -1,76 +0,0 @@ -.storelocator { - &-sidebarResults { - display: none; - overflow: auto; - height: 100%; - border-top: 1px solid #e7e7e7; - } - - &-sidebar { - position: relative; - display: flex; - flex-direction: column; - z-index: 1; - background: #fff; - - &.active { - .storelocator-sidebarResults { - display: block; - } - } - } - - &-sidebarResultsListItem { - display: block; - padding: 20px; - border-top: 1px solid #e7e7e7; - - &:first-child { - border-top: none; - } - } - - &-sidebarResultsList { - padding: 0; - margin: 0; - } - - &-sidebarNoResults { - margin: 0; - padding: 20px; - font-size: 13px; - line-height: 20px; - color: var(--grey); - font-style: italic; - } - - &-sidebarIntro { - font-size: 13px; - line-height: 20px; - font-style: italic; - padding: 10px 20px; - color: var(--grey); - margin: 0; - } -} - -@media (--media-tablet) { - .storelocator { - &-sidebar { - position: absolute; - top: var(--offsetSidebar); - left: var(--offsetSidebar); - width: var(--widthFormSearch); - height: auto; - max-height: calc(100% - calc(var(--offsetSidebar) * 2)); - z-index: 5; - border-radius: 0 0 5px 5px; - background-color: #fff; - box-shadow: 0 2px 4px rgb(0 0 0 / 20%), 0 -1px 0 rgb(0 0 0 / 2%); - } - - &-sidebarResults { - display: block; - } - } -} diff --git a/src/css/storelocator.css b/src/css/storelocator.css deleted file mode 100644 index 2bc3adce..00000000 --- a/src/css/storelocator.css +++ /dev/null @@ -1,26 +0,0 @@ -html, -body { - height: auto; - margin: 0; -} - -.storelocator { - position: relative; - height: auto; - - &, - * { - box-sizing: border-box; - } -} - -@media (--media-tablet) { - html, - body { - height: 100%; - } - - .storelocator { - height: 100%; - } -} diff --git a/src/css/vars.css b/src/css/vars.css deleted file mode 100644 index 0cb48d32..00000000 --- a/src/css/vars.css +++ /dev/null @@ -1,16 +0,0 @@ -:root { - --offsetSidebar: 20px; - --breakpointModile: 767px; - --widthFormSearch: 350px; - --heightFormSearch: 161px; - --colorFilters: rgb(0 0 0 / 30%); - --colorDetailStoreDistance: #9a9a9a; - --colorDetailStore: #000; - --colorLoader1: #f60; - --colorLoader2: #fc3; - --colorLoader3: #ea4c89; - --colorMobileNav: #b9b8b8; - --grey: #b9b8b8; -} - -@custom-media --media-tablet only screen and (min-width: 750px); diff --git a/src/geocoder/google-maps.js b/src/geocoder/google-maps.js new file mode 100644 index 00000000..b45bb7ee --- /dev/null +++ b/src/geocoder/google-maps.js @@ -0,0 +1,17 @@ +import { fetchFromGeocoder } from 'shared/utils/utils' + +export default async function googleMapsGeocode({ value, countries, token }) { + return new window.Promise((resolve) => { + fetchFromGeocoder( + `https://maps.googleapis.com/maps/api/geocode/json?address=${value}®ion=${countries}&key=${token}` + ).then((response) => + resolve( + response.results.map((result) => ({ + text: result.formatted_address, + lat: result.geometry.location.lat, + lng: result.geometry.location.lng + })) + ) + ) + }) +} diff --git a/src/geocoder/jawg.js b/src/geocoder/jawg.js new file mode 100644 index 00000000..f98b560e --- /dev/null +++ b/src/geocoder/jawg.js @@ -0,0 +1,17 @@ +import { fetchFromGeocoder } from 'shared/utils/utils' + +export default async function jawgGeocode({ value, countries, token }) { + return new window.Promise((resolve) => { + fetchFromGeocoder( + `https://api.jawg.io/places/v1/search?text=${value}&boundary.country=${countries}&access-token=${token}` + ).then((response) => + resolve( + response.features.map((result) => ({ + text: result.properties.label, + lat: result.geometry.coordinates[1], + lng: result.geometry.coordinates[0] + })) + ) + ) + }) +} diff --git a/src/geocoder/mapbox.js b/src/geocoder/mapbox.js new file mode 100644 index 00000000..010c1ff5 --- /dev/null +++ b/src/geocoder/mapbox.js @@ -0,0 +1,17 @@ +import { fetchFromGeocoder } from 'shared/utils/utils' + +export default async function mapBoxGeocode({ value, countries, token, limit = 5 }) { + return new window.Promise((resolve) => { + fetchFromGeocoder( + `https://api.mapbox.com/geocoding/v5/mapbox.places/${value}.json?limit=${limit}&access_token=${token}&country=${countries}` + ).then((response) => + resolve( + response.features.map((result) => ({ + text: result.place_name, + lat: result.geometry.coordinates[1], + lng: result.geometry.coordinates[0] + })) + ) + ) + }) +} diff --git a/src/js/default-options.js b/src/js/default-options.js deleted file mode 100644 index 28149b3f..00000000 --- a/src/js/default-options.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * storelocatorjs default options - * @module storelocatorjs/defaultOptions - */ -export default { - apiKey: '', - webServiceUrl: '', - cluster: { - options: { - averageCenter: true, - gridSize: 50, - imagePath: - 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m', - maxZoom: 13, - minimumClusterSize: 2, - styles: [], - zoomOnClick: true - }, - status: false - }, - debug: false, - geolocation: { - startOnLoad: false, - status: true - }, - map: { - markers: { - width: 30, - height: 40, - styles: [ - { - category: 'userPosition', - colorBackground: '#4285f4', - colorText: '#fff' - } - ] - }, - options: { - center: [46.227638, 2.213749], - disableDefaultUI: false, - fullscreenControl: true, - mapTypeControl: false, - mapTypeId: 'roadmap', - scaleControl: false, - scrollwheel: true, - streetViewControl: false, - styles: [], - zoom: 6 - } - }, - requests: { - searchRadius: 50, - storesLimit: 20 - }, - selectors: { - container: '.storelocator', - formSearch: '.storelocator-formSearch', - geolocButton: '.storelocator-geolocButton', - inputSearch: '.storelocator-inputSearch', - loader: '.storelocator-loader', - nav: '.storelocator-nav', - searchFilters: '[data-filter]', - sidebar: '.storelocator-sidebar', - sidebarResults: '.storelocator-sidebarResults' - }, - markersUpdate: { - limitInViewport: 30, - maxRadius: 150, - status: true, - stepRadius: 50 - } -} diff --git a/src/js/storelocator.js b/src/js/storelocator.js deleted file mode 100644 index e055371d..00000000 --- a/src/js/storelocator.js +++ /dev/null @@ -1,928 +0,0 @@ -/** - * @name Storelocatorjs - * @version 2.1.0 - * @license GPLv3 for Open Source use or Storelocatorjs Commercial License for commercial use - * @author: Joris DANIEL aka Yoriiis - * @description: Storelocatorjs is a fast and lightweight Javascript library for build your own customizable store locator with a minimalist theme. The cloud function is included to handle store filter requests. - * {@link https://storelocatorjs.github.io} - * @copyright 2019 Joris DANIEL aka Yoriiis - */ - -'use strict' - -import templateSidebarItemResult from './templates/sidebar-item-result' -import templateInfoWindow from './templates/info-window' -import markerSvg from '../svg/marker.svg' -import defaultOptions from './default-options' - -/** - * storelocatorjs - * @module storelocatorjs - */ -export default class Storelocator { - /** - * Instanciate the constructor - * @constructor - * @param {Object} options Storelocatorjs options - * @param {Function} onReady Callback function executed when the store locator is ready - */ - constructor({ options, onReady }) { - this.options = this.extend(true, defaultOptions, options) - this.onReady = onReady - this.isLoading = false - this.mapHasRequest = false - - if (this.options.webServiceUrl === '') { - throw new Error('storelocatorjs :: webServiceUrl is empty') - } - - if (this.options.apiKey === '') { - throw new Error('storelocatorjs :: apiKey is empty') - } - - this.cacheSelectors() - this.buildLoader() - this.markerStyles = this.getMarkerStylesByCategory() - - window.googleMapLoaded = () => { - if (this.options.geolocation.status) { - this.initGeolocation() - } - - this.initMap() - this.addGoogleMapsEvents() - this.initAutocomplete() - } - - this.loadAPI(this.options.apiKey) - this.addEvents() - } - - /** - * Cache DOM selectors - */ - cacheSelectors() { - this.containerStorelocator = document.querySelector(this.options.selectors.container) - this.formSearch = this.containerStorelocator.querySelector( - this.options.selectors.formSearch - ) - this.inputSearch = this.containerStorelocator.querySelector( - this.options.selectors.inputSearch - ) - this.searchFilters = [ - ...this.containerStorelocator.querySelectorAll(this.options.selectors.searchFilters) - ] - this.nav = this.containerStorelocator.querySelector(this.options.selectors.nav) - this.sidebar = this.containerStorelocator.querySelector(this.options.selectors.sidebar) - this.sidebarResults = this.containerStorelocator.querySelector( - this.options.selectors.sidebarResults - ) - this.geolocButton = this.containerStorelocator.querySelector( - this.options.selectors.geolocButton - ) - } - - /** - * Build the loader - */ - buildLoader() { - this.loader = this.containerStorelocator.querySelector(this.options.selectors.loader) - this.loader.innerHTML = ` -
-
-
` - } - - /** - * Load the Youtube API - * @param {String} apiKey Youtube API key - */ - loadAPI(apiKey) { - const script = document.createElement('script') - script.async = true - script.type = 'text/javascript' - script.src = `https://maps.googleapis.com/maps/api/js?key=${apiKey}&callback=window.googleMapLoaded&libraries=places` - document.getElementsByTagName('body')[0].appendChild(script) - } - - /** - * Create event listeners - */ - addEvents() { - // Event listener on sidebar result items - this.sidebarResults.addEventListener('click', this.onClickSidebarResultItem.bind(this)) - - // Event listeners on sidebar navigation items - const buttons = [...this.nav.querySelectorAll('[data-switch-view]')] - buttons.forEach((button) => { - button.addEventListener('click', this.onClickSidebarNav.bind(this)) - }) - - // Event listener on search form - // Prevent native form submit, managed by autocomplete - this.formSearch.addEventListener('submit', (e) => { - e.preventDefault() - }) - - // Event listener on search form filters - this.searchFilters.forEach((filter) => { - filter.addEventListener('change', this.onChangeSearchFormFilter.bind(this)) - }) - - this.geolocButton.addEventListener('click', this.onClickGeolocationButton.bind(this)) - } - - /** - * Create Google Maps event listeners - */ - addGoogleMapsEvents() { - // Event listener on search form input - this.inputSearch.addEventListener('keydown', (e) => { - if (e.keyCode === 13) { - e.preventDefault() - } - }) - } - - /** - * Update the loader status - * @param {Boolean} state Status of the loader - */ - loading(state) { - if (state) { - this.loader.classList.add('active') - this.isLoading = true - } else { - // Wait a moment to show the loader - setTimeout(() => { - this.loader.classList.remove('active') - this.isLoading = false - }, 1050) - } - } - - /** - * Initialize the Google Maps - */ - initMap() { - // Create global variables for Google Maps - this.overlayGlobal = null - this.overlayLimit = null - this.markers = [] - this.currentInfoWindow = null - this.infoWindowOpened = false - this.boundsChangeTimer = null - - this.serviceDistanceMatrix = new window.google.maps.DistanceMatrixService() - this.boundsGlobal = new window.google.maps.LatLngBounds() - this.currentRadius = this.options.requests.searchRadius - - if (this.options.markersUpdate.status) { - this.boundsWithLimit = new window.google.maps.LatLngBounds() - } - - this.infoWindow = new window.google.maps.InfoWindow() - this.geocoder = new window.google.maps.Geocoder() - this.searchData = { - position: null - } - - // Set default geolocation datas - this.geolocationData = { - userPositionChecked: false, - marker: null, - position: null - } - - // Clone object before to prevent reference - const mapOptions = this.extend(true, {}, this.options.map.options) - - mapOptions.center = new window.google.maps.LatLng( - mapOptions.center[0], - mapOptions.center[1] - ) - - // Init Google Maps API with options - const googleMapsCanvas = this.containerStorelocator.querySelector( - '#storelocator-googleMapsCanvas' - ) - this.map = new window.google.maps.Map(googleMapsCanvas, mapOptions) - - if (typeof window.MarkerClusterer !== 'undefined') { - if (this.options.cluster.status) { - // Clone object before to prevent reference - const cloneClusterOptions = this.extend(true, this.options.cluster.options) - this.markerCluster = new window.MarkerClusterer( - this.map, - this.markers, - cloneClusterOptions - ) - } - } - - // Detect zoom changed and bounds changed to refresh marker on the map - if (this.options.markersUpdate.status) { - this.map.addListener('bounds_changed', () => { - // Prevent multiple event triggered when loading and infoWindow opened - if (!this.isLoading && !this.infoWindowOpened) { - this.boundsChanged() - } - }) - } - - // Called the user callback if available - if (typeof this.onReady === 'function') { - this.onReady(this.map) - } - } - - /** - * Initialize the user geolocation - */ - initGeolocation() { - // Check the browser support - if (navigator.geolocation) { - // Start geolocation on page load - if (this.options.geolocation.startOnLoad) { - if (window.location.protocol === 'https:') { - this.checkUserPosition() - } - } - } - } - - /** - * On click on geolocation button - * @param {Object} e Event listener datas - */ - onClickGeolocationButton(e) { - e.preventDefault() - if (navigator.geolocation) { - this.loading(true) - this.checkUserPosition() - } - } - - /** - * Click on sidebar navigation item - * @param {Object} e Event listener datas - */ - onClickSidebarNav(e) { - const mapView = this.containerStorelocator.querySelector('.storelocator-googleMaps') - - e.preventDefault() - - this.nav.querySelector('.active').classList.remove('active') - e.target.parentNode.classList.add('active') - - if (e.target.getAttribute('data-target') === 'map') { - mapView.classList.add('active') - this.sidebar.classList.remove('active') - window.google.maps.event.trigger(this.map, 'resize') - } else { - this.sidebar.classList.add('active') - mapView.classList.remove('active') - } - } - - /** - * On change on search form filters - * @param {Object} e Event listener datas - */ - onChangeSearchFormFilter(e) { - // Not filters if there is not search value - if (!this.mapHasRequest) return false - - this.triggerRequest({ - lat: this.searchData.lat, - lng: this.searchData.lng, - fitBounds: true - }) - } - - /** - * On click on sidebar result item - * @param {Object} e Event listener datas - */ - onClickSidebarResultItem(e) { - if (e.target && e.target.parentNode.classList.contains('store-center-marker-js')) { - e.preventDefault() - - const currentLink = e.target.parentNode - const markerIndex = currentLink.getAttribute('data-marker-index') - const currentMarker = this.markers[markerIndex] - - this.map.panTo(currentMarker.getPosition()) - this.map.setZoom(16) - this.openInfoWindow(currentMarker) - this.containerStorelocator - .querySelector('[data-switch-view][data-target="map"]') - .click() - window.google.maps.event.trigger(this.map, 'resize') - } - } - - /** - * Check user position with Google Maps geolocation API - * Get the user current position if available - */ - checkUserPosition() { - navigator.geolocation.getCurrentPosition( - (position) => { - const lat = position.coords.latitude - const lng = position.coords.longitude - let markerGeoloc = null - const positionGeoloc = new window.google.maps.LatLng(lat, lng) - - const options = { - position: positionGeoloc, - map: this.map - } - - // Disable SVG for IE, they don't works - if (!this.isBrowserIE()) { - options.icon = this.options.map.markers.styles.length - ? this.getIconMarkerByCategory('userPosition').url - : '' - } - - markerGeoloc = new window.google.maps.Marker(options) - - // Store geolocation data - this.geolocationData.userPositionChecked = true - this.geolocationData.position = positionGeoloc - this.geolocationData.marker = markerGeoloc - - if (this.inputSearch.value !== '') { - this.inputSearch.value = '' - } - - this.triggerRequest({ - lat, - lng - }) - }, - (response) => { - this.loading(false) - } - ) - } - - /** - * Function called on user map moved event - */ - boundsChanged() { - if (this.markers.length) { - clearTimeout(this.boundsChangeTimer) - this.boundsChangeTimer = setTimeout(() => { - const listMarkerIndexInViewport = [] - - this.markers.forEach((marker, index) => { - if ( - marker.getVisible() && - this.map.getBounds().contains(marker.getPosition()) - ) { - listMarkerIndexInViewport.push(index) - } - }) - - // If map has no markers visible, change map position - if (listMarkerIndexInViewport.length === 0) { - this.refreshMapOnBoundsChanged({ - updatePosition: true - }) - } else if (listMarkerIndexInViewport.length === this.markers.length) { - // If user see already all markers, zoom is too small, increase it until maxRadius - if (this.currentRadius < this.options.markersUpdate.maxRadius) { - this.refreshMapOnBoundsChanged({ - increaseRadius: true - }) - } - } - }, 600) - } - } - - /** - * Refresh the map on user map moved - * Trigger a request with the new map position - * @param {Object} options Options to refresh the map - */ - refreshMapOnBoundsChanged({ updatePosition, increaseRadius }) { - let lat = 0 - let lng = 0 - - // If user move on the map and discover area without stores, update markers, with map center position - if (updatePosition) { - lat = this.map.getCenter().lat() - lng = this.map.getCenter().lng() - } else if (increaseRadius) { - // Get lat/lng from searchData - ;({ lat, lng } = this.searchData) - - // Increase currentRadius - this.currentRadius = this.currentRadius + this.options.markersUpdate.stepRadius - } - - this.triggerRequest({ - lat, - lng, - fitBounds: false // Prevent fitBounds when bounds changed (move or zoom) - }) - } - - /** - * Initialize Google Maps Autocomplete - * @documentation https://developers.google.com/maps/documentation/javascript/places-autocomplete - */ - initAutocomplete() { - const autocomplete = new window.google.maps.places.Autocomplete(this.inputSearch, {}) - - this.inputSearch.focus() - autocomplete.bindTo('bounds', this.map) - - autocomplete.addListener('place_changed', () => { - this.loading(true) - const place = autocomplete.getPlace() - - if (place.geometry) { - this.autocompleteRequest({ - lat: place.geometry.location.lat(), - lng: place.geometry.location.lng() - }) - } else { - this.geocoder.geocode( - { - address: place.name - }, - (results, status) => { - if (status === window.google.maps.GeocoderStatus.OK) { - this.autocompleteRequest({ - lat: results[0].geometry.location.lat(), - lng: results[0].geometry.location.lng() - }) - } - } - ) - } - }) - } - - /** - * Function called on autocomplete changes - * Trigger a request with the new user research - * @param {String} lat Latitude of the research - * @param {String} lng Longitude of the research - */ - autocompleteRequest({ lat, lng }) { - this.userPositionChecked = false - - // Reset currentRadius on new search - this.currentRadius = this.options.requests.searchRadius - - this.triggerRequest({ - lat, - lng - }) - } - - /** - * Trigger a request to the web service to get all store results - * according to the position (lat, lng) - * @param {String} lat Latitude of the research - * @param {String} lng Longitude of the research - * @param {Boolean} fitBounds Fit bounds on the map - */ - triggerRequest({ lat, lng, fitBounds = true }) { - this.mapHasRequest = true - this.loading(true) - - const requestDatas = this.serializeForm({ - lat, - lng - }) - - // Update search data stored - this.searchData.lat = lat - this.searchData.lng = lng - this.searchData.position = new window.google.maps.LatLng(lat, lng) - - // Fecth configuration - const fetchConf = { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(requestDatas) - } - - // Fecth store datas from the web service - fetch(this.options.webServiceUrl, fetchConf) - .then((response) => { - if (!response.ok) { - throw new Error(response) - } - return response - }) - .then((res) => res.json()) - .then((jsonResponse) => { - const data = jsonResponse - - if (data !== null) { - this.parseStores({ - stores: data, - fitBounds - }) - } - }) - .catch((error) => { - this.loading(false) - throw new Error(error) - }) - } - - /** - * Serialize form datas - * @param {String} lat Latitude - * @param {String} lng Longitude - * @return {Object} formData Datas required for the request (lat, lng, storesLimit, input, categories, radius) - */ - serializeForm({ lat = false, lng = false }) { - const formDatas = {} - const categories = [] - - // Get all selected categories - this.searchFilters.forEach((filter, index) => { - if (filter.checked) { - categories.push(filter.value) - } - }) - formDatas.categories = categories - - if (lat && lng) { - formDatas.lat = lat - formDatas.lng = lng - } - - formDatas.radius = this.currentRadius - formDatas.limit = this.options.requests.storesLimit - - return formDatas - } - - /** - * Parse store datas from the web service - * Create all markers - * Create all store results - * @param {Object} options Store datas from the web service - */ - parseStores(options) { - let noResult = true - const { stores } = options - const { fitBounds } = options - let hmlListResult = ` -

- ${stores.length} results sorted by distance correspond to your research -

- ` - - // If no result, show error message and center map on current country - if (noResult) { - this.sidebarResults.innerHTML = ` -

- No results for your request.
- Please try a new search with differents choices. -

` - if (this.overlayLimit !== null) { - this.overlayLimit.setMap(null) - } - if (this.overlayGlobal !== null) { - this.overlayGlobal.setMap(null) - } - } else { - this.sidebarResults.innerHTML = hmlListResult - - // Add all maskers to cluster if option is enabled - if (typeof MarkerClusterer !== 'undefined') { - if (this.options.cluster.status) { - this.markerCluster.addMarkers(this.markers) - } - } - - // Create custom bounds with limit viewport, no fitBounds the boundsGlobal - if (this.options.markersUpdate.status) { - this.createViewportWithLimitMarker({ - stores, - fitBounds - }) - } else { - // Else, and if requested, fitbounds the boundsGlobal - if (fitBounds) { - this.map.fitBounds(this.boundsGlobal) - } - } - } - - this.loading(false) - } - - /** - * Create a custom viewport (boundsWithLimit) - * Display a minimal list of markers according to the limitInViewport option - * @param {Object} options Datas to create the custom viewport - */ - createViewportWithLimitMarker(options) { - const { stores } = options - const maxMarkersInViewport = this.options.markersUpdate.limitInViewport - const maxLoop = stores.length < maxMarkersInViewport ? stores.length : maxMarkersInViewport - - // If geolocation enabled, add geolocation marker to the list and extend the bounds limit - if (this.geolocationData.userPositionChecked) { - this.boundsWithLimit.extend(this.geolocationData.position) - } - - for (let i = 0; i < maxLoop; i++) { - this.boundsWithLimit.extend(stores[i].position) - } - - if (options.fitBounds) { - this.map.fitBounds(this.boundsWithLimit) - } - - if (this.options.debug) { - this.createOverlays() - } - } - - /** - * Create custom overlay on the map for the debug mode - * overlayGlobal: list of all stores according to maxRadius option - * overlayLimit: list of all stores according to the limitInViewport option - */ - createOverlays() { - if (this.overlayGlobal !== null) { - this.overlayGlobal.setMap(null) - } - this.overlayGlobal = new window.google.maps.Rectangle({ - bounds: this.boundsGlobal, - strokeColor: null, - strokeOpacity: 0, - fillColor: '#ff0000', - fillOpacity: 0.35, - map: this.map - }) - - if (this.overlayLimit !== null) { - this.overlayLimit.setMap(null) - } - this.overlayLimit = new window.google.maps.Rectangle({ - bounds: this.boundsWithLimit, - strokeColor: null, - strokeOpacity: 0, - fillColor: '#54ff00', - fillOpacity: 0.35, - map: this.map - }) - } - - /** - * Open the Google Maps native InfoWindow - * @param {Object} currentMarker Marker data display inside the infoWindow - */ - openInfoWindow(currentMarker) { - // Get lat/lng from searchData - const origin = this.searchData.position - - const hmlinfoWindow = templateInfoWindow({ - store: currentMarker.store, - origin - }) - - this.infoWindow.setContent(hmlinfoWindow) - - // Change infoWindow status - window.google.maps.event.addListener(this.infoWindow, 'closeclick', () => { - this.infoWindowOpened = false - }) - - // Close previous infoWindow open - if (this.currentInfoWindow !== null) { - this.currentInfoWindow.close() - } - - // Store marker info for next infoWindow - this.currentInfoWindow = this.infoWindow - - // Open infoWindow - this.infoWindow.open(this.map, currentMarker) - } - - /** - * Destroy all created Google Map markers - */ - destroyMarkers() { - // Destroy all maskers references in cluster is enabled - if (typeof MarkerClusterer !== 'undefined') { - if (this.options.cluster.status) { - this.markerCluster.clearMarkers() - } - } - - // Loop backwards on markers and remove them - for (let i = this.markers.length - 1; i >= 0; i--) { - const currentMarker = this.markers[i] - - // Remove listener from marker instance - window.google.maps.event.clearInstanceListeners(currentMarker) - - // Remove the marker - currentMarker.setMap(null) - } - - this.markers = [] - } - - /** - * Create a Google Maps markers - * @param {Object} data Marker datas - */ - createMarkers(data) { - const markerStyle = this.markerStyles[data.category] - const options = { - position: data.position, - map: this.map, - optimized: true, - label: { - text: (data.index + 1).toString(), - fontFamily: 'inherit', - fontSize: '13px', - fontWeight: '500', - color: markerStyle ? markerStyle.colorText : '#000' - } - } - - // Disable SVG for IE, they don't works - if (!this.isBrowserIE()) { - options.icon = this.options.map.markers.styles.length - ? this.getIconMarkerByCategory(data.category) - : '' - } - - const marker = new window.google.maps.Marker(options) - - // Push marker data in marker - marker.store = data - - this.markers.push(marker) - - // Click on marker to show infoWindow - window.google.maps.event.addListener(marker, 'click', () => { - this.infoWindowOpened = true - this.openInfoWindow(marker) - }) - } - - /** - * Get marker styles by category, from options - * @return {Object} Formatted object with category name into key and marker styles datas - */ - getMarkerStylesByCategory() { - const styles = {} - this.options.map.markers.styles.forEach((marker) => { - styles[marker.category] = { - colorBackground: marker.colorBackground, - colorText: marker.colorText - } - }) - return styles - } - - /** - * Get SVG icon by category styles - * @param {String} category Marker category - * @return {Object} Icon datas to generate a Google Maps markers - */ - getIconMarkerByCategory(category) { - const offsetXLabel = this.options.map.markers.width / 2 - 0.9 - const offsetYLabel = this.options.map.markers.height / 2 - 3 - const colorBackground = this.markerStyles[category] - ? this.markerStyles[category].colorBackground - : '#e5454c' - - return { - url: this.generateMarkerSVG({ - colorBackground, - width: this.options.map.markers.width, - height: this.options.map.markers.height - }), - labelOrigin: new window.google.maps.Point(offsetXLabel, offsetYLabel) - } - } - - /** - * Generate SVG from the associated SVG file - * @param {Object} Style datas to customize the SVG - * @return {Object} Custom SVG to generate a Google Maps marker icons - */ - generateMarkerSVG(options) { - // Create DOMParser from SVG string - const parser = new DOMParser() - const parserSvg = parser.parseFromString(markerSvg, 'text/html') - const elementMarkerSvg = parserSvg.querySelector('svg') - - // Change SVG attributes - elementMarkerSvg.setAttribute('width', `${options.width}px`) - elementMarkerSvg.setAttribute('height', `${options.height}px`) - elementMarkerSvg.querySelectorAll('path').forEach((path) => { - path.setAttribute('fill', options.colorBackground) - }) - - // Create Serializer from element - const serializer = new XMLSerializer() - const stringMarkerSvg = serializer.serializeToString(elementMarkerSvg) - - // Format SVG to generate an icon on the map - const customSVG = { - mimetype: 'data:image/svg+xml;base64,', - scaledSize: new window.google.maps.Size(options.width, options.height) - } - return customSVG.mimetype + btoa(stringMarkerSvg) - } - - /** - * Check if browser is an old Internet Explorer - */ - isBrowserIE() { - return !!(document.documentMode && document.documentMode >= 9) - } - - /** - * Extends multiple object into one - * @param {Boolean} deep Enable extend for deep object properties - * @param {Array} objects List of objects to merged - * @return {Object} Objects merged into one - */ - extend(deep = false, ...objects) { - const extended = {} - - // Merge the object into the extended object - const merge = (obj) => { - for (const prop in obj) { - if (Object.prototype.hasOwnProperty.call(obj, prop)) { - // If deep merge and property is an object, merge properties - if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') { - extended[prop] = this.extend(true, extended[prop], obj[prop]) - } else { - extended[prop] = obj[prop] - } - } - } - } - - // Loop through each object and conduct a merge - objects.forEach((object) => { - merge(object) - }) - - return extended - } -} diff --git a/src/js/templates/info-window.js b/src/js/templates/info-window.js deleted file mode 100644 index 3ba74e9e..00000000 --- a/src/js/templates/info-window.js +++ /dev/null @@ -1,41 +0,0 @@ -import svgRoute from '../../svg/route.svg' - -/** - * storelocatorjs info window template - * @module storelocatorjs/templateInfoIndow - */ -export default function ({ store, origin }) { - /* prettier-ignore */ - return ` -
- ${store.picture - ? ` - ${store.title} - ` - : ``} -
- ${store.title - ? `${store.index + 1}. ${store.title}` - : ``} - - ${store.distance.toFixed(2)}km - ${svgRoute} - - ${store.address - ? `${store.address}` - : ``} - ${store.zipcode - ? `${store.zipcode}` - : ``} - ${store.city - ? `${store.city}` - : ``} - ${store.phone - ? `${store.phone}` - : ``} - ${typeof store.link !== 'undefined' - ? `${store.link}` - : ``} -
-
` -} diff --git a/src/js/templates/sidebar-item-result.js b/src/js/templates/sidebar-item-result.js deleted file mode 100644 index 4e086b07..00000000 --- a/src/js/templates/sidebar-item-result.js +++ /dev/null @@ -1,33 +0,0 @@ -import svgRoute from '../../svg/route.svg' - -/** - * storelocatorjs sidebar item result template - * @module storelocatorjs/templateSidebarItemResult - */ -export default function ({ store, origin }) { - /* prettier-ignore */ - return ` -
  • -
    - ${store.title - ? `${store.index + 1}. ${store.title}` - : ``} - - ${store.distance.toFixed(2)}km - ${svgRoute} - - ${store.address - ? `${store.address}` - : ``} - ${store.zipcode - ? `${store.zipcode}` - : ``} - ${store.city - ? `${store.city}` - : ``} - ${store.phone - ? `${store.phone}` - : ``} -
    -
  • ` -} diff --git a/src/map/README.md b/src/map/README.md new file mode 100644 index 00000000..7820fec3 --- /dev/null +++ b/src/map/README.md @@ -0,0 +1,63 @@ +# Map provider API + +The map provider's API allows you to extends the capabilities of `storelocatorjs` to map providers other than those included by default. + +## Available map providers + +Each map provider can be loaded on demand with the API. + +| Name | Description | +| -------------------------------------- | --------------------------- | +| [Google Maps](./google-maps/README.md) | Support for Google Maps API | +| [Leaflet](./leaflet/README.md) | Support for Leaflet API | +| [Google Maps](./mapbox/README.md) | Support for Mapbox API | +| [Google Maps](./maplibre/README.md) | Support for MapLibre API | + + + +## Create a custom provider + +The Provider API allows you to create other providers than those referenced by `vLitejs`. + +To start your new provider development, you can use the [sample-provider.js](https://github.com/vlitejs/vlite/blob/main/src/providers/sample/sample-provider.js) file which is made for you. You can also get inspiration from the [youtube.ts](https://github.com/vlitejs/vlite/blob/main/src/providers/youtube/youtube.ts) and [vimeo.ts](https://github.com/vlitejs/vlite/blob/main/src/providers/vimeo/vimeo.ts) provider files. + +### Rules + +Here are some points to help you in your development: + +- The provider file should return a function that take as parameter `Player`. +- The function should return an ES6 JavaScript class that extends the `Player` parameter returned by the parent function. +- `vLitejs` should be available before the provider import. +- The `sample-provider.js` exposes all the necessary functions, do not rename or remove them because `vLitejs` will not recognize them. +- The `init` function is automatically called by `vLitejs` to initialize the provider. +- Call the `super.onReady()` function when the player is ready (the function is exposed by the parent class). +- Replace the content of the following functions with the appropriate code for the new provider (except `init` and `waitUntilVideoIsReady`). + +### Methods + +| Method | Parameters | Promise | Description | +| ------------------------- | :--------: | :-------: | ------------------------------------------------- | +| `init()` | - | - | Initialize the provider | +| `waitUntilVideoIsReady()` | - | `Promise` | Wait until the player is ready and the API loaded | +| `initPlayer()` | - | `Promise` | Initialize the player | +| `getVolume()` | - | - | Get the volume | +| `getInstance()` | - | - | Get the player instance | +| `getCurrentTime()` | - | `Promise` | Get the current time | +| `getDuration()` | - | `Promise` | Get the duration | +| `methodPlay()` | - | - | Method to play | +| `methodPause()` | - | - | Method to pause | +| `methodMute()` | - | - | Method to mute | +| `methodUnMute()` | - | - | Method to unmute | +| `methodSeekTo(time)` | `Number` | - | Method to seek to a current time is seconds | +| `removeInstance()` | - | - | Remove the player instance | + +### API and queue + +Providers typically use an API/SDK. The provider file should load it and process the initialization queue. + +There are two possible scenario: + +- The API is already available: initialize the player (`initPlayer()`) +- The API is not available: push the instance into the queue (`providerQueue`) + +At the end of the sample file, the queue is processed and each player initialized. Then call the `super.onReady()` function when the player is ready. diff --git a/src/map/google-maps/README.md b/src/map/google-maps/README.md new file mode 100644 index 00000000..5cc3458d --- /dev/null +++ b/src/map/google-maps/README.md @@ -0,0 +1,54 @@ +# Map provider: Google Maps + +Supports for Google Maps storelocator with the [Google Maps API](https://developers.google.com/maps/documentation/javascript). + +> **Note** The Google Maps API is automatically loaded by the provider. + +## Overview + +| | | +| ----------- | ----------------------------------- | +| Name | `google-maps` | +| Path | `storelocatorjs/map/google-maps` | +| Entry point | `storelocatorjs/map/google-maps.js` | +| Stylesheet | - | + +## Usage + +### HTML + +```html +
    +``` + +### JavaScript + +```javascript +import 'storelocatorjs/storelocator.css'; +import Storelocatorjs from 'storelocatorjs'; +import GoogleMaps from 'storelocatorjs/map/google-maps.js'; + +new Storelocatorjs({ + target: document.querySelector('#app'), + licenseKey: 'LICENSE_KEY', + api: { + url: 'ENDPOINT_URL' + }, + map: { + provider: GoogleMaps, + token: 'GOOGLE_MAPS_API_KEY' + }, + geocoder: { + provider: 'mapbox', + token: 'GEOCODER_PROVIDER_TOKEN' + } +}); +``` + +## Demo + + + +## SDK documentation + +See the [Google Maps API](https://developers.google.com/maps/documentation/javascript) documentation. diff --git a/src/map/google-maps/google-maps.js b/src/map/google-maps/google-maps.js new file mode 100644 index 00000000..860b9ee2 --- /dev/null +++ b/src/map/google-maps/google-maps.js @@ -0,0 +1,182 @@ +export default function GoogleMaps(Map) { + const GOOGLE_MAPS_CALLBACK = 'googleMapLoaded' + + return class GoogleMaps extends Map { + constructor(props) { + super(props) + + this.map = props.map + this.currentPopup = null + this.markerWithColors = { + search: '', + geolocation: '' + } + } + + init() { + this.waitUntilApiIsReady().then(() => super.onReady()) + } + + waitUntilApiIsReady() { + return new window.Promise((resolve) => { + if (typeof window[GOOGLE_MAPS_CALLBACK] === 'undefined') { + window[GOOGLE_MAPS_CALLBACK] = () => this.initGoogleMaps().then(resolve) + this.loadSdk() + } else { + this.initGoogleMaps().then(resolve) + } + }) + } + + initGoogleMaps() { + return new window.Promise((resolve) => { + if (this.map.options?.center) { + this.map.options.center = { + lat: this.map.options.center[0], + lng: this.map.options.center[1] + } + } + + const mapOptions = this.utils().extend( + true, + { + center: { + lat: 46.227638, + lng: 2.213749 + }, + disableDefaultUI: true, + fullscreenControl: false, + mapTypeControl: false, + mapTypeId: 'roadmap', + scaleControl: false, + scrollwheel: true, + streetViewControl: false, + zoom: 6 + }, + this.map.options + ) + + this.instance = new window.google.maps.Map( + document.querySelector('#sl-mapCanvas'), + mapOptions + ) + + resolve() + }) + } + + loadSdk() { + const script = document.createElement('script') + script.async = true + script.type = 'text/javascript' + script.src = `https://maps.googleapis.com/maps/api/js?key=${this.map.token}&callback=window.${GOOGLE_MAPS_CALLBACK}` + document.getElementsByTagName('body')[0].appendChild(script) + } + + getInstance() { + return this.instance + } + + getMarkerLatLng(marker) { + return marker.getPosition() + } + + panTo(latLng) { + this.instance.panTo(latLng) + } + + panBy(x, y) { + this.instance.panBy(x, y) + } + + setZoom(value) { + this.instance.setZoom(value) + } + + getZoom() { + return this.instance.getZoom() + } + + latLngBounds() { + return new window.google.maps.LatLngBounds() + } + + latLngBoundsExtend({ latLngBounds, latLng }) { + latLngBounds.extend(latLng) + } + + fitBounds({ latLngBounds }) { + this.instance.fitBounds(latLngBounds) + } + + onFitBoundsEnd(callback) { + callback() + } + + latLng({ lat, lng }) { + return new window.google.maps.LatLng(lat, lng) + } + + getLatLngWithOffset({ latLng, offsetX = 0, offsetY = 0 }) { + const scale = Math.pow(2, this.getZoom()) + const projection = this.instance.getProjection() + const { x, y } = projection.fromLatLngToPoint(latLng) + return projection.fromPointToLatLng( + this.point(x - offsetX / scale, y + offsetY / scale) + ) + } + + point(x, y) { + return new window.google.maps.Point(x, y) + } + + createMarker({ feature, type }) { + const marker = new window.google.maps.Marker({ + position: feature.latLng, + map: this.instance, + icon: { + url: `${'data:image/svg+xml;charset=utf-8,'}${encodeURIComponent( + this.markerWithColors[type] + )}` + } + }) + + marker.feature = feature + + if (type !== 'geolocation') { + marker.addListener('click', () => { + this.openPopup(marker) + }) + } + + return marker + } + + removeMarker(marker) { + window.google.maps.event.clearInstanceListeners(marker) + marker.setMap(null) + } + + openPopup(marker) { + const popup = new window.google.maps.InfoWindow({ disableAutoPan: true }) + popup.setContent( + this.getPopupTemplate()({ + feature: marker.feature + }) + ) + + this.currentPopup && this.currentPopup.close() + this.currentPopup = popup + + popup.open(this.instance, marker) + } + + resize() { + window.google.maps.event.trigger(this.instance, 'resize') + } + + destroy() { + super.destroy() + } + } +} diff --git a/src/map/leaflet/README.md b/src/map/leaflet/README.md new file mode 100644 index 00000000..e38d1041 --- /dev/null +++ b/src/map/leaflet/README.md @@ -0,0 +1,54 @@ +# Map provider: Leaflet + +Supports for Leaflet storelocator with the [Leaflet API](https://leafletjs.com/reference.html). + +> **Note** The Leaflet API is automatically loaded by the provider. + +## Overview + +| | | +| ----------- | -------------------------------- | +| Name | `leaflet` | +| Path | `storelocatorjs/map/leaflet` | +| Entry point | `storelocatorjs/map/leaflet.js` | +| Stylesheet | `storelocatorjs/map/leaflet.css` | + +## Usage + +### HTML + +```html +
    +``` + +### JavaScript + +```javascript +import 'storelocatorjs/storelocator.css'; +import 'storelocatorjs/map/leaflet.css.css'; +import Storelocatorjs from 'storelocatorjs'; +import Leaflet from 'storelocatorjs/map/leaflet.js'; + +new Storelocatorjs({ + target: document.querySelector('#app'), + licenseKey: 'LICENSE_KEY', + api: { + url: 'ENDPOINT_URL' + }, + map: { + provider: Leaflet + }, + geocoder: { + provider: 'mapbox', + token: 'GEOCODER_PROVIDER_TOKEN' + } +}); +``` + +## Demo + + + +## SDK documentation + +See the [Leaflet API](https://leafletjs.com/reference.html) documentation. diff --git a/src/map/leaflet/leaflet.js b/src/map/leaflet/leaflet.js new file mode 100644 index 00000000..da7b66f5 --- /dev/null +++ b/src/map/leaflet/leaflet.js @@ -0,0 +1,136 @@ +import 'leaflet/dist/leaflet.css' +import Leaflet from 'leaflet' + +export default function LeafletMap(Map) { + return class LeafletMap extends Map { + constructor(props) { + super(props) + + this.map = props.map + } + + init() { + this.waitUntilApiIsReady().then(() => super.onReady()) + } + + waitUntilApiIsReady() { + return new window.Promise((resolve) => { + this.initLeaflet().then(resolve) + }) + } + + initLeaflet() { + return new window.Promise((resolve) => { + const mapOptions = this.utils().extend( + true, + { + center: [46.227638, 2.213749], + zoomControl: false, + zoom: 6 + }, + this.map.options + ) + + this.instance = Leaflet.map('sl-mapCanvas', mapOptions) + + Leaflet.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png?', { + maxZoom: 19, + attribution: '© OpenStreetMap' + }).addTo(this.instance) + + resolve() + }) + } + + getInstance() { + return this.instance + } + + getMarkerLatLng(marker) { + return marker.getLatLng() + } + + panTo(latLng) { + this.instance.panTo(latLng) + } + + panBy(x, y) { + this.instance.panBy(this.point(x, y)) + } + + setZoom(value) { + this.instance.setZoom(value) + } + + getZoom() { + return this.instance.getZoom() + } + + latLngBounds() { + return Leaflet.latLngBounds() + } + + latLngBoundsExtend({ latLngBounds, latLng }) { + latLngBounds.extend(latLng) + } + + fitBounds({ latLngBounds }) { + this.instance.fitBounds(latLngBounds) + } + + onFitBoundsEnd(callback) { + callback() + } + + latLng({ lat, lng }) { + return Leaflet.latLng(lat, lng) + } + + getLatLngWithOffset({ latLng, offsetX = 0, offsetY = 0 }) { + const { x, y } = this.instance.project(latLng) + return this.instance.unproject(this.point(x - offsetX, y + offsetY)) + } + + point(x, y) { + return Leaflet.point(x, y) + } + + createMarker({ feature, type }) { + const marker = Leaflet.marker(feature.latLng, { + icon: Leaflet.divIcon({ + className: `sl-marker sl-marker-${type}`, + html: this.markerWithColors[type] + }) + }).addTo(this.instance) + + marker.feature = feature + + if (type !== 'geolocation') { + marker.bindPopup( + this.getPopupTemplate()({ + feature: marker.feature + }) + ) + } + + return marker + } + + openPopup(marker) { + marker.openPopup() + } + + removeMarker(marker) { + this.instance.removeLayer(marker) + } + + resize() { + this.instance.invalidateSize() + } + + destroy() { + this.instance.remove() + super.destroy() + } + } +} diff --git a/src/map/mapbox/README.md b/src/map/mapbox/README.md new file mode 100644 index 00000000..0f39739d --- /dev/null +++ b/src/map/mapbox/README.md @@ -0,0 +1,55 @@ +# Map provider: Mapbox + +Supports for Mapbox storelocator with the [Mapbox API](https://docs.mapbox.com/mapbox-gl-js/api). + +> **Note** The Mapbox API is automatically loaded by the provider. + +## Overview + +| | | +| ----------- | ------------------------------- | +| Name | `mapbox` | +| Path | `storelocatorjs/map/mapbox` | +| Entry point | `storelocatorjs/map/mapbox.js` | +| Stylesheet | `storelocatorjs/map/mapbox.css` | + +## Usage + +### HTML + +```html +
    +``` + +### JavaScript + +```javascript +import 'storelocatorjs/storelocator.css'; +import 'storelocatorjs/map/mapbox.css.css'; +import Storelocatorjs from 'storelocatorjs'; +import Mapbox from 'storelocatorjs/map/mapbox.js'; + +new Storelocatorjs({ + target: document.querySelector('#app'), + licenseKey: 'LICENSE_KEY', + api: { + url: 'ENDPOINT_URL' + }, + map: { + provider: Mapbox, + token: 'MAPBOX_ACCESS_TOKEN' + }, + geocoder: { + provider: 'mapbox', + token: 'GEOCODER_PROVIDER_TOKEN' + } +}); +``` + +## Demo + + + +## SDK documentation + +See the [Mapbox API](https://docs.mapbox.com/mapbox-gl-js/api) documentation. diff --git a/src/map/mapbox/mapbox.js b/src/map/mapbox/mapbox.js new file mode 100644 index 00000000..a57faf61 --- /dev/null +++ b/src/map/mapbox/mapbox.js @@ -0,0 +1,153 @@ +import 'mapbox-gl/dist/mapbox-gl.css' +import mapboxgl from 'mapbox-gl' + +export default function Mapbox(Map) { + return class Mapbox extends Map { + constructor(props) { + super(props) + + this.map = props.map + this.currentPopup = null + } + + init() { + this.waitUntilApiIsReady().then(() => super.onReady()) + } + + waitUntilApiIsReady() { + return new window.Promise((resolve) => { + this.initMapbox().then(resolve) + }) + } + + initMapbox() { + return new window.Promise((resolve) => { + const mapOptions = this.utils().extend( + true, + { + container: 'sl-mapCanvas', + style: 'mapbox://styles/mapbox/streets-v12', + center: [2.213749, 46.227638], + zoom: 6 + }, + this.map.options + ) + + mapboxgl.accessToken = this.map.token + this.instance = new mapboxgl.Map(mapOptions) + this.instance.on('load', resolve) + }) + } + + getInstance() { + return this.instance + } + + getMarkerLatLng(marker) { + return marker.getLngLat() + } + + panTo(lngLat) { + this.instance.panTo(lngLat) + } + + panBy(x, y) { + this.instance.panBy(this.point(x, y)) + } + + setZoom(value) { + this.instance.setZoom(value) + } + + getZoom() { + return this.instance.getZoom() + } + + latLngBounds() { + return new mapboxgl.LngLatBounds() + } + + latLngBoundsExtend({ latLngBounds, latLng }) { + latLngBounds.extend(latLng) + } + + fitBounds({ latLngBounds }) { + this.instance.fitBounds(latLngBounds) + } + + onFitBoundsEnd(callback) { + const context = this + function onMoveEnd() { + context.instance.off('moveend', onMoveEnd) + callback() + } + this.instance.on('moveend', onMoveEnd) + } + + latLng({ lat, lng }) { + return new mapboxgl.LngLat(lng, lat) + } + + getLatLngWithOffset({ latLng, offsetX = 0, offsetY = 0 }) { + const { x, y } = this.instance.project(latLng) + return this.instance.unproject(this.point(x - offsetX, y + offsetY)) + } + + point(x, y) { + return new mapboxgl.Point(x, y) + } + + createMarker({ feature, type }) { + const markerIcon = document.createElement('div') + markerIcon.classList.add('sl-marker', `sl-marker-${type}`) + markerIcon.insertAdjacentHTML('beforeend', this.markerWithColors[type]) + + const marker = new mapboxgl.Marker({ + element: markerIcon, + draggable: true + }) + .setLngLat(feature.latLng) + .addTo(this.instance) + + marker.feature = feature + + if (type !== 'geolocation') { + const popup = new mapboxgl.Popup().setHTML( + this.getPopupTemplate()({ + feature + }) + ) + popup.on('open', () => { + this.currentPopup = popup + }) + marker.setPopup(popup) + } + + return marker + } + + openPopup(marker) { + if (this.currentPopup) { + this.currentPopup.remove() + this.currentPopup = null + } + + if (!marker.getPopup().isOpen()) { + marker.togglePopup() + } + } + + removeMarker(marker) { + marker.remove() + } + + resize() { + this.instance.resize() + } + + destroy() { + this.instance.remove() + super.destroy() + } + } +} diff --git a/src/map/maplibre/README.md b/src/map/maplibre/README.md new file mode 100644 index 00000000..222348ba --- /dev/null +++ b/src/map/maplibre/README.md @@ -0,0 +1,55 @@ +# Map provider: MapLibre + +Supports for MapLibre storelocator with the [MapLibre API](https://maplibre.org/maplibre-gl-js/docs). + +> **Note** The MapLibre API is automatically loaded by the provider. + +## Overview + +| | | +| ----------- | --------------------------------- | +| Name | `maplibre` | +| Path | `storelocatorjs/map/maplibre` | +| Entry point | `storelocatorjs/map/maplibre.js` | +| Stylesheet | `storelocatorjs/map/maplibre.css` | + +## Usage + +### HTML + +```html +
    +``` + +### JavaScript + +```javascript +import 'storelocatorjs/storelocator.css'; +import 'storelocatorjs/map/maplibre.css'; +import Storelocatorjs from 'storelocatorjs'; +import MapLibre from 'storelocatorjs/map/maplibre.js'; + +new Storelocatorjs({ + target: document.querySelector('#app'), + licenseKey: 'LICENSE_KEY', + api: { + url: 'ENDPOINT_URL' + }, + map: { + provider: MapLibre, + token: 'MAPBOX_ACCESS_TOKEN' + }, + geocoder: { + provider: 'maplibre', + token: 'GEOCODER_PROVIDER_TOKEN' + } +}); +``` + +## Demo + + + +## SDK documentation + +See the [MapLibre API](https://maplibre.org/maplibre-gl-js/docs) documentation. diff --git a/src/map/maplibre/maplibre.js b/src/map/maplibre/maplibre.js new file mode 100644 index 00000000..38e3a7f3 --- /dev/null +++ b/src/map/maplibre/maplibre.js @@ -0,0 +1,152 @@ +import 'maplibre-gl/dist/maplibre-gl.css' +import maplibregl from 'maplibre-gl' + +export default function MapLibre(Map) { + return class MapLibre extends Map { + constructor(props) { + super(props) + + this.map = props.map + } + + init() { + this.waitUntilApiIsReady().then(() => super.onReady()) + } + + waitUntilApiIsReady() { + return new window.Promise((resolve) => { + this.initMapLibre().then(resolve) + }) + } + + initMapLibre() { + return new window.Promise((resolve) => { + const mapOptions = this.utils().extend( + true, + { + container: 'sl-mapCanvas', + style: 'https://demotiles.maplibre.org/style.json', + center: [2.213749, 46.227638], + zoom: 6 + }, + this.map.options + ) + + this.instance = new maplibregl.Map(mapOptions) + + resolve() + }) + } + + getInstance() { + return this.instance + } + + getMarkerLatLng(marker) { + return marker.getLngLat() + } + + panTo(lngLat) { + this.instance.panTo(lngLat) + } + + panBy(x, y) { + this.instance.panBy(this.point(x, y)) + } + + setZoom(value) { + this.instance.setZoom(value) + } + + getZoom() { + return this.instance.getZoom() + } + + latLngBounds() { + return new maplibregl.LngLatBounds() + } + + latLngBoundsExtend({ latLngBounds, latLng }) { + latLngBounds.extend(latLng) + } + + fitBounds({ latLngBounds }) { + this.instance.fitBounds(latLngBounds) + } + + onFitBoundsEnd(callback) { + const context = this + function onMoveEnd() { + context.instance.off('moveend', onMoveEnd) + callback() + } + this.instance.on('moveend', onMoveEnd) + } + + latLng({ lat, lng }) { + return new maplibregl.LngLat(lng, lat) + } + + getLatLngWithOffset({ latLng, offsetX = 0, offsetY = 0 }) { + const { x, y } = this.instance.project(latLng) + return this.instance.unproject(this.point(x - offsetX, y + offsetY)) + } + + point(x, y) { + return new maplibregl.Point(x, y) + } + + createMarker({ feature, type }) { + const markerIcon = document.createElement('div') + markerIcon.classList.add('sl-marker', `sl-marker-${type}`) + markerIcon.insertAdjacentHTML('beforeend', this.markerWithColors[type]) + + const marker = new maplibregl.Marker({ + element: markerIcon, + draggable: true + }) + .setLngLat(feature.latLng) + .addTo(this.instance) + + marker.feature = feature + + if (type !== 'geolocation') { + const popup = new maplibregl.Popup().setHTML( + this.getPopupTemplate()({ + feature + }) + ) + popup.on('open', () => { + this.currentPopup = popup + }) + marker.setPopup(popup) + } + + return marker + } + + openPopup(marker) { + if (this.currentPopup) { + this.currentPopup.remove() + this.currentPopup = null + } + + if (!marker.getPopup().isOpen()) { + marker.togglePopup() + } + } + + removeMarker(marker) { + marker.remove() + } + + resize() { + this.instance.resize() + } + + destroy() { + this.instance.remove() + super.destroy() + } + } +} diff --git a/src/shared/assets/svgs/glass.svg b/src/shared/assets/svgs/glass.svg new file mode 100644 index 00000000..a3752f51 --- /dev/null +++ b/src/shared/assets/svgs/glass.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/shared/assets/svgs/list.svg b/src/shared/assets/svgs/list.svg new file mode 100644 index 00000000..d805dbc7 --- /dev/null +++ b/src/shared/assets/svgs/list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/shared/assets/svgs/location.svg b/src/shared/assets/svgs/location.svg new file mode 100644 index 00000000..07341cb4 --- /dev/null +++ b/src/shared/assets/svgs/location.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/shared/assets/svgs/map.svg b/src/shared/assets/svgs/map.svg new file mode 100644 index 00000000..b19ad828 --- /dev/null +++ b/src/shared/assets/svgs/map.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/shared/assets/svgs/marker.svg b/src/shared/assets/svgs/marker.svg new file mode 100644 index 00000000..80386da3 --- /dev/null +++ b/src/shared/assets/svgs/marker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/shared/assets/svgs/minus.svg b/src/shared/assets/svgs/minus.svg new file mode 100644 index 00000000..42a18d40 --- /dev/null +++ b/src/shared/assets/svgs/minus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/shared/assets/svgs/plus.svg b/src/shared/assets/svgs/plus.svg new file mode 100644 index 00000000..26ca2ad2 --- /dev/null +++ b/src/shared/assets/svgs/plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/shared/utils/utils.js b/src/shared/utils/utils.js new file mode 100644 index 00000000..f262f3b6 --- /dev/null +++ b/src/shared/utils/utils.js @@ -0,0 +1,38 @@ +export function hasOwn(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key) +} + +export function extend(deep = false, ...objects) { + const extended = {} + + // Merge the object into the extended object + const merge = (obj) => { + const keys = obj ? Object.keys(obj) : [] + for (let i = 0, length = keys.length; i < length; i++) { + const key = keys[i] + if (hasOwn(obj, key)) { + // If deep merge and property is an object, merge properties + if (deep && Object.prototype.toString.call(obj[key]) === '[object Object]') { + // @ts-ignore + extended[key] = extend(true, extended[key], obj[key]) + } else { + // @ts-ignore + extended[key] = obj[key] + } + } + } + } + + // Loop through each object and conduct a merge + for (let i = 0, length = objects.length; i < length; i++) { + merge(objects[i]) + } + + return extended +} + +export function fetchFromGeocoder(url) { + return fetch(url, { + method: 'GET' + }).then((res) => res.json()) +} diff --git a/src/svg/marker.svg b/src/svg/marker.svg deleted file mode 100644 index 21ae8953..00000000 --- a/src/svg/marker.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/svg/route.svg b/src/svg/route.svg deleted file mode 100644 index 8714c36a..00000000 --- a/src/svg/route.svg +++ /dev/null @@ -1 +0,0 @@ -