commit 8b07467b6163736536f1a670cdd1bf388befe8f0 Author: PhongPham Date: Wed Aug 13 10:05:36 2025 +0700 Initial commit: LACA parking management system diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f5e6e8a --- /dev/null +++ b/.gitignore @@ -0,0 +1,47 @@ +# Dependencies +node_modules/ +*/node_modules/ + +# Build outputs +dist/ +*/dist/ +build/ +*/build/ + +# Environment variables +.env +*/.env + +# IDE files +.vscode/ +.idea/ +*.swp +*.swo + +# OS files +.DS_Store +Thumbs.db + +# Logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Docker +docker-compose.override.yml + +# Quasar +.quasar/ +*/.quasar/ + +# Upload directories +upload/ +*/upload/ + +# Prisma +*/prisma/dev.db* + +# Coverage +coverage/ +*/coverage/ diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 0000000..a7c7c30 --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,6 @@ +Dockerfile +.dockerignore +node_modules +npm-debug.log +dist +deploy/* \ No newline at end of file diff --git a/backend/.env.example b/backend/.env.example new file mode 100644 index 0000000..8bff8ff --- /dev/null +++ b/backend/.env.example @@ -0,0 +1,25 @@ +DATABASE_URL="postgres://pguser:NmswPtleb0dquVSVhUWqcAtFl571JHEI@localhost:5432/LACA_DEV" +DB_USER="pguser" +DB_PASSWORD="NmswPtleb0dquVSVhUWqcAtFl571JHEI" +REDIS_PASSWORD="cq21WUy8dBGxq4cHAeonKpsBXZtFylBJ" +REDIS_URL="redis://:cq21WUy8dBGxq4cHAeonKpsBXZtFylBJ@172.21.128.1:9763/0" +GOOGLE_CLIENT_ID=* +GOOGLE_SECRET=* +ENVIRONMENT=prod +APP_NAME='NestJS Example App' +APP_URL=http://localhost:3000 +PORT=3000 +APP_CORS_ENABLED=true +JWT_ACCESS_SECRET=jcoabaHgA8j90rtyuiokAGhjkAIh +JWT_REFRESH_SECRET=jcoabaHgA8j90rtyuiokAGhjkAIh +JWT_EXPIRES_IN=15m +JWT_REFRESH_IN=1d +BCRYPT_SALT_ROUNDS=10 +GRAPHQL_PLAYGROUND_ENABLED=true +GRAPHQL_DEBUG=true +GRAPHQL_SCHEMA_DESTINATION='schema.graphql' +GRAPHQL_SORT_SCHEMA=true +SWAGGER_ENABLED=true +SWAGGER_DESCRIPTION='NestJS example app API' +SWAGGER_VERSION=1.5 +SWAGGER_PATH=api \ No newline at end of file diff --git a/backend/.eslintrc.js b/backend/.eslintrc.js new file mode 100644 index 0000000..7231f1e --- /dev/null +++ b/backend/.eslintrc.js @@ -0,0 +1,27 @@ +module.exports = { + parser: '@typescript-eslint/parser', + parserOptions: { + project: 'tsconfig.json', + tsconfigRootDir: __dirname, + sourceType: 'module', + }, + plugins: ['@typescript-eslint/eslint-plugin', 'prettier'], + extends: [ + 'plugin:@typescript-eslint/recommended', + 'plugin:prettier/recommended', + 'prettier' + ], + root: true, + env: { + node: true, + jest: true, + }, + ignorePatterns: ['.eslintrc.js'], + rules: { + '@typescript-eslint/interface-name-prefix': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-explicit-any': 'off', + 'prettier/prettier': 'off' + }, +}; diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..62758b3 --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,43 @@ +# compiled output +/dist +/node_modules + +# Logs +logs +*.log +npm-debug.log* +pnpm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# OS +.DS_Store + +# Tests +/coverage +/.nyc_output + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +.env + +notes +audio +/upload + +**/docker-compose.*.y* \ No newline at end of file diff --git a/backend/.prettierrc b/backend/.prettierrc new file mode 100644 index 0000000..dcb7279 --- /dev/null +++ b/backend/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "trailingComma": "all" +} \ No newline at end of file diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 0000000..a00bd96 --- /dev/null +++ b/backend/README.md @@ -0,0 +1,12 @@ +## Backend-REST-API-NestJS-Prisma + +A simple backend REST API for a blog built using NestJS, Prisma, PostgreSQL and Swagger. + +### Installation + +1. Install dependencies: `npm install` +2. Start a PostgreSQL database with docker using: `docker-compose up -d`. + - If you have a local instance of PostgreSQL running, you can skip this step. In this case, you will need to change the `DATABASE_URL` inside the `.env` file with a valid [PostgreSQL connection string](https://www.prisma.io/docs/concepts/database-connectors/postgresql#connection-details) for your database. +3. Apply database migrations: `npx prisma migrate dev` +4. Start the project: `npm run start:dev` +5. Access the project at http://localhost:3000/api \ No newline at end of file diff --git a/backend/deploy/api/Dockerfile b/backend/deploy/api/Dockerfile new file mode 100644 index 0000000..36e3e09 --- /dev/null +++ b/backend/deploy/api/Dockerfile @@ -0,0 +1,44 @@ +# PRODUCTION DOCKERFILE +# --------------------- +# This Dockerfile allows to build a Docker image of the NestJS application +# and based on a NodeJS 20 image. The multi-stage mechanism allows to build +# the application in a "builder" stage and then create a lightweight production +# image containing the required dependencies and the JS build files. +# +# Dockerfile best practices +# https://docs.docker.com/develop/develop-images/dockerfile_best-practices/ +# Dockerized NodeJS best practices +# https://github.com/nodejs/docker-node/blob/master/docs/BestPractices.md +# https://www.bretfisher.com/node-docker-good-defaults/ +# http://goldbergyoni.com/checklist-best-practice-of-node-js-in-production/ + +FROM node:16-alpine as builder + +ENV NODE_ENV build + +USER node +WORKDIR /home/node + +COPY ../../package*.json ./ +RUN npm ci + +COPY --chown=node:node ../../. . + +RUN npx prisma generate \ + && npm run build \ + && npm prune --omit=dev + +# --- + +FROM node:16-alpine as production + +ENV NODE_ENV production + +USER node +WORKDIR /home/node + +COPY --from=builder --chown=node:node /home/node/package*.json ./ +COPY --from=builder --chown=node:node /home/node/node_modules/ ./node_modules/ +COPY --from=builder --chown=node:node /home/node/dist/ ./dist/ + +CMD ["node", "dist/server.js"] \ No newline at end of file diff --git a/backend/deploy/api/docker-compose.yaml b/backend/deploy/api/docker-compose.yaml new file mode 100644 index 0000000..e69de29 diff --git a/backend/deploy/storage/docker-compose.yaml b/backend/deploy/storage/docker-compose.yaml new file mode 100644 index 0000000..76941aa --- /dev/null +++ b/backend/deploy/storage/docker-compose.yaml @@ -0,0 +1,40 @@ +version: '3.8' + +x-logging: &logging + logging: + driver: "json-file" + options: + max-file: "5" + max-size: "10m" + +x-network: &network + network_mode: "host" + +services: + postgres: + image: postgres:13.5 + restart: always + environment: + - POSTGRES_USER=${DB_USER} + - POSTGRES_PASSWORD=${DB_PASSWORD} + volumes: + - postgres:/var/lib/postgresql/data + ports: + - "5432:5432" + <<: [ *logging ] + + redis: + hostname: redis + container_name: redis + image: redis:6.2.11-alpine + volumes: + - redis-data:/data + command: > + --requirepass ${REDIS_PASSWORD} + ports: + - "6379:6379" + <<: [ *logging ] + +volumes: + postgres: + redis-data: diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml new file mode 100644 index 0000000..70ad90d --- /dev/null +++ b/backend/docker-compose.yml @@ -0,0 +1,33 @@ +version: '3.8' + +x-logging: &logging + logging: + driver: "json-file" + options: + max-file: "5" + max-size: "10m" +x-network: &network + network_mode: "host" + +services: + + postgres: + image: postgres:13.5 + restart: always + environment: + - POSTGRES_USER=${DB_USER} + - POSTGRES_PASSWORD=${DB_PASSWORD} + volumes: + - postgres:/var/lib/postgresql/data + <<: [*logging,*network] + + redis: + hostname: redis + container_name: redis + image: redis:6.2.11-alpine + volumes: + - redis-data:/data + <<: [*logging,*network] +volumes: + postgres: + redis-data: diff --git a/backend/nest-cli.json b/backend/nest-cli.json new file mode 100644 index 0000000..0b8a0fb --- /dev/null +++ b/backend/nest-cli.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/nest-cli", + "collection": "@nestjs/schematics", + "sourceRoot": "src/", + "compilerOptions": { + "plugins": [ + { + "name": "@nestjs/swagger", + "options": { + "introspectComments": true + } + } + ] + } +} diff --git a/backend/package-lock.json b/backend/package-lock.json new file mode 100644 index 0000000..6233965 --- /dev/null +++ b/backend/package-lock.json @@ -0,0 +1,21878 @@ +{ + "name": "nest-prisma", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "nest-prisma", + "version": "0.0.1", + "license": "UNLICENSED", + "dependencies": { + "@nestjs-modules/mailer": "^1.6.1", + "@nestjs/common": "^10.3.10", + "@nestjs/config": "^3.0.0", + "@nestjs/core": "^10.3.10", + "@nestjs/jwt": "^10.1.0", + "@nestjs/mapped-types": "*", + "@nestjs/passport": "^10.0.0", + "@nestjs/platform-express": "^10.3.10", + "@nestjs/swagger": "^7.4.0", + "@prisma/client": "^4.7.0", + "@types/multer": "^1.4.7", + "bcrypt": "^5.1.1", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.1", + "csv-parser": "^3.2.0", + "dotenv": "^16.3.1", + "google-auth-library": "^9.0.0", + "helmet": "^7.0.0", + "iconv-lite": "^0.6.3", + "ioredis": "^5.3.2", + "joi": "^17.9.2", + "morgan": "^1.10.0", + "nestjs-prisma": "^0.22.0", + "passport-google-oauth20": "^2.0.0", + "passport-headerapikey": "^1.2.2", + "passport-jwt": "^4.0.1", + "reflect-metadata": "^0.1.13", + "rimraf": "^3.0.2", + "rxjs": "^7.2.0", + "swagger-ui-express": "^4.4.0" + }, + "devDependencies": { + "@nestjs/cli": "^10.4.2", + "@nestjs/schematics": "^8.0.0", + "@nestjs/testing": "^10.3.10", + "@types/express": "^4.17.13", + "@types/jest": "27.4.1", + "@types/node": "^16.0.0", + "@types/supertest": "^2.0.11", + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.0.0", + "jest": "^27.2.5", + "prettier": "^2.3.2", + "prisma": "^4.7.0", + "source-map-support": "^0.5.20", + "supertest": "^6.1.3", + "ts-jest": "^27.0.3", + "ts-loader": "^9.2.3", + "ts-node": "^10.0.0", + "tsconfig-paths": "^3.10.1", + "typescript": "^4.3.5" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.8.tgz", + "integrity": "sha512-Q8q0voCGudbdCgJ7lXdnyaxKHbNQBARH68zPQV72WT8NWy+Gw/tys870i6L58NWbBaCJEUcIj/kb6KoakSRu+Q==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.8.tgz", + "integrity": "sha512-QRVEYpIfgkprNHc916JlPuNbLzOgrm9DZalHasnLUz4P6g7pR21olb8YCyM2OTJjombNhya9ZpckcADU5Qyvlg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "jsonc-parser": "3.2.1", + "magic-string": "0.30.8", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics-cli": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-17.3.8.tgz", + "integrity": "sha512-TjmiwWJarX7oqvNiRAroQ5/LeKUatxBOCNEuKXO/PV8e7pn/Hr/BqfFm+UcYrQoFdZplmtNAfqmbqgVziKvCpA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "@angular-devkit/schematics": "17.3.8", + "ansi-colors": "4.1.3", + "inquirer": "9.2.15", + "symbol-observable": "4.0.0", + "yargs-parser": "21.1.1" + }, + "bin": { + "schematics": "bin/schematics.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/inquirer": { + "version": "9.2.15", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", + "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", + "dev": true, + "dependencies": { + "@ljharb/through": "^2.3.12", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", + "cli-cursor": "^3.1.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "figures": "^3.2.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz", + "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.9", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@babel/core/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/@babel/generator": { + "version": "7.24.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz", + "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.9", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", + "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/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/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz", + "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", + "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.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/highlight/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/@babel/highlight/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/@babel/highlight/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/@babel/parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", + "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.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-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "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-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-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-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.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz", + "integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", + "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.8", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.8", + "@babel/types": "^7.24.8", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/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/@babel/types": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", + "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "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/@css-inline/css-inline": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline/-/css-inline-0.13.0.tgz", + "integrity": "sha512-ZozAXBiW1I8hf6eW5eTNqhxUdNOBxrNNxxUnQRiKQpWcs5ORuGaiWwV5focMBTJ5WXGN+Z8VLP93BOwWFPzCJw==", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@css-inline/css-inline-darwin-arm64": "0.13.0", + "@css-inline/css-inline-darwin-x64": "0.13.0", + "@css-inline/css-inline-linux-arm-gnueabihf": "0.13.0", + "@css-inline/css-inline-linux-arm64-gnu": "0.13.0", + "@css-inline/css-inline-linux-arm64-musl": "0.13.0", + "@css-inline/css-inline-linux-x64-gnu": "0.13.0", + "@css-inline/css-inline-linux-x64-musl": "0.13.0", + "@css-inline/css-inline-win32-x64-msvc": "0.13.0" + } + }, + "node_modules/@css-inline/css-inline-darwin-arm64": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-darwin-arm64/-/css-inline-darwin-arm64-0.13.0.tgz", + "integrity": "sha512-A4QvlZdhp8v+3IHKF/UftRf5GrAVUMEHCGRuk2Dx594xn/UR4ieh+B70aMm5rfONh2hv5mlR9UcoYAkVpEQ99g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@css-inline/css-inline-darwin-x64": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-darwin-x64/-/css-inline-darwin-x64-0.13.0.tgz", + "integrity": "sha512-px9z4ypzeECMyBEtlrNzTMpA1tnw5MmMIiMkBRhb8UGRr2pOBZY3yd/eEIxWzVVSPt0aIjVDwUOJ3+d0Z+BskA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@css-inline/css-inline-linux-arm-gnueabihf": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-arm-gnueabihf/-/css-inline-linux-arm-gnueabihf-0.13.0.tgz", + "integrity": "sha512-+uo0coLQNgk/AKeOB8mXSRd8VIlUg38zRSB9B9q0ior9oBCDPtEdn1HuCSvWxHoOSJ8QNNk+uwbz0zW4CETzFw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@css-inline/css-inline-linux-arm64-gnu": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-arm64-gnu/-/css-inline-linux-arm64-gnu-0.13.0.tgz", + "integrity": "sha512-GVrsFbY5l0Hxyzxsm5S5JPGObvHm/Ybf2wZgnWBsQigxqGtr1FL535HaTwEnq6aHOpH3f08gR5Vx33gB7jG4pw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@css-inline/css-inline-linux-arm64-musl": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-arm64-musl/-/css-inline-linux-arm64-musl-0.13.0.tgz", + "integrity": "sha512-V5h5+CRnE01EgoafI/kyjEcM8zvN+sKLnp17Aq9LqQfsut7mO3i72d8g/xeVC37DCLoGQFLvDCzbze2NbF2dIQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@css-inline/css-inline-linux-x64-gnu": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-x64-gnu/-/css-inline-linux-x64-gnu-0.13.0.tgz", + "integrity": "sha512-vbRV++73MW7dvz/AIbozkv4R68/k/sEp57hno/L6lx034VYxpCwdfqtGN4D0W1TOTzdr2b6qBOGNZ1oLKQZOQQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@css-inline/css-inline-linux-x64-musl": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-x64-musl/-/css-inline-linux-x64-musl-0.13.0.tgz", + "integrity": "sha512-2tCnwU23W/yMs9cGc2/i2jd9y2pjuntx0a5OytqX7s9fvUtmI3nc0Od6wuf51LnmdU+XAU8HLT9pZppsQiwPfQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@css-inline/css-inline-win32-x64-msvc": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-win32-x64-msvc/-/css-inline-win32-x64-msvc-0.13.0.tgz", + "integrity": "sha512-6VFhFSXp4FH+NzJhLd6fFi7jKCPvIRW+vq0tV+CPuiQ3zPzMfC9nIk8sB/1VJR8EcvBAjMV53YnacuDjRFRT9g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/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, + "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/@eslint/eslintrc/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 + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true + }, + "node_modules/@ioredis/commands": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", + "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "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/@jest/reporters/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/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/source-map/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/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/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/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@ljharb/through": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", + "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "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/@microsoft/tsdoc": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.0.tgz", + "integrity": "sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==" + }, + "node_modules/@nestjs-modules/mailer": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@nestjs-modules/mailer/-/mailer-1.11.2.tgz", + "integrity": "sha512-k07wyKbtCzxWMm6IqGwcGIisnXD/6sneGvUR8rBBZbxtLn1HE1FLGyiaXBrPui/0K7W41aS9x9jAIhfTawtlUg==", + "dependencies": { + "@css-inline/css-inline": "0.13.0", + "glob": "10.3.10", + "mjml": "4.15.3", + "preview-email": "3.0.19" + }, + "optionalDependencies": { + "@types/ejs": "^3.1.5", + "@types/pug": "^2.0.10", + "ejs": "^3.1.9", + "handlebars": "^4.7.8", + "pug": "^3.0.2" + }, + "peerDependencies": { + "@nestjs/common": ">=7.0.9", + "@nestjs/core": ">=7.0.9", + "@types/ejs": ">=3.0.3", + "@types/pug": ">=2.0.6", + "ejs": ">=3.1.2", + "handlebars": ">=4.7.6", + "nodemailer": ">=6.4.6", + "pug": ">=3.0.1" + } + }, + "node_modules/@nestjs/cli": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.4.2.tgz", + "integrity": "sha512-fQexIfLHfp6GUgX+CO4fOg+AEwV5ox/LHotQhyZi9wXUQDyIqS0NTTbumr//62EcX35qV4nU0359nYnuEdzG+A==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "@angular-devkit/schematics": "17.3.8", + "@angular-devkit/schematics-cli": "17.3.8", + "@nestjs/schematics": "^10.0.1", + "chalk": "4.1.2", + "chokidar": "3.6.0", + "cli-table3": "0.6.5", + "commander": "4.1.1", + "fork-ts-checker-webpack-plugin": "9.0.2", + "glob": "10.4.2", + "inquirer": "8.2.6", + "node-emoji": "1.11.0", + "ora": "5.4.1", + "tree-kill": "1.2.2", + "tsconfig-paths": "4.2.0", + "tsconfig-paths-webpack-plugin": "4.1.0", + "typescript": "5.3.3", + "webpack": "5.92.1", + "webpack-node-externals": "3.0.0" + }, + "bin": { + "nest": "bin/nest.js" + }, + "engines": { + "node": ">= 16.14" + }, + "peerDependencies": { + "@swc/cli": "^0.1.62 || ^0.3.0 || ^0.4.0", + "@swc/core": "^1.3.62" + }, + "peerDependenciesMeta": { + "@swc/cli": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/@nestjs/cli/node_modules/@nestjs/schematics": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.1.3.tgz", + "integrity": "sha512-aLJ4Nl/K/u6ZlgLa0NjKw5CuBOIgc6vudF42QvmGueu5FaMGM6IJrAuEvB5T2kr0PAfVwYmDFBBHCWdYhTw4Tg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "@angular-devkit/schematics": "17.3.8", + "comment-json": "4.2.3", + "jsonc-parser": "3.3.1", + "pluralize": "8.0.0" + }, + "peerDependencies": { + "typescript": ">=4.8.2" + } + }, + "node_modules/@nestjs/cli/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/@nestjs/cli/node_modules/glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nestjs/cli/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/@nestjs/cli/node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true + }, + "node_modules/@nestjs/cli/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nestjs/cli/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/@nestjs/cli/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/@nestjs/cli/node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@nestjs/cli/node_modules/webpack": { + "version": "5.92.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", + "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/@nestjs/common": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.3.10.tgz", + "integrity": "sha512-H8k0jZtxk1IdtErGDmxFRy0PfcOAUg41Prrqpx76DQusGGJjsaovs1zjXVD1rZWaVYchfT1uczJ6L4Kio10VNg==", + "dependencies": { + "iterare": "1.2.1", + "tslib": "2.6.3", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/config": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.2.3.tgz", + "integrity": "sha512-p6yv/CvoBewJ72mBq4NXgOAi2rSQNWx3a+IMJLVKS2uiwFCOQQuiIatGwq6MRjXV3Jr+B41iUO8FIf4xBrZ4/w==", + "dependencies": { + "dotenv": "16.4.5", + "dotenv-expand": "10.0.0", + "lodash": "4.17.21" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "rxjs": "^7.1.0" + } + }, + "node_modules/@nestjs/core": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.3.10.tgz", + "integrity": "sha512-ZbQ4jovQyzHtCGCrzK5NdtW1SYO2fHSsgSY1+/9WdruYCUra+JDkWEXgZ4M3Hv480Dl3OXehAmY1wCOojeMyMQ==", + "hasInstallScript": true, + "dependencies": { + "@nuxtjs/opencollective": "0.3.2", + "fast-safe-stringify": "2.1.1", + "iterare": "1.2.1", + "path-to-regexp": "3.2.0", + "tslib": "2.6.3", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/microservices": "^10.0.0", + "@nestjs/platform-express": "^10.0.0", + "@nestjs/websockets": "^10.0.0", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + }, + "@nestjs/websockets": { + "optional": true + } + } + }, + "node_modules/@nestjs/jwt": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-10.2.0.tgz", + "integrity": "sha512-x8cG90SURkEiLOehNaN2aRlotxT0KZESUliOPKKnjWiyJOcWurkF3w345WOX0P4MgFzUjGoZ1Sy0aZnxeihT0g==", + "dependencies": { + "@types/jsonwebtoken": "9.0.5", + "jsonwebtoken": "9.0.2" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0" + } + }, + "node_modules/@nestjs/mapped-types": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.5.tgz", + "integrity": "sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg==", + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "class-transformer": "^0.4.0 || ^0.5.0", + "class-validator": "^0.13.0 || ^0.14.0", + "reflect-metadata": "^0.1.12 || ^0.2.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/passport": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@nestjs/passport/-/passport-10.0.3.tgz", + "integrity": "sha512-znJ9Y4S8ZDVY+j4doWAJ8EuuVO7SkQN3yOBmzxbGaXbvcSwFDAdGJ+OMCg52NdzIO4tQoN4pYKx8W6M0ArfFRQ==", + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "passport": "^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0" + } + }, + "node_modules/@nestjs/platform-express": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.3.10.tgz", + "integrity": "sha512-wK2ow3CZI2KFqWeEpPmoR300OB6BcBLxARV1EiClJLCj4S1mZsoCmS0YWgpk3j1j6mo0SI8vNLi/cC2iZPEPQA==", + "dependencies": { + "body-parser": "1.20.2", + "cors": "2.8.5", + "express": "4.19.2", + "multer": "1.4.4-lts.1", + "tslib": "2.6.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0" + } + }, + "node_modules/@nestjs/schematics": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-8.0.11.tgz", + "integrity": "sha512-W/WzaxgH5aE01AiIErE9QrQJ73VR/M/8p8pq0LZmjmNcjZqU5kQyOWUxZg13WYfSpJdOa62t6TZRtFDmgZPoIg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "13.3.5", + "@angular-devkit/schematics": "13.3.5", + "fs-extra": "10.1.0", + "jsonc-parser": "3.0.0", + "pluralize": "8.0.0" + }, + "peerDependencies": { + "typescript": "^3.4.5 || ^4.3.5" + } + }, + "node_modules/@nestjs/schematics/node_modules/@angular-devkit/core": { + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.5.tgz", + "integrity": "sha512-w7vzK4VoYP9rLgxJ2SwEfrkpKybdD+QgQZlsDBzT0C6Ebp7b4gkNcNVFo8EiZvfDl6Yplw2IAP7g7fs3STn0hQ==", + "dev": true, + "dependencies": { + "ajv": "8.9.0", + "ajv-formats": "2.1.1", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + }, + "engines": { + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@nestjs/schematics/node_modules/@angular-devkit/schematics": { + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.5.tgz", + "integrity": "sha512-0N/kL/Vfx0yVAEwa3HYxNx9wYb+G9r1JrLjJQQzDp+z9LtcojNf7j3oey6NXrDUs1WjVZOa/AIdRl3/DuaoG5w==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "13.3.5", + "jsonc-parser": "3.0.0", + "magic-string": "0.25.7", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@nestjs/schematics/node_modules/ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "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/@nestjs/schematics/node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "node_modules/@nestjs/schematics/node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/@nestjs/schematics/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@nestjs/schematics/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nestjs/schematics/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@nestjs/swagger": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-7.4.0.tgz", + "integrity": "sha512-dCiwKkRxcR7dZs5jtrGspBAe/nqJd1AYzOBTzw9iCdbq3BGrLpwokelk6lFZPe4twpTsPQqzNKBwKzVbI6AR/g==", + "dependencies": { + "@microsoft/tsdoc": "^0.15.0", + "@nestjs/mapped-types": "2.0.5", + "js-yaml": "4.1.0", + "lodash": "4.17.21", + "path-to-regexp": "3.2.0", + "swagger-ui-dist": "5.17.14" + }, + "peerDependencies": { + "@fastify/static": "^6.0.0 || ^7.0.0", + "@nestjs/common": "^9.0.0 || ^10.0.0", + "@nestjs/core": "^9.0.0 || ^10.0.0", + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12 || ^0.2.0" + }, + "peerDependenciesMeta": { + "@fastify/static": { + "optional": true + }, + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/testing": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.3.10.tgz", + "integrity": "sha512-i3HAtVQJijxNxJq1k39aelyJlyEIBRONys7IipH/4r8W0J+M1V+y5EKDOyi4j1SdNSb/vmNyWpZ2/ewZjl3kRA==", + "dev": true, + "dependencies": { + "tslib": "2.6.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0", + "@nestjs/microservices": "^10.0.0", + "@nestjs/platform-express": "^10.0.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": 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/@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/@nuxtjs/opencollective": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + }, + "bin": { + "opencollective": "bin/opencollective.js" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==" + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@prisma/client": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-4.16.2.tgz", + "integrity": "sha512-qCoEyxv1ZrQ4bKy39GnylE8Zq31IRmm8bNhNbZx7bF2cU5aiCCnSa93J2imF88MBjn7J9eUQneNxUQVJdl/rPQ==", + "hasInstallScript": true, + "dependencies": { + "@prisma/engines-version": "4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, + "node_modules/@prisma/engines": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-4.16.2.tgz", + "integrity": "sha512-vx1nxVvN4QeT/cepQce68deh/Turxy5Mr+4L4zClFuK1GlxN3+ivxfuv+ej/gvidWn1cE1uAhW7ALLNlYbRUAw==", + "hasInstallScript": true + }, + "node_modules/@prisma/engines-version": { + "version": "4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81.tgz", + "integrity": "sha512-q617EUWfRIDTriWADZ4YiWRZXCa/WuhNgLTVd+HqWLffjMSPzyM5uOWoauX91wvQClSKZU4pzI4JJLQ9Kl62Qg==" + }, + "node_modules/@schematics/angular": { + "version": "13.3.11", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.11.tgz", + "integrity": "sha512-imKBnKYEse0SBVELZO/753nkpt3eEgpjrYkB+AFWF9YfO/4RGnYXDHoH8CFkzxPH9QQCgNrmsVFNiYGS+P/S1A==", + "dependencies": { + "@angular-devkit/core": "13.3.11", + "@angular-devkit/schematics": "13.3.11", + "jsonc-parser": "3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { + "version": "13.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz", + "integrity": "sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==", + "dependencies": { + "ajv": "8.9.0", + "ajv-formats": "2.1.1", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + }, + "engines": { + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@schematics/angular/node_modules/@angular-devkit/schematics": { + "version": "13.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.11.tgz", + "integrity": "sha512-ben+EGXpCrClnIVAAnEQmhQdKmnnqFhMp5BqMxgOslSYBAmCutLA6rBu5vsc8kZcGian1wt+lueF7G1Uk5cGBg==", + "dependencies": { + "@angular-devkit/core": "13.3.11", + "jsonc-parser": "3.0.0", + "magic-string": "0.25.7", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/angular/node_modules/ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "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/@schematics/angular/node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==" + }, + "node_modules/@schematics/angular/node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/@schematics/angular/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@schematics/angular/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@schematics/angular/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@selderee/plugin-htmlparser2": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", + "integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==", + "dependencies": { + "domhandler": "^5.0.3", + "selderee": "^0.11.0" + }, + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "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/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "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/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookiejar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", + "dev": true + }, + "node_modules/@types/ejs": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", + "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", + "optional": true + }, + "node_modules/@types/eslint": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "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.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.4.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz", + "integrity": "sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==", + "dev": true, + "dependencies": { + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz", + "integrity": "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/methods": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", + "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + }, + "node_modules/@types/multer": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.11.tgz", + "integrity": "sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w==", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/node": { + "version": "16.18.104", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.104.tgz", + "integrity": "sha512-OF3keVCbfPlkzxnnDBUZJn1RiCJzKeadjiW0xTEb0G1SUJ5gDVb3qnzZr2T4uIFvsbKJbXy1v2DN7e2zaEY7jQ==" + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true + }, + "node_modules/@types/pug": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz", + "integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==", + "optional": true + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/superagent": { + "version": "8.1.7", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.7.tgz", + "integrity": "sha512-NmIsd0Yj4DDhftfWvvAku482PZum4DBW7U51OvS8gvOkDDY0WT1jsVyDV3hK+vplrsYw8oDwi9QxOM7U68iwww==", + "dev": true, + "dependencies": { + "@types/cookiejar": "^2.1.5", + "@types/methods": "^1.1.4", + "@types/node": "*" + } + }, + "node_modules/@types/supertest": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz", + "integrity": "sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==", + "dev": true, + "dependencies": { + "@types/superagent": "*" + } + }, + "node_modules/@types/validator": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag==" + }, + "node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "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==" + }, + "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==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "peerDependencies": { + "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/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "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==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "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/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/alce": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/alce/-/alce-1.2.0.tgz", + "integrity": "sha512-XppPf2S42nO2WhvKzlwzlfcApcXHzjlod30pKmcWjRgLOtqoe5DMuqdiYoM6AgyXksc6A6pV4v1L/WW217e57w==", + "dependencies": { + "esprima": "^1.2.0", + "estraverse": "^1.5.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/alce/node_modules/esprima": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.5.tgz", + "integrity": "sha512-S9VbPDU0adFErpDai3qDkjq8+G05ONtKzcyNrPKg/ZKa+tf879nX2KexNU95b31UoTJjRLInNBHHHjFPoCd7lQ==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/alce/node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "engines": { + "node": ">=6" + } + }, + "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-escapes/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/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "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==", + "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==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, + "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==" + }, + "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==", + "deprecated": "This package is no longer supported.", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/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==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "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==" + }, + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "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/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/assert-never": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.3.0.tgz", + "integrity": "sha512-9Z3vxQ+berkL/JJo0dK+EY3Lp0s3NtSnP3VCLsh5HDcZPrh0M+KQRK5sWhUeyPPH+/RCxZqOxLMR+YC6vlviEQ==" + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "optional": 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-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dev": true, + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@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-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "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==" + }, + "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==", + "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/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/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==" + }, + "node_modules/bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/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==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/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==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "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==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "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.30001640", + "electron-to-chromium": "^1.4.820", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "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==" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001643", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz", + "integrity": "sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==", + "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==", + "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/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "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/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "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" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "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==", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true + }, + "node_modules/class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + }, + "node_modules/class-validator": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.1.tgz", + "integrity": "sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==", + "dependencies": { + "@types/validator": "^13.11.8", + "libphonenumber-js": "^1.10.53", + "validator": "^13.9.0" + } + }, + "node_modules/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/clean-css/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "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/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/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/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "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==", + "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==" + }, + "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==", + "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/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/comment-json": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz", + "integrity": "sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==", + "dev": true, + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, + "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==" + }, + "node_modules/constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "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.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "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==" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "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==" + }, + "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==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "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==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "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==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/csv-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/csv-parser/-/csv-parser-3.2.0.tgz", + "integrity": "sha512-fgKbp+AJbn1h2dcAHKIdKNSSjfp43BZZykXsCjzALjKy80VXQNHPFJ6T9Afwdzoj24aMkq8GwDS7KGcDPpejrA==", + "bin": { + "csv-parser": "bin/csv-parser" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "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/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==", + "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==", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==" + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "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/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "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/display-notification": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/display-notification/-/display-notification-2.0.0.tgz", + "integrity": "sha512-TdmtlAcdqy1NU+j7zlkDdMnCL878zriLaBmoD9quOoq1ySSSGv03l0hXK5CvIFZlIfFI/hizqdQuW+Num7xuhw==", + "dependencies": { + "escape-string-applescript": "^1.0.0", + "run-applescript": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==" + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "engines": { + "node": ">=12" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/editorconfig": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "dependencies": { + "@one-ini/wasm": "0.1.1", + "commander": "^10.0.0", + "minimatch": "9.0.1", + "semver": "^7.5.3" + }, + "bin": { + "editorconfig": "bin/editorconfig" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/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==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/editorconfig/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "optional": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz", + "integrity": "sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "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==" + }, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding-japanese": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/encoding-japanese/-/encoding-japanese-2.1.0.tgz", + "integrity": "sha512-58XySVxUgVlBikBTbQ8WdDxBDHIdXucB16LO5PBHR8t75D54wQrNo4cg+58+R1CtJfKnsVsvt9XlteRaR8xw1w==", + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", + "integrity": "sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==" + }, + "node_modules/escape-string-applescript": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/escape-string-applescript/-/escape-string-applescript-1.0.0.tgz", + "integrity": "sha512-4/hFwoYaC6TkpDn9A3pTC52zQPArFeXuIfhUtCGYdauTzXVP9H3BDr3oO/QzQehMpLDC7srvYgfwvImPFGfvBA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "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/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/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, + "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/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/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 + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "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/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "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/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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "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": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/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==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/extend-object/-/extend-object-1.0.0.tgz", + "integrity": "sha512-0dHDIXC7y7LDmCh/lp1oYkmv73K25AMugQI07r8eFopkW6f7Ufn1q+ETMsJjnV9Am14SlElkqy3O92r6xEaxPw==" + }, + "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/external-editor/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/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==" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "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==" + }, + "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/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "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/figures/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/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "optional": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/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==", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "optional": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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/fixpack": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fixpack/-/fixpack-4.0.0.tgz", + "integrity": "sha512-5SM1+H2CcuJ3gGEwTiVo/+nd/hYpNj9Ch3iMDOQ58ndY+VGQ2QdvaUTkd3otjZvYnd/8LF/HkJ5cx7PBq0orCQ==", + "dependencies": { + "alce": "1.2.0", + "chalk": "^3.0.0", + "detect-indent": "^6.0.0", + "detect-newline": "^3.1.0", + "extend-object": "^1.0.0", + "rc": "^1.2.8" + }, + "bin": { + "fixpack": "bin/fixpack" + } + }, + "node_modules/fixpack/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", + "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^8.2.0", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">=12.13.0", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "typescript": ">3.6.0", + "webpack": "^5.11.0" + } + }, + "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/formidable": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "dev": true, + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "dev": true + }, + "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==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "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==" + }, + "node_modules/gaxios": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.0.tgz", + "integrity": "sha512-DSrkyMTfAnAm4ks9Go20QGOcXEyW/NmZhvTYBU2rb4afBB393WIMQPWPEDMl/k8xqiNN9HYq2zao3oWXsdl2Tg==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9", + "uuid": "^10.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/gaxios/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gaxios/node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gcp-metadata": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", + "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", + "dependencies": { + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "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-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.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==", + "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/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/glob/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==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/google-auth-library": { + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.11.0.tgz", + "integrity": "sha512-epX3ww/mNnhl6tL45EQ/oixsY8JLEgUFoT4A5E/5iAR4esld9Kqv6IJGk7EmGuOgDvaarwF95hU2+v7Irql9lw==", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^6.1.1", + "gcp-metadata": "^6.1.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/gtoken": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", + "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==", + "dependencies": { + "gaxios": "^6.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "optional": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/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==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==" + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/helmet": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-7.1.0.tgz", + "integrity": "sha512-g+HZqgfbpXdCkme/Cd/mZkV0aV3BZZZSugecH03kl38m/Kmdx8jKjBikpDj2cr+Iynv4KpYEviojNdTJActJAg==", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-minifier": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", + "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", + "dependencies": { + "camel-case": "^3.0.0", + "clean-css": "^4.2.1", + "commander": "^2.19.0", + "he": "^1.2.0", + "param-case": "^2.1.1", + "relateurl": "^0.2.7", + "uglify-js": "^3.5.1" + }, + "bin": { + "html-minifier": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/html-minifier/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/html-to-text": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz", + "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==", + "dependencies": { + "@selderee/plugin-htmlparser2": "^0.11.0", + "deepmerge": "^4.3.1", + "dom-serializer": "^2.0.0", + "htmlparser2": "^8.0.2", + "selderee": "^0.11.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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/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==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "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.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.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.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "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" + } + }, + "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/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "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/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "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": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/ioredis": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.4.1.tgz", + "integrity": "sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==", + "dependencies": { + "@ioredis/commands": "^1.1.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.1.0", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, + "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==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-expression/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/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/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/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/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterare": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "optional": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "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/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dev": true, + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "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/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/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/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-beautify": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz", + "integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==", + "dependencies": { + "config-chain": "^1.1.13", + "editorconfig": "^1.0.4", + "glob": "^10.3.3", + "js-cookie": "^3.0.5", + "nopt": "^7.2.0" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/js-beautify/node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/js-beautify/node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "engines": { + "node": ">=14" + } + }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==" + }, + "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==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "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/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "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-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==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": 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.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "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/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "node_modules/juice": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/juice/-/juice-10.0.0.tgz", + "integrity": "sha512-9f68xmhGrnIi6DBkiiP3rUrQN33SEuaKu1+njX6VgMP+jwZAsnT33WIzlrWICL9matkhYu3OyrqSUP55YTIdGg==", + "dependencies": { + "cheerio": "^1.0.0-rc.12", + "commander": "^6.1.0", + "mensch": "^0.3.4", + "slick": "^1.12.2", + "web-resource-inliner": "^6.0.1" + }, + "bin": { + "juice": "bin/juice" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/juice/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leac": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz", + "integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==", + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libbase64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-1.3.0.tgz", + "integrity": "sha512-GgOXd0Eo6phYgh0DJtjQ2tO8dc0IVINtZJeARPeiIJqge+HdsWSuaDTe8ztQ7j/cONByDZ3zeB325AHiv5O0dg==" + }, + "node_modules/libmime": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/libmime/-/libmime-5.3.5.tgz", + "integrity": "sha512-nSlR1yRZ43L3cZCiWEw7ali3jY29Hz9CQQ96Oy+sSspYnIP5N54ucOPHqooBsXzwrX1pwn13VUE05q4WmzfaLg==", + "dependencies": { + "encoding-japanese": "2.1.0", + "iconv-lite": "0.6.3", + "libbase64": "1.3.0", + "libqp": "2.1.0" + } + }, + "node_modules/libphonenumber-js": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.4.tgz", + "integrity": "sha512-F/R50HQuWWYcmU/esP5jrH5LiWYaN7DpN0a/99U8+mnGGtnx8kmRE+649dQh3v+CowXXZc8vpkf5AmYkO0AQ7Q==" + }, + "node_modules/libqp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/libqp/-/libqp-2.1.0.tgz", + "integrity": "sha512-O6O6/fsG5jiUVbvdgT7YX3xY3uIadR6wEZ7+vy9u7PKHAlSEB6blvC1o5pHBjgsi95Uo0aiBBdkyFecj6jtb7A==" + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "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==" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "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==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" + }, + "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/magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mailparser": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/mailparser/-/mailparser-3.7.1.tgz", + "integrity": "sha512-RCnBhy5q8XtB3mXzxcAfT1huNqN93HTYYyL6XawlIKycfxM/rXPg9tXoZ7D46+SgCS1zxKzw+BayDQSvncSTTw==", + "dependencies": { + "encoding-japanese": "2.1.0", + "he": "1.2.0", + "html-to-text": "9.0.5", + "iconv-lite": "0.6.3", + "libmime": "5.3.5", + "linkify-it": "5.0.0", + "mailsplit": "5.4.0", + "nodemailer": "6.9.13", + "punycode.js": "2.3.1", + "tlds": "1.252.0" + } + }, + "node_modules/mailparser/node_modules/nodemailer": { + "version": "6.9.13", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.13.tgz", + "integrity": "sha512-7o38Yogx6krdoBf3jCAqnIN4oSQFx+fMa0I7dK1D+me9kBxx12D+/33wSb+fhOCtIxvYJ+4x4IMEhmhCKfAiOA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/mailsplit": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/mailsplit/-/mailsplit-5.4.0.tgz", + "integrity": "sha512-wnYxX5D5qymGIPYLwnp6h8n1+6P6vz/MJn5AzGjZ8pwICWssL+CCQjWBIToOVHASmATot4ktvlLo6CyLfOXWYA==", + "dependencies": { + "libbase64": "1.2.1", + "libmime": "5.2.0", + "libqp": "2.0.1" + } + }, + "node_modules/mailsplit/node_modules/encoding-japanese": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encoding-japanese/-/encoding-japanese-2.0.0.tgz", + "integrity": "sha512-++P0RhebUC8MJAwJOsT93dT+5oc5oPImp1HubZpAuCZ5kTLnhuuBhKHj2jJeO/Gj93idPBWmIuQ9QWMe5rX3pQ==", + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/mailsplit/node_modules/libbase64": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-1.2.1.tgz", + "integrity": "sha512-l+nePcPbIG1fNlqMzrh68MLkX/gTxk/+vdvAb388Ssi7UuUN31MI44w4Yf33mM3Cm4xDfw48mdf3rkdHszLNew==" + }, + "node_modules/mailsplit/node_modules/libmime": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/libmime/-/libmime-5.2.0.tgz", + "integrity": "sha512-X2U5Wx0YmK0rXFbk67ASMeqYIkZ6E5vY7pNWRKtnNzqjvdYYG8xtPDpCnuUEnPU9vlgNev+JoSrcaKSUaNvfsw==", + "dependencies": { + "encoding-japanese": "2.0.0", + "iconv-lite": "0.6.3", + "libbase64": "1.2.1", + "libqp": "2.0.1" + } + }, + "node_modules/mailsplit/node_modules/libqp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/libqp/-/libqp-2.0.1.tgz", + "integrity": "sha512-Ka0eC5LkF3IPNQHJmYBWljJsw0UvM6j+QdKRbWyCdTmYwvIDE6a7bCm0UkTAL/K+3KXK5qXT/ClcInU01OpdLg==" + }, + "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==", + "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==", + "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/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/mensch": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz", + "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==" + }, + "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==" + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/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/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "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==", + "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==", + "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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/mjml": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml/-/mjml-4.15.3.tgz", + "integrity": "sha512-bW2WpJxm6HS+S3Yu6tq1DUPFoTxU9sPviUSmnL7Ua+oVO3WA5ILFWqvujUlz+oeuM+HCwEyMiP5xvKNPENVjYA==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "mjml-cli": "4.15.3", + "mjml-core": "4.15.3", + "mjml-migrate": "4.15.3", + "mjml-preset-core": "4.15.3", + "mjml-validator": "4.15.3" + }, + "bin": { + "mjml": "bin/mjml" + } + }, + "node_modules/mjml-accordion": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-accordion/-/mjml-accordion-4.15.3.tgz", + "integrity": "sha512-LPNVSj1LyUVYT9G1gWwSw3GSuDzDsQCu0tPB2uDsq4VesYNnU6v3iLCQidMiR6azmIt13OEozG700ygAUuA6Ng==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-body": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-body/-/mjml-body-4.15.3.tgz", + "integrity": "sha512-7pfUOVPtmb0wC+oUOn4xBsAw4eT5DyD6xqaxj/kssu6RrFXOXgJaVnDPAI9AzIvXJ/5as9QrqRGYAddehwWpHQ==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-button": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-button/-/mjml-button-4.15.3.tgz", + "integrity": "sha512-79qwn9AgdGjJR1vLnrcm2rq2AsAZkKC5JPwffTMG+Nja6zGYpTDZFZ56ekHWr/r1b5WxkukcPj2PdevUug8c+Q==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-carousel": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-carousel/-/mjml-carousel-4.15.3.tgz", + "integrity": "sha512-3ju6I4l7uUhPRrJfN3yK9AMsfHvrYbRkcJ1GRphFHzUj37B2J6qJOQUpzA547Y4aeh69TSb7HFVf1t12ejQxVw==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-cli": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-cli/-/mjml-cli-4.15.3.tgz", + "integrity": "sha512-+V2TDw3tXUVEptFvLSerz125C2ogYl8klIBRY1m5BHd4JvGVf3yhx8N3PngByCzA6PGcv/eydGQN+wy34SHf0Q==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "chokidar": "^3.0.0", + "glob": "^10.3.10", + "html-minifier": "^4.0.0", + "js-beautify": "^1.6.14", + "lodash": "^4.17.21", + "minimatch": "^9.0.3", + "mjml-core": "4.15.3", + "mjml-migrate": "4.15.3", + "mjml-parser-xml": "4.15.3", + "mjml-validator": "4.15.3", + "yargs": "^17.7.2" + }, + "bin": { + "mjml-cli": "bin/mjml" + } + }, + "node_modules/mjml-cli/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==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mjml-cli/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mjml-cli/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mjml-cli/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==", + "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/mjml-cli/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mjml-column": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-column/-/mjml-column-4.15.3.tgz", + "integrity": "sha512-hYdEFdJGHPbZJSEysykrevEbB07yhJGSwfDZEYDSbhQQFjV2tXrEgYcFD5EneMaowjb55e3divSJxU4c5q4Qgw==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-core": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-core/-/mjml-core-4.15.3.tgz", + "integrity": "sha512-Dmwk+2cgSD9L9GmTbEUNd8QxkTZtW9P7FN/ROZW/fGZD6Hq6/4TB0zEspg2Ow9eYjZXO2ofOJ3PaQEEShKV0kQ==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "cheerio": "1.0.0-rc.12", + "detect-node": "^2.0.4", + "html-minifier": "^4.0.0", + "js-beautify": "^1.6.14", + "juice": "^10.0.0", + "lodash": "^4.17.21", + "mjml-migrate": "4.15.3", + "mjml-parser-xml": "4.15.3", + "mjml-validator": "4.15.3" + } + }, + "node_modules/mjml-divider": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-divider/-/mjml-divider-4.15.3.tgz", + "integrity": "sha512-vh27LQ9FG/01y0b9ntfqm+GT5AjJnDSDY9hilss2ixIUh0FemvfGRfsGVeV5UBVPBKK7Ffhvfqc7Rciob9Spzw==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-group": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-group/-/mjml-group-4.15.3.tgz", + "integrity": "sha512-HSu/rKnGZVKFq3ciT46vi1EOy+9mkB0HewO4+P6dP/Y0UerWkN6S3UK11Cxsj0cAp0vFwkPDCdOeEzRdpFEkzA==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-head": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head/-/mjml-head-4.15.3.tgz", + "integrity": "sha512-o3mRuuP/MB5fZycjD3KH/uXsnaPl7Oo8GtdbJTKtH1+O/3pz8GzGMkscTKa97l03DAG2EhGrzzLcU2A6eshwFw==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-head-attributes": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-attributes/-/mjml-head-attributes-4.15.3.tgz", + "integrity": "sha512-2ISo0r5ZKwkrvJgDou9xVPxxtXMaETe2AsAA02L89LnbB2KC0N5myNsHV0sEysTw9+CfCmgjAb0GAI5QGpxKkQ==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-head-breakpoint": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-breakpoint/-/mjml-head-breakpoint-4.15.3.tgz", + "integrity": "sha512-Eo56FA5C2v6ucmWQL/JBJ2z641pLOom4k0wP6CMZI2utfyiJ+e2Uuinj1KTrgDcEvW4EtU9HrfAqLK9UosLZlg==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-head-font": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-font/-/mjml-head-font-4.15.3.tgz", + "integrity": "sha512-CzV2aDPpiNIIgGPHNcBhgyedKY4SX3BJoTwOobSwZVIlEA6TAWB4Z9WwFUmQqZOgo1AkkiTHPZQvGcEhFFXH6g==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-head-html-attributes": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-html-attributes/-/mjml-head-html-attributes-4.15.3.tgz", + "integrity": "sha512-MDNDPMBOgXUZYdxhosyrA2kudiGO8aogT0/cODyi2Ed9o/1S7W+je11JUYskQbncqhWKGxNyaP4VWa+6+vUC/g==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-head-preview": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-preview/-/mjml-head-preview-4.15.3.tgz", + "integrity": "sha512-J2PxCefUVeFwsAExhrKo4lwxDevc5aKj888HBl/wN4EuWOoOg06iOGCxz4Omd8dqyFsrqvbBuPqRzQ+VycGmaA==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-head-style": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-style/-/mjml-head-style-4.15.3.tgz", + "integrity": "sha512-9J+JuH+mKrQU65CaJ4KZegACUgNIlYmWQYx3VOBR/tyz+8kDYX7xBhKJCjQ1I4wj2Tvga3bykd89Oc2kFZ5WOw==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-head-title": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-title/-/mjml-head-title-4.15.3.tgz", + "integrity": "sha512-IM59xRtsxID4DubQ0iLmoCGXguEe+9BFG4z6y2xQDrscIa4QY3KlfqgKGT69ojW+AVbXXJPEVqrAi4/eCsLItQ==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-hero": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-hero/-/mjml-hero-4.15.3.tgz", + "integrity": "sha512-9cLAPuc69yiuzNrMZIN58j+HMK1UWPaq2i3/Fg2ZpimfcGFKRcPGCbEVh0v+Pb6/J0+kf8yIO0leH20opu3AyQ==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-image": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-image/-/mjml-image-4.15.3.tgz", + "integrity": "sha512-g1OhSdofIytE9qaOGdTPmRIp7JsCtgO0zbsn1Fk6wQh2gEL55Z40j/VoghslWAWTgT2OHFdBKnMvWtN6U5+d2Q==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-migrate": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-migrate/-/mjml-migrate-4.15.3.tgz", + "integrity": "sha512-sr/+35RdxZroNQVegjpfRHJ5hda9XCgaS4mK2FGO+Mb1IUevKfeEPII3F/cHDpNwFeYH3kAgyqQ22ClhGLWNBA==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "js-beautify": "^1.6.14", + "lodash": "^4.17.21", + "mjml-core": "4.15.3", + "mjml-parser-xml": "4.15.3", + "yargs": "^17.7.2" + }, + "bin": { + "migrate": "lib/cli.js" + } + }, + "node_modules/mjml-migrate/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mjml-migrate/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==", + "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/mjml-migrate/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mjml-navbar": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-navbar/-/mjml-navbar-4.15.3.tgz", + "integrity": "sha512-VsKH/Jdlf8Yu3y7GpzQV5n7JMdpqvZvTSpF6UQXL0PWOm7k6+LX+sCZimOfpHJ+wCaaybpxokjWZ71mxOoCWoA==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-parser-xml": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-parser-xml/-/mjml-parser-xml-4.15.3.tgz", + "integrity": "sha512-Tz0UX8/JVYICLjT+U8J1f/TFxIYVYjzZHeh4/Oyta0pLpRLeZlxEd71f3u3kdnulCKMP4i37pFRDmyLXAlEuLw==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "detect-node": "2.1.0", + "htmlparser2": "^9.1.0", + "lodash": "^4.17.15" + } + }, + "node_modules/mjml-parser-xml/node_modules/htmlparser2": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + } + }, + "node_modules/mjml-preset-core": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-preset-core/-/mjml-preset-core-4.15.3.tgz", + "integrity": "sha512-1zZS8P4O0KweWUqNS655+oNnVMPQ1Rq1GaZq5S9JfwT1Vh/m516lSmiTW9oko6gGHytt5s6Yj6oOeu5Zm8FoLw==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "mjml-accordion": "4.15.3", + "mjml-body": "4.15.3", + "mjml-button": "4.15.3", + "mjml-carousel": "4.15.3", + "mjml-column": "4.15.3", + "mjml-divider": "4.15.3", + "mjml-group": "4.15.3", + "mjml-head": "4.15.3", + "mjml-head-attributes": "4.15.3", + "mjml-head-breakpoint": "4.15.3", + "mjml-head-font": "4.15.3", + "mjml-head-html-attributes": "4.15.3", + "mjml-head-preview": "4.15.3", + "mjml-head-style": "4.15.3", + "mjml-head-title": "4.15.3", + "mjml-hero": "4.15.3", + "mjml-image": "4.15.3", + "mjml-navbar": "4.15.3", + "mjml-raw": "4.15.3", + "mjml-section": "4.15.3", + "mjml-social": "4.15.3", + "mjml-spacer": "4.15.3", + "mjml-table": "4.15.3", + "mjml-text": "4.15.3", + "mjml-wrapper": "4.15.3" + } + }, + "node_modules/mjml-raw": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-raw/-/mjml-raw-4.15.3.tgz", + "integrity": "sha512-IGyHheOYyRchBLiAEgw3UM11kFNmBSMupu2BDdejC6ZiDhEAdG+tyERlsCwDPYtXanvFpGWULIu3XlsUPc+RZw==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-section": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-section/-/mjml-section-4.15.3.tgz", + "integrity": "sha512-JfVPRXH++Hd933gmQfG8JXXCBCR6fIzC3DwiYycvanL/aW1cEQ2EnebUfQkt5QzlYjOkJEH+JpccAsq3ln6FZQ==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-social": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-social/-/mjml-social-4.15.3.tgz", + "integrity": "sha512-7sD5FXrESOxpT9Z4Oh36bS6u/geuUrMP1aCg2sjyAwbPcF1aWa2k9OcatQfpRf6pJEhUZ18y6/WBBXmMVmSzXg==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-spacer": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-spacer/-/mjml-spacer-4.15.3.tgz", + "integrity": "sha512-3B7Qj+17EgDdAtZ3NAdMyOwLTX1jfmJuY7gjyhS2HtcZAmppW+cxqHUBwCKfvSRgTQiccmEvtNxaQK+tfyrZqA==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-table": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-table/-/mjml-table-4.15.3.tgz", + "integrity": "sha512-FLx7DcRKTdKdcOCbMyBaeudeHaHpwPveRrBm6WyQe3LXx6FfdmOh59i71/16LFQMgBOD3N4/UJkzxLzlTJzMqQ==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-text": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-text/-/mjml-text-4.15.3.tgz", + "integrity": "sha512-+C0hxCmw9kg0XzT6vhE5mFkK6y225nC8UEQcN94K0fBCjPKkM+HqZMwGX205fzdGRi+Bxa55b/VhrIVwdv+8vw==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "node_modules/mjml-validator": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-validator/-/mjml-validator-4.15.3.tgz", + "integrity": "sha512-Xb72KdqRwjv/qM2rJpV22syyP2N3cRQ9VVDrN6u2FSzLq02buFNxmSPJ7CKhat3PrUNdVHU75KZwOf/tz4UEhA==", + "dependencies": { + "@babel/runtime": "^7.23.9" + } + }, + "node_modules/mjml-wrapper": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-wrapper/-/mjml-wrapper-4.15.3.tgz", + "integrity": "sha512-ditsCijeHJrmBmObtJmQ18ddLxv5oPyMTdPU8Di8APOnD2zPk7Z4UAuJSl7HXB45oFiivr3MJf4koFzMUSZ6Gg==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3", + "mjml-section": "4.15.3" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/morgan/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/morgan/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==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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==" + }, + "node_modules/multer": { + "version": "1.4.4-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", + "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "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/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "devOptional": true + }, + "node_modules/nestjs-prisma": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/nestjs-prisma/-/nestjs-prisma-0.22.0.tgz", + "integrity": "sha512-vseCukdWYijWxQBIdtC1XVSwMNZLZMjJen0ostsaRWaQ7yF8ny2Xruu0mA1d/t16uPOMUVUkSZro6JikOEkcuw==", + "dependencies": { + "@angular-devkit/core": "^13.3.0", + "@angular-devkit/schematics": "^13.3.0", + "@schematics/angular": "~13.3.0" + }, + "peerDependencies": { + "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0", + "@prisma/client": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "prisma": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/nestjs-prisma/node_modules/@angular-devkit/core": { + "version": "13.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz", + "integrity": "sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==", + "dependencies": { + "ajv": "8.9.0", + "ajv-formats": "2.1.1", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + }, + "engines": { + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/nestjs-prisma/node_modules/@angular-devkit/schematics": { + "version": "13.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.11.tgz", + "integrity": "sha512-ben+EGXpCrClnIVAAnEQmhQdKmnnqFhMp5BqMxgOslSYBAmCutLA6rBu5vsc8kZcGian1wt+lueF7G1Uk5cGBg==", + "dependencies": { + "@angular-devkit/core": "13.3.11", + "jsonc-parser": "3.0.0", + "magic-string": "0.25.7", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/nestjs-prisma/node_modules/ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "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/nestjs-prisma/node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==" + }, + "node_modules/nestjs-prisma/node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/nestjs-prisma/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/nestjs-prisma/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/nestjs-prisma/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "dev": true + }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "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-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/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==" + }, + "node_modules/node-fetch/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==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/nodemailer": { + "version": "6.9.14", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.14.tgz", + "integrity": "sha512-Dobp/ebDKBvz91sbtRKhcznLThrKxKt97GI2FAlAyy+fk19j73Uz3sBXolVtmcXjaorivqsbbbjDY+Jkt4/bQA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "deprecated": "This package is no longer supported.", + "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/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz", + "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==", + "dev": true + }, + "node_modules/oauth": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.10.0.tgz", + "integrity": "sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q==" + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "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==", + "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==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "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==", + "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/p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "dependencies": { + "p-timeout": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "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==", + "engines": { + "node": ">=4" + } + }, + "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-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==", + "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", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-wait-for": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-3.2.0.tgz", + "integrity": "sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==", + "dependencies": { + "p-timeout": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseley": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz", + "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==", + "dependencies": { + "leac": "^0.6.0", + "peberminta": "^0.9.0" + }, + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/passport": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.7.0.tgz", + "integrity": "sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==", + "peer": true, + "dependencies": { + "passport-strategy": "1.x.x", + "pause": "0.0.1", + "utils-merge": "^1.0.1" + }, + "engines": { + "node": ">= 0.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jaredhanson" + } + }, + "node_modules/passport-google-oauth20": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz", + "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==", + "dependencies": { + "passport-oauth2": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/passport-headerapikey": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/passport-headerapikey/-/passport-headerapikey-1.2.2.tgz", + "integrity": "sha512-4BvVJRrWsNJPrd3UoZfcnnl4zvUWYKEtfYkoDsaOKBsrWHYmzTApCjs7qUbncOLexE9ul0IRiYBFfBG0y9IVQA==", + "dependencies": { + "lodash": "^4.17.15", + "passport-strategy": "^1.0.0" + } + }, + "node_modules/passport-jwt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz", + "integrity": "sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==", + "dependencies": { + "jsonwebtoken": "^9.0.0", + "passport-strategy": "^1.0.0" + } + }, + "node_modules/passport-oauth2": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.8.0.tgz", + "integrity": "sha512-cjsQbOrXIDE4P8nNb3FQRCCmJJ/utnFKEz2NX209f7KOHPoX18gF7gBzBbLLsj2/je4KrgiwLLGjf0lm9rtTBA==", + "dependencies": { + "base64url": "3.x.x", + "oauth": "0.10.x", + "passport-strategy": "1.x.x", + "uid2": "0.0.x", + "utils-merge": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jaredhanson" + } + }, + "node_modules/passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "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==", + "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==", + "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==" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/path-to-regexp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", + "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==" + }, + "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/pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==", + "peer": true + }, + "node_modules/peberminta": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", + "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==", + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "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/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/preview-email": { + "version": "3.0.19", + "resolved": "https://registry.npmjs.org/preview-email/-/preview-email-3.0.19.tgz", + "integrity": "sha512-DBS3Nir18YtKc8loYCCOGitmiaQ0vTdahPoiXxwNweJDpmVZo+w3tppufOhoK0m8skpRxT56llYLs3VrORnmNQ==", + "dependencies": { + "ci-info": "^3.8.0", + "display-notification": "2.0.0", + "fixpack": "^4.0.0", + "get-port": "5.1.1", + "mailparser": "^3.6.4", + "nodemailer": "^6.9.2", + "open": "7", + "p-event": "4.2.0", + "p-wait-for": "3.2.0", + "pug": "^3.0.2", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/preview-email/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/prisma": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-4.16.2.tgz", + "integrity": "sha512-SYCsBvDf0/7XSJyf2cHTLjLeTLVXYfqp7pG5eEVafFLeT0u/hLFz/9W196nDRGUOo1JfPatAEb+uEnTQImQC1g==", + "hasInstallScript": true, + "dependencies": { + "@prisma/engines": "4.16.2" + }, + "bin": { + "prisma": "build/index.js", + "prisma2": "build/index.js" + }, + "engines": { + "node": ">=14.17" + } + }, + "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==" + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + }, + "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==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/pug": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz", + "integrity": "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==", + "dependencies": { + "pug-code-gen": "^3.0.3", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.3.tgz", + "integrity": "sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==", + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.1.0", + "pug-runtime": "^3.0.1", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", + "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==" + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "dependencies": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "node_modules/pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==" + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "dependencies": { + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "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/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/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==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "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==", + "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/readable-stream/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==" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz", + "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==" + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.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==", + "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.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.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.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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==", + "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==" + }, + "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==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "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/run-applescript": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-3.2.0.tgz", + "integrity": "sha512-Ep0RsvAjnRcBX1p5vogbaBdAGu/8j/ewpvGqnQYunnLd9SM0vWcPJewPKNnWFggf0hF0pwIgwV5XK7qQ7UZ8Qg==", + "dependencies": { + "execa": "^0.10.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/run-applescript/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/run-applescript/node_modules/execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/run-applescript/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/run-applescript/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/run-applescript/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/run-applescript/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/run-applescript/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/run-applescript/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/run-applescript/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/run-applescript/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==" + }, + "node_modules/run-applescript/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/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==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "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==", + "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/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, + "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/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/schema-utils/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 + }, + "node_modules/selderee": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz", + "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==", + "dependencies": { + "parseley": "^0.12.0" + }, + "funding": { + "url": "https://ko-fi.com/killymxi" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/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==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "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==" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "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==", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "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/slick": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz", + "integrity": "sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==", + "engines": { + "node": "*" + } + }, + "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-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/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" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/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==" + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "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==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "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/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superagent": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", + "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", + "deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net", + "dev": true, + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.1.2", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/superagent/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/supertest": { + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", + "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", + "dev": true, + "dependencies": { + "methods": "^1.1.2", + "superagent": "^8.1.2" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swagger-ui-dist": { + "version": "5.17.14", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.17.14.tgz", + "integrity": "sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw==" + }, + "node_modules/swagger-ui-express": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.6.3.tgz", + "integrity": "sha512-CDje4PndhTD2HkgyKH3pab+LKspDeB/NhPN2OF1j+piYIamQqBYwAXWESOT1Yju2xFg51bRW9sUng2WxDjzArw==", + "dependencies": { + "swagger-ui-dist": ">=4.11.0" + }, + "engines": { + "node": ">= v0.10.32" + }, + "peerDependencies": { + "express": ">=4.0.0 || >=5.0.0-beta" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "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/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "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/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", + "dev": true + }, + "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/tlds": { + "version": "1.252.0", + "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.252.0.tgz", + "integrity": "sha512-GA16+8HXvqtfEnw/DTcwB0UU354QE1n3+wh08oFjr6Znl7ZLAeUgYzCcK+/CCrOyE0vnHR8/pu3XXG3vDijXpQ==", + "bin": { + "tlds": "bin.js" + } + }, + "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/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "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==", + "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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==" + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-jest": { + "version": "27.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", + "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@types/jest": "^27.0.0", + "babel-jest": ">=27.0.0 <28", + "jest": "^27.0.0", + "typescript": ">=3.8 <5.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "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/acorn-walk": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths-webpack-plugin": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.1.0.tgz", + "integrity": "sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/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/tsconfig-paths-webpack-plugin/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/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/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/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "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==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "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/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" + }, + "node_modules/uglify-js": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.0.tgz", + "integrity": "sha512-wNKHUY2hYYkf6oSFfhwwiHo4WCHzHmzcXsqXYTN9ja3iApYIFbb2U6ics9hBcYLHcYGQoAlwnZlTrf3oF+BL/Q==", + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "dependencies": { + "@lukeed/csprng": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uid2": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", + "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "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.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.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==" + }, + "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==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "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/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/valid-data-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz", + "integrity": "sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/validator": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", + "engines": { + "node": ">= 0.10" + } + }, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-resource-inliner": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-6.0.1.tgz", + "integrity": "sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A==", + "dependencies": { + "ansi-colors": "^4.1.1", + "escape-goat": "^3.0.0", + "htmlparser2": "^5.0.0", + "mime": "^2.4.6", + "node-fetch": "^2.6.0", + "valid-data-url": "^3.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web-resource-inliner/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/dom-serializer/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "dependencies": { + "domelementtype": "^2.0.1" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/domutils/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/htmlparser2": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz", + "integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^3.3.0", + "domutils": "^2.4.2", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/fb55/htmlparser2?sponsor=1" + } + }, + "node_modules/web-resource-inliner/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.93.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", + "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-node-externals": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", + "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-encoding/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/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "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==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "optional": true + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "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==", + "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==" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/write-file-atomic/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/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "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/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "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/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@angular-devkit/core": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.8.tgz", + "integrity": "sha512-Q8q0voCGudbdCgJ7lXdnyaxKHbNQBARH68zPQV72WT8NWy+Gw/tys870i6L58NWbBaCJEUcIj/kb6KoakSRu+Q==", + "dev": true, + "requires": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + } + }, + "@angular-devkit/schematics": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.8.tgz", + "integrity": "sha512-QRVEYpIfgkprNHc916JlPuNbLzOgrm9DZalHasnLUz4P6g7pR21olb8YCyM2OTJjombNhya9ZpckcADU5Qyvlg==", + "dev": true, + "requires": { + "@angular-devkit/core": "17.3.8", + "jsonc-parser": "3.2.1", + "magic-string": "0.30.8", + "ora": "5.4.1", + "rxjs": "7.8.1" + } + }, + "@angular-devkit/schematics-cli": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-17.3.8.tgz", + "integrity": "sha512-TjmiwWJarX7oqvNiRAroQ5/LeKUatxBOCNEuKXO/PV8e7pn/Hr/BqfFm+UcYrQoFdZplmtNAfqmbqgVziKvCpA==", + "dev": true, + "requires": { + "@angular-devkit/core": "17.3.8", + "@angular-devkit/schematics": "17.3.8", + "ansi-colors": "4.1.3", + "inquirer": "9.2.15", + "symbol-observable": "4.0.0", + "yargs-parser": "21.1.1" + }, + "dependencies": { + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true + }, + "cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true + }, + "inquirer": { + "version": "9.2.15", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", + "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", + "dev": true, + "requires": { + "@ljharb/through": "^2.3.12", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", + "cli-cursor": "^3.1.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "figures": "^3.2.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + } + }, + "mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true + }, + "run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "dev": true + } + } + }, + "@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + } + }, + "@babel/compat-data": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz", + "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==", + "dev": true + }, + "@babel/core": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.9", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "dependencies": { + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.24.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz", + "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==", + "dev": true, + "requires": { + "@babel/types": "^7.24.9", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", + "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "dev": true, + "requires": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz", + "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==" + }, + "@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==" + }, + "@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true + }, + "@babel/helpers": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", + "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", + "dev": true, + "requires": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.8" + } + }, + "@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^1.9.0" + } + }, + "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, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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, + "requires": { + "color-name": "1.1.3" + } + }, + "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 + }, + "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 + }, + "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 + }, + "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, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", + "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==" + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/runtime": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz", + "integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==", + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/traverse": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", + "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.8", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.8", + "@babel/types": "^7.24.8", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "dependencies": { + "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 + } + } + }, + "@babel/types": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", + "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", + "requires": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true + }, + "@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, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@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, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@css-inline/css-inline": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline/-/css-inline-0.13.0.tgz", + "integrity": "sha512-ZozAXBiW1I8hf6eW5eTNqhxUdNOBxrNNxxUnQRiKQpWcs5ORuGaiWwV5focMBTJ5WXGN+Z8VLP93BOwWFPzCJw==", + "requires": { + "@css-inline/css-inline-darwin-arm64": "0.13.0", + "@css-inline/css-inline-darwin-x64": "0.13.0", + "@css-inline/css-inline-linux-arm-gnueabihf": "0.13.0", + "@css-inline/css-inline-linux-arm64-gnu": "0.13.0", + "@css-inline/css-inline-linux-arm64-musl": "0.13.0", + "@css-inline/css-inline-linux-x64-gnu": "0.13.0", + "@css-inline/css-inline-linux-x64-musl": "0.13.0", + "@css-inline/css-inline-win32-x64-msvc": "0.13.0" + } + }, + "@css-inline/css-inline-darwin-arm64": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-darwin-arm64/-/css-inline-darwin-arm64-0.13.0.tgz", + "integrity": "sha512-A4QvlZdhp8v+3IHKF/UftRf5GrAVUMEHCGRuk2Dx594xn/UR4ieh+B70aMm5rfONh2hv5mlR9UcoYAkVpEQ99g==", + "optional": true + }, + "@css-inline/css-inline-darwin-x64": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-darwin-x64/-/css-inline-darwin-x64-0.13.0.tgz", + "integrity": "sha512-px9z4ypzeECMyBEtlrNzTMpA1tnw5MmMIiMkBRhb8UGRr2pOBZY3yd/eEIxWzVVSPt0aIjVDwUOJ3+d0Z+BskA==", + "optional": true + }, + "@css-inline/css-inline-linux-arm-gnueabihf": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-arm-gnueabihf/-/css-inline-linux-arm-gnueabihf-0.13.0.tgz", + "integrity": "sha512-+uo0coLQNgk/AKeOB8mXSRd8VIlUg38zRSB9B9q0ior9oBCDPtEdn1HuCSvWxHoOSJ8QNNk+uwbz0zW4CETzFw==", + "optional": true + }, + "@css-inline/css-inline-linux-arm64-gnu": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-arm64-gnu/-/css-inline-linux-arm64-gnu-0.13.0.tgz", + "integrity": "sha512-GVrsFbY5l0Hxyzxsm5S5JPGObvHm/Ybf2wZgnWBsQigxqGtr1FL535HaTwEnq6aHOpH3f08gR5Vx33gB7jG4pw==", + "optional": true + }, + "@css-inline/css-inline-linux-arm64-musl": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-arm64-musl/-/css-inline-linux-arm64-musl-0.13.0.tgz", + "integrity": "sha512-V5h5+CRnE01EgoafI/kyjEcM8zvN+sKLnp17Aq9LqQfsut7mO3i72d8g/xeVC37DCLoGQFLvDCzbze2NbF2dIQ==", + "optional": true + }, + "@css-inline/css-inline-linux-x64-gnu": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-x64-gnu/-/css-inline-linux-x64-gnu-0.13.0.tgz", + "integrity": "sha512-vbRV++73MW7dvz/AIbozkv4R68/k/sEp57hno/L6lx034VYxpCwdfqtGN4D0W1TOTzdr2b6qBOGNZ1oLKQZOQQ==", + "optional": true + }, + "@css-inline/css-inline-linux-x64-musl": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-x64-musl/-/css-inline-linux-x64-musl-0.13.0.tgz", + "integrity": "sha512-2tCnwU23W/yMs9cGc2/i2jd9y2pjuntx0a5OytqX7s9fvUtmI3nc0Od6wuf51LnmdU+XAU8HLT9pZppsQiwPfQ==", + "optional": true + }, + "@css-inline/css-inline-win32-x64-msvc": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-win32-x64-msvc/-/css-inline-win32-x64-msvc-0.13.0.tgz", + "integrity": "sha512-6VFhFSXp4FH+NzJhLd6fFi7jKCPvIRW+vq0tV+CPuiQ3zPzMfC9nIk8sB/1VJR8EcvBAjMV53YnacuDjRFRT9g==", + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "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 + } + } + }, + "@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true + }, + "@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "@ioredis/commands": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", + "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "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 + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + } + }, + "@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + } + }, + "@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "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" + } + }, + "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 + } + } + }, + "@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "dependencies": { + "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 + } + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dev": true, + "requires": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + } + }, + "@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "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 + } + } + }, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@ljharb/through": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", + "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7" + } + }, + "@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==" + }, + "@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "requires": { + "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" + } + }, + "@microsoft/tsdoc": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.0.tgz", + "integrity": "sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==" + }, + "@nestjs-modules/mailer": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@nestjs-modules/mailer/-/mailer-1.11.2.tgz", + "integrity": "sha512-k07wyKbtCzxWMm6IqGwcGIisnXD/6sneGvUR8rBBZbxtLn1HE1FLGyiaXBrPui/0K7W41aS9x9jAIhfTawtlUg==", + "requires": { + "@css-inline/css-inline": "0.13.0", + "@types/ejs": "^3.1.5", + "@types/pug": "^2.0.10", + "ejs": "^3.1.9", + "glob": "10.3.10", + "handlebars": "^4.7.8", + "mjml": "4.15.3", + "preview-email": "3.0.19", + "pug": "^3.0.2" + } + }, + "@nestjs/cli": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.4.2.tgz", + "integrity": "sha512-fQexIfLHfp6GUgX+CO4fOg+AEwV5ox/LHotQhyZi9wXUQDyIqS0NTTbumr//62EcX35qV4nU0359nYnuEdzG+A==", + "dev": true, + "requires": { + "@angular-devkit/core": "17.3.8", + "@angular-devkit/schematics": "17.3.8", + "@angular-devkit/schematics-cli": "17.3.8", + "@nestjs/schematics": "^10.0.1", + "chalk": "4.1.2", + "chokidar": "3.6.0", + "cli-table3": "0.6.5", + "commander": "4.1.1", + "fork-ts-checker-webpack-plugin": "9.0.2", + "glob": "10.4.2", + "inquirer": "8.2.6", + "node-emoji": "1.11.0", + "ora": "5.4.1", + "tree-kill": "1.2.2", + "tsconfig-paths": "4.2.0", + "tsconfig-paths-webpack-plugin": "4.1.0", + "typescript": "5.3.3", + "webpack": "5.92.1", + "webpack-node-externals": "3.0.0" + }, + "dependencies": { + "@nestjs/schematics": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.1.3.tgz", + "integrity": "sha512-aLJ4Nl/K/u6ZlgLa0NjKw5CuBOIgc6vudF42QvmGueu5FaMGM6IJrAuEvB5T2kr0PAfVwYmDFBBHCWdYhTw4Tg==", + "dev": true, + "requires": { + "@angular-devkit/core": "17.3.8", + "@angular-devkit/schematics": "17.3.8", + "comment-json": "4.2.3", + "jsonc-parser": "3.3.1", + "pluralize": "8.0.0" + } + }, + "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, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "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 + }, + "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, + "requires": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true + }, + "webpack": { + "version": "5.92.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", + "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + } + } + } + }, + "@nestjs/common": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.3.10.tgz", + "integrity": "sha512-H8k0jZtxk1IdtErGDmxFRy0PfcOAUg41Prrqpx76DQusGGJjsaovs1zjXVD1rZWaVYchfT1uczJ6L4Kio10VNg==", + "requires": { + "iterare": "1.2.1", + "tslib": "2.6.3", + "uid": "2.0.2" + } + }, + "@nestjs/config": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.2.3.tgz", + "integrity": "sha512-p6yv/CvoBewJ72mBq4NXgOAi2rSQNWx3a+IMJLVKS2uiwFCOQQuiIatGwq6MRjXV3Jr+B41iUO8FIf4xBrZ4/w==", + "requires": { + "dotenv": "16.4.5", + "dotenv-expand": "10.0.0", + "lodash": "4.17.21" + } + }, + "@nestjs/core": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.3.10.tgz", + "integrity": "sha512-ZbQ4jovQyzHtCGCrzK5NdtW1SYO2fHSsgSY1+/9WdruYCUra+JDkWEXgZ4M3Hv480Dl3OXehAmY1wCOojeMyMQ==", + "requires": { + "@nuxtjs/opencollective": "0.3.2", + "fast-safe-stringify": "2.1.1", + "iterare": "1.2.1", + "path-to-regexp": "3.2.0", + "tslib": "2.6.3", + "uid": "2.0.2" + } + }, + "@nestjs/jwt": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-10.2.0.tgz", + "integrity": "sha512-x8cG90SURkEiLOehNaN2aRlotxT0KZESUliOPKKnjWiyJOcWurkF3w345WOX0P4MgFzUjGoZ1Sy0aZnxeihT0g==", + "requires": { + "@types/jsonwebtoken": "9.0.5", + "jsonwebtoken": "9.0.2" + } + }, + "@nestjs/mapped-types": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.5.tgz", + "integrity": "sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg==", + "requires": {} + }, + "@nestjs/passport": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@nestjs/passport/-/passport-10.0.3.tgz", + "integrity": "sha512-znJ9Y4S8ZDVY+j4doWAJ8EuuVO7SkQN3yOBmzxbGaXbvcSwFDAdGJ+OMCg52NdzIO4tQoN4pYKx8W6M0ArfFRQ==", + "requires": {} + }, + "@nestjs/platform-express": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.3.10.tgz", + "integrity": "sha512-wK2ow3CZI2KFqWeEpPmoR300OB6BcBLxARV1EiClJLCj4S1mZsoCmS0YWgpk3j1j6mo0SI8vNLi/cC2iZPEPQA==", + "requires": { + "body-parser": "1.20.2", + "cors": "2.8.5", + "express": "4.19.2", + "multer": "1.4.4-lts.1", + "tslib": "2.6.3" + } + }, + "@nestjs/schematics": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-8.0.11.tgz", + "integrity": "sha512-W/WzaxgH5aE01AiIErE9QrQJ73VR/M/8p8pq0LZmjmNcjZqU5kQyOWUxZg13WYfSpJdOa62t6TZRtFDmgZPoIg==", + "dev": true, + "requires": { + "@angular-devkit/core": "13.3.5", + "@angular-devkit/schematics": "13.3.5", + "fs-extra": "10.1.0", + "jsonc-parser": "3.0.0", + "pluralize": "8.0.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.5.tgz", + "integrity": "sha512-w7vzK4VoYP9rLgxJ2SwEfrkpKybdD+QgQZlsDBzT0C6Ebp7b4gkNcNVFo8EiZvfDl6Yplw2IAP7g7fs3STn0hQ==", + "dev": true, + "requires": { + "ajv": "8.9.0", + "ajv-formats": "2.1.1", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + } + }, + "@angular-devkit/schematics": { + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.5.tgz", + "integrity": "sha512-0N/kL/Vfx0yVAEwa3HYxNx9wYb+G9r1JrLjJQQzDp+z9LtcojNf7j3oey6NXrDUs1WjVZOa/AIdRl3/DuaoG5w==", + "dev": true, + "requires": { + "@angular-devkit/core": "13.3.5", + "jsonc-parser": "3.0.0", + "magic-string": "0.25.7", + "ora": "5.4.1", + "rxjs": "6.6.7" + } + }, + "ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@nestjs/swagger": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-7.4.0.tgz", + "integrity": "sha512-dCiwKkRxcR7dZs5jtrGspBAe/nqJd1AYzOBTzw9iCdbq3BGrLpwokelk6lFZPe4twpTsPQqzNKBwKzVbI6AR/g==", + "requires": { + "@microsoft/tsdoc": "^0.15.0", + "@nestjs/mapped-types": "2.0.5", + "js-yaml": "4.1.0", + "lodash": "4.17.21", + "path-to-regexp": "3.2.0", + "swagger-ui-dist": "5.17.14" + } + }, + "@nestjs/testing": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.3.10.tgz", + "integrity": "sha512-i3HAtVQJijxNxJq1k39aelyJlyEIBRONys7IipH/4r8W0J+M1V+y5EKDOyi4j1SdNSb/vmNyWpZ2/ewZjl3kRA==", + "dev": true, + "requires": { + "tslib": "2.6.3" + } + }, + "@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, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@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 + }, + "@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, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@nuxtjs/opencollective": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "requires": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + } + }, + "@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==" + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true + }, + "@prisma/client": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-4.16.2.tgz", + "integrity": "sha512-qCoEyxv1ZrQ4bKy39GnylE8Zq31IRmm8bNhNbZx7bF2cU5aiCCnSa93J2imF88MBjn7J9eUQneNxUQVJdl/rPQ==", + "requires": { + "@prisma/engines-version": "4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81" + } + }, + "@prisma/engines": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-4.16.2.tgz", + "integrity": "sha512-vx1nxVvN4QeT/cepQce68deh/Turxy5Mr+4L4zClFuK1GlxN3+ivxfuv+ej/gvidWn1cE1uAhW7ALLNlYbRUAw==" + }, + "@prisma/engines-version": { + "version": "4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81.tgz", + "integrity": "sha512-q617EUWfRIDTriWADZ4YiWRZXCa/WuhNgLTVd+HqWLffjMSPzyM5uOWoauX91wvQClSKZU4pzI4JJLQ9Kl62Qg==" + }, + "@schematics/angular": { + "version": "13.3.11", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.11.tgz", + "integrity": "sha512-imKBnKYEse0SBVELZO/753nkpt3eEgpjrYkB+AFWF9YfO/4RGnYXDHoH8CFkzxPH9QQCgNrmsVFNiYGS+P/S1A==", + "requires": { + "@angular-devkit/core": "13.3.11", + "@angular-devkit/schematics": "13.3.11", + "jsonc-parser": "3.0.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "13.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz", + "integrity": "sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==", + "requires": { + "ajv": "8.9.0", + "ajv-formats": "2.1.1", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + } + }, + "@angular-devkit/schematics": { + "version": "13.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.11.tgz", + "integrity": "sha512-ben+EGXpCrClnIVAAnEQmhQdKmnnqFhMp5BqMxgOslSYBAmCutLA6rBu5vsc8kZcGian1wt+lueF7G1Uk5cGBg==", + "requires": { + "@angular-devkit/core": "13.3.11", + "jsonc-parser": "3.0.0", + "magic-string": "0.25.7", + "ora": "5.4.1", + "rxjs": "6.6.7" + } + }, + "ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==" + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@selderee/plugin-htmlparser2": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", + "integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==", + "requires": { + "domhandler": "^5.0.3", + "selderee": "^0.11.0" + } + }, + "@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@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 + }, + "@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "@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 + }, + "@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 + }, + "@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 + }, + "@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "requires": { + "@types/node": "*" + } + }, + "@types/cookiejar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", + "dev": true + }, + "@types/ejs": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", + "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", + "optional": true + }, + "@types/eslint": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "27.4.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz", + "integrity": "sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==", + "dev": true, + "requires": { + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "@types/jsonwebtoken": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz", + "integrity": "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==", + "requires": { + "@types/node": "*" + } + }, + "@types/methods": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", + "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", + "dev": true + }, + "@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + }, + "@types/multer": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.11.tgz", + "integrity": "sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w==", + "requires": { + "@types/express": "*" + } + }, + "@types/node": { + "version": "16.18.104", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.104.tgz", + "integrity": "sha512-OF3keVCbfPlkzxnnDBUZJn1RiCJzKeadjiW0xTEb0G1SUJ5gDVb3qnzZr2T4uIFvsbKJbXy1v2DN7e2zaEY7jQ==" + }, + "@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true + }, + "@types/pug": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz", + "integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==", + "optional": true + }, + "@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" + }, + "@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + }, + "@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "requires": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "@types/superagent": { + "version": "8.1.7", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.7.tgz", + "integrity": "sha512-NmIsd0Yj4DDhftfWvvAku482PZum4DBW7U51OvS8gvOkDDY0WT1jsVyDV3hK+vplrsYw8oDwi9QxOM7U68iwww==", + "dev": true, + "requires": { + "@types/cookiejar": "^2.1.5", + "@types/methods": "^1.1.4", + "@types/node": "*" + } + }, + "@types/supertest": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz", + "integrity": "sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==", + "dev": true, + "requires": { + "@types/superagent": "*" + } + }, + "@types/validator": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag==" + }, + "@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "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==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "requires": {} + }, + "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, + "requires": {} + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "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==", + "requires": { + "debug": "4" + } + }, + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "requires": { + "ajv": "^8.0.0" + } + }, + "alce": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/alce/-/alce-1.2.0.tgz", + "integrity": "sha512-XppPf2S42nO2WhvKzlwzlfcApcXHzjlod30pKmcWjRgLOtqoe5DMuqdiYoM6AgyXksc6A6pV4v1L/WW217e57w==", + "requires": { + "esprima": "^1.2.0", + "estraverse": "^1.5.0" + }, + "dependencies": { + "esprima": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.5.tgz", + "integrity": "sha512-S9VbPDU0adFErpDai3qDkjq8+G05ONtKzcyNrPKg/ZKa+tf879nX2KexNU95b31UoTJjRLInNBHHHjFPoCd7lQ==" + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==" + } + } + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" + }, + "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, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "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 + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + } + } + }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, + "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==" + }, + "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==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "dev": true + }, + "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 + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "assert-never": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.3.0.tgz", + "integrity": "sha512-9Z3vxQ+berkL/JJo0dK+EY3Lp0s3NtSnP3VCLsh5HDcZPrh0M+KQRK5sWhUeyPPH+/RCxZqOxLMR+YC6vlviEQ==" + }, + "async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dev": true, + "requires": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@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-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "requires": { + "@babel/types": "^7.9.6" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "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==" + } + } + }, + "bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "requires": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + } + }, + "bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==" + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==" + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "requires": { + "fill-range": "^7.1.1" + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "browserslist": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.1.0" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "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==" + }, + "busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "requires": { + "streamsearch": "^1.1.0" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001643", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz", + "integrity": "sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "requires": { + "is-regex": "^1.0.3" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "requires": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + } + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.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" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true + }, + "ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==" + }, + "cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true + }, + "class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + }, + "class-validator": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.1.tgz", + "integrity": "sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==", + "requires": { + "@types/validator": "^13.11.8", + "libphonenumber-js": "^1.10.53", + "validator": "^13.9.0" + } + }, + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==" + }, + "cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "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 + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "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, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + }, + "cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "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==" + }, + "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, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "comment-json": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz", + "integrity": "sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==", + "dev": true, + "requires": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + } + }, + "component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, + "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==" + }, + "constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "requires": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + }, + "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 + }, + "cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "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==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "requires": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + } + }, + "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 + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "csv-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/csv-parser/-/csv-parser-3.2.0.tgz", + "integrity": "sha512-fgKbp+AJbn1h2dcAHKIdKNSSjfp43BZZykXsCjzALjKy80VXQNHPFJ6T9Afwdzoj24aMkq8GwDS7KGcDPpejrA==" + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "requires": { + "ms": "2.1.2" + } + }, + "decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "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 + }, + "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==" + }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "requires": { + "clone": "^1.0.2" + } + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==" + }, + "detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==" + }, + "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==" + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true + }, + "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, + "requires": { + "path-type": "^4.0.0" + } + }, + "display-notification": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/display-notification/-/display-notification-2.0.0.tgz", + "integrity": "sha512-TdmtlAcdqy1NU+j7zlkDdMnCL878zriLaBmoD9quOoq1ySSSGv03l0hXK5CvIFZlIfFI/hizqdQuW+Num7xuhw==", + "requires": { + "escape-string-applescript": "^1.0.0", + "run-applescript": "^3.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==" + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==" + }, + "dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==" + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "editorconfig": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "requires": { + "@one-ini/wasm": "0.1.1", + "commander": "^10.0.0", + "minimatch": "9.0.1", + "semver": "^7.5.3" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==" + }, + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "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==" + }, + "ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "optional": true, + "requires": { + "jake": "^10.8.5" + } + }, + "electron-to-chromium": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz", + "integrity": "sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==", + "dev": true + }, + "emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true + }, + "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==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "encoding-japanese": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/encoding-japanese/-/encoding-japanese-2.1.0.tgz", + "integrity": "sha512-58XySVxUgVlBikBTbQ8WdDxBDHIdXucB16LO5PBHR8t75D54wQrNo4cg+58+R1CtJfKnsVsvt9XlteRaR8xw1w==" + }, + "enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" + }, + "escape-goat": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", + "integrity": "sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==" + }, + "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==" + }, + "escape-string-applescript": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/escape-string-applescript/-/escape-string-applescript-1.0.0.tgz", + "integrity": "sha512-4/hFwoYaC6TkpDn9A3pTC52zQPArFeXuIfhUtCGYdauTzXVP9H3BDr3oO/QzQehMpLDC7srvYgfwvImPFGfvBA==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "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 + } + } + }, + "eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "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 + } + } + }, + "eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "dev": true, + "requires": {} + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + }, + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "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 + }, + "esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "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 + } + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true + }, + "expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + } + }, + "express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/extend-object/-/extend-object-1.0.0.tgz", + "integrity": "sha512-0dHDIXC7y7LDmCh/lp1oYkmv73K25AMugQI07r8eFopkW6f7Ufn1q+ETMsJjnV9Am14SlElkqy3O92r6xEaxPw==" + }, + "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, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "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, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "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==" + }, + "fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "requires": { + "@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" + } + }, + "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==" + }, + "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 + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "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 + } + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "optional": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "optional": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "optional": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "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, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "fixpack": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fixpack/-/fixpack-4.0.0.tgz", + "integrity": "sha512-5SM1+H2CcuJ3gGEwTiVo/+nd/hYpNj9Ch3iMDOQ58ndY+VGQ2QdvaUTkd3otjZvYnd/8LF/HkJ5cx7PBq0orCQ==", + "requires": { + "alce": "1.2.0", + "chalk": "^3.0.0", + "detect-indent": "^6.0.0", + "detect-newline": "^3.1.0", + "extend-object": "^1.0.0", + "rc": "^1.2.8" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "fork-ts-checker-webpack-plugin": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", + "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^8.2.0", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" + } + }, + "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, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "formidable": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "dev": true, + "requires": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "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, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "requires": { + "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" + }, + "dependencies": { + "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==" + } + } + }, + "gaxios": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.0.tgz", + "integrity": "sha512-DSrkyMTfAnAm4ks9Go20QGOcXEyW/NmZhvTYBU2rb4afBB393WIMQPWPEDMl/k8xqiNN9HYq2zao3oWXsdl2Tg==", + "requires": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9", + "uuid": "^10.0.0" + }, + "dependencies": { + "agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "requires": { + "debug": "^4.3.4" + } + }, + "https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + } + } + }, + "gcp-metadata": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", + "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", + "requires": { + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + } + }, + "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 + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "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==" + }, + "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 + }, + "glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "google-auth-library": { + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.11.0.tgz", + "integrity": "sha512-epX3ww/mNnhl6tL45EQ/oixsY8JLEgUFoT4A5E/5iAR4esld9Kqv6IJGk7EmGuOgDvaarwF95hU2+v7Irql9lw==", + "requires": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^6.1.1", + "gcp-metadata": "^6.1.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "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 + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "gtoken": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", + "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==", + "requires": { + "gaxios": "^6.0.0", + "jws": "^4.0.0" + } + }, + "handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "optional": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + } + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "requires": { + "has-symbols": "^1.0.3" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "helmet": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-7.1.0.tgz", + "integrity": "sha512-g+HZqgfbpXdCkme/Cd/mZkV0aV3BZZZSugecH03kl38m/Kmdx8jKjBikpDj2cr+Iynv4KpYEviojNdTJActJAg==" + }, + "hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "html-minifier": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", + "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", + "requires": { + "camel-case": "^3.0.0", + "clean-css": "^4.2.1", + "commander": "^2.19.0", + "he": "^1.2.0", + "param-case": "^2.1.1", + "relateurl": "^0.2.7", + "uglify-js": "^3.5.1" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + } + } + }, + "html-to-text": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz", + "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==", + "requires": { + "@selderee/plugin-htmlparser2": "^0.11.0", + "deepmerge": "^4.3.1", + "dom-serializer": "^2.0.0", + "htmlparser2": "^8.0.2", + "selderee": "^0.11.0" + } + }, + "htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "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, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "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==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "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 + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dev": true, + "requires": { + "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": "^6.0.1" + } + }, + "ioredis": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.4.1.tgz", + "integrity": "sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==", + "requires": { + "@ioredis/commands": "^1.1.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.1.0", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + } + }, + "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==" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "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==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "requires": { + "hasown": "^2.0.2" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + }, + "is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "requires": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "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==" + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "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==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "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==" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "requires": { + "semver": "^7.5.3" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "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 + } + } + }, + "istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "iterare": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==" + }, + "jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "optional": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + } + }, + "jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dev": true, + "requires": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + } + }, + "jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + } + }, + "jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + } + }, + "jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dev": true, + "requires": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + } + }, + "jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dev": true, + "requires": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "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" + } + } + } + }, + "jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + } + }, + "jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true + }, + "jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + } + }, + "jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dev": true, + "requires": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true + }, + "jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + } + }, + "jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + } + }, + "jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "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" + } + } + } + }, + "jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + } + }, + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } + } + }, + "jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dev": true, + "requires": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "requires": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "js-beautify": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz", + "integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==", + "requires": { + "config-chain": "^1.1.13", + "editorconfig": "^1.0.4", + "glob": "^10.3.3", + "js-cookie": "^3.0.5", + "nopt": "^7.2.0" + }, + "dependencies": { + "abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==" + }, + "nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "requires": { + "abbrev": "^2.0.0" + } + } + } + }, + "js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==" + }, + "js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==" + }, + "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 + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "requires": { + "bignumber.js": "^9.0.0" + } + }, + "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 + }, + "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 + }, + "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==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "dependencies": { + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + } + } + }, + "jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "requires": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "juice": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/juice/-/juice-10.0.0.tgz", + "integrity": "sha512-9f68xmhGrnIi6DBkiiP3rUrQN33SEuaKu1+njX6VgMP+jwZAsnT33WIzlrWICL9matkhYu3OyrqSUP55YTIdGg==", + "requires": { + "cheerio": "^1.0.0-rc.12", + "commander": "^6.1.0", + "mensch": "^0.3.4", + "slick": "^1.12.2", + "web-resource-inliner": "^6.0.1" + }, + "dependencies": { + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" + } + } + }, + "jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "requires": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "leac": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz", + "integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==" + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "libbase64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-1.3.0.tgz", + "integrity": "sha512-GgOXd0Eo6phYgh0DJtjQ2tO8dc0IVINtZJeARPeiIJqge+HdsWSuaDTe8ztQ7j/cONByDZ3zeB325AHiv5O0dg==" + }, + "libmime": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/libmime/-/libmime-5.3.5.tgz", + "integrity": "sha512-nSlR1yRZ43L3cZCiWEw7ali3jY29Hz9CQQ96Oy+sSspYnIP5N54ucOPHqooBsXzwrX1pwn13VUE05q4WmzfaLg==", + "requires": { + "encoding-japanese": "2.1.0", + "iconv-lite": "0.6.3", + "libbase64": "1.3.0", + "libqp": "2.1.0" + } + }, + "libphonenumber-js": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.4.tgz", + "integrity": "sha512-F/R50HQuWWYcmU/esP5jrH5LiWYaN7DpN0a/99U8+mnGGtnx8kmRE+649dQh3v+CowXXZc8vpkf5AmYkO0AQ7Q==" + }, + "libqp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/libqp/-/libqp-2.1.0.tgz", + "integrity": "sha512-O6O6/fsG5jiUVbvdgT7YX3xY3uIadR6wEZ7+vy9u7PKHAlSEB6blvC1o5pHBjgsi95Uo0aiBBdkyFecj6jtb7A==" + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "requires": { + "uc.micro": "^2.0.0" + } + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, + "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, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "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==", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" + }, + "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, + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "mailparser": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/mailparser/-/mailparser-3.7.1.tgz", + "integrity": "sha512-RCnBhy5q8XtB3mXzxcAfT1huNqN93HTYYyL6XawlIKycfxM/rXPg9tXoZ7D46+SgCS1zxKzw+BayDQSvncSTTw==", + "requires": { + "encoding-japanese": "2.1.0", + "he": "1.2.0", + "html-to-text": "9.0.5", + "iconv-lite": "0.6.3", + "libmime": "5.3.5", + "linkify-it": "5.0.0", + "mailsplit": "5.4.0", + "nodemailer": "6.9.13", + "punycode.js": "2.3.1", + "tlds": "1.252.0" + }, + "dependencies": { + "nodemailer": { + "version": "6.9.13", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.13.tgz", + "integrity": "sha512-7o38Yogx6krdoBf3jCAqnIN4oSQFx+fMa0I7dK1D+me9kBxx12D+/33wSb+fhOCtIxvYJ+4x4IMEhmhCKfAiOA==" + } + } + }, + "mailsplit": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/mailsplit/-/mailsplit-5.4.0.tgz", + "integrity": "sha512-wnYxX5D5qymGIPYLwnp6h8n1+6P6vz/MJn5AzGjZ8pwICWssL+CCQjWBIToOVHASmATot4ktvlLo6CyLfOXWYA==", + "requires": { + "libbase64": "1.2.1", + "libmime": "5.2.0", + "libqp": "2.0.1" + }, + "dependencies": { + "encoding-japanese": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encoding-japanese/-/encoding-japanese-2.0.0.tgz", + "integrity": "sha512-++P0RhebUC8MJAwJOsT93dT+5oc5oPImp1HubZpAuCZ5kTLnhuuBhKHj2jJeO/Gj93idPBWmIuQ9QWMe5rX3pQ==" + }, + "libbase64": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-1.2.1.tgz", + "integrity": "sha512-l+nePcPbIG1fNlqMzrh68MLkX/gTxk/+vdvAb388Ssi7UuUN31MI44w4Yf33mM3Cm4xDfw48mdf3rkdHszLNew==" + }, + "libmime": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/libmime/-/libmime-5.2.0.tgz", + "integrity": "sha512-X2U5Wx0YmK0rXFbk67ASMeqYIkZ6E5vY7pNWRKtnNzqjvdYYG8xtPDpCnuUEnPU9vlgNev+JoSrcaKSUaNvfsw==", + "requires": { + "encoding-japanese": "2.0.0", + "iconv-lite": "0.6.3", + "libbase64": "1.2.1", + "libqp": "2.0.1" + } + }, + "libqp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/libqp/-/libqp-2.0.1.tgz", + "integrity": "sha512-Ka0eC5LkF3IPNQHJmYBWljJsw0UvM6j+QdKRbWyCdTmYwvIDE6a7bCm0UkTAL/K+3KXK5qXT/ClcInU01OpdLg==" + } + } + }, + "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==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } + } + }, + "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 + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "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==" + }, + "memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.4" + } + }, + "mensch": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz", + "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "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 + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "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==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "mjml": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml/-/mjml-4.15.3.tgz", + "integrity": "sha512-bW2WpJxm6HS+S3Yu6tq1DUPFoTxU9sPviUSmnL7Ua+oVO3WA5ILFWqvujUlz+oeuM+HCwEyMiP5xvKNPENVjYA==", + "requires": { + "@babel/runtime": "^7.23.9", + "mjml-cli": "4.15.3", + "mjml-core": "4.15.3", + "mjml-migrate": "4.15.3", + "mjml-preset-core": "4.15.3", + "mjml-validator": "4.15.3" + } + }, + "mjml-accordion": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-accordion/-/mjml-accordion-4.15.3.tgz", + "integrity": "sha512-LPNVSj1LyUVYT9G1gWwSw3GSuDzDsQCu0tPB2uDsq4VesYNnU6v3iLCQidMiR6azmIt13OEozG700ygAUuA6Ng==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-body": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-body/-/mjml-body-4.15.3.tgz", + "integrity": "sha512-7pfUOVPtmb0wC+oUOn4xBsAw4eT5DyD6xqaxj/kssu6RrFXOXgJaVnDPAI9AzIvXJ/5as9QrqRGYAddehwWpHQ==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-button": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-button/-/mjml-button-4.15.3.tgz", + "integrity": "sha512-79qwn9AgdGjJR1vLnrcm2rq2AsAZkKC5JPwffTMG+Nja6zGYpTDZFZ56ekHWr/r1b5WxkukcPj2PdevUug8c+Q==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-carousel": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-carousel/-/mjml-carousel-4.15.3.tgz", + "integrity": "sha512-3ju6I4l7uUhPRrJfN3yK9AMsfHvrYbRkcJ1GRphFHzUj37B2J6qJOQUpzA547Y4aeh69TSb7HFVf1t12ejQxVw==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-cli": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-cli/-/mjml-cli-4.15.3.tgz", + "integrity": "sha512-+V2TDw3tXUVEptFvLSerz125C2ogYl8klIBRY1m5BHd4JvGVf3yhx8N3PngByCzA6PGcv/eydGQN+wy34SHf0Q==", + "requires": { + "@babel/runtime": "^7.23.9", + "chokidar": "^3.0.0", + "glob": "^10.3.10", + "html-minifier": "^4.0.0", + "js-beautify": "^1.6.14", + "lodash": "^4.17.21", + "minimatch": "^9.0.3", + "mjml-core": "4.15.3", + "mjml-migrate": "4.15.3", + "mjml-parser-xml": "4.15.3", + "mjml-validator": "4.15.3", + "yargs": "^17.7.2" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "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==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + } + } + }, + "mjml-column": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-column/-/mjml-column-4.15.3.tgz", + "integrity": "sha512-hYdEFdJGHPbZJSEysykrevEbB07yhJGSwfDZEYDSbhQQFjV2tXrEgYcFD5EneMaowjb55e3divSJxU4c5q4Qgw==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-core": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-core/-/mjml-core-4.15.3.tgz", + "integrity": "sha512-Dmwk+2cgSD9L9GmTbEUNd8QxkTZtW9P7FN/ROZW/fGZD6Hq6/4TB0zEspg2Ow9eYjZXO2ofOJ3PaQEEShKV0kQ==", + "requires": { + "@babel/runtime": "^7.23.9", + "cheerio": "1.0.0-rc.12", + "detect-node": "^2.0.4", + "html-minifier": "^4.0.0", + "js-beautify": "^1.6.14", + "juice": "^10.0.0", + "lodash": "^4.17.21", + "mjml-migrate": "4.15.3", + "mjml-parser-xml": "4.15.3", + "mjml-validator": "4.15.3" + } + }, + "mjml-divider": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-divider/-/mjml-divider-4.15.3.tgz", + "integrity": "sha512-vh27LQ9FG/01y0b9ntfqm+GT5AjJnDSDY9hilss2ixIUh0FemvfGRfsGVeV5UBVPBKK7Ffhvfqc7Rciob9Spzw==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-group": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-group/-/mjml-group-4.15.3.tgz", + "integrity": "sha512-HSu/rKnGZVKFq3ciT46vi1EOy+9mkB0HewO4+P6dP/Y0UerWkN6S3UK11Cxsj0cAp0vFwkPDCdOeEzRdpFEkzA==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-head": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head/-/mjml-head-4.15.3.tgz", + "integrity": "sha512-o3mRuuP/MB5fZycjD3KH/uXsnaPl7Oo8GtdbJTKtH1+O/3pz8GzGMkscTKa97l03DAG2EhGrzzLcU2A6eshwFw==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-head-attributes": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-attributes/-/mjml-head-attributes-4.15.3.tgz", + "integrity": "sha512-2ISo0r5ZKwkrvJgDou9xVPxxtXMaETe2AsAA02L89LnbB2KC0N5myNsHV0sEysTw9+CfCmgjAb0GAI5QGpxKkQ==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-head-breakpoint": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-breakpoint/-/mjml-head-breakpoint-4.15.3.tgz", + "integrity": "sha512-Eo56FA5C2v6ucmWQL/JBJ2z641pLOom4k0wP6CMZI2utfyiJ+e2Uuinj1KTrgDcEvW4EtU9HrfAqLK9UosLZlg==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-head-font": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-font/-/mjml-head-font-4.15.3.tgz", + "integrity": "sha512-CzV2aDPpiNIIgGPHNcBhgyedKY4SX3BJoTwOobSwZVIlEA6TAWB4Z9WwFUmQqZOgo1AkkiTHPZQvGcEhFFXH6g==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-head-html-attributes": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-html-attributes/-/mjml-head-html-attributes-4.15.3.tgz", + "integrity": "sha512-MDNDPMBOgXUZYdxhosyrA2kudiGO8aogT0/cODyi2Ed9o/1S7W+je11JUYskQbncqhWKGxNyaP4VWa+6+vUC/g==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-head-preview": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-preview/-/mjml-head-preview-4.15.3.tgz", + "integrity": "sha512-J2PxCefUVeFwsAExhrKo4lwxDevc5aKj888HBl/wN4EuWOoOg06iOGCxz4Omd8dqyFsrqvbBuPqRzQ+VycGmaA==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-head-style": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-style/-/mjml-head-style-4.15.3.tgz", + "integrity": "sha512-9J+JuH+mKrQU65CaJ4KZegACUgNIlYmWQYx3VOBR/tyz+8kDYX7xBhKJCjQ1I4wj2Tvga3bykd89Oc2kFZ5WOw==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-head-title": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-title/-/mjml-head-title-4.15.3.tgz", + "integrity": "sha512-IM59xRtsxID4DubQ0iLmoCGXguEe+9BFG4z6y2xQDrscIa4QY3KlfqgKGT69ojW+AVbXXJPEVqrAi4/eCsLItQ==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-hero": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-hero/-/mjml-hero-4.15.3.tgz", + "integrity": "sha512-9cLAPuc69yiuzNrMZIN58j+HMK1UWPaq2i3/Fg2ZpimfcGFKRcPGCbEVh0v+Pb6/J0+kf8yIO0leH20opu3AyQ==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-image": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-image/-/mjml-image-4.15.3.tgz", + "integrity": "sha512-g1OhSdofIytE9qaOGdTPmRIp7JsCtgO0zbsn1Fk6wQh2gEL55Z40j/VoghslWAWTgT2OHFdBKnMvWtN6U5+d2Q==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-migrate": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-migrate/-/mjml-migrate-4.15.3.tgz", + "integrity": "sha512-sr/+35RdxZroNQVegjpfRHJ5hda9XCgaS4mK2FGO+Mb1IUevKfeEPII3F/cHDpNwFeYH3kAgyqQ22ClhGLWNBA==", + "requires": { + "@babel/runtime": "^7.23.9", + "js-beautify": "^1.6.14", + "lodash": "^4.17.21", + "mjml-core": "4.15.3", + "mjml-parser-xml": "4.15.3", + "yargs": "^17.7.2" + }, + "dependencies": { + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "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==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + } + } + }, + "mjml-navbar": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-navbar/-/mjml-navbar-4.15.3.tgz", + "integrity": "sha512-VsKH/Jdlf8Yu3y7GpzQV5n7JMdpqvZvTSpF6UQXL0PWOm7k6+LX+sCZimOfpHJ+wCaaybpxokjWZ71mxOoCWoA==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-parser-xml": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-parser-xml/-/mjml-parser-xml-4.15.3.tgz", + "integrity": "sha512-Tz0UX8/JVYICLjT+U8J1f/TFxIYVYjzZHeh4/Oyta0pLpRLeZlxEd71f3u3kdnulCKMP4i37pFRDmyLXAlEuLw==", + "requires": { + "@babel/runtime": "^7.23.9", + "detect-node": "2.1.0", + "htmlparser2": "^9.1.0", + "lodash": "^4.17.15" + }, + "dependencies": { + "htmlparser2": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + } + } + } + }, + "mjml-preset-core": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-preset-core/-/mjml-preset-core-4.15.3.tgz", + "integrity": "sha512-1zZS8P4O0KweWUqNS655+oNnVMPQ1Rq1GaZq5S9JfwT1Vh/m516lSmiTW9oko6gGHytt5s6Yj6oOeu5Zm8FoLw==", + "requires": { + "@babel/runtime": "^7.23.9", + "mjml-accordion": "4.15.3", + "mjml-body": "4.15.3", + "mjml-button": "4.15.3", + "mjml-carousel": "4.15.3", + "mjml-column": "4.15.3", + "mjml-divider": "4.15.3", + "mjml-group": "4.15.3", + "mjml-head": "4.15.3", + "mjml-head-attributes": "4.15.3", + "mjml-head-breakpoint": "4.15.3", + "mjml-head-font": "4.15.3", + "mjml-head-html-attributes": "4.15.3", + "mjml-head-preview": "4.15.3", + "mjml-head-style": "4.15.3", + "mjml-head-title": "4.15.3", + "mjml-hero": "4.15.3", + "mjml-image": "4.15.3", + "mjml-navbar": "4.15.3", + "mjml-raw": "4.15.3", + "mjml-section": "4.15.3", + "mjml-social": "4.15.3", + "mjml-spacer": "4.15.3", + "mjml-table": "4.15.3", + "mjml-text": "4.15.3", + "mjml-wrapper": "4.15.3" + } + }, + "mjml-raw": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-raw/-/mjml-raw-4.15.3.tgz", + "integrity": "sha512-IGyHheOYyRchBLiAEgw3UM11kFNmBSMupu2BDdejC6ZiDhEAdG+tyERlsCwDPYtXanvFpGWULIu3XlsUPc+RZw==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-section": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-section/-/mjml-section-4.15.3.tgz", + "integrity": "sha512-JfVPRXH++Hd933gmQfG8JXXCBCR6fIzC3DwiYycvanL/aW1cEQ2EnebUfQkt5QzlYjOkJEH+JpccAsq3ln6FZQ==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-social": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-social/-/mjml-social-4.15.3.tgz", + "integrity": "sha512-7sD5FXrESOxpT9Z4Oh36bS6u/geuUrMP1aCg2sjyAwbPcF1aWa2k9OcatQfpRf6pJEhUZ18y6/WBBXmMVmSzXg==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-spacer": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-spacer/-/mjml-spacer-4.15.3.tgz", + "integrity": "sha512-3B7Qj+17EgDdAtZ3NAdMyOwLTX1jfmJuY7gjyhS2HtcZAmppW+cxqHUBwCKfvSRgTQiccmEvtNxaQK+tfyrZqA==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-table": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-table/-/mjml-table-4.15.3.tgz", + "integrity": "sha512-FLx7DcRKTdKdcOCbMyBaeudeHaHpwPveRrBm6WyQe3LXx6FfdmOh59i71/16LFQMgBOD3N4/UJkzxLzlTJzMqQ==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-text": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-text/-/mjml-text-4.15.3.tgz", + "integrity": "sha512-+C0hxCmw9kg0XzT6vhE5mFkK6y225nC8UEQcN94K0fBCjPKkM+HqZMwGX205fzdGRi+Bxa55b/VhrIVwdv+8vw==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3" + } + }, + "mjml-validator": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-validator/-/mjml-validator-4.15.3.tgz", + "integrity": "sha512-Xb72KdqRwjv/qM2rJpV22syyP2N3cRQ9VVDrN6u2FSzLq02buFNxmSPJ7CKhat3PrUNdVHU75KZwOf/tz4UEhA==", + "requires": { + "@babel/runtime": "^7.23.9" + } + }, + "mjml-wrapper": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-wrapper/-/mjml-wrapper-4.15.3.tgz", + "integrity": "sha512-ditsCijeHJrmBmObtJmQ18ddLxv5oPyMTdPU8Di8APOnD2zPk7Z4UAuJSl7HXB45oFiivr3MJf4koFzMUSZ6Gg==", + "requires": { + "@babel/runtime": "^7.23.9", + "lodash": "^4.17.21", + "mjml-core": "4.15.3", + "mjml-section": "4.15.3" + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "requires": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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==", + "requires": { + "ee-first": "1.1.1" + } + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multer": { + "version": "1.4.4-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", + "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + } + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "devOptional": true + }, + "nestjs-prisma": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/nestjs-prisma/-/nestjs-prisma-0.22.0.tgz", + "integrity": "sha512-vseCukdWYijWxQBIdtC1XVSwMNZLZMjJen0ostsaRWaQ7yF8ny2Xruu0mA1d/t16uPOMUVUkSZro6JikOEkcuw==", + "requires": { + "@angular-devkit/core": "^13.3.0", + "@angular-devkit/schematics": "^13.3.0", + "@schematics/angular": "~13.3.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "13.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz", + "integrity": "sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==", + "requires": { + "ajv": "8.9.0", + "ajv-formats": "2.1.1", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + } + }, + "@angular-devkit/schematics": { + "version": "13.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.11.tgz", + "integrity": "sha512-ben+EGXpCrClnIVAAnEQmhQdKmnnqFhMp5BqMxgOslSYBAmCutLA6rBu5vsc8kZcGian1wt+lueF7G1Uk5cGBg==", + "requires": { + "@angular-devkit/core": "13.3.11", + "jsonc-parser": "3.0.0", + "magic-string": "0.25.7", + "ora": "5.4.1", + "rxjs": "6.6.7" + } + }, + "ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==" + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "dev": true + }, + "node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "requires": { + "lodash": "^4.17.21" + } + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "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==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "nodemailer": { + "version": "6.9.14", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.14.tgz", + "integrity": "sha512-Dobp/ebDKBvz91sbtRKhcznLThrKxKt97GI2FAlAyy+fk19j73Uz3sBXolVtmcXjaorivqsbbbjDY+Jkt4/bQA==" + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "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, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "requires": { + "boolbase": "^1.0.0" + } + }, + "nwsapi": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz", + "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==", + "dev": true + }, + "oauth": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.10.0.tgz", + "integrity": "sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q==" + }, + "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==" + }, + "object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "requires": { + "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" + } + }, + "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 + }, + "p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "requires": { + "p-timeout": "^3.1.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" + }, + "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, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "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, + "requires": { + "p-limit": "^3.0.2" + } + }, + "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==", + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "p-wait-for": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-3.2.0.tgz", + "integrity": "sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==", + "requires": { + "p-timeout": "^3.0.0" + } + }, + "package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "requires": { + "no-case": "^2.2.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "requires": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "parseley": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz", + "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==", + "requires": { + "leac": "^0.6.0", + "peberminta": "^0.9.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "passport": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.7.0.tgz", + "integrity": "sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==", + "peer": true, + "requires": { + "passport-strategy": "1.x.x", + "pause": "0.0.1", + "utils-merge": "^1.0.1" + } + }, + "passport-google-oauth20": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz", + "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==", + "requires": { + "passport-oauth2": "1.x.x" + } + }, + "passport-headerapikey": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/passport-headerapikey/-/passport-headerapikey-1.2.2.tgz", + "integrity": "sha512-4BvVJRrWsNJPrd3UoZfcnnl4zvUWYKEtfYkoDsaOKBsrWHYmzTApCjs7qUbncOLexE9ul0IRiYBFfBG0y9IVQA==", + "requires": { + "lodash": "^4.17.15", + "passport-strategy": "^1.0.0" + } + }, + "passport-jwt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz", + "integrity": "sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==", + "requires": { + "jsonwebtoken": "^9.0.0", + "passport-strategy": "^1.0.0" + } + }, + "passport-oauth2": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.8.0.tgz", + "integrity": "sha512-cjsQbOrXIDE4P8nNb3FQRCCmJJ/utnFKEz2NX209f7KOHPoX18gF7gBzBbLLsj2/je4KrgiwLLGjf0lm9rtTBA==", + "requires": { + "base64url": "3.x.x", + "oauth": "0.10.x", + "passport-strategy": "1.x.x", + "uid2": "0.0.x", + "utils-merge": "1.x.x" + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==" + }, + "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 + }, + "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==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "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==" + }, + "path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + } + } + }, + "path-to-regexp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", + "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==" + }, + "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 + }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==", + "peer": true + }, + "peberminta": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", + "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==" + }, + "picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "dev": true + }, + "pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "preview-email": { + "version": "3.0.19", + "resolved": "https://registry.npmjs.org/preview-email/-/preview-email-3.0.19.tgz", + "integrity": "sha512-DBS3Nir18YtKc8loYCCOGitmiaQ0vTdahPoiXxwNweJDpmVZo+w3tppufOhoK0m8skpRxT56llYLs3VrORnmNQ==", + "requires": { + "ci-info": "^3.8.0", + "display-notification": "2.0.0", + "fixpack": "^4.0.0", + "get-port": "5.1.1", + "mailparser": "^3.6.4", + "nodemailer": "^6.9.2", + "open": "7", + "p-event": "4.2.0", + "p-wait-for": "3.2.0", + "pug": "^3.0.2", + "uuid": "^9.0.0" + }, + "dependencies": { + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + } + } + }, + "prisma": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-4.16.2.tgz", + "integrity": "sha512-SYCsBvDf0/7XSJyf2cHTLjLeTLVXYfqp7pG5eEVafFLeT0u/hLFz/9W196nDRGUOo1JfPatAEb+uEnTQImQC1g==", + "requires": { + "@prisma/engines": "4.16.2" + } + }, + "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==" + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + }, + "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==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "pug": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz", + "integrity": "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==", + "requires": { + "pug-code-gen": "^3.0.3", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "requires": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "pug-code-gen": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.3.tgz", + "integrity": "sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==", + "requires": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.1.0", + "pug-runtime": "^3.0.1", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "pug-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", + "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==" + }, + "pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "requires": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "requires": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "requires": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "requires": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "requires": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==" + }, + "pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "requires": { + "pug-error": "^2.0.0" + } + }, + "pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" + }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" + }, + "punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==" + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "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 + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "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==" + }, + "raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + } + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "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" + }, + "dependencies": { + "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==" + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + }, + "dependencies": { + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + } + } + }, + "redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==" + }, + "redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "requires": { + "redis-errors": "^1.0.0" + } + }, + "reflect-metadata": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz", + "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==" + }, + "regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "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==" + }, + "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 + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "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, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "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==" + } + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "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" + } + } + } + }, + "run-applescript": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-3.2.0.tgz", + "integrity": "sha512-Ep0RsvAjnRcBX1p5vogbaBdAGu/8j/ewpvGqnQYunnLd9SM0vWcPJewPKNnWFggf0hF0pwIgwV5XK7qQ7UZ8Qg==", + "requires": { + "execa": "^0.10.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + }, + "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==" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "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 + }, + "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, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "requires": { + "tslib": "^2.1.0" + } + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, + "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 + } + } + }, + "selderee": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz", + "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==", + "requires": { + "parseley": "^0.12.0" + } + }, + "semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "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==" + }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "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==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + } + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slick": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz", + "integrity": "sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==" + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + }, + "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, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "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 + } + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, + "standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" + }, + "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==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "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==" + } + } + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "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==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==" + }, + "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 + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "superagent": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", + "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", + "dev": true, + "requires": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.1.2", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + } + } + }, + "supertest": { + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", + "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", + "dev": true, + "requires": { + "methods": "^1.1.2", + "superagent": "^8.1.2" + } + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, + "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==" + }, + "swagger-ui-dist": { + "version": "5.17.14", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.17.14.tgz", + "integrity": "sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw==" + }, + "swagger-ui-express": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.6.3.tgz", + "integrity": "sha512-CDje4PndhTD2HkgyKH3pab+LKspDeB/NhPN2OF1j+piYIamQqBYwAXWESOT1Yju2xFg51bRW9sUng2WxDjzArw==", + "requires": { + "swagger-ui-dist": ">=4.11.0" + } + }, + "symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "requires": { + "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" + }, + "dependencies": { + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "terser": { + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "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" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "tlds": { + "version": "1.252.0", + "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.252.0.tgz", + "integrity": "sha512-GA16+8HXvqtfEnw/DTcwB0UU354QE1n3+wh08oFjr6Znl7ZLAeUgYzCcK+/CCrOyE0vnHR8/pu3XXG3vDijXpQ==" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "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==" + }, + "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==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==" + }, + "tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "dependencies": { + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true + } + } + }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "ts-jest": { + "version": "27.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", + "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "dependencies": { + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } + }, + "ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + } + }, + "ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "acorn-walk": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "dev": true, + "requires": { + "acorn": "^8.11.0" + } + } + } + }, + "tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "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 + } + } + }, + "tsconfig-paths-webpack-plugin": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.1.0.tgz", + "integrity": "sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^4.1.2" + }, + "dependencies": { + "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 + }, + "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, + "requires": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + } + } + }, + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true + }, + "uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" + }, + "uglify-js": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.0.tgz", + "integrity": "sha512-wNKHUY2hYYkf6oSFfhwwiHo4WCHzHmzcXsqXYTN9ja3iApYIFbb2U6ics9hBcYLHcYGQoAlwnZlTrf3oF+BL/Q==" + }, + "uid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "requires": { + "@lukeed/csprng": "^1.0.0" + } + }, + "uid2": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", + "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" + }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "requires": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + } + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "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==" + }, + "uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==" + }, + "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 + }, + "v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + } + }, + "valid-data-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz", + "integrity": "sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==" + }, + "validator": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==" + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "requires": { + "defaults": "^1.0.3" + } + }, + "web-resource-inliner": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-6.0.1.tgz", + "integrity": "sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A==", + "requires": { + "ansi-colors": "^4.1.1", + "escape-goat": "^3.0.0", + "htmlparser2": "^5.0.0", + "mime": "^2.4.6", + "node-fetch": "^2.6.0", + "valid-data-url": "^3.0.0" + }, + "dependencies": { + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "dependencies": { + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + } + } + }, + "domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "requires": { + "domelementtype": "^2.0.1" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "dependencies": { + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + } + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "htmlparser2": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz", + "integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^3.3.0", + "domutils": "^2.4.2", + "entities": "^2.0.0" + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" + } + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "webpack": { + "version": "5.93.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", + "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "dev": true, + "peer": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + } + }, + "webpack-node-externals": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", + "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", + "dev": true + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + }, + "dependencies": { + "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, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "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==", + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "requires": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + } + }, + "word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "optional": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + }, + "dependencies": { + "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 + } + } + }, + "ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "requires": {} + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "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 + } + } +} diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 0000000..439af88 --- /dev/null +++ b/backend/package.json @@ -0,0 +1,108 @@ +{ + "name": "nest-prisma", + "version": "0.0.1", + "description": "", + "author": "", + "private": true, + "license": "UNLICENSED", + "scripts": { + "prebuild": "rimraf dist", + "build": "nest build", + "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "start": "nest start", + "start:dev": "nest start --watch", + "start:debug": "nest start --debug --watch", + "start:prod": "node dist/main", + "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", + "test": "jest", + "test:watch": "jest --watch", + "test:cov": "jest --coverage", + "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", + "test:e2e": "jest --config ./test/jest-e2e.json", + "seed": "ts-node prisma/seed.ts", + "ts-node": "ts-node", + "generate": "npx prisma generate", + "migrate:dev": "npx prisma migrate dev", + "migrate:dev:create": "npx prisma migrate dev --create-only", + "migrate:reset": "npx prisma migrate reset", + "migrate:deploy": "npx prisma migrate deploy", + "migrate:status": "npx prisma migrate status", + "migrate:resolve": "npx prisma migrate resolve" + }, + "dependencies": { + "@nestjs-modules/mailer": "^1.6.1", + "@nestjs/common": "^10.3.10", + "@nestjs/config": "^3.0.0", + "@nestjs/core": "^10.3.10", + "@nestjs/jwt": "^10.1.0", + "@nestjs/mapped-types": "*", + "@nestjs/passport": "^10.0.0", + "@nestjs/platform-express": "^10.3.10", + "@nestjs/swagger": "^7.4.0", + "@prisma/client": "^4.7.0", + "@types/multer": "^1.4.7", + "bcrypt": "^5.1.1", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.1", + "csv-parser": "^3.2.0", + "dotenv": "^16.3.1", + "google-auth-library": "^9.0.0", + "helmet": "^7.0.0", + "iconv-lite": "^0.6.3", + "ioredis": "^5.3.2", + "joi": "^17.9.2", + "morgan": "^1.10.0", + "nestjs-prisma": "^0.22.0", + "passport-google-oauth20": "^2.0.0", + "passport-headerapikey": "^1.2.2", + "passport-jwt": "^4.0.1", + "reflect-metadata": "^0.1.13", + "rimraf": "^3.0.2", + "rxjs": "^7.2.0", + "swagger-ui-express": "^4.4.0" + }, + "devDependencies": { + "@nestjs/cli": "^10.4.2", + "@nestjs/schematics": "^8.0.0", + "@nestjs/testing": "^10.3.10", + "@types/express": "^4.17.13", + "@types/jest": "27.4.1", + "@types/node": "^16.0.0", + "@types/supertest": "^2.0.11", + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.0.0", + "jest": "^27.2.5", + "prettier": "^2.3.2", + "prisma": "^4.7.0", + "source-map-support": "^0.5.20", + "supertest": "^6.1.3", + "ts-jest": "^27.0.3", + "ts-loader": "^9.2.3", + "ts-node": "^10.0.0", + "tsconfig-paths": "^3.10.1", + "typescript": "^4.3.5" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], + "rootDir": "src", + "testRegex": ".*\\.spec\\.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + }, + "collectCoverageFrom": [ + "**/*.(t|j)s" + ], + "coverageDirectory": "../coverage", + "testEnvironment": "node" + }, + "prisma": { + "seed": "ts-node prisma/seed.ts" + } +} diff --git a/backend/prisma/dump/slot.json b/backend/prisma/dump/slot.json new file mode 100644 index 0000000..e5e46b8 --- /dev/null +++ b/backend/prisma/dump/slot.json @@ -0,0 +1,82 @@ +{ + "data": [ + { + "lat": 21.00369935885945, + "lng": 105.78221980819896, + "address": "116 Miếu Đầm", + "city": "Hà Nội", + "district": "Nam Từ Liêm", + "ward": "Mễ Trì", + "directions": {}, + "name": "Bãi Đỗ Xe 1", + "tenantId": 1, + "total": 5, + "empty": 0 + }, + { + "lat": 21.028285188709756, + "lng": 105.80518484452222, + "address": "P. Kim Mã", + "city": "Hà Nội", + "district": "Đống Đa", + "ward": "Láng Thượng", + "directions": {}, + "name": "Bãi Đỗ Xe 2", + "tenantId": 1, + "total": 5, + "empty": 0 + }, + { + "lat": 21.032131562226848, + "lng": 105.80935331171176, + "address": "", + "city": "Hà Nội", + "district": "Ba Đình", + "ward": "Ngọc Khánh", + "directions": {}, + "name": "Bãi Đỗ Xe 3", + "tenantId": 1, + "total": 5, + "empty": 0 + }, + { + "lat": 21.041552080736658, + "lng": 105.81240791131391, + "address": "25 Ngh. 6/30 P. Đội Nhân", + "city": "Hà Nội", + "district": "Ba Đình", + "ward": "Vĩnh Phú", + "directions": {}, + "name": "Bãi Đỗ Xe 4", + "tenantId": 1, + "total": 5, + "empty": 0 + }, + { + "lat": 21.030215749159247, + "lng": 105.79564506735449, + "address": "116 Ng. 165 Đ. Cầu Giấy", + "city": "Hà Nội", + "district": "Cầu Giấy", + "ward": " Dịch Vọng", + "directions": {}, + "name": "Bãi Đỗ Xe 5", + "tenantId": 1, + "total": 5, + "empty": 0 + }, + { + "lat": 21.0187413220742, + "lng": 105.82410499971033, + "address": "36b P. Hoàng Cầu", + "city": "Hà Nội", + "district": "Đống Đa", + "ward": "Chợ Dừa", + "directions": {}, + "name": "Bãi Đỗ Xe 1", + "tenantId": 1, + "total": 5, + "empty": 0 + } + ] +} \ No newline at end of file diff --git a/backend/prisma/dump/tenant.json b/backend/prisma/dump/tenant.json new file mode 100644 index 0000000..f0a7a15 --- /dev/null +++ b/backend/prisma/dump/tenant.json @@ -0,0 +1,13 @@ +{ + "data": [ + { + "email": "danghoat.ptit@gmail.com", + "username": "hoatdx", + "password": "123456789", + "password_confirmation": "", + "first_name": "Hoat", + "last_name" : "Dang", + "phone": "0973465669" + } + ] +} \ No newline at end of file diff --git a/backend/prisma/migrations/20240728061550_init_db/migration.sql b/backend/prisma/migrations/20240728061550_init_db/migration.sql new file mode 100644 index 0000000..bb0a2f1 --- /dev/null +++ b/backend/prisma/migrations/20240728061550_init_db/migration.sql @@ -0,0 +1,163 @@ +-- CreateEnum +CREATE TYPE "Language" AS ENUM ('vi', 'en'); + +-- CreateEnum +CREATE TYPE "Gender" AS ENUM ('Male', 'Female', 'LGBT'); + +-- CreateEnum +CREATE TYPE "BookingStatus" AS ENUM ('done', 'pending', 'reject', 'cancel'); + +-- CreateTable +CREATE TABLE "User" ( + "id" SERIAL NOT NULL, + "email" TEXT NOT NULL, + "phone" TEXT, + "username" TEXT, + "fullname" TEXT, + "dob" TIMESTAMP(3), + "gender" "Gender" NOT NULL DEFAULT 'Female', + "language" "Language" NOT NULL DEFAULT 'vi', + "created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMPTZ(3) NOT NULL, + "deleted_at" TIMESTAMPTZ(3), + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Booking" ( + "id" SERIAL NOT NULL, + "path" TEXT, + "image" TEXT, + "public" BOOLEAN NOT NULL DEFAULT true, + "user_id" INTEGER NOT NULL, + "status" "BookingStatus" NOT NULL DEFAULT 'pending', + "slot_id" INTEGER NOT NULL, + "start_at" TIMESTAMPTZ(3) NOT NULL, + "end_at" TIMESTAMPTZ(3), + "created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMPTZ(3) NOT NULL, + "deleted_at" TIMESTAMPTZ(3), + + CONSTRAINT "Booking_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Slot" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "lat" DOUBLE PRECISION NOT NULL, + "lng" DOUBLE PRECISION NOT NULL, + "address" TEXT NOT NULL, + "district" TEXT NOT NULL, + "ward" TEXT NOT NULL, + "city" TEXT NOT NULL, + "destination" TEXT, + "total" INTEGER NOT NULL, + "empty" INTEGER NOT NULL, + "published" BOOLEAN NOT NULL DEFAULT false, + "tenantId" INTEGER NOT NULL, + "distance" DOUBLE PRECISION NOT NULL, + "duration" DOUBLE PRECISION NOT NULL, + "directions" JSONB NOT NULL, + "created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMPTZ(3) NOT NULL, + "deleted_at" TIMESTAMPTZ(3), + + CONSTRAINT "Slot_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Admin" ( + "id" SERIAL NOT NULL, + "username" TEXT NOT NULL, + "password" TEXT NOT NULL, + "password_confirmation" TEXT NOT NULL, + "street" TEXT, + "city" TEXT, + "province" TEXT, + "first_name" TEXT NOT NULL, + "last_name" TEXT NOT NULL, + "phone" TEXT NOT NULL, + "dob" TIMESTAMP(3), + "language" "Language" NOT NULL DEFAULT 'vi', + "last_login_at" TIMESTAMP(3), + "current_login_at" TIMESTAMP(3), + "last_login_failed_at" TIMESTAMP(3), + "consecutive_login_penalty" INTEGER NOT NULL DEFAULT 0, + "avatarUrl" TEXT, + "active" BOOLEAN NOT NULL DEFAULT true, + "last_lockout_at" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Admin_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Tenant" ( + "id" SERIAL NOT NULL, + "email" TEXT, + "username" TEXT NOT NULL, + "password" TEXT NOT NULL, + "password_confirmation" TEXT, + "street" TEXT, + "city" TEXT, + "province" TEXT, + "postal_code" TEXT, + "first_name" TEXT NOT NULL, + "last_name" TEXT NOT NULL, + "phone" TEXT NOT NULL, + "language" "Language" NOT NULL DEFAULT 'vi', + "last_login_at" TIMESTAMP(3), + "current_login_at" TIMESTAMP(3), + "last_login_failed_at" TIMESTAMP(3), + "consecutive_login_penalty" INTEGER NOT NULL DEFAULT 0, + "avatarUrl" TEXT, + "active" BOOLEAN NOT NULL DEFAULT true, + "last_lockout_at" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Tenant_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "History" ( + "id" SERIAL NOT NULL, + + CONSTRAINT "History_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "User_username_key" ON "User"("username"); + +-- CreateIndex +CREATE INDEX "User_id_email_idx" ON "User"("id", "email"); + +-- CreateIndex +CREATE INDEX "Booking_user_id_id_idx" ON "Booking"("user_id", "id"); + +-- CreateIndex +CREATE INDEX "Slot_id_idx" ON "Slot"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "Admin_username_key" ON "Admin"("username"); + +-- CreateIndex +CREATE UNIQUE INDEX "Tenant_email_key" ON "Tenant"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "Tenant_username_key" ON "Tenant"("username"); + +-- AddForeignKey +ALTER TABLE "Booking" ADD CONSTRAINT "Booking_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Booking" ADD CONSTRAINT "Booking_slot_id_fkey" FOREIGN KEY ("slot_id") REFERENCES "Slot"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Slot" ADD CONSTRAINT "Slot_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/backend/prisma/migrations/20240802073153_update/migration.sql b/backend/prisma/migrations/20240802073153_update/migration.sql new file mode 100644 index 0000000..8b4ab81 --- /dev/null +++ b/backend/prisma/migrations/20240802073153_update/migration.sql @@ -0,0 +1,10 @@ +-- AlterTable +ALTER TABLE "Admin" ALTER COLUMN "password_confirmation" DROP NOT NULL; + +-- AlterTable +ALTER TABLE "Slot" ALTER COLUMN "distance" DROP NOT NULL, +ALTER COLUMN "duration" DROP NOT NULL, +ALTER COLUMN "directions" DROP NOT NULL; + +-- AlterTable +ALTER TABLE "User" ADD COLUMN "password" TEXT; diff --git a/backend/prisma/migrations/20240808101628_update_booking/migration.sql b/backend/prisma/migrations/20240808101628_update_booking/migration.sql new file mode 100644 index 0000000..01efc18 --- /dev/null +++ b/backend/prisma/migrations/20240808101628_update_booking/migration.sql @@ -0,0 +1,17 @@ +/* + Warnings: + + - Added the required column `contact` to the `Booking` table without a default value. This is not possible if the table is not empty. + - Added the required column `license_plates` to the `Booking` table without a default value. This is not possible if the table is not empty. + - Added the required column `owner` to the `Booking` table without a default value. This is not possible if the table is not empty. + - Made the column `end_at` on table `Booking` required. This step will fail if there are existing NULL values in that column. + +*/ +-- AlterEnum +ALTER TYPE "BookingStatus" ADD VALUE 'out'; + +-- AlterTable +ALTER TABLE "Booking" ADD COLUMN "contact" TEXT NOT NULL, +ADD COLUMN "license_plates" TEXT NOT NULL, +ADD COLUMN "owner" TEXT NOT NULL, +ALTER COLUMN "end_at" SET NOT NULL; diff --git a/backend/prisma/migrations/20240808190355_update_pricing/migration.sql b/backend/prisma/migrations/20240808190355_update_pricing/migration.sql new file mode 100644 index 0000000..7e77d78 --- /dev/null +++ b/backend/prisma/migrations/20240808190355_update_pricing/migration.sql @@ -0,0 +1,5 @@ +-- AlterTable +ALTER TABLE "Booking" ADD COLUMN "pricing" INTEGER; + +-- AlterTable +ALTER TABLE "Slot" ADD COLUMN "pricing_per_hour" INTEGER NOT NULL DEFAULT 0; diff --git a/backend/prisma/migrations/20240912145653_update_booking_type/migration.sql b/backend/prisma/migrations/20240912145653_update_booking_type/migration.sql new file mode 100644 index 0000000..dd422f1 --- /dev/null +++ b/backend/prisma/migrations/20240912145653_update_booking_type/migration.sql @@ -0,0 +1,13 @@ +-- CreateEnum +CREATE TYPE "SlotType" AS ENUM ('Car', 'Mortorbike'); + +-- CreateEnum +CREATE TYPE "BookingType" AS ENUM ('fulltime', 'parttime', 'all'); + +-- AlterTable +ALTER TABLE "Booking" ADD COLUMN "alow_booking_type" "BookingType" DEFAULT 'all', +ADD COLUMN "slot_type" "SlotType" DEFAULT 'Car'; + +-- AlterTable +ALTER TABLE "Slot" ADD COLUMN "booking_type" "BookingType" DEFAULT 'all', +ADD COLUMN "image" TEXT; diff --git a/backend/prisma/migrations/20240912162218_rollback_update_booking_type/migration.sql b/backend/prisma/migrations/20240912162218_rollback_update_booking_type/migration.sql new file mode 100644 index 0000000..094c2eb --- /dev/null +++ b/backend/prisma/migrations/20240912162218_rollback_update_booking_type/migration.sql @@ -0,0 +1,20 @@ +/* + Warnings: + + - You are about to drop the column `alow_booking_type` on the `Booking` table. All the data in the column will be lost. + - You are about to drop the column `slot_type` on the `Booking` table. All the data in the column will be lost. + - You are about to drop the column `booking_type` on the `Slot` table. All the data in the column will be lost. + +*/ +-- AlterTable +ALTER TABLE "Booking" DROP COLUMN "alow_booking_type", +DROP COLUMN "slot_type"; + +-- AlterTable +ALTER TABLE "Slot" DROP COLUMN "booking_type"; + +-- DropEnum +DROP TYPE "BookingType"; + +-- DropEnum +DROP TYPE "SlotType"; diff --git a/backend/prisma/migrations/20240912163302_type_booking/migration.sql b/backend/prisma/migrations/20240912163302_type_booking/migration.sql new file mode 100644 index 0000000..c8442ca --- /dev/null +++ b/backend/prisma/migrations/20240912163302_type_booking/migration.sql @@ -0,0 +1,13 @@ +-- CreateEnum +CREATE TYPE "SlotType" AS ENUM ('Car', 'Mortorbike', 'Orther'); + +-- CreateEnum +CREATE TYPE "BookingType" AS ENUM ('Fulltime', 'Parttime', 'All'); + +-- AlterTable +ALTER TABLE "Booking" ADD COLUMN "booking_type" "BookingType" DEFAULT 'All', +ADD COLUMN "slot_type" "SlotType" DEFAULT 'Car'; + +-- AlterTable +ALTER TABLE "Slot" ADD COLUMN "alow_booking_type" "BookingType" DEFAULT 'All', +ADD COLUMN "slot_type" "SlotType" DEFAULT 'Car'; diff --git a/backend/prisma/migrations/20240922113532_update_slot_and_add_file_table/migration.sql b/backend/prisma/migrations/20240922113532_update_slot_and_add_file_table/migration.sql new file mode 100644 index 0000000..dbf96e6 --- /dev/null +++ b/backend/prisma/migrations/20240922113532_update_slot_and_add_file_table/migration.sql @@ -0,0 +1,26 @@ +/* + Warnings: + + - You are about to drop the column `image` on the `Slot` table. All the data in the column will be lost. + +*/ +-- AlterTable +ALTER TABLE "Slot" DROP COLUMN "image", +ADD COLUMN "close" VARCHAR, +ADD COLUMN "images" TEXT[] DEFAULT ARRAY[]::TEXT[], +ADD COLUMN "open" VARCHAR; + +-- CreateTable +CREATE TABLE "File" ( + "id" SERIAL NOT NULL, + "path" TEXT NOT NULL, + "slot_id" INTEGER, + "user_id" INTEGER, + "size" INTEGER NOT NULL, + "mine_type" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "deletedAt" TIMESTAMP(3), + + CONSTRAINT "File_pkey" PRIMARY KEY ("id") +); diff --git a/backend/prisma/migrations/20241027172209_/migration.sql b/backend/prisma/migrations/20241027172209_/migration.sql new file mode 100644 index 0000000..ea17ee4 --- /dev/null +++ b/backend/prisma/migrations/20241027172209_/migration.sql @@ -0,0 +1,21 @@ +/* + Warnings: + + - You are about to alter the column `close` on the `Slot` table. The data in that column could be lost. The data in that column will be cast from `VarChar` to `VarChar(1)`. + - You are about to alter the column `open` on the `Slot` table. The data in that column could be lost. The data in that column will be cast from `VarChar` to `VarChar(1)`. + +*/ +-- DropForeignKey +ALTER TABLE "Slot" DROP CONSTRAINT "Slot_tenantId_fkey"; + +-- AlterTable +ALTER TABLE "Slot" ADD COLUMN "userId" INTEGER, +ALTER COLUMN "tenantId" DROP NOT NULL, +ALTER COLUMN "close" SET DATA TYPE VARCHAR(5), +ALTER COLUMN "open" SET DATA TYPE VARCHAR(5); + +-- AddForeignKey +ALTER TABLE "Slot" ADD CONSTRAINT "Slot_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Slot" ADD CONSTRAINT "Slot_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/backend/prisma/migrations/20250317025537_add_tb_comment/migration.sql b/backend/prisma/migrations/20250317025537_add_tb_comment/migration.sql new file mode 100644 index 0000000..29cbc30 --- /dev/null +++ b/backend/prisma/migrations/20250317025537_add_tb_comment/migration.sql @@ -0,0 +1,34 @@ +-- CreateTable +CREATE TABLE "Comment" ( + "id" SERIAL NOT NULL, + "slot_id" INTEGER NOT NULL, + "content" TEXT, + "tenantId" INTEGER, + "userId" INTEGER, + + CONSTRAINT "Comment_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Like" ( + "id" SERIAL NOT NULL, + "commentId" INTEGER NOT NULL, + "userId" INTEGER, + + CONSTRAINT "Like_pkey" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "Comment" ADD CONSTRAINT "Comment_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Comment" ADD CONSTRAINT "Comment_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Comment" ADD CONSTRAINT "Comment_slot_id_fkey" FOREIGN KEY ("slot_id") REFERENCES "Slot"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Like" ADD CONSTRAINT "Like_commentId_fkey" FOREIGN KEY ("commentId") REFERENCES "Comment"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Like" ADD CONSTRAINT "Like_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/backend/prisma/migrations/20250319075314_add_vote_table/migration.sql b/backend/prisma/migrations/20250319075314_add_vote_table/migration.sql new file mode 100644 index 0000000..432f85b --- /dev/null +++ b/backend/prisma/migrations/20250319075314_add_vote_table/migration.sql @@ -0,0 +1,16 @@ +-- CreateTable +CREATE TABLE "Vote" ( + "id" SERIAL NOT NULL, + "commentId" INTEGER NOT NULL, + "userId" INTEGER, + "source" INTEGER NOT NULL DEFAULT 0, + "type" INTEGER NOT NULL DEFAULT 0, + + CONSTRAINT "Vote_pkey" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "Vote" ADD CONSTRAINT "Vote_commentId_fkey" FOREIGN KEY ("commentId") REFERENCES "Comment"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Vote" ADD CONSTRAINT "Vote_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/backend/prisma/migrations/20250321094407_fix_vote_tb/migration.sql b/backend/prisma/migrations/20250321094407_fix_vote_tb/migration.sql new file mode 100644 index 0000000..de3691d --- /dev/null +++ b/backend/prisma/migrations/20250321094407_fix_vote_tb/migration.sql @@ -0,0 +1,19 @@ +/* + Warnings: + + - You are about to drop the column `commentId` on the `Vote` table. All the data in the column will be lost. + - Added the required column `slot_id` to the `Vote` table without a default value. This is not possible if the table is not empty. + +*/ +-- DropForeignKey +ALTER TABLE "Vote" DROP CONSTRAINT "Vote_commentId_fkey"; + +-- AlterTable +ALTER TABLE "User" ALTER COLUMN "email" DROP NOT NULL; + +-- AlterTable +ALTER TABLE "Vote" DROP COLUMN "commentId", +ADD COLUMN "slot_id" INTEGER NOT NULL; + +-- AddForeignKey +ALTER TABLE "Vote" ADD CONSTRAINT "Vote_slot_id_fkey" FOREIGN KEY ("slot_id") REFERENCES "Slot"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/backend/prisma/migrations/20250327174710_add_unaccent/migration.sql b/backend/prisma/migrations/20250327174710_add_unaccent/migration.sql new file mode 100644 index 0000000..c22ec71 --- /dev/null +++ b/backend/prisma/migrations/20250327174710_add_unaccent/migration.sql @@ -0,0 +1 @@ +CREATE EXTENSION IF NOT EXISTS unaccent; \ No newline at end of file diff --git a/backend/prisma/migrations/20250416193001_update_slot/migration.sql b/backend/prisma/migrations/20250416193001_update_slot/migration.sql new file mode 100644 index 0000000..f850d8d --- /dev/null +++ b/backend/prisma/migrations/20250416193001_update_slot/migration.sql @@ -0,0 +1,12 @@ +/* + Warnings: + + - A unique constraint covering the columns `[lat,lng]` on the table `Slot` will be added. If there are existing duplicate values, this will fail. + - A unique constraint covering the columns `[phone]` on the table `User` will be added. If there are existing duplicate values, this will fail. + +*/ +-- AlterTable +ALTER TABLE "Slot" ADD COLUMN "phone" TEXT; + +-- CreateIndex +CREATE UNIQUE INDEX "User_phone_key" ON "User"("phone"); diff --git a/backend/prisma/migrations/migration_lock.toml b/backend/prisma/migrations/migration_lock.toml new file mode 100644 index 0000000..fbffa92 --- /dev/null +++ b/backend/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "postgresql" \ No newline at end of file diff --git a/backend/prisma/packingCrawler/csv/all-task-1-overview.csv b/backend/prisma/packingCrawler/csv/all-task-1-overview.csv new file mode 100644 index 0000000..b63f0e6 --- /dev/null +++ b/backend/prisma/packingCrawler/csv/all-task-1-overview.csv @@ -0,0 +1,2078 @@ +place_id,name,description,is_spending_on_ads,reviews,rating,competitors,website,phone,can_claim,owner_name,owner_profile_link,featured_image,main_category,categories,workday_timing,is_temporarily_closed,closed_on,address,review_keywords,link,query +ChIJZ4_97dSrNTER8n0BUmyQuMA,Bai do xe,,,2,4.5,"Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai xe Cong ty TNHH Phat trien dich vu Dung Truong +Link: https://www.google.com/maps/search/B%C3%A3i+xe+C%C3%B4ng+ty+TNHH+Ph%C3%A1t+tri%E1%BB%83n+d%E1%BB%8Bch+v%E1%BB%A5+D%C5%A9ng+Tr%C6%B0%C6%A1ng/@21.0205669,105.83865070000002?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"293 D. Le Duan, Le Dai Hanh, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe/data=!4m7!3m6!1s0x3135abd4edfd8f67:0xc0b8906c52017df2!8m2!3d21.0149662!4d105.8415221!16s%2Fg%2F11jpyv8fqj!19sChIJZ4_97dSrNTER8n0BUmyQuMA?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ-Xzr0nesNTER6tLlobZ4Koc,Bai gui xe C1,,,2,4.5,"Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai gui xe C1 (Owner),,https://lh3.ggpht.com/p/AB5caB-zcnCZyxOxTZFYLqDsDcdsaLwBgRtAbPeSuWSSECVNI2N6IGFwFp-8LnG_PEqlc6eA2AqQNK4WWrZPY5TItnWGqr2yk0-hPkHGuudPeHgnSMoBWzXQrxozfBH7MsAZWopl05jt=s1024,Parking lot,Parking lot,,,Open All Days,"2R4V+XCX, P. Tran Dai Nghia, Bach Khoa, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+C1/data=!4m7!3m6!1s0x3135ac77d2eb7cf9:0x872a78b6a1e5d2ea!8m2!3d21.0074865!4d105.8435941!16s%2Fg%2F11cnwgsdc6!19sChIJ-Xzr0nesNTER6tLlobZ4Koc?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJfXlf4QmrNTERZvVzADIF_58,Bai do xe Ngoc Ha,,,26,3.8,"Name: Bai do xe o to Nguyen Cong Hoan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4+Nguy%E1%BB%85n+C%C3%B4ng+Hoan/@21.027268499999998,105.8167297?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai gui xe vien Phoi +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+vi%E1%BB%87n+Ph%E1%BB%95i/@21.041498500000003,105.8123838?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews",,,1,Bai do xe Ngoc Ha (Owner),,https://lh3.ggpht.com/p/AB5caB_5coJhV8LKbSXozvctQzFDptcNyaQExqPA05kq9_wPfkKWky6AcGgchY8NLoo0RXAbj_rggy6Kt11xTj8_KJYXvlGqDHPgOcVcowtaHeB1FtcAvD9muYtWVDkZA0F8mAjscGdQ=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"2RQH+JJV, Ngoc Ho, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+Ng%E1%BB%8Dc+H%C3%A0/data=!4m7!3m6!1s0x3135ab09e15f797d:0x9fff05320073f566!8m2!3d21.0391194!4d105.8290374!16s%2Fg%2F1tlk8vy8!19sChIJfXlf4QmrNTERZvVzADIF_58?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJjzaRxXurNTERaGphkcz9-JI,Bai do xe tho quan,,,2,4.5,"Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0149662,105.84152209999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe CP taxi Ha Noi +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+CP+taxi+H%C3%A0+N%E1%BB%99i/@21.012037499999998,105.81464059999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe tho quan (Owner),,,Parking lot,Parking lot,,,Open All Days,"2R8P+83R, Tho Quan, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/data=!4m7!3m6!1s0x3135ab7bc591368f:0x92f8fdcc91616a68!8m2!3d21.015855!4d105.8351441!16s%2Fg%2F11h1mkq_rv!19sChIJjzaRxXurNTERaGphkcz9-JI?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJb45j1KSrNTERuqQniRmyAOE,BAI DO XE O TO,,,6,4.3,"Name: Bai do xe Ngoc Ha +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Ng%E1%BB%8Dc+H%C3%A0/@21.0391194,105.82903739999999?authuser=0&hl=en&entry=ttu +Reviews: 26 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9867769,105.8198008?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,BAI DO XE O TO (Owner),,https://lh3.ggpht.com/p/AB5caB9LAYQ7kzEy2OlilPGPRiqDeAdICFu8IJOHmpf2jl48khHziB_7A7hNGr9sw_e0J99vWuFnztwbwk_U2U6_AioEEw4ZjfuBpQln5A7Vp4xFGprHcEkh88cO2KKxHThtpuVO025b3xb_Di9h=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"39b P. Phuc Xa, Phuc xa, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/data=!4m7!3m6!1s0x3135aba4d4638e6f:0xe100b2198927a4ba!8m2!3d21.0478608!4d105.8457672!16s%2Fg%2F11fb2jgpx8!19sChIJb45j1KSrNTERuqQniRmyAOE?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJPaF0KFKtNTERiNuw3W92AJw,Bai Gui Xe D4-D6,,,2,5,"Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0149662,105.84152209999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",http://hust.edu.vn/,,1,Bai Gui Xe D4-D6 (Owner),,https://lh3.ggpht.com/p/AB5caB9yamuVjsc_WlQnQc9trt9i7dkIvzWsGhZSJW4r0_0p_iOZApLx9Kyr-pI1_zQyt2-ye9xyAsEzbtsEbJYjIaWQ9rV_uhanE1K4DduQ1yD_819u6P8CnCxngTdykAoz7TvW_do=s1024,Parking lot,Parking lot,6 AM-6 PM,,Open All Days,"17duong D. Giai Phong, Dong Tam, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/data=!4m7!3m6!1s0x3135ad522874a13d:0x9c00766fddb0db88!8m2!3d21.004815!4d105.8422449!16s%2Fg%2F11fpqxgj7g!19sChIJPaF0KFKtNTERiNuw3W92AJw?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ63BoQtetNTERRLgGGu5p3uM,Bai gui xe D9,,,5,3.6,"Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai gui xe D9 (Owner),,https://lh3.ggpht.com/p/AB5caB9bWHeyt0PE6TJ9VgU3RQR-oH95Wo-0XuCebyEH3s5XC23z4wUhxL5YWjxtUulaL1tNpR4Zy4c3iL0NqeDo9218QgxXciiLTVGxO-KHFBOEPUg1690ejNIVzNT0siHftetDFZAp=s1024,Parking lot,Parking lot,6 AM-10 PM,,Open All Days,"D9 P. Tran Dai Nghia, Dong Tam, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+D9/data=!4m7!3m6!1s0x3135add7426870eb:0xe3de69ee1a06b844!8m2!3d21.0039847!4d105.8441366!16s%2Fg%2F11gx_w_6d7!19sChIJ63BoQtetNTERRLgGGu5p3uM?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ74OXNz-rNTERofcQwMh1FEk,Bai do xe,,,4,4,"Name: Bai do xe o to Nguyen Cong Hoan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4+Nguy%E1%BB%85n+C%C3%B4ng+Hoan/@21.027268499999998,105.8167297?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai De Xe Chua Lang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%83+Xe+Ch%C3%B9a+L%C3%A1ng/@21.0231036,105.80317819999999?authuser=0&hl=en&entry=ttu +Reviews: 10 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai do xe (Owner),,https://lh3.ggpht.com/p/AB5caB-MxQ9_lvjSuPUq61XGpjqgwLsXEvjUxg1hXZP_M_Ze-wxAc-xzxl0oU3xgwgr3iqDTqNJUKpMDCGp0sbJ1ZLsKhw-7OCfv7qSbW0GzncykyhqAaADkpwKZvHWfwyqBwyK-I7Hk=s1024,Parking lot,Parking lot,,,Open All Days,"36 P. Hoang Cau, Cho Dua, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe/data=!4m7!3m6!1s0x3135ab3f379783ef:0x491475c8c010f7a1!8m2!3d21.0190385!4d105.8242586!16s%2Fg%2F11jj1fc7_6!19sChIJ74OXNz-rNTERofcQwMh1FEk?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJST0r4rytNTERswWzF-k_Xvc,Bai gui xe D3-5,,,5,3.4,"Name: Diem Gui Xe May +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+G%E1%BB%ADi+Xe+M%C3%A1y/@20.9984002,105.8444061?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai gui xe D3-5 (Owner),,https://lh3.ggpht.com/p/AB5caB_e3oKTBIoHe1LG-UMXNy_a5kGtybbFoxmb93_prkzIyORgEbZrj3OdPTnA_fgL0DzkfQNVGVP4fkxWiiUWlxC3B1XfuEEUD3_CTAbkxjI4Oq02iKMIT_HpLupwsNo1QqZj07VHnQ=s1024,Parking lot for motorcycles,Parking lot for motorcycles,6 AM-10 PM,,Open All Days,"2R3W+W58, Bai gui xe, Bach Khoa, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/data=!4m7!3m6!1s0x3135adbce22b3d49:0xf75e3fe917b305b3!8m2!3d21.0047785!4d105.8454584!16s%2Fg%2F11fj171gkr!19sChIJST0r4rytNTERswWzF-k_Xvc?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ_xk0WNStNTER1bahKS4i3JU,Bai do xe Truong Chinh,,,13,4.9,"Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+xe+oto/@20.998038299999997,105.8050507?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe +Link: https://www.google.com/maps/search/B%C3%A3i+xe/@20.995946099999998,105.82298229999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,024 3566 7333,1,Bai do xe Truong Chinh (Owner),,https://lh3.ggpht.com/p/AB5caB_7GS_VhT5yjQIzKU4m48nTe47jrq-fqBdsqUZC1RDlpVAsF4rCNysIN7sUfUFCWZFZoabwTzNjEm7MMRfDQebWoJjp4jEqzZNelQwttv5ZhIxkSdABv8HXzaNybrMHfF4psHwy=s1024,Parking lot,Parking lot,,,Open All Days,"315 D. Truong Chinh, Khuong Thuong, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+Tr%C6%B0%E1%BB%9Dng+Chinh/data=!4m7!3m6!1s0x3135add4583419ff:0x95dc222e29a1b6d5!8m2!3d21.0018285!4d105.8229903!16s%2Fg%2F11h6jyp_r6!19sChIJ_xk0WNStNTER1bahKS4i3JU?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJuWCJ44mrNTERquJuwGIwXd0,Bai gui xe CV Thong Nhat,,,4,2.8,"Name: Gui xe Cong vien - Nguyen Dinh Chieu +Link: https://www.google.com/maps/search/G%E1%BB%ADi+xe+C%C3%B4ng+vi%C3%AAn+-+Nguy%E1%BB%85n+%C4%90%C3%ACnh+Chi%E1%BB%83u/@21.0166327,105.8476317?authuser=0&hl=en&entry=ttu +Reviews: 11 reviews + +Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,0963 319 468,1,Bai gui xe CV Thong Nhat (Owner),,https://lh3.ggpht.com/p/AB5caB_pz4b8MqKCnAARFAC4CpNO9qwWm5r0y8L1gfWGRejrzEHmS9lygPoTUnl3vA1PSWmAbyKzS0Qg-74MdkOXmFNs5FE4w27ys0H_jrVroiesktdrvsiie6Nr7IMwlEGfDO9AGwA=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"2R5W+873, Le Dai Hanh, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/data=!4m7!3m6!1s0x3135ab89e38960b9:0xdd5d3062c06ee2aa!8m2!3d21.0082606!4d105.8456587!16s%2Fg%2F11gd1rxccl!19sChIJuWCJ44mrNTERquJuwGIwXd0?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJa3ZCO1OtNTERYmohkGjzbJQ,Bai de xe can bo,,,1,5,"Name: Nha De Xe Can Bo - Nhan Vien Benh Vien +Link: https://www.google.com/maps/search/Nh%C3%A0+%C4%90%E1%BB%83+Xe+C%C3%A1n+B%E1%BB%99+-+Nh%C3%A2n+Vi%C3%AAn+B%E1%BB%87nh+Vi%E1%BB%87n/@21.0030423,105.8397335?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0149662,105.84152209999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Nha de xe Can bo +Link: https://www.google.com/maps/search/Nh%C3%A0+%C4%91%E1%BB%83+xe+C%C3%A1n+b%E1%BB%99/@21.0079294,105.82428259999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",http://hust.edu.vn/,,1,Bai de xe can bo (Owner),,https://lh3.ggpht.com/p/AB5caB-PRirieH-oiGCBfid4BqdQCszNoLn7e1E8vt7nYYTHC_Wsfd-Txbq5HVoNHsFOSvlM8_ewJI8Y5ufPNeX9Y-CRno18wOPtlMicF4_D669Kn9nfeiWrWiy6fl_JzTk81EhCo5A0qw=s1024,Parking lot for motorcycles,Parking lot for motorcycles,6 AM-6 PM,,Open All Days,"C5, Bach Khoa, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%83+xe+c%C3%A1n+b%E1%BB%99/data=!4m7!3m6!1s0x3135ad533b42766b:0x946cf36890216a62!8m2!3d21.0058781!4d105.8445652!16s%2Fg%2F11j11k4hm2!19sChIJa3ZCO1OtNTERYmohkGjzbJQ?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJbXOEtsCtNTER-HW0XFxXH7g,Bai Dau Xe 24/7,Bai do xe 24/7. Dich vu trong giu xe ngay va dem. Khong gian rong rai thoang dang. Gia ca hop ly.,,2,5,"Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+xe+oto/@20.998038299999997,105.8050507?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/@20.9918493,105.7932795?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",http://zalo.me/bshs0922122123,0978 412 682,,Bai Dau Xe 24/7 (Owner),https://www.google.com/maps/contrib/103489359771778675067,https://lh3.ggpht.com/p/AF1QipMEIJMh16lWtgcOX06BG4bVt7UB7axACAiNO_19=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"1 P. To Huu, Nhan Chinh, Thanh Xuan, Ha Noi 100000",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BA%ADu+Xe+24%2F7/data=!4m7!3m6!1s0x3135adc0b684736d:0xb81f575c5cb475f8!8m2!3d20.9987748!4d105.7964516!16s%2Fg%2F11t825wtvm!19sChIJbXOEtsCtNTER-HW0XFxXH7g?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJMxjdePKrNTERhz2JjPiy-w0,Bai xe Cong ty TNHH Phat trien dich vu Dung Truong,Trong giu xe o to va xe may 24/24h,,0,0,"Name: Bai do xe Truong Chinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Tr%C6%B0%E1%BB%9Dng+Chinh/@21.0018285,105.8229903?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0149662,105.84152209999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe Dung Ngong +Link: https://www.google.com/maps/search/B%C3%A3i+xe+D%C5%A9ng+Ng%E1%BB%8Dng/@20.9684492,105.8788809?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0902 061 975,,Bai xe Cong ty TNHH Phat trien dich vu Dung Truong (Owner),https://www.google.com/maps/contrib/113229938671280041908,https://lh3.ggpht.com/p/AF1QipPorcNWMqpft7xoDLzZPmbMoKKz0VuCDPzbQRzq=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"82 Ng. Trung Tien, Pho, Dong Da, Ha Noi 10000",,https://www.google.com/maps/place/B%C3%A3i+xe+C%C3%B4ng+ty+TNHH+Ph%C3%A1t+tri%E1%BB%83n+d%E1%BB%8Bch+v%E1%BB%A5+D%C5%A9ng+Tr%C6%B0%C6%A1ng/data=!4m7!3m6!1s0x3135abf278dd1833:0xdfbb2f88c893d87!8m2!3d21.0205669!4d105.8386507!16s%2Fg%2F11r4jhfp2k!19sChIJMxjdePKrNTERhz2JjPiy-w0?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJU_GHxO-tNTERElY6SMhdWw4,Bai do xe,,,1,5,"Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.006772599999998,105.86952029999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0357 136 019,,Bai do xe (Owner),https://www.google.com/maps/contrib/108578231754010239428,https://lh3.ggpht.com/p/AB5caB_dvvwmLO2bPb7PEcmZacNHO8lxQTF4hf_CryjOuRrDYkX1FGYa7wQu7NdteeachTtBOPWHMW0Y2-CRqE8D9ZDytzN3dfdKL7e8_4mo_JbiouTIRFJ06Kh2waf65q3qWWZyQRjn=s1024,Parking lot,Parking lot,,,Open All Days,"Ngo 90 P. Yen Lac, Vinh Tuy, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91o+xe/data=!4m7!3m6!1s0x3135adefc487f153:0xe5b5dc8483a5612!8m2!3d21.001345!4d105.864885!16s%2Fg%2F11lrn257xx!19sChIJU_GHxO-tNTERElY6SMhdWw4?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ11qdmiKrNTERI4Q0g-r56rU,Bai do xe,,,0,0,"Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91o+xe/@21.001345,105.86488500000002?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe may +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/@21.0507824,105.8033172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"Ngo 920 D. Bach Dang, Thanh Luong, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe/data=!4m7!3m6!1s0x3135ab229a9d5ad7:0xb5eaf9ea83348423!8m2!3d21.0067726!4d105.8695203!16s%2Fg%2F11fklq40wq!19sChIJ11qdmiKrNTERI4Q0g-r56rU?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJZYTPhYqrNTER1TMNpIlU1iE,Bai Gui Xe,,,2,5,"Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai Gui Xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"Ngo 27 D. Dai Co Viet, Cau Den, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe/data=!4m7!3m6!1s0x3135ab8a85cf8465:0x21d65489a40d33d5!8m2!3d21.008089!4d105.8500022!16s%2Fg%2F11f3dylxlb!19sChIJZYTPhYqrNTER1TMNpIlU1iE?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ2d2KrRirNTER-Hj5W4gt7dE,Bai do xe cong vien Thu Le,,,50,3.8,"Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9867769,105.8198008?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Diem Do Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4/@21.0477423,105.8104151?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe cong vien Thu Le (Owner),,https://lh3.ggpht.com/p/AB5caB-rhnMb-p8jejTKC5YGuwJqnI5tLQRrRsxf35StDD-9xOsy2DmIJ1Zgt-msGJJz_nQWqkx9F74R-FdxX63imtHXUXsqPeuJT83Gkl40hllZEhTw3tvACHdH4uDtleFd9oN9iO6bvA=s1024,Parking lot,Parking lot,,,Open All Days,"2RJ5+QPF, Ngoc Khanh, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+c%C3%B4ng+vi%C3%AAn+Th%E1%BB%A7+L%E1%BB%87/data=!4m7!3m6!1s0x3135ab18ad8addd9:0xd1ed2d885bf978f8!8m2!3d21.0319313!4d105.8093104!16s%2Fg%2F11gr1fh6vc!19sChIJ2d2KrRirNTER-Hj5W4gt7dE?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ587QoHKtNTER1dzE3kglWt0,Bai Xe Chua Boc,,,12,1.8,"Name: Bai De Xe Chua Lang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%83+Xe+Ch%C3%B9a+L%C3%A1ng/@21.0231036,105.80317819999999?authuser=0&hl=en&entry=ttu +Reviews: 10 reviews + +Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,0902 188 080,1,Bai Xe Chua Boc (Owner),,https://lh3.ggpht.com/p/AB5caB931kASzorTNny77G_N1JU6slS-aladKCsmm2O4SXdEWdD0jixSdpuolLhSGu7ZoLRXOB9Z63JJuMLreRXRWWiK71bYZVF_3UKutp-YVnrs0OvZMQ9ev6L7i_3gcdRkdy1E6BnU=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"8 P. Chua Boc, Quang Trung, Dong Da, Ha Noi 11514",,https://www.google.com/maps/place/B%C3%A3i+Xe+Ch%C3%B9a+B%E1%BB%99c/data=!4m7!3m6!1s0x3135ad72a0d0cee7:0xdd5a2548dec4dcd5!8m2!3d21.0073957!4d105.8293817!16s%2Fg%2F11tszzms3v!19sChIJ587QoHKtNTER1dzE3kglWt0?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJIwCfs3GsNTERFqKd_XtomRs,Diem Gui Xe May,,,9,4.7,"Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,0903 043 636,1,Diem Gui Xe May (Owner),,https://lh3.ggpht.com/p/AB5caB-Af95Pce1cFsZXl_bZJyK9eblLao5B8rRW3Qb5dE1vqxYF2ihFqE0t7nk_khEjWuTJu-x-UXPTLHnJC2JYC4mfbOMaUxst-28_VpLiQqd87Hsm7WWdXhUv3zmhjNagt5DrJbfb-w=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"51/2, Ngo 128C Pho Dai La, Quan Hai Ba Trung, Thanh Pho Ha Noi, Dong Tam, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+G%E1%BB%ADi+Xe+M%C3%A1y/data=!4m7!3m6!1s0x3135ac71b39f0023:0x1b99687bfd9da216!8m2!3d20.9984002!4d105.8444061!16s%2Fg%2F11g6rkgsbg!19sChIJIwCfs3GsNTERFqKd_XtomRs?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJC6ZiRxGrNTERb_THkkGd4HQ,Bai gui xe vien Phoi,,,3,4.3,"Name: Bai giu xe Linh Lang - Phan Ke Binh +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+Linh+Lang+-+Phan+K%E1%BA%BF+B%C3%ADnh/@21.034806,105.8103702?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai trong xe Phan ke binh +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+Phan+k%E1%BA%BF+b%C3%ADnh/@21.0343043,105.8122015?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe o to 24/24h +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4+24%2F24h/@21.0312783,105.740607?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0917 138 337,1,Bai gui xe vien Phoi (Owner),,https://lh3.ggpht.com/p/AB5caB9BRmZ0cGFp3Ct1nvhSmbSAWsnVZl3hBf5LNJzyF3NMEDInOlZwwtJaqx4H7F_I9biFPBkUurQWl1farqwBO8KxZhmdR9cq7KDUaTrZVyORE7f312Ulaae5YJX4Q9XIXpOJbo1g=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"25 Ngh. 6/30 P. Doi Nhan, Vinh Phu, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+vi%E1%BB%87n+Ph%E1%BB%95i/data=!4m7!3m6!1s0x3135ab114762a60b:0x74e09d4192c7f46f!8m2!3d21.0414985!4d105.8123838!16s%2Fg%2F11csrpydh3!19sChIJC6ZiRxGrNTERb_THkkGd4HQ?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJXU2YHW6rNTERZwi2pdaUK8A,Bai do xe o to Nguyen Cong Hoan,,,12,4.1,"Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Gara o to tu dong +Link: https://www.google.com/maps/search/Gara+%C3%B4+t%C3%B4+t%E1%BB%B1+%C4%91%E1%BB%99ng/@21.0137418,105.8524695?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe CP taxi Ha Noi +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+CP+taxi+H%C3%A0+N%E1%BB%99i/@21.012037499999998,105.81464059999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,1800 1269,1,Bai do xe o to Nguyen Cong Hoan (Owner),,https://lh3.ggpht.com/p/AB5caB8VJyYCzUuR52_Sxar19ltcbv0newI_Fpa_c7E_TxtpabQDs_PlaY5a4--s75AEPFAGexEsvHTqI8rvZZzEUUi_46psMr_6oB6SLUa4I43lqpXmjzSl07j2ny6Ep5vKYWBWeBO-fA=s1024,Parking garage,Parking garage,Open 24 hours,,Open All Days,"8 P. Nguyen Cong Hoan, Giang Vo, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4+Nguy%E1%BB%85n+C%C3%B4ng+Hoan/data=!4m7!3m6!1s0x3135ab6e1d984d5d:0xc02b94d6a5b60867!8m2!3d21.0272685!4d105.8167297!16s%2Fg%2F11gcf0s17q!19sChIJXU2YHW6rNTERZwi2pdaUK8A?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJSTRV67CrNTERtjzT6s5yylg,EVN parking lot,,,5,3.2,"Name: 156 parking Phuong Liet +Link: https://www.google.com/maps/search/156+parking+Phuong+Liet/@20.9970109,105.8387855?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai do xe 81 Lang Ha +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+81+L%C3%A1ng+H%E1%BA%A1/@21.017794199999997,105.8168796?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai trong xe Phan ke binh +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+Phan+k%E1%BA%BF+b%C3%ADnh/@21.0343043,105.8122015?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe Tap The Thong Tan Xa Viet Nam +Link: https://www.google.com/maps/search/B%C3%A3i+xe+T%E1%BA%ADp+Th%E1%BB%83+Th%C3%B4ng+T%E1%BA%A5n+X%C3%A3+Vi%E1%BB%87t+Nam/@21.0013747,105.8530916?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,EVN parking lot (Owner),,,Parking lot,Parking lot,,,Open All Days,"1 P. Nguyen Khac Nhu, Truc Bach, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/EVN+parking+lot/data=!4m7!3m6!1s0x3135abb0eb553449:0x58ca72ceead33cb6!8m2!3d21.0439337!4d105.8429688!16s%2Fg%2F11cncv2ygg!19sChIJSTRV67CrNTERtjzT6s5yylg?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJAWZhLl2rNTERbXMma7tvB8o,Bai De Xe Chua Lang,,,10,3.7,"Name: Bai Xe Chua Boc +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+Ch%C3%B9a+B%E1%BB%99c/@21.0073957,105.8293817?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai gui xe Truong Man Non Sao Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Tr%C6%B0%E1%BB%9Dng+M%E1%BA%A7n+Non+Sao+Mai/@21.0453212,105.77690919999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Diem Trong Giu Xe Duc Thuan +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C4%90%E1%BB%A9c+Thu%E1%BA%ADn/@21.0334926,105.7878846?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0962 553 966,1,Bai De Xe Chua Lang (Owner),,https://lh3.ggpht.com/p/AB5caB9FXOgbUedqhQZ0LrbGVQPQp7MCAv4lmoUrYEpEquqXYz3Od21rQtYnbuHA9Iapq4VUhh8MSYYUi5NURHdfJIUzSNW-thHEpK0u6ZJZ2DTBO7tc1beFCWYrnHQ0HMwSc3sqABlgUg=s1024,Parking lot,Parking lot,,,Open All Days,"157 P. Chua Lang, Lang Thuong, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%83+Xe+Ch%C3%B9a+L%C3%A1ng/data=!4m7!3m6!1s0x3135ab5d2e616601:0xca076fbb6b26736d!8m2!3d21.0231036!4d105.8031782!16s%2Fg%2F1tqpwqk0!19sChIJAWZhLl2rNTERbXMma7tvB8o?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJAQBAWHesNTER-ksL5H-2nDw,Bai gui xe BV Bach Mai,,,1,5,"Name: Nha De Xe Can Bo - Nhan Vien Benh Vien +Link: https://www.google.com/maps/search/Nh%C3%A0+%C4%90%E1%BB%83+Xe+C%C3%A1n+B%E1%BB%99+-+Nh%C3%A2n+Vi%C3%AAn+B%E1%BB%87nh+Vi%E1%BB%87n/@21.0030423,105.8397335?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai gui xe BV Bach Mai (Owner),,https://lh3.ggpht.com/p/AB5caB9FCqBrvJl4J7VTst4-xl1XAvKBQgt0KGcRgYqeVoY03Ko2JnZUWGx6-tfYSuzset_1mLCFO1E9ekKb1W6p0CuEOZA5ob9e1kD2qYNsLKqpJQ5kj2ukZKJBIO-SkqCC9ZqAt6j9EA=s1024,Parking lot for motorcycles,Parking lot for motorcycles,,,Open All Days,"2R3R+985, Phuong Mai, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+BV+B%E1%BA%A1ch+Mai/data=!4m7!3m6!1s0x3135ac7758400001:0x3c9cb67fe40b4bfa!8m2!3d21.0033904!4d105.840864!16s%2Fg%2F11y4061rt4!19sChIJAQBAWHesNTER-ksL5H-2nDw?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ3523x4OsNTERL9VTB4cJJg8,Bai Gui Xe,,,3,4.3,"Name: Bai do xe Truong Chinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Tr%C6%B0%E1%BB%9Dng+Chinh/@21.0018285,105.8229903?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews + +Name: Bai De Xe Chua Lang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%83+Xe+Ch%C3%B9a+L%C3%A1ng/@21.0231036,105.80317819999999?authuser=0&hl=en&entry=ttu +Reviews: 10 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Dau Xe 24/7 +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BA%ADu+Xe+24%2F7/@20.9987748,105.7964516?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai Gui Xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"21 P. Thai Thinh, Nga Tu So, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe/data=!4m7!3m6!1s0x3135ac83c7b79ddf:0xf2609870753d52f!8m2!3d21.006453!4d105.821833!16s%2Fg%2F11h4143st6!19sChIJ3523x4OsNTERL9VTB4cJJg8?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ35wSMoyrNTERZPcMjRpjk2I,Gui xe Cong vien - Nguyen Dinh Chieu,,,11,3.9,"Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: D6 Thanh Cong +Link: https://www.google.com/maps/search/D6+Th%C3%A0nh+C%C3%B4ng/@21.023622,105.812858?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Gara o to tu dong +Link: https://www.google.com/maps/search/Gara+%C3%B4+t%C3%B4+t%E1%BB%B1+%C4%91%E1%BB%99ng/@21.0137418,105.8524695?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Gui xe Cong vien - Nguyen Dinh Chieu (Owner),,https://lh3.ggpht.com/p/AB5caB-Ptgr_k0ydPwOu8J34KsJntY8dVdRea3lf0v08awaCarf2bJUGHsP_6PPwqBRog5D5UxOwigOeMJb0qUzsZcpCy9KqBFzh8yyiR8Ni5xv_3H9ejvR_4nI0q6tpQQlv1LZSmQF2ZQ=s1024,Parking lot,Parking lot,,,Open All Days,"2R8X+M32, P. Nguyen Dinh Chieu, Le Dai Hanh, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/G%E1%BB%ADi+xe+C%C3%B4ng+vi%C3%AAn+-+Nguy%E1%BB%85n+%C4%90%C3%ACnh+Chi%E1%BB%83u/data=!4m7!3m6!1s0x3135ab8c32129cdf:0x6293631a8d0cf764!8m2!3d21.0166327!4d105.8476317!16s%2Fg%2F12m91k83c!19sChIJ35wSMoyrNTERZPcMjRpjk2I?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJDYr2SIyrNTERX2afF4EsZ64,Gui xe Vien Y Hoc Co Truyen TW,,,6,2.2,"Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Gui xe Vien Y Hoc Co Truyen TW (Owner),,https://lh3.ggpht.com/p/AB5caB9hpDTYUOUR4gR3kOUB6PZ4ZpBaTta95kZwTM1B362umkPWtUJzH9VBU8rdLXiOFLYss-EzDXMTaEoEqSP_fiGvt7hb3BY5ThWwWrQaOCfzJXXUtAfwOA_f6taKN3_AipZCZF8=s1024,Parking lot,Parking lot,12 AM-11:30 PM,,Open All Days,"2R8X+78P, P. Nguyen Binh Khiem, Nguyen Du, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/G%E1%BB%ADi+xe+Vi%E1%BB%87n+Y+H%E1%BB%8Dc+C%E1%BB%95+Truy%E1%BB%81n+TW/data=!4m7!3m6!1s0x3135ab8c48f68a0d:0xae672c81179f665f!8m2!3d21.0157067!4d105.8483306!16s%2Fg%2F12ltpq69l!19sChIJDYr2SIyrNTERX2afF4EsZ64?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJiacXTACrNTEReI4Nn18PFXo,Diem Do xe Tran Nhat Duat,,,2,5,"Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai trong o to mat tien Hoang Quoc Viet +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+%C3%B4+t%C3%B4+m%E1%BA%B7t+ti%E1%BB%81n+Ho%C3%A0ng+Qu%E1%BB%91c+Vi%E1%BB%87t/@21.04647,105.792306?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.006772599999998,105.86952029999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Diem Do xe Tran Nhat Duat (Owner),,,Parking lot,Parking lot,,,Open All Days,"2VP3+M9V, D. Tran Nhat Duat, Pho co Ha Noi, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+xe+Tr%E1%BA%A7n+Nh%E1%BA%ADt+Du%E1%BA%ADt/data=!4m7!3m6!1s0x3135ab004c17a789:0x7a150f5f9f0d8e78!8m2!3d21.0367286!4d105.8534301!16s%2Fg%2F11y684rxcl!19sChIJiacXTACrNTEReI4Nn18PFXo?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJAcZMO1utNTERTLXjcYZ9gEo,Bai xe,,,0,0,"Name: Bai do xe Truong Chinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Tr%C6%B0%E1%BB%9Dng+Chinh/@21.0018285,105.8229903?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews + +Name: Bai do xe 183 HVT +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+183+HVT/@20.9968668,105.82281259999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+xe+oto/@20.998038299999997,105.8050507?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.995428,105.82421219999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"So 29 Ng. 183 P. Hoang Van Thai, Khuong Trung, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe/data=!4m7!3m6!1s0x3135ad5b3b4cc601:0x4a807d8671e3b54c!8m2!3d20.9959461!4d105.8229823!16s%2Fg%2F11hn4x0_6r!19sChIJAcZMO1utNTERTLXjcYZ9gEo?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJe_GtayGrNTERKV9AVKUraSU,Bai trong xe Phan ke binh,,,0,0,"Name: EVN parking lot +Link: https://www.google.com/maps/search/EVN+parking+lot/@21.0439337,105.8429688?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe vien Phoi +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+vi%E1%BB%87n+Ph%E1%BB%95i/@21.041498500000003,105.8123838?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai giu xe Linh Lang - Phan Ke Binh +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+Linh+Lang+-+Phan+K%E1%BA%BF+B%C3%ADnh/@21.034806,105.8103702?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,Bai trong xe Phan ke binh (Owner),,,Parking lot,Parking lot,,,Open All Days,"5 P. Phan Ke Binh, Cong Vi, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+tr%C3%B4ng+xe+Phan+k%E1%BA%BF+b%C3%ADnh/data=!4m7!3m6!1s0x3135ab216badf17b:0x25692ba554405f29!8m2!3d21.0343043!4d105.8122015!16s%2Fg%2F11l1js8p5k!19sChIJe_GtayGrNTERKV9AVKUraSU?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ1fKCCbmrNTERZpw-XDTifHo,Bai do xe may,,,1,1,"Name: Car park Send CV Nghia +Link: https://www.google.com/maps/search/Car+park+Send+CV+Nghia/@21.044840999999998,105.79744409999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.006772599999998,105.86952029999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai trong o to mat tien Hoang Quoc Viet +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+%C3%B4+t%C3%B4+m%E1%BA%B7t+ti%E1%BB%81n+Ho%C3%A0ng+Qu%E1%BB%91c+Vi%E1%BB%87t/@21.04647,105.792306?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe Nguyen Thi Due +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%E1%BB%85n+Th%E1%BB%8B+Du%E1%BB%87/@21.019136,105.79005099999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe may (Owner),,,Parking lot,Parking lot,,,Open All Days,"64 Ng. 45 D. Vo Chi, Nghia Do, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/data=!4m7!3m6!1s0x3135abb90982f2d5:0x7a7ce2345c3e9c66!8m2!3d21.0507824!4d105.8033172!16s%2Fg%2F11thc7wh0k!19sChIJ1fKCCbmrNTERZpw-XDTifHo?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJfQEcn8yrNTERkMZsYBA8Pzo,Bai xe 2 benh vien 108,,,0,0,"Name: Bai gui xe vien Phoi +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+vi%E1%BB%87n+Ph%E1%BB%95i/@21.041498500000003,105.8123838?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Doi Xe Benh Vien 108 +Link: https://www.google.com/maps/search/%C4%90%E1%BB%99i+Xe+B%E1%BB%87nh+Vi%E1%BB%87n+108/@21.0146432,105.862224?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai xe 2 benh vien 108 (Owner),,,Parking lot,Parking lot,,,Open All Days,"5 P. Tran Thanh Tong, Pham Dinh Ho, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+2+b%E1%BB%87nh+vi%E1%BB%87n+108/data=!4m7!3m6!1s0x3135abcc9f1c017d:0x3a3f3c10606cc690!8m2!3d21.0149981!4d105.8597561!16s%2Fg%2F11n0pwtt1_!19sChIJfQEcn8yrNTERkMZsYBA8Pzo?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJLQPRzHqsNTERqYSBBfwF-hY,156 parking Phuong Liet,,,4,2,"Name: Bai do xe Truong Chinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Tr%C6%B0%E1%BB%9Dng+Chinh/@21.0018285,105.8229903?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews + +Name: Bai Dau Xe 24/7 +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BA%ADu+Xe+24%2F7/@20.9987748,105.7964516?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe phong khong Le Trong Tan +Link: https://www.google.com/maps/search/B%C3%A3i+xe+ph%C3%B2ng+kh%C3%B4ng+L%C3%AA+Tr%E1%BB%8Dng+T%E1%BA%A5n/@20.9980789,105.82907259999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe +Link: https://www.google.com/maps/search/B%C3%A3i+xe/@20.995946099999998,105.82298229999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,156 parking Phuong Liet (Owner),,https://lh3.ggpht.com/p/AB5caB_QBf3xvCR5RKfjZmthw-cAeoX6wBDGmN8YzImG6GwJp92HUpgfU4Q4WKqrN2F5L69DEZEuAydct596XxxjOdzhs66A0R3rrXWFzZxRMQKAD7xOPcYFHUNAehEbT09tawH715qNZQ=s1024,Parking lot,Parking lot,,,Open All Days,"86/35 P. Phuong Liet, Phuong Liet, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/156+parking+Phuong+Liet/data=!4m7!3m6!1s0x3135ac7accd1032d:0x16fa05fc058184a9!8m2!3d20.9970109!4d105.8387855!16s%2Fg%2F11g6nj40s2!19sChIJLQPRzHqsNTERqYSBBfwF-hY?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ7_wo3ySrNTERkcn5sZ3Q5lc,Base,,,0,0,"Name: 156 parking Phuong Liet +Link: https://www.google.com/maps/search/156+parking+Phuong+Liet/@20.9970109,105.8387855?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai do xe 81 Lang Ha +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+81+L%C3%A1ng+H%E1%BA%A1/@21.017794199999997,105.8168796?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: NT +Link: https://www.google.com/maps/search/NT/@21.0322241,105.76979809999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.9865449,105.8308979?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe Nguyen Hong +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%C3%AAn+H%E1%BB%93ng/@21.0237612,105.81164129999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Base (Owner),,,Parking lot,Parking lot,,,Open All Days,"104 D. La Thanh, Thanh Cong, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/Base/data=!4m7!3m6!1s0x3135ab24df28fcef:0x57e6d09db1f9c991!8m2!3d21.0237956!4d105.8147214!16s%2Fg%2F11rj3j87vp!19sChIJ7_wo3ySrNTERkcn5sZ3Q5lc?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJK7TH8r-rNTER2LTRQUXzmJk,Bo Ho - Hang Bac,,,10,4.2,"Name: Ga Ha Noi +Link: https://www.google.com/maps/search/Ga+H%C3%A0+N%E1%BB%99i/@21.023770499999998,105.8413511?authuser=0&hl=en&entry=ttu +Reviews: 64 reviews + +Name: 56 Hang Can +Link: https://www.google.com/maps/search/56+H%C3%A0ng+C%C3%A2n/@21.03415,105.84981669999999?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Ha Noi Van phong Xe HK Open Tour Pho Co +Link: https://www.google.com/maps/search/H%C3%A0+N%E1%BB%99i+V%C4%83n+ph%C3%B2ng+Xe+HK+Open+Tour+Ph%E1%BB%91+C%E1%BB%95/@21.0328914,105.8543439?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Ha Noi Tran Quang Khai +Link: https://www.google.com/maps/search/H%C3%A0+N%E1%BB%99i+Tr%E1%BA%A7n+Quang+Kh%E1%BA%A3i/@21.033593500000002,105.8552656?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: So 10 Hoa Lu +Link: https://www.google.com/maps/search/S%E1%BB%91+10+Hoa+L%C6%B0/@21.0095667,105.8476667?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,,Bo Ho - Hang Bac (Owner),,https://lh3.ggpht.com/p/AB5caB-WtYrpL1dEx8WCydsr1NHMmOolRC_C-gET-nzCFbxP7vPiVxTo-RdQ0LcUcnBpNBMj9iVWq28Uo_WAx4splwKyVoy1iFNhNXOxsG1UT-8mTc7OD3U2z-bhSohtfeYEaya5OILu=s1024,Bus stop,Bus stop,,,Open All Days,"Hang Bac, Hoan Kiem, Hanoi",,https://www.google.com/maps/place/B%E1%BB%9D+H%E1%BB%93+-+H%C3%A0ng+B%E1%BA%A1c/data=!4m7!3m6!1s0x3135abbff2c7b42b:0x9998f34541d1b4d8!8m2!3d21.0319889!4d105.85189!16s%2Fg%2F11pq9nm9yf!19sChIJK7TH8r-rNTER2LTRQUXzmJk?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ17mg8-CtNTERzOFrtUoqgBk,Bai xe oto,,,1,3,"Name: Bai Dau Xe 24/7 +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BA%ADu+Xe+24%2F7/@20.9987748,105.7964516?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Gara Trong +Link: https://www.google.com/maps/search/Gara+Tr%E1%BB%8Dng/@20.999530999999998,105.8074389?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe +Link: https://www.google.com/maps/search/B%C3%A3i+xe/@20.995946099999998,105.82298229999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai xe oto (Owner),,,Parking lot,Parking lot,,,Open All Days,"132 Nguyen Huy Tuong, Thanh Xuan Trung, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+oto/data=!4m7!3m6!1s0x3135ade0f3a0b9d7:0x19802a4ab56be1cc!8m2!3d20.9980383!4d105.8050507!16s%2Fg%2F11h5m3r9xj!19sChIJ17mg8-CtNTERzOFrtUoqgBk?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ4cXudLGrNTERpyNd8HwQ3LY,Bai giu xe dinh Kim Lien,,,2,2,"Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai giu xe Linh Lang - Phan Ke Binh +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+Linh+Lang+-+Phan+K%E1%BA%BF+B%C3%ADnh/@21.034806,105.8103702?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe Kim Van +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Kim+V%C4%83n/@20.9754531,105.82180749999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe Kim Giang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Kim+Giang/@20.979834,105.814644?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,0387 580 861,1,Bai giu xe dinh Kim Lien (Owner),,https://lh3.ggpht.com/p/AB5caB-LB2Vl1F4iz6mvqXRTpkFHAXsDxbKhXEwj8hRkus-Dls--MpvozgciKroMM47SWPVLXthYzBFpQsyZ6RDGkyP-5CRaa-iWENi70ApaQlE4qiC_b8Ox546cFeM70ApUM979FAmlkA=s1024,Parking garage,Parking garage,Open 24 hours,,Open All Days,"152 P. Xa Dan, Phuong Lien, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+gi%E1%BB%AF+xe+%C4%91%C3%ACnh+Kim+Li%C3%AAn/data=!4m7!3m6!1s0x3135abb174eec5e1:0xb6dc107cf05d23a7!8m2!3d21.010115!4d105.838317!16s%2Fg%2F11j50f3f7y!19sChIJ4cXudLGrNTERpyNd8HwQ3LY?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJiQ4KCdOrNTERbq7im8yJahk,180 Ba trieu ( diem dung xe 08),,,0,0,"Name: Bus stop +Link: https://www.google.com/maps/search/Bus+stop/@21.0293787,105.803663?authuser=0&hl=en&entry=ttu +Reviews: 81 reviews + +Name: 08, 31, 35, 38 +Link: https://www.google.com/maps/search/08%2C+31%2C+35%2C+38/@21.015871900000004,105.8491006?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: 180 - 182 Ba Trieu +Link: https://www.google.com/maps/search/180+-+182+B%C3%A0+Tri%E1%BB%87u/@21.0159523,105.84914789999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,180 Ba trieu ( diem dung xe 08) (Owner),,,Parking lot,Parking lot,,,Open All Days,"107b P. Ba Trieu, Nguyen Du, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/180+B%C3%A0+tri%E1%BB%87u+%28+%C4%91i%E1%BB%83m+d%E1%BB%ABng+xe+08%29/data=!4m7!3m6!1s0x3135abd3090a0e89:0x196a89cc9be2ae6e!8m2!3d21.016041!4d105.849284!16s%2Fg%2F11pfw73ybl!19sChIJiQ4KCdOrNTERbq7im8yJahk?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJH-nLHwCrNTERNRVWxqcByh4,Thuong tin ha noi,,,3,4.7,"Name: Diem Do xe Tran Nhat Duat +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+xe+Tr%E1%BA%A7n+Nh%E1%BA%ADt+Du%E1%BA%ADt/@21.0367286,105.85343010000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Thuong thanh +Link: https://www.google.com/maps/search/Th%C6%B0%E1%BB%A3ng+thanh/@21.062478,105.88948599999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Nn +Link: https://www.google.com/maps/search/Nn/@21.033067,105.78416899999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai trong xe Phan ke binh +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+Phan+k%E1%BA%BF+b%C3%ADnh/@21.0343043,105.8122015?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Nha do xe cao tang -Tran Nhat Duat +Link: https://www.google.com/maps/search/Nh%C3%A0+%C4%91%E1%BB%97+xe+cao+t%E1%BA%A7ng+-Tr%E1%BA%A7n+Nh%E1%BA%ADt+Du%E1%BA%ADt/@21.0395212,105.8514933?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Thuong tin ha noi (Owner),,https://lh3.ggpht.com/p/AB5caB_9alMaCZQec62ae_7Ohzb0ROjDJSIsL-e89sPqaibbpJeqFZKtcbU0ik3cx_OSX35fJ2OiDcBOs122OCVn1wKKCLb-i-T8SYLISND3w-pSBy6CnKwekJI0aW-buJTBlM2xvm-azw=s1024,Parking lot,Parking lot,,,Open All Days,"2RM4+R2M, Cau Dich Vong, Quan Hoa, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/Th%C6%B0%E1%BB%9Dng+t%C3%ADn+h%C3%A0+n%E1%BB%99i/data=!4m7!3m6!1s0x3135ab001fcbe91f:0x1eca01a7c6561535!8m2!3d21.034584!4d105.8050563!16s%2Fg%2F11vrf4f9rt!19sChIJH-nLHwCrNTERNRVWxqcByh4?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJuQQ8RpyrNTERHs2nR3XgAZs,160 Ton Duc Thang,,,12,4.4,"Name: Doi Dien So 40 Ton Duc Thang (Van Mieu) +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+S%E1%BB%91+40+T%C3%B4n+%C4%90%E1%BB%A9c+Th%E1%BA%AFng+(V%C4%83n+Mi%E1%BA%BFu)/@21.0285719,105.8348951?authuser=0&hl=en&entry=ttu +Reviews: 19 reviews + +Name: 283 Ton Duc Thang +Link: https://www.google.com/maps/search/283+T%C3%B4n+%C4%90%E1%BB%A9c+Th%E1%BA%AFng/@21.019959999999998,105.83072899999999?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: 276 Ton Duc Thang +Link: https://www.google.com/maps/search/276+T%C3%B4n+%C4%90%E1%BB%A9c+Th%E1%BA%AFng/@21.0199894,105.83047549999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Tram Bien Ap Hang Bot 1 - 107 Ton Duc Thang +Link: https://www.google.com/maps/search/Tr%E1%BA%A1m+Bi%E1%BA%BFn+%C3%81p+H%C3%A0ng+B%E1%BB%99t+1+-+107+T%C3%B4n+%C4%90%E1%BB%A9c+Th%E1%BA%AFng/@21.0239367,105.83255319999999?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Diem dung Thon Dong xe buyt 160 +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+d%E1%BB%ABng+Th%C3%B4n+%C4%90%C3%B4ng+xe+bu%C3%BDt+160/@21.130922299999998,105.80057479999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,,160 Ton Duc Thang (Owner),,https://lh3.ggpht.com/p/AB5caB-0QOLKKCHC7FxmQYaU-3NOIkyToPJQuWVS-2Aec9P4CpZbhfddbDDHvWOzlJaULPxB5SvX9LmBqGs11Nx8egS_HX_ksCGRs6yC1SjKJH44BtyuWlqJYbb1NmC-IhJ9AKFnTPWSCQ=s1024,Bus stop,Bus stop,,,Open All Days,"160 P.Ton Duc Thang, Hang Bot, Dong Da, Ha Noi",,https://www.google.com/maps/place/160+T%C3%B4n+%C4%90%E1%BB%A9c+Th%E1%BA%AFng/data=!4m7!3m6!1s0x3135ab9c463c04b9:0x9b01e07547a7cd1e!8m2!3d21.0247935!4d105.8327424!16s%2Fg%2F1w3w0jgv!19sChIJuQQ8RpyrNTERHs2nR3XgAZs?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJf6q5iBitNTERUMYARsQ2AxA,Nha De Xe Can Bo - Nhan Vien Benh Vien,,,10,4,"Name: Bai gui xe HH +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+HH/@20.962063600000004,105.8285465?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0149662,105.84152209999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai de xe can bo +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%83+xe+c%C3%A1n+b%E1%BB%99/@21.0058781,105.84456519999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe BV Bach Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+BV+B%E1%BA%A1ch+Mai/@21.0033904,105.840864?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Nha de xe Can bo +Link: https://www.google.com/maps/search/Nh%C3%A0+%C4%91%E1%BB%83+xe+C%C3%A1n+b%E1%BB%99/@21.0079294,105.82428259999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Nha De Xe Can Bo - Nhan Vien Benh Vien (Owner),,https://lh3.ggpht.com/p/AB5caB-2G-Lp60vxXXJom-SafF7oF8huvYvI3zgjCCDLAma2bkEbz5gRIFlaWOE5MeRDJFrkJaJ40L7lg6s7Zl78_TnMjMOWpPCGS4FP0Aw9AWxrj_tp-YbVqSwLG8FZUEmrYkkV5_Dg=s1024,Parking lot for motorcycles,Parking lot for motorcycles,Open 24 hours,,Open All Days,"2R3Q+6V9, Phuong Mai, Dong Da, Ha Noi",,https://www.google.com/maps/place/Nh%C3%A0+%C4%90%E1%BB%83+Xe+C%C3%A1n+B%E1%BB%99+-+Nh%C3%A2n+Vi%C3%AAn+B%E1%BB%87nh+Vi%E1%BB%87n/data=!4m7!3m6!1s0x3135ad1888b9aa7f:0x100336c44600c650!8m2!3d21.0030423!4d105.8397335!16s%2Fg%2F11h6psyjsb!19sChIJf6q5iBitNTERUMYARsQ2AxA?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJkZy5LJmrNTERV_bl11df0gc,Doi Dien So 40 Ton Duc Thang (Van Mieu),,,19,4.4,"Name: 160 Ton Duc Thang +Link: https://www.google.com/maps/search/160+T%C3%B4n+%C4%90%E1%BB%A9c+Th%E1%BA%AFng/@21.024793499999998,105.8327424?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: 283 Ton Duc Thang +Link: https://www.google.com/maps/search/283+T%C3%B4n+%C4%90%E1%BB%A9c+Th%E1%BA%AFng/@21.019959999999998,105.83072899999999?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Tram Xu Ly Nuoc Sach Kim Lien - Dong Tac +Link: https://www.google.com/maps/search/Tr%E1%BA%A1m+X%E1%BB%AD+L%C3%BD+N%C6%B0%E1%BB%9Bc+S%E1%BA%A1ch+Kim+Li%C3%AAn+-+%C4%90%C3%B4ng+T%C3%A1c/@21.005915899999998,105.83323279999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: 276 Ton Duc Thang +Link: https://www.google.com/maps/search/276+T%C3%B4n+%C4%90%E1%BB%A9c+Th%E1%BA%AFng/@21.0199894,105.83047549999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Tram Bien Ap Hang Bot 1 - 107 Ton Duc Thang +Link: https://www.google.com/maps/search/Tr%E1%BA%A1m+Bi%E1%BA%BFn+%C3%81p+H%C3%A0ng+B%E1%BB%99t+1+-+107+T%C3%B4n+%C4%90%E1%BB%A9c+Th%E1%BA%AFng/@21.0239367,105.83255319999999?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews",http://timbus.vn/,,,Doi Dien So 40 Ton Duc Thang (Van Mieu) (Owner),,https://lh3.ggpht.com/p/AB5caB_EjmiW9E1b6SkNa6aqXXAqf9MWzF93-6wPHXnD6Byt-l8JEf2uCRF4S3YB8m1YMs5PYkEYwuznt9YzMBMLup03awmBrBfO1dmIEiR8jzu88DBvCbgUxAA3o1jb7TCkKVZBT9vC=s1024,Bus stop,Bus stop,,,Open All Days,"Van Mieu, Dong Da, Hanoi",,https://www.google.com/maps/place/%C4%90%E1%BB%91i+Di%E1%BB%87n+S%E1%BB%91+40+T%C3%B4n+%C4%90%E1%BB%A9c+Th%E1%BA%AFng+%28V%C4%83n+Mi%E1%BA%BFu%29/data=!4m7!3m6!1s0x3135ab992cb99c91:0x7d25f57d7e5f657!8m2!3d21.0285719!4d105.8348951!16s%2Fg%2F1wfvk3_d!19sChIJkZy5LJmrNTERV_bl11df0gc?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJtcHe81WrNTERuywKIOonnqA,Bac Co Parking,,,7,3.9,"Name: 117 Tran Duy Hung Parking +Link: https://www.google.com/maps/search/117+Tr%E1%BA%A7n+Duy+H%C6%B0ng+Parking/@21.0079468,105.79729739999999?authuser=0&hl=en&entry=ttu +Reviews: 27 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9867769,105.8198008?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Diem Do xe Tran Nhat Duat +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+xe+Tr%E1%BA%A7n+Nh%E1%BA%ADt+Du%E1%BA%ADt/@21.0367286,105.85343010000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bac Co Parking (Owner),,https://lh3.ggpht.com/p/AB5caB_zDpQVjj1XFDXpSjb0i2sErnfnszAYvkCBMI16L0md1ortxG5mmf8xM0Ucsv2xs1HPwPRSElmFd-Tj1zneAIhMYldint04fhITV6fGxLmBSJRiWCgS0up9pux0JZIiNAxj23OF=s1024,Parking lot,Parking lot,,,Open All Days,"214 D. Tran Khanh Du, Street, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/Bac+Co+Parking/data=!4m7!3m6!1s0x3135ab55f3dec1b5:0xa09e27ea200a2cbb!8m2!3d21.0264429!4d105.8590661!16s%2Fg%2F11gmcdg243!19sChIJtcHe81WrNTERuywKIOonnqA?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJaQ7i3e6rNTERwEmEDi6DZ80,Bai Do Xe Buyt Tran Khanh Du - Phan Chu Trinh,,,22,3.3,"Name: 24, 48, 51 +Link: https://www.google.com/maps/search/24%2C+48%2C+51/@21.018894,105.8620651?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Do Xe Buyt Tran Khanh Du +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+Bu%C3%BDt+Tr%E1%BA%A7n+Kh%C3%A1nh+D%C6%B0/@21.0223804,105.86088749999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Tram Trung Chuyen Xe Buyt Tran Khanh Du (Khu Don Khach) +Link: https://www.google.com/maps/search/Tr%E1%BA%A1m+Trung+Chuy%E1%BB%83n+Xe+Bu%C3%BDt+Tr%E1%BA%A7n+Kh%C3%A1nh+D%C6%B0+(Khu+%C4%90%C3%B3n+Kh%C3%A1ch)/@21.0221958,105.8612182?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: (A) Tran Khanh Du +Link: https://www.google.com/maps/search/(A)+Tr%E1%BA%A7n+Kh%C3%A1nh+D%C6%B0/@21.0233833,105.86056669999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: (B) Tran Khanh Du +Link: https://www.google.com/maps/search/(B)+Tr%E1%BA%A7n+Kh%C3%A1nh+D%C6%B0/@21.023524,105.860805?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Bai Do Xe Buyt Tran Khanh Du - Phan Chu Trinh (Owner),,https://lh3.ggpht.com/p/AB5caB_EbLX0syQ7ed-8pLpOaVDYgUrKWWdh_yeh4xC7DjRFh1n3MxcwBj1NypLyDIy2kkatiuy3mVRPeFfgSvUNDgcjccpJnumNa6UsP7z4IYza4Jzzro2mRmx-INz_wQoy8mwpFnqr=s1024,Bus stop,Bus stop,,,Open All Days,"15C Tran Khanh Du, Phan Chu Trinh, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%97+Xe+Bu%C3%BDt+Tr%E1%BA%A7n+Kh%C3%A1nh+D%C6%B0+-+Phan+Chu+Trinh/data=!4m7!3m6!1s0x3135abeedde20e69:0xcd67832e0e8449c0!8m2!3d21.0234788!4d105.8607234!16s%2Fg%2F1txx_sny!19sChIJaQ7i3e6rNTERwEmEDi6DZ80?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJC32io8GtNTERHbwfoG2knU8,Bai do xe,,,0,0,"Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe may +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/@21.0507824,105.8033172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai rua xe do xe +Link: https://www.google.com/maps/search/B%C3%A3i+r%E1%BB%ADa+xe+%C4%91%E1%BB%97+xe/@20.9834615,105.8704131?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe Nguyen Thi Due +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%E1%BB%85n+Th%E1%BB%8B+Du%E1%BB%87/@21.019136,105.79005099999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"116 P. Nguyen Chanh, Trung Hoa, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe/data=!4m7!3m6!1s0x3135adc1a3a27d0b:0x4f9da46da01fbc1d!8m2!3d21.0116812!4d105.7935883!16s%2Fg%2F11r4k4t8kc!19sChIJC32io8GtNTERHbwfoG2knU8?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJGa6aDZirNTERbDOBlQAKIVA,Cong Vien Le Nin - Doi Dien 35 Tran Phu,,,37,4.3,"Name: Doi Dien Benh Vien Xanh Pon - 60 Tran Phu (Bo Tu Phap) +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+B%E1%BB%87nh+Vi%E1%BB%87n+Xanh+P%C3%B4n+-+60+Tr%E1%BA%A7n+Ph%C3%BA+(B%E1%BB%99+T%C6%B0+Ph%C3%A1p)/@21.031740199999998,105.83589169999999?authuser=0&hl=en&entry=ttu +Reviews: 25 reviews + +Name: 254-256 Le Duan +Link: https://www.google.com/maps/search/254-256+L%C3%AA+Du%E1%BA%A9n/@21.0156946,105.8413029?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews + +Name: 32 Minh Khai +Link: https://www.google.com/maps/search/32+Minh+Khai/@20.995677699999998,105.8506599?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: 22 Lieu Giai +Link: https://www.google.com/maps/search/22+Li%E1%BB%85u+Giai/@21.035899399999998,105.81443349999999?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Thu Vien Ha Noi - 54E Tran Hung Dao +Link: https://www.google.com/maps/search/Th%C6%B0+Vi%E1%BB%87n+H%C3%A0+N%E1%BB%99i+-+54E+Tr%E1%BA%A7n+H%C6%B0ng+%C4%90%E1%BA%A1o/@21.021476999999997,105.85077299999999?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews",,,,Cong Vien Le Nin - Doi Dien 35 Tran Phu (Owner),,https://lh3.ggpht.com/p/AB5caB81eg_uy4B3ZujmFggvl3SROqb_C9Dj-WvaznTzBkM7sZfuhOgQ-61MtBkKp0pEf4DWmp9LefrTiD7fEHVBh2o9EmosOu-kb6WiuSJqGKuBzFZHGw4jeGz-1Hw2qjPQ9XPJH9Xi=s1024,Bus stop,Bus stop,,,Open All Days,"35 P. Tran Phu, Dien Bien, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/C%C3%B4ng+Vi%C3%AAn+L%C3%AA+Nin+-+%C4%90%E1%BB%91i+Di%E1%BB%87n+35+Tr%E1%BA%A7n+Ph%C3%BA/data=!4m7!3m6!1s0x3135ab980d9aae19:0x50210a009581336c!8m2!3d21.0310547!4d105.8393507!16s%2Fg%2F1v3kkjwp!19sChIJGa6aDZirNTERbDOBlQAKIVA?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJrwU5-56rNTERCecYnwnKphs,Ga Ha Noi,,,3390,4.3,"Name: Hanoi Railway Station +Link: https://www.google.com/maps/search/Hanoi+Railway+Station/@21.0242529,105.84102899999999?authuser=0&hl=en&entry=ttu +Reviews: 1330 reviews + +Name: Thai Ha Station +Link: https://www.google.com/maps/search/Thai+Ha+Station/@21.0144833,105.8194491?authuser=0&hl=en&entry=ttu +Reviews: 264 reviews + +Name: Ga Ha Noi +Link: https://www.google.com/maps/search/Ga+H%C3%A0+N%E1%BB%99i/@21.0250615,105.8411814?authuser=0&hl=en&entry=ttu +Reviews: 177 reviews + +Name: Ga Ha Noi - 120 Le Duan +Link: https://www.google.com/maps/search/Ga+H%C3%A0+N%E1%BB%99i+-+120+L%C3%AA+Du%E1%BA%A9n/@21.023294999999997,105.84137799999999?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Arret Bus pour Sapa +Link: https://www.google.com/maps/search/Arr%C3%AAt+Bus+pour+Sapa/@21.0243033,105.841093?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,,Ga Ha Noi (Owner),https://www.google.com/maps/contrib/105655510386027356630,https://lh3.ggpht.com/p/AB5caB8ssXBm_1WPnxz5YmK3FuDM2tuosS1pmv5w3eMTka7St8PTz9wpJt6bcMTfRPiV9izmYwh1dZKyVC1lCZVhAAEUdNb_BKfFdAHpBPyrh5eNZf1wXsiqeTUIzKLxWNNJR4eQnVs=s1024,Train yard,Train yard,6:36 AM-8:02 PM,,Open All Days,"120 D. Le Duan, Van Mieu, Hoan Kiem, Ha Noi","experience, luggage, tickets, toilet, snacks, morning, sleeper, locker, capital, tourist",https://www.google.com/maps/place/Ga+H%C3%A0+N%E1%BB%99i/data=!4m7!3m6!1s0x3135ab9efb3905af:0x1ba6ca099f18e709!8m2!3d21.0243303!4d105.8410933!16s%2Fg%2F11h23l0q7j!19sChIJrwU5-56rNTERCecYnwnKphs?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJpSN5lXWrNTERx0is2bD1GEs,(B) Hao Nam - Cat Linh,,,4,4.3,"Name: Ga Ha Noi +Link: https://www.google.com/maps/search/Ga+H%C3%A0+N%E1%BB%99i/@21.023770499999998,105.8413511?authuser=0&hl=en&entry=ttu +Reviews: 64 reviews + +Name: 34-36 Tang Bat Ho +Link: https://www.google.com/maps/search/34-36+T%C4%83ng+B%E1%BA%A1t+H%E1%BB%95/@21.0164197,105.8584544?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: 188 Hao Nam +Link: https://www.google.com/maps/search/188+H%C3%A0o+Nam/@21.0277112,105.8276768?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Doi Dien 116 Hao Nam +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+116+H%C3%A0o+Nam/@21.027050000000003,105.8275667?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: (A) Hao Nam - Cat Linh +Link: https://www.google.com/maps/search/(A)+H%C3%A0o+Nam+-+C%C3%A1t+Linh/@21.0282698,105.82744559999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,,(B) Hao Nam - Cat Linh (Owner),,https://lh3.ggpht.com/p/AB5caB-lGo9nQyL_jDezUjLN1gPKdGcUfWHg4T9N7SD6-5WNjqsMGL1BhRhpQQidChc0bRb5PW0UQx2lAQhqENaxPrSVho8p5zYx-I6cn-Mbzt4B868aPRn3xVIGCE7_xFD6YVSXiurrGA=s1024,Bus stop,Bus stop,,,Open All Days,"Cat Linh, Dong Da, Hanoi",,https://www.google.com/maps/place/%28B%29+H%C3%A0o+Nam+-+C%C3%A1t+Linh/data=!4m7!3m6!1s0x3135ab75957923a5:0x4b18f5b0d9ac48c7!8m2!3d21.0282062!4d105.8274543!16s%2Fg%2F11n86s0lvs!19sChIJpSN5lXWrNTERx0is2bD1GEs?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ81hs7pirNTERZg4IJtT3CVU,Sapa Train,,,136,4.5,"Name: Hanoi Train Street +Link: https://www.google.com/maps/search/Hanoi+Train+Street/@21.030107899999997,105.844027?authuser=0&hl=en&entry=ttu +Reviews: 12125 reviews + +Name: Hanoi Railway Station +Link: https://www.google.com/maps/search/Hanoi+Railway+Station/@21.0242529,105.84102899999999?authuser=0&hl=en&entry=ttu +Reviews: 1330 reviews + +Name: Ga Ha Noi +Link: https://www.google.com/maps/search/Ga+H%C3%A0+N%E1%BB%99i/@21.0250615,105.8411814?authuser=0&hl=en&entry=ttu +Reviews: 177 reviews + +Name: Family Express Train +Link: https://www.google.com/maps/search/Family+Express+Train/@21.0251813,105.8399139?authuser=0&hl=en&entry=ttu +Reviews: 125 reviews + +Name: Vietnam Railway Corp. +Link: https://www.google.com/maps/search/Vietnam+Railway+Corp./@21.024293999999998,105.841447?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews",,,,Sapa Train (Owner),,https://lh3.ggpht.com/p/AB5caB9EgfHa5ZmM1ob6rpLCFFVQsDRbiynhoHmcQLfKop7walMeF_UWznCaUHkE7w8nEI7lSTBWxwuC2_zCmCgIbSb4NmzqH8uVmnoone8TE_a5sUYHWNDhn-iZrbgjIQiyItYsAuN_RA=s1024,Train station,Train station,,,Open All Days,"2 P. Van Mieu, Van Mieu, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/Sapa+Train/data=!4m7!3m6!1s0x3135ab98ee6c58f3:0x5509f7d426080e66!8m2!3d21.0274!4d105.8352!16s%2Fg%2F1tdx65fq!19sChIJ81hs7pirNTERZg4IJtT3CVU?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJs2cbvnCrNTERP-NlAlMv-F0,339-341 De La Thanh (Doi Dien DH Van Hoa),,,17,3.8,"Name: 1080 D. La Thanh - Lang Thuong +Link: https://www.google.com/maps/search/1080+%C4%90.+La+Th%C3%A0nh+-+L%C3%A1ng+Th%C6%B0%E1%BB%A3ng/@21.0273544,105.8094284?authuser=0&hl=en&entry=ttu +Reviews: 20 reviews + +Name: 28 Duong Thanh +Link: https://www.google.com/maps/search/28+%C4%90%C6%B0%E1%BB%9Dng+Th%C3%A0nh/@21.0310371,105.84707360000002?authuser=0&hl=en&entry=ttu +Reviews: 10 reviews + +Name: Doi Dien 41 Vu Tong Phan +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+41+V%C5%A9+T%C3%B4ng+Phan/@20.9987243,105.8177008?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Doi Dien 702 De La Thanh +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+702+%C4%90%C3%AA+La+Th%C3%A0nh/@21.0238631,105.8161099?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: 426 De La Thanh (Dai Hoc Van Hoa) +Link: https://www.google.com/maps/search/426+%C4%90%C3%AA+La+Th%C3%A0nh+(%C4%90%E1%BA%A1i+H%E1%BB%8Dc+V%C4%83n+H%C3%B3a)/@21.022878,105.822105?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,339-341 De La Thanh (Doi Dien DH Van Hoa) (Owner),,https://lh3.ggpht.com/p/AB5caB9v2zaL1g-h5h8d4vgXZE1iZT2I1EW9SF4WcFBQv0-fmL9zcuWAeDdXx97N8swkOWJu5vIQFm_UWntuIVoP1YJaCF3fKBaSteRIctJtxAJ1H0GIq-0Z06rYCZl0nPYp2JkwX8J4yA=s1024,Bus stop,Bus stop,,,Open All Days,"339 D. De La Thanh, Cho Dua, Dong Da, Ha Noi",,https://www.google.com/maps/place/339-341+%C4%90%C3%AA+La+Th%C3%A0nh+%28%C4%90%E1%BB%91i+Di%E1%BB%87n+%C4%90H+V%C4%83n+H%C3%B3a%29/data=!4m7!3m6!1s0x3135ab70be1b67b3:0x5df82f530265e33f!8m2!3d21.0229073!4d105.8216573!16s%2Fg%2F1th0vv6v!19sChIJs2cbvnCrNTERP-NlAlMv-F0?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ2ShJXWCsNTERoaQKC6BGWjE,Bai gui xe so 1,,,12,4.2,"Name: Bai Do Xe So 2 Dinh Cong +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+S%E1%BB%91+2+%C4%90%E1%BB%8Bnh+C%C3%B4ng/@20.986452,105.82737949999999?authuser=0&hl=en&entry=ttu +Reviews: 17 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9867769,105.8198008?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4/@20.9826099,105.8278894?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.9865449,105.8308979?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai gui xe so 1 (Owner),,https://lh3.ggpht.com/p/AB5caB-CBBn8hqD0qOuiue3bNRIRhhoExcWbXya6Zk6Wy2zB4cgmNunttC_Q0VIptfI-q1wVBql1Jqm7jsUwlU7SxUxggMdi5mngSMGGAzyd2Xs5vy2yC3DDyzwZA1j1DJATgORb4FCT=s1024,Parking lot,Parking lot,,,Open All Days,"XRQJ+2HQ, Dinh Cong, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+s%E1%BB%91+1/data=!4m7!3m6!1s0x3135ac605d4928d9:0x315a46a00b0aa4a1!8m2!3d20.9875846!4d105.8314704!16s%2Fg%2F11c4ww3cx1!19sChIJ2ShJXWCsNTERoaQKC6BGWjE?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJvWuDs6GrNTERudLxPi9RTOI,91-93 Le Hong Phong,,,24,4.3,"Name: Dau Pho Le Hong Phong +Link: https://www.google.com/maps/search/%C4%90%E1%BA%A7u+Ph%E1%BB%91+L%C3%AA+H%E1%BB%93ng+Phong/@21.032297999999997,105.8341251?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: 18A Le Hong Phong - Nga 4 Le Hong Phong Ong Ich Khiem +Link: https://www.google.com/maps/search/18A+L%C3%AA+H%E1%BB%93ng+Phong+-+Ng%C3%A3+4+L%C3%AA+H%E1%BB%93ng+Phong+%C3%94ng+%C3%8Dch+Khi%C3%AAm/@21.0342265,105.8339677?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: 220 Duong Lang - Truong Dang Le Hong Phong +Link: https://www.google.com/maps/search/220+%C4%90%C6%B0%E1%BB%9Dng+L%C3%A1ng+-+Tr%C6%B0%E1%BB%9Dng+%C4%90%E1%BA%A3ng+L%C3%AA+H%E1%BB%93ng+Phong/@21.0059121,105.8167103?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Truoc 30M Doi Dien Ngo 5 Le Hong Phong (Ha Dong) +Link: https://www.google.com/maps/search/Tr%C6%B0%E1%BB%9Bc+30M+%C4%90%E1%BB%91i+Di%E1%BB%87n+Ng%C3%B5+5+L%C3%AA+H%E1%BB%93ng+Phong+(H%C3%A0+%C4%90%C3%B4ng)/@20.9654667,105.7730333?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Ha Noi Van phong xe Hai Phong Travel +Link: https://www.google.com/maps/search/H%C3%A0+N%E1%BB%99i+V%C4%83n+ph%C3%B2ng+xe+H%E1%BA%A3i+Ph%C3%B2ng+Travel/@21.0200405,105.9110991?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,91-93 Le Hong Phong (Owner),,https://lh3.ggpht.com/p/AB5caB9sZSIuXq6jAh6At3GF0bK5m1ybK5dQ82MuHs15fRFlHMzz2TbOth3cciOcs6ItZtvJzObLtfkceYrA2bcmkEZTpn_8kb4YzyhbpqBJMc3rEd6Et5NFrgsFaBXZ2XIM0Gezr9k=s1024,Bus stop,Bus stop,,,Open All Days,"Dien Bien, Ba Dinh, Hanoi",,https://www.google.com/maps/place/91-93+L%C3%AA+H%E1%BB%93ng+Phong/data=!4m7!3m6!1s0x3135aba1b3836bbd:0xe24c512f3ef1d2b9!8m2!3d21.0343167!4d105.8321!16s%2Fg%2F1tkv77df!19sChIJvWuDs6GrNTERudLxPi9RTOI?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ50GmdZarNTER4Yn7NDXy-X0,Benh Vien Viet Duc - Doi Dien So 10 Quan Su,,,0,0,"Name: Benh Vien Viet Duc - 40 Trang Thi +Link: https://www.google.com/maps/search/B%E1%BB%87nh+Vi%E1%BB%87n+Vi%E1%BB%87t+%C4%90%E1%BB%A9c+-+40+Tr%C3%A0ng+Thi/@21.027419300000002,105.84661009999999?authuser=0&hl=en&entry=ttu +Reviews: 33 reviews + +Name: Benh Vien Huu Nghi Viet Xo - 1 Tran Khanh Du +Link: https://www.google.com/maps/search/B%E1%BB%87nh+Vi%E1%BB%87n+H%E1%BB%AFu+Ngh%E1%BB%8B+Vi%E1%BB%87t+X%C3%B4+-+1+Tr%E1%BA%A7n+Kh%C3%A1nh+D%C6%B0/@21.015412899999998,105.8624678?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: 65 Quan Su (Doi Dien 80 Quan Su) +Link: https://www.google.com/maps/search/65+Qu%C3%A1n+S%E1%BB%A9+(%C4%90%E1%BB%91i+Di%E1%BB%87n+80+Qu%C3%A1n+S%E1%BB%A9)/@21.0238491,105.84486439999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: 37 Hai Ba Trung - Benh Vien Viet Nam Cu Ba +Link: https://www.google.com/maps/search/37+Hai+B%C3%A0+Tr%C6%B0ng+-+B%E1%BB%87nh+Vi%E1%BB%87n+Vi%E1%BB%87t+Nam+Cu+Ba/@21.024932399999997,105.8501146?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Qua Doi Dien Cong Benh Vien Da Khoa Duc Giang 10M Truong Lam +Link: https://www.google.com/maps/search/Qua+%C4%90%E1%BB%91i+Di%E1%BB%87n+C%E1%BB%95ng+B%E1%BB%87nh+Vi%E1%BB%87n+%C4%90a+Khoa+%C4%90%E1%BB%A9c+Giang+10M+Tr%C6%B0%E1%BB%9Dng+L%C3%A2m/@21.062315800000004,105.89793759999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Benh Vien Viet Duc - Doi Dien So 10 Quan Su (Owner),,https://lh3.ggpht.com/p/AB5caB_AOVPqM2ur2ZlcCW3cjCFNLRvAW5aT7IYWkOS8PnZlKN6FPaq0EHopgFVQ39KjZY9vje-O1UfwgbWPjSKjjMQFwPilu2UiVn6EgrudUIAGpU8KludJd_sIgsgvKzcJCNMVm0SN=s1024,Bus stop,Bus stop,,,Open All Days,"Hang Bong, Hoan Kiem, Hanoi",,https://www.google.com/maps/place/B%E1%BB%87nh+Vi%E1%BB%87n+Vi%E1%BB%87t+%C4%90%E1%BB%A9c+-+%C4%90%E1%BB%91i+Di%E1%BB%87n+S%E1%BB%91+10+Qu%C3%A1n+S%E1%BB%A9/data=!4m7!3m6!1s0x3135ab9675a641e7:0x7df9f23534fb89e1!8m2!3d21.029367!4d105.846513!16s%2Fg%2F11r7vzhh_y!19sChIJ50GmdZarNTER4Yn7NDXy-X0?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJHfci9fCrNTER5BafhH8_ICo,Doi Xe Benh Vien 108,,,2,3.5,"Name: 24, 48, 51 +Link: https://www.google.com/maps/search/24%2C+48%2C+51/@21.018894,105.8620651?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Cong Benh Vien Quan Y 108 - Doi Dien 2E Tran Hung Dao +Link: https://www.google.com/maps/search/C%E1%BB%95ng+B%E1%BB%87nh+Vi%E1%BB%87n+Qu%C3%A2n+Y+108+-+%C4%90%E1%BB%91i+Di%E1%BB%87n+2E+Tr%E1%BA%A7n+H%C6%B0ng+%C4%90%E1%BA%A1o/@21.0183791,105.8607084?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Doi Dien Benh Vien Trung Uong Quan Doi 108 - Tran Hung Dao +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+B%E1%BB%87nh+Vi%E1%BB%87n+Trung+%C6%AF%C6%A1ng+Qu%C3%A2n+%C4%90%E1%BB%99i+108+-+Tr%E1%BA%A7n+H%C6%B0ng+%C4%90%E1%BA%A1o/@21.0185825,105.86056669999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Tap the Benh vien 108 +Link: https://www.google.com/maps/search/T%E1%BA%ADp+th%E1%BB%83+B%E1%BB%87nh+vi%E1%BB%87n+108/@21.0185752,105.8592185?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe 2 benh vien 108 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+2+b%E1%BB%87nh+vi%E1%BB%87n+108/@21.0149981,105.8597561?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Doi Xe Benh Vien 108 (Owner),,https://lh3.ggpht.com/p/AB5caB8ycoZlGtMzMnSCSltKT96RsCWa78pcxywBHPqEP_NMiZEp4XASZfbaKBjsnXTJQQt2LIDgGwarfpsqzzzBj8j-MnlPoXuScmCL_YkEUzSdJx2yx_f8wa9G-kXZPvYMeF8tHAei=s1024,Parking lot,Parking lot,,,Open All Days,"39 D. Tran Khanh Du, Bach Dang, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/%C4%90%E1%BB%99i+Xe+B%E1%BB%87nh+Vi%E1%BB%87n+108/data=!4m7!3m6!1s0x3135abf0f522f71d:0x2a203f7f849f16e4!8m2!3d21.0146432!4d105.862224!16s%2Fg%2F11b67lzv6m!19sChIJHfci9fCrNTER5BafhH8_ICo?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJtSUypJCrNTERjMFunmJz4wk,Ga Ha Noi,,,64,3.9,"Name: 86beon(gonghangbeoseu) jeongryujang +Link: https://www.google.com/maps/search/86%EB%B2%88(%EA%B3%B5%ED%95%AD%EB%B2%84%EC%8A%A4)+%EC%A0%95%EB%A5%98%EC%9E%A5/@21.0235383,105.8413144?authuser=0&hl=en&entry=ttu +Reviews: 11 reviews + +Name: Ostanovka Avtobusa 86 V Aeroport +Link: https://www.google.com/maps/search/%D0%9E%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0+%D0%90%D0%B2%D1%82%D0%BE%D0%B1%D1%83%D1%81%D0%B0+86+%D0%92+%D0%90%D1%8D%D1%80%D0%BE%D0%BF%D0%BE%D1%80%D1%82/@21.0323305,105.85544569999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Qua Ngo 86 Duy Tan 30M +Link: https://www.google.com/maps/search/Qua+Ng%C3%B5+86+Duy+T%C3%A2n+30M/@21.0313333,105.7816?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bus Stop 86 +Link: https://www.google.com/maps/search/Bus+Stop+86/@21.2169162,105.79303979999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: 86 Quan Thanh - Bo Chi Huy Quan Su Quan Ba Dinh +Link: https://www.google.com/maps/search/86+Qu%C3%A1n+Th%C3%A1nh+-+B%E1%BB%99+Ch%E1%BB%89+Huy+Qu%C3%A2n+S%E1%BB%B1+Qu%E1%BA%ADn+Ba+%C4%90%C3%ACnh/@21.04175,105.84421669999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Ga Ha Noi (Owner),,https://lh3.ggpht.com/p/AB5caB9xOzSPusgOSghtPGI72UCM4luvoqJgt1q9JdMPOEuRGNc5f9MSGBVJORtd8Q4pKCgkdJoKT_dRkHzIHEOUaDsN-EZ_0-NoXZ6JVyPaJNHqpCMWNNs-r0ygvgVd9lijy1zhZw=s1024,Bus stop,Bus stop,,,Open All Days,"Cua Nam, Hoan Kiem, Hanoi","noi bai international airport, station, time of day, website, wifi, price",https://www.google.com/maps/place/Ga+H%C3%A0+N%E1%BB%99i/data=!4m7!3m6!1s0x3135ab90a43225b5:0x9e373629e6ec18c!8m2!3d21.0237705!4d105.8413511!16s%2Fg%2F11g6ts727q!19sChIJtSUypJCrNTERjMFunmJz4wk?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJcYUrXcKtNTERoySFi_oB2eQ,15A Phuong Mai,,,6,4.2,"Name: Cua hang xe +Link: https://www.google.com/maps/search/C%E1%BB%ADa+h%C3%A0ng+xe/@20.9833592,105.8568603?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai giu xe dinh Kim Lien +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+%C4%91%C3%ACnh+Kim+Li%C3%AAn/@21.010115,105.83831699999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe BV Bach Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+BV+B%E1%BA%A1ch+Mai/@21.0033904,105.840864?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Gara Tai Da Nang +Link: https://www.google.com/maps/search/Gara+T%C3%A0i+%C4%90%C3%A0+N%E1%BA%B5ng/@20.960684399999998,105.8412022?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,15A Phuong Mai (Owner),,https://lh3.ggpht.com/p/AB5caB-k-aW6MhffDFIxY5TRG1PQ0hceWG0Vb12naeXnzQ9ixmBFuO0LveF0GGf_uH98xJ2IJ12J70C2ZMhw_6iJOrr3mWuGYfv3B22rQWmtK2IBuKm5aN7tD09N4U6jzSRYYt9UJxz0sXOgR2Se=s1024,Parking garage,Parking garage,,,Open All Days,"15A Phuong Mai, Dong Da, Ha Noi 100000",,https://www.google.com/maps/place/15A+Ph%C6%B0%C6%A1ng+Mai/data=!4m7!3m6!1s0x3135adc25d2b8571:0xe4d901fa8b8524a3!8m2!3d21.0038019!4d105.8386591!16s%2Fg%2F11mvqn104r!19sChIJcYUrXcKtNTERoySFi_oB2eQ?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ_auIf5KrNTER6lFeNM-FCRc,92-94 Ba Trieu,,,12,3.4,"Name: Ga Ha Noi +Link: https://www.google.com/maps/search/Ga+H%C3%A0+N%E1%BB%99i/@21.023770499999998,105.8413511?authuser=0&hl=en&entry=ttu +Reviews: 64 reviews + +Name: 90 Ngo Thi Nham +Link: https://www.google.com/maps/search/90+Ng%C3%B4+Th%C3%AC+Nh%E1%BA%ADm/@21.014334500000004,105.8533226?authuser=0&hl=en&entry=ttu +Reviews: 22 reviews + +Name: 58B Ba Trieu +Link: https://www.google.com/maps/search/58B+B%C3%A0+Tri%E1%BB%87u/@21.0220545,105.8503593?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Doi Dien 16 Hai Ba Trung (Nga 4 Hai Ba Trung- Ngo Quyen) +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+16+Hai+B%C3%A0+Tr%C6%B0ng+(Ng%C3%A3+4+Hai+B%C3%A0+Tr%C6%B0ng-+Ng%C3%B4+Quy%E1%BB%81n)/@21.023816699999998,105.85406669999999?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: 180 - 182 Ba Trieu +Link: https://www.google.com/maps/search/180+-+182+B%C3%A0+Tri%E1%BB%87u/@21.0159523,105.84914789999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,92-94 Ba Trieu (Owner),,https://lh3.ggpht.com/p/AB5caB_1GyAiDQAr8hXWatLDmHynvOfH-TUp9ouacwZEGuKf-9AB0MU2piAiGEeS5rECORMyXseqWKljy--n11aJZRf-Gjawi94J2NTfMhwPNGwjGlO-4pfXnLJa53_2tYKEJ6SP6M8n=s1024,Bus stop,Bus stop,,,Open All Days,"Tran Hung Dao, Hoan Kiem, Hanoi",,https://www.google.com/maps/place/92-94+B%C3%A0+Tri%E1%BB%87u/data=!4m7!3m6!1s0x3135ab927f88abfd:0x170985cf345e51ea!8m2!3d21.0192062!4d105.8493922!16s%2Fg%2F1tfrjtky!19sChIJ_auIf5KrNTER6lFeNM-FCRc?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ4zSkO5erNTERC_bh_I8U9zE,Cong Ty Co Phan Thuong Mai Va Dich Vu Jetfly,,,0,0,"Name: Cong Ty Co Phan JETPAY +Link: https://www.google.com/maps/search/C%C3%B4ng+Ty+C%E1%BB%95+Ph%E1%BA%A7n+JETPAY/@21.0308982,105.78330559999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Cong Ty Tnhh Du Lich Va Dau Tu Thuong Mai Fly Y +Link: https://www.google.com/maps/search/C%C3%B4ng+Ty+Tnhh+Du+L%E1%BB%8Bch+V%C3%A0+%C4%90%E1%BA%A7u+T%C6%B0+Th%C6%B0%C6%A1ng+M%E1%BA%A1i+Fly+Y/@21.037454999999998,105.807056?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Cong Ty Co Phan Thuong Mai Va Dich Vu Wefly +Link: https://www.google.com/maps/search/C%C3%B4ng+Ty+C%E1%BB%95+Ph%E1%BA%A7n+Th%C6%B0%C6%A1ng+M%E1%BA%A1i+V%C3%A0+D%E1%BB%8Bch+V%E1%BB%A5+Wefly/@20.9480532,105.81073479999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Airport Car +Link: https://www.google.com/maps/search/Airport+Car/@21.0324976,105.84739689999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,024 6290 8835,1,Cong Ty Co Phan Thuong Mai Va Dich Vu Jetfly (Owner),,,Parking lot,Parking lot,,,Open All Days,"15 P. Nam Ngu, Cua Nam, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/C%C3%B4ng+Ty+C%E1%BB%95+Ph%E1%BA%A7n+Th%C6%B0%C6%A1ng+M%E1%BA%A1i+V%C3%A0+D%E1%BB%8Bch+V%E1%BB%A5+Jetfly/data=!4m7!3m6!1s0x3135ab973ba434e3:0x31f7148ffce1f60b!8m2!3d21.0265377!4d105.8427626!16s%2Fg%2F11dxf11cyr!19sChIJ4zSkO5erNTERC_bh_I8U9zE?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ_4CeppirNTEROxyDBqC4ZHw,Doi Dien Benh Vien Xanh Pon - 60 Tran Phu (Bo Tu Phap),,,25,4.7,"Name: Benh Vien Xanhpon +Link: https://www.google.com/maps/search/B%E1%BB%87nh+Vi%E1%BB%87n+Xanhpon/@21.031039399999997,105.83608179999999?authuser=0&hl=en&entry=ttu +Reviews: 65 reviews + +Name: Cong Vien Le Nin - Doi Dien 35 Tran Phu +Link: https://www.google.com/maps/search/C%C3%B4ng+Vi%C3%AAn+L%C3%AA+Nin+-+%C4%90%E1%BB%91i+Di%E1%BB%87n+35+Tr%E1%BA%A7n+Ph%C3%BA/@21.0310547,105.8393507?authuser=0&hl=en&entry=ttu +Reviews: 37 reviews + +Name: 12A Dien Bien Phu +Link: https://www.google.com/maps/search/12A+%C4%90i%E1%BB%87n+Bi%C3%AAn+Ph%E1%BB%A7/@21.029453099999998,105.8423691?authuser=0&hl=en&entry=ttu +Reviews: 10 reviews + +Name: 22 Lieu Giai +Link: https://www.google.com/maps/search/22+Li%E1%BB%85u+Giai/@21.035899399999998,105.81443349999999?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Benh Vien Viet Duc - Doi Dien So 10 Quan Su +Link: https://www.google.com/maps/search/B%E1%BB%87nh+Vi%E1%BB%87n+Vi%E1%BB%87t+%C4%90%E1%BB%A9c+-+%C4%90%E1%BB%91i+Di%E1%BB%87n+S%E1%BB%91+10+Qu%C3%A1n+S%E1%BB%A9/@21.029367000000004,105.84651300000002?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Doi Dien Benh Vien Xanh Pon - 60 Tran Phu (Bo Tu Phap) (Owner),,https://lh3.ggpht.com/p/AB5caB_0tZk6xUadq-QtKof0204t234aoVQptWiKx76B0z_8GGjN-pJp69WbIis3VLh0QlIFmaxKAG96VPjbEF3kY4Y1OZ8GtV_XCMH2PskO1faCZv20Fwb1p0vxsrc-NI_c0WczB-wO=s1024,Bus stop,Bus stop,,,Open All Days,"So, 60 P. Tran Phu, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/%C4%90%E1%BB%91i+Di%E1%BB%87n+B%E1%BB%87nh+Vi%E1%BB%87n+Xanh+P%C3%B4n+-+60+Tr%E1%BA%A7n+Ph%C3%BA+%28B%E1%BB%99+T%C6%B0+Ph%C3%A1p%29/data=!4m7!3m6!1s0x3135ab98a69e80ff:0x7c64b8a006831c3b!8m2!3d21.0317402!4d105.8358917!16s%2Fg%2F1tg6h0b3!19sChIJ_4CeppirNTEROxyDBqC4ZHw?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJL3PrclurNTER-Udb1_JLQHo,Bai gui xe o to Long Thanh,Bai gui xe o to ngay va dem,,0,0,"Name: Diem Trong Giu Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4/@21.0532227,105.87825799999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Giu Xe O To Song Thanh +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4+Song+Th%C3%A0nh/@21.033021599999998,105.87665989999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Dich Vu Trong Giu Oto Hung Son 68 +Link: https://www.google.com/maps/search/D%E1%BB%8Bch+V%E1%BB%A5+Tr%C3%B4ng+Gi%E1%BB%AF+%C3%94t%C3%B4+H%C3%B9ng+S%C6%A1n+68/@21.048453199999997,105.8656999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe o to ngay dem cho Thuong Cat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4+ng%C3%A0y+%C4%91%C3%AAm+ch%E1%BB%A3+Th%C6%B0%E1%BB%A3ng+C%C3%A1t/@21.0589713,105.8889892?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Trong Giu Xe O To Ngay Dem +Link: https://www.google.com/maps/search/Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4+Ng%C3%A0y+%C4%90%C3%AAm/@21.04476,105.86789999999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0396 923 457,,Bai gui xe o to Long Thanh (Owner),https://www.google.com/maps/contrib/103749298342555076496,,Parking lot,Parking lot,,,Open All Days,"Ng. 68 D. Ngoc Thuy, Ngoc Thuy, Long Bien, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4+Long+Th%C3%A0nh/data=!4m7!3m6!1s0x3135ab5b72eb732f:0x7a404bf2d75b47f9!8m2!3d21.0512581!4d105.8681483!16s%2Fg%2F11jkq9pzg9!19sChIJL3PrclurNTER-Udb1_JLQHo?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJg-nbA76rNTER12NoSa4YUvQ,28 Duong Thanh,,,10,4,"Name: 339-341 De La Thanh (Doi Dien DH Van Hoa) +Link: https://www.google.com/maps/search/339-341+%C4%90%C3%AA+La+Th%C3%A0nh+(%C4%90%E1%BB%91i+Di%E1%BB%87n+%C4%90H+V%C4%83n+H%C3%B3a)/@21.0229073,105.8216573?authuser=0&hl=en&entry=ttu +Reviews: 17 reviews + +Name: Ho Truc Bach - Doi Dien 28C Thanh Nien +Link: https://www.google.com/maps/search/H%E1%BB%93+Tr%C3%BAc+B%E1%BA%A1ch+-+%C4%90%E1%BB%91i+Di%E1%BB%87n+28C+Thanh+Ni%C3%AAn/@21.048755699999997,105.8386549?authuser=0&hl=en&entry=ttu +Reviews: 10 reviews + +Name: 60 Le Thanh Nghi +Link: https://www.google.com/maps/search/60+L%C3%AA+Thanh+Ngh%E1%BB%8B/@21.003416700000002,105.84856669999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: 26-28 Hang Than +Link: https://www.google.com/maps/search/26-28+H%C3%A0ng+Than/@21.0414167,105.8472333?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Doi Dien 41 Vu Tong Phan +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+41+V%C5%A9+T%C3%B4ng+Phan/@20.9987243,105.8177008?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews",,,,28 Duong Thanh (Owner),,https://lh3.ggpht.com/p/AB5caB9MNEIVLR8kxrDssAMcma-ABRJolKhgO-e2fkmR8SSbVN7xzQ4416ERAx3TAmV5BF0Ewo9vruhJqNvSoGjF_P8BDQ5fsFPgqE0Ek0ZYakBLoQsIlNlMUfSDmFSK1exJtZp03rXy=s1024,Bus stop,Bus stop,,,Open All Days,"Old Quarter, Cua Dong, Hoan Kiem, Hanoi",,https://www.google.com/maps/place/28+%C4%90%C6%B0%E1%BB%9Dng+Th%C3%A0nh/data=!4m7!3m6!1s0x3135abbe03dbe983:0xf45218ae496863d7!8m2!3d21.0310371!4d105.8470736!16s%2Fg%2F119vtmqj5!19sChIJg-nbA76rNTER12NoSa4YUvQ?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ0wHuOX6rNTERylMRuJt-RrQ,332 P. Tay Son - Quang Trung,,,24,4.3,"Name: 290 Tay Son +Link: https://www.google.com/maps/search/290+T%C3%A2y+S%C6%A1n/@21.007122000000003,105.823125?authuser=0&hl=en&entry=ttu +Reviews: 19 reviews + +Name: 254-256 Le Duan +Link: https://www.google.com/maps/search/254-256+L%C3%AA+Du%E1%BA%A9n/@21.0156946,105.8413029?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews + +Name: 140 Son Tay +Link: https://www.google.com/maps/search/140+S%C6%A1n+T%C3%A2y/@21.0326679,105.8293242?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: 50 +Link: https://www.google.com/maps/search/50/@21.0126846,105.77041?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: 133 Thai Thinh +Link: https://www.google.com/maps/search/133+Th%C3%A1i+Th%E1%BB%8Bnh/@21.0139566,105.81475239999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,,332 P. Tay Son - Quang Trung (Owner),,https://lh3.ggpht.com/p/AB5caB-3iWtKOo1gSkOlDK4fZZ2hQF3eMMg3PFC2BMtvZJTr2kRZ9HsQ7ybUYfXKJNOoqRqsKENHz_JjGUFgY-ZGCOzOh14AhbVN-X6E43wznMN_FyQVQAzl9PFdXKWllQUy3TWHCX0=s1024,Bus stop,Bus stop,,,Open All Days,"doi dien 145 P. Tay Son, Quang Trung, Dong Da, Ha Noi",,https://www.google.com/maps/place/332+P.+T%C3%A2y+S%C6%A1n+-+Quang+Trung/data=!4m7!3m6!1s0x3135ab7e39ee01d3:0xb4467e9bb81153ca!8m2!3d21.0111629!4d105.8252533!16s%2Fg%2F1tyct3dc!19sChIJ0wHuOX6rNTERylMRuJt-RrQ?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJoVlor5CrNTERf6I8-qVIqvw,Ga Ha Noi,,,177,3.6,"Name: Ga Ha Noi +Link: https://www.google.com/maps/search/Ga+H%C3%A0+N%E1%BB%99i/@21.0243303,105.8410933?authuser=0&hl=en&entry=ttu +Reviews: 3387 reviews + +Name: Hanoi Railway Station +Link: https://www.google.com/maps/search/Hanoi+Railway+Station/@21.0242529,105.84102899999999?authuser=0&hl=en&entry=ttu +Reviews: 1330 reviews + +Name: Thai Ha Station +Link: https://www.google.com/maps/search/Thai+Ha+Station/@21.0144833,105.8194491?authuser=0&hl=en&entry=ttu +Reviews: 264 reviews + +Name: Sapa Train +Link: https://www.google.com/maps/search/Sapa+Train/@21.0274,105.8352?authuser=0&hl=en&entry=ttu +Reviews: 136 reviews + +Name: Nhon Station +Link: https://www.google.com/maps/search/Nhon+Station/@21.0525264,105.73526199999999?authuser=0&hl=en&entry=ttu +Reviews: 135 reviews",,,,Ga Ha Noi (Owner),,https://lh3.ggpht.com/p/AB5caB_pkTOzMEsLa6e6vSmVS4SbfvapuYN3HyWYe1x9IKtllaluPjWoBhtKLqgOP1Wv9gDb3FZUahzTjY8PPhc5-Thov3U8Le5IOYe4shduSquJt6S-etdo3uCog34xEI1eEHZJmaCd6A=s1024,Transport hub,Transport hub,,,Open All Days,"Van Mieu, Dong Da, Hanoi",train,https://www.google.com/maps/place/Ga+H%C3%A0+N%E1%BB%99i/data=!4m7!3m6!1s0x3135ab90af6859a1:0xfcaa48a5fa3ca27f!8m2!3d21.0250615!4d105.8411814!16s%2Fm%2F04n0nx2!19sChIJoVlor5CrNTERf6I8-qVIqvw?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJyfnR33SsNTER1tyavySfatM,215 Bach Mai,,,5,4,"Name: Cho Mo - 459D Bach Mai +Link: https://www.google.com/maps/search/Ch%E1%BB%A3+M%C6%A1+-+459D+B%E1%BA%A1ch+Mai/@20.9964258,105.8500979?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: 368-370 Bach Mai +Link: https://www.google.com/maps/search/368-370+B%E1%BA%A1ch+Mai/@21.000446699999998,105.850348?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: 216-218 Bach Mai +Link: https://www.google.com/maps/search/216-218+B%E1%BA%A1ch+Mai/@21.003979800000003,105.8509624?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: 512-514 Bach Mai +Link: https://www.google.com/maps/search/512-514+B%E1%BA%A1ch+Mai/@20.996897200000003,105.8499588?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: 327 Bach Mai +Link: https://www.google.com/maps/search/327+B%E1%BA%A1ch+Mai/@21.00102,105.850695?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews",,,,215 Bach Mai (Owner),,https://lh3.ggpht.com/p/AB5caB82qedK1zV_O8MpK19muLS_Kdu6epfW-7fnJm1PFUFD3b6GKUq2Mu2ruNxnbWgWTP0wXiy0M6ZHBJdNBDUkDqqi-2iJIsuI4VdRlgEZuowIFYGDLlw55Gy_0fh-Ka4aGJBa8rOP=s1024,Bus stop,Bus stop,,,Open All Days,"215 P. Bach Mai, O Cau Den, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/215+B%E1%BA%A1ch+Mai/data=!4m7!3m6!1s0x3135ac74dfd1f9c9:0xd36a9f24bf9adcd6!8m2!3d21.0043052!4d105.8511248!16s%2Fg%2F119wckcgv!19sChIJyfnR33SsNTER1tyavySfatM?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ94txQ2arNTERjixUvQRGKYw,Ben xe buyt Long Bien,,,21,4.2,"Name: Ben xe buyt Long Bien +Link: https://www.google.com/maps/search/B%E1%BA%BFn+xe+bu%C3%BDt+Long+Bi%C3%AAn/@21.042592199999998,105.84824700000001?authuser=0&hl=en&entry=ttu +Reviews: 300 reviews + +Name: E1.2 Diem Trung Chuyen Long Bien +Link: https://www.google.com/maps/search/E1.2+%C4%90i%E1%BB%83m+Trung+Chuy%E1%BB%83n+Long+Bi%C3%AAn/@21.0415313,105.84946049999999?authuser=0&hl=en&entry=ttu +Reviews: 87 reviews + +Name: Tram xe buyt trung chuyen Long Bien +Link: https://www.google.com/maps/search/Tr%E1%BA%A1m+xe+bu%C3%BDt+trung+chuy%E1%BB%83n+Long+Bi%C3%AAn/@21.0412253,105.8494054?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Ben Xe Long Bien +Link: https://www.google.com/maps/search/B%E1%BA%BFn+Xe+Long+Bi%C3%AAn/@21.039037999999998,105.847915?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: BDX buyt Long Bien +Link: https://www.google.com/maps/search/B%C4%90X+bu%C3%BDt+Long+Bi%C3%AAn/@21.042592199999998,105.84824700000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Ben xe buyt Long Bien (Owner),,https://lh3.ggpht.com/p/AB5caB-V3HnFk1V4V9burPT2baAhMOpmBZfEXXAMQpRxsM1tWmjuLomBsopgmEDwOAPRPVPMjZUOZgDNNFCDnGAYVZDPYPYguB_M7AkuYBAPtNzuNnHC8jpIN227FPRkDxxQluePw20dIQ=s1024,Parking lot,Parking lot,5 AM-10 PM,,Open All Days,"E3.2 Diem Trung Chuyen Long Bien, Nguyen Trung Truc, Ba Dinh, Ha Noi",bus,https://www.google.com/maps/place/B%E1%BA%BFn+xe+bu%C3%BDt+Long+Bi%C3%AAn/data=!4m7!3m6!1s0x3135ab6643718bf7:0x8c294604bd542c8e!8m2!3d21.041225!4d105.849589!16s%2Fg%2F11ll46tq6m!19sChIJ94txQ2arNTERjixUvQRGKYw?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJDykMaMKrNTERorvy82LlxXM,Bai gui xe,,,6,3.7,"Name: Bai gui xe so 1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+s%E1%BB%91+1/@20.987584599999998,105.8314704?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai Do Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4/@21.0224655,105.8532371?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai gui xe vien Phoi +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+vi%E1%BB%87n+Ph%E1%BB%95i/@21.041498500000003,105.8123838?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews",,,1,Bai gui xe (Owner),,https://lh3.ggpht.com/p/AB5caB-2dVUsXKFBhpsxTQL957aZ2Fc6Jp5WlbrpKyxMuBBpPtFUnqZyJCLpKADd4tt1CTsxaz-0FjURKtrVd8uLPrEt-ptSjOOn8MNHvRKSi8KgE2DWEXRxmvbjiszh-BrteOu9VgsXHg=s1024,Parking lot,Parking lot,,,Open All Days,"Ngh. 207/28 P. Bui Xuong Trach, Chuong Duong Do, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe/data=!4m7!3m6!1s0x3135abc2680c290f:0x73c5e562f3f2bba2!8m2!3d20.9867769!4d105.8198008!16s%2Fg%2F11f3jnxl46!19sChIJDykMaMKrNTERorvy82LlxXM?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJzwl6_sSrNTERMwIx63gbe4k,Van phong xe Ha Noi - Ninh Binh,,,0,0,"Name: Ninh Binh Car Rental +Link: https://www.google.com/maps/search/Ninh+Binh+Car+Rental/@21.035087,105.85348599999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Hello Ninh Binh Bus +Link: https://www.google.com/maps/search/Hello+Ninh+Binh+Bus/@21.030069599999997,105.8469367?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Nha xe Manh Phuong - Nho Quan Me - Gia Vien Ninh Binh +Link: https://www.google.com/maps/search/Nh%C3%A0+xe+M%E1%BA%A1nh+Ph%C6%B0%C6%A1ng+-+Nho+Quan+Me+-+Gia+Vi%E1%BB%85n+Ninh+B%C3%ACnh/@21.040118,105.776187?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Ninh Binh Car Rentals +Link: https://www.google.com/maps/search/Ninh+Binh+Car+Rentals/@21.034629499999998,105.851575?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai trong xe Phan ke binh +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+Phan+k%E1%BA%BF+b%C3%ADnh/@21.0343043,105.8122015?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",http://ninhbinhcar.com/,,1,Van phong xe Ha Noi - Ninh Binh (Owner),,,Parking lot,Parking lot,,,Open All Days,"2 P. Pham Huy Thong, Ngoc Khanh, Dong Da, Ha Noi",,https://www.google.com/maps/place/V%C4%83n+ph%C3%B2ng+xe+H%C3%A0+N%E1%BB%99i+-+Ninh+B%C3%ACnh/data=!4m7!3m6!1s0x3135abc4fe7a09cf:0x897b1b78eb310233!8m2!3d21.0293339!4d105.811462!16s%2Fg%2F11t_hxhxw2!19sChIJzwl6_sSrNTERMwIx63gbe4k?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJA7GtWeqrNTERVw5mDt8AMZc,36 Ly Thai To - Cung Thieu Nhi Ha Noi,,,1,4,"Name: Rap Chieu Phim Quoc Gia - Thai Ha +Link: https://www.google.com/maps/search/R%E1%BA%A1p+Chi%E1%BA%BFu+Phim+Qu%E1%BB%91c+Gia+-+Th%C3%A1i+H%C3%A0/@21.016080499999997,105.8158121?authuser=0&hl=en&entry=ttu +Reviews: 285 reviews + +Name: 09, 36 +Link: https://www.google.com/maps/search/09%2C+36/@21.0274641,105.85119549999999?authuser=0&hl=en&entry=ttu +Reviews: 10 reviews + +Name: 176 Thai Ha +Link: https://www.google.com/maps/search/176+Th%C3%A1i+H%C3%A0/@21.012984499999998,105.8201332?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Doi Dien 29 Han Thuyen +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+29+H%C3%A0n+Thuy%C3%AAn/@21.0184788,105.8554259?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Xe An Long Happy Bus +Link: https://www.google.com/maps/search/Xe+An+Long+Happy+Bus/@21.029060899999998,105.8571348?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,,36 Ly Thai To - Cung Thieu Nhi Ha Noi (Owner),,https://lh3.ggpht.com/p/AB5caB-z3OyodsHPiXMuWMa8V_O7o6c2QK0btbDiGErPphlDXEftmDRbfpmSYrgXz8R580etNnOLNlT62ADZ6mppfSBKLF__uVQaj3heTpkCbwIMe0Uq3LyyuBh1W7lox648dMM8pSEB=s1024,Bus stop,Bus stop,,,Open All Days,"French Quarter, Ly Thai To, Hoan Kiem, Hanoi",,https://www.google.com/maps/place/36+L%C3%BD+Th%C3%A1i+T%E1%BB%95+-+Cung+Thi%E1%BA%BFu+Nhi+H%C3%A0+N%E1%BB%99i/data=!4m7!3m6!1s0x3135abea59adb103:0x973100df0e660e57!8m2!3d21.0281029!4d105.8556098!16s%2Fg%2F11pq9mqjs2!19sChIJA7GtWeqrNTERVw5mDt8AMZc?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJf2Gi53SsNTERvxaEEOxZZq8,216-218 Bach Mai,,,5,2.6,"Name: Cho Mo - 459D Bach Mai +Link: https://www.google.com/maps/search/Ch%E1%BB%A3+M%C6%A1+-+459D+B%E1%BA%A1ch+Mai/@20.9964258,105.8500979?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: 368-370 Bach Mai +Link: https://www.google.com/maps/search/368-370+B%E1%BA%A1ch+Mai/@21.000446699999998,105.850348?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: 215 Bach Mai +Link: https://www.google.com/maps/search/215+B%E1%BA%A1ch+Mai/@21.004305199999997,105.8511248?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: 512-514 Bach Mai +Link: https://www.google.com/maps/search/512-514+B%E1%BA%A1ch+Mai/@20.996897200000003,105.8499588?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: 327 Bach Mai +Link: https://www.google.com/maps/search/327+B%E1%BA%A1ch+Mai/@21.00102,105.850695?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews",,,,216-218 Bach Mai (Owner),,https://lh3.ggpht.com/p/AB5caB8Q1uIsmL3vsUa495nuvlnqh15BI6h_Y4KLBMXLDyjy7jfqRoTV4fgyp1BJeZLOtPSKN1V1TZHDWUoIun7bik_or7art5kLkSgeiz7fTgRBBsnFRSU99xZouWa1orxg9DBD3Hhu=s1024,Bus stop,Bus stop,,,Open All Days,"216 P. Bach Mai, Cau Den, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/216-218+B%E1%BA%A1ch+Mai/data=!4m7!3m6!1s0x3135ac74e7a2617f:0xaf6659ec108416bf!8m2!3d21.0039798!4d105.8509624!16s%2Fg%2F119v8jlst!19sChIJf2Gi53SsNTERvxaEEOxZZq8?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ5yfDruKtNTERSKJ_YhgwS_8,Bai rua xe do xe,,,1,5,"Name: Bai Gui Xe so 16 ngo 296 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+s%E1%BB%91+16+ng%C3%B5+296/@20.9798947,105.8790592?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai xe Dong Xa 2 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+%C4%90%E1%BB%93ng+Xa+2/@20.983598699999998,105.8718431?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Xe Trung Quan +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+Trung+Qu%C3%A2n/@20.992809599999998,105.8742443?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0813 101 080,,Bai rua xe do xe (Owner),https://www.google.com/maps/contrib/101292498476479743320,https://lh3.ggpht.com/p/AF1QipPOkAMt3KgYsf_c2nPFJdJ9A3cm9LykMiOnT5OP=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"Vinh Hung, Hoang Mai, Hanoi",,https://www.google.com/maps/place/B%C3%A3i+r%E1%BB%ADa+xe+%C4%91%E1%BB%97+xe/data=!4m7!3m6!1s0x3135ade2aec327e7:0xff4b3018627fa248!8m2!3d20.9834615!4d105.8704131!16s%2Fg%2F11hzkr38fw!19sChIJ5yfDruKtNTERSKJ_YhgwS_8?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ94z_3pSrNTER2h2ww86pptQ,"09, 36",,,10,3.7,"Name: Minh Phuong Ha Noi Co.,Ltd +Link: https://www.google.com/maps/search/Minh+Phuong+Ha+Noi+Co.%2CLtd/@21.034138499999997,105.84623339999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Ha Thanh Trading & Travel Transport Co.,Ltd +Link: https://www.google.com/maps/search/Ha+Thanh+Trading+%26+Travel+Transport+Co.%2CLtd/@21.0296879,105.8504316?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Ha Noi Tran Quang Khai +Link: https://www.google.com/maps/search/H%C3%A0+N%E1%BB%99i+Tr%E1%BA%A7n+Quang+Kh%E1%BA%A3i/@21.033593500000002,105.8552656?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Doanh Nghiep Tu Nhan Tung Anh +Link: https://www.google.com/maps/search/Doanh+Nghi%E1%BB%87p+T%C6%B0+Nh%C3%A2n+T%C3%B9ng+Anh/@21.037891899999998,105.845742?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: 36 Ly Thai To - Cung Thieu Nhi Ha Noi +Link: https://www.google.com/maps/search/36+L%C3%BD+Th%C3%A1i+T%E1%BB%95+-+Cung+Thi%E1%BA%BFu+Nhi+H%C3%A0+N%E1%BB%99i/@21.0281029,105.8556098?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,,"09, 36 (Owner)",,https://lh3.ggpht.com/p/AB5caB_WNKKeO85hz0gelf3LQ5yB6SigCsOf-pFVNes_W49B7Z1LDi9pKwJDR59jCZpb7igIjmCN3q2OikHUSWpT8ROqMfevpPExPfU2KNPu06Y4U_pJZZDSzBM2FA61ELcP0len8foy=s1024,Bus stop,Bus stop,,,Open All Days,"P. Le Thai To, Hang Trong, Hoan Kiem, Ha Noi",,"https://www.google.com/maps/place/09,+36/data=!4m7!3m6!1s0x3135ab94deff8cf7:0xd4a6a9cec3b01dda!8m2!3d21.0274641!4d105.8511955!16s%2Fg%2F1v3_047j!19sChIJ94z_3pSrNTER2h2ww86pptQ?authuser=0&hl=en&rclk=1",bai do xe gan dai hoc bach khoa +ChIJmWhfZ1irNTERc0qcpOUE_ag,Diem Trong Giu Xe O To,,,0,0,"Name: Bai Trong Xe May Tu Mo +Link: https://www.google.com/maps/search/B%C3%A3i+Tr%C3%B4ng+Xe+M%C3%A1y+T%C3%BA+M%E1%BB%A1/@21.009980400000003,105.7935213?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai gui xe 221 Trung Kinh +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+221+Trung+K%C3%ADnh/@21.0208938,105.79124189999999?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai gui xe o to 24/24h +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4+24%2F24h/@21.0312783,105.740607?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Diem Trong Giu Xe O To (Owner),,https://lh3.ggpht.com/p/AB5caB-8UO-qJ3V4IYQueUzdlO3L2E1uJ1auIB5hte3wWjZZ4Gs2FDsqvG2TQG8RwpGfrX-pnJO6ZYruwpDcWPAyWWXRRvSN0PAxOX9NBdV981T0ll-ribIEx71s6S44qALlgEQVKp_h=s1024,Parking lot,Parking lot,,,Open All Days,"107 P. Trung Kinh, Trung Hoa, Cau Giay, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4/data=!4m7!3m6!1s0x3135ab58675f6899:0xa8fd04e5a49c4a73!8m2!3d21.0140424!4d105.7962995!16s%2Fg%2F11p4cwmgj6!19sChIJmWhfZ1irNTERc0qcpOUE_ag?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJE-eXu8GrNTERyODXoop4LbI,Canh Pho Ham Tu Quan (Doi Dien 162 Tran Quang Khai),,,0,0,"Name: 162 Tran Quang Khai +Link: https://www.google.com/maps/search/162+Tr%E1%BA%A7n+Quang+Kh%E1%BA%A3i/@21.032008299999998,105.85610299999999?authuser=0&hl=en&entry=ttu +Reviews: 24 reviews + +Name: 162 Tran Quang Khai - Vien Quy Hoach Thuy Loi +Link: https://www.google.com/maps/search/162+Tr%E1%BA%A7n+Quang+Kh%E1%BA%A3i+-+Vi%E1%BB%87n+Quy+Ho%E1%BA%A1ch+Th%E1%BB%A7y+L%E1%BB%A3i/@21.0319795,105.8560986?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Ha Noi Tran Quang Khai +Link: https://www.google.com/maps/search/H%C3%A0+N%E1%BB%99i+Tr%E1%BA%A7n+Quang+Kh%E1%BA%A3i/@21.033593500000002,105.8552656?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: 160 Tran Quang Khai +Link: https://www.google.com/maps/search/160+Tr%E1%BA%A7n+Quang+Kh%E1%BA%A3i/@21.0338271,105.85527719999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Nha hat Lon Ha Noi +Link: https://www.google.com/maps/search/Nh%C3%A0+h%C3%A1t+L%E1%BB%9Bn+H%C3%A0+N%E1%BB%99i/@21.0246,105.86023999999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Canh Pho Ham Tu Quan (Doi Dien 162 Tran Quang Khai) (Owner),,https://lh3.ggpht.com/p/AB5caB88dB4MVoC8tgwv4B0St-8yxapgPr9-5O2sWUTAJVKof0Tpf1-nzTgdEF_QzjBv117Lm8Dr5NJwPyNmtuQJXs_hDGNXizKHOsaJ6pupLFtjXIh7BIposfTGC3sHpj99ZZMiV56oFg=s1024,Bus stop,Bus stop,,,Open All Days,"Chuong Duong Do, Hoan Kiem, Hanoi",,https://www.google.com/maps/place/C%E1%BA%A1nh+Ph%E1%BB%91+H%C3%A0m+T%E1%BB%AD+Quan+%28%C4%90%E1%BB%91i+Di%E1%BB%87n+162+Tr%E1%BA%A7n+Quang+Kh%E1%BA%A3i%29/data=!4m7!3m6!1s0x3135abc1bb97e713:0xb22d788aa2d7e0c8!8m2!3d21.0320263!4d105.856488!16s%2Fg%2F11pq9nhrhg!19sChIJE-eXu8GrNTERyODXoop4LbI?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ59_5DQWtNTER6KREqUVGrzA,Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang,Bai do xe 24/7 . co mai che . mien phi dich vu rua xe . tuoi lop . nuoc mui,,0,0,"Name: Bai Dau Xe 24/7 +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BA%ADu+Xe+24%2F7/@20.9987748,105.7964516?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe Tuan Ngo +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Tu%E1%BA%A5n+Ng%E1%BB%8D/@20.9881931,105.77049919999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe Thong Nhat +Link: https://www.google.com/maps/search/Bai+gui+xe+Thong+Nhat/@20.987035,105.79630619999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,0839 280 992,,Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang (Owner),https://www.google.com/maps/contrib/102698338088478389718,https://lh3.ggpht.com/p/AF1QipO1VUHA0hncXw87nPW61t8zEe-9vfYPdjhyay0o=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"30 D. Trung Van, Trung Van, Nam Tu Liem, Ha Noi 100000",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/data=!4m7!3m6!1s0x3135ad050df9dfe7:0x30af4645a944a4e8!8m2!3d20.9918493!4d105.7932795!16s%2Fg%2F11nncc30cp!19sChIJ59_5DQWtNTER6KREqUVGrzA?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJoagmI4WrNTER68WzzCLP6WE,Dai Tuong Niem Kham Thien - 45 Kham Thien,,,19,3.9,"Name: 274-276 Kham Thien +Link: https://www.google.com/maps/search/274-276+Kh%C3%A2m+Thi%C3%AAn/@21.0193029,105.8342637?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Ben xe buyt +Link: https://www.google.com/maps/search/B%E1%BA%BFn+xe+bu%C3%BDt/@21.0188125,105.8386053?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: 221A-221B Kham Thien (Doi Dien 302) +Link: https://www.google.com/maps/search/221A-221B+Kh%C3%A2m+Thi%C3%AAn+(%C4%90%E1%BB%91i+Di%E1%BB%87n+302)/@21.0192269,105.8333873?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: 78-80A Kham Thien (Doi Dien 71) +Link: https://www.google.com/maps/search/78-80A+Kh%C3%A2m+Thi%C3%AAn+(%C4%90%E1%BB%91i+Di%E1%BB%87n+71)/@21.019051899999997,105.83797659999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Tram xe buyt 274_276 kham Thien +Link: https://www.google.com/maps/search/Tr%E1%BA%A1m+xe+bu%C3%BDt+274_276+kh%C3%A2m+Thi%C3%AAn/@21.0191919,105.8340468?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0985 243 414,,Dai Tuong Niem Kham Thien - 45 Kham Thien (Owner),,https://lh3.ggpht.com/p/AB5caB_38NhShBllvYUGN0nE2BHh4TvjhkpNoBeY7Dfwtzaob-mKcbz00bfL8qlGWYmNFRfPgsvQN9pz20PyJR4OHRBvdh2gjNehJatCh9sgXy3XVZRdZsmsmTyG8CCCaiizU9WtuSRM=s1024,Bus stop,Bus stop,,,Open All Days,"Kham Thien, Dong Da, Hanoi",,https://www.google.com/maps/place/%C4%90%C3%A0i+T%C6%B0%E1%BB%9Fng+Ni%E1%BB%87m+Kh%C3%A2m+Thi%C3%AAn+-+45+Kh%C3%A2m+Thi%C3%AAn/data=!4m7!3m6!1s0x3135ab852326a8a1:0x61e9cf22ccb3c5eb!8m2!3d21.0188732!4d105.8385226!16s%2Fg%2F1w4f5l5j!19sChIJoagmI4WrNTER68WzzCLP6WE?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ1ywA8iGrNTERdypAUtqsphk,Bai gui xe 04 Tay Ho,"Bai gui, rua xe o to +Trong giu xe o to",,15,5,"Name: Bai gui xe QDNDVN +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Q%C4%90NDVN/@21.0673225,105.811123?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe - Nha co cay sung +Link: https://www.google.com/maps/search/B%C3%A3i+xe+-+Nh%C3%A0+c%C3%B3+c%C3%A2y+sung/@21.068853999999998,105.83099299999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai Xe HT +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+HT/@21.0494967,105.79735579999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0901 756 086,,Bai gui xe 04 Tay Ho (Owner),https://www.google.com/maps/contrib/103052286351299965685,https://lh3.ggpht.com/p/AF1QipPZLyKl1cc2TE7jiwUIeURzJ2HZYj-Xs8xNZgNj=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"4 D. Tay Ho, Quang An, Tay Ho, Ha Noi 10000",service,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+04+T%C3%A2y+H%E1%BB%93/data=!4m7!3m6!1s0x3135ab21f2002cd7:0x19a6acda52402a77!8m2!3d21.0661386!4d105.8259885!16s%2Fg%2F11kpntcf3j!19sChIJ1ywA8iGrNTERdypAUtqsphk?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJcXsj4aKrNTERvyz9n2891Wo,34 - 36 Hoang Dieu,,,5,4.2,"Name: 741-743 Hoang Hoa Tham +Link: https://www.google.com/maps/search/741-743+Ho%C3%A0ng+Hoa+Th%C3%A1m/@21.0474495,105.80647429999999?authuser=0&hl=en&entry=ttu +Reviews: 21 reviews + +Name: Doi Dien Tuong Dai Bac Son - Hoang Dieu +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+T%C6%B0%E1%BB%A3ng+%C4%90%C3%A0i+B%E1%BA%AFc+S%C6%A1n+-+Ho%C3%A0ng+Di%E1%BB%87u/@21.035390500000002,105.83941929999999?authuser=0&hl=en&entry=ttu +Reviews: 16 reviews + +Name: 92-94 Ba Trieu +Link: https://www.google.com/maps/search/92-94+B%C3%A0+Tri%E1%BB%87u/@21.0192062,105.8493922?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: 22 Lieu Giai +Link: https://www.google.com/maps/search/22+Li%E1%BB%85u+Giai/@21.035899399999998,105.81443349999999?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Doi Dien Duong Hoang Van Thu - Hoang Dieu +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+%C4%90%C6%B0%E1%BB%9Dng+Ho%C3%A0ng+V%C4%83n+Th%E1%BB%A5+-+Ho%C3%A0ng+Di%E1%BB%87u/@21.0384705,105.83982549999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,,34 - 36 Hoang Dieu (Owner),,https://lh3.ggpht.com/p/AB5caB_4y__6BP_EDUyk7mHWysVtMU8VFLcgrO6rf3DKo0aAOXWIscZV-oEkWFLf9Xt0e_EtBnuQWwA4S1PKWIbVC1tHvlOZJ1DwHhyqM6bqQGbl4MzDVn01Gra4KcNrmrkimIv5F8Ck=s1024,Bus stop,Bus stop,,,Open All Days,"Hoang Dieu, Dien Bien, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/34+-+36+Ho%C3%A0ng+Di%E1%BB%87u/data=!4m7!3m6!1s0x3135aba2e1237b71:0x6ad53d6f9ffd2cbf!8m2!3d21.03416!4d105.8389189!16s%2Fg%2F1thv_mqt!19sChIJcXsj4aKrNTERvyz9n2891Wo?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJjdJn-5-rNTER_8k1nSZ9O8o,(A) Kim Ma (Toa Nha PTA Kim Ma),,,53,4.3,"Name: Kim Ma Bus Ticket Booth +Link: https://www.google.com/maps/search/Kim+Ma+Bus+Ticket+Booth/@21.032148499999998,105.82930259999999?authuser=0&hl=en&entry=ttu +Reviews: 82 reviews + +Name: He Truoc Toa Nha PTA - So 1 Kim Ma +Link: https://www.google.com/maps/search/H%C3%A8+Tr%C6%B0%E1%BB%9Bc+T%C3%B2a+Nh%C3%A0+PTA+-+S%E1%BB%91+1+Kim+M%C3%A3/@21.032242,105.8294569?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Kim Ma (Nha Cho BRT Kim Ma) - Bien Sau +Link: https://www.google.com/maps/search/Kim+M%C3%A3+(Nh%C3%A0+Ch%E1%BB%9D+BRT+Kim+M%C3%A3)+-+Bi%E1%BB%83n+Sau/@21.031907399999998,105.8296184?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Ben xe Kim Ma +Link: https://www.google.com/maps/search/B%E1%BA%BFn+xe+Kim+M%C3%A3/@21.03223,105.8288695?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Kim Ma (Nha Cho BRT Kim Ma) - Bien Truoc +Link: https://www.google.com/maps/search/Kim+M%C3%A3+(Nh%C3%A0+Ch%E1%BB%9D+BRT+Kim+M%C3%A3)+-+Bi%E1%BB%83n+Tr%C6%B0%E1%BB%9Bc/@21.032050899999998,105.82916089999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,(A) Kim Ma (Toa Nha PTA Kim Ma) (Owner),,https://lh3.ggpht.com/p/AB5caB9wZd2Icatkm-4NG1mm8TsncvHhcWHVrsF-iV0kU0doRtSUDZDzUreP20wjSDmklFfQ033J-YPbE83csZDNI4bcbAUnM35xqYvayVLke_D8HElR6KfqmNEW2R7IvZGzxEuAFy9x=s1024,Bus stop,Bus stop,,,Open All Days,"Kim Ma, Ba Dinh, Hanoi",,https://www.google.com/maps/place/%28A%29+Kim+M%C3%A3+%28T%C3%B2a+Nh%C3%A0+PTA+Kim+M%C3%A3%29/data=!4m7!3m6!1s0x3135ab9ffb67d28d:0xca3b7d269d35c9ff!8m2!3d21.032013!4d105.82944!16s%2Fg%2F12vqs2xjr!19sChIJjdJn-5-rNTER_8k1nSZ9O8o?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJcb6sjaasNTERaPWSDd4IA0U,117 Tran Duy Hung Parking,,,27,3.8,"Name: Bac Co Parking +Link: https://www.google.com/maps/search/Bac+Co+Parking/@21.0264429,105.85906609999999?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Dien dung xe +Link: https://www.google.com/maps/search/%C4%90i%C3%AA%CC%89n+d%C6%B0%CC%80ng+xe/@21.0413088,105.7729712?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/@20.9918493,105.7932795?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,117 Tran Duy Hung Parking (Owner),,https://lh3.ggpht.com/p/AB5caB-DMxTYByXjBvgQJXvimMgMb4O2-VDRyzb8EBxYZgpa1P2Lytr7DsEJ7n-w4GjCaJGOl0hpfC-au03cigQ5KZ4Hbo1MzxXru3maaRKvoUSkXdYbS7XZB4E_pYU_VZXfCZ5gM4SArA=s1024,Parking lot,Parking lot,,,Open All Days,"117 D. Tran Duy Hung, Trung Hoa, Cau Giay, Ha Noi",,https://www.google.com/maps/place/117+Tr%E1%BA%A7n+Duy+H%C6%B0ng+Parking/data=!4m7!3m6!1s0x3135aca68dacbe71:0x450308de0d92f568!8m2!3d21.0079468!4d105.7972974!16s%2Fg%2F11gd67tr_f!19sChIJcb6sjaasNTERaPWSDd4IA0U?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJW-jgnXSrNTERjFD58INiOcU,211 Kim Ma,,,3,5,"Name: Doi Dien 311 Kim Ma (Gan Nga 4 Kim Ma - Van Bao) +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+311+Kim+M%C3%A3+(G%E1%BA%A7n+Ng%C3%A3+4+Kim+M%C3%A3+-+V%E1%BA%A1n+B%E1%BA%A3o)/@21.0308785,105.8177822?authuser=0&hl=en&entry=ttu +Reviews: 17 reviews + +Name: 240 Kim Ma +Link: https://www.google.com/maps/search/240+Kim+M%C3%A3/@21.0317,105.8240333?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Ben xe Kim Ma +Link: https://www.google.com/maps/search/B%E1%BA%BFn+xe+Kim+M%C3%A3/@21.03223,105.8288695?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Xe Qbus +Link: https://www.google.com/maps/search/Xe+Qbus/@21.032262,105.827843?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Kim Ma (Nha Cho BRT Kim Ma) - Bien Truoc +Link: https://www.google.com/maps/search/Kim+M%C3%A3+(Nh%C3%A0+Ch%E1%BB%9D+BRT+Kim+M%C3%A3)+-+Bi%E1%BB%83n+Tr%C6%B0%E1%BB%9Bc/@21.032050899999998,105.82916089999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,211 Kim Ma (Owner),,https://lh3.ggpht.com/p/AB5caB-TPVT6Ocg01otbbeVax4qvxSH_NcExF86Odm8i2MwDmtNdCUeLgrQdzBbplUzPcuqAmLhurBQB4ovF-gCqhiyzJJIY8mXUw2XQlklhdNzOdg4UfNeDHhyTYN9y3bSML7Ydbxif0A=s1024,Bus stop,Bus stop,,,Open All Days,"209 P. Kim Ma, Kim Ma, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/211+Kim+M%C3%A3/data=!4m7!3m6!1s0x3135ab749de0e85b:0xc5396283f0f9508c!8m2!3d21.03136!4d105.8232814!16s%2Fg%2F1td562gv!19sChIJW-jgnXSrNTERjFD58INiOcU?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJda8_PaOrNTERvOoL9WuNZqc,Doi Dien Tuong Dai Bac Son - Hoang Dieu,,,16,4.6,"Name: Nga 3 Hoang Dieu - Hoang Van Thu +Link: https://www.google.com/maps/search/Ng%C3%A3+3+Ho%C3%A0ng+Di%E1%BB%87u+-+Ho%C3%A0ng+V%C4%83n+Th%E1%BB%A5/@21.039136700000004,105.83964850000001?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: 34 - 36 Hoang Dieu +Link: https://www.google.com/maps/search/34+-+36+Ho%C3%A0ng+Di%E1%BB%87u/@21.03416,105.8389189?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Doi Dien Duong Hoang Van Thu - Hoang Dieu +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+%C4%90%C6%B0%E1%BB%9Dng+Ho%C3%A0ng+V%C4%83n+Th%E1%BB%A5+-+Ho%C3%A0ng+Di%E1%BB%87u/@21.0384705,105.83982549999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Doi Dien Thien Duong Bao Son - Dai Lo Thang Long +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+Thi%C3%AAn+%C4%90%C6%B0%E1%BB%9Dng+B%E1%BA%A3o+S%C6%A1n+-+%C4%90%E1%BA%A1i+L%E1%BB%99+Th%C4%83ng+Long/@21.011167,105.72874999999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Doi Dien Truong Tieu Hoc Hoang Dieu +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+Tr%C6%B0%E1%BB%9Dng+Ti%E1%BB%83u+H%E1%BB%8Dc+Ho%C3%A0ng+Di%E1%BB%87u/@20.861140000000002,105.73254709999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Doi Dien Tuong Dai Bac Son - Hoang Dieu (Owner),,https://lh3.ggpht.com/p/AB5caB_w9F5KF2yEUaF91loqcOtL7Mt_3_d_LqkmKBgx7cq1_38ZgR-fnNHscJIVHDvGrBrjRyUV9VzjZ4eeEs9s8uFH__5ak7jqFKtN52xNjMkFpigFOMcYbQqLrSOf5J3KvmocWrg=s1024,Bus stop,Bus stop,,,Open All Days,"Hoang Dieu, Quan Thanh, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/%C4%90%E1%BB%91i+Di%E1%BB%87n+T%C6%B0%E1%BB%A3ng+%C4%90%C3%A0i+B%E1%BA%AFc+S%C6%A1n+-+Ho%C3%A0ng+Di%E1%BB%87u/data=!4m7!3m6!1s0x3135aba33d3faf75:0xa7668d6bf50beabc!8m2!3d21.0353905!4d105.8394193!16s%2Fg%2F1tg9klrb!19sChIJda8_PaOrNTERvOoL9WuNZqc?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJvWtdFnutNTEREnb2U5kc20o,Bai Trong Xe May Tu Mo,,,4,3.8,"Name: Diem Trong Giu Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4/@21.014042399999997,105.79629949999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe Truong Man Non Sao Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Tr%C6%B0%E1%BB%9Dng+M%E1%BA%A7n+Non+Sao+Mai/@21.0453212,105.77690919999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/@20.9918493,105.7932795?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai Trong Xe May Tu Mo (Owner),,https://lh3.ggpht.com/p/AB5caB-cTgDirc9UZuRAGpNAlh_UEyxZsighwZIlOoWDxrqT-iyRoH4dZ0DHFLyKXP49AuF7qUSwZc7u45wZUYsS6XKhy1yzzSLrOamuDSnKEPoe2IYIbHVnT6nOtd6iNot4SI0u_DZ3=s1024,Parking lot,Parking lot,,,Open All Days,"2Q5V+XCR Tu Mo, P. Nguyen Chanh, Trung Hoa, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+Tr%C3%B4ng+Xe+M%C3%A1y+T%C3%BA+M%E1%BB%A1/data=!4m7!3m6!1s0x3135ad7b165d6bbd:0x4adb1c9953f67612!8m2!3d21.0099804!4d105.7935213!16s%2Fg%2F11qr2pcd4f!19sChIJvWtdFnutNTEREnb2U5kc20o?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJdcF7DdGrNTERVdw44n1ye_E,Trong Giu Xe O To Ngay Dem,,,0,0,"Name: Diem Trong Giu Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4/@21.0532227,105.87825799999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Giu Xe O To Song Thanh +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4+Song+Th%C3%A0nh/@21.033021599999998,105.87665989999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai gui xe o to Long Thanh +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4+Long+Th%C3%A0nh/@21.0512581,105.8681483?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Dich Vu Giu Xe Ngay Dem +Link: https://www.google.com/maps/search/D%E1%BB%8Bch+V%E1%BB%A5+Gi%E1%BB%AF+Xe+Ng%C3%A0y+%C4%90%C3%AAm/@21.053279999999997,105.87989999999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Tiem Trong Giu Xe At Thuc +Link: https://www.google.com/maps/search/Ti%E1%BB%87m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%E1%BA%A4t+Th%E1%BB%A5c/@21.0566361,105.8979861?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0943 602 256,1,Trong Giu Xe O To Ngay Dem (Owner),,,Parking lot,Parking lot,,,Open All Days,"2VV9+W52, Ngoc Lam, Long Bien, Ha Noi",,https://www.google.com/maps/place/Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4+Ng%C3%A0y+%C4%90%C3%AAm/data=!4m7!3m6!1s0x3135abd10d7bc175:0xf17b727de238dc55!8m2!3d21.04476!4d105.8679!16s%2Fg%2F11jg87qy74!19sChIJdcF7DdGrNTERVdw44n1ye_E?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJb4vqOZOrNTERwwtPqpwFdxk,Doi Dien 39 Ly Thuong Kiet,,,0,0,"Name: 54 Ly Thuong Kiet +Link: https://www.google.com/maps/search/54+L%C3%BD+Th%C6%B0%E1%BB%9Dng+Ki%E1%BB%87t/@21.0248496,105.8455511?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: 18 Ly Thuong Kiet - Tong Cong Ty Du Lich Ha Noi +Link: https://www.google.com/maps/search/18+L%C3%BD+Th%C6%B0%E1%BB%9Dng+Ki%E1%BB%87t+-+T%E1%BB%95ng+C%C3%B4ng+Ty+Du+L%E1%BB%8Bch+H%C3%A0+N%E1%BB%99i/@21.021983,105.855194?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: 39 Ly Thuong Kiet - Hoan Kiem +Link: https://www.google.com/maps/search/39+L%C3%BD+Th%C6%B0%E1%BB%9Dng+Ki%E1%BB%87t+-+Ho%C3%A0n+Ki%E1%BA%BFm/@21.0229177,105.8515874?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Doi Dien 52A Ly Thuong Kiet - Hoan Kiem +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+52A+L%C3%BD+Th%C6%B0%E1%BB%9Dng+Ki%E1%BB%87t+-+Ho%C3%A0n+Ki%E1%BA%BFm/@21.0246256,105.84568019999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: 39 Dong Tac +Link: https://www.google.com/maps/search/39+%C4%90%C3%B4ng+T%C3%A1c/@21.0059072,105.83441739999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Doi Dien 39 Ly Thuong Kiet (Owner),,https://lh3.ggpht.com/p/AB5caB8i2fZZk7qwUO51YUEMPfUXmEh0xqNnKPBuFn2B0B4StRuU55N6nzYQ77cZUVb9QVy3sZ06HQsx9jVnHYSP9FsfI5faiFTSC-YPA_-s7SobPdjBx1vtLp8ErUgwtLBxyORYk-A=s1024,Bus stop,Bus stop,,,Open All Days,"Hang Bai, Hoan Kiem, Hanoi",,https://www.google.com/maps/place/%C4%90%E1%BB%91i+Di%E1%BB%87n+39+L%C3%BD+Th%C6%B0%E1%BB%9Dng+Ki%E1%BB%87t/data=!4m7!3m6!1s0x3135ab9339ea8b6f:0x1977059caa4f0bc3!8m2!3d21.023!4d105.8517!16s%2Fg%2F11r7v_cnqx!19sChIJb4vqOZOrNTERwwtPqpwFdxk?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJbfqmwsCrNTERJm80EPaVkEo,So 3 Hang Muoi,,,58,4.4,"Name: 23 Hang Tre +Link: https://www.google.com/maps/search/23+H%C3%A0ng+Tre/@21.031988500000004,105.8557206?authuser=0&hl=en&entry=ttu +Reviews: 111 reviews + +Name: 50 Hang Cot +Link: https://www.google.com/maps/search/50+H%C3%A0ng+C%C3%B3t/@21.0375729,105.8469628?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: 26-28 Hang Than +Link: https://www.google.com/maps/search/26-28+H%C3%A0ng+Than/@21.0414167,105.8472333?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Diem Trung Chuyen Cau Giay cu +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Trung+Chuy%E1%BB%83n+C%E1%BA%A7u+Gi%E1%BA%A5y+c%C5%A9/@21.0290871,105.8032274?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: 180 - 182 Ba Trieu +Link: https://www.google.com/maps/search/180+-+182+B%C3%A0+Tri%E1%BB%87u/@21.0159523,105.84914789999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,So 3 Hang Muoi (Owner),,https://lh3.ggpht.com/p/AB5caB95Kc3oN286IOHVM_9kS3okU_7ll_6qvevb_-wXUExIdDmoghtqxowMpNafF_Xur0E_Vf7kvqhJ9rmYnm1LECI7dI8gvQaRySvzc4brHkRxgWJLcGvmKgI3WQKW0GJoRH18ZlGH=s1024,Bus stop,Bus stop,,,Open All Days,"3 P. Hang Muoi, Pho co Ha Noi, Hoan Kiem, Ha Noi","airport, price, 2019, google maps, coffee, worry, number, 2023",https://www.google.com/maps/place/S%E1%BB%91+3+H%C3%A0ng+Mu%E1%BB%91i/data=!4m7!3m6!1s0x3135abc0c2a6fa6d:0x4a9095f610346f26!8m2!3d21.0345778!4d105.8546762!16s%2Fg%2F1thqd6yw!19sChIJbfqmwsCrNTERJm80EPaVkEo?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ8V3X88CrNTERHEBu6PLTyPw,54 Nguyen Huu Huan,,,15,4.2,"Name: 30-32 Trang Tien +Link: https://www.google.com/maps/search/30-32+Tr%C3%A0ng+Ti%E1%BB%81n/@21.024805,105.855564?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: 54 Ly Thuong Kiet +Link: https://www.google.com/maps/search/54+L%C3%BD+Th%C6%B0%E1%BB%9Dng+Ki%E1%BB%87t/@21.0248496,105.8455511?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Thu Vien Ha Noi - 54E Tran Hung Dao +Link: https://www.google.com/maps/search/Th%C6%B0+Vi%E1%BB%87n+H%C3%A0+N%E1%BB%99i+-+54E+Tr%E1%BA%A7n+H%C6%B0ng+%C4%90%E1%BA%A1o/@21.021476999999997,105.85077299999999?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Ha Noi Tran Nguyen Han +Link: https://www.google.com/maps/search/H%C3%A0+N%E1%BB%99i+Tr%E1%BA%A7n+Nguy%C3%AAn+H%C3%A3n/@21.0289189,105.8566675?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Qua Nga 4 Trung Van - To Huu 100M +Link: https://www.google.com/maps/search/Qua+Ng%C3%A3+4+Trung+V%C4%83n+-+T%E1%BB%91+H%E1%BB%AFu+100M/@20.9916766,105.78512200000002?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",http://timbus.vn/,438436393,,54 Nguyen Huu Huan (Owner),,https://lh3.ggpht.com/p/AB5caB9T35I3jgNY_YP8JbhQtgvsnIaMIP0huj78MnzVBgLY355pwjzZYowcVavB4shJ5carwoGcAHJm8_pUIs80TA-cVO1GcT_l_M8T7UhkMKLuJW0t_ff2KrOMkjWqBFTyi_VVPt0=s1024,Bus stop,Bus stop,,,Open All Days,"Old Quarter, Ly Thai To, Hoan Kiem, Hanoi",,https://www.google.com/maps/place/54+Nguy%E1%BB%85n+H%E1%BB%AFu+Hu%C3%A2n/data=!4m7!3m6!1s0x3135abc0f3d75df1:0xfcc8d3f2e86e401c!8m2!3d21.0334629!4d105.854363!16s%2Fg%2F119tvcjfb!19sChIJ8V3X88CrNTERHEBu6PLTyPw?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJddLHJxOtNTERcO_MzfAWc5M,Bai xe nha Nghe,,,0,0,"Name: Bai xe Hang Nga +Link: https://www.google.com/maps/search/B%C3%A3i+xe+H%E1%BA%B1ng+Nga/@20.9721098,105.865428?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe Dong Xa 2 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+%C4%90%E1%BB%93ng+Xa+2/@20.983598699999998,105.8718431?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Xe Sang Man +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+Sang+Man/@20.9839067,105.8627039?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe TNC Tam Trinh +Link: https://www.google.com/maps/search/B%C3%A3i+xe+TNC+Tam+Trinh/@20.96531,105.858705?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai xe nha Nghe (Owner),,https://lh3.ggpht.com/p/AB5caB8TLCDgwXlxxko9MASlHLk4rztcpDZ4F5kX23o5F4GLyMzUFW7Mu3EimESRmIX3Cr9dPLKFXe_EeLiN1JMQkrWW0dbXzabakVIL4FVU34rApFGIPQ11Fv76XRJylTotKnAjjyV8=s1024,Parking lot,Parking lot,,,Open All Days,"409 D. Tam Trinh, Hoang Van Thu, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+nh%C3%A0+Ngh%C3%A9/data=!4m7!3m6!1s0x3135ad1327c7d275:0x937316f0cdccef70!8m2!3d20.9851495!4d105.8637127!16s%2Fg%2F11sj9ty3mw!19sChIJddLHJxOtNTERcO_MzfAWc5M?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ73_8_J-rNTERe-gp-5t2yCk,Kim Ma (Nha Cho BRT Kim Ma) - Bien Truoc,,,0,0,"Name: Kim Ma Bus Ticket Booth +Link: https://www.google.com/maps/search/Kim+Ma+Bus+Ticket+Booth/@21.032148499999998,105.82930259999999?authuser=0&hl=en&entry=ttu +Reviews: 82 reviews + +Name: (A) Kim Ma (Toa Nha PTA Kim Ma) +Link: https://www.google.com/maps/search/(A)+Kim+M%C3%A3+(T%C3%B2a+Nh%C3%A0+PTA+Kim+M%C3%A3)/@21.032013,105.82943999999999?authuser=0&hl=en&entry=ttu +Reviews: 53 reviews + +Name: 240 Kim Ma +Link: https://www.google.com/maps/search/240+Kim+M%C3%A3/@21.0317,105.8240333?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Kim Ma (Nha Cho BRT Kim Ma) - Bien Sau +Link: https://www.google.com/maps/search/Kim+M%C3%A3+(Nh%C3%A0+Ch%E1%BB%9D+BRT+Kim+M%C3%A3)+-+Bi%E1%BB%83n+Sau/@21.031907399999998,105.8296184?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Ben xe Kim Ma +Link: https://www.google.com/maps/search/B%E1%BA%BFn+xe+Kim+M%C3%A3/@21.03223,105.8288695?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,,Kim Ma (Nha Cho BRT Kim Ma) - Bien Truoc (Owner),,https://lh3.ggpht.com/p/AB5caB-IH4OkMiasyR9xAnY_eNQ5S7m3vEsU9MTqYC1aqZrCRvUmFYJmfmypB38rF7fc1oIOpWTEBPzSCORv7U5s8-4pxm-O5S1LzmvoplbXuzOCMIcyrp-Q1HUfKVpP3MPUeRnvQG8=s1024,Bus stop,Bus stop,,,Open All Days,"Kim Ma, Ba Dinh, Hanoi",,https://www.google.com/maps/place/Kim+M%C3%A3+%28Nh%C3%A0+Ch%E1%BB%9D+BRT+Kim+M%C3%A3%29+-+Bi%E1%BB%83n+Tr%C6%B0%E1%BB%9Bc/data=!4m7!3m6!1s0x3135ab9ffcfc7fef:0x29c8769bfb29e87b!8m2!3d21.0320509!4d105.8291609!16s%2Fg%2F11pq9nlsd8!19sChIJ73_8_J-rNTERe-gp-5t2yCk?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJVZmYNPStNTEREIhv87F9rbw,Music box,,,11,3.2,"Name: Muzic Box Nam Dong, Music Box Nam Dong +Link: https://www.google.com/maps/search/Muzic+Box+Nam+%C4%90%E1%BB%93ng%2C+Music+Box+Nam+%C4%90%E1%BB%93ng/@21.013769399999997,105.8334325?authuser=0&hl=en&entry=ttu +Reviews: 453 reviews + +Name: Muzic box kinh te quoc dan, Music box, Karaoke box, Music Box KTQD +Link: https://www.google.com/maps/search/Muzic+box+kinh+t%E1%BA%BF+qu%E1%BB%91c+d%C3%A2n%2C+Music+box%2C+Karaoke+box%2C+Music+Box+KTQD/@20.998650200000004,105.84758989999999?authuser=0&hl=en&entry=ttu +Reviews: 249 reviews + +Name: Music Box Truong Chinh +Link: https://www.google.com/maps/search/Music+Box+Tr%C6%B0%E1%BB%9Dng+Chinh/@21.0023511,105.82218139999999?authuser=0&hl=en&entry=ttu +Reviews: 114 reviews + +Name: Music Box Pho Vong +Link: https://www.google.com/maps/search/Music+Box+Ph%E1%BB%91+V%E1%BB%8Dng/@20.992549,105.8414246?authuser=0&hl=en&entry=ttu +Reviews: 60 reviews + +Name: BEATBOX VIETNAM - MUSICBOX +Link: https://www.google.com/maps/search/BEATBOX+VIETNAM+-+MUSICBOX/@21.0043309,105.82932389999999?authuser=0&hl=en&entry=ttu +Reviews: 25 reviews",,,1,Music box (Owner),,,Parking lot,Parking lot,,,Open All Days,"79B, Ngo Tu Do, Dai La, Phuong Dong Tam, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/Music+box/data=!4m7!3m6!1s0x3135adf434989955:0xbcad7db1f36f8810!8m2!3d20.998556!4d105.847613!16s%2Fg%2F11v0z1w2xg!19sChIJVZmYNPStNTEREIhv87F9rbw?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ-UT_X6erNTERLGbhvJ3i3d8,Cong Vien Bach Thao - Hoang Hoa Tham (Qua Pho Ngoc Ha),,,1,4,"Name: Cong Vien Bach Thao +Link: https://www.google.com/maps/search/C%C3%B4ng+Vi%C3%AAn+B%C3%A1ch+Th%E1%BA%A3o/@21.0411906,105.830403?authuser=0&hl=en&entry=ttu +Reviews: 30 reviews + +Name: Ho tron Bach Thao +Link: https://www.google.com/maps/search/H%E1%BB%93+tr%C3%B2n+B%C3%A1ch+Th%E1%BA%A3o/@21.0401576,105.8304151?authuser=0&hl=en&entry=ttu +Reviews: 25 reviews + +Name: 741-743 Hoang Hoa Tham +Link: https://www.google.com/maps/search/741-743+Ho%C3%A0ng+Hoa+Th%C3%A1m/@21.0474495,105.80647429999999?authuser=0&hl=en&entry=ttu +Reviews: 21 reviews + +Name: Cong Vien Bach Thao - Hoang Hoa Tham (Doi Dien Truong THCS Chu Van An) +Link: https://www.google.com/maps/search/C%C3%B4ng+Vi%C3%AAn+B%C3%A1ch+Th%E1%BA%A3o+-+Ho%C3%A0ng+Hoa+Th%C3%A1m+(%C4%90%E1%BB%91i+Di%E1%BB%87n+Tr%C6%B0%E1%BB%9Dng+THCS+Chu+V%C4%83n+An)/@21.0418383,105.83302069999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Transportation Cooperative 27/7 +Link: https://www.google.com/maps/search/Transportation+Cooperative+27%2F7/@21.0435373,105.8141041?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,,Cong Vien Bach Thao - Hoang Hoa Tham (Qua Pho Ngoc Ha) (Owner),,https://lh3.ggpht.com/p/AB5caB9_8FkBJWWHfgm1QArvg0EGCr6ssDPiyJQhQtfs6iliFFKjHaH12WXM-Ot8R4wdnvPvdvr49xd_wzu4v-R5SIMO3vm43x5idJgIdFmD_7aUJAdKwHiuFj-2EKgQ3qp1uEneJVK4=s1024,Bus stop,Bus stop,,,Open All Days,"Ngoc Ha, Ba Dinh, Hanoi",,https://www.google.com/maps/place/C%C3%B4ng+Vi%C3%AAn+B%C3%A1ch+Th%E1%BA%A3o+-+Ho%C3%A0ng+Hoa+Th%C3%A1m+%28Qua+Ph%E1%BB%91+Ng%E1%BB%8Dc+H%C3%A0%29/data=!4m7!3m6!1s0x3135aba75fff44f9:0xdfdde29dbce1662c!8m2!3d21.0398262!4d105.8291098!16s%2Fg%2F11r7vzyp9r!19sChIJ-UT_X6erNTERLGbhvJ3i3d8?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJGwsqNfWsNTERZvt2WGhfqBk,Bai Do Xe So 2 Dinh Cong,,,17,4.2,"Name: Bai gui xe so 1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+s%E1%BB%91+1/@20.987584599999998,105.8314704?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.9865449,105.8308979?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4/@20.9826099,105.8278894?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0912 910 661,1,Bai Do Xe So 2 Dinh Cong (Owner),,https://lh3.ggpht.com/p/AB5caB8T-hJrfhiSv3t_P56PLtPLebBNVcaV26f2CPO_RVeXGlRjk-QT2KRe8_Vq9uelLxBmFKq-eliGwvxO3nteKDk6xps7gz2uig8wk0Zhm4k-PCttVO8WcZyKoS6Q9qrIY5qKoSihNw=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"Dinh Cong Car Parking No 2, Pho P. Tran Dien, Dinh Cong, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%97+Xe+S%E1%BB%91+2+%C4%90%E1%BB%8Bnh+C%C3%B4ng/data=!4m7!3m6!1s0x3135acf5352a0b1b:0x19a85f685876fb66!8m2!3d20.986452!4d105.8273795!16s%2Fg%2F11c4twmw8j!19sChIJGwsqNfWsNTERZvt2WGhfqBk?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJD-5EwHSsNTERceHTO-1iw7g,263 Thanh Nhan,,,12,4.3,"Name: 170 - 172 Le Thanh Nghi +Link: https://www.google.com/maps/search/170+-+172+L%C3%AA+Thanh+Ngh%E1%BB%8B/@21.0018916,105.84418199999999?authuser=0&hl=en&entry=ttu +Reviews: 29 reviews + +Name: 18, 26 +Link: https://www.google.com/maps/search/18%2C+26/@21.0028592,105.8528279?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Gan Chung Cu A3B (So 92) Thanh Nhan +Link: https://www.google.com/maps/search/G%E1%BA%A7n+Chung+C%C6%B0+A3B+(S%E1%BB%91+92)+Thanh+Nh%C3%A0n/@21.0030082,105.85311670000002?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Qua Cong Benh Vien Thanh Nhan 50M - 42 Thanh Nhan +Link: https://www.google.com/maps/search/Qua+C%E1%BB%95ng+B%E1%BB%87nh+Vi%E1%BB%87n+Thanh+Nh%C3%A0n+50M+-+42+Thanh+Nh%C3%A0n/@21.0028941,105.85923330000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: 33 - 35 Thanh Nhan - Doi Dien Benh Vien Thanh Nhan +Link: https://www.google.com/maps/search/33+-+35+Thanh+Nh%C3%A0n+-+%C4%90%E1%BB%91i+Di%E1%BB%87n+B%E1%BB%87nh+Vi%E1%BB%87n+Thanh+Nh%C3%A0n/@21.0027404,105.85921499999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,263 Thanh Nhan (Owner),,https://lh3.ggpht.com/p/AB5caB-RaKrlHmfZtfBhWMicI5GywS289BfXSj4CwRaIFQ7VUIbetcC4k5ihWHRfWj_sMPuGPzmtF1yV-9YroH6levrGSxzmVRJQzNYdJ7UIkCPTCwKffFGvbfVy4BgIHIem4obD8wsnug=s1024,Bus stop,Bus stop,,,Open All Days,"90 P. Thanh Nhan, Bach Mai, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/263+Thanh+Nh%C3%A0n/data=!4m7!3m6!1s0x3135ac74c044ee0f:0xb8c362ed3bd3e171!8m2!3d21.0028866!4d105.8529008!16s%2Fg%2F1tfsdx0h!19sChIJD-5EwHSsNTERceHTO-1iw7g?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJNXzQmHCsNTERvq_h6GVZfLM,Benh Vien Bach Mai - 78 Giai Phong,,,124,4.2,"Name: Bach Mai Hospital +Link: https://www.google.com/maps/search/Bach+Mai+Hospital/@21.0019284,105.84038419999999?authuser=0&hl=en&entry=ttu +Reviews: 705 reviews + +Name: 368-370 Bach Mai +Link: https://www.google.com/maps/search/368-370+B%E1%BA%A1ch+Mai/@21.000446699999998,105.850348?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: 215 Bach Mai +Link: https://www.google.com/maps/search/215+B%E1%BA%A1ch+Mai/@21.004305199999997,105.8511248?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: 216-218 Bach Mai +Link: https://www.google.com/maps/search/216-218+B%E1%BA%A1ch+Mai/@21.003979800000003,105.8509624?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: 327 Bach Mai +Link: https://www.google.com/maps/search/327+B%E1%BA%A1ch+Mai/@21.00102,105.850695?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews",,,,Benh Vien Bach Mai - 78 Giai Phong (Owner),,https://lh3.ggpht.com/p/AB5caB8-B69UJgmYmT2yGI3zKkn9VGGizIL27pZmr-rc6GkQDbwKCPm8bpPO1kuuWbRBUf_i_1oCxZAw5z_4OP1dbSbDgr06VFE_qoAVo25K8pMSOw4wsPRlJrB0jSIrKMr6IkwphZxV6g=s1024,Bus stop,Bus stop,,,Open All Days,"Dong Da, Hanoi",,https://www.google.com/maps/place/B%E1%BB%87nh+Vi%E1%BB%87n+B%E1%BA%A1ch+Mai+-+78+Gi%E1%BA%A3i+Ph%C3%B3ng/data=!4m7!3m6!1s0x3135ac7098d07c35:0xb37c5965e8e1afbe!8m2!3d21.0010301!4d105.8411324!16s%2Fg%2F11n86srb4l!19sChIJNXzQmHCsNTERvq_h6GVZfLM?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJLfsuXXSsNTERrxYKwAz7nnU,60 Le Thanh Nghi,,,4,4.8,"Name: 170 - 172 Le Thanh Nghi +Link: https://www.google.com/maps/search/170+-+172+L%C3%AA+Thanh+Ngh%E1%BB%8B/@21.0018916,105.84418199999999?authuser=0&hl=en&entry=ttu +Reviews: 29 reviews + +Name: 28 Duong Thanh +Link: https://www.google.com/maps/search/28+%C4%90%C6%B0%E1%BB%9Dng+Th%C3%A0nh/@21.0310371,105.84707360000002?authuser=0&hl=en&entry=ttu +Reviews: 10 reviews + +Name: Qua Vien Tin Hoc Phap Ngu 20M - Le Thanh Nghi +Link: https://www.google.com/maps/search/Qua+Vi%E1%BB%87n+Tin+H%E1%BB%8Dc+Ph%C3%A1p+Ng%E1%BB%AF+20M+-+L%C3%AA+Thanh+Ngh%E1%BB%8B/@21.0029237,105.8475496?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Doi Dien 58 Le Thanh Nghi (Qua Nga 4 Le Thanh Nghi - Ta Quang Buu) +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+58+L%C3%AA+Thanh+Ngh%E1%BB%8B+(Qua+Ng%C3%A3+4+L%C3%AA+Thanh+Ngh%E1%BB%8B+-+T%E1%BA%A1+Quang+B%E1%BB%ADu)/@21.003249399999998,105.84870670000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: 95 Le Thanh Nghi (Doi Dien 186 Le Thanh Nghi) +Link: https://www.google.com/maps/search/95+L%C3%AA+Thanh+Ngh%E1%BB%8B+(%C4%90%E1%BB%91i+Di%E1%BB%87n+186+L%C3%AA+Thanh+Ngh%E1%BB%8B)/@21.0017332,105.8438774?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,60 Le Thanh Nghi (Owner),,https://lh3.ggpht.com/p/AB5caB8iC0q-7qcxVPgbmiwcdCxI3e-tJ07LliQVCJufpTKsdXJbp9tpg0EbboZtjLu_2pttL_pNG7te3f9SqbsaDcuriPjlJJsbY-JoKumeBA_moR9rS8aAtlc7jPx3u52DDzpuoDGsVg=s1024,Bus stop,Bus stop,,,Open All Days,"Bach Khoa, Hai Ba Trung District, Hanoi",,https://www.google.com/maps/place/60+L%C3%AA+Thanh+Ngh%E1%BB%8B/data=!4m7!3m6!1s0x3135ac745d2efb2d:0x759efb0cc00a16af!8m2!3d21.0034167!4d105.8485667!16s%2Fg%2F119vr5n1m!19sChIJLfsuXXSsNTERrxYKwAz7nnU?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJUWXoNLirNTERsax2cxcUfgY,E3.1 Diem Trung Chuyen Long Bien,,,45,4,"Name: E1.2 Diem Trung Chuyen Long Bien +Link: https://www.google.com/maps/search/E1.2+%C4%90i%E1%BB%83m+Trung+Chuy%E1%BB%83n+Long+Bi%C3%AAn/@21.0415313,105.84946049999999?authuser=0&hl=en&entry=ttu +Reviews: 87 reviews + +Name: E3.2 Diem Trung Chuyen Long Bien +Link: https://www.google.com/maps/search/E3.2+%C4%90i%E1%BB%83m+Trung+Chuy%E1%BB%83n+Long+Bi%C3%AAn/@21.0412,105.8495167?authuser=0&hl=en&entry=ttu +Reviews: 28 reviews + +Name: E1.4 Diem Trung Chuyen Long Bien +Link: https://www.google.com/maps/search/E1.4+%C4%90i%E1%BB%83m+Trung+Chuy%E1%BB%83n+Long+Bi%C3%AAn/@21.041266699999998,105.8497?authuser=0&hl=en&entry=ttu +Reviews: 15 reviews + +Name: E3.3 Diem Trung Chuyen Long Bien +Link: https://www.google.com/maps/search/E3.3+%C4%90i%E1%BB%83m+Trung+Chuy%E1%BB%83n+Long+Bi%C3%AAn/@21.041341,105.84933600000001?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: E1.1 Diem Trung Chuyen Long Bien +Link: https://www.google.com/maps/search/E1.1+%C4%90i%E1%BB%83m+Trung+Chuy%E1%BB%83n+Long+Bi%C3%AAn/@21.041493,105.8494657?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews",,,,E3.1 Diem Trung Chuyen Long Bien (Owner),,https://lh3.ggpht.com/p/AB5caB_KElE4U9Q2QhJ77ltIODhfNybS1E0DDvzKaBGsripypfXMivndhiGGYonNlt5QIAN0mfiKEIZUO-dvnpSjaM4nWXzJwKOIeEhQs0jTy3kiF3uoY-vS7P1MFn94wF4ru3B3aXVBJQ=s1024,Bus stop,Bus stop,,,Open All Days,"Nguyen Trung Truc, Ba Dinh, Hanoi",airport,https://www.google.com/maps/place/E3.1+%C4%90i%E1%BB%83m+Trung+Chuy%E1%BB%83n+Long+Bi%C3%AAn/data=!4m7!3m6!1s0x3135abb834e86551:0x67e14177376acb1!8m2!3d21.0411118!4d105.849618!16s%2Fg%2F1thnl7m7!19sChIJUWXoNLirNTERsax2cxcUfgY?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJPw42_ZKrNTEROD7sk_GKCBQ,58B Ba Trieu,,,6,4.2,"Name: 22B Hai Ba Trung +Link: https://www.google.com/maps/search/22B+Hai+B%C3%A0+Tr%C6%B0ng/@21.024086999999998,105.8536307?authuser=0&hl=en&entry=ttu +Reviews: 20 reviews + +Name: 92-94 Ba Trieu +Link: https://www.google.com/maps/search/92-94+B%C3%A0+Tri%E1%BB%87u/@21.0192062,105.8493922?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: 25A-25B Pho Hue - Hang Bai - Hoan Kiem +Link: https://www.google.com/maps/search/25A-25B+Ph%E1%BB%91+Hu%E1%BA%BF+-+H%C3%A0ng+B%C3%A0i+-+Ho%C3%A0n+Ki%E1%BA%BFm/@21.0187945,105.8517851?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: 08, 31, 35, 38 +Link: https://www.google.com/maps/search/08%2C+31%2C+35%2C+38/@21.015871900000004,105.8491006?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: 180 - 182 Ba Trieu +Link: https://www.google.com/maps/search/180+-+182+B%C3%A0+Tri%E1%BB%87u/@21.0159523,105.84914789999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,58B Ba Trieu (Owner),,https://lh3.ggpht.com/p/AB5caB-lqsog5ElXwYmPY0HvQuWBsKXMQXutm3EnocaNocjlV8InSTh8Ls2ZXwD-TIsQ2CI40hpyktl-CQUpdtl6POjEmi_BQQL5_njHqk1c4iJnLW3iy3f6mxz_QQlNm2OJhRPPFVFQ=s1024,Bus stop,Bus stop,,,Open All Days,"58B P. Ba Trieu, Tran Hung Dao, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/58B+B%C3%A0+Tri%E1%BB%87u/data=!4m7!3m6!1s0x3135ab92fd360e3f:0x14088af193ec3e38!8m2!3d21.0220545!4d105.8503593!16s%2Fg%2F1tdgrwm1!19sChIJPw42_ZKrNTEROD7sk_GKCBQ?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJ2eOmu8utNTERJF2ptkp1M1U,Highlands Coffee,,,1158,4.2,"Name: KOHIBITO Tran Dai Nghia +Link: https://www.google.com/maps/search/KOHIBITO+Tr%E1%BA%A7n+%C4%90%E1%BA%A1i+Ngh%C4%A9a/@21.001014,105.8455084?authuser=0&hl=en&entry=ttu +Reviews: 215 reviews + +Name: Highland Coffee Vincom Pham Ngoc Thach +Link: https://www.google.com/maps/search/Highland+Coffee+Vincom+Ph%E1%BA%A1m+Ng%E1%BB%8Dc+Th%E1%BA%A1ch/@21.005978199999998,105.8320562?authuser=0&hl=en&entry=ttu +Reviews: 131 reviews + +Name: Highland coffee +Link: https://www.google.com/maps/search/Highland+coffee/@21.029612099999998,105.84167389999999?authuser=0&hl=en&entry=ttu +Reviews: 36 reviews + +Name: The Copa Coffee +Link: https://www.google.com/maps/search/The+Copa+Coffee/@21.0066387,105.84547069999999?authuser=0&hl=en&entry=ttu +Reviews: 26 reviews + +Name: Highland Coffee +Link: https://www.google.com/maps/search/Highland+Coffee/@21.011067699999998,105.84948329999999?authuser=0&hl=en&entry=ttu +Reviews: 14 reviews",https://www.highlandscoffee.com.vn/,024 7300 1558,,Highlands Coffee (Owner),https://www.google.com/maps/contrib/109729433213192692075,https://lh3.ggpht.com/p/AB5caB91Wm8UFynbKsY7FU-8xR5dSqwKXI0iPJOer5pwsP7VdclPr_eV4AGc_djfQUEq7I0sYQK49_DW1yWe2KXjSAhIUj99VaoQq9DKhGBwWRUsZeORdQop5KWGHiSS2bQoOOzot8P7Wg=s1024,Coffee shop,Coffee shop,7 AM-11 PM,,Open All Days,"91 P. Tran Dai Nghia, Bach Khoa, Hai Ba Trung, Ha Noi",university,https://www.google.com/maps/place/Highlands+Coffee/data=!4m7!3m6!1s0x3135adcbbba6e3d9:0x5533754ab6a95d24!8m2!3d21.0048458!4d105.8459008!16s%2Fg%2F11fd3m0qwq!19sChIJ2eOmu8utNTERJF2ptkp1M1U?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJK1tojT2tNTERYA9fJpny5FM,Bai Do Xe 195 Dinh Cong Ha,"Nhan trong xe o to, bai xe co mai che mo 24/24",,2,3,"Name: Bai gui xe so 1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+s%E1%BB%91+1/@20.987584599999998,105.8314704?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai 24/2 +Link: https://www.google.com/maps/search/B%C3%A3i+24%2F2/@20.9831403,105.8303121?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe Cong vien Thanh Xuan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+C%C3%B4ng+vi%C3%AAn+Thanh+Xu%C3%A2n/@21.004293699999998,105.79618870000002?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0975 603 553,,Bai Do Xe 195 Dinh Cong Ha (Owner),https://www.google.com/maps/contrib/112161675954824910059,https://lh3.ggpht.com/p/AF1QipPQ8S4V7As0LIiVle1SxEvwijgOQPveYvjAujFv=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"195 Dinh Cong Ha, Dinh Cong, Hoang Mai, Ha Noi 100000",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%97+Xe+195+%C4%90%E1%BB%8Bnh+C%C3%B4ng+H%E1%BA%A1/data=!4m7!3m6!1s0x3135ad3d8d685b2b:0x53e4f299265f0f60!8m2!3d20.9828599!4d105.8254294!16s%2Fg%2F11g0g6bjqy!19sChIJK1tojT2tNTERYA9fJpny5FM?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJqRzMpAWtNTER9iyHJ2RO1K8,Samsung Bus Stop Nguyen Trai,,,3,4,"Name: Diem don Bus SDV +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%91%C3%B3n+Bus+SDV/@20.9951288,105.8086063?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Ha Noi San van dong Thuong Dinh +Link: https://www.google.com/maps/search/H%C3%A0+N%E1%BB%99i+S%C3%A2n+v%E1%BA%ADn+%C4%91%E1%BB%99ng+Th%C6%B0%E1%BB%A3ng+%C4%90%C3%ACnh/@21.0006566,105.8171964?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Cua hang trai nghiem Samsung 535 Nguyen Trai +Link: https://www.google.com/maps/search/C%E1%BB%ADa+h%C3%A0ng+tr%E1%BA%A3i+nghi%E1%BB%87m+Samsung+535+Nguy%E1%BB%85n+Tr%C3%A3i/@20.9865188,105.7966112?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Dai ly o to Samsung Giai Phong +Link: https://www.google.com/maps/search/%C4%90%E1%BA%A1i+l%C3%BD+%C3%B4+t%C3%B4+Samsung+Gi%E1%BA%A3i+Ph%C3%B3ng/@20.999436499999998,105.8415207?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Nha xe truong Nhan van +Link: https://www.google.com/maps/search/Nh%C3%A0+xe+tr%C6%B0%E1%BB%9Dng+Nh%C3%A2n+v%C4%83n/@20.9950621,105.8068612?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Samsung Bus Stop Nguyen Trai (Owner),,https://lh3.ggpht.com/p/AB5caB_uqcl9qN0AR_NdHOqFDoOZ7mf0I-D8nr8QpoRhOmWsk2IekVsfY85kEJxktWYi1q02MGGZrpwEZa0dfjr4Q7umRU9RmU7FBo_n3xZ7TIK3yq4jt7W3G1_pkAyXsNTj4clahxdR=s1024,Parking lot,Parking lot,,,Open All Days,"255 D. Nguyen Trai, Thuong Dinh, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/Samsung+Bus+Stop+Nguy%E1%BB%85n+Tr%C3%A3i/data=!4m7!3m6!1s0x3135ad05a4cc1ca9:0xafd44e6427872cf6!8m2!3d20.9947607!4d105.808261!16s%2Fg%2F11gmfw0f0h!19sChIJqRzMpAWtNTER9iyHJ2RO1K8?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJdcqIDSqtNTERkypqeQTBJcE,Bai xe Pham Dung,,,0,0,"Name: Bai rua xe Pham Dung +Link: https://www.google.com/maps/search/B%C3%A3i+r%E1%BB%ADa+xe+Ph%E1%BA%A1m+D%C5%A9ng/@20.9746138,105.81887420000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe Kim Giang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Kim+Giang/@20.979834,105.814644?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Kim Van +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Kim+V%C4%83n/@20.9754531,105.82180749999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: So 119 - Ngo 24 Kim Dong - Bai trong giu xe oto +Link: https://www.google.com/maps/search/S%E1%BB%91+119+-+Ng%C3%B5+24+Kim+%C4%90%E1%BB%93ng+-+B%C3%A3i+tr%C3%B4ng+gi%E1%BB%AF+xe+%C3%B4t%C3%B4/@20.979865099999998,105.8429116?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,0979 988 177,,Bai xe Pham Dung (Owner),https://www.google.com/maps/contrib/108530474956333418135,,Parking lot,Parking lot,,,Open All Days,"KDT moi, VIET NAM, Hanoi",,https://www.google.com/maps/place/B%C3%A3i+xe+Ph%E1%BA%A1m+D%C5%A9ng/data=!4m7!3m6!1s0x3135ad2a0d88ca75:0xc125c104796a2a93!8m2!3d20.9745813!4d105.8188736!16s%2Fg%2F11s4t4z078!19sChIJdcqIDSqtNTERkypqeQTBJcE?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJm68vqn6vNTERT54yO6swyWs,Bai Gui Xe so 16 ngo 296,,,2,4.5,"Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai rua xe do xe +Link: https://www.google.com/maps/search/B%C3%A3i+r%E1%BB%ADa+xe+%C4%91%E1%BB%97+xe/@20.9834615,105.8704131?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: So 119 - Ngo 24 Kim Dong - Bai trong giu xe oto +Link: https://www.google.com/maps/search/S%E1%BB%91+119+-+Ng%C3%B5+24+Kim+%C4%90%E1%BB%93ng+-+B%C3%A3i+tr%C3%B4ng+gi%E1%BB%AF+xe+%C3%B4t%C3%B4/@20.979865099999998,105.8429116?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Thinh Liet +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Th%E1%BB%8Bnh+Li%E1%BB%87t/@20.971021699999998,105.8483868?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0966 018 023,1,Bai Gui Xe so 16 ngo 296 (Owner),,,Parking lot,Parking lot,,,Open All Days,"16 Ngo 296 Linh Nam, Linh Nam, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe+s%E1%BB%91+16+ng%C3%B5+296/data=!4m7!3m6!1s0x3135af7eaa2faf9b:0x6bc930ab3b329e4f!8m2!3d20.9798947!4d105.8790592!16s%2Fg%2F11qrhmjvfg!19sChIJm68vqn6vNTERT54yO6swyWs?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJv833gpSrNTEROHnjWvzfuvI,37 Hai Ba Trung - Benh Vien Viet Nam Cu Ba,,,1,4,"Name: 22B Hai Ba Trung +Link: https://www.google.com/maps/search/22B+Hai+B%C3%A0+Tr%C6%B0ng/@21.024086999999998,105.8536307?authuser=0&hl=en&entry=ttu +Reviews: 20 reviews + +Name: 368-370 Bach Mai +Link: https://www.google.com/maps/search/368-370+B%E1%BA%A1ch+Mai/@21.000446699999998,105.850348?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: 49 Hai Ba Trung - Thap Ha Noi +Link: https://www.google.com/maps/search/49+Hai+B%C3%A0+Tr%C6%B0ng+-+Th%C3%A1p+H%C3%A0+N%E1%BB%99i/@21.0259599,105.84664640000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Doi Dien Thap Ha Noi - Hai Ba Trung (Canh 56 Hai Ba Trung) +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+Th%C3%A1p+H%C3%A0+N%E1%BB%99i+-+Hai+B%C3%A0+Tr%C6%B0ng+(C%E1%BA%A1nh+56+Hai+B%C3%A0+Tr%C6%B0ng)/@21.026183000000003,105.846402?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Benh Vien Viet Duc - Doi Dien So 10 Quan Su +Link: https://www.google.com/maps/search/B%E1%BB%87nh+Vi%E1%BB%87n+Vi%E1%BB%87t+%C4%90%E1%BB%A9c+-+%C4%90%E1%BB%91i+Di%E1%BB%87n+S%E1%BB%91+10+Qu%C3%A1n+S%E1%BB%A9/@21.029367000000004,105.84651300000002?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,37 Hai Ba Trung - Benh Vien Viet Nam Cu Ba (Owner),,https://lh3.ggpht.com/p/AB5caB8zbq5qqdZzLthdjLG-Oigc2mFsUfk8_jnCuQySr-2IKEp68sLWZPyVNyKsk5qkGrXEdIeq-qD71hWhRxLF4IUUJFC41HLlCYddJAwrd4Vsu_ydr_PRbFoW68Q-U2UelGRPRsdP=s1024,Bus stop,Bus stop,,,Open All Days,"Trang Tien, Hoan Kiem, Hanoi",,https://www.google.com/maps/place/37+Hai+B%C3%A0+Tr%C6%B0ng+-+B%E1%BB%87nh+Vi%E1%BB%87n+Vi%E1%BB%87t+Nam+Cu+Ba/data=!4m7!3m6!1s0x3135ab9482f7cdbf:0xf2badffc5ae37938!8m2!3d21.0249324!4d105.8501146!16s%2Fg%2F11n86r3hmf!19sChIJv833gpSrNTEROHnjWvzfuvI?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJt-VLv5qsNTER-OEOw4bglOA,Ha Noi Khu Do Thi Royal City,,,1,4,"Name: 16, 24, 27 +Link: https://www.google.com/maps/search/16%2C+24%2C+27/@21.0149142,105.8054061?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews + +Name: Doi Dien Dai Hoc Ha Noi - Truoc So Nha 521A - 521C Nguyen Trai +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+%C4%90%E1%BA%A1i+H%E1%BB%8Dc+H%C3%A0+N%E1%BB%99i+-+Tr%C6%B0%E1%BB%9Bc+S%E1%BB%91+Nh%C3%A0+521A+-+521C+Nguy%E1%BB%85n+Tr%C3%A3i/@20.9869438,105.7971996?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: So 69A Nguyen Trai +Link: https://www.google.com/maps/search/S%E1%BB%91+69A+Nguy%E1%BB%85n+Tr%C3%A3i/@21.001734499999998,105.818801?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Khu Do Thi Trung Van +Link: https://www.google.com/maps/search/Khu+%C4%90%C3%B4+Th%E1%BB%8B+Trung+V%C4%83n/@20.995540599999998,105.77862839999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Truong THPT Huynh Thuc Khang -129T Nguyen Trai +Link: https://www.google.com/maps/search/Tr%C6%B0%E1%BB%9Dng+THPT+Hu%E1%BB%B3nh+Th%C3%BAc+Kh%C3%A1ng+-129T+Nguy%E1%BB%85n+Tr%C3%A3i/@20.9994628,105.8153686?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Ha Noi Khu Do Thi Royal City (Owner),,https://lh3.ggpht.com/p/AB5caB-_N_f5oHO9fqyyrkuesYHE22VST3933jXgcSuZNuuv6e8w5cX1e-g6tBja3iwLqAFd75PqODF75wo5TlksoS1ySHq3L3_HIIiVXWdqA-mT1XKAGCeaJ6v_As-kLf43zTosM6_h0A=s1024,Bus stop,Bus stop,,,Open All Days,"Thuong Dinh, Thanh Xuan, Hanoi",,https://www.google.com/maps/place/H%C3%A0+N%E1%BB%99i+Khu+%C4%90%C3%B4+Th%E1%BB%8B+Royal+City/data=!4m7!3m6!1s0x3135ac9abf4be5b7:0xe094e086c30ee1f8!8m2!3d21.0005225!4d105.8161358!16s%2Fg%2F11n86rckvt!19sChIJt-VLv5qsNTER-OEOw4bglOA?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJj1-65WGpNTERxMnmAf97f-g,Bai Giu Xe O To Song Thanh,,,4,2.5,"Name: Diem Trong Giu Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4/@21.0532227,105.87825799999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai gui xe o to ngay dem cho Thuong Cat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4+ng%C3%A0y+%C4%91%C3%AAm+ch%E1%BB%A3+Th%C6%B0%E1%BB%A3ng+C%C3%A1t/@21.0589713,105.8889892?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai trong giu xe Duc Minh Phat +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+gi%E1%BB%AF+xe+%C4%90%E1%BB%A9c+Minh+Ph%C3%A1t/@21.036127200000003,105.88069159999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe o to Long Thanh +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4+Long+Th%C3%A0nh/@21.0512581,105.8681483?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Trong Giu Xe O To Ngay Dem +Link: https://www.google.com/maps/search/Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4+Ng%C3%A0y+%C4%90%C3%AAm/@21.04476,105.86789999999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai Giu Xe O To Song Thanh (Owner),,,Parking lot,Parking lot,,,Open All Days,"2VMG+6M3, P. Phu Vien, Bo De, Long Bien, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4+Song+Th%C3%A0nh/data=!4m7!3m6!1s0x3135a961e5ba5f8f:0xe87f7bff01e6c9c4!8m2!3d21.0330216!4d105.8766599!16s%2Fg%2F1tf9vx10!19sChIJj1-65WGpNTERxMnmAf97f-g?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJRzUHJH6rNTER5UowYL2VkWU,Dai Hoc Cong Doan - 169 Tay Son,,,60,4.1,"Name: Trade Union University +Link: https://www.google.com/maps/search/Trade+Union+University/@21.0097381,105.8257124?authuser=0&hl=en&entry=ttu +Reviews: 669 reviews + +Name: Truong Trung cap Nghiep vu va day nghe Cong doan Tp Ha Noi +Link: https://www.google.com/maps/search/Tr%C6%B0%E1%BB%9Dng+Trung+c%E1%BA%A5p+Nghi%E1%BB%87p+v%E1%BB%A5+v%C3%A0+d%E1%BA%A1y+ngh%E1%BB%81+C%C3%B4ng+%C4%91o%C3%A0n+Tp+H%C3%A0+N%E1%BB%99i/@21.007318599999998,105.82321979999999?authuser=0&hl=en&entry=ttu +Reviews: 15 reviews + +Name: San tennis Dai hoc Cong Doan +Link: https://www.google.com/maps/search/S%C3%A2n+tennis+%C4%90%E1%BA%A1i+h%E1%BB%8Dc+C%C3%B4ng+%C4%90o%C3%A0n/@21.009443599999997,105.8266757?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Thu vien nha T Truong Dai hoc Cong Doan +Link: https://www.google.com/maps/search/Th%C6%B0+vi%E1%BB%87n+nh%C3%A0+T+Tr%C6%B0%E1%BB%9Dng+%C4%90%E1%BA%A1i+h%E1%BB%8Dc+C%C3%B4ng+%C4%90o%C3%A0n/@21.0099584,105.8264691?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Ky tuc xa 5C Truong Dai hoc Cong doan +Link: https://www.google.com/maps/search/K%C3%BD+t%C3%BAc+x%C3%A1+5C+Tr%C6%B0%E1%BB%9Dng+%C4%90%E1%BA%A1i+h%E1%BB%8Dc+C%C3%B4ng+%C4%91o%C3%A0n/@21.0105716,105.8253129?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Dai Hoc Cong Doan - 169 Tay Son (Owner),,https://lh3.ggpht.com/p/AB5caB-fbsJyIgGoBcjzMUapM3_LlE_nj8LAOtdesb49XbknAMAR669yyjQF_sUG68Z5cMNcZZb1aQIg97_Idt9VZa8acpmaBSE20-NFmN7GuOQzTUBB-9X88UISIYr-tRakyha_9aju1A=s1024,Bus stop,Bus stop,,,Open All Days,"169 Tay Son Quang Trung, Dong Da Ha Noi, Viet Nam",,https://www.google.com/maps/place/%C4%90%E1%BA%A1i+H%E1%BB%8Dc+C%C3%B4ng+%C4%90o%C3%A0n+-+169+T%C3%A2y+S%C6%A1n/data=!4m7!3m6!1s0x3135ab7e24073547:0x659195bd60304ae5!8m2!3d21.0104557!4d105.8253665!16s%2Fg%2F1tw1b982!19sChIJRzUHJH6rNTER5UowYL2VkWU?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJwZNV-NirNTERqyjTC5kWrUw,Trung Tam Lop & Ac Quy Minh Phat Hai Ba Trung,"1. Linh vuc hoat dong: Kinh doanh san pham va dich vu lop, ac quy va phu tung o to. + +. Phan phoi san pham: +- Lop xe: lop xe con, lop xe du lich, lop xe tai, lop xe nang, xe cong trinh (dac chung). +- Ac quy: Ac quy khoi dong (o to, xe tai, tau thuyen, may phat...), Ac quy luu dien (Tram vien thong, UPS, thiet bi luu dien...) +- Phu kien, thiet bi thay the o to: Gat mua, dau may, nuoc lam mat, nuoc rua kinh, van cam bien, bom cuu ho... +. Dich vu tu van & thay moi +- Lop o to: thay moi, cuu ho lop xe tan noi noi thanh Ha Noi, Can chinh do chum, thuoc lai cho xe, can bang dong, bom khi nito cho lop. +- Ac quy o to: thay moi tan noi, cuu ho cau no ac quy tai noi thanh Ha Noi. +- Dich vu thay lap: dau may, nuoc lam mat, gat mua, van cam bien.",,9,4.9,"Name: Lop Hung Long +Link: https://www.google.com/maps/search/L%E1%BB%91p+H%C3%B9ng+Long/@20.958772,105.7906411?authuser=0&hl=en&entry=ttu +Reviews: 18 reviews + +Name: Lop Tu Luc - 38 Hoang Cau: Lop - acquy - thay dau +Link: https://www.google.com/maps/search/L%E1%BB%91p+T%E1%BB%B1+L%C6%B0c+-+38+Ho%C3%A0ng+C%E1%BA%A7u%3A+L%E1%BB%91p+-+acquy+-+thay+d%E1%BA%A7u/@21.0157267,105.82024179999999?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Cua Hang Lop O To Quang Huy +Link: https://www.google.com/maps/search/C%E1%BB%ADa+H%C3%A0ng+L%E1%BB%91p+%C3%94+T%C3%B4+Quang+Huy/@21.030632999999998,105.85668?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Lop o to Tstation +Link: https://www.google.com/maps/search/L%E1%BB%91p+%C3%B4+t%C3%B4+Tstation/@21.000481699999998,105.8727471?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: DAT LOP +Link: https://www.google.com/maps/search/%C4%90%E1%BA%A0T+L%E1%BB%90P/@21.0087851,105.85541649999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",https://congtyminhphat.vn/,0944 972 266,,Trung Tam Lop & Ac Quy Minh Phat Hai Ba Trung (Owner),https://www.google.com/maps/contrib/106742821716157940484,https://lh3.ggpht.com/p/AF1QipN-L1PmyjpCn-qZJ-AmkJFB9Zb3eo0WPAbld-Xs=s1024,Wheel store,"Wheel store, Auto repair shop, Car accessories store, Parking garage, Tire service",7:30 AM-6 PM,,Open All Days,"26 P. Lang Yen, Thanh Luong, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/Trung+T%C3%A2m+L%E1%BB%91p+%26+%E1%BA%AEc+Quy+Minh+Ph%C3%A1t+Hai+B%C3%A0+Tr%C6%B0ng/data=!4m7!3m6!1s0x3135abd8f85593c1:0x4cad16990bd328ab!8m2!3d21.0093216!4d105.8663596!16s%2Fg%2F11wg456jrk!19sChIJwZNV-NirNTERqyjTC5kWrUw?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJFbQmMHesNTERiveJOGGLm0k,Hanoi University of Civil Engineering,Dai hoc Xay Dung la mot trong nhung ngoi truong doi dau o Ha Noi,,1639,4.5,"Name: National Economics University +Link: https://www.google.com/maps/search/National+Economics+University/@21.0000942,105.84249919999999?authuser=0&hl=en&entry=ttu +Reviews: 2655 reviews + +Name: Hanoi University Of Culture +Link: https://www.google.com/maps/search/Hanoi+University+Of+Culture/@21.023450099999998,105.8225669?authuser=0&hl=en&entry=ttu +Reviews: 773 reviews + +Name: Hanoi University of Science and Technology +Link: https://www.google.com/maps/search/Hanoi+University+of+Science+and+Technology/@21.0061832,105.84313069999999?authuser=0&hl=en&entry=ttu +Reviews: 691 reviews + +Name: VNU University of Engineering and Technology +Link: https://www.google.com/maps/search/VNU+University+of+Engineering+and+Technology/@21.038238399999997,105.782679?authuser=0&hl=en&entry=ttu +Reviews: 615 reviews + +Name: Thu Vien Dai hoc Xay Dung +Link: https://www.google.com/maps/search/Th%C6%B0+Vi%E1%BB%87n+%C4%90%E1%BA%A1i+h%E1%BB%8Dc+X%C3%A2y+D%E1%BB%B1ng/@21.0031043,105.84236899999999?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews",http://huce.edu.vn/,024 3869 6397,,Hanoi University of Civil Engineering (Owner),https://www.google.com/maps/contrib/115124478424291302941,https://lh3.ggpht.com/p/AB5caB8RA1xO_SgF_1jj3CNsuVJUjBxt6nRtw1nuAiWzIgGoZFY8onlvyX1aAdL_JNRx5AxMDd_heFc7RUKs2h3VWs0fHF1iiDZp9VXbFoho4UDKWjxR227Y5O1FkYrmsjLq6aivREc=s1024,University,University,8 AM-5 PM,,"Saturday, Sunday","55 D. Giai Phong, Dong Tam, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/Hanoi+University+of+Civil+Engineering/data=!4m7!3m6!1s0x3135ac773026b415:0x499b8b613889f78a!8m2!3d21.0033135!4d105.8433207!16s%2Fm%2F09gpvp0!19sChIJFbQmMHesNTERiveJOGGLm0k?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJwaY-C7-tNTERHrcg2w9AgYg,Bai do xe,,,1,4,"Name: Bai gui xe HH +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+HH/@20.962063600000004,105.8285465?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai rua xe do xe +Link: https://www.google.com/maps/search/B%C3%A3i+r%E1%BB%ADa+xe+%C4%91%E1%BB%97+xe/@20.9834615,105.8704131?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,Bai do xe (Owner),,https://lh3.ggpht.com/p/AB5caB_mwZT8RGe-fVjWogmrH6P7IGYf3S-palhtGF9oP5wEs0MV7UTyKiGkFn-rU3kcKYg5pReLVdrEZF9HXJUDmmuG8CjIhAVeLoCE_BYXIFUBMZaTI1WDTAcafbwCMeTF00ne_rt0uw=s1024,Parking lot,Parking lot,,,Open All Days,"XR8F+9HJ, Hoang Liet, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe/data=!4m7!3m6!1s0x3135adbf0b3ea6c1:0x8881400fdb20b71e!8m2!3d20.965961!4d105.8238765!16s%2Fg%2F11ffm06pg6!19sChIJwaY-C7-tNTERHrcg2w9AgYg?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJq8z3ERitNTERyzTPbzTXJwU,Bai do xe Dai Thanh,,,5,4.8,"Name: Bai do xe o to TC5 +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4+TC5/@20.9690679,105.798014?authuser=0&hl=en&entry=ttu +Reviews: 35 reviews + +Name: Bai Do Xe So 2 Dinh Cong +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+S%E1%BB%91+2+%C4%90%E1%BB%8Bnh+C%C3%B4ng/@20.986452,105.82737949999999?authuser=0&hl=en&entry=ttu +Reviews: 17 reviews + +Name: Bai do xe yen xa +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+y%C3%AAn+x%C3%A1/@20.968992699999998,105.79845519999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",http://kientrucvietas.com/,,1,Bai do xe Dai Thanh (Owner),,https://lh3.ggpht.com/p/AB5caB_RidmcL1iZMCbdTeFyTToVrHo92Mc4z7kUXm-89lz2m_Jvo9zkguGKeuIztFmEpKyGtqab1jKHt_OgrGVDbRe9HdxnHGww4B_8tIsse_ip8dz3Cxs_yELYD9s5UTsRySPd3AH0=s1024,Parking lot,Parking lot,12 AM-11:30 PM,,Open All Days,"Cau Huu Hoa, Ta Thanh Oai, Thanh Tri, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+%C4%90%E1%BA%A1i+Thanh/data=!4m7!3m6!1s0x3135ad1811f7ccab:0x527d7346fcf34cb!8m2!3d20.954767!4d105.8068271!16s%2Fg%2F11b7q0b4w7!19sChIJq8z3ERitNTERyzTPbzTXJwU?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJq_BLKXGsNTER2qkEXg7S4sc,Hanoi University of Science and Technology,,,691,4.4,"Name: Truong Dai hoc Khoa hoc va Cong nghe Ha Noi (USTH) +Link: https://www.google.com/maps/search/Tr%C6%B0%E1%BB%9Dng+%C4%90%E1%BA%A1i+h%E1%BB%8Dc+Khoa+h%E1%BB%8Dc+v%C3%A0+C%C3%B4ng+ngh%E1%BB%87+H%C3%A0+N%E1%BB%99i+(USTH)/@21.048081699999997,105.80123619999999?authuser=0&hl=en&entry=ttu +Reviews: 222 reviews + +Name: School of International Education +Link: https://www.google.com/maps/search/School+of+International+Education/@21.004034,105.844867?authuser=0&hl=en&entry=ttu +Reviews: 152 reviews + +Name: Truong Dien - Dien tu, DHBK Ha Noi +Link: https://www.google.com/maps/search/Tr%C6%B0%E1%BB%9Dng+%C4%90i%E1%BB%87n+-+%C4%90i%E1%BB%87n+t%E1%BB%AD%2C+%C4%90HBK+H%C3%A0+N%E1%BB%99i/@21.0057802,105.84191899999999?authuser=0&hl=en&entry=ttu +Reviews: 31 reviews + +Name: School of Chemical Engineering +Link: https://www.google.com/maps/search/School+of+Chemical+Engineering/@21.006204999999998,105.8441208?authuser=0&hl=en&entry=ttu +Reviews: 28 reviews + +Name: Tuyen sinh Truong Dai hoc Bach Khoa Ha Noi +Link: https://www.google.com/maps/search/Tuy%E1%BB%83n+sinh+Tr%C6%B0%E1%BB%9Dng+%C4%90%E1%BA%A1i+h%E1%BB%8Dc+B%C3%A1ch+Khoa+H%C3%A0+N%E1%BB%99i/@21.0090356,105.8509911?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",http://hust.edu.vn/,024 3869 6099,,Hanoi University of Science and Technology (Owner),https://www.google.com/maps/contrib/114711033555396319824,https://lh3.ggpht.com/p/AB5caB_1WQjOn_IuxsrbXOCop3LWun9X-uFMlz6ShgoaKbr949utFlJXfVhnQW7jEemFFQitajheLP_A4x8C_d0rfInICqI_fGDj5ehgJ1vfFwrpwQ_7RJtZublZK8KjbXpU5Aj6Pcnf=s1024,Public university,"Public university, University","8 AM-12 PM, 1-5 PM",,"Saturday, Sunday","1 D. Dai Co Viet, Bach Khoa, Hai Ba Trung, Ha Noi","2023, faculty",https://www.google.com/maps/place/Hanoi+University+of+Science+and+Technology/data=!4m7!3m6!1s0x3135ac71294bf0ab:0xc7e2d20e5e04a9da!8m2!3d21.0061832!4d105.8431307!16s%2Fm%2F027jq68!19sChIJq_BLKXGsNTER2qkEXg7S4sc?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJJSfVZParNTERF8nv43HKMaY,Ngan Hang Cong Thuong Khu Vuc Hai Ba Trung - 285 Tran Khat Chan,,,7,3,"Name: Ngan hang VietinBank +Link: https://www.google.com/maps/search/Ng%C3%A2n+h%C3%A0ng+VietinBank/@21.0038818,105.847607?authuser=0&hl=en&entry=ttu +Reviews: 25 reviews + +Name: Vietinbank - ATM +Link: https://www.google.com/maps/search/Vietinbank+-+ATM/@21.003843699999997,105.8475577?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: VietinBank +Link: https://www.google.com/maps/search/VietinBank/@21.0085878,105.8561357?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: VietinBank CN Hai Ba Trung - QTK so 45 +Link: https://www.google.com/maps/search/VietinBank+CN+Hai+B%C3%A0+Tr%C6%B0ng+-+QTK+s%E1%BB%91+45/@20.9995977,105.8416065?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: VIETINBANK CN Hai Ba Trung +Link: https://www.google.com/maps/search/VIETINBANK+CN+Hai+B%C3%A0+Tr%C6%B0ng/@21.008491499999998,105.85860369999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Ngan Hang Cong Thuong Khu Vuc Hai Ba Trung - 285 Tran Khat Chan (Owner),,https://lh3.ggpht.com/p/AB5caB9d42osZQ4CbvDmvcryIIYA0Xf-Hyb7oLRst2YBTumPvahElgzQ55vIsyd9djGtZc3OpteT_ImcXcaU04neJj2lFdM5p1Ii54JOOuyEXMizFnzvnQkVeAHxgsaBC3t-I6DC7CSXLw=s1024,Bus stop,Bus stop,,,Open All Days,"285 D. Tran Khat Chan, Thanh Nhan, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/Ng%C3%A2n+H%C3%A0ng+C%C3%B4ng+Th%C6%B0%C6%A1ng+Khu+V%E1%BB%B1c+Hai+B%C3%A0+Tr%C6%B0ng+-+285+Tr%E1%BA%A7n+Kh%C3%A1t+Ch%C3%A2n/data=!4m7!3m6!1s0x3135abf664d52725:0xa631ca71e3efc917!8m2!3d21.0088306!4d105.8588333!16s%2Fg%2F1xpwg7rv!19sChIJJSfVZParNTERF8nv43HKMaY?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa +ChIJU3WuPXSsNTER3Di432KhuKw,Bach Khoa Gymnasiums,,,816,4.3,"Name: Hanoi University of Science and Technology (HUST) Stadium +Link: https://www.google.com/maps/search/Hanoi+University+of+Science+and+Technology+(HUST)+Stadium/@21.002194,105.84783209999999?authuser=0&hl=en&entry=ttu +Reviews: 3579 reviews + +Name: San Tennis Bach Khoa +Link: https://www.google.com/maps/search/S%C3%A2n+Tennis+B%C3%A1ch+Khoa/@21.0035851,105.8473439?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: San bong chuyen +Link: https://www.google.com/maps/search/S%C3%A2n+b%C3%B3ng+chuy%E1%BB%81n/@21.0020533,105.8470119?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Lop hoc bong da Tuoi tre Bach Khoa +Link: https://www.google.com/maps/search/L%E1%BB%9Bp+h%E1%BB%8Dc+b%C3%B3ng+%C4%91%C3%A1+Tu%E1%BB%95i+tr%E1%BA%BB+B%C3%A1ch+Khoa/@21.002123299999997,105.84694719999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Cau long Bach Khoa +Link: https://www.google.com/maps/search/C%E1%BA%A7u+l%C3%B4ng+B%C3%A1ch+Khoa/@21.003136100000003,105.8467864?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0943 409 386,1,Bach Khoa Gymnasiums (Owner),,https://lh3.ggpht.com/p/AB5caB_rnu1temr9C21ZmVSBpJoaHqkPaTuRsb75TesXua_K961BH5KC_26rmfKIXuxqzw2CUTOMhqhqkRijqfWvguuxOxyBj-y-2cDYDwee75FKsp4DqGyzBk_-CKH42imdY6GnrVfx=s1024,Sports complex,Sports complex,6 AM-12 AM,,Open All Days,"2R3W+CR8, P. Ta Quang Buu, Bach Khoa, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/Bach+Khoa+Gymnasiums/data=!4m7!3m6!1s0x3135ac743dae7553:0xacb8a162dfb838dc!8m2!3d21.0035324!4d105.8470866!16s%2Fg%2F11bw5vxz9j!19sChIJU3WuPXSsNTER3Di432KhuKw?authuser=0&hl=en&rclk=1,bai do xe gan dai hoc bach khoa diff --git a/backend/prisma/packingCrawler/csv/all-task-11-overview.csv b/backend/prisma/packingCrawler/csv/all-task-11-overview.csv new file mode 100644 index 0000000..e373330 --- /dev/null +++ b/backend/prisma/packingCrawler/csv/all-task-11-overview.csv @@ -0,0 +1,2 @@ +place_id,name,description,is_spending_on_ads,reviews,rating,competitors,website,phone,can_claim,owner_name,owner_profile_link,featured_image,main_category,categories,workday_timing,is_temporarily_closed,closed_on,address,review_keywords,link,query +ChIJLUYDEHKpNTERg5750vGFcfM,Bai do xe,,,0,0,,,,,,,https://lh3.ggpht.com/p/AB5caB8u2cDK_j-Vtg7Rz4pNJTEXCojwxupXEvhzqyiyxwEnSvWM_C95Oe_M91fGtbC1-b_TulmvtA8H1As5sorgQ8SvjssVASiUjHL7i6JLn5pu_DPfknMunN4YepWQbse63lyc9ETdog=s1024,Parking grounds,Parking grounds,,,Open All Days,"Phuc Dong, Long Bien, Hanoi",,"https://www.google.com/maps/place/Parking+lot,+Ph%C3%BAc+%C4%90%E1%BB%93ng,+Long+Bi%C3%AAn,+H%C3%A0+N%E1%BB%99i/@21.0387946,105.894429,17z/data=!3m1!4b1!4m6!3m5!1s0x3135a9721003462d:0xf37185f1d2f99e83!8m2!3d21.0388519!4d105.8944483!16s%2Fg%2F11cs6kx11q?authuser=0&entry=ttu&g_ep=EgoyMDI1MDQyMC4wIKXMDSoJLDEwMjExNjM5SAFQAw%3D%3D",bai do xe quan long bien diff --git a/backend/prisma/packingCrawler/csv/all-task-15-overview.csv b/backend/prisma/packingCrawler/csv/all-task-15-overview.csv new file mode 100644 index 0000000..06c4ae7 --- /dev/null +++ b/backend/prisma/packingCrawler/csv/all-task-15-overview.csv @@ -0,0 +1,2009 @@ +place_id,name,description,is_spending_on_ads,reviews,rating,competitors,website,phone,can_claim,owner_name,owner_profile_link,featured_image,main_category,categories,workday_timing,is_temporarily_closed,closed_on,address,review_keywords,link,query +ChIJZVap4pKtNTER3CsCs-bnXak,Bai xe Tinh Van Quan,,,5,4.8,"Name: Bai do xe Tinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+T%C4%A9nh/@20.9582664,105.7620881?authuser=0&hl=en&entry=ttu +Reviews: 31 reviews + +Name: Bai Gui Xe O To Khach San Muong Thanh +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4+Kh%C3%A1ch+S%E1%BA%A1n+M%C6%B0%E1%BB%9Dng+Thanh/@20.960570999999998,105.791744?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe MQ VN +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+MQ+VN/@20.9751066,105.76271729999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe CT1B2 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+CT1B2/@20.9637127,105.792153?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: bai xe phong thuy +Link: https://www.google.com/maps/search/b%C3%A3i+xe+phong+thu%C3%BD/@20.9712452,105.79221369999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai xe Tinh Van Quan (Owner),,,Parking lot,Parking lot,,,Open All Days,"265 Chien Thang, P. Van Quan, Ha Dong, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+T%C4%A9nh+V%C4%83n+Qu%C3%A1n/data=!4m7!3m6!1s0x3135ad92e2a95665:0xa95de7e6b3022bdc!8m2!3d20.9764136!4d105.7980059!16s%2Fg%2F11swzk2rsz!19sChIJZVap4pKtNTER3CsCs-bnXak?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ1TsDEQCtNTERokuwVDkReks,Bai Gui Xe Huy Hoang,,,1,5,"Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Giu Xe Cuong Phong +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+C%C6%B0%E1%BB%9Dng+Phong/@20.9576875,105.7590723?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe MQ VN +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+MQ+VN/@20.9751066,105.76271729999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai Gui Xe Huy Hoang (Owner),,,Parking lot,Parking lot,,,Open All Days,"Dau ngo 94 D. Cau Buou, Khu Do Thi Moi, Ha Dong, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe+Huy+Ho%C3%A0ng/data=!4m7!3m6!1s0x3135ad0011033bd5:0x4b7a113954b04ba2!8m2!3d20.9621674!4d105.7984347!16s%2Fg%2F11y58zrgfr!19sChIJ1TsDEQCtNTERokuwVDkReks?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJbXOEtsCtNTER-HW0XFxXH7g,Bai Dau Xe 24/7,Bai do xe 24/7. Dich vu trong giu xe ngay va dem. Khong gian rong rai thoang dang. Gia ca hop ly.,,2,5,"Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+xe+oto/@20.998038299999997,105.8050507?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/@20.9918493,105.7932795?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",http://zalo.me/bshs0922122123,0978 412 682,,Bai Dau Xe 24/7 (Owner),https://www.google.com/maps/contrib/103489359771778675067,https://lh3.ggpht.com/p/AF1QipMEIJMh16lWtgcOX06BG4bVt7UB7axACAiNO_19=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"1 P. To Huu, Nhan Chinh, Thanh Xuan, Ha Noi 100000",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BA%ADu+Xe+24%2F7/data=!4m7!3m6!1s0x3135adc0b684736d:0xb81f575c5cb475f8!8m2!3d20.9987748!4d105.7964516!16s%2Fg%2F11t825wtvm!19sChIJbXOEtsCtNTER-HW0XFxXH7g?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJB58MqMesNTERqbU2fxcprBw,Bai gui xe Thong Nhat,,,2,5,"Name: Bai Dau Xe 24/7 +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BA%ADu+Xe+24%2F7/@20.9987748,105.7964516?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe & rua xe,don noi that,thay dau o to xe may, Trung Van +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%26+r%E1%BB%ADa+xe%2Cd%E1%BB%8Dn+n%E1%BB%99i+th%E1%BA%A5t%2Cthay+d%E1%BA%A7u+%C3%B4+t%C3%B4+xe+m%C3%A1y%2C+Trung+V%C4%83n/@20.9872551,105.7960332?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/@20.9918493,105.7932795?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe san vui choi Phung Khoang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+s%C3%A2n+vui+ch%C6%A1i+Ph%C3%B9ng+Khoang/@20.990264,105.793673?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0853 090 319,,Bai gui xe Thong Nhat (Owner),https://www.google.com/maps/contrib/104465856802638565698,https://lh3.ggpht.com/p/AB5caB-6D_yScpubOvfeFvRFVgoLvuMeHvo2Q8g-s7zJ8TP74GP3OZSWZ3SsD5qd65JNJagIw7H-Q6o4t4GDoeHVa7j_N1vvrurNsznwaXDKzl9Lyygtn3whp3CEzbyaR5Noir9uTB6m=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"290 D. Nguyen Trai, P. Van Quan, Nam Tu Liem, Ha Noi",,https://www.google.com/maps/place/Bai+gui+xe+Thong+Nhat/data=!4m7!3m6!1s0x3135acc7a80c9f07:0x1cac29177f36b5a9!8m2!3d20.987035!4d105.7963062!16s%2Fg%2F11gfnfqb6r!19sChIJB58MqMesNTERqbU2fxcprBw?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJy8ZN1wCtNTERIxgO0WmZdHU,bai xe phong thuy,,,0,0,"Name: Bai Gui Xe Huy Hoang +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+Huy+Ho%C3%A0ng/@20.9621674,105.7984347?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Giu Xe Cuong Phong +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+C%C6%B0%E1%BB%9Dng+Phong/@20.9576875,105.7590723?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe CT1B2 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+CT1B2/@20.9637127,105.792153?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai Do Xe O To Cho Yen Phuc +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4+Ch%E1%BB%A3+Y%C3%AAn+Ph%C3%BAc/@20.9693032,105.7860858?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0904 558 720,1,bai xe phong thuy (Owner),,,Parking lot,Parking lot,Open 24 hours,,Open All Days,"12BT4, Khu do thi Van Quan, Ha Dong, Ha Noi",,https://www.google.com/maps/place/b%C3%A3i+xe+phong+thu%C3%BD/data=!4m7!3m6!1s0x3135ad00d74dc6cb:0x75749969d10e1823!8m2!3d20.9712452!4d105.7922137!16s%2Fg%2F11qncp92v8!19sChIJy8ZN1wCtNTERIxgO0WmZdHU?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ8YIFC0dTNDER6Wxkw2EWxeg,Bai do xe MQ VN,,,0,0,"Name: Bai Gui Xe Huy Hoang +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+Huy+Ho%C3%A0ng/@20.9621674,105.7984347?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe Kim Giang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Kim+Giang/@20.979834,105.814644?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Gui Xe O To Khach San Muong Thanh +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4+Kh%C3%A1ch+S%E1%BA%A1n+M%C6%B0%E1%BB%9Dng+Thanh/@20.960570999999998,105.791744?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe CT1B2 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+CT1B2/@20.9637127,105.792153?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe MQ VN (Owner),,,Parking lot,Parking lot,,,Open All Days,"CT4 Hyundai, Ha Dong, Ha Noi 100000",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+MQ+VN/data=!4m7!3m6!1s0x313453470b0582f1:0xe8c51661c3646ce9!8m2!3d20.9751066!4d105.7627173!16s%2Fg%2F11q310r_65!19sChIJ8YIFC0dTNDER6Wxkw2EWxeg?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ5X8cJFitNTER52RAjdFf68k,Bai Gui Xe O To Khach San Muong Thanh,,,0,0,"Name: Bai Giu Xe Cuong Phong +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+C%C6%B0%E1%BB%9Dng+Phong/@20.9576875,105.7590723?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe CT1B2 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+CT1B2/@20.9637127,105.792153?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe CT1A Xala +Link: https://www.google.com/maps/search/B%C3%A3i+xe+CT1A+Xala/@20.963961899999997,105.79147909999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe MQ VN +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+MQ+VN/@20.9751066,105.76271729999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai Gui Xe O To Khach San Muong Thanh (Owner),,https://lh3.ggpht.com/p/AB5caB_3uOkD4AHsiaK5TBRfPJUSxGUW6pzf82nppcU7LsbI0NQhKPu4mR4AdGjeHQtl0W_oMJBwyIMZVL3cejaU5yUEbCLDXQw892kLDldg1S70hGvh32Jl6e0KX1PQJk-zM6s9wBLg=s1024,Parking lot,Parking lot,,,Open All Days,"XQ6R+6MH, Khu do thi Xa La, Ha Dong, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4+Kh%C3%A1ch+S%E1%BA%A1n+M%C6%B0%E1%BB%9Dng+Thanh/data=!4m7!3m6!1s0x3135ad58241c7fe5:0xc9eb5fd18d4064e7!8m2!3d20.960571!4d105.791744!16s%2Fg%2F11glf3pf13!19sChIJ5X8cJFitNTER52RAjdFf68k?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJC7e4GMGtNTERjbJE6vtUCZA,Bai xe CT1B2,,,0,0,"Name: Bai Giu Xe Cuong Phong +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+C%C6%B0%E1%BB%9Dng+Phong/@20.9576875,105.7590723?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Gui Xe O To Khach San Muong Thanh +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4+Kh%C3%A1ch+S%E1%BA%A1n+M%C6%B0%E1%BB%9Dng+Thanh/@20.960570999999998,105.791744?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe CT1A Xala +Link: https://www.google.com/maps/search/B%C3%A3i+xe+CT1A+Xala/@20.963961899999997,105.79147909999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai Do Xe O To Cho Yen Phuc +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4+Ch%E1%BB%A3+Y%C3%AAn+Ph%C3%BAc/@20.9693032,105.7860858?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai xe CT1B2 (Owner),,,Parking lot,Parking lot,,,Open All Days,"XQ7R+FVJ, Khu do thi Xa La, Ha Dong, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+CT1B2/data=!4m7!3m6!1s0x3135adc118b8b70b:0x900954fbea44b28d!8m2!3d20.9637127!4d105.792153!16s%2Fg%2F11lkc3qbdc!19sChIJC7e4GMGtNTERjbJE6vtUCZA?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJhcCq7oZTNDERoJRsGFcobLQ,Bai do xe Viet Nhat,,,1,5,"Name: Bai do xe & rua xe,don noi that,thay dau o to xe may, Trung Van +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%26+r%E1%BB%ADa+xe%2Cd%E1%BB%8Dn+n%E1%BB%99i+th%E1%BA%A5t%2Cthay+d%E1%BA%A7u+%C3%B4+t%C3%B4+xe+m%C3%A1y%2C+Trung+V%C4%83n/@20.9872551,105.7960332?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe 183 HVT +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+183+HVT/@20.9968668,105.82281259999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Ben do Vu Minh Thi +Link: https://www.google.com/maps/search/B%E1%BA%BFn+%C4%91%E1%BB%97+V%C5%A9+Minh+Thi/@21.060495700000004,105.72077709999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: NT +Link: https://www.google.com/maps/search/NT/@21.0322241,105.76979809999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe Viet Nhat (Owner),,,Parking lot,Parking lot,,,Open All Days,"Truoc Nha Cho Mo Lao, 30M P. To Huu, Nam Tu Liem, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+Vi%E1%BB%87t+Nh%E1%BA%ADt/data=!4m7!3m6!1s0x31345386eeaac085:0xb46c2857186c94a0!8m2!3d20.987934!4d105.779733!16s%2Fg%2F11vdc3dz8t!19sChIJhcCq7oZTNDERoJRsGFcobLQ?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJPaF0KFKtNTERiNuw3W92AJw,Bai Gui Xe D4-D6,,,2,5,"Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0149662,105.84152209999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",http://hust.edu.vn/,,1,Bai Gui Xe D4-D6 (Owner),,https://lh3.ggpht.com/p/AB5caB9yamuVjsc_WlQnQc9trt9i7dkIvzWsGhZSJW4r0_0p_iOZApLx9Kyr-pI1_zQyt2-ye9xyAsEzbtsEbJYjIaWQ9rV_uhanE1K4DduQ1yD_819u6P8CnCxngTdykAoz7TvW_do=s1024,Parking lot,Parking lot,6 AM-6 PM,,Open All Days,"17duong D. Giai Phong, Dong Tam, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/data=!4m7!3m6!1s0x3135ad522874a13d:0x9c00766fddb0db88!8m2!3d21.004815!4d105.8422449!16s%2Fg%2F11fpqxgj7g!19sChIJPaF0KFKtNTERiNuw3W92AJw?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJwZXT5wlTNDEROsBOWwbG1w8,Nha do xe Galaxy,,,5,3.4,"Name: Bai Do Xe O To Cho Yen Phuc +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4+Ch%E1%BB%A3+Y%C3%AAn+Ph%C3%BAc/@20.9693032,105.7860858?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: bai xe phong thuy +Link: https://www.google.com/maps/search/b%C3%A3i+xe+phong+thu%C3%BD/@20.9712452,105.79221369999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe MQ VN +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+MQ+VN/@20.9751066,105.76271729999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0988 556 288,,Nha do xe Galaxy (Owner),https://www.google.com/maps/contrib/114306118638948385658,https://lh3.ggpht.com/p/AF1QipMZgetm3rD9hx1BJqBpK5KesVWdD1buwVrXCFAi=s1024,Parking lot,Parking lot,,,Open All Days,"9 Galaxy 9, Du an Ngan Ha, Ha Dong, Ha Noi 000084",,https://www.google.com/maps/place/Nh%C3%A0+%C4%91%E1%BB%97+xe+Galaxy/data=!4m7!3m6!1s0x31345309e7d395c1:0xfd7c6065b4ec03a!8m2!3d20.9831051!4d105.7770085!16s%2Fg%2F11vyhy1gt1!19sChIJwZXT5wlTNDEROsBOWwbG1w8?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJLSuvZr2tNTERc9qqKSAu_fg,Bai xe CT1A Xala,,,0,0,"Name: Bai Gui Xe O To Khach San Muong Thanh +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4+Kh%C3%A1ch+S%E1%BA%A1n+M%C6%B0%E1%BB%9Dng+Thanh/@20.960570999999998,105.791744?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe CT1B2 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+CT1B2/@20.9637127,105.792153?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai Do Xe O To Cho Yen Phuc +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4+Ch%E1%BB%A3+Y%C3%AAn+Ph%C3%BAc/@20.9693032,105.7860858?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe Xa La +Link: https://www.google.com/maps/search/B%C3%A3i+xe+Xa+La/@20.961669399999998,105.78925079999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0904 946 968,1,Bai xe CT1A Xala (Owner),,https://lh3.ggpht.com/p/AB5caB8j5DtSNHPjmr5qHrbLgyr2OItRibWbTLTZ0kh7WCvt2CbCjSpTxg4XFhZwD8iUDZAmOkXLPFQKsVNcQRVwGbQPnC64FlvqWtir2abBBaUXLhy3GtRwdBJ7pRx8_Ibnhgjba-Sgag=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"XQ7R+HHQ, Khu do thi Xa La, Ha Dong, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+CT1A+Xala/data=!4m7!3m6!1s0x3135adbd66af2b2d:0xf8fd2e2029aada73!8m2!3d20.9639619!4d105.7914791!16s%2Fg%2F11m_f4t0x9!19sChIJLSuvZr2tNTERc9qqKSAu_fg?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJjzaRxXurNTERaGphkcz9-JI,Bai do xe tho quan,,,2,4.5,"Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0149662,105.84152209999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe CP taxi Ha Noi +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+CP+taxi+H%C3%A0+N%E1%BB%99i/@21.012037499999998,105.81464059999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe tho quan (Owner),,,Parking lot,Parking lot,,,Open All Days,"2R8P+83R, Tho Quan, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/data=!4m7!3m6!1s0x3135ab7bc591368f:0x92f8fdcc91616a68!8m2!3d21.015855!4d105.8351441!16s%2Fg%2F11h1mkq_rv!19sChIJjzaRxXurNTERaGphkcz9-JI?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJZ4_97dSrNTER8n0BUmyQuMA,Bai do xe,,,2,4.5,"Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai xe Cong ty TNHH Phat trien dich vu Dung Truong +Link: https://www.google.com/maps/search/B%C3%A3i+xe+C%C3%B4ng+ty+TNHH+Ph%C3%A1t+tri%E1%BB%83n+d%E1%BB%8Bch+v%E1%BB%A5+D%C5%A9ng+Tr%C6%B0%C6%A1ng/@21.0205669,105.83865070000002?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"293 D. Le Duan, Le Dai Hanh, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe/data=!4m7!3m6!1s0x3135abd4edfd8f67:0xc0b8906c52017df2!8m2!3d21.0149662!4d105.8415221!16s%2Fg%2F11jpyv8fqj!19sChIJZ4_97dSrNTER8n0BUmyQuMA?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJm1jgH9msNTERKlIn-RMtiQQ,Bai do xe o to TC5,,,35,3.7,"Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai do xe yen xa +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+y%C3%AAn+x%C3%A1/@20.968992699999998,105.79845519999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: BAI GUI XE O TO LY SAC +Link: https://www.google.com/maps/search/B%C3%83I+G%E1%BB%ACI+XE+%C3%94+T%C3%94+LY+S%E1%BA%AEC/@20.921729199999998,105.8640064?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0454579,105.8845698?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe o to TC5 (Owner),,https://lh3.ggpht.com/p/AB5caB8C7TGB45JS8v9frIQPZJ6J4DlesFVz2BR964mIpy35kos_23qfIwQXY-LYUSLGuF7TabTPUj9Qhs2FJ2qZXOQykZHarRdNKOd9lahnvqYzlTrEmuTIsOkzafwxBR-26Y2eXQuOcQ=s1024,Parking lot,Parking lot,,,Open All Days,"XQ9X+J6C, Yen Xa, Thanh Tri, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4+TC5/data=!4m7!3m6!1s0x3135acd91fe0589b:0x4892d13f927522a!8m2!3d20.9690679!4d105.798014!16s%2Fg%2F11b6t5w5nv!19sChIJm1jgH9msNTERKlIn-RMtiQQ?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJxdUIZvNTNDERxge29WLgBCg,Bai xe Le Trong Tan - Ha Dong,Bai trong giu xe ngay dem. Trung chuyen hang hoa Bac Trung Nam.Sdt bai xe 0962633044,,5,4.8,"Name: Bai Giu Xe Cuong Phong +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+C%C6%B0%E1%BB%9Dng+Phong/@20.9576875,105.7590723?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Gui Xe O To Khach San Muong Thanh +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4+Kh%C3%A1ch+S%E1%BA%A1n+M%C6%B0%E1%BB%9Dng+Thanh/@20.960570999999998,105.791744?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe CT1B2 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+CT1B2/@20.9637127,105.792153?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0962 633 044,,Bai xe Le Trong Tan - Ha Dong (Owner),https://www.google.com/maps/contrib/106355754703286072140,https://lh3.ggpht.com/p/AF1QipMMkRKAb_Hvn1aYChZRfM8HBQHQBe9fp8JkCL7S=s1024,Park & ride,Park & ride,Open 24 hours,,Open All Days,"D. Le Trong Tan, Duong Noi, Ha Dong, Ha Noi 003000",,https://www.google.com/maps/place/B%C3%A3i+xe+L%C3%AA+Tr%E1%BB%8Dng+T%E1%BA%A5n+-+H%C3%A0+%C4%90%C3%B4ng/data=!4m7!3m6!1s0x313453f36608d5c5:0x2804e062f5b607c6!8m2!3d20.9867844!4d105.7383723!16s%2Fg%2F11rty8sygs!19sChIJxdUIZvNTNDERxge29WLgBCg?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJQ2ZkDACtNTERGh_oopvdrws,Bai Do Xe O To Cho Yen Phuc,,,0,0,"Name: Bai do xe yen xa +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+y%C3%AAn+x%C3%A1/@20.968992699999998,105.79845519999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai xe CT1B2 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+CT1B2/@20.9637127,105.792153?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0454579,105.8845698?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai Do Xe O To Cho Yen Phuc (Owner),,,Parking lot,Parking lot,,,Open All Days,"XQ9P+PCG, Cho Yen Phuc, Yen Phuc, Ha Dong, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4+Ch%E1%BB%A3+Y%C3%AAn+Ph%C3%BAc/data=!4m7!3m6!1s0x3135ad000c646643:0xbafdd9ba2e81f1a!8m2!3d20.9693032!4d105.7860858!16s%2Fg%2F11w8kn86mw!19sChIJQ2ZkDACtNTERGh_oopvdrws?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJZyQ7w_qtNTERfjNNLxije-E,"Bai do xe & rua xe,don noi that,thay dau o to xe may, Trung Van",,,1,5,"Name: Bai do xe Phung Khoang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Ph%C3%B9ng+Khoang/@20.987450799999998,105.79607130000001?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai rua xe do xe +Link: https://www.google.com/maps/search/B%C3%A3i+r%E1%BB%ADa+xe+%C4%91%E1%BB%97+xe/@20.9834615,105.8704131?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe Nguyen Hong +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%C3%AAn+H%E1%BB%93ng/@21.0237612,105.81164129999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,"Bai do xe & rua xe,don noi that,thay dau o to xe may, Trung Van (Owner)",,,Parking lot,Parking lot,7:30 AM-7 PM,,Open All Days,"290 D. Nguyen Trai, P. Van Quan, Nam Tu Liem, Ha Noi",,"https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+%26+r%E1%BB%ADa+xe,d%E1%BB%8Dn+n%E1%BB%99i+th%E1%BA%A5t,thay+d%E1%BA%A7u+%C3%B4+t%C3%B4+xe+m%C3%A1y,+Trung+V%C4%83n/data=!4m7!3m6!1s0x3135adfac33b2467:0xe17ba3182f4d337e!8m2!3d20.9872551!4d105.7960332!16s%2Fg%2F11s5_x4sd0!19sChIJZyQ7w_qtNTERfjNNLxije-E?authuser=0&hl=en&rclk=1",bai do xe gan ptit ha dong +ChIJq8z3ERitNTERyzTPbzTXJwU,Bai do xe Dai Thanh,,,5,4.8,"Name: Bai do xe o to TC5 +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4+TC5/@20.9690679,105.798014?authuser=0&hl=en&entry=ttu +Reviews: 35 reviews + +Name: Bai Do Xe So 2 Dinh Cong +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+S%E1%BB%91+2+%C4%90%E1%BB%8Bnh+C%C3%B4ng/@20.986452,105.82737949999999?authuser=0&hl=en&entry=ttu +Reviews: 17 reviews + +Name: Bai do xe yen xa +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+y%C3%AAn+x%C3%A1/@20.968992699999998,105.79845519999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",http://kientrucvietas.com/,,1,Bai do xe Dai Thanh (Owner),,https://lh3.ggpht.com/p/AB5caB_RidmcL1iZMCbdTeFyTToVrHo92Mc4z7kUXm-89lz2m_Jvo9zkguGKeuIztFmEpKyGtqab1jKHt_OgrGVDbRe9HdxnHGww4B_8tIsse_ip8dz3Cxs_yELYD9s5UTsRySPd3AH0=s1024,Parking lot,Parking lot,12 AM-11:30 PM,,Open All Days,"Cau Huu Hoa, Ta Thanh Oai, Thanh Tri, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+%C4%90%E1%BA%A1i+Thanh/data=!4m7!3m6!1s0x3135ad1811f7ccab:0x527d7346fcf34cb!8m2!3d20.954767!4d105.8068271!16s%2Fg%2F11b7q0b4w7!19sChIJq8z3ERitNTERyzTPbzTXJwU?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ_xk0WNStNTER1bahKS4i3JU,Bai do xe Truong Chinh,,,13,4.9,"Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+xe+oto/@20.998038299999997,105.8050507?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe +Link: https://www.google.com/maps/search/B%C3%A3i+xe/@20.995946099999998,105.82298229999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,024 3566 7333,1,Bai do xe Truong Chinh (Owner),,https://lh3.ggpht.com/p/AB5caB_7GS_VhT5yjQIzKU4m48nTe47jrq-fqBdsqUZC1RDlpVAsF4rCNysIN7sUfUFCWZFZoabwTzNjEm7MMRfDQebWoJjp4jEqzZNelQwttv5ZhIxkSdABv8HXzaNybrMHfF4psHwy=s1024,Parking lot,Parking lot,,,Open All Days,"315 D. Truong Chinh, Khuong Thuong, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+Tr%C6%B0%E1%BB%9Dng+Chinh/data=!4m7!3m6!1s0x3135add4583419ff:0x95dc222e29a1b6d5!8m2!3d21.0018285!4d105.8229903!16s%2Fg%2F11h6jyp_r6!19sChIJ_xk0WNStNTER1bahKS4i3JU?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ74OXNz-rNTERofcQwMh1FEk,Bai do xe,,,4,4,"Name: Bai do xe o to Nguyen Cong Hoan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4+Nguy%E1%BB%85n+C%C3%B4ng+Hoan/@21.027268499999998,105.8167297?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai De Xe Chua Lang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%83+Xe+Ch%C3%B9a+L%C3%A1ng/@21.0231036,105.80317819999999?authuser=0&hl=en&entry=ttu +Reviews: 10 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai do xe (Owner),,https://lh3.ggpht.com/p/AB5caB-MxQ9_lvjSuPUq61XGpjqgwLsXEvjUxg1hXZP_M_Ze-wxAc-xzxl0oU3xgwgr3iqDTqNJUKpMDCGp0sbJ1ZLsKhw-7OCfv7qSbW0GzncykyhqAaADkpwKZvHWfwyqBwyK-I7Hk=s1024,Parking lot,Parking lot,,,Open All Days,"36 P. Hoang Cau, Cho Dua, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe/data=!4m7!3m6!1s0x3135ab3f379783ef:0x491475c8c010f7a1!8m2!3d21.0190385!4d105.8242586!16s%2Fg%2F11jj1fc7_6!19sChIJ74OXNz-rNTERofcQwMh1FEk?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJex9BOn_HNTERZYcW1wqrS6Q,Bai xe thong minh car parking,"Tu van, thiet ke, lap dat he thong bai xe thong minh car parking, khoa cua van tay nha tro, may cham cong, kiem soat cua ra vao, kiem soat thang may, phan mem ban hang, phan mem suat an cong nghiep +Goi ngay: 0964 523 531 +Cong ty Co Phan Digiplus +93 Ngo 72 Ton That Tung - Dong Da - Ha Noi",,0,0,"Name: Bai Giu Xe Thong Minh TTC Viet Nam +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+Th%C3%B4ng+Minh+TTC+Vi%E1%BB%87t+Nam/@21.0020202,105.8083738?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Do Xe Thong Minh Hoa Vu +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+Th%C3%B4ng+Minh+H%C3%B3a+V%C5%A9/@21.0379708,105.77762980000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai giu xe thong minh - VietParking +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+th%C3%B4ng+minh+-+VietParking/@20.9772614,105.83482649999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe thong minh +Link: https://www.google.com/maps/search/B%C3%A3i+xe+th%C3%B4ng+minh/@21.002636700000004,105.8015789?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",https://digiplus.vn/bao-gia-chi-phi-xay-dung-giai-phap-he-thong-bai-do-xe-thong-minh/,0964 523 531,,Bai xe thong minh car parking (Owner),https://www.google.com/maps/contrib/103222866236567002166,https://lh3.ggpht.com/p/AF1QipP3FeEKFKvcED5O2FFqZa6f87u3t5cjMnzm0p3A=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"ngach 82 Ng. 72 P. Ton That Tung, Khuong Thuong, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+th%C3%B4ng+minh+car+parking/data=!4m7!3m6!1s0x3135c77f3a411f7b:0xa44bab0ad7168765!8m2!3d21.0019779!4d105.8273997!16s%2Fg%2F11h_kb4tw9!19sChIJex9BOn_HNTERZYcW1wqrS6Q?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJK1tojT2tNTERYA9fJpny5FM,Bai Do Xe 195 Dinh Cong Ha,"Nhan trong xe o to, bai xe co mai che mo 24/24",,2,3,"Name: Bai gui xe so 1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+s%E1%BB%91+1/@20.987584599999998,105.8314704?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai 24/2 +Link: https://www.google.com/maps/search/B%C3%A3i+24%2F2/@20.9831403,105.8303121?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe Cong vien Thanh Xuan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+C%C3%B4ng+vi%C3%AAn+Thanh+Xu%C3%A2n/@21.004293699999998,105.79618870000002?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0975 603 553,,Bai Do Xe 195 Dinh Cong Ha (Owner),https://www.google.com/maps/contrib/112161675954824910059,https://lh3.ggpht.com/p/AF1QipPQ8S4V7As0LIiVle1SxEvwijgOQPveYvjAujFv=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"195 Dinh Cong Ha, Dinh Cong, Hoang Mai, Ha Noi 100000",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%97+Xe+195+%C4%90%E1%BB%8Bnh+C%C3%B4ng+H%E1%BA%A1/data=!4m7!3m6!1s0x3135ad3d8d685b2b:0x53e4f299265f0f60!8m2!3d20.9828599!4d105.8254294!16s%2Fg%2F11g0g6bjqy!19sChIJK1tojT2tNTERYA9fJpny5FM?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJG4DsrsJSNDERqeCXMwp1Fg8,Bai Giu Xe Cuong Phong,,,1,1,"Name: Bai xe Le Trong Tan - Ha Dong +Link: https://www.google.com/maps/search/B%C3%A3i+xe+L%C3%AA+Tr%E1%BB%8Dng+T%E1%BA%A5n+-+H%C3%A0+%C4%90%C3%B4ng/@20.986784399999998,105.7383723?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Gui Xe Huy Hoang +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+Huy+Ho%C3%A0ng/@20.9621674,105.7984347?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Gui Xe O To Khach San Muong Thanh +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4+Kh%C3%A1ch+S%E1%BA%A1n+M%C6%B0%E1%BB%9Dng+Thanh/@20.960570999999998,105.791744?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe CT1B2 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+CT1B2/@20.9637127,105.792153?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai Giu Xe Cuong Phong (Owner),,,Parking lot,Parking lot,,,Open All Days,"672 D. Quang Trung, Phu La, Ha Dong, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+Gi%E1%BB%AF+Xe+C%C6%B0%E1%BB%9Dng+Phong/data=!4m7!3m6!1s0x313452c2aeec801b:0xf16750a3397e0a9!8m2!3d20.9576875!4d105.7590723!16s%2Fg%2F11bcclzh7w!19sChIJG4DsrsJSNDERqeCXMwp1Fg8?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJGwsqNfWsNTERZvt2WGhfqBk,Bai Do Xe So 2 Dinh Cong,,,17,4.2,"Name: Bai gui xe so 1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+s%E1%BB%91+1/@20.987584599999998,105.8314704?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.9865449,105.8308979?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4/@20.9826099,105.8278894?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0912 910 661,1,Bai Do Xe So 2 Dinh Cong (Owner),,https://lh3.ggpht.com/p/AB5caB8T-hJrfhiSv3t_P56PLtPLebBNVcaV26f2CPO_RVeXGlRjk-QT2KRe8_Vq9uelLxBmFKq-eliGwvxO3nteKDk6xps7gz2uig8wk0Zhm4k-PCttVO8WcZyKoS6Q9qrIY5qKoSihNw=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"Dinh Cong Car Parking No 2, Pho P. Tran Dien, Dinh Cong, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%97+Xe+S%E1%BB%91+2+%C4%90%E1%BB%8Bnh+C%C3%B4ng/data=!4m7!3m6!1s0x3135acf5352a0b1b:0x19a85f685876fb66!8m2!3d20.986452!4d105.8273795!16s%2Fg%2F11c4twmw8j!19sChIJGwsqNfWsNTERZvt2WGhfqBk?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJE9q-pZFTNDERnh53prBYOgQ,Bai do xe Tinh B34,"Bai dau xe Tinh Lo B34 khu B khu do thi moi hai ben duong Le Trong Tan. Duong Noi, Ha Dong, Ha Noi",,0,0,"Name: Bai do xe Tinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+T%C4%A9nh/@20.9582664,105.7620881?authuser=0&hl=en&entry=ttu +Reviews: 31 reviews + +Name: Bai Do Xe Khu Do Thi Linh Dam +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+Khu+%C4%90%C3%B4+Th%E1%BB%8B+Linh+%C4%90%C3%A0m/@20.9674685,105.82657429999999?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai rua xe do xe +Link: https://www.google.com/maps/search/B%C3%A3i+r%E1%BB%ADa+xe+%C4%91%E1%BB%97+xe/@20.9834615,105.8704131?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai dau xe Tinh CTY HAT +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BA%ADu+xe+T%C4%A9nh+CTY+HAT/@20.9935762,105.7312048?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0976 811 241,,Bai do xe Tinh B34 (Owner),https://www.google.com/maps/contrib/102837034364204407202,https://lh3.ggpht.com/p/AF1QipPJ43GpJ62ZHPAVexjms1LhgxZ6S95Kfj6SFgIx=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"khu B/B34 D. Le Trong Tan, khu do thi moi hai ben, Ha Dong, Ha Noi 00030",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+T%C4%A9nh+B34/data=!4m7!3m6!1s0x31345391a5beda13:0x43a58b0a6771e9e!8m2!3d20.9632147!4d105.7638428!16s%2Fg%2F11w2trt36_!19sChIJE9q-pZFTNDERnh53prBYOgQ?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ3523x4OsNTERL9VTB4cJJg8,Bai Gui Xe,,,3,4.3,"Name: Bai do xe Truong Chinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Tr%C6%B0%E1%BB%9Dng+Chinh/@21.0018285,105.8229903?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews + +Name: Bai De Xe Chua Lang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%83+Xe+Ch%C3%B9a+L%C3%A1ng/@21.0231036,105.80317819999999?authuser=0&hl=en&entry=ttu +Reviews: 10 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Dau Xe 24/7 +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BA%ADu+Xe+24%2F7/@20.9987748,105.7964516?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai Gui Xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"21 P. Thai Thinh, Nga Tu So, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe/data=!4m7!3m6!1s0x3135ac83c7b79ddf:0xf2609870753d52f!8m2!3d21.006453!4d105.821833!16s%2Fg%2F11h4143st6!19sChIJ3523x4OsNTERL9VTB4cJJg8?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ2d2KrRirNTER-Hj5W4gt7dE,Bai do xe cong vien Thu Le,,,50,3.8,"Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9867769,105.8198008?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Diem Do Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4/@21.0477423,105.8104151?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe cong vien Thu Le (Owner),,https://lh3.ggpht.com/p/AB5caB-rhnMb-p8jejTKC5YGuwJqnI5tLQRrRsxf35StDD-9xOsy2DmIJ1Zgt-msGJJz_nQWqkx9F74R-FdxX63imtHXUXsqPeuJT83Gkl40hllZEhTw3tvACHdH4uDtleFd9oN9iO6bvA=s1024,Parking lot,Parking lot,,,Open All Days,"2RJ5+QPF, Ngoc Khanh, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+c%C3%B4ng+vi%C3%AAn+Th%E1%BB%A7+L%E1%BB%87/data=!4m7!3m6!1s0x3135ab18ad8addd9:0xd1ed2d885bf978f8!8m2!3d21.0319313!4d105.8093104!16s%2Fg%2F11gr1fh6vc!19sChIJ2d2KrRirNTER-Hj5W4gt7dE?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJdfzdUPlTNDER84A8G2Z1s8U,Ben xe Song Ma Ha Noi,,,0,0,"Name: Bai do xe Tinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+T%C4%A9nh/@20.9582664,105.7620881?authuser=0&hl=en&entry=ttu +Reviews: 31 reviews + +Name: Ben xe HN sM +Link: https://www.google.com/maps/search/B%E1%BA%BFn+xe+HN+sM/@20.9586775,105.76886139999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai Xe Nong San Viet Tin +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+N%C3%B4ng+S%E1%BA%A3n+Vi%E1%BB%87t+T%C3%ADn/@20.9620013,105.7694561?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Ben xe Song Ma Ha Noi (Owner),,,Parking lot,Parking lot,,,Open All Days,"XQ69+X9F, P. Van Phu, Khu do thi Van Phu, Ha Dong, Ha Noi",,https://www.google.com/maps/place/B%E1%BA%BFn+xe+S%C3%B4ng+M%C3%A3+H%C3%A0+N%E1%BB%99i/data=!4m7!3m6!1s0x313453f950ddfc75:0xc5b375661b3c80f3!8m2!3d20.9624436!4d105.7684146!16s%2Fg%2F11y1dqfn9y!19sChIJdfzdUPlTNDER84A8G2Z1s8U?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJDykMaMKrNTERorvy82LlxXM,Bai gui xe,,,6,3.7,"Name: Bai gui xe so 1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+s%E1%BB%91+1/@20.987584599999998,105.8314704?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai Do Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4/@21.0224655,105.8532371?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai gui xe vien Phoi +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+vi%E1%BB%87n+Ph%E1%BB%95i/@21.041498500000003,105.8123838?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews",,,1,Bai gui xe (Owner),,https://lh3.ggpht.com/p/AB5caB-2dVUsXKFBhpsxTQL957aZ2Fc6Jp5WlbrpKyxMuBBpPtFUnqZyJCLpKADd4tt1CTsxaz-0FjURKtrVd8uLPrEt-ptSjOOn8MNHvRKSi8KgE2DWEXRxmvbjiszh-BrteOu9VgsXHg=s1024,Parking lot,Parking lot,,,Open All Days,"Ngh. 207/28 P. Bui Xuong Trach, Chuong Duong Do, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe/data=!4m7!3m6!1s0x3135abc2680c290f:0x73c5e562f3f2bba2!8m2!3d20.9867769!4d105.8198008!16s%2Fg%2F11f3jnxl46!19sChIJDykMaMKrNTERorvy82LlxXM?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJkUU8zbpVNDERRci3rBXwxxs,Ham Gui Xe Me Tri Ha,,,15,4.9,"Name: Bai Gui Xe Dh Mo-dia Chat +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C4%90h+M%E1%BB%8F-%C4%91%E1%BB%8Ba+Ch%E1%BA%A5t/@21.071608800000003,105.7776627?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/@20.9918493,105.7932795?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,024 6293 2989,1,Ham Gui Xe Me Tri Ha (Owner),,https://lh3.ggpht.com/p/AB5caB8tc_lDhuvFxcif_5fGAHHYv3CAE3mzwnAEMElFYwz0Xjy8_u-FZhlN8YfBzxQ-lMpftcvCd-jMM6z7NhIZoDfdQkzKxRjAmPaAnQtCrcS_n4z0v9iBnKJWqo3SbzAR0qHwS_GR=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"D. Me Tri, Khu do thi Me Tri Ha, Nam Tu Liem, Ha Noi 12012",,https://www.google.com/maps/place/H%E1%BA%A7m+G%E1%BB%ADi+Xe+M%E1%BB%85+Tr%C3%AC+H%E1%BA%A1/data=!4m7!3m6!1s0x313455bacd3c4591:0x1bc7f015acb7c845!8m2!3d21.0143398!4d105.7816885!16s%2Fg%2F11l2qvklqq!19sChIJkUU8zbpVNDERRci3rBXwxxs?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJPThSZXurNTERHSmNUtaZtQw,bai do xe The Vinh,Bai gui xe mo cua 24/24 trong tat ca cac loai phuong tien,,1,5,"Name: Vinh quang +Link: https://www.google.com/maps/search/V%C4%A9nh+quang/@20.9663647,105.8449885?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai rua xe do xe +Link: https://www.google.com/maps/search/B%C3%A3i+r%E1%BB%ADa+xe+%C4%91%E1%BB%97+xe/@20.9834615,105.8704131?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe dich vu +Link: https://www.google.com/maps/search/B%C3%A3i+xe+d%E1%BB%8Bch+v%E1%BB%A5/@20.968697799999997,105.8758929?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0983 505 666,,bai do xe The Vinh (Owner),https://www.google.com/maps/contrib/103344321563605305569,https://lh3.ggpht.com/p/AF1QipN95mKPBwHRqZ9cZl2q8KhdY1mwKveTfRsc8lI=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"P. Bui Quoc Khai, Hoang Liet, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/b%C3%A3i+%C4%91%E1%BB%97+xe+Th%E1%BA%BF+Vinh/data=!4m7!3m6!1s0x3135ab7b6552383d:0xcb599d6528d291d!8m2!3d20.959523!4d105.8223442!16s%2Fg%2F11tck2pct0!19sChIJPThSZXurNTERHSmNUtaZtQw?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJoyJf5aOtNTERg3twCFeHgQA,"Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang)",,,2,4.5,"Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Trung tam o to +Link: https://www.google.com/maps/search/Trung+t%C3%A2m+%C3%B4+t%C3%B4/@20.9758475,105.85757939999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Thinh Liet +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Th%E1%BB%8Bnh+Li%E1%BB%87t/@20.971021699999998,105.8483868?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,"Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) (Owner)",https://www.google.com/maps/contrib/117925395255731103705,https://lh3.ggpht.com/p/AB5caB-4bHOzD0sOllXinhOWJ6dA_wct09p_xambb7bh-G_Xkyrc7-QHrGrYnY8eJKCmhiQ-W72pDhGRRUrdxgRE2HegPcVQ_Hri_UeTgL_CCOi23PhqbR0jfzD6A5P4FImGQiJfQuLr=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"33 Ngach 143/74 Pho Nguyen Chinh, Thinh Liet, Hoang Mai, Ha Noi",,"https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+%28%C4%91%E1%BB%97+xe+ng%C3%A0y,+%C4%91%C3%AAm,+theo+th%C3%A1ng%29/data=!4m7!3m6!1s0x3135ada3e55f22a3:0x81875708707b83!8m2!3d20.9761118!4d105.8511079!16s%2Fg%2F11jk1m2yx0!19sChIJoyJf5aOtNTERg3twCFeHgQA?authuser=0&hl=en&rclk=1",bai do xe gan ptit ha dong +ChIJZYTPhYqrNTER1TMNpIlU1iE,Bai Gui Xe,,,2,5,"Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai Gui Xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"Ngo 27 D. Dai Co Viet, Cau Den, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe/data=!4m7!3m6!1s0x3135ab8a85cf8465:0x21d65489a40d33d5!8m2!3d21.008089!4d105.8500022!16s%2Fg%2F11f3dylxlb!19sChIJZYTPhYqrNTER1TMNpIlU1iE?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJf6q5iBitNTERUMYARsQ2AxA,Nha De Xe Can Bo - Nhan Vien Benh Vien,,,10,4,"Name: Bai gui xe HH +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+HH/@20.962063600000004,105.8285465?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0149662,105.84152209999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai de xe can bo +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%83+xe+c%C3%A1n+b%E1%BB%99/@21.0058781,105.84456519999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe BV Bach Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+BV+B%E1%BA%A1ch+Mai/@21.0033904,105.840864?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Nha de xe Can bo +Link: https://www.google.com/maps/search/Nh%C3%A0+%C4%91%E1%BB%83+xe+C%C3%A1n+b%E1%BB%99/@21.0079294,105.82428259999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Nha De Xe Can Bo - Nhan Vien Benh Vien (Owner),,https://lh3.ggpht.com/p/AB5caB-2G-Lp60vxXXJom-SafF7oF8huvYvI3zgjCCDLAma2bkEbz5gRIFlaWOE5MeRDJFrkJaJ40L7lg6s7Zl78_TnMjMOWpPCGS4FP0Aw9AWxrj_tp-YbVqSwLG8FZUEmrYkkV5_Dg=s1024,Parking lot for motorcycles,Parking lot for motorcycles,Open 24 hours,,Open All Days,"2R3Q+6V9, Phuong Mai, Dong Da, Ha Noi",,https://www.google.com/maps/place/Nh%C3%A0+%C4%90%E1%BB%83+Xe+C%C3%A1n+B%E1%BB%99+-+Nh%C3%A2n+Vi%C3%AAn+B%E1%BB%87nh+Vi%E1%BB%87n/data=!4m7!3m6!1s0x3135ad1888b9aa7f:0x100336c44600c650!8m2!3d21.0030423!4d105.8397335!16s%2Fg%2F11h6psyjsb!19sChIJf6q5iBitNTERUMYARsQ2AxA?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJuWCJ44mrNTERquJuwGIwXd0,Bai gui xe CV Thong Nhat,,,4,2.8,"Name: Gui xe Cong vien - Nguyen Dinh Chieu +Link: https://www.google.com/maps/search/G%E1%BB%ADi+xe+C%C3%B4ng+vi%C3%AAn+-+Nguy%E1%BB%85n+%C4%90%C3%ACnh+Chi%E1%BB%83u/@21.0166327,105.8476317?authuser=0&hl=en&entry=ttu +Reviews: 11 reviews + +Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,0963 319 468,1,Bai gui xe CV Thong Nhat (Owner),,https://lh3.ggpht.com/p/AB5caB_pz4b8MqKCnAARFAC4CpNO9qwWm5r0y8L1gfWGRejrzEHmS9lygPoTUnl3vA1PSWmAbyKzS0Qg-74MdkOXmFNs5FE4w27ys0H_jrVroiesktdrvsiie6Nr7IMwlEGfDO9AGwA=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"2R5W+873, Le Dai Hanh, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/data=!4m7!3m6!1s0x3135ab89e38960b9:0xdd5d3062c06ee2aa!8m2!3d21.0082606!4d105.8456587!16s%2Fg%2F11gd1rxccl!19sChIJuWCJ44mrNTERquJuwGIwXd0?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ59_5DQWtNTER6KREqUVGrzA,Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang,Bai do xe 24/7 . co mai che . mien phi dich vu rua xe . tuoi lop . nuoc mui,,0,0,"Name: Bai Dau Xe 24/7 +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BA%ADu+Xe+24%2F7/@20.9987748,105.7964516?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe Tuan Ngo +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Tu%E1%BA%A5n+Ng%E1%BB%8D/@20.9881931,105.77049919999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe Thong Nhat +Link: https://www.google.com/maps/search/Bai+gui+xe+Thong+Nhat/@20.987035,105.79630619999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,0839 280 992,,Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang (Owner),https://www.google.com/maps/contrib/102698338088478389718,https://lh3.ggpht.com/p/AF1QipO1VUHA0hncXw87nPW61t8zEe-9vfYPdjhyay0o=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"30 D. Trung Van, Trung Van, Nam Tu Liem, Ha Noi 100000",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/data=!4m7!3m6!1s0x3135ad050df9dfe7:0x30af4645a944a4e8!8m2!3d20.9918493!4d105.7932795!16s%2Fg%2F11nncc30cp!19sChIJ59_5DQWtNTER6KREqUVGrzA?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJeTfecKStNTERf3B8oBCG-ZY,Bai do xe Kim Giang,,,1,5,"Name: Temporary car parking place +Link: https://www.google.com/maps/search/Temporary+car+parking+place/@20.9813418,105.8152956?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe Kim Van +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Kim+V%C4%83n/@20.9754531,105.82180749999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe may +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/@21.0507824,105.8033172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,Bai do xe Kim Giang (Owner),,https://lh3.ggpht.com/p/AB5caB9x6mg4c75r2NdmnAl93mfh6iTca07Hr-YUbgsuXmN0NHXew9E6aCd5XG4nrwHL2YDG1ps152_bVy5EKvhtgG7cEEZ7xGHeaIh5L8mIoRLLLvywxV-ztw5h5bSviz1dJb_PW9Jw0g=s1024,Parking lot,Parking lot,,,Open All Days,"XRH7+WVJ, Kim Van, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+Kim+Giang/data=!4m7!3m6!1s0x3135ada470de3779:0x96f98610a07c707f!8m2!3d20.979834!4d105.814644!16s%2Fg%2F11h7nb9ymd!19sChIJeTfecKStNTERf3B8oBCG-ZY?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ-Xzr0nesNTER6tLlobZ4Koc,Bai gui xe C1,,,2,4.5,"Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai gui xe C1 (Owner),,https://lh3.ggpht.com/p/AB5caB-zcnCZyxOxTZFYLqDsDcdsaLwBgRtAbPeSuWSSECVNI2N6IGFwFp-8LnG_PEqlc6eA2AqQNK4WWrZPY5TItnWGqr2yk0-hPkHGuudPeHgnSMoBWzXQrxozfBH7MsAZWopl05jt=s1024,Parking lot,Parking lot,,,Open All Days,"2R4V+XCX, P. Tran Dai Nghia, Bach Khoa, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+C1/data=!4m7!3m6!1s0x3135ac77d2eb7cf9:0x872a78b6a1e5d2ea!8m2!3d21.0074865!4d105.8435941!16s%2Fg%2F11cnwgsdc6!19sChIJ-Xzr0nesNTER6tLlobZ4Koc?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJfXlf4QmrNTERZvVzADIF_58,Bai do xe Ngoc Ha,,,26,3.8,"Name: Bai do xe o to Nguyen Cong Hoan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4+Nguy%E1%BB%85n+C%C3%B4ng+Hoan/@21.027268499999998,105.8167297?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai gui xe vien Phoi +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+vi%E1%BB%87n+Ph%E1%BB%95i/@21.041498500000003,105.8123838?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews",,,1,Bai do xe Ngoc Ha (Owner),,https://lh3.ggpht.com/p/AB5caB_5coJhV8LKbSXozvctQzFDptcNyaQExqPA05kq9_wPfkKWky6AcGgchY8NLoo0RXAbj_rggy6Kt11xTj8_KJYXvlGqDHPgOcVcowtaHeB1FtcAvD9muYtWVDkZA0F8mAjscGdQ=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"2RQH+JJV, Ngoc Ho, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+Ng%E1%BB%8Dc+H%C3%A0/data=!4m7!3m6!1s0x3135ab09e15f797d:0x9fff05320073f566!8m2!3d21.0391194!4d105.8290374!16s%2Fg%2F1tlk8vy8!19sChIJfXlf4QmrNTERZvVzADIF_58?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJt381af6tNTER1Fs7M7Ye8oQ,Bai gui xe Thinh Liet,,,0,0,"Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: So 119 - Ngo 24 Kim Dong - Bai trong giu xe oto +Link: https://www.google.com/maps/search/S%E1%BB%91+119+-+Ng%C3%B5+24+Kim+%C4%90%E1%BB%93ng+-+B%C3%A3i+tr%C3%B4ng+gi%E1%BB%AF+xe+%C3%B4t%C3%B4/@20.979865099999998,105.8429116?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,Bai gui xe Thinh Liet (Owner),,,Parking lot,Parking lot,,,Open All Days,"P304, Toa nha N 6, Khu chung cu, Dong Tau, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+Th%E1%BB%8Bnh+Li%E1%BB%87t/data=!4m7!3m6!1s0x3135adfe69357fb7:0x84f21eb6333b5bd4!8m2!3d20.9710217!4d105.8483868!16s%2Fg%2F11tjxjxfys!19sChIJt381af6tNTER1Fs7M7Ye8oQ?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJC6ZiRxGrNTERb_THkkGd4HQ,Bai gui xe vien Phoi,,,3,4.3,"Name: Bai giu xe Linh Lang - Phan Ke Binh +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+Linh+Lang+-+Phan+K%E1%BA%BF+B%C3%ADnh/@21.034806,105.8103702?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai trong xe Phan ke binh +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+Phan+k%E1%BA%BF+b%C3%ADnh/@21.0343043,105.8122015?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe o to 24/24h +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4+24%2F24h/@21.0312783,105.740607?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0917 138 337,1,Bai gui xe vien Phoi (Owner),,https://lh3.ggpht.com/p/AB5caB9BRmZ0cGFp3Ct1nvhSmbSAWsnVZl3hBf5LNJzyF3NMEDInOlZwwtJaqx4H7F_I9biFPBkUurQWl1farqwBO8KxZhmdR9cq7KDUaTrZVyORE7f312Ulaae5YJX4Q9XIXpOJbo1g=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"25 Ngh. 6/30 P. Doi Nhan, Vinh Phu, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+vi%E1%BB%87n+Ph%E1%BB%95i/data=!4m7!3m6!1s0x3135ab114762a60b:0x74e09d4192c7f46f!8m2!3d21.0414985!4d105.8123838!16s%2Fg%2F11csrpydh3!19sChIJC6ZiRxGrNTERb_THkkGd4HQ?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJST0r4rytNTERswWzF-k_Xvc,Bai gui xe D3-5,,,5,3.4,"Name: Diem Gui Xe May +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+G%E1%BB%ADi+Xe+M%C3%A1y/@20.9984002,105.8444061?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai gui xe D3-5 (Owner),,https://lh3.ggpht.com/p/AB5caB_e3oKTBIoHe1LG-UMXNy_a5kGtybbFoxmb93_prkzIyORgEbZrj3OdPTnA_fgL0DzkfQNVGVP4fkxWiiUWlxC3B1XfuEEUD3_CTAbkxjI4Oq02iKMIT_HpLupwsNo1QqZj07VHnQ=s1024,Parking lot for motorcycles,Parking lot for motorcycles,6 AM-10 PM,,Open All Days,"2R3W+W58, Bai gui xe, Bach Khoa, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/data=!4m7!3m6!1s0x3135adbce22b3d49:0xf75e3fe917b305b3!8m2!3d21.0047785!4d105.8454584!16s%2Fg%2F11fj171gkr!19sChIJST0r4rytNTERswWzF-k_Xvc?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJpybTMwetNTERX5mu4eL7qCE,Bai gui xe Kim Van,,,1,5,"Name: Bai giu xe dinh Kim Lien +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+%C4%91%C3%ACnh+Kim+Li%C3%AAn/@21.010115,105.83831699999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe Kim Giang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Kim+Giang/@20.979834,105.814644?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe +Link: https://www.google.com/maps/search/B%C3%A3i+xe/@20.995946099999998,105.82298229999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai gui xe Kim Van (Owner),,https://lh3.ggpht.com/p/AB5caB-zeTFIJ-WGNvhvHzdS0_wls2nDKSP6ZefR42T6HxR8reFfXc_QMK0pLZT-vOJttg1SQfh-0y6IuDxxQLX5v46zNAC4QTrKkiVbHla9b7fwXlBYx6osf6H_6f8jNGFURblOt_Uk=s1024,Parking lot,Parking lot,,,Open All Days,"38 Ng. 282 Kim Giang, Kim Van, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+Kim+V%C4%83n/data=!4m7!3m6!1s0x3135ad0733d326a7:0x21a8fbe2e1ae995f!8m2!3d20.9754531!4d105.8218075!16s%2Fg%2F11vf975z5j!19sChIJpybTMwetNTERX5mu4eL7qCE?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJXTyU5cqtNTERe5tTrmLQKYs,So 119 - Ngo 24 Kim Dong - Bai trong giu xe oto,,,1,4,"Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe Kim Van +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Kim+V%C4%83n/@20.9754531,105.82180749999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Nhan Trong Xe Ngay Dem +Link: https://www.google.com/maps/search/Nh%E1%BA%ADn+Tr%C3%B4ng+Xe+Ng%C3%A0y+%C4%90%C3%AAm/@20.979515,105.842468?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe Thinh Liet +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Th%E1%BB%8Bnh+Li%E1%BB%87t/@20.971021699999998,105.8483868?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,So 119 - Ngo 24 Kim Dong - Bai trong giu xe oto (Owner),,,Parking lot,Parking lot,,,Open All Days,"119 Ng. 24 P. Kim Dong, Giap Bat, Hoang Mai, Ha Noi 100000",,https://www.google.com/maps/place/S%E1%BB%91+119+-+Ng%C3%B5+24+Kim+%C4%90%E1%BB%93ng+-+B%C3%A3i+tr%C3%B4ng+gi%E1%BB%AF+xe+%C3%B4t%C3%B4/data=!4m7!3m6!1s0x3135adcae5943c5d:0x8b29d062ae539b7b!8m2!3d20.9798651!4d105.8429116!16s%2Fg%2F11rcq92jq5!19sChIJXTyU5cqtNTERe5tTrmLQKYs?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJXU2YHW6rNTERZwi2pdaUK8A,Bai do xe o to Nguyen Cong Hoan,,,12,4.1,"Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Gara o to tu dong +Link: https://www.google.com/maps/search/Gara+%C3%B4+t%C3%B4+t%E1%BB%B1+%C4%91%E1%BB%99ng/@21.0137418,105.8524695?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe CP taxi Ha Noi +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+CP+taxi+H%C3%A0+N%E1%BB%99i/@21.012037499999998,105.81464059999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,1800 1269,1,Bai do xe o to Nguyen Cong Hoan (Owner),,https://lh3.ggpht.com/p/AB5caB8VJyYCzUuR52_Sxar19ltcbv0newI_Fpa_c7E_TxtpabQDs_PlaY5a4--s75AEPFAGexEsvHTqI8rvZZzEUUi_46psMr_6oB6SLUa4I43lqpXmjzSl07j2ny6Ep5vKYWBWeBO-fA=s1024,Parking garage,Parking garage,Open 24 hours,,Open All Days,"8 P. Nguyen Cong Hoan, Giang Vo, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4+Nguy%E1%BB%85n+C%C3%B4ng+Hoan/data=!4m7!3m6!1s0x3135ab6e1d984d5d:0xc02b94d6a5b60867!8m2!3d21.0272685!4d105.8167297!16s%2Fg%2F11gcf0s17q!19sChIJXU2YHW6rNTERZwi2pdaUK8A?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ4cXudLGrNTERpyNd8HwQ3LY,Bai giu xe dinh Kim Lien,,,2,2,"Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai giu xe Linh Lang - Phan Ke Binh +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+Linh+Lang+-+Phan+K%E1%BA%BF+B%C3%ADnh/@21.034806,105.8103702?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe Kim Van +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Kim+V%C4%83n/@20.9754531,105.82180749999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe Kim Giang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Kim+Giang/@20.979834,105.814644?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,0387 580 861,1,Bai giu xe dinh Kim Lien (Owner),,https://lh3.ggpht.com/p/AB5caB-LB2Vl1F4iz6mvqXRTpkFHAXsDxbKhXEwj8hRkus-Dls--MpvozgciKroMM47SWPVLXthYzBFpQsyZ6RDGkyP-5CRaa-iWENi70ApaQlE4qiC_b8Ox546cFeM70ApUM979FAmlkA=s1024,Parking garage,Parking garage,Open 24 hours,,Open All Days,"152 P. Xa Dan, Phuong Lien, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+gi%E1%BB%AF+xe+%C4%91%C3%ACnh+Kim+Li%C3%AAn/data=!4m7!3m6!1s0x3135abb174eec5e1:0xb6dc107cf05d23a7!8m2!3d21.010115!4d105.838317!16s%2Fg%2F11j50f3f7y!19sChIJ4cXudLGrNTERpyNd8HwQ3LY?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJAWZhLl2rNTERbXMma7tvB8o,Bai De Xe Chua Lang,,,10,3.7,"Name: Bai Xe Chua Boc +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+Ch%C3%B9a+B%E1%BB%99c/@21.0073957,105.8293817?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai gui xe Truong Man Non Sao Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Tr%C6%B0%E1%BB%9Dng+M%E1%BA%A7n+Non+Sao+Mai/@21.0453212,105.77690919999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Diem Trong Giu Xe Duc Thuan +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C4%90%E1%BB%A9c+Thu%E1%BA%ADn/@21.0334926,105.7878846?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0962 553 966,1,Bai De Xe Chua Lang (Owner),,https://lh3.ggpht.com/p/AB5caB9FXOgbUedqhQZ0LrbGVQPQp7MCAv4lmoUrYEpEquqXYz3Od21rQtYnbuHA9Iapq4VUhh8MSYYUi5NURHdfJIUzSNW-thHEpK0u6ZJZ2DTBO7tc1beFCWYrnHQ0HMwSc3sqABlgUg=s1024,Parking lot,Parking lot,,,Open All Days,"157 P. Chua Lang, Lang Thuong, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%83+Xe+Ch%C3%B9a+L%C3%A1ng/data=!4m7!3m6!1s0x3135ab5d2e616601:0xca076fbb6b26736d!8m2!3d21.0231036!4d105.8031782!16s%2Fg%2F1tqpwqk0!19sChIJAWZhLl2rNTERbXMma7tvB8o?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJCScTdylTNDER4HTVW0JuKYM,Kho ha dong,,,2,3,"Name: Bai Do Xe O To Cho Yen Phuc +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4+Ch%E1%BB%A3+Y%C3%AAn+Ph%C3%BAc/@20.9693032,105.7860858?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Ben Van Khe +Link: https://www.google.com/maps/search/B%E1%BA%BFn+V%C4%83n+Kh%C3%AA/@20.9549299,105.75565960000002?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Yen Nghia ha dong +Link: https://www.google.com/maps/search/Y%C3%AAn+Ngh%C4%A9a+h%C3%A0+%C4%91%C3%B4ng/@20.9521572,105.74771650000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Cong ty xuat khau lao dong - a H +Link: https://www.google.com/maps/search/C%C3%B4ng+ty+xu%E1%BA%A5t+kh%E1%BA%A9u+lao+%C4%91%E1%BB%99ng+-+a+H/@20.9761381,105.7653641?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Kho ha dong (Owner),,,Parking lot,Parking lot,,,Open All Days,"XQ32+V9, Ba La, Ha Dong, Ha Noi",,https://www.google.com/maps/place/Kho+h%C3%A0+%C4%91%C3%B4ng/data=!4m7!3m6!1s0x3134532977132709:0x83296e425bd574e0!8m2!3d20.9547406!4d105.7509023!16s%2Fg%2F11sm9y31xy!19sChIJCScTdylTNDER4HTVW0JuKYM?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJb45j1KSrNTERuqQniRmyAOE,BAI DO XE O TO,,,6,4.3,"Name: Bai do xe Ngoc Ha +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Ng%E1%BB%8Dc+H%C3%A0/@21.0391194,105.82903739999999?authuser=0&hl=en&entry=ttu +Reviews: 26 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9867769,105.8198008?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,BAI DO XE O TO (Owner),,https://lh3.ggpht.com/p/AB5caB9LAYQ7kzEy2OlilPGPRiqDeAdICFu8IJOHmpf2jl48khHziB_7A7hNGr9sw_e0J99vWuFnztwbwk_U2U6_AioEEw4ZjfuBpQln5A7Vp4xFGprHcEkh88cO2KKxHThtpuVO025b3xb_Di9h=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"39b P. Phuc Xa, Phuc xa, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/data=!4m7!3m6!1s0x3135aba4d4638e6f:0xe100b2198927a4ba!8m2!3d21.0478608!4d105.8457672!16s%2Fg%2F11fb2jgpx8!19sChIJb45j1KSrNTERuqQniRmyAOE?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJwaY-C7-tNTERHrcg2w9AgYg,Bai do xe,,,1,4,"Name: Bai gui xe HH +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+HH/@20.962063600000004,105.8285465?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai rua xe do xe +Link: https://www.google.com/maps/search/B%C3%A3i+r%E1%BB%ADa+xe+%C4%91%E1%BB%97+xe/@20.9834615,105.8704131?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,Bai do xe (Owner),,https://lh3.ggpht.com/p/AB5caB_mwZT8RGe-fVjWogmrH6P7IGYf3S-palhtGF9oP5wEs0MV7UTyKiGkFn-rU3kcKYg5pReLVdrEZF9HXJUDmmuG8CjIhAVeLoCE_BYXIFUBMZaTI1WDTAcafbwCMeTF00ne_rt0uw=s1024,Parking lot,Parking lot,,,Open All Days,"XR8F+9HJ, Hoang Liet, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe/data=!4m7!3m6!1s0x3135adbf0b3ea6c1:0x8881400fdb20b71e!8m2!3d20.965961!4d105.8238765!16s%2Fg%2F11ffm06pg6!19sChIJwaY-C7-tNTERHrcg2w9AgYg?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ0avLdLytNTERD-bdccY1sKE,"Bai trong giu o to TVT ngo 225 pho Nguyen Duc Canh, Tuong Mai, Hoang Mai, Ha Noi, Viet Nam",Dam bao moi tieu chi voi chat luong cao nhat,,2,3.5,"Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: So 119 - Ngo 24 Kim Dong - Bai trong giu xe oto +Link: https://www.google.com/maps/search/S%E1%BB%91+119+-+Ng%C3%B5+24+Kim+%C4%90%E1%BB%93ng+-+B%C3%A3i+tr%C3%B4ng+gi%E1%BB%AF+xe+%C3%B4t%C3%B4/@20.979865099999998,105.8429116?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Thinh Liet +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Th%E1%BB%8Bnh+Li%E1%BB%87t/@20.971021699999998,105.8483868?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0988 888 836,,"Bai trong giu o to TVT ngo 225 pho Nguyen Duc Canh, Tuong Mai, Hoang Mai, Ha Noi, Viet Nam (Owner)",https://www.google.com/maps/contrib/112819468650240342454,,Parking lot,Parking lot,,,Open All Days,"ngo 225 Nguyen Duc Canh, Tuong Mai, Hoang Mai, Ha Noi",,"https://www.google.com/maps/place/B%C3%A3i+tr%C3%B4ng+gi%E1%BB%AF+%C3%B4+t%C3%B4+TVT+ngo+225+ph%E1%BB%91+Nguy%E1%BB%85n+%C4%90%E1%BB%A9c+C%E1%BA%A3nh,+T%C6%B0%C6%A1ng+Mai,+Ho%C3%A0ng+Mai,+H%C3%A0+N%E1%BB%99i,+Vi%E1%BB%87t+Nam/data=!4m7!3m6!1s0x3135adbc74cbabd1:0xa1b035c671dde60f!8m2!3d20.9872361!4d105.8536985!16s%2Fg%2F11gxsyrd7t!19sChIJ0avLdLytNTERD-bdccY1sKE?authuser=0&hl=en&rclk=1",bai do xe gan ptit ha dong +ChIJoTR7kAKtNTERmT9tF_hdch0,Bai Gui Xe O To,,,2,5,"Name: Bai gui xe HH +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+HH/@20.962063600000004,105.8285465?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Thinh Liet +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Th%E1%BB%8Bnh+Li%E1%BB%87t/@20.971021699999998,105.8483868?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai Gui Xe O To (Owner),,,Free parking lot,Free parking lot,,,Open All Days,"XR79+8P8, Bang A, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/data=!4m7!3m6!1s0x3135ad02907b34a1:0x1d725df8176d3f99!8m2!3d20.9632812!4d105.8193362!16s%2Fg%2F11gdykpcs_!19sChIJoTR7kAKtNTERmT9tF_hdch0?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJO_sbce6sNTERx87V3Ofodtc,Temporary car parking place,,,5,4.2,"Name: Bai do xe Kim Giang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Kim+Giang/@20.979834,105.814644?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Kim Van +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Kim+V%C4%83n/@20.9754531,105.82180749999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe +Link: https://www.google.com/maps/search/B%C3%A3i+xe/@20.995946099999998,105.82298229999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe Pham Dung +Link: https://www.google.com/maps/search/B%C3%A3i+xe+Ph%E1%BA%A1m+D%C5%A9ng/@20.9745813,105.81887359999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Temporary car parking place (Owner),,,Parking lot,Parking lot,,,Open All Days,"XRJ8+G4M, Kim Van, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/Temporary+car+parking+place/data=!4m7!3m6!1s0x3135acee711bfb3b:0xd776e8e7dcd5cec7!8m2!3d20.9813418!4d105.8152956!16s%2Fg%2F11f3q77l88!19sChIJO_sbce6sNTERx87V3Ofodtc?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ587QoHKtNTER1dzE3kglWt0,Bai Xe Chua Boc,,,12,1.8,"Name: Bai De Xe Chua Lang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%83+Xe+Ch%C3%B9a+L%C3%A1ng/@21.0231036,105.80317819999999?authuser=0&hl=en&entry=ttu +Reviews: 10 reviews + +Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,0902 188 080,1,Bai Xe Chua Boc (Owner),,https://lh3.ggpht.com/p/AB5caB931kASzorTNny77G_N1JU6slS-aladKCsmm2O4SXdEWdD0jixSdpuolLhSGu7ZoLRXOB9Z63JJuMLreRXRWWiK71bYZVF_3UKutp-YVnrs0OvZMQ9ev6L7i_3gcdRkdy1E6BnU=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"8 P. Chua Boc, Quang Trung, Dong Da, Ha Noi 11514",,https://www.google.com/maps/place/B%C3%A3i+Xe+Ch%C3%B9a+B%E1%BB%99c/data=!4m7!3m6!1s0x3135ad72a0d0cee7:0xdd5a2548dec4dcd5!8m2!3d21.0073957!4d105.8293817!16s%2Fg%2F11tszzms3v!19sChIJ587QoHKtNTER1dzE3kglWt0?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJYcXpLqKtNTERMIp2F356wzg,Bai trong xe oto,,,1,5,"Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+xe+oto/@20.998038299999997,105.8050507?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Thinh Liet +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Th%E1%BB%8Bnh+Li%E1%BB%87t/@20.971021699999998,105.8483868?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai trong xe oto (Owner),,https://lh3.ggpht.com/p/AB5caB-w02ptpVcVZkWDR9TR7bFJjA6eusf0K5iZQDCDVHoJMumB3082QD5tm7pGD-Zhi2zxuQ_WUsPkTiuM3M88K10RHkLB9NlwvQv55OMuwrq-gSfU92SGlU8baMsWJ7JE_9fIVPj1=s1024,Parking lot,Parking lot,,,Open All Days,"XRCX+G2C, Thinh Liet, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/data=!4m7!3m6!1s0x3135ada22ee9c561:0x38c37a7e17768a30!8m2!3d20.9713119!4d105.8475225!16s%2Fg%2F11qqf_dqh5!19sChIJYcXpLqKtNTERMIp2F356wzg?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJm9byq2hTNDER6fDEvEwjNNQ,Bai gui xe Tuan Ngo,Rat dong y,,2,4.5,"Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.964710699999998,105.79765119999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/@20.9918493,105.7932795?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe o to 24/24h +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4+24%2F24h/@21.0312783,105.740607?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai Gui Xe Dh Mo-dia Chat +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C4%90h+M%E1%BB%8F-%C4%91%E1%BB%8Ba+Ch%E1%BA%A5t/@21.071608800000003,105.7776627?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0981 789 474,,Bai gui xe Tuan Ngo (Owner),https://www.google.com/maps/contrib/102541930558909133714,https://lh3.ggpht.com/p/AB5caB_M9QPnmnbCWz6fhw6vftrq5rlZdLmpoLlsKO668a5q_ptesPo2G7pGzlSHsqYeslXngBtOGfNnsVydia_W4aeSuOhWQAszCJs4xCZBzPlde0fhEoc7vLjaA16ZM2UiqPOdJeXlSQ=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"Lang hoa dao, P. Ngoc Truc, Dai Me, Nam Tu Liem, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+Tu%E1%BA%A5n+Ng%E1%BB%8D/data=!4m7!3m6!1s0x31345368abf2d69b:0xd434234cbcc4f0e9!8m2!3d20.9881931!4d105.7704992!16s%2Fg%2F11jp2zrwss!19sChIJm9byq2hTNDER6fDEvEwjNNQ?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJcYUrXcKtNTERoySFi_oB2eQ,15A Phuong Mai,,,6,4.2,"Name: Cua hang xe +Link: https://www.google.com/maps/search/C%E1%BB%ADa+h%C3%A0ng+xe/@20.9833592,105.8568603?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai giu xe dinh Kim Lien +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+%C4%91%C3%ACnh+Kim+Li%C3%AAn/@21.010115,105.83831699999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe BV Bach Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+BV+B%E1%BA%A1ch+Mai/@21.0033904,105.840864?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Gara Tai Da Nang +Link: https://www.google.com/maps/search/Gara+T%C3%A0i+%C4%90%C3%A0+N%E1%BA%B5ng/@20.960684399999998,105.8412022?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,15A Phuong Mai (Owner),,https://lh3.ggpht.com/p/AB5caB-k-aW6MhffDFIxY5TRG1PQ0hceWG0Vb12naeXnzQ9ixmBFuO0LveF0GGf_uH98xJ2IJ12J70C2ZMhw_6iJOrr3mWuGYfv3B22rQWmtK2IBuKm5aN7tD09N4U6jzSRYYt9UJxz0sXOgR2Se=s1024,Parking garage,Parking garage,,,Open All Days,"15A Phuong Mai, Dong Da, Ha Noi 100000",,https://www.google.com/maps/place/15A+Ph%C6%B0%C6%A1ng+Mai/data=!4m7!3m6!1s0x3135adc25d2b8571:0xe4d901fa8b8524a3!8m2!3d21.0038019!4d105.8386591!16s%2Fg%2F11mvqn104r!19sChIJcYUrXcKtNTERoySFi_oB2eQ?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ19a5ygOtNTERHjGds14_1V8,Bai Do Xe,,,2,3.5,"Name: Bai gui xe HH +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+HH/@20.962063600000004,105.8285465?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai rua xe do xe +Link: https://www.google.com/maps/search/B%C3%A3i+r%E1%BB%ADa+xe+%C4%91%E1%BB%97+xe/@20.9834615,105.8704131?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,Bai Do Xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"Ng. 123 P. Bang Liet, Bang A, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%97+Xe/data=!4m7!3m6!1s0x3135ad03cab9d6d7:0x5fd53f5eb39d311e!8m2!3d20.9610063!4d105.8216358!16s%2Fg%2F11hb2gxftj!19sChIJ19a5ygOtNTERHjGds14_1V8?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJMxjdePKrNTERhz2JjPiy-w0,Bai xe Cong ty TNHH Phat trien dich vu Dung Truong,Trong giu xe o to va xe may 24/24h,,0,0,"Name: Bai do xe Truong Chinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Tr%C6%B0%E1%BB%9Dng+Chinh/@21.0018285,105.8229903?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0149662,105.84152209999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe Dung Ngong +Link: https://www.google.com/maps/search/B%C3%A3i+xe+D%C5%A9ng+Ng%E1%BB%8Dng/@20.9684492,105.8788809?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0902 061 975,,Bai xe Cong ty TNHH Phat trien dich vu Dung Truong (Owner),https://www.google.com/maps/contrib/113229938671280041908,https://lh3.ggpht.com/p/AF1QipPorcNWMqpft7xoDLzZPmbMoKKz0VuCDPzbQRzq=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"82 Ng. Trung Tien, Pho, Dong Da, Ha Noi 10000",,https://www.google.com/maps/place/B%C3%A3i+xe+C%C3%B4ng+ty+TNHH+Ph%C3%A1t+tri%E1%BB%83n+d%E1%BB%8Bch+v%E1%BB%A5+D%C5%A9ng+Tr%C6%B0%C6%A1ng/data=!4m7!3m6!1s0x3135abf278dd1833:0xdfbb2f88c893d87!8m2!3d21.0205669!4d105.8386507!16s%2Fg%2F11r4jhfp2k!19sChIJMxjdePKrNTERhz2JjPiy-w0?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ4VX3BACrNTERyzADgk-ZUFg,Bai do xe Nguyen Hong,,,0,0,"Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe CP taxi Ha Noi +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+CP+taxi+H%C3%A0+N%E1%BB%99i/@21.012037499999998,105.81464059999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe & rua xe,don noi that,thay dau o to xe may, Trung Van +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%26+r%E1%BB%ADa+xe%2Cd%E1%BB%8Dn+n%E1%BB%99i+th%E1%BA%A5t%2Cthay+d%E1%BA%A7u+%C3%B4+t%C3%B4+xe+m%C3%A1y%2C+Trung+V%C4%83n/@20.9872551,105.7960332?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+xe+oto/@20.998038299999997,105.8050507?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.006772599999998,105.86952029999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe Nguyen Hong (Owner),,,Parking lot,Parking lot,,,Open All Days,"45b P. Nguyen Hong, Thanh Cong, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%C3%AAn+H%E1%BB%93ng/data=!4m7!3m6!1s0x3135ab0004f755e1:0x5850994f820330cb!8m2!3d21.0237612!4d105.8116413!16s%2Fg%2F11wjl5qbd9!19sChIJ4VX3BACrNTERyzADgk-ZUFg?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJBbu0PqatNTERMqYgd3Qpvzw,Bai do xe Phung Khoang,"Bai do xe Phung Khoang nhan trong giu cac loai xe may xe o to theo ngay, thang.",,5,1.4,"Name: Phung khoang diem do +Link: https://www.google.com/maps/search/Ph%C3%B9ng+khoang+%C4%91i%E1%BB%83m+%C4%91%E1%BB%97/@20.9869368,105.7931327?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe & rua xe,don noi that,thay dau o to xe may, Trung Van +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%26+r%E1%BB%ADa+xe%2Cd%E1%BB%8Dn+n%E1%BB%99i+th%E1%BA%A5t%2Cthay+d%E1%BA%A7u+%C3%B4+t%C3%B4+xe+m%C3%A1y%2C+Trung+V%C4%83n/@20.9872551,105.7960332?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe san vui choi Phung Khoang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+s%C3%A2n+vui+ch%C6%A1i+Ph%C3%B9ng+Khoang/@20.990264,105.793673?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/@20.9918493,105.7932795?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,024 3553 9915,,Bai do xe Phung Khoang (Owner),https://www.google.com/maps/contrib/109445558299262893295,https://lh3.ggpht.com/p/AB5caB_VSuvytbUGg1rmwG0zLBLyKrdL1TsFdaFFaat9QV4vWDcftrLMHe-nx_b0ietp4Mq8Az9Y-MsxWC_tCMO-EKjzsyWJdUNClTs5rRLH3VogcuqMozAv9zpzlUGC8rWJRrh_ExKq=s1024,Parking lot,Parking lot,5 AM-11:30 PM,,Open All Days,"Unnamed Road, P. Van Quan, Nam Tu Liem, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+Ph%C3%B9ng+Khoang/data=!4m7!3m6!1s0x3135ada63eb4bb05:0x3cbf29747720a632!8m2!3d20.9874508!4d105.7960713!16s%2Fg%2F11fm_c5k22!19sChIJBbu0PqatNTERMqYgd3Qpvzw?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJH-nLHwCrNTERNRVWxqcByh4,Thuong tin ha noi,,,3,4.7,"Name: Diem Do xe Tran Nhat Duat +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+xe+Tr%E1%BA%A7n+Nh%E1%BA%ADt+Du%E1%BA%ADt/@21.0367286,105.85343010000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Thuong thanh +Link: https://www.google.com/maps/search/Th%C6%B0%E1%BB%A3ng+thanh/@21.062478,105.88948599999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Nn +Link: https://www.google.com/maps/search/Nn/@21.033067,105.78416899999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai trong xe Phan ke binh +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+Phan+k%E1%BA%BF+b%C3%ADnh/@21.0343043,105.8122015?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Nha do xe cao tang -Tran Nhat Duat +Link: https://www.google.com/maps/search/Nh%C3%A0+%C4%91%E1%BB%97+xe+cao+t%E1%BA%A7ng+-Tr%E1%BA%A7n+Nh%E1%BA%ADt+Du%E1%BA%ADt/@21.0395212,105.8514933?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Thuong tin ha noi (Owner),,https://lh3.ggpht.com/p/AB5caB_9alMaCZQec62ae_7Ohzb0ROjDJSIsL-e89sPqaibbpJeqFZKtcbU0ik3cx_OSX35fJ2OiDcBOs122OCVn1wKKCLb-i-T8SYLISND3w-pSBy6CnKwekJI0aW-buJTBlM2xvm-azw=s1024,Parking lot,Parking lot,,,Open All Days,"2RM4+R2M, Cau Dich Vong, Quan Hoa, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/Th%C6%B0%E1%BB%9Dng+t%C3%ADn+h%C3%A0+n%E1%BB%99i/data=!4m7!3m6!1s0x3135ab001fcbe91f:0x1eca01a7c6561535!8m2!3d21.034584!4d105.8050563!16s%2Fg%2F11vrf4f9rt!19sChIJH-nLHwCrNTERNRVWxqcByh4?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJK2wAd1atNTERFWLoMYQDbLY,Bai xe Ha anh 161 tran hoa,phu tung o to Ha anh chuyen van phong ve ngo 161 pho Tran hoa,,4,4.5,"Name: San tap lai xe tran hoa +Link: https://www.google.com/maps/search/S%C3%A2n+t%E1%BA%ADp+l%C3%A1i+xe+tr%E1%BA%A7n+ho%C3%A0/@20.9735478,105.8263522?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai xe 86 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+86/@20.975667200000004,105.8256243?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Bai Do Xe 195 Dinh Cong Ha +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+195+%C4%90%E1%BB%8Bnh+C%C3%B4ng+H%E1%BA%A1/@20.982859899999998,105.82542939999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai 24/2 +Link: https://www.google.com/maps/search/B%C3%A3i+24%2F2/@20.9831403,105.8303121?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.9865449,105.8308979?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0981 062 882,,Bai xe Ha anh 161 tran hoa (Owner),https://www.google.com/maps/contrib/110279611909120787735,https://lh3.ggpht.com/p/AB5caB-WWDJrJzOVCLTkBgBaUmd9Z-SqXB1erRjgJtlsL2ItIqMaEo7tN4DfyPkv9mN2gYLYcAQfUUirXAgbf1KOWLqoEzfb3yyGPJqU2mZrw3v8Gc-qzA4gtMIaMeEwfsobYylD5GW5=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"ngo 161 P. Tran Hoa, Dinh Cong, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+H%C3%A0+anh+161+tr%E1%BA%A7n+ho%C3%A0/data=!4m7!3m6!1s0x3135ad5677006c2b:0xb66c038431e86215!8m2!3d20.9756617!4d105.8256676!16s%2Fg%2F11jpbys60k!19sChIJK2wAd1atNTERFWLoMYQDbLY?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJCyejnHZTNDERGZzqdXsZwl0,Ben xe HN sM,,,0,0,"Name: DIEM GIAO NHAN HANG XE BAC LAM +Link: https://www.google.com/maps/search/%C4%90I%E1%BB%82M+GIAO+NH%E1%BA%ACN+H%C3%80NG+XE+B%E1%BA%AEC+L%C3%83M/@20.9383786,105.7734607?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Ben xe Song Ma Ha Noi +Link: https://www.google.com/maps/search/B%E1%BA%BFn+xe+S%C3%B4ng+M%C3%A3+H%C3%A0+N%E1%BB%99i/@20.9624436,105.7684146?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Ben Van Khe +Link: https://www.google.com/maps/search/B%E1%BA%BFn+V%C4%83n+Kh%C3%AA/@20.9549299,105.75565960000002?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Gara Manh Tuan +Link: https://www.google.com/maps/search/Gara+Ma%CC%A3nh+Tu%C3%A2n/@20.9624058,105.7684197?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Tinh Coach Station +Link: https://www.google.com/maps/search/Tinh+Coach+Station/@20.9582574,105.7620197?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Ben xe HN sM (Owner),,,Parking lot,Parking lot,,,Open All Days,"XQ59+FGH, Khu do thi Van Phu, Ha Dong, Ha Noi",,https://www.google.com/maps/place/B%E1%BA%BFn+xe+HN+sM/data=!4m7!3m6!1s0x313453769ca3270b:0x5dc2197b75ea9c19!8m2!3d20.9586775!4d105.7688614!16s%2Fg%2F11krmzp7vj!19sChIJCyejnHZTNDERGZzqdXsZwl0?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJAcZMO1utNTERTLXjcYZ9gEo,Bai xe,,,0,0,"Name: Bai do xe Truong Chinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Tr%C6%B0%E1%BB%9Dng+Chinh/@21.0018285,105.8229903?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews + +Name: Bai do xe 183 HVT +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+183+HVT/@20.9968668,105.82281259999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+xe+oto/@20.998038299999997,105.8050507?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.995428,105.82421219999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"So 29 Ng. 183 P. Hoang Van Thai, Khuong Trung, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe/data=!4m7!3m6!1s0x3135ad5b3b4cc601:0x4a807d8671e3b54c!8m2!3d20.9959461!4d105.8229823!16s%2Fg%2F11hn4x0_6r!19sChIJAcZMO1utNTERTLXjcYZ9gEo?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ-Xh8nDJTNDERyWLygRVd5Ng,San Tap Lai Xe Ha Tri - Ha Dong,"Ha Noi B1, B2 tron goi 16tr. +San dep noi thanh nhu san thi, hoc 1 thay 1 tro, xe doi moi. +Dac biet co lop buoi toi cho nguoi ban ron. Giam 200k cho nhom tu 2 nguoi. +Inbox hoac goi 0384379491",,78,4.2,"Name: Trung tam dao tao lai xe Sao Bac Viet +Link: https://www.google.com/maps/search/Trung+t%C3%A2m+%C4%91%C3%A0o+t%E1%BA%A1o+l%C3%A1i+xe+Sao+B%E1%BA%AFc+Vi%E1%BB%87t/@20.9651411,105.7802088?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Trung Tam Day Nghe Sao Bac Viet +Link: https://www.google.com/maps/search/Trung+T%C3%A2m+D%E1%BA%A1y+Ngh%E1%BB%81+Sao+B%E1%BA%AFc+Vi%E1%BB%87t/@20.965304,105.78048059999999?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: CONG TY CO PHAN TU VAN DICH VU DAO TAO LAI XE HA NOI +Link: https://www.google.com/maps/search/C%C3%94NG+TY+C%E1%BB%94+PH%E1%BA%A6N+T%C6%AF+V%E1%BA%A4N+D%E1%BB%8ACH+V%E1%BB%A4+%C4%90%C3%80O+T%E1%BA%A0O+L%C3%81I+XE+H%C3%80+N%E1%BB%98I/@20.963428800000003,105.77665619999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Trung tam dao tao lai xe Sao Thu Do +Link: https://www.google.com/maps/search/Trung+t%C3%A2m+%C4%91%C3%A0o+t%E1%BA%A1o+l%C3%A1i+xe+Sao+Th%E1%BB%A7+%C4%90%C3%B4/@20.9623101,105.7816534?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Lam Bang Lai Xe Oto Tai Ha Dong +Link: https://www.google.com/maps/search/L%C3%A0m+B%E1%BA%B1ng+L%C3%A1i+Xe+Oto+T%E1%BA%A1i+H%C3%A0+%C4%90%C3%B4ng/@20.9688292,105.7854163?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",https://www.facebook.com/DayLaiXeSBV99/,0384 379 491,,San Tap Lai Xe Ha Tri - Ha Dong (Owner),https://www.google.com/maps/contrib/113529343759753315016,https://lh3.ggpht.com/p/AF1QipMK57MZBZf8gJnPeRu0cODuI7nzsBff-v2Sj_bm=s1024,Self-storage facility,"Self-storage facility, Driving school",,,Open All Days,"Ha Tri, Ha Dong, Hanoi",,https://www.google.com/maps/place/S%C3%A2n+T%E1%BA%ADp+L%C3%A1i+Xe+H%C3%A0+Tr%C3%AC+-+H%C3%A0+%C4%90%C3%B4ng/data=!4m7!3m6!1s0x313453329c7c78f9:0xd8e45d1581f262c9!8m2!3d20.9621065!4d105.7816109!16s%2Fg%2F11j8t2dzxw!19sChIJ-Xh8nDJTNDERyWLygRVd5Ng?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJiacXTACrNTEReI4Nn18PFXo,Diem Do xe Tran Nhat Duat,,,2,5,"Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai trong o to mat tien Hoang Quoc Viet +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+%C3%B4+t%C3%B4+m%E1%BA%B7t+ti%E1%BB%81n+Ho%C3%A0ng+Qu%E1%BB%91c+Vi%E1%BB%87t/@21.04647,105.792306?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.006772599999998,105.86952029999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Diem Do xe Tran Nhat Duat (Owner),,,Parking lot,Parking lot,,,Open All Days,"2VP3+M9V, D. Tran Nhat Duat, Pho co Ha Noi, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+xe+Tr%E1%BA%A7n+Nh%E1%BA%ADt+Du%E1%BA%ADt/data=!4m7!3m6!1s0x3135ab004c17a789:0x7a150f5f9f0d8e78!8m2!3d21.0367286!4d105.8534301!16s%2Fg%2F11y684rxcl!19sChIJiacXTACrNTEReI4Nn18PFXo?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJvWtdFnutNTEREnb2U5kc20o,Bai Trong Xe May Tu Mo,,,4,3.8,"Name: Diem Trong Giu Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4/@21.014042399999997,105.79629949999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe Truong Man Non Sao Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Tr%C6%B0%E1%BB%9Dng+M%E1%BA%A7n+Non+Sao+Mai/@21.0453212,105.77690919999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/@20.9918493,105.7932795?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai Trong Xe May Tu Mo (Owner),,https://lh3.ggpht.com/p/AB5caB-cTgDirc9UZuRAGpNAlh_UEyxZsighwZIlOoWDxrqT-iyRoH4dZ0DHFLyKXP49AuF7qUSwZc7u45wZUYsS6XKhy1yzzSLrOamuDSnKEPoe2IYIbHVnT6nOtd6iNot4SI0u_DZ3=s1024,Parking lot,Parking lot,,,Open All Days,"2Q5V+XCR Tu Mo, P. Nguyen Chanh, Trung Hoa, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+Tr%C3%B4ng+Xe+M%C3%A1y+T%C3%BA+M%E1%BB%A1/data=!4m7!3m6!1s0x3135ad7b165d6bbd:0x4adb1c9953f67612!8m2!3d21.0099804!4d105.7935213!16s%2Fg%2F11qr2pcd4f!19sChIJvWtdFnutNTEREnb2U5kc20o?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJLyD3OYqrNTERE5iEpj6lu-M,Bai do xe o to,,,0,0,"Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91o+xe/@21.001345,105.86488500000002?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.006772599999998,105.86952029999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe o to (Owner),,https://lh3.ggpht.com/p/AB5caB8m4kTtsXqDZ0ur4zg5Ah_Mb5tpOyY7JB0Qtl9leWbRvFi7VBJ-vBF5tLo1prH0XLoUANOIwb1xNhKkx9PBgcRaisuadU6F8_2FRmx5pilNFUrfiNNumddhkbrHppWHfr6hQgcj=s1024,Parking lot,Parking lot,,,Open All Days,"29 P. Vo Thi Sau, Thanh Nhan, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/data=!4m7!3m6!1s0x3135ab8a39f7202f:0xe3bba53ea6849813!8m2!3d21.0080236!4d105.8547246!16s%2Fg%2F11mc8rnqsm!19sChIJLyD3OYqrNTERE5iEpj6lu-M?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJaVI1fACtNTERouMDbPEatFU,Ben xe ve que,,,0,0,"Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: XE DONGBEN +Link: https://www.google.com/maps/search/XE+DONGBEN/@20.9588725,105.8461873?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Rua xe - Bai xe cau to +Link: https://www.google.com/maps/search/R%E1%BB%ADa+xe+-+B%C3%A3i+xe+c%E1%BA%A7u+t%C3%B3/@20.9564485,105.8102873?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe dich vu +Link: https://www.google.com/maps/search/B%C3%A3i+xe+d%E1%BB%8Bch+v%E1%BB%A5/@20.968697799999997,105.8758929?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe Hoang Huan +Link: https://www.google.com/maps/search/B%C3%A3i+xe+Ho%C3%A0ng+Hu%E1%BA%A5n/@20.9882933,105.9023412?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Ben xe ve que (Owner),,,Parking lot,Parking lot,,,Open All Days,"12 P. Tran Thu Do, Hoang Liet, Thanh Tri, Ha Noi",,https://www.google.com/maps/place/B%E1%BA%BFn+xe+v%E1%BB%81+qu%C3%AA/data=!4m7!3m6!1s0x3135ad007c355269:0x55b41af16c03e3a2!8m2!3d20.9631613!4d105.8469254!16s%2Fg%2F11vr2q8w2s!19sChIJaVI1fACtNTERouMDbPEatFU?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJT9t5SgBVNDERhPPp7zfEHEU,Bai do xe co quan,,,0,0,"Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0149662,105.84152209999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe CP taxi Ha Noi +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+CP+taxi+H%C3%A0+N%E1%BB%99i/@21.012037499999998,105.81464059999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe Nguyen Thi Due +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%E1%BB%85n+Th%E1%BB%8B+Du%E1%BB%87/@21.019136,105.79005099999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai Gui Xe Dh Mo-dia Chat +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C4%90h+M%E1%BB%8F-%C4%91%E1%BB%8Ba+Ch%E1%BA%A5t/@21.071608800000003,105.7776627?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe co quan (Owner),,,Parking lot,Parking lot,,,Open All Days,"12 Ton That Thuyet, My Dinh, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+c%C6%A1+quan/data=!4m7!3m6!1s0x313455004a79db4f:0x451cc437efe9f384!8m2!3d21.0282887!4d105.7817484!16s%2Fg%2F11y8smy12g!19sChIJT9t5SgBVNDERhPPp7zfEHEU?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJNzwLlStTNDERNRD-HsG4Ndg,Doi Dien Buu Dien Ha Dong(15 Quang Trung Ha Dong),,,0,0,"Name: Giua So 428 - 430 Quang Trung (Ha Dong) +Link: https://www.google.com/maps/search/Gi%E1%BB%AFa+S%E1%BB%91+428+-+430+Quang+Trung+(H%C3%A0+%C4%90%C3%B4ng)/@20.962007099999997,105.76424829999999?authuser=0&hl=en&entry=ttu +Reviews: 32 reviews + +Name: 80 Quang Trung - Ha Dong +Link: https://www.google.com/maps/search/80+Quang+Trung+-+H%C3%A0+%C4%90%C3%B4ng/@20.9704305,105.7748603?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: 405-407 Quang Trung +Link: https://www.google.com/maps/search/405-407+Quang+Trung/@20.964920199999998,105.7678696?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: TT xuc tien TM Ha Dong +Link: https://www.google.com/maps/search/TT+x%C3%BAc+ti%E1%BA%BFn+TM+H%C3%A0+%C4%90%C3%B4ng/@20.9728356,105.7784432?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: 96 Quang Trung - Ha Dong +Link: https://www.google.com/maps/search/96+Quang+Trung+-+H%C3%A0+%C4%90%C3%B4ng/@20.969518,105.77386000000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,,Doi Dien Buu Dien Ha Dong(15 Quang Trung Ha Dong) (Owner),,https://lh3.ggpht.com/p/AB5caB8bvG-8nI5-E22JuvO9wudTJKr26m37qcfJW3rN6miecNTsTqKuwb31lRsrXfJAUB_f1XDrWIwLOtn9NJ6au7Z3-J10Loh4YBO95slNUdAU6pHfbdF7SqysrkHzMzzmH3AV-41k=s1024,Bus stop,Bus stop,,,Open All Days,"Quang Trung, Ha Dong, Hanoi",,https://www.google.com/maps/place/%C4%90%E1%BB%91i+Di%E1%BB%87n+B%C6%B0u+%C4%90i%E1%BB%87n+H%C3%A0+%C4%90%C3%B4ng%2815+Quang+Trung+H%C3%A0+%C4%90%C3%B4ng%29/data=!4m7!3m6!1s0x3134532b950b3c37:0xd835b8c11efe1035!8m2!3d20.972329!4d105.7778628!16s%2Fg%2F11n86r79jq!19sChIJNzwLlStTNDERNRD-HsG4Ndg?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ17mg8-CtNTERzOFrtUoqgBk,Bai xe oto,,,1,3,"Name: Bai Dau Xe 24/7 +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BA%ADu+Xe+24%2F7/@20.9987748,105.7964516?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Gara Trong +Link: https://www.google.com/maps/search/Gara+Tr%E1%BB%8Dng/@20.999530999999998,105.8074389?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe +Link: https://www.google.com/maps/search/B%C3%A3i+xe/@20.995946099999998,105.82298229999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai xe oto (Owner),,,Parking lot,Parking lot,,,Open All Days,"132 Nguyen Huy Tuong, Thanh Xuan Trung, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+oto/data=!4m7!3m6!1s0x3135ade0f3a0b9d7:0x19802a4ab56be1cc!8m2!3d20.9980383!4d105.8050507!16s%2Fg%2F11h5m3r9xj!19sChIJ17mg8-CtNTERzOFrtUoqgBk?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJDYr2SIyrNTERX2afF4EsZ64,Gui xe Vien Y Hoc Co Truyen TW,,,6,2.2,"Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Gui xe Vien Y Hoc Co Truyen TW (Owner),,https://lh3.ggpht.com/p/AB5caB9hpDTYUOUR4gR3kOUB6PZ4ZpBaTta95kZwTM1B362umkPWtUJzH9VBU8rdLXiOFLYss-EzDXMTaEoEqSP_fiGvt7hb3BY5ThWwWrQaOCfzJXXUtAfwOA_f6taKN3_AipZCZF8=s1024,Parking lot,Parking lot,12 AM-11:30 PM,,Open All Days,"2R8X+78P, P. Nguyen Binh Khiem, Nguyen Du, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/G%E1%BB%ADi+xe+Vi%E1%BB%87n+Y+H%E1%BB%8Dc+C%E1%BB%95+Truy%E1%BB%81n+TW/data=!4m7!3m6!1s0x3135ab8c48f68a0d:0xae672c81179f665f!8m2!3d21.0157067!4d105.8483306!16s%2Fg%2F12ltpq69l!19sChIJDYr2SIyrNTERX2afF4EsZ64?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJdcqIDSqtNTERkypqeQTBJcE,Bai xe Pham Dung,,,0,0,"Name: Bai rua xe Pham Dung +Link: https://www.google.com/maps/search/B%C3%A3i+r%E1%BB%ADa+xe+Ph%E1%BA%A1m+D%C5%A9ng/@20.9746138,105.81887420000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe Kim Giang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Kim+Giang/@20.979834,105.814644?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Kim Van +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Kim+V%C4%83n/@20.9754531,105.82180749999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: So 119 - Ngo 24 Kim Dong - Bai trong giu xe oto +Link: https://www.google.com/maps/search/S%E1%BB%91+119+-+Ng%C3%B5+24+Kim+%C4%90%E1%BB%93ng+-+B%C3%A3i+tr%C3%B4ng+gi%E1%BB%AF+xe+%C3%B4t%C3%B4/@20.979865099999998,105.8429116?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,0979 988 177,,Bai xe Pham Dung (Owner),https://www.google.com/maps/contrib/108530474956333418135,,Parking lot,Parking lot,,,Open All Days,"KDT moi, VIET NAM, Hanoi",,https://www.google.com/maps/place/B%C3%A3i+xe+Ph%E1%BA%A1m+D%C5%A9ng/data=!4m7!3m6!1s0x3135ad2a0d88ca75:0xc125c104796a2a93!8m2!3d20.9745813!4d105.8188736!16s%2Fg%2F11s4t4z078!19sChIJdcqIDSqtNTERkypqeQTBJcE?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJUdRruP-tNTER_MllgKhtTfI,Bai gui xe,,,1,4,"Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe Kim Giang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Kim+Giang/@20.979834,105.814644?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Kim Van +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Kim+V%C4%83n/@20.9754531,105.82180749999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+xe+oto/@20.998038299999997,105.8050507?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe +Link: https://www.google.com/maps/search/B%C3%A3i+xe/@20.995946099999998,105.82298229999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai gui xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"So 73 Ngh. 3/4 P. Hoang Dao Thanh, Kim Giang, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe/data=!4m7!3m6!1s0x3135adffb86bd451:0xf24d6da88065c9fc!8m2!3d20.9820363!4d105.8123172!16s%2Fg%2F11r519zrlp!19sChIJUdRruP-tNTER_MllgKhtTfI?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJC3OxGQBVNDERqMd0HXrTE-4,Bai Do Xe Thong Minh Hoa Vu,,,1,5,"Name: Bai do xe may +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/@21.0507824,105.8033172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai dau xe ULIS-VNU +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BA%ADu+xe+ULIS-VNU/@21.0385673,105.78214469999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe Truong Man Non Sao Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Tr%C6%B0%E1%BB%9Dng+M%E1%BA%A7n+Non+Sao+Mai/@21.0453212,105.77690919999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe thong minh car parking +Link: https://www.google.com/maps/search/B%C3%A3i+xe+th%C3%B4ng+minh+car+parking/@21.0019779,105.8273997?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe Nguyen Thi Due +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%E1%BB%85n+Th%E1%BB%8B+Du%E1%BB%87/@21.019136,105.79005099999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai Do Xe Thong Minh Hoa Vu (Owner),,,Parking lot,Parking lot,,,Open All Days,"47 Ng. 66 D. Ho Tung Mau, Mai Dich, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%97+Xe+Th%C3%B4ng+Minh+H%C3%B3a+V%C5%A9/data=!4m7!3m6!1s0x3134550019b1730b:0xee13d37a1d74c7a8!8m2!3d21.0379708!4d105.7776298!16s%2Fg%2F11vwm_37rj!19sChIJC3OxGQBVNDERqMd0HXrTE-4?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJzdGAgE2rNTERJhC2jryGL0k,Bai do xe Nguyen Thi Due,,,0,0,"Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe may +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/@21.0507824,105.8033172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.011681199999998,105.7935883?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe Nguyen Thi Due (Owner),,,Parking lot,Parking lot,,,Open All Days,"2Q9R+M23, P. Nguyen Thi Due, Yen Hoa, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%E1%BB%85n+Th%E1%BB%8B+Du%E1%BB%87/data=!4m7!3m6!1s0x3135ab4d8080d1cd:0x492f86bc8eb61026!8m2!3d21.019136!4d105.790051!16s%2Fg%2F11l1y3n88s!19sChIJzdGAgE2rNTERJhC2jryGL0k?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJuSssds6sNTERhtfMg0bhZLs,Hoc Vien CN Buu Chinh Vien Thong - Ha Dong,,,56,4.4,"Name: Posts and Telecommunications Institute of Technology (PTIT) +Link: https://www.google.com/maps/search/Posts+and+Telecommunications+Institute+of+Technology+(PTIT)/@20.980912999999997,105.78741649999999?authuser=0&hl=en&entry=ttu +Reviews: 592 reviews + +Name: Hoc vien Cong nghe Buu chinh Vien thong +Link: https://www.google.com/maps/search/H%E1%BB%8Dc+vi%E1%BB%87n+C%C3%B4ng+ngh%E1%BB%87+B%C6%B0u+ch%C3%ADnh+Vi%E1%BB%85n+th%C3%B4ng/@21.035916699999998,105.81191369999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Toa A3, Hoc vien Cong nghe Buu chinh Vien thong +Link: https://www.google.com/maps/search/T%C3%B2a+A3%2C+H%E1%BB%8Dc+vi%E1%BB%87n+C%C3%B4ng+ngh%E1%BB%87+B%C6%B0u+ch%C3%ADnh+Vi%E1%BB%85n+th%C3%B4ng/@20.980912999999997,105.78741649999999?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Hoc vien cong nghe buu chinh vien thong +Link: https://www.google.com/maps/search/H%E1%BB%8Dc+vi%E1%BB%87n+c%C3%B4ng+ngh%E1%BB%87+b%C6%B0u+ch%C3%ADnh+vi%E1%BB%85n+th%C3%B4ng/@20.937763699999998,105.7572158?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Hoc vien Cong nghe Buu chinh Vien thong - PTIT +Link: https://www.google.com/maps/search/H%E1%BB%8Dc+vi%E1%BB%87n+C%C3%B4ng+ngh%E1%BB%87+B%C6%B0u+ch%C3%ADnh+Vi%E1%BB%85n+th%C3%B4ng+-+PTIT/@20.9803797,105.7878434?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,,Hoc Vien CN Buu Chinh Vien Thong - Ha Dong (Owner),,https://lh3.ggpht.com/p/AB5caB-hjAt-8y7yWmz9PJZPPJX0hKbwzg_pSKOHN4vmz_n-C59aX-GfD50LNEizSJ1SNiw89UB4W5E1wggi57yHmhVrELJkZ6iIt3gCAOzwP6uzi6GTWfRj1g6AAdWSkDz_ccR3kweeOw=s1024,Bus stop,Bus stop,,,Open All Days,"KM9, Ha Dong, Ha Noi",,https://www.google.com/maps/place/H%E1%BB%8Dc+Vi%E1%BB%87n+CN+B%C6%B0u+Ch%C3%ADnh+Vi%E1%BB%85n+Th%C3%B4ng+-+H%C3%A0+%C4%90%C3%B4ng/data=!4m7!3m6!1s0x3135acce762c2bb9:0xbb64e14683ccd786!8m2!3d20.9805409!4d105.7878986!16s%2Fg%2F1tgcpbnr!19sChIJuSssds6sNTERhtfMg0bhZLs?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJh2nCAQBTNDERELTLHZYdvAY,Bai do xe Thien duong Bao Son,,,4,3.3,"Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe son duong +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+s%C6%A1n+d%C6%B0%C6%A1ng/@21.0667632,105.82316589999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe P11 - An Son Group +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+P11+-+An+S%C6%A1n+Group/@21.018893199999997,105.72636609999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Doi Dien Thien Duong Bao Son - Dai Lo Thang Long +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+Thi%C3%AAn+%C4%90%C6%B0%E1%BB%9Dng+B%E1%BA%A3o+S%C6%A1n+-+%C4%90%E1%BA%A1i+L%E1%BB%99+Th%C4%83ng+Long/@21.011167,105.72874999999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Hien bang tai +Link: https://www.google.com/maps/search/Hi%E1%BB%81n+b%C4%83ng+t%E1%BA%A3i/@21.0112646,105.7290081?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe Thien duong Bao Son (Owner),,https://lh3.ggpht.com/p/AB5caB-pRybCt7DCYQ_hHXCb7qizNnB_yutxFf1abnE5ONnUbyJrEzNhE78lWOO5TVkjA9cL8JlTwtH6o-k-iiuJfobeJH-jGCEv4aqgnm87_RGD2eUFJgEzgBJ7ZCjhDDvM8FAdu-N1YU7lkuwJ=s1024,Parking lot,Parking lot,,,Open All Days,"XPXM+MQ, An Khanh, Hoai Duc, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+Thi%C3%AAn+%C4%91%C6%B0%E1%BB%9Dng+B%E1%BA%A3o+S%C6%A1n/data=!4m7!3m6!1s0x3134530001c26987:0x6bc1d961dcbb410!8m2!3d20.9991967!4d105.7344674!16s%2Fg%2F11vqrq80zg!19sChIJh2nCAQBTNDERELTLHZYdvAY?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJrzAzQR-tNTERjCW--qrfQrQ,Gara oto thanh do,,,1,5,"Name: Gara oto 168 (765 Nguyen Xien) +Link: https://www.google.com/maps/search/Gara+%C3%B4t%C3%B4+168+(765+Nguy%E1%BB%85n+Xi%E1%BB%83n)/@20.9794505,105.8125464?authuser=0&hl=en&entry=ttu +Reviews: 22 reviews + +Name: Garage Thanh Nam +Link: https://www.google.com/maps/search/Garage+Th%C3%A0nh+Nam/@20.9806995,105.81162859999999?authuser=0&hl=en&entry=ttu +Reviews: 15 reviews + +Name: Gara o to giang son +Link: https://www.google.com/maps/search/Gara+%C3%B4+t%C3%B4+giang+s%C6%A1n/@20.934385799999998,105.8458325?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe Kim Giang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Kim+Giang/@20.979834,105.814644?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Gara O To Gia Phat +Link: https://www.google.com/maps/search/Gara+%C3%94+T%C3%B4+Gia+Ph%C3%A1t/@20.977361,105.8140999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0989 411 029,,Gara oto thanh do (Owner),https://www.google.com/maps/contrib/105777307292850065654,https://lh3.ggpht.com/p/AF1QipMT0nloFCFToaq087u1jbCjfB2NW_tQm9KUefMq=s1024,Parking garage,Parking garage,Open 24 hours,,Open All Days,"Nghiem Xuan Yem, Dai Kim, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/Gara+%C3%B4t%C3%B4+th%C3%A0nh+%C4%91%C3%B4/data=!4m7!3m6!1s0x3135ad1f413330af:0xb442dfaafabe258c!8m2!3d20.9816067!4d105.8115938!16s%2Fg%2F11fp3l2lx8!19sChIJrzAzQR-tNTERjCW--qrfQrQ?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ7_wo3ySrNTERkcn5sZ3Q5lc,Base,,,0,0,"Name: 156 parking Phuong Liet +Link: https://www.google.com/maps/search/156+parking+Phuong+Liet/@20.9970109,105.8387855?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai do xe 81 Lang Ha +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+81+L%C3%A1ng+H%E1%BA%A1/@21.017794199999997,105.8168796?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: NT +Link: https://www.google.com/maps/search/NT/@21.0322241,105.76979809999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.9865449,105.8308979?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe Nguyen Hong +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%C3%AAn+H%E1%BB%93ng/@21.0237612,105.81164129999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Base (Owner),,,Parking lot,Parking lot,,,Open All Days,"104 D. La Thanh, Thanh Cong, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/Base/data=!4m7!3m6!1s0x3135ab24df28fcef:0x57e6d09db1f9c991!8m2!3d21.0237956!4d105.8147214!16s%2Fg%2F11rj3j87vp!19sChIJ7_wo3ySrNTERkcn5sZ3Q5lc?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJITcPsbmrNTERwQgV4MgaOhE,Cong Ty Khai Thac Diem Do Xe Ha Noi,,,22,3.3,"Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Diem Do xe Tran Nhat Duat +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+xe+Tr%E1%BA%A7n+Nh%E1%BA%ADt+Du%E1%BA%ADt/@21.0367286,105.85343010000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Cong Ty Tnhh Mtv Khai Thac Diem Do Xe Ha Noi +Link: https://www.google.com/maps/search/C%C3%B4ng+Ty+Tnhh+Mtv+Khai+Th%C3%A1c+%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+Xe+H%C3%A0+N%E1%BB%99i/@21.0317826,105.8540178?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Diem Do Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4/@21.0477423,105.8104151?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,024 3825 6779,1,Cong Ty Khai Thac Diem Do Xe Ha Noi (Owner),,https://lh3.ggpht.com/p/AB5caB8NUhri3AzpbiACGd3-nMxAqhBZMJ6rITtVOHa1fiDIhaqyGLs_M5lQydxY-9LFtoZd_ui4OqzgyuG23yRUu_wG2S9u3d3ZTs4kJDzOncEqevt7VAyIRNXdQqI4_J7zP-wkRgc=s1024,Parking,Parking,,,Open All Days,"17 Hang Dau, Dong Xuan, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/C%C3%B4ng+Ty+Khai+Th%C3%A1c+%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+Xe+H%C3%A0+N%E1%BB%99i/data=!4m7!3m6!1s0x3135abb9b10f3721:0x113a1ac8e01508c1!8m2!3d21.0403202!4d105.8491282!16s%2Fg%2F1hc2m5xy5!19sChIJITcPsbmrNTERwQgV4MgaOhE?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJcb6sjaasNTERaPWSDd4IA0U,117 Tran Duy Hung Parking,,,27,3.8,"Name: Bac Co Parking +Link: https://www.google.com/maps/search/Bac+Co+Parking/@21.0264429,105.85906609999999?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Dien dung xe +Link: https://www.google.com/maps/search/%C4%90i%C3%AA%CC%89n+d%C6%B0%CC%80ng+xe/@21.0413088,105.7729712?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/@20.9918493,105.7932795?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,117 Tran Duy Hung Parking (Owner),,https://lh3.ggpht.com/p/AB5caB-DMxTYByXjBvgQJXvimMgMb4O2-VDRyzb8EBxYZgpa1P2Lytr7DsEJ7n-w4GjCaJGOl0hpfC-au03cigQ5KZ4Hbo1MzxXru3maaRKvoUSkXdYbS7XZB4E_pYU_VZXfCZ5gM4SArA=s1024,Parking lot,Parking lot,,,Open All Days,"117 D. Tran Duy Hung, Trung Hoa, Cau Giay, Ha Noi",,https://www.google.com/maps/place/117+Tr%E1%BA%A7n+Duy+H%C6%B0ng+Parking/data=!4m7!3m6!1s0x3135aca68dacbe71:0x450308de0d92f568!8m2!3d21.0079468!4d105.7972974!16s%2Fg%2F11gd67tr_f!19sChIJcb6sjaasNTERaPWSDd4IA0U?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJZZp0LqCtNTERnmJMDqe5s08,Diem xe buyt,,,1,5,"Name: Diem dung xe buyt +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+d%E1%BB%ABng+xe+bu%C3%BDt/@21.027172399999998,105.77930719999999?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Diem dan ve xe Bus +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+d%C3%A1n+v%C3%A9+xe+Bus/@21.0121786,105.80169079999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Diem Do Xe Buyt Chuong My +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+Xe+Bu%C3%BDt+Ch%C6%B0%C6%A1ng+M%E1%BB%B9/@20.9236498,105.6965651?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Diem Dung Xe Buyt +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+D%E1%BB%ABng+Xe+Bu%C3%BDt/@20.971465600000002,105.8409279?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Ben xe buyt +Link: https://www.google.com/maps/search/B%E1%BA%BFn+xe+bu%C3%BDt/@21.0188125,105.8386053?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,Diem xe buyt (Owner),,https://lh3.ggpht.com/p/AB5caB93Q4nGfWGPT3AvFcd2TsPiRO_J0kwIFfw6fcCYN0Cri00Z9yHCg77qh-E3duSx-U_Z3j6NWhKR9drK3-woxB-MWt_bPLhwTBKBd0GQnRhN7BeXgANDmtsFPL0Co4EHPA5oxkAxNg=s1024,Parking lot,Parking lot,,,Open All Days,"XRR2+5HJ, Khu Tap The, Khu tap the Thanh Xuan Bac, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+xe+bu%C3%BDt/data=!4m7!3m6!1s0x3135ada02e749a65:0x4fb3b9a70e4c629e!8m2!3d20.9904529!4d105.8013852!16s%2Fg%2F11ngjyfl7g!19sChIJZZp0LqCtNTERnmJMDqe5s08?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJz_n2z-yrNTERgqBLH2oYWwk,Bai Do Xe O To,,,7,4.7,"Name: Bai do xe Truong Chinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Tr%C6%B0%E1%BB%9Dng+Chinh/@21.0018285,105.8229903?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9867769,105.8198008?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0149662,105.84152209999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai Do Xe O To (Owner),,,Motorcycles,Motorcycles,,,Open All Days,"33 P. Ly Thuong Kiet, Hang Bai, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4/data=!4m7!3m6!1s0x3135abeccff6f9cf:0x95b186a1f4ba082!8m2!3d21.0224655!4d105.8532371!16s%2Fg%2F11j4sw0m70!19sChIJz_n2z-yrNTERgqBLH2oYWwk?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJx5GPJtqsNTERngEd9RucV0E,Bai Xe Tong Cuc 5,,,60,3.9,"Name: Thanh Liet Gas Station +Link: https://www.google.com/maps/search/Thanh+Liet+Gas+Station/@20.966821799999998,105.821659?authuser=0&hl=en&entry=ttu +Reviews: 369 reviews + +Name: Cay xang Tam Hung Tram sac vinfast oto +Link: https://www.google.com/maps/search/C%C3%A2y+x%C4%83ng+Tam+H%C6%B0ng+Tr%E1%BA%A1m+s%E1%BA%A1c+vinfast+%C3%B4t%C3%B4/@20.888406699999997,105.7962517?authuser=0&hl=en&entry=ttu +Reviews: 64 reviews + +Name: Tram Xang Dau Thanh Ha - Cienco 5 +Link: https://www.google.com/maps/search/Tr%E1%BA%A1m+X%C4%83ng+D%E1%BA%A7u+Thanh+H%C3%A0+-+Cienco+5/@20.9411781,105.78463339999999?authuser=0&hl=en&entry=ttu +Reviews: 27 reviews + +Name: Bai do xe yen xa +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+y%C3%AAn+x%C3%A1/@20.968992699999998,105.79845519999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai xe tong cuc 5 yen xa +Link: https://www.google.com/maps/search/B%C3%A3i+xe+t%E1%BB%95ng+c%E1%BB%A5c+5+y%C3%AAn+x%C3%A1/@20.969130099999997,105.7985679?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai Xe Tong Cuc 5 (Owner),,https://lh3.ggpht.com/p/AB5caB_ErecQfasGSv57gOs7Q6r-cDH89spiEF2RVkTWi75NUjhbNeln2VEOVAl0MMndMcs_KyONfNzyjP3mQ1lN-3u2rV1RZ8zh6UoeiC0zJbVFvQ7CXyfth1quC0KeuVKH2HZOEnMZ=s1024,Parking lot,Parking lot,,,Open All Days,"3/12/123 D. Yen Xa, Tan Trieu, Thanh Tri, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+Xe+T%E1%BB%95ng+C%E1%BB%A5c+5/data=!4m7!3m6!1s0x3135acda268f91c7:0x41579c1bf51d019e!8m2!3d20.9730653!4d105.7959768!16s%2Fg%2F11ck6r_q0y!19sChIJx5GPJtqsNTERngEd9RucV0E?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJjdF39dtSNDER9xmcesxNb84,Giua So 428 - 430 Quang Trung (Ha Dong),,,32,4,"Name: 267 Quang Trung - Ha Dong +Link: https://www.google.com/maps/search/267+Quang+Trung+-+H%C3%A0+%C4%90%C3%B4ng/@20.967385,105.7716669?authuser=0&hl=en&entry=ttu +Reviews: 17 reviews + +Name: 405-407 Quang Trung +Link: https://www.google.com/maps/search/405-407+Quang+Trung/@20.964920199999998,105.7678696?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: 807 Quang Trung - Ha Dong +Link: https://www.google.com/maps/search/807+Quang+Trung+-+H%C3%A0+%C4%90%C3%B4ng/@20.9580019,105.75966059999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: 530 - 532 Quang Trung - Ha Dong +Link: https://www.google.com/maps/search/530+-+532+Quang+Trung+-+H%C3%A0+%C4%90%C3%B4ng/@20.960169999999998,105.761888?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: 870 Quang Trung - Ga Van Khe +Link: https://www.google.com/maps/search/870+Quang+Trung+-+Ga+V%C4%83n+Kh%C3%AA/@20.955561,105.7558025?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Giua So 428 - 430 Quang Trung (Ha Dong) (Owner),,https://lh3.ggpht.com/p/AB5caB8NYXk6WVDNqW0IhNH5P4eUuzWnLrAG3DAAxzrS9yoXUmX38qvNcSfP60zDoC5GIALL_6lTJ6pU7whGgKmid2S74Wx2sk4Om1ix33-EdW6t64TMjBy0pV0WeY-HX6EklxB6h8Nh=s1024,Bus stop,Bus stop,,,Open All Days,"Quang Trung, La Khe, Ha Dong, Ha Noi",,https://www.google.com/maps/place/Gi%E1%BB%AFa+S%E1%BB%91+428+-+430+Quang+Trung+%28H%C3%A0+%C4%90%C3%B4ng%29/data=!4m7!3m6!1s0x313452dbf577d18d:0xce6f4dcc7a9c19f7!8m2!3d20.9620071!4d105.7642483!16s%2Fg%2F1tff0hqs!19sChIJjdF39dtSNDER9xmcesxNb84?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJSTRV67CrNTERtjzT6s5yylg,EVN parking lot,,,5,3.2,"Name: 156 parking Phuong Liet +Link: https://www.google.com/maps/search/156+parking+Phuong+Liet/@20.9970109,105.8387855?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai do xe 81 Lang Ha +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+81+L%C3%A1ng+H%E1%BA%A1/@21.017794199999997,105.8168796?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai trong xe Phan ke binh +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+Phan+k%E1%BA%BF+b%C3%ADnh/@21.0343043,105.8122015?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe Tap The Thong Tan Xa Viet Nam +Link: https://www.google.com/maps/search/B%C3%A3i+xe+T%E1%BA%ADp+Th%E1%BB%83+Th%C3%B4ng+T%E1%BA%A5n+X%C3%A3+Vi%E1%BB%87t+Nam/@21.0013747,105.8530916?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,EVN parking lot (Owner),,,Parking lot,Parking lot,,,Open All Days,"1 P. Nguyen Khac Nhu, Truc Bach, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/EVN+parking+lot/data=!4m7!3m6!1s0x3135abb0eb553449:0x58ca72ceead33cb6!8m2!3d21.0439337!4d105.8429688!16s%2Fg%2F11cncv2ygg!19sChIJSTRV67CrNTERtjzT6s5yylg?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ35wSMoyrNTERZPcMjRpjk2I,Gui xe Cong vien - Nguyen Dinh Chieu,,,11,3.9,"Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: D6 Thanh Cong +Link: https://www.google.com/maps/search/D6+Th%C3%A0nh+C%C3%B4ng/@21.023622,105.812858?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Gara o to tu dong +Link: https://www.google.com/maps/search/Gara+%C3%B4+t%C3%B4+t%E1%BB%B1+%C4%91%E1%BB%99ng/@21.0137418,105.8524695?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Gui xe Cong vien - Nguyen Dinh Chieu (Owner),,https://lh3.ggpht.com/p/AB5caB-Ptgr_k0ydPwOu8J34KsJntY8dVdRea3lf0v08awaCarf2bJUGHsP_6PPwqBRog5D5UxOwigOeMJb0qUzsZcpCy9KqBFzh8yyiR8Ni5xv_3H9ejvR_4nI0q6tpQQlv1LZSmQF2ZQ=s1024,Parking lot,Parking lot,,,Open All Days,"2R8X+M32, P. Nguyen Dinh Chieu, Le Dai Hanh, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/G%E1%BB%ADi+xe+C%C3%B4ng+vi%C3%AAn+-+Nguy%E1%BB%85n+%C4%90%C3%ACnh+Chi%E1%BB%83u/data=!4m7!3m6!1s0x3135ab8c32129cdf:0x6293631a8d0cf764!8m2!3d21.0166327!4d105.8476317!16s%2Fg%2F12m91k83c!19sChIJ35wSMoyrNTERZPcMjRpjk2I?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJJ_xogZFVNDER4Veqx-kgCrg,Bai gui xe Truong Man Non Sao Mai,,,0,0,"Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@21.041933,105.78874599999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe may +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/@21.0507824,105.8033172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Diem Trong Giu Xe Duc Thuan +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C4%90%E1%BB%A9c+Thu%E1%BA%ADn/@21.0334926,105.7878846?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe o to 24/24h +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4+24%2F24h/@21.0312783,105.740607?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Diem Trong Giu Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4/@21.014042399999997,105.79629949999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai gui xe Truong Man Non Sao Mai (Owner),,,Parking lot,Parking lot,,,Open All Days,"To 24 - pho, Duong Khue, Mai Dich, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+Tr%C6%B0%E1%BB%9Dng+M%E1%BA%A7n+Non+Sao+Mai/data=!4m7!3m6!1s0x313455918168fc27:0xb80a20e9c7aa57e1!8m2!3d21.0453212!4d105.7769092!16s%2Fg%2F11p65rd2c5!19sChIJJ_xogZFVNDER4Veqx-kgCrg?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJVZmYNPStNTEREIhv87F9rbw,Music box,,,11,3.2,"Name: Muzic Box Nam Dong, Music Box Nam Dong +Link: https://www.google.com/maps/search/Muzic+Box+Nam+%C4%90%E1%BB%93ng%2C+Music+Box+Nam+%C4%90%E1%BB%93ng/@21.013769399999997,105.8334325?authuser=0&hl=en&entry=ttu +Reviews: 453 reviews + +Name: Muzic box kinh te quoc dan, Music box, Karaoke box, Music Box KTQD +Link: https://www.google.com/maps/search/Muzic+box+kinh+t%E1%BA%BF+qu%E1%BB%91c+d%C3%A2n%2C+Music+box%2C+Karaoke+box%2C+Music+Box+KTQD/@20.998650200000004,105.84758989999999?authuser=0&hl=en&entry=ttu +Reviews: 249 reviews + +Name: Music Box Truong Chinh +Link: https://www.google.com/maps/search/Music+Box+Tr%C6%B0%E1%BB%9Dng+Chinh/@21.0023511,105.82218139999999?authuser=0&hl=en&entry=ttu +Reviews: 114 reviews + +Name: Music Box Pho Vong +Link: https://www.google.com/maps/search/Music+Box+Ph%E1%BB%91+V%E1%BB%8Dng/@20.992549,105.8414246?authuser=0&hl=en&entry=ttu +Reviews: 60 reviews + +Name: BEATBOX VIETNAM - MUSICBOX +Link: https://www.google.com/maps/search/BEATBOX+VIETNAM+-+MUSICBOX/@21.0043309,105.82932389999999?authuser=0&hl=en&entry=ttu +Reviews: 25 reviews",,,1,Music box (Owner),,,Parking lot,Parking lot,,,Open All Days,"79B, Ngo Tu Do, Dai La, Phuong Dong Tam, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/Music+box/data=!4m7!3m6!1s0x3135adf434989955:0xbcad7db1f36f8810!8m2!3d20.998556!4d105.847613!16s%2Fg%2F11v0z1w2xg!19sChIJVZmYNPStNTEREIhv87F9rbw?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJEbHQZHGtNTERCw1Z8LiwKU0,AC QUY DONG KHANH - Dai Ly Ac Quy & Lop Xe Chinh Hang,"Cong Ty Co Phan Dich Vu O To Dong Khanh duoc thanh lap vao nam 1991 voi hon 30 nam trong linh vuc sua chua va bao duong phuong tien van tai mang den cac san pham ac quy va lop xe chat luong hang dau Viet Nam. + +Dia Chi: So 1 Nguyen Huu Tho - nga 5 Linh Dam) chuyen phuc vu dau - lop - ac quy voi cac thuong hieu hang dau tren the gioi: +Lop xe: Bridgestone, Michelin, Continental, Goodyear, Pirelli,Toyo, Sailun, Sport Trak, Yokohama, Hankok, Maxxis; +Ac quy: Rocket, Atlas, GS, Pinaco - Dong Nai, Varta, Dau nhot: Castrol; Kixx, Motul, Caltex, Shell, Yosu, Wolver; S-oil, Zic, Mobil 1; Speedmate; Korlube...",,10,4.5,"Name: Cong Ty Trach Nhiem Huu Han Dong Khanh +Link: https://www.google.com/maps/search/C%C3%B4ng+Ty+Tr%C3%A1ch+Nhi%E1%BB%87m+H%E1%BB%AFu+H%E1%BA%A1n+%C4%90%E1%BB%93ng+Kh%C3%A1nh/@21.0138441,105.8627906?authuser=0&hl=en&entry=ttu +Reviews: 15 reviews + +Name: Trung tam cham soc rua xe chuyen nghiep Trung Lop +Link: https://www.google.com/maps/search/Trung+t%C3%A2m+ch%C4%83m+s%C3%B3c+r%E1%BB%ADa+xe+chuy%C3%AAn+nghi%E1%BB%87p+Trung+L%E1%BB%91p/@20.9723629,105.835818?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Trung Lop - O to da qua su dung +Link: https://www.google.com/maps/search/Trung+L%E1%BB%91p+-+%C3%94+t%C3%B4+%C4%91%C3%A3+qua+s%E1%BB%AD+d%E1%BB%A5ng/@20.9723363,105.8357884?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Cua Hang Lop O To Nam +Link: https://www.google.com/maps/search/C%E1%BB%ADa+H%C3%A0ng+L%E1%BB%91p+%C3%94+T%C3%B4+Nam/@20.971068499999998,105.83561399999999?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Va chin lop o to ha noi +Link: https://www.google.com/maps/search/V%C3%A1+ch%C3%ADn+l%E1%BB%91p+%C3%B4+t%C3%B4+h%C3%A0+n%E1%BB%99i/@20.9665059,105.8353781?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",https://acquydongkhanh.vn/,0966 697 696,,AC QUY DONG KHANH - Dai Ly Ac Quy & Lop Xe Chinh Hang (Owner),https://www.google.com/maps/contrib/114506014237393100058,https://lh3.ggpht.com/p/AF1QipNGz8Zvr5W292Gz7bH32cZGPSwxIq2wzA7vfv10=s1024,Car detailing service,"Car detailing service, Parking garage",6 AM-9 PM,,Open All Days,"1 Nguyen Huu Tho, Hoang Liet, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/%E1%BA%AEC+QUY+%C4%90%E1%BB%92NG+KH%C3%81NH+-+%C4%90%E1%BA%A1i+L%C3%BD+%E1%BA%AEc+Quy+%26+L%E1%BB%91p+Xe+Ch%C3%ADnh+H%C3%A3ng/data=!4m7!3m6!1s0x3135ad7164d0b111:0x4d29b0b8f0590d0b!8m2!3d20.9691701!4d105.8296043!16s%2Fg%2F11nmlvj248!19sChIJEbHQZHGtNTERCw1Z8LiwKU0?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJu4Ve4mtTNDERqvgQwHaTm9M,Ham de xe S2,,,0,0,"Name: Bai xe 69 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+69/@21.0820625,105.81281249999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Smart City Parking Zone 1 +Link: https://www.google.com/maps/search/Smart+City+Parking+Zone+1/@21.0084727,105.74239159999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai xe P2 CT2 Tay nam Linh Dam +Link: https://www.google.com/maps/search/B%C3%A3i+xe+P2+CT2+T%C3%A2y+nam+Linh+%C4%90%C3%A0m/@20.9648072,105.8233303?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Thuy linh xa doi +Link: https://www.google.com/maps/search/Thu%E1%BB%B3+linh+xa+%C4%91%C3%B4i/@21.001827,105.765945?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Ham de xe S2 (Owner),,https://lh3.ggpht.com/p/AB5caB8rH8SD6ko9H9rYfhiD2TkygrJIPW2gSzeQVfBpKhJlhqJFHN8Vur9ORd6uIPay_Jox2lPOYObf5kGK4VxTSRSFnKg4wtptH2k217kp4Botijeeh91YqTxcYWFHPCLTz6KaTkPDlg=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"2P4Q+985, Tay Mo, Nam Tu Liem, Ha Noi",,https://www.google.com/maps/place/H%E1%BA%A7m+%C4%91%E1%BB%83+xe+S2/data=!4m7!3m6!1s0x3134536be25e85bb:0xd39b9376c010f8aa!8m2!3d21.0058805!4d105.7383623!16s%2Fg%2F11sjx5lk5s!19sChIJu4Ve4mtTNDERqvgQwHaTm9M?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJf1l6RACtNTERwJauF0nSRd4,Tram Sac Vinfast,,,1,1,"Name: Tram sac Vinfast +Link: https://www.google.com/maps/search/Tr%E1%BA%A1m+s%E1%BA%A1c+Vinfast/@21.0061288,105.7906939?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: VinFast Charging Station +Link: https://www.google.com/maps/search/VinFast+Charging+Station/@21.006109,105.831703?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Tram sac Vinfast Hoang Minh Dao +Link: https://www.google.com/maps/search/Tr%E1%BA%A1m+s%E1%BA%A1c+Vinfast+Ho%C3%A0ng+Minh+%C4%90%E1%BA%A1o/@21.0416667,105.88024999999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Tram doi PIN XMD Vinfast +Link: https://www.google.com/maps/search/Tr%E1%BA%A1m+%C4%91%E1%BB%95i+PIN+XM%C4%90+Vinfast/@20.986114,105.93075999999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Tram sac Vinfast bo de +Link: https://www.google.com/maps/search/Tr%E1%BA%A1m+s%E1%BA%A1c+Vinfast+b%E1%BB%93+%C4%91%E1%BB%81/@21.0443113,105.88278249999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",https://evcs.vn/,,1,Tram Sac Vinfast (Owner),,,Parking lot,Parking lot,,,Open All Days,"103 P. Dong Tac, Kim Lien, Dong Da, Ha Noi",,https://www.google.com/maps/place/Tr%E1%BA%A1m+S%E1%BA%A1c+Vinfast/data=!4m7!3m6!1s0x3135ad00447a597f:0xde45d24917ae96c0!8m2!3d21.006123!4d105.831718!16s%2Fg%2F11y4tjskrp!19sChIJf1l6RACtNTERwJauF0nSRd4?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ2R_ULtOsNTERfn0hP6nH_b0,Lien Minh Cac HTX Ha Noi - So 1 Tran Phu (Ha Dong),,,3,3.7,"Name: Giua So 428 - 430 Quang Trung (Ha Dong) +Link: https://www.google.com/maps/search/Gi%E1%BB%AFa+S%E1%BB%91+428+-+430+Quang+Trung+(H%C3%A0+%C4%90%C3%B4ng)/@20.962007099999997,105.76424829999999?authuser=0&hl=en&entry=ttu +Reviews: 32 reviews + +Name: 16, 24, 27 +Link: https://www.google.com/maps/search/16%2C+24%2C+27/@21.0149142,105.8054061?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews + +Name: Lien Minh Htx Tp. Ha Noi +Link: https://www.google.com/maps/search/Li%C3%AAn+Minh+Htx+Tp.+H%C3%A0+N%E1%BB%99i/@20.975797699999998,105.78261549999999?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Hoc Vien ANND - So 10 Tran Phu - Sieu Thi Viet Long +Link: https://www.google.com/maps/search/H%E1%BB%8Dc+Vi%E1%BB%87n+ANND+-+S%E1%BB%91+10+Tr%E1%BA%A7n+Ph%C3%BA+-+Si%C3%AAu+Th%E1%BB%8B+Vi%E1%BB%87t+Long/@20.983425999999998,105.7916218?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: 96 Quang Trung - Ha Dong +Link: https://www.google.com/maps/search/96+Quang+Trung+-+H%C3%A0+%C4%90%C3%B4ng/@20.969518,105.77386000000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,,Lien Minh Cac HTX Ha Noi - So 1 Tran Phu (Ha Dong) (Owner),,https://lh3.ggpht.com/p/AB5caB_p_6vzqlpSP_fYKcmJDO28sRIkpIGg9lUHBS5AciKBD-370lDPEDYF5jPULzwrSDZxZHThKVWC5Gv3xx6SSznD4V3_vdq231ToqcFfLrwP4oAg7XauXbt2_WNbKP06Mg-Xz33e=s1024,Bus stop,Bus stop,,,Open All Days,"Van Quan, Ha Dong, Hanoi",,https://www.google.com/maps/place/Li%C3%AAn+Minh+C%C3%A1c+HTX+H%C3%A0+N%E1%BB%99i+-+S%E1%BB%91+1+Tr%E1%BA%A7n+Ph%C3%BA+%28H%C3%A0+%C4%90%C3%B4ng%29/data=!4m7!3m6!1s0x3135acd32ed41fd9:0xbdfdc7a93f217d7e!8m2!3d20.9757807!4d105.7826094!16s%2Fg%2F11n86rtx8q!19sChIJ2R_ULtOsNTERfn0hP6nH_b0?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJBUu-kxmrNTERpB_Jh9KhCwM,Diem Do Xe O To,,,0,0,"Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe Nguyen Thi Due +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%E1%BB%85n+Th%E1%BB%8B+Du%E1%BB%87/@21.019136,105.79005099999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Diem Do Xe O To (Owner),,,Parking lot,Parking lot,,,Open All Days,"266 D. Thuy Khue, Buoi, Tay Ho, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4/data=!4m7!3m6!1s0x3135ab1993be4b05:0x30ba1d287c91fa4!8m2!3d21.0477423!4d105.8104151!16s%2Fg%2F11j4svzz4g!19sChIJBUu-kxmrNTERpB_Jh9KhCwM?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJOc3QgMpTNDER-e9xpu5Vspw,Bai trong xe,,,2,3,"Name: Bai dau xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BA%ADu+xe/@21.008045799999998,105.72246279999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Xe Nguyen Tung +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+Nguy%E1%BB%85n+T%C3%B9ng/@21.0521963,105.66672439999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe Tien Thuan +Link: https://www.google.com/maps/search/B%C3%A3i+xe+Ti%E1%BA%BFn+Thu%E1%BA%ADn/@20.9766351,105.7371818?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Hien bang tai +Link: https://www.google.com/maps/search/Hi%E1%BB%81n+b%C4%83ng+t%E1%BA%A3i/@21.0112646,105.7290081?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai trong xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"XPHP+4GF, Ng. 87 D. Hoa Tham, Doc Lap, Hoai Duc, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+tr%C3%B4ng+xe/data=!4m7!3m6!1s0x313453ca80d0cd39:0x9cb255eea671eff9!8m2!3d20.9777021!4d105.7370587!16s%2Fg%2F11v0x721gd!19sChIJOc3QgMpTNDER-e9xpu5Vspw?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJmWhfZ1irNTERc0qcpOUE_ag,Diem Trong Giu Xe O To,,,0,0,"Name: Bai Trong Xe May Tu Mo +Link: https://www.google.com/maps/search/B%C3%A3i+Tr%C3%B4ng+Xe+M%C3%A1y+T%C3%BA+M%E1%BB%A1/@21.009980400000003,105.7935213?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai gui xe 221 Trung Kinh +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+221+Trung+K%C3%ADnh/@21.0208938,105.79124189999999?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai gui xe o to 24/24h +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4+24%2F24h/@21.0312783,105.740607?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Diem Trong Giu Xe O To (Owner),,https://lh3.ggpht.com/p/AB5caB-8UO-qJ3V4IYQueUzdlO3L2E1uJ1auIB5hte3wWjZZ4Gs2FDsqvG2TQG8RwpGfrX-pnJO6ZYruwpDcWPAyWWXRRvSN0PAxOX9NBdV981T0ll-ribIEx71s6S44qALlgEQVKp_h=s1024,Parking lot,Parking lot,,,Open All Days,"107 P. Trung Kinh, Trung Hoa, Cau Giay, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4/data=!4m7!3m6!1s0x3135ab58675f6899:0xa8fd04e5a49c4a73!8m2!3d21.0140424!4d105.7962995!16s%2Fg%2F11p4cwmgj6!19sChIJmWhfZ1irNTERc0qcpOUE_ag?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJzwl6_sSrNTERMwIx63gbe4k,Van phong xe Ha Noi - Ninh Binh,,,0,0,"Name: Ninh Binh Car Rental +Link: https://www.google.com/maps/search/Ninh+Binh+Car+Rental/@21.035087,105.85348599999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Hello Ninh Binh Bus +Link: https://www.google.com/maps/search/Hello+Ninh+Binh+Bus/@21.030069599999997,105.8469367?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Nha xe Manh Phuong - Nho Quan Me - Gia Vien Ninh Binh +Link: https://www.google.com/maps/search/Nh%C3%A0+xe+M%E1%BA%A1nh+Ph%C6%B0%C6%A1ng+-+Nho+Quan+Me+-+Gia+Vi%E1%BB%85n+Ninh+B%C3%ACnh/@21.040118,105.776187?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Ninh Binh Car Rentals +Link: https://www.google.com/maps/search/Ninh+Binh+Car+Rentals/@21.034629499999998,105.851575?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai trong xe Phan ke binh +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+Phan+k%E1%BA%BF+b%C3%ADnh/@21.0343043,105.8122015?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",http://ninhbinhcar.com/,,1,Van phong xe Ha Noi - Ninh Binh (Owner),,,Parking lot,Parking lot,,,Open All Days,"2 P. Pham Huy Thong, Ngoc Khanh, Dong Da, Ha Noi",,https://www.google.com/maps/place/V%C4%83n+ph%C3%B2ng+xe+H%C3%A0+N%E1%BB%99i+-+Ninh+B%C3%ACnh/data=!4m7!3m6!1s0x3135abc4fe7a09cf:0x897b1b78eb310233!8m2!3d21.0293339!4d105.811462!16s%2Fg%2F11t_hxhxw2!19sChIJzwl6_sSrNTERMwIx63gbe4k?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJiyDxODKtNTERqp82m45qgoY,Cuu ho Hoang Mai,,,25,5,"Name: Cuu Ho Giao Thong 116 +Link: https://www.google.com/maps/search/C%E1%BB%A9u+H%E1%BB%99+Giao+Th%C3%B4ng+116/@20.964177,105.8621776?authuser=0&hl=en&entry=ttu +Reviews: 11 reviews + +Name: Cuu ho Oto nhanh +Link: https://www.google.com/maps/search/C%E1%BB%A9u+h%E1%BB%99+%C3%94t%C3%B4+nhanh/@21.036679799999998,105.7803402?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Trung tam o to +Link: https://www.google.com/maps/search/Trung+t%C3%A2m+%C3%B4+t%C3%B4/@20.9758475,105.85757939999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Cuu Ho O To nhanh24h +Link: https://www.google.com/maps/search/C%E1%BB%A9u+H%E1%BB%99+%C3%94+T%C3%B4+nhanh24h/@21.0415109,105.8229983?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: cu huyen +Link: https://www.google.com/maps/search/c%E1%BB%A5+huy%E1%BB%81n/@20.9359984,105.8241051?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0922 114 117,1,Cuu ho Hoang Mai (Owner),,https://lh3.ggpht.com/p/AB5caB-VEG3Woz9eykRkLgmjxFD6V5dmIklvBfQRhvcZluqHTo_SuDQ-mUSe1ZFGLv44UoP321wcp8SD_1uIeIEYF0o-SyFFdCOMAxcn7FbuJvP5kIvfnI_mMRsWj-Wy-ZrTVS-hXxXX=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"150 Ng. 42 Thinh Liet, Giap Nhi, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/C%E1%BB%A9u+h%E1%BB%99+Ho%C3%A0ng+Mai/data=!4m7!3m6!1s0x3135ad3238f1208b:0x86826a8e9b369faa!8m2!3d20.9704231!4d105.8517876!16s%2Fg%2F11scfh9c23!19sChIJiyDxODKtNTERqp82m45qgoY?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJn85dOCmrNTER-5GSIOxgrIo,Bai gui xe 221 Trung Kinh,,,3,2.7,"Name: Diem Trong Giu Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4/@21.014042399999997,105.79629949999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe o to 24/24h +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4+24%2F24h/@21.0312783,105.740607?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai gui xe 221 Trung Kinh (Owner),,https://lh3.ggpht.com/p/AB5caB92yB7BgVlOT5zZUVVWKx4Dn9Tsk--sDPDEXHXXafPz9PGduy3kh1vkhWo9G0RDuc3cYyy0u_JpuUN_MrYlG93b4qPgx_gxma9pK6qKZALX2y_lVfgNMeR2ON7AhPwhiBVxc_NE4Q=s1024,Parking lot,Parking lot,,,Open All Days,"2QCR+9F5, Yen Hoa, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+221+Trung+K%C3%ADnh/data=!4m7!3m6!1s0x3135ab29385dce9f:0x8aac60ec209291fb!8m2!3d21.0208938!4d105.7912419!16s%2Fg%2F11qrkq1d78!19sChIJn85dOCmrNTER-5GSIOxgrIo?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ_zfwgV-tNTERZv4wLETHzRE,Bai xe 288 nguyen xien,,,0,0,"Name: Bai xe A1 286 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+A1+286/@20.9846477,105.806755?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe yen so +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+y%C3%AAn+s%E1%BB%9F/@20.967548,105.861115?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai xe 288 nguyen xien (Owner),,,Parking lot,Parking lot,9 AM-2 PM,,Sunday,"288 D. Nguyen Xien, Dai Kim, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+288+nguy%E1%BB%85n+xi%E1%BB%83n/data=!4m7!3m6!1s0x3135ad5f81f037ff:0x11cdc7442c30fe66!8m2!3d20.9806134!4d105.8098582!16s%2Fg%2F11szjklpd3!19sChIJ_zfwgV-tNTERZv4wLETHzRE?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJRVf6TDqtNTEREvXQWHrczgg,Diem don Bus SDV,,,1,5,"Name: Bus stop +Link: https://www.google.com/maps/search/Bus+stop/@21.0293787,105.803663?authuser=0&hl=en&entry=ttu +Reviews: 81 reviews + +Name: Canh Dai Hoc Khoa Hoc Tu Nhien - 322 Nguyen Trai - Thanh Xuan Trung +Link: https://www.google.com/maps/search/C%E1%BA%A1nh+%C4%90%E1%BA%A1i+H%E1%BB%8Dc+Khoa+H%E1%BB%8Dc+T%E1%BB%B1+Nhi%C3%AAn+-+322+Nguy%E1%BB%85n+Tr%C3%A3i+-+Thanh+Xu%C3%A2n+Trung/@20.9958933,105.809136?authuser=0&hl=en&entry=ttu +Reviews: 21 reviews + +Name: Diem dan ve xe Bus +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+d%C3%A1n+v%C3%A9+xe+Bus/@21.0121786,105.80169079999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Diem bus semv +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+bus+semv/@20.995165999999998,105.80874100000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Diem bus SDV +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+bus+SDV/@20.9950424,105.8086215?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Diem don Bus SDV (Owner),,,Parking lot,Parking lot,,,Open All Days,"332A D. Nguyen Trai, Thuong Dinh, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+%C4%91%C3%B3n+Bus+SDV/data=!4m7!3m6!1s0x3135ad3a4cfa5745:0x8cedc7a58d0f512!8m2!3d20.9951288!4d105.8086063!16s%2Fg%2F11rhwj337f!19sChIJRVf6TDqtNTEREvXQWHrczgg?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJiQ4KCdOrNTERbq7im8yJahk,180 Ba trieu ( diem dung xe 08),,,0,0,"Name: Bus stop +Link: https://www.google.com/maps/search/Bus+stop/@21.0293787,105.803663?authuser=0&hl=en&entry=ttu +Reviews: 81 reviews + +Name: 08, 31, 35, 38 +Link: https://www.google.com/maps/search/08%2C+31%2C+35%2C+38/@21.015871900000004,105.8491006?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: 180 - 182 Ba Trieu +Link: https://www.google.com/maps/search/180+-+182+B%C3%A0+Tri%E1%BB%87u/@21.0159523,105.84914789999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,180 Ba trieu ( diem dung xe 08) (Owner),,,Parking lot,Parking lot,,,Open All Days,"107b P. Ba Trieu, Nguyen Du, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/180+B%C3%A0+tri%E1%BB%87u+%28+%C4%91i%E1%BB%83m+d%E1%BB%ABng+xe+08%29/data=!4m7!3m6!1s0x3135abd3090a0e89:0x196a89cc9be2ae6e!8m2!3d21.016041!4d105.849284!16s%2Fg%2F11pfw73ybl!19sChIJiQ4KCdOrNTERbq7im8yJahk?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJlbK7nGGsNTERT1Okwi63m_M,12,,,19,3.8,"Name: Benh vien Buu dien +Link: https://www.google.com/maps/search/B%E1%BB%87nh+vi%E1%BB%87n+B%C6%B0u+%C4%91i%E1%BB%87n/@20.9910598,105.8314651?authuser=0&hl=en&entry=ttu +Reviews: 54 reviews + +Name: Benh vien Buu Dien - Co so Dinh Cong +Link: https://www.google.com/maps/search/B%E1%BB%87nh+vi%E1%BB%87n+B%C6%B0u+%C4%90i%E1%BB%87n+-+C%C6%A1+s%E1%BB%9F+%C4%90%E1%BB%8Bnh+C%C3%B4ng/@20.9902858,105.8313462?authuser=0&hl=en&entry=ttu +Reviews: 53 reviews + +Name: Doi Dien Sieu Thi ACE Mart - Dinh Cong +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+Si%C3%AAu+Th%E1%BB%8B+ACE+Mart+-+%C4%90%E1%BB%8Bnh+C%C3%B4ng/@20.9895347,105.8302571?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Tiem Sua Xe Pham Tuyen +Link: https://www.google.com/maps/search/Ti%E1%BB%87m+S%E1%BB%ADa+Xe+Ph%E1%BA%A1m+Tuy%C3%AAn/@20.9914179,105.8322161?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Cong Vien Dinh Cong +Link: https://www.google.com/maps/search/C%C3%B4ng+Vi%C3%AAn+%C4%90%E1%BB%8Bnh+C%C3%B4ng/@20.987,105.8322?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,,12 (Owner),,https://lh3.ggpht.com/p/AB5caB-75-dHYTX-CsrOJgqcYPUaHygmXr6RwDp4ampiJmnDtQiwjhDi2qB_sw2VPbLCcod2FbQTm9sfO4CZGZA5Y25e6gGtA_j0oqTF1i6OuSVqw6-Je9Ck4oB6zZ_1I7wsot61FR2b=s1024,Bus stop,Bus stop,,,Open All Days,"P. Tran Dien, Dinh Cong, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/12/data=!4m7!3m6!1s0x3135ac619cbbb295:0xf39bb72ec2a4534f!8m2!3d20.9910523!4d105.8316743!16s%2Fg%2F1thwxy31!19sChIJlbK7nGGsNTERT1Okwi63m_M?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJadTlcRlTNDERUGdRkw7Sjsw,Cong ty TNHH Thuong mai van tai Ha Cau - Thang Long,,,1,5,"Name: Cong Ty Tnhh Van Tai Thang Long +Link: https://www.google.com/maps/search/C%C3%B4ng+Ty+Tnhh+V%E1%BA%ADn+T%E1%BA%A3i+Th%C4%83ng+Long/@21.0398338,105.7913487?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Cong Ty Tnhh Cau Thang Quang Tung +Link: https://www.google.com/maps/search/C%C3%B4ng+Ty+Tnhh+C%E1%BA%A7u+Thang+Quang+T%C3%B9ng/@20.9670559,105.7705137?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Gara TP +Link: https://www.google.com/maps/search/Gara+TP/@20.9631203,105.7656209?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: CONG TY TNHH DICH VU THUONG MAI VAN TAI THANG LONG CONTAINER +Link: https://www.google.com/maps/search/C%C3%94NG+TY+TNHH+D%E1%BB%8ACH+V%E1%BB%A4+TH%C6%AF%C6%A0NG+M%E1%BA%A0I+V%E1%BA%ACN+T%E1%BA%A2I+TH%C4%82NG+LONG+CONTAINER/@20.984907,105.7751543?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Cong ty co phan KT Thang Long +Link: https://www.google.com/maps/search/C%C3%B4ng+ty+c%E1%BB%95+ph%E1%BA%A7n+KT+Th%C4%83ng+Long/@20.9574319,105.76593009999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0979 697 476,1,Cong ty TNHH Thuong mai van tai Ha Cau - Thang Long (Owner),,https://lh3.ggpht.com/p/AB5caB_Up19FrFI-vxdCJzK12FY-iaj7vVnw7sZCiKa49BGsiF8tlj6qtmK05z1yxdcKZm1J3JzNXGvtuWVIKa-9kr3uzJkGDV3k8auf6bNSv7MCJM_0pbyJZnhSIVROlZzQyq80Ej9V=s1024,Parking lot,Parking lot,8:30 AM-6 PM,,Sunday,"XQ9F+557, Unnamed Road, P. Quang Trung, Ha Dong, Ha Noi",,https://www.google.com/maps/place/C%C3%B4ng+ty+TNHH+Th%C6%B0%C6%A1ng+m%E1%BA%A1i+v%E1%BA%ADn+t%E1%BA%A3i+H%C3%A0+C%E1%BA%A7u+-+Th%C4%83ng+Long/data=!4m7!3m6!1s0x3134531971e5d469:0xcc8ed20e93516750!8m2!3d20.9679235!4d105.7729356!16s%2Fg%2F11g_z1v0q0!19sChIJadTlcRlTNDERUGdRkw7Sjsw?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJfQEcn8yrNTERkMZsYBA8Pzo,Bai xe 2 benh vien 108,,,0,0,"Name: Bai gui xe vien Phoi +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+vi%E1%BB%87n+Ph%E1%BB%95i/@21.041498500000003,105.8123838?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Doi Xe Benh Vien 108 +Link: https://www.google.com/maps/search/%C4%90%E1%BB%99i+Xe+B%E1%BB%87nh+Vi%E1%BB%87n+108/@21.0146432,105.862224?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai xe 2 benh vien 108 (Owner),,,Parking lot,Parking lot,,,Open All Days,"5 P. Tran Thanh Tong, Pham Dinh Ho, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+2+b%E1%BB%87nh+vi%E1%BB%87n+108/data=!4m7!3m6!1s0x3135abcc9f1c017d:0x3a3f3c10606cc690!8m2!3d21.0149981!4d105.8597561!16s%2Fg%2F11n0pwtt1_!19sChIJfQEcn8yrNTERkMZsYBA8Pzo?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJC-gTm2GsNTERdi5FBwtsH2Y,Benh vien Buu dien,,,54,2.9,"Name: Benh vien Buu Dien +Link: https://www.google.com/maps/search/B%E1%BB%87nh+vi%E1%BB%87n+B%C6%B0u+%C4%90i%E1%BB%87n/@21.0113153,105.85224819999999?authuser=0&hl=en&entry=ttu +Reviews: 57 reviews + +Name: Benh vien Buu Dien - Co so Dinh Cong +Link: https://www.google.com/maps/search/B%E1%BB%87nh+vi%E1%BB%87n+B%C6%B0u+%C4%90i%E1%BB%87n+-+C%C6%A1+s%E1%BB%9F+%C4%90%E1%BB%8Bnh+C%C3%B4ng/@20.9902858,105.8313462?authuser=0&hl=en&entry=ttu +Reviews: 53 reviews + +Name: 12 +Link: https://www.google.com/maps/search/12/@20.9910523,105.83167429999999?authuser=0&hl=en&entry=ttu +Reviews: 19 reviews + +Name: Trung tam tiem chung - Benh vien Buu dien +Link: https://www.google.com/maps/search/Trung+t%C3%A2m+ti%C3%AAm+ch%E1%BB%A7ng+-+B%E1%BB%87nh+vi%E1%BB%87n+B%C6%B0u+%C4%91i%E1%BB%87n/@20.9905942,105.8314004?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Khoa Gay Me Hoi Suc +Link: https://www.google.com/maps/search/Khoa+G%C3%A2y+M%C3%AA+H%E1%BB%93i+S%E1%BB%A9c/@20.9903712,105.8312559?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0911 645 555,,Benh vien Buu dien (Owner),,https://lh3.ggpht.com/p/AB5caB8AqGyVWl5FdwuEDt5BlVFqFoiXSioYRoSvVc9twTT_720L6ucEYMbT5mk0W0NtSrMs67-3DsX8T95ddZ1LgXg3B8A_ja3ocqfPNzf5GEA5Ftdk2rcdoBQSZUHAx2kN8wUrnJoS=s1024,Bus stop,Bus stop,,,Open All Days,"P. Tran Dien, Dinh Cong, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/B%E1%BB%87nh+vi%E1%BB%87n+B%C6%B0u+%C4%91i%E1%BB%87n/data=!4m7!3m6!1s0x3135ac619b13e80b:0x661f6c0b07452e76!8m2!3d20.9910598!4d105.8314651!16s%2Fg%2F1tdx1m0c!19sChIJC-gTm2GsNTERdi5FBwtsH2Y?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJqRzMpAWtNTER9iyHJ2RO1K8,Samsung Bus Stop Nguyen Trai,,,3,4,"Name: Diem don Bus SDV +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%91%C3%B3n+Bus+SDV/@20.9951288,105.8086063?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Ha Noi San van dong Thuong Dinh +Link: https://www.google.com/maps/search/H%C3%A0+N%E1%BB%99i+S%C3%A2n+v%E1%BA%ADn+%C4%91%E1%BB%99ng+Th%C6%B0%E1%BB%A3ng+%C4%90%C3%ACnh/@21.0006566,105.8171964?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Cua hang trai nghiem Samsung 535 Nguyen Trai +Link: https://www.google.com/maps/search/C%E1%BB%ADa+h%C3%A0ng+tr%E1%BA%A3i+nghi%E1%BB%87m+Samsung+535+Nguy%E1%BB%85n+Tr%C3%A3i/@20.9865188,105.7966112?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Dai ly o to Samsung Giai Phong +Link: https://www.google.com/maps/search/%C4%90%E1%BA%A1i+l%C3%BD+%C3%B4+t%C3%B4+Samsung+Gi%E1%BA%A3i+Ph%C3%B3ng/@20.999436499999998,105.8415207?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Nha xe truong Nhan van +Link: https://www.google.com/maps/search/Nh%C3%A0+xe+tr%C6%B0%E1%BB%9Dng+Nh%C3%A2n+v%C4%83n/@20.9950621,105.8068612?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Samsung Bus Stop Nguyen Trai (Owner),,https://lh3.ggpht.com/p/AB5caB_uqcl9qN0AR_NdHOqFDoOZ7mf0I-D8nr8QpoRhOmWsk2IekVsfY85kEJxktWYi1q02MGGZrpwEZa0dfjr4Q7umRU9RmU7FBo_n3xZ7TIK3yq4jt7W3G1_pkAyXsNTj4clahxdR=s1024,Parking lot,Parking lot,,,Open All Days,"255 D. Nguyen Trai, Thuong Dinh, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/Samsung+Bus+Stop+Nguy%E1%BB%85n+Tr%C3%A3i/data=!4m7!3m6!1s0x3135ad05a4cc1ca9:0xafd44e6427872cf6!8m2!3d20.9947607!4d105.808261!16s%2Fg%2F11gmfw0f0h!19sChIJqRzMpAWtNTER9iyHJ2RO1K8?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJBZbJcCxTNDER3tCLX2QyIxo,So 2 Chu Van An - Ha Dong,,,0,0,"Name: 80 Quang Trung - Ha Dong +Link: https://www.google.com/maps/search/80+Quang+Trung+-+H%C3%A0+%C4%90%C3%B4ng/@20.9704305,105.7748603?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: 405-407 Quang Trung +Link: https://www.google.com/maps/search/405-407+Quang+Trung/@20.964920199999998,105.7678696?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Truong THCS Le Loi - So 160 Le Loi (Ha Dong) +Link: https://www.google.com/maps/search/Tr%C6%B0%E1%BB%9Dng+THCS+L%C3%AA+L%E1%BB%A3i+-+S%E1%BB%91+160+L%C3%AA+L%E1%BB%A3i+(H%C3%A0+%C4%90%C3%B4ng)/@20.9659357,105.7819696?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: 807 Quang Trung - Ha Dong +Link: https://www.google.com/maps/search/807+Quang+Trung+-+H%C3%A0+%C4%90%C3%B4ng/@20.9580019,105.75966059999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: 96 Quang Trung - Ha Dong +Link: https://www.google.com/maps/search/96+Quang+Trung+-+H%C3%A0+%C4%90%C3%B4ng/@20.969518,105.77386000000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,,So 2 Chu Van An - Ha Dong (Owner),,https://lh3.ggpht.com/p/AB5caB-bvxK2qKaRp2J5yCGXYjm9ePm02SXuMPUnBxPA4O6VwqU2GA1gTEqf17-vb6DcAwHcTiTdqfUagdfX7rWhDh836wuue2nSLKdZpEOdsLDvXZigisDZ47NzLi17C1RG2XevFDcM=s1024,Bus stop,Bus stop,,,Open All Days,"Yet Kieu, Ha Dong, Hanoi",,https://www.google.com/maps/place/S%E1%BB%91+2+Chu+V%C4%83n+An+-+H%C3%A0+%C4%90%C3%B4ng/data=!4m7!3m6!1s0x3134532c70c99605:0x1a2332645f8bd0de!8m2!3d20.9740566!4d105.7782893!16s%2Fg%2F11pq9m0j71!19sChIJBZbJcCxTNDER3tCLX2QyIxo?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJ1fKCCbmrNTERZpw-XDTifHo,Bai do xe may,,,1,1,"Name: Car park Send CV Nghia +Link: https://www.google.com/maps/search/Car+park+Send+CV+Nghia/@21.044840999999998,105.79744409999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.006772599999998,105.86952029999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai trong o to mat tien Hoang Quoc Viet +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+%C3%B4+t%C3%B4+m%E1%BA%B7t+ti%E1%BB%81n+Ho%C3%A0ng+Qu%E1%BB%91c+Vi%E1%BB%87t/@21.04647,105.792306?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe Nguyen Thi Due +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%E1%BB%85n+Th%E1%BB%8B+Du%E1%BB%87/@21.019136,105.79005099999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe may (Owner),,,Parking lot,Parking lot,,,Open All Days,"64 Ng. 45 D. Vo Chi, Nghia Do, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/data=!4m7!3m6!1s0x3135abb90982f2d5:0x7a7ce2345c3e9c66!8m2!3d21.0507824!4d105.8033172!16s%2Fg%2F11thc7wh0k!19sChIJ1fKCCbmrNTERZpw-XDTifHo?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong +ChIJW11ycTBTNDERTewPvy3c4O4,So 170 - 172 Van Phuc - Ha Dong,,,10,4.4,"Name: Chua Van Phuc - Ha Dong +Link: https://www.google.com/maps/search/Ch%C3%B9a+V%E1%BA%A1n+Ph%C3%BAc+-+H%C3%A0+%C4%90%C3%B4ng/@20.97971,105.7725402?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Diem Xen He Qua Nga 4 Van Phuc - To Huu +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+X%C3%A9n+H%C3%A8+Qua+Ng%C3%A3+4+V%E1%BA%A1n+Ph%C3%BAc+-+T%E1%BB%91+H%E1%BB%AFu/@20.980866700000004,105.7674?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Cau Cong - Van Phuc +Link: https://www.google.com/maps/search/C%E1%BA%A7u+Cong+-+V%E1%BA%A1n+Ph%C3%BAc/@20.977514,105.775454?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Ha Noi gan nga tu Van Phuc - To Huu +Link: https://www.google.com/maps/search/H%C3%A0+N%E1%BB%99i+g%E1%BA%A7n+ng%C3%A3+t%C6%B0+V%E1%BA%A1n+Ph%C3%BAc+-+T%E1%BB%91+H%E1%BB%AFu/@20.982657,105.77069739999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Truoc Nga 4 Van Phuc - To Huu 50M +Link: https://www.google.com/maps/search/Tr%C6%B0%E1%BB%9Bc+Ng%C3%A3+4+V%E1%BA%A1n+Ph%C3%BAc+-+T%E1%BB%91+H%E1%BB%AFu+50M/@20.981429400000003,105.7687289?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,,So 170 - 172 Van Phuc - Ha Dong (Owner),,https://lh3.ggpht.com/p/AB5caB8-IJ3Xh5dKzteLr5cSXCjZjWUn0h0NkkeWDYWu_Ss66XJf1b-s2-RybSPKI3mCdWHvw5H8BAiTq2_RNb434WVBFEFgAYtaabuDWBjVyYf86b1r38ges8Z4Cfr7WUQnpQx1ItpO=s1024,Bus stop,Bus stop,,,Open All Days,"Van Phuc, Ha Dong, Hanoi",,https://www.google.com/maps/place/S%E1%BB%91+170+-+172+V%E1%BA%A1n+Ph%C3%BAc+-+H%C3%A0+%C4%90%C3%B4ng/data=!4m7!3m6!1s0x3134533071725d5b:0xeee0dc2dbf0fec4d!8m2!3d20.98205!4d105.7708333!16s%2Fg%2F1ptynnx74!19sChIJW11ycTBTNDERTewPvy3c4O4?authuser=0&hl=en&rclk=1,bai do xe gan ptit ha dong diff --git a/backend/prisma/packingCrawler/csv/all-task-3-overview.csv b/backend/prisma/packingCrawler/csv/all-task-3-overview.csv new file mode 100644 index 0000000..2898513 --- /dev/null +++ b/backend/prisma/packingCrawler/csv/all-task-3-overview.csv @@ -0,0 +1,697 @@ +place_id,name,description,is_spending_on_ads,reviews,rating,competitors,website,phone,can_claim,owner_name,owner_profile_link,featured_image,main_category,categories,workday_timing,is_temporarily_closed,closed_on,address,review_keywords,link,query +ChIJoa2bdT4vdTERbzexHZTKq7Y,BAI XE PARKING PRO,,,50,2.6,"Name: Bai giu xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+%C3%B4+t%C3%B4/@10.7635045,106.6826608?authuser=0&hl=en&entry=ttu +Reviews: 37 reviews + +Name: Bai Giu Xe May +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+M%C3%A1y/@10.768580199999999,106.69064639999999?authuser=0&hl=en&entry=ttu +Reviews: 32 reviews + +Name: Bai Giu Xe 32 Le Anh Xuan +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+32+L%C3%AA+Anh+Xu%C3%A2n/@10.7721232,106.6952631?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai do xe ParkTech +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+ParkTech/@10.768542400000001,106.69345159999999?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: 24/24 Car Parking +Link: https://www.google.com/maps/search/24%2F24+Car+Parking/@10.7776628,106.69725009999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews",,,,BAI XE PARKING PRO (Owner),https://www.google.com/maps/contrib/116397855136926446668,https://lh3.ggpht.com/p/AB5caB_afIK3BhYo9bWBAI1rGIw-GRBOZeRE7v4PP0oL1_nt3cFPNkmrnvtxGIuzRgFNLUFb3qxoMrQhPReVZxuJBVye6PmLFQeyAlvw4IS5wMUlnxRpoLQ-Sr8JXr7SIEg-S6moPiQuwg=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"2B D. Pham Ngu Lao, Phuong Pham Ngu Lao, Quan 1, Ho Chi Minh",price,https://www.google.com/maps/place/B%C3%83I+XE+PARKING+PRO/data=!4m7!3m6!1s0x31752f3e759bada1:0xb6abca941db1376f!8m2!3d10.7690767!4d106.6941737!16s%2Fg%2F11c37q7l48!19sChIJoa2bdT4vdTERbzexHZTKq7Y?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJjfOa30YvdTERpjMT1_kLJao,Bai Gui Xe Pho Di Bo,,,141,2.1,"Name: Bai Giu Xe May +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+M%C3%A1y/@10.7739127,106.7029148?authuser=0&hl=en&entry=ttu +Reviews: 66 reviews + +Name: BAI XE PARKING PRO +Link: https://www.google.com/maps/search/B%C3%83I+XE+PARKING+PRO/@10.7690767,106.6941737?authuser=0&hl=en&entry=ttu +Reviews: 50 reviews + +Name: Bai Giu Xe May +Link: https://www.google.com/maps/search/Ba%CC%83i+Gi%C6%B0%CC%83+Xe+Ma%CC%81y/@10.772575999999999,106.703828?authuser=0&hl=en&entry=ttu +Reviews: 16 reviews + +Name: 24/24 Car Parking +Link: https://www.google.com/maps/search/24%2F24+Car+Parking/@10.7776628,106.69725009999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews",,,1,Bai Gui Xe Pho Di Bo (Owner),,https://lh3.ggpht.com/p/AB5caB-6mwRuvc4-Z8akfTIL5JzoJOm6Q15lvzrjap3aQryQwSmZ1F-5MTWyMx-A0u4FW4Ao3KUvgYDo96NX80g6Ou2f_gU_75pz2YSmgsYCpBRoZp-SA6CtB0HYuSKu8ld1F6AuGR13=s1024,Parking lot for motorcycles,Parking lot for motorcycles,,,Open All Days,"8(Hoc vien Ngan hang Viet Nam) D. Ton That Thiep, Ben Nghe, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe+Ph%E1%BB%91+%C4%90i+B%E1%BB%99/data=!4m7!3m6!1s0x31752f46df9af38d:0xaa250bf9d71333a6!8m2!3d10.77389!4d106.702881!16s%2Fg%2F11c1ny0vmc!19sChIJjfOa30YvdTERpjMT1_kLJao?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJwTqf3HsvdTERZpjC1f9bJqc,Bai giu xe o to,,,37,4.2,"Name: BAI XE PARKING PRO +Link: https://www.google.com/maps/search/B%C3%83I+XE+PARKING+PRO/@10.7690767,106.6941737?authuser=0&hl=en&entry=ttu +Reviews: 50 reviews + +Name: Bai xe 24/24 606 Tran Hung Dao +Link: https://www.google.com/maps/search/B%C3%A3i+xe+24%2F24+606+Tr%E1%BA%A7n+H%C6%B0ng+%C4%90%E1%BA%A1o/@10.7551774,106.6799095?authuser=0&hl=en&entry=ttu +Reviews: 21 reviews + +Name: Bai Giu Xe 32 Le Anh Xuan +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+32+L%C3%AA+Anh+Xu%C3%A2n/@10.7721232,106.6952631?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai giu xe Van Trung 24/24 o to - xe may +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+V%C4%83n+Trung+24%2F24+%C3%B4+t%C3%B4+-+xe+m%C3%A1y/@10.756941699999999,106.6725671?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai giu xe 235 Nguyen Van Cu +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+235+Nguy%E1%BB%85n+V%C4%83n+C%E1%BB%AB/@10.7631988,106.6829434?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai giu xe o to (Owner),,https://lh3.ggpht.com/p/AB5caB_I0BuOaRV6pAr_4vJeFMmPZ9pYCRFhvLwaGuOxwKoi-YN1RVVhuWpNVA8Hw_c2f3-CWKUh_KSw0xofPxQP7wHemjcjRGmqq43IJ3tuv6frHscptG62Q58YWonAOwsM7gEUFdaSlw=s1024,Parking lot,Parking lot,,,Open All Days,"235 D. Nguyen Van Cu, Phuong Nguyen Cu Trinh, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+gi%E1%BB%AF+xe+%C3%B4+t%C3%B4/data=!4m7!3m6!1s0x31752f7bdc9f3ac1:0xa7265bffd5c29866!8m2!3d10.7635045!4d106.6826608!16s%2Fg%2F11jht84ldr!19sChIJwTqf3HsvdTERZpjC1f9bJqc?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJLegyLvUvdTERqLS05m0TH9Y,Bai Giu Xe May,,,17,2.8,"Name: Bai Gui Xe Pho Di Bo +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+Ph%E1%BB%91+%C4%90i+B%E1%BB%99/@10.77389,106.70288099999999?authuser=0&hl=en&entry=ttu +Reviews: 141 reviews + +Name: Bai Giu Xe May +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+M%C3%A1y/@10.7739127,106.7029148?authuser=0&hl=en&entry=ttu +Reviews: 66 reviews + +Name: Bai gui xe may Song Lam +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+m%C3%A1y+Song+L%C3%A2m/@10.773151499999999,106.70303740000001?authuser=0&hl=en&entry=ttu +Reviews: 22 reviews + +Name: Bai giu xe TNXP +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+TNXP/@10.771806999999999,106.699084?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews",,,1,Bai Giu Xe May (Owner),,https://lh3.ggpht.com/p/AB5caB9rcPxeOAQ5QhYiF73WcKR17JscFjUTORRJprivtRDqGZ1y81zfBWcg4W1G6J7IpZYmzmO8aAavjZjfgb28zzRKQBsZMl_iAmn00p8jeY0cHQhIZSm1xXJClgH07vhvlK0_SZR5=s1024,Parking lot for motorcycles,Parking lot for motorcycles,,,Open All Days,"78 D. Ho Tung Mau, Ben Nghe, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/Ba%CC%83i+Gi%C6%B0%CC%83+Xe+Ma%CC%81y/data=!4m7!3m6!1s0x31752ff52e32e82d:0xd61f136de6b4b4a8!8m2!3d10.772576!4d106.703828!16s%2Fg%2F11g10gw83f!19sChIJLegyLvUvdTERqLS05m0TH9Y?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJ5xqW30YvdTERhwJ9Jh5Dpi0,Bai Giu Xe May,,,66,1.9,"Name: Bai Gui Xe Pho Di Bo +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+Ph%E1%BB%91+%C4%90i+B%E1%BB%99/@10.77389,106.70288099999999?authuser=0&hl=en&entry=ttu +Reviews: 141 reviews + +Name: BAI XE PARKING PRO +Link: https://www.google.com/maps/search/B%C3%83I+XE+PARKING+PRO/@10.7690767,106.6941737?authuser=0&hl=en&entry=ttu +Reviews: 50 reviews + +Name: Bai Giu Xe May +Link: https://www.google.com/maps/search/Ba%CC%83i+Gi%C6%B0%CC%83+Xe+Ma%CC%81y/@10.772575999999999,106.703828?authuser=0&hl=en&entry=ttu +Reviews: 16 reviews + +Name: Bai Giu Xe 32 Le Anh Xuan +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+32+L%C3%AA+Anh+Xu%C3%A2n/@10.7721232,106.6952631?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews",,,1,Bai Giu Xe May (Owner),,https://lh3.ggpht.com/p/AB5caB8tbcCMOii8sWJO5et7JTs2YKAqLY9LVr4u7v5pzA1HLRHeQP2ZZkAlgVwlX6vRJfoO-SNx74TJHMa8hooK7vM9NocgZ3qRIOfJAz4JSKgnJCGMEL-XqyWflHXEXfSAF3gvFflZpQ=s1024,Parking lot for motorcycles,Parking lot for motorcycles,,,Open All Days,"3 D. Ton That Thiep, Ben Nghe, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+Gi%E1%BB%AF+Xe+M%C3%A1y/data=!4m7!3m6!1s0x31752f46df961ae7:0x2da6431e267d0287!8m2!3d10.7739127!4d106.7029148!16s%2Fg%2F11ckqsgh0m!19sChIJ5xqW30YvdTERhwJ9Jh5Dpi0?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJiUas8swodTERzkVSNf51yuY,Bai Xe,,,1,3,"Name: Bai Giu Xe P +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+P/@10.789042,106.690759?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Bai xe Rua xe Trung Khanh +Link: https://www.google.com/maps/search/B%C3%A3i+xe+R%E1%BB%ADa+xe+Tr%C3%B9ng+Kh%C3%A1nh/@10.7862001,106.69589719999999?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai Xe oto 32 Nguyen Binh Khiem +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+oto+32+Nguy%E1%BB%85n+B%E1%BB%89nh+Khi%C3%AAm/@10.7912056,106.7010514?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai giu xe Parking 24/24 xe may Hai Ba Trung +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+Parking+24%2F24+xe+m%C3%A1y+Hai+B%C3%A0+Tr%C6%B0ng/@10.7901027,106.6893982?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe Nguyen Van Chiem +Link: https://www.google.com/maps/search/B%C3%A3i+xe+Nguy%E1%BB%85n+V%C4%83n+Chi%C3%AAm/@10.781750599999999,106.6981492?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,Bai Xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"111 Nguyen Phi Khanh, Phuong Tan Dinh, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+Xe/data=!4m7!3m6!1s0x317528ccf2ac4689:0xe6ca75fe355245ce!8m2!3d10.7916427!4d106.6924902!16s%2Fg%2F11flt90d22!19sChIJiUas8swodTERzkVSNf51yuY?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJAUiqcD0vdTERolFzh1pYDbs,Bai Giu Xe May,,,32,4.1,"Name: BAI XE PARKING PRO +Link: https://www.google.com/maps/search/B%C3%83I+XE+PARKING+PRO/@10.7690767,106.6941737?authuser=0&hl=en&entry=ttu +Reviews: 50 reviews + +Name: Bai Giu Xe 32 Le Anh Xuan +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+32+L%C3%AA+Anh+Xu%C3%A2n/@10.7721232,106.6952631?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai Giu Xe May - O To +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+M%C3%A1y+-+%C3%94+T%C3%B4/@10.77769,106.6875?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai do xe ParkTech +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+ParkTech/@10.768542400000001,106.69345159999999?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews",,,1,Bai Giu Xe May (Owner),,https://lh3.ggpht.com/p/AB5caB8YardWPkPstcoEsVDHDJSzbuYZlj9MwXKsIeU1G_pLBzF2BtCpbGhOtp691YnzN9Ir5jLJXquHW7s4acpMYGCULV6ZurmZjV9l8aB3ESeqH316pKZw7i7nyZtUmbC-22RaKW4=s1024,Parking lot for motorcycles,Parking lot for motorcycles,,,Open All Days,"200 D. Le Lai, Phuong Pham Ngu Lao, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+Gi%E1%BB%AF+Xe+M%C3%A1y/data=!4m7!3m6!1s0x31752f3d70aa4801:0xbb0d585a877351a2!8m2!3d10.7685802!4d106.6906464!16s%2Fg%2F11cjnp106c!19sChIJAUiqcD0vdTERolFzh1pYDbs?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJy-E-tG0pdTERIYzL6_Tes8Q,Bai giu xe Parking 24/24 xe may Hai Ba Trung,"Cong ty TNHH Dau tu va Khai thac Parking co Giay chung nhan dang ky hoat dong chi nhanh, tai dia diem dang ky co trang bi bien bang",,1,5,"Name: Bai Giu Xe P +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+P/@10.789042,106.690759?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: 24/24 Car Parking +Link: https://www.google.com/maps/search/24%2F24+Car+Parking/@10.7776628,106.69725009999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Xe +Link: https://www.google.com/maps/search/B%C3%A3i+Xe/@10.791642699999999,106.6924902?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Parking +Link: https://www.google.com/maps/search/Parking/@10.773188,106.70186400000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Dich Vu Giu Xe Trong Nha +Link: https://www.google.com/maps/search/D%E1%BB%8Bch+V%E1%BB%A5+Gi%E1%BB%AF+Xe+Trong+Nh%C3%A0/@10.7725504,106.6967189?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",https://vantrungparking.com/,0931 306 730,,Bai giu xe Parking 24/24 xe may Hai Ba Trung (Owner),https://www.google.com/maps/contrib/110070225170831270453,https://lh3.ggpht.com/p/AF1QipO5gOjIs3R6oOdwnTr0Kqpst6JF2nBYMEctiXtd=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"338 Hai Ba Trung, P.Tan Dinh, 235-237 Tran Hung Dao, P, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+gi%E1%BB%AF+xe+Parking+24%2F24+xe+m%C3%A1y+Hai+B%C3%A0+Tr%C6%B0ng/data=!4m7!3m6!1s0x3175296db43ee1cb:0xc4b3def4ebcb8c21!8m2!3d10.7901027!4d106.6893982!16s%2Fg%2F11w8vpsnt1!19sChIJy-E-tG0pdTERIYzL6_Tes8Q?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJ3W8fBgAvdTERh7YFXFOrL6Y,Bai giu xe 235 Nguyen Van Cu,,,0,0,"Name: Bai giu xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+%C3%B4+t%C3%B4/@10.7635045,106.6826608?authuser=0&hl=en&entry=ttu +Reviews: 37 reviews + +Name: Bai do xe ParkTech +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+ParkTech/@10.768542400000001,106.69345159999999?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai xe may va o to +Link: https://www.google.com/maps/search/B%C3%A3i+xe+m%C3%A1y+v%C3%A0+%C3%B4+t%C3%B4/@10.764699,106.6899339?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai xe Nguyen Van Chiem +Link: https://www.google.com/maps/search/B%C3%A3i+xe+Nguy%E1%BB%85n+V%C4%83n+Chi%C3%AAm/@10.781750599999999,106.6981492?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai giu xe Parking 24/24 xe may Hai Ba Trung +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+Parking+24%2F24+xe+m%C3%A1y+Hai+B%C3%A0+Tr%C6%B0ng/@10.7901027,106.6893982?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,Bai giu xe 235 Nguyen Van Cu (Owner),,,Parking lot,Parking lot,Open 24 hours,,Open All Days,"QM7M+75G, Phuong Nguyen Cu Trinh, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+gi%E1%BB%AF+xe+235+Nguy%E1%BB%85n+V%C4%83n+C%E1%BB%AB/data=!4m7!3m6!1s0x31752f00061f6fdd:0xa62fab535c05b687!8m2!3d10.7631988!4d106.6829434!16s%2Fg%2F11y54vjg6t!19sChIJ3W8fBgAvdTERh7YFXFOrL6Y?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJo7pENwAvdTERz2TIVb1HnJc,Bai giu xe TNXP,,,19,2.9,"Name: Bai Giu Xe May +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+M%C3%A1y/@10.7739127,106.7029148?authuser=0&hl=en&entry=ttu +Reviews: 66 reviews + +Name: BAI XE PARKING PRO +Link: https://www.google.com/maps/search/B%C3%83I+XE+PARKING+PRO/@10.7690767,106.6941737?authuser=0&hl=en&entry=ttu +Reviews: 50 reviews + +Name: Bai Giu Xe 32 Le Anh Xuan +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+32+L%C3%AA+Anh+Xu%C3%A2n/@10.7721232,106.6952631?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Dich Vu Giu Xe Trong Nha +Link: https://www.google.com/maps/search/D%E1%BB%8Bch+V%E1%BB%A5+Gi%E1%BB%AF+Xe+Trong+Nh%C3%A0/@10.7725504,106.6967189?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Parking +Link: https://www.google.com/maps/search/Parking/@10.773188,106.70186400000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",https://goonus.io/signup/6277729706696687518?utm_campaign=invite,,1,Bai giu xe TNXP (Owner),,https://lh3.ggpht.com/p/AB5caB8mAWCdzjjbVjmNlHojcURQ3tzmtXIEAYlRDq-VdTfRrMejO4I1bDoQMJ-SBijUVxU7JqWpH4UAwVaQ30723rqhT-4eEPU-i0hhpcbWTfv0jSudnRfsv35Hgu0gN0Z5IzgEVIuP=s1024,Parking lot for motorcycles,Parking lot for motorcycles,Open 24 hours,,Open All Days,"4 D. Truong Dinh, Phuong Pham Ngu Lao, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+gi%E1%BB%AF+xe+TNXP/data=!4m7!3m6!1s0x31752f003744baa3:0x979c47bd55c864cf!8m2!3d10.7710666!4d106.6969077!16s%2Fg%2F11wvd4vq07!19sChIJo7pENwAvdTERz2TIVb1HnJc?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJ9XQycnUvdTERZjC5UrhE79w,Bai Giu Xe 29 Nam Ki,,,6,3.7,"Name: BAI XE PARKING PRO +Link: https://www.google.com/maps/search/B%C3%83I+XE+PARKING+PRO/@10.7690767,106.6941737?authuser=0&hl=en&entry=ttu +Reviews: 50 reviews + +Name: Bai Giu Xe 32 Le Anh Xuan +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+32+L%C3%AA+Anh+Xu%C3%A2n/@10.7721232,106.6952631?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: 24/24 Car Parking +Link: https://www.google.com/maps/search/24%2F24+Car+Parking/@10.7776628,106.69725009999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Xe oto 32 Nguyen Binh Khiem +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+oto+32+Nguy%E1%BB%85n+B%E1%BB%89nh+Khi%C3%AAm/@10.7912056,106.7010514?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Huynh Huu Ngoc Vehicle Keeping Store +Link: https://www.google.com/maps/search/Huynh+Huu+Ngoc+Vehicle+Keeping+Store/@10.7710957,106.70500179999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0776 287 435,1,Bai Giu Xe 29 Nam Ki (Owner),,https://lh3.ggpht.com/p/AB5caB_JHXNOgdqygDLqbwElMdKbsTBcp3-aF-zSI9nkkSCXvS-0P1vSCM4aP87lvW9AoyNHaAp4fQMwP6pHZrrg4aUMRB49375Nl77kbf7SeXVeH1egHiOUsGk9zI1xdblSlzBeJP5j2A=s1024,Transportation service,Transportation service,,,Open All Days,"29 D. Nam Ky Khoi Nghia, Phuong Nguyen Thai Binh, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+Gi%E1%BB%AF+Xe+29+Nam+K%C3%AC/data=!4m7!3m6!1s0x31752f75723274f5:0xdcef44b852b93066!8m2!3d10.76939!4d106.7017186!16s%2Fg%2F11fmd9thyp!19sChIJ9XQycnUvdTERZjC5UrhE79w?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJvRMP_z4vdTERYsj9rHHIOow,Bai xe Nguyen Van Chiem,,,1,5,"Name: Bai Giu Xe P +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+P/@10.789042,106.690759?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Bai xe Rua xe Trung Khanh +Link: https://www.google.com/maps/search/B%C3%A3i+xe+R%E1%BB%ADa+xe+Tr%C3%B9ng+Kh%C3%A1nh/@10.7862001,106.69589719999999?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: 24/24 Car Parking +Link: https://www.google.com/maps/search/24%2F24+Car+Parking/@10.7776628,106.69725009999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Xe oto 32 Nguyen Binh Khiem +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+oto+32+Nguy%E1%BB%85n+B%E1%BB%89nh+Khi%C3%AAm/@10.7912056,106.7010514?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Xe +Link: https://www.google.com/maps/search/B%C3%A3i+Xe/@10.791642699999999,106.6924902?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,Bai xe Nguyen Van Chiem (Owner),,https://lh3.ggpht.com/p/AB5caB_Y9YbgICHRzqiQj4qolpihxTWQ94IKV-Gw1u4V13cYwCjzPMo29GzOdMJGM9nw4FU77PhTnsMsBu4oSULIycwc-xADMTE82SUCCPqDTrkyiFq5_8OsRv4Gb0DgXImyict7-1Gm=s1024,Parking lot,Parking lot,,,Open All Days,"7 Nguyen Van Chiem, Ben Nghe, Quan 1, Ho Chi Minh 700000",,https://www.google.com/maps/place/B%C3%A3i+xe+Nguy%E1%BB%85n+V%C4%83n+Chi%C3%AAm/data=!4m7!3m6!1s0x31752f3eff0f13bd:0x8c3ac871acfdc862!8m2!3d10.7817506!4d106.6981492!16s%2Fg%2F11kr6y8238!19sChIJvRMP_z4vdTERYsj9rHHIOow?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJufuso3UvdTERzQ4fqNDtikA,Bai giu xe oto - Cuu ho accquy,Co Cuu ho accquy khu vuc q1.,,20,4.7,"Name: Bai Giu Xe 32 Le Anh Xuan +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+32+L%C3%AA+Anh+Xu%C3%A2n/@10.7721232,106.6952631?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: 24/24 Car Parking +Link: https://www.google.com/maps/search/24%2F24+Car+Parking/@10.7776628,106.69725009999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Xe oto 32 Nguyen Binh Khiem +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+oto+32+Nguy%E1%BB%85n+B%E1%BB%89nh+Khi%C3%AAm/@10.7912056,106.7010514?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai xe Nguyen Van Chiem +Link: https://www.google.com/maps/search/B%C3%A3i+xe+Nguy%E1%BB%85n+V%C4%83n+Chi%C3%AAm/@10.781750599999999,106.6981492?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Dich Vu Giu Xe Trong Nha +Link: https://www.google.com/maps/search/D%E1%BB%8Bch+V%E1%BB%A5+Gi%E1%BB%AF+Xe+Trong+Nh%C3%A0/@10.7725504,106.6967189?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0789 181 981,,Bai giu xe oto - Cuu ho accquy (Owner),https://www.google.com/maps/contrib/103869263184088623842,https://lh3.ggpht.com/p/AF1QipPHTCky4kici02w79F0V6wH5rGl7GCeB0gQc8ou=s1024,Automobile storage facility,Automobile storage facility,,,Open All Days,"8B Nguyen Trung Truc, Phuong Ben Thanh, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+gi%E1%BB%AF+xe+%C3%B4t%C3%B4+-+C%E1%BB%A9u+h%E1%BB%99+accquy/data=!4m7!3m6!1s0x31752f75a3acfbb9:0x408aedd0a81f0ecd!8m2!3d10.7744357!4d106.6988466!16s%2Fg%2F11v0x38z8c!19sChIJufuso3UvdTERzQ4fqNDtikA?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJ69uUK54pdTER-02eyEivpGc,Bai Xe oto 32 Nguyen Binh Khiem,,,4,2,"Name: Bai Giu Xe P +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+P/@10.789042,106.690759?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Bai giu xe O to - Xe may Phuong Nam 24/24 +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+%C3%94+t%C3%B4+-+Xe+m%C3%A1y+Ph%C6%B0%C6%A1ng+Nam+24%2F24/@10.8083634,106.71442719999999?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Bai xe Nguyen Van Chiem +Link: https://www.google.com/maps/search/B%C3%A3i+xe+Nguy%E1%BB%85n+V%C4%83n+Chi%C3%AAm/@10.781750599999999,106.6981492?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Xe +Link: https://www.google.com/maps/search/B%C3%A3i+Xe/@10.791642699999999,106.6924902?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai giu xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+%C3%B4+t%C3%B4/@10.8100449,106.70267849999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai Xe oto 32 Nguyen Binh Khiem (Owner),,,Parking lot,Parking lot,,,Open All Days,"32 D. Nguyen Binh Khiem, Da Kao, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+Xe+oto+32+Nguy%E1%BB%85n+B%E1%BB%89nh+Khi%C3%AAm/data=!4m7!3m6!1s0x3175299e2b94dbeb:0x67a4af48c89e4dfb!8m2!3d10.7912056!4d106.7010514!16s%2Fg%2F11tt6lmpm1!19sChIJ69uUK54pdTER-02eyEivpGc?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJA7Je_NcvdTERL1JFUKx39-M,Bai Giu Xe P,"Bai giu xe 24/7, su dung he thong gui xe hien dai, thoang mat, sach se",,8,3,"Name: 24/24 Car Parking +Link: https://www.google.com/maps/search/24%2F24+Car+Parking/@10.7776628,106.69725009999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Xe oto 32 Nguyen Binh Khiem +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+oto+32+Nguy%E1%BB%85n+B%E1%BB%89nh+Khi%C3%AAm/@10.7912056,106.7010514?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai giu xe Parking 24/24 xe may Hai Ba Trung +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+Parking+24%2F24+xe+m%C3%A1y+Hai+B%C3%A0+Tr%C6%B0ng/@10.7901027,106.6893982?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Xe +Link: https://www.google.com/maps/search/B%C3%A3i+Xe/@10.791642699999999,106.6924902?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe Nguyen Van Chiem +Link: https://www.google.com/maps/search/B%C3%A3i+xe+Nguy%E1%BB%85n+V%C4%83n+Chi%C3%AAm/@10.781750599999999,106.6981492?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,0933 316 328,,Bai Giu Xe P (Owner),https://www.google.com/maps/contrib/101136618639883553008,https://lh3.ggpht.com/p/AF1QipPYSyAhjBwiCjEckJmYvAYDIgetyyr3guzMoo2F=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"282/1 Hai Ba Trung, Phuong Tan Dinh, Quan 1, Ho Chi Minh 700000",,https://www.google.com/maps/place/B%C3%A3i+Gi%E1%BB%AF+Xe+P/data=!4m7!3m6!1s0x31752fd7fc5eb203:0xe3f777ac5045522f!8m2!3d10.789042!4d106.690759!16s%2Fg%2F11stfdty7j!19sChIJA7Je_NcvdTERL1JFUKx39-M?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJ0YEXMjgvdTERA5orAJg2uYw,24/24 Car Parking,,,5,3.4,"Name: Bai Gui Xe Pho Di Bo +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+Ph%E1%BB%91+%C4%90i+B%E1%BB%99/@10.77389,106.70288099999999?authuser=0&hl=en&entry=ttu +Reviews: 141 reviews + +Name: BAI XE PARKING PRO +Link: https://www.google.com/maps/search/B%C3%83I+XE+PARKING+PRO/@10.7690767,106.6941737?authuser=0&hl=en&entry=ttu +Reviews: 50 reviews + +Name: Parking Parkson 24/24 +Link: https://www.google.com/maps/search/Parking+Parkson+24%2F24/@10.777451,106.7021209?authuser=0&hl=en&entry=ttu +Reviews: 16 reviews + +Name: Bai Giu Xe P +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+P/@10.789042,106.690759?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Bai Giu Xe 29 Nam Ki +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+29+Nam+K%C3%AC/@10.76939,106.70171859999999?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews",,0367 338 676,1,24/24 Car Parking (Owner),,https://lh3.ggpht.com/p/AB5caB8jNYbCMe39GAD4LLtdW7BrUFVYZjRQ7dUyoMap7-4pdVxnrqXRUG8cGKH6j3d08NlbkiRBkhUG0OakthZvcdeYYUY14FIAwYpY-NFTLRMjscnq1EE2fvuUqgf4oiEtZ4oR1kqO=s1024,Parking garage,Parking garage,,,Open All Days,"136, Duong D. Nam Ky Khoi Nghia, Ben Nghe, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/24%2F24+Car+Parking/data=!4m7!3m6!1s0x31752f38321781d1:0x8cb93698002b9a03!8m2!3d10.7776628!4d106.6972501!16s%2Fg%2F1pzt6z64y!19sChIJ0YEXMjgvdTERA5orAJg2uYw?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJ4Z7amfsvdTERZleMPioD0LI,Bai Dau Xe 104 Yersin 24/24,"Bai do xe thong minh, su dung the an toan, tien loi, phuc vu 24/24, gia ca phu hop",,2,5,"Name: Bai xe Rua xe Trung Khanh +Link: https://www.google.com/maps/search/B%C3%A3i+xe+R%E1%BB%ADa+xe+Tr%C3%B9ng+Kh%C3%A1nh/@10.7862001,106.69589719999999?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai xe may va o to +Link: https://www.google.com/maps/search/B%C3%A3i+xe+m%C3%A1y+v%C3%A0+%C3%B4+t%C3%B4/@10.764699,106.6899339?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai dau xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BA%ADu+xe/@10.788573999999999,106.6560835?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai xe Nguyen Van Chiem +Link: https://www.google.com/maps/search/B%C3%A3i+xe+Nguy%E1%BB%85n+V%C4%83n+Chi%C3%AAm/@10.781750599999999,106.6981492?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai giu xe Parking 24/24 xe may Hai Ba Trung +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+Parking+24%2F24+xe+m%C3%A1y+Hai+B%C3%A0+Tr%C6%B0ng/@10.7901027,106.6893982?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,0522 252 229,,Bai Dau Xe 104 Yersin 24/24 (Owner),https://www.google.com/maps/contrib/115612160117540812700,,Parking lot,Parking lot,Open 24 hours,,Open All Days,"104 D. Yersin, Phuong Nguyen Thai Binh, Quan 1, Ho Chi Minh 70000",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BA%ADu+Xe+104+Yersin+24%2F24/data=!4m7!3m6!1s0x31752ffb99da9ee1:0xb2d0032a3e8c5766!8m2!3d10.7669625!4d106.6976759!16s%2Fg%2F11vjxdl9t_!19sChIJ4Z7amfsvdTERZleMPioD0LI?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJf2-KyDUvdTERGKLWAH4miqY,Bai do xe ParkTech,"ParkTech - Giai phap do xe thong minh, an toan va tien loi cho moi phuong tien +Ban dang tim kiem mot bai do xe dang tin cay, an toan va tien loi cho chiec xe may hay o to cua minh? ParkTech tu hao la giai phap hoan hao dap ung moi nhu cau cua ban. Voi he thong bai do xe hien dai, rong rai va doi ngu nhan vien chuyen nghiep, tan tam, chung toi cam ket mang den cho ban trai nghiem do xe thoai mai va an tam tuyet doi. +ParkTech cung cap dich vu do xe cho ca xe may va o to voi muc gia canh tranh, nhieu uu dai hap dan. He thong camera giam sat 24/7 cung doi ngu bao ve chuyen nghiep dam bao an ninh tuyet doi cho phuong tien cua ban. Khong gian bai do xe duoc thiet ke khoa hoc, thong thoang, giup ban de dang di chuyen va tim kiem cho dau xe.",,9,4.6,"Name: BAI XE PARKING PRO +Link: https://www.google.com/maps/search/B%C3%83I+XE+PARKING+PRO/@10.7690767,106.6941737?authuser=0&hl=en&entry=ttu +Reviews: 50 reviews + +Name: Bai Giu Xe May +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+M%C3%A1y/@10.768580199999999,106.69064639999999?authuser=0&hl=en&entry=ttu +Reviews: 32 reviews + +Name: Bai giu xe Parking 24/24 xe may Hai Ba Trung +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+Parking+24%2F24+xe+m%C3%A1y+Hai+B%C3%A0+Tr%C6%B0ng/@10.7901027,106.6893982?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Parking +Link: https://www.google.com/maps/search/Parking/@10.773188,106.70186400000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai giu xe 235 Nguyen Van Cu +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+235+Nguy%E1%BB%85n+V%C4%83n+C%E1%BB%AB/@10.7631988,106.6829434?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0938 720 422,,Bai do xe ParkTech (Owner),https://www.google.com/maps/contrib/108296089831127979910,https://lh3.ggpht.com/p/AF1QipMqdfJ7ukgdOreVhn4ZAbDLjTWFrEA0Uy2n6isE=s1024,Parking lot,Parking lot,,,Open All Days,"04 D. Pham Ngu Lao, Phuong Pham Ngu Lao, Quan 1, Ho Chi Minh 71012",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+ParkTech/data=!4m7!3m6!1s0x31752f35c88a6f7f:0xa68a267e00d6a218!8m2!3d10.7685424!4d106.6934516!16s%2Fg%2F11lnvmlqnv!19sChIJf2-KyDUvdTERGKLWAH4miqY?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJ1aomeAAvdTERZ9EZZxI1ZBk,"IFC ONE , Bai trong giu xe O to , xe may 24h",,,5,4.4,"Name: Bai Gui Xe Pho Di Bo +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+Ph%E1%BB%91+%C4%90i+B%E1%BB%99/@10.77389,106.70288099999999?authuser=0&hl=en&entry=ttu +Reviews: 141 reviews + +Name: Bai Xe +Link: https://www.google.com/maps/search/B%C3%A3i+Xe/@10.791642699999999,106.6924902?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Parking +Link: https://www.google.com/maps/search/Parking/@10.773188,106.70186400000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Dich Vu Giu Xe Trong Nha +Link: https://www.google.com/maps/search/D%E1%BB%8Bch+V%E1%BB%A5+Gi%E1%BB%AF+Xe+Trong+Nh%C3%A0/@10.7725504,106.6967189?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0394 091 197,1,"IFC ONE , Bai trong giu xe O to , xe may 24h (Owner)",,https://lh3.ggpht.com/p/AB5caB-JiORzOaM-TJH_-wAWtu2BKxHa9JwD_yhaSvT0GfrSJkB7GvtYIGT7HUposeApwCVQiXtYcBxjE73BA9P1Gn6d7YNYWKmFW62G99NWSCUiwNWpXXuQxDGDstbR_u4HOBlMf4wn=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"34 D. Ton Duc Thang, Phuong Nguyen Thai Binh, Quan 1, Ho Chi Minh",,"https://www.google.com/maps/place/IFC+ONE+,+B%C3%A3i+tr%C3%B4ng+gi%E1%BB%AF+xe+%C3%94+t%C3%B4+,+xe+m%C3%A1y+24h/data=!4m7!3m6!1s0x31752f007826aad5:0x196435126719d167!8m2!3d10.7701701!4d106.7057348!16s%2Fg%2F11wxgny1hz!19sChIJ1aomeAAvdTERZ9EZZxI1ZBk?authuser=0&hl=en&rclk=1",bai do xe quan 1 +ChIJnRly0EkvdTERMrWbScH7dhc,Ham xe mPlaza Saigon,,,15,3,"Name: Bai Giu Xe P +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+P/@10.789042,106.690759?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: 24/24 Car Parking +Link: https://www.google.com/maps/search/24%2F24+Car+Parking/@10.7776628,106.69725009999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Xe oto 32 Nguyen Binh Khiem +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+oto+32+Nguy%E1%BB%85n+B%E1%BB%89nh+Khi%C3%AAm/@10.7912056,106.7010514?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai xe Nguyen Van Chiem +Link: https://www.google.com/maps/search/B%C3%A3i+xe+Nguy%E1%BB%85n+V%C4%83n+Chi%C3%AAm/@10.781750599999999,106.6981492?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Huynh Huu Ngoc Vehicle Keeping Store +Link: https://www.google.com/maps/search/Huynh+Huu+Ngoc+Vehicle+Keeping+Store/@10.7710957,106.70500179999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Ham xe mPlaza Saigon (Owner),,https://lh3.ggpht.com/p/AB5caB_GRmEfc_odcI_OO5VykUpXfKEn062yKz4H0JM3VS8vcH5iW6kAD3Y-b66wdUmuhPLHuijO7gk0FFHZYa9ywxkJxoRIB8brUK1QtFRAsa--MmmnIuVV0LI58QJfy3fDr703Hzk=s1024,Parking,Parking,,,Open All Days,"39 D. Le Duan, Ben Nghe, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/H%E1%BA%A7m+xe+mPlaza+Saigon/data=!4m7!3m6!1s0x31752f49d072199d:0x1776fbc1499bb532!8m2!3d10.7816039!4d106.7005008!16s%2Fg%2F1tgjz3pb!19sChIJnRly0EkvdTERMrWbScH7dhc?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJsanVkxMvdTERMWb0IPEcDEA,Samco Parking,,,16,3.3,"Name: SAMCO Building - Managed by SAVISTA +Link: https://www.google.com/maps/search/SAMCO+Building+-+Managed+by+SAVISTA/@10.7616111,106.695775?authuser=0&hl=en&entry=ttu +Reviews: 141 reviews + +Name: BAI XE PARKING PRO +Link: https://www.google.com/maps/search/B%C3%83I+XE+PARKING+PRO/@10.7690767,106.6941737?authuser=0&hl=en&entry=ttu +Reviews: 50 reviews + +Name: Ham xe mPlaza Saigon +Link: https://www.google.com/maps/search/H%E1%BA%A7m+xe+mPlaza+Saigon/@10.781603900000002,106.7005008?authuser=0&hl=en&entry=ttu +Reviews: 15 reviews + +Name: Khu nha de xe oto va van phong SAMCO +Link: https://www.google.com/maps/search/Khu+nh%C3%A0+%C4%91%E1%BB%83+xe+oto+v%C3%A0+v%C4%83n+ph%C3%B2ng+SAMCO/@10.7621453,106.6954688?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Saigon Transportation Mechanical Corporation - Samco +Link: https://www.google.com/maps/search/Saigon+Transportation+Mechanical+Corporation+-+Samco/@10.7645726,106.6927357?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,028 3838 5864,1,Samco Parking (Owner),,https://lh3.ggpht.com/p/AB5caB_94B8ibj2Ca729yQl57ToHEJE7Xz6NWAENZvHgGdEYnAu8sEohV7i-p3XDerPj8t_dbV4oA6LZ2-EVk7zjDJyp8s7npY-QIR6w9iI_eyKMnwXm_xGnrspQU6jStVnGkk4ib8qu=s1024,Parking garage,Parking garage,Open 24 hours,,Open All Days,"326 D. Vo Van Kiet, Phuong Co Giang, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/Samco+Parking/data=!4m7!3m6!1s0x31752f1393d5a9b1:0x400c1cf120f46631!8m2!3d10.7617031!4d106.6958517!16s%2Fg%2F11c5750x7k!19sChIJsanVkxMvdTERMWb0IPEcDEA?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJV7s3EywvdTERIydnxA2aqcY,motorbike park,,,6,2.7,"Name: Bai xe Rua xe Trung Khanh +Link: https://www.google.com/maps/search/B%C3%A3i+xe+R%E1%BB%ADa+xe+Tr%C3%B9ng+Kh%C3%A1nh/@10.7862001,106.69589719999999?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: 24/24 Car Parking +Link: https://www.google.com/maps/search/24%2F24+Car+Parking/@10.7776628,106.69725009999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Parking +Link: https://www.google.com/maps/search/Parking/@10.773188,106.70186400000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai giu xe 235 Nguyen Van Cu +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+235+Nguy%E1%BB%85n+V%C4%83n+C%E1%BB%AB/@10.7631988,106.6829434?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Huynh Huu Ngoc Vehicle Keeping Store +Link: https://www.google.com/maps/search/Huynh+Huu+Ngoc+Vehicle+Keeping+Store/@10.7710957,106.70500179999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,motorbike park (Owner),,,Parking lot,Parking lot,,,Open All Days,"QPG4+X7M, Thi Sach, Ben Nghe, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/motorbike+park/data=!4m7!3m6!1s0x31752f2c1337bb57:0xc6a99a0dc4672723!8m2!3d10.7774744!4d106.7056624!16s%2Fg%2F11vjj4c_z1!19sChIJV7s3EywvdTERIydnxA2aqcY?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJMUjx1j4vdTERSq6FbAkhs80,Dich Vu Giu Xe Trong Nha,,,0,0,"Name: Parking Parkson 24/24 +Link: https://www.google.com/maps/search/Parking+Parkson+24%2F24/@10.777451,106.7021209?authuser=0&hl=en&entry=ttu +Reviews: 16 reviews + +Name: Bai Giu Xe 32 Le Anh Xuan +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+32+L%C3%AA+Anh+Xu%C3%A2n/@10.7721232,106.6952631?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: 24/24 Car Parking +Link: https://www.google.com/maps/search/24%2F24+Car+Parking/@10.7776628,106.69725009999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai giu xe TNXP +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+TNXP/@10.771806999999999,106.699084?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Parking +Link: https://www.google.com/maps/search/Parking/@10.773188,106.70186400000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Dich Vu Giu Xe Trong Nha (Owner),,,Parking lot,Parking lot,,,Open All Days,"220 D. Le Thanh Ton, Phuong Ben Thanh, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/D%E1%BB%8Bch+V%E1%BB%A5+Gi%E1%BB%AF+Xe+Trong+Nh%C3%A0/data=!4m7!3m6!1s0x31752f3ed6f14831:0xcdb321096c85ae4a!8m2!3d10.7725504!4d106.6967189!16s%2Fg%2F11c1t59s6r!19sChIJMUjx1j4vdTERSq6FbAkhs80?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJ3aKVYwAvdTERWa4aLmDb_Js,Bai giu xe TNXP,,,0,0,"Name: Bai Giu Xe May +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+M%C3%A1y/@10.7739127,106.7029148?authuser=0&hl=en&entry=ttu +Reviews: 66 reviews + +Name: motorbike park +Link: https://www.google.com/maps/search/motorbike+park/@10.7774744,106.7056624?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: phannguyen +Link: https://www.google.com/maps/search/phannguyen/@10.7753882,106.70282499999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Parking +Link: https://www.google.com/maps/search/Parking/@10.773188,106.70186400000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai giu xe TNXP (Owner),,https://lh3.ggpht.com/p/AB5caB_Iidh0kSfMuSS1YQIj0WjRnMbjAITJk8DAvxofwknJBwU7acldwCAIKWYe8ZgkhpTGAajwpGQOTHxlZ1EyiuHfDUnGTs7klj38kOzFVmnBKPD9yAMUEUWJLLGnaeeJTVRELfU=s1024,Parking lot for motorcycles,Parking lot for motorcycles,5:30 AM-11 PM,,Open All Days,"33 D. Nguyen Thi Minh Khai, Ben Nghe, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+gi%E1%BB%AF+xe+TNXP/data=!4m7!3m6!1s0x31752f006395a2dd:0x9bfcdb602e1aae59!8m2!3d10.782474!4d106.6979534!16s%2Fg%2F11ww4_894f!19sChIJ3aKVYwAvdTERWa4aLmDb_Js?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJz83OZQAvdTERzBr-TEJ1x2k,Bai xe Rua xe Trung Khanh,,,6,3,"Name: Bai Giu Xe P +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+P/@10.789042,106.690759?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: bai gui xe tai ben tau water bus Bach Dang +Link: https://www.google.com/maps/search/b%C3%A3i+g%E1%BB%ADi+xe+t%E1%BA%A1i+b%E1%BA%BFn+t%C3%A0u+water+bus+B%E1%BA%A1ch+%C4%90%E1%BA%B1ng/@10.775931199999999,106.7069201?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai xe Nguyen Van Chiem +Link: https://www.google.com/maps/search/B%C3%A3i+xe+Nguy%E1%BB%85n+V%C4%83n+Chi%C3%AAm/@10.781750599999999,106.6981492?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Xe +Link: https://www.google.com/maps/search/B%C3%A3i+Xe/@10.791642699999999,106.6924902?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai giu xe 235 Nguyen Van Cu +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+235+Nguy%E1%BB%85n+V%C4%83n+C%E1%BB%AB/@10.7631988,106.6829434?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai xe Rua xe Trung Khanh (Owner),,https://lh3.ggpht.com/p/AB5caB93E64sLPIX0Dtc6wvxvp-J1ziFdpA1v6DRAHqyjt6mTiuMkMU_Dm-KIKzpThTQlsCJAzors-Mvp4lvu_sD7LQ4bgQzKHQxWsetGtO6-Szu7MlvvKAXWA_-KLb7Uosm6_vYLGaZ3w=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"33 D. Phung Khac Khoan, Da Kao, Quan 1, Ho Chi Minh 700000",,https://www.google.com/maps/place/B%C3%A3i+xe+R%E1%BB%ADa+xe+Tr%C3%B9ng+Kh%C3%A1nh/data=!4m7!3m6!1s0x31752f0065cecdcf:0x69c775424cfe1acc!8m2!3d10.7862001!4d106.6958972!16s%2Fg%2F11w3jhlklt!19sChIJz83OZQAvdTERzBr-TEJ1x2k?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJ96oK4lgvdTERN5g443ryeD8,Parking Parkson 24/24,"CONG TY TNHH DAU TU & KHAI THAC PARKING co tren 05 nam kinh nghiem kinh doanh Dich vu giu xe, chuyen thiet ke, khai thac bai giu xe Oto va xe gan may va quan ly van hanh cac bai giu xe chuyen nghiep... Hien nay dang lien ket khai thac cac bai giu xe Oto va xe gan may thuoc he thong Trung tam thuong mai, Benh vien, Truong hoc, Cac trung tam thuong mai, Can ho cao cap, Nha xe, Bai giu xe ngoai troi dien tich lon co mai che,... thuoc dia ban Thanh pho Ho Chi Minh.",,16,1.7,"Name: Bai Gui Xe Pho Di Bo +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+Ph%E1%BB%91+%C4%90i+B%E1%BB%99/@10.77389,106.70288099999999?authuser=0&hl=en&entry=ttu +Reviews: 141 reviews + +Name: Bai Giu Xe 32 Le Anh Xuan +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+32+L%C3%AA+Anh+Xu%C3%A2n/@10.7721232,106.6952631?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: 24/24 Car Parking +Link: https://www.google.com/maps/search/24%2F24+Car+Parking/@10.7776628,106.69725009999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Dich Vu Giu Xe Trong Nha +Link: https://www.google.com/maps/search/D%E1%BB%8Bch+V%E1%BB%A5+Gi%E1%BB%AF+Xe+Trong+Nh%C3%A0/@10.7725504,106.6967189?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Parking +Link: https://www.google.com/maps/search/Parking/@10.773188,106.70186400000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",http://vantrungparking.com/,0794 094 346,,Parking Parkson 24/24 (Owner),https://www.google.com/maps/contrib/107026325240484114673,https://lh3.ggpht.com/p/AF1QipN0Pf7SD1BlNqW_nC2BRGVEYti6LbVCl77HDRiZ=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"45 D. Le Thanh Ton, Ben Nghe, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/Parking+Parkson+24%2F24/data=!4m7!3m6!1s0x31752f58e20aaaf7:0x3f78f27ae3389837!8m2!3d10.777451!4d106.7021209!16s%2Fg%2F11t2snr1g7!19sChIJ96oK4lgvdTERN5g443ryeD8?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJL17bopkvdTERYWBBIog_Ic0,phannguyen,,,0,0,"Name: BAI XE PARKING PRO +Link: https://www.google.com/maps/search/B%C3%83I+XE+PARKING+PRO/@10.7690767,106.6941737?authuser=0&hl=en&entry=ttu +Reviews: 50 reviews + +Name: 24/24 Car Parking +Link: https://www.google.com/maps/search/24%2F24+Car+Parking/@10.7776628,106.69725009999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Parking +Link: https://www.google.com/maps/search/Parking/@10.773188,106.70186400000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai giu xe TNXP +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+TNXP/@10.782473999999999,106.69795339999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,phannguyen (Owner),https://www.google.com/maps/contrib/106533406392369257795,,Free parking lot,Free parking lot,,,Open All Days,"Ben Nghe, District 1, Ho Chi Minh City",,https://www.google.com/maps/place/phannguyen/data=!4m7!3m6!1s0x31752f99a2db5e2f:0xcd213f8822416061!8m2!3d10.7753882!4d106.702825!16s%2Fg%2F11lz1g0x_x!19sChIJL17bopkvdTERYWBBIog_Ic0?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJG4lrRQAvdTER8zB-CXb-jb4,Bai Giu Xe 32 Le Anh Xuan,Diem coi giu xe o to xe may,,9,2.8,"Name: BAI XE PARKING PRO +Link: https://www.google.com/maps/search/B%C3%83I+XE+PARKING+PRO/@10.7690767,106.6941737?authuser=0&hl=en&entry=ttu +Reviews: 50 reviews + +Name: Bai giu xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+%C3%B4+t%C3%B4/@10.7635045,106.6826608?authuser=0&hl=en&entry=ttu +Reviews: 37 reviews + +Name: Bai Giu Xe May +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+M%C3%A1y/@10.768580199999999,106.69064639999999?authuser=0&hl=en&entry=ttu +Reviews: 32 reviews + +Name: Bai giu xe TNXP +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+TNXP/@10.7710666,106.6969077?authuser=0&hl=en&entry=ttu +Reviews: 19 reviews + +Name: Dich Vu Giu Xe Trong Nha +Link: https://www.google.com/maps/search/D%E1%BB%8Bch+V%E1%BB%A5+Gi%E1%BB%AF+Xe+Trong+Nh%C3%A0/@10.7725504,106.6967189?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0902 099 591,,Bai Giu Xe 32 Le Anh Xuan (Owner),https://www.google.com/maps/contrib/106445545452877152227,https://lh3.ggpht.com/p/AF1QipPbV6P2eYViSq3tD0_j3LVu2JykQBrob5vU5-Ij=s1024,Parking lot,Parking lot,5 AM-10 PM,,Open All Days,"32 Le Anh Xuan, Phuong Ben Thanh, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+Gi%E1%BB%AF+Xe+32+L%C3%AA+Anh+Xu%C3%A2n/data=!4m7!3m6!1s0x31752f00456b891b:0xbe8dfe76097e30f3!8m2!3d10.7721232!4d106.6952631!16s%2Fg%2F11vpsrzw1j!19sChIJG4lrRQAvdTER8zB-CXb-jb4?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJgS41fgAvdTERbIxmEKu2Lik,Bai giu xe TNXP,,,4,1,"Name: BAI XE PARKING PRO +Link: https://www.google.com/maps/search/B%C3%83I+XE+PARKING+PRO/@10.7690767,106.6941737?authuser=0&hl=en&entry=ttu +Reviews: 50 reviews + +Name: Bai Giu Xe May +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+M%C3%A1y/@10.768580199999999,106.69064639999999?authuser=0&hl=en&entry=ttu +Reviews: 32 reviews + +Name: Giu xe Metro Ben Thanh +Link: https://www.google.com/maps/search/Gi%E1%BB%AF+xe+Metro+B%E1%BA%BFn+Th%C3%A0nh/@10.7710475,106.6968809?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai giu xe Parking 24/24 xe may Hai Ba Trung +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+Parking+24%2F24+xe+m%C3%A1y+Hai+B%C3%A0+Tr%C6%B0ng/@10.7901027,106.6893982?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Dich Vu Giu Xe Trong Nha +Link: https://www.google.com/maps/search/D%E1%BB%8Bch+V%E1%BB%A5+Gi%E1%BB%AF+Xe+Trong+Nh%C3%A0/@10.7725504,106.6967189?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",https://goonus.io/signup/6277729707482660766?uiid=q55kNtwTXX&utm_campaign=invite,0916 187 187,1,Bai giu xe TNXP (Owner),,https://lh3.ggpht.com/p/AB5caB_ywBM5rEz5y7VgpUw0zxfZahBVB3Nozhe8ZX-bR2BLSc_24F1ZtTRQAuE7xAyOSjbRPX1cFAiCQZvgXfWOgr1j2LNUGutvZ3oXtgOXxtbuOs4hyftIzGDyRXY7TrZajy2GMx4=s1024,Parking lot for motorcycles,Parking lot for motorcycles,Open 24 hours,,Open All Days,"161 D. Le Lai, Phuong Ben Thanh, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+gi%E1%BB%AF+xe+TNXP/data=!4m7!3m6!1s0x31752f007e352e81:0x292eb6ab10668c6c!8m2!3d10.771807!4d106.699084!16s%2Fg%2F11ww2b10br!19sChIJgS41fgAvdTERbIxmEKu2Lik?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJyYxAaCgvdTERewqdYcl-D-0,Bai gui xe cong vien Tao Dan,,,33,2,"Name: Bai Gui Xe Pho Di Bo +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+Ph%E1%BB%91+%C4%90i+B%E1%BB%99/@10.77389,106.70288099999999?authuser=0&hl=en&entry=ttu +Reviews: 141 reviews + +Name: BAI XE PARKING PRO +Link: https://www.google.com/maps/search/B%C3%83I+XE+PARKING+PRO/@10.7690767,106.6941737?authuser=0&hl=en&entry=ttu +Reviews: 50 reviews + +Name: Bai Giu Xe May - O To +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+M%C3%A1y+-+%C3%94+T%C3%B4/@10.77769,106.6875?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai Giu Xe May - O To - Ngo Thoi Nhiem +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+M%C3%A1y+-+%C3%94+T%C3%B4+-+Ng%C3%B4+Th%E1%BB%9Di+Nhi%E1%BB%87m/@10.77765,106.6869?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Bai giu xe o to 76 +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+%C3%B4+t%C3%B4+76/@10.7837695,106.6862185?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews",,,1,Bai gui xe cong vien Tao Dan (Owner),,https://lh3.ggpht.com/p/AB5caB8VU1nhiKIAom7g64qkzlBto2Ce3wmQHkwStO8uNpgn5H9PebXC7gWG9RtZ6XG2v3bOpJ3CbNe7v8xhqgQz0Ea3PXbNvouVMVI4xtELGWxeyx42Jzfy41h5pkfMJoDzFQceqMRg=s1024,Parking lot,Parking lot,,,Open All Days,"QMGR+7V8, D. Truong Dinh, Phuong 7, Quan 3, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+c%C3%B4ng+vi%C3%AAn+Tao+%C4%90%C3%A0n/data=!4m7!3m6!1s0x31752f2868408cc9:0xed0f7ec9619d0a7b!8m2!3d10.7756656!4d106.6922168!16s%2Fg%2F11rc9wdpq0!19sChIJyYxAaCgvdTERewqdYcl-D-0?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJRf3GMwApdTER7Q2SFeiTJU8,Sac xe dien,,,0,0,"Name: motorbike park +Link: https://www.google.com/maps/search/motorbike+park/@10.7774744,106.7056624?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai xe Rua xe Trung Khanh +Link: https://www.google.com/maps/search/B%C3%A3i+xe+R%E1%BB%ADa+xe+Tr%C3%B9ng+Kh%C3%A1nh/@10.7862001,106.69589719999999?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai xe Nguyen Van Chiem +Link: https://www.google.com/maps/search/B%C3%A3i+xe+Nguy%E1%BB%85n+V%C4%83n+Chi%C3%AAm/@10.781750599999999,106.6981492?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Xe +Link: https://www.google.com/maps/search/B%C3%A3i+Xe/@10.791642699999999,106.6924902?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai giu xe 235 Nguyen Van Cu +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+235+Nguy%E1%BB%85n+V%C4%83n+C%E1%BB%AB/@10.7631988,106.6829434?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Sac xe dien (Owner),,,Parking lot,Parking lot,,,Open All Days,"39 D. Nguyen Van Giai, Da Kao, Quan 1, Ho Chi Minh 70000",,https://www.google.com/maps/place/S%E1%BA%A1c+xe+%C4%91i%E1%BB%87n/data=!4m7!3m6!1s0x3175290033c6fd45:0x4f2593e815920ded!8m2!3d10.7917768!4d106.6974467!16s%2Fg%2F11v_8y0t90!19sChIJRf3GMwApdTER7Q2SFeiTJU8?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJmVCfewAvdTERjIoOGtSJ9-0,Ham de xe may - xe o to Ga Tau Dien Metro Ben Thanh - Suoi Tien,,,1,5,"Name: Bai do xe ParkTech +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+ParkTech/@10.768542400000001,106.69345159999999?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai xe may va o to +Link: https://www.google.com/maps/search/B%C3%A3i+xe+m%C3%A1y+v%C3%A0+%C3%B4+t%C3%B4/@10.764699,106.6899339?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Giu xe Metro Ben Thanh +Link: https://www.google.com/maps/search/Gi%E1%BB%AF+xe+Metro+B%E1%BA%BFn+Th%C3%A0nh/@10.7710475,106.6968809?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Gate 1 Ben Thanh Metro Station +Link: https://www.google.com/maps/search/Gate+1+Ben+Thanh+Metro+Station/@10.770459599999999,106.69676179999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai giu xe 235 Nguyen Van Cu +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+235+Nguy%E1%BB%85n+V%C4%83n+C%E1%BB%AB/@10.7631988,106.6829434?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Ham de xe may - xe o to Ga Tau Dien Metro Ben Thanh - Suoi Tien (Owner),,,Parking garage,Parking garage,,,Open All Days,"QM9V+WFQ, Phuong Pham Ngu Lao, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/H%E1%BA%A7m+%C4%91%E1%BB%83+xe+m%C3%A1y+-+xe+%C3%B4+t%C3%B4+Ga+T%C3%A0u+%C4%90i%E1%BB%87n+Metro+B%E1%BA%BFn+Th%C3%A0nh+-+Su%E1%BB%91i+Ti%C3%AAn/data=!4m7!3m6!1s0x31752f007b9f5099:0xedf789d41a0e8a8c!8m2!3d10.7698306!4d106.6937411!16s%2Fg%2F11wx4fgccy!19sChIJmVCfewAvdTERjIoOGtSJ9-0?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJQwhJSCUvdTERm4GTgx_DdGI,Bai Giu Xe May - O To,,,9,4.1,"Name: Bai gui xe cong vien Tao Dan +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+c%C3%B4ng+vi%C3%AAn+Tao+%C4%90%C3%A0n/@10.7756656,106.6922168?authuser=0&hl=en&entry=ttu +Reviews: 33 reviews + +Name: Dich vu giu xe Thanh Dat +Link: https://www.google.com/maps/search/D%E1%BB%8Bch+v%E1%BB%A5+gi%E1%BB%AF+xe+Th%C3%A0nh+%C4%90%E1%BA%A1t/@10.770982799999999,106.6857112?authuser=0&hl=en&entry=ttu +Reviews: 17 reviews + +Name: Bai Giu Xe May - O To - Ngo Thoi Nhiem +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+M%C3%A1y+-+%C3%94+T%C3%B4+-+Ng%C3%B4+Th%E1%BB%9Di+Nhi%E1%BB%87m/@10.77765,106.6869?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Bai giu xe o to 76 +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+%C3%B4+t%C3%B4+76/@10.7837695,106.6862185?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Giu xe ngay dem +Link: https://www.google.com/maps/search/Gi%E1%BB%AF+xe+ng%C3%A0y+%C4%91%C3%AAm/@10.7810271,106.68328009999999?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews",,0932 090 467,1,Bai Giu Xe May - O To (Owner),,https://lh3.ggpht.com/p/AB5caB9dCqk6UbGC6QUH61oF_R8P1nFgwUxiL12rSWo1HpyqL0wgVklnyHmtjkoClm39Km1z_KBYR9u-gZ9kYPAkJpSJ2hkVhdO-8ORHUzAMda8wuLsSqW7_Djdw6vPJ0Wt8xo3DxJvsgg=s1024,Parking lot,Parking lot,,,Open All Days,"40 Ba Huyen Thanh Quan, Phuong 6, Quan 3, Ho Chi Minh 700000",,https://www.google.com/maps/place/B%C3%A3i+Gi%E1%BB%AF+Xe+M%C3%A1y+-+%C3%94+T%C3%B4/data=!4m7!3m6!1s0x31752f2548490843:0x6274c31f8393819b!8m2!3d10.77769!4d106.6875!16s%2Fg%2F11ft89p6hh!19sChIJQwhJSCUvdTERm4GTgx_DdGI?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJkXfANAAvdTERAL1sKAOF6CU,Bai giu xe,,,0,0,"Name: BAI XE PARKING PRO +Link: https://www.google.com/maps/search/B%C3%83I+XE+PARKING+PRO/@10.7690767,106.6941737?authuser=0&hl=en&entry=ttu +Reviews: 50 reviews + +Name: Bai Giu Xe P +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+P/@10.789042,106.690759?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Bai Giu Xe, Rua Xe Oto 635 Nguyen Trai +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe%2C+R%E1%BB%ADa+Xe+%C3%94t%C3%B4+635+Nguy%E1%BB%85n+Tr%C3%A3i/@10.7536375,106.66504809999999?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Bai xe Cho Lon +Link: https://www.google.com/maps/search/B%C3%A3i+xe+Ch%E1%BB%A3+L%E1%BB%9Bn/@10.7527185,106.65376599999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai giu xe 235 Nguyen Van Cu +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+235+Nguy%E1%BB%85n+V%C4%83n+C%E1%BB%AB/@10.7631988,106.6829434?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai giu xe (Owner),,,Public parking space,Public parking space,,,Open All Days,"203 D. Nguyen Trai, Phuong Nguyen Cu Trinh, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+gi%E1%BB%AF+xe/data=!4m7!3m6!1s0x31752f0034c07791:0x25e88503286cbd00!8m2!3d10.7648336!4d106.6854205!16s%2Fg%2F11lyjmxbvg!19sChIJkXfANAAvdTERAL1sKAOF6CU?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJBQ8X-H0vdTERIwd7aun-Hgo,Limuzin,,,0,0,"Name: Giu xe Metro Ben Thanh +Link: https://www.google.com/maps/search/Gi%E1%BB%AF+xe+Metro+B%E1%BA%BFn+Th%C3%A0nh/@10.7710475,106.6968809?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Parking Xe May +Link: https://www.google.com/maps/search/Parking+Xe+May/@10.8345076,106.6580572?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Dau Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BA%ADu+Xe/@10.8029897,106.65281519999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Parking +Link: https://www.google.com/maps/search/Parking/@10.784569,106.6939766?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: phannguyen +Link: https://www.google.com/maps/search/phannguyen/@10.7753882,106.70282499999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Limuzin (Owner),,,Parking lot,Parking lot,,,Open All Days,"175 Nguyen Thai Binh, Phuong Nguyen Thai Binh, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/%D0%9B%D0%B8%D0%BC%D1%83%D0%B7%D0%B8%D0%BD/data=!4m7!3m6!1s0x31752f7df8170f05:0xa1efee96a7b0723!8m2!3d10.7678165!4d106.6983687!16s%2Fg%2F11n0hmc_xq!19sChIJBQ8X-H0vdTERIwd7aun-Hgo?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJW4rgaAAvdTERTMD7WzRU-4A,Giu xe Metro Ben Thanh,,,3,5,"Name: Bai Giu Xe 32 Le Anh Xuan +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+32+L%C3%AA+Anh+Xu%C3%A2n/@10.7721232,106.6952631?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai giu xe TNXP +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+TNXP/@10.771806999999999,106.699084?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Ham de xe may - xe o to Ga Tau Dien Metro Ben Thanh - Suoi Tien +Link: https://www.google.com/maps/search/H%E1%BA%A7m+%C4%91%E1%BB%83+xe+m%C3%A1y+-+xe+%C3%B4+t%C3%B4+Ga+T%C3%A0u+%C4%90i%E1%BB%87n+Metro+B%E1%BA%BFn+Th%C3%A0nh+-+Su%E1%BB%91i+Ti%C3%AAn/@10.769830599999999,106.6937411?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Dich Vu Giu Xe Trong Nha +Link: https://www.google.com/maps/search/D%E1%BB%8Bch+V%E1%BB%A5+Gi%E1%BB%AF+Xe+Trong+Nh%C3%A0/@10.7725504,106.6967189?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Parking +Link: https://www.google.com/maps/search/Parking/@10.773188,106.70186400000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Giu xe Metro Ben Thanh (Owner),,https://lh3.ggpht.com/p/AB5caB8wVzNK7bFKNvLVElu9Tl2adUh61-ifiP_Nm6jKh6JAU_uQNyPUY-1mLs7pjajwdjy2eA4pT6GWW2TthS1H9-RunhRXsSE2N1vQlfG1TGp1NVmRfEC7X9PCZtml4R1cJXDSx3RzJD19Jtaw=s1024,Parking lot,Parking lot,,,Open All Days,"52 D. Le Lai, Phuong Ben Thanh, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/Gi%E1%BB%AF+xe+Metro+B%E1%BA%BFn+Th%C3%A0nh/data=!4m7!3m6!1s0x31752f0068e08a5b:0x80fb54345bfbc04c!8m2!3d10.7710475!4d106.6968809!16s%2Fg%2F11x1n41bk1!19sChIJW4rgaAAvdTERTMD7WzRU-4A?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJUSdzaEEvdTER9MsIga4zW0Q,Huynh Huu Ngoc Vehicle Keeping Store,,,0,0,"Name: Bai Giu Xe 29 Nam Ki +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+29+Nam+K%C3%AC/@10.76939,106.70171859999999?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai xe Nguyen Van Chiem +Link: https://www.google.com/maps/search/B%C3%A3i+xe+Nguy%E1%BB%85n+V%C4%83n+Chi%C3%AAm/@10.781750599999999,106.6981492?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai giu xe Parking 24/24 xe may Hai Ba Trung +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+Parking+24%2F24+xe+m%C3%A1y+Hai+B%C3%A0+Tr%C6%B0ng/@10.7901027,106.6893982?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Parking +Link: https://www.google.com/maps/search/Parking/@10.773188,106.70186400000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Dich Vu Giu Xe Trong Nha +Link: https://www.google.com/maps/search/D%E1%BB%8Bch+V%E1%BB%A5+Gi%E1%BB%AF+Xe+Trong+Nh%C3%A0/@10.7725504,106.6967189?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0912 475 978,1,Huynh Huu Ngoc Vehicle Keeping Store (Owner),,,Parking,Parking,,,Open All Days,"11 D. Ham Nghi, Street, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/Huynh+Huu+Ngoc+Vehicle+Keeping+Store/data=!4m7!3m6!1s0x31752f4168732751:0x445b33ae8108cbf4!8m2!3d10.7710957!4d106.7050018!16s%2Fg%2F11b6dtd20_!19sChIJUSdzaEEvdTER9MsIga4zW0Q?authuser=0&hl=en&rclk=1,bai do xe quan 1 +ChIJYavMfAAvdTERAzA-PsE-3Oo,Hi tieu sieu to,,,2,1,"Name: motorbike park +Link: https://www.google.com/maps/search/motorbike+park/@10.7774744,106.7056624?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai xe Rua xe Trung Khanh +Link: https://www.google.com/maps/search/B%C3%A3i+xe+R%E1%BB%ADa+xe+Tr%C3%B9ng+Kh%C3%A1nh/@10.7862001,106.69589719999999?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: 24/24 Car Parking +Link: https://www.google.com/maps/search/24%2F24+Car+Parking/@10.7776628,106.69725009999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Parking +Link: https://www.google.com/maps/search/Parking/@10.773188,106.70186400000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe Nguyen Thien Thuat +Link: https://www.google.com/maps/search/B%C3%A3i+xe+Nguy%E1%BB%85n+Thi%E1%BB%87n+Thu%E1%BA%ADt/@10.7700669,106.67720179999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Hi tieu sieu to (Owner),,,Parking lot,Parking lot,,,Open All Days,"11d Thi Sach, Ben Nghe, Quan 1, Ho Chi Minh",,https://www.google.com/maps/place/H%E1%BB%89+ti%E1%BA%BFu+si%C3%AAu+to/data=!4m7!3m6!1s0x31752f007cccab61:0xeadc3ec13e3e3003!8m2!3d10.777885!4d106.70497!16s%2Fg%2F11vz4yy35h!19sChIJYavMfAAvdTERAzA-PsE-3Oo?authuser=0&hl=en&rclk=1,bai do xe quan 1 diff --git a/backend/prisma/packingCrawler/csv/all-task-5-overview.csv b/backend/prisma/packingCrawler/csv/all-task-5-overview.csv new file mode 100644 index 0000000..9557445 --- /dev/null +++ b/backend/prisma/packingCrawler/csv/all-task-5-overview.csv @@ -0,0 +1,58 @@ +place_id,name,description,is_spending_on_ads,reviews,rating,competitors,website,phone,can_claim,owner_name,owner_profile_link,featured_image,main_category,categories,workday_timing,is_temporarily_closed,closed_on,address,review_keywords,link,query +ChIJIwCfs3GsNTERFqKd_XtomRs,Diem Gui Xe May,,,9,4.7,"Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,0903 043 636,1,Diem Gui Xe May (Owner),,https://lh3.ggpht.com/p/AB5caB-Af95Pce1cFsZXl_bZJyK9eblLao5B8rRW3Qb5dE1vqxYF2ihFqE0t7nk_khEjWuTJu-x-UXPTLHnJC2JYC4mfbOMaUxst-28_VpLiQqd87Hsm7WWdXhUv3zmhjNagt5DrJbfb-w=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"51/2, Ngo 128C Pho Dai La, Quan Hai Ba Trung, Thanh Pho Ha Noi, Dong Tam, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+G%E1%BB%ADi+Xe+M%C3%A1y/data=!4m7!3m6!1s0x3135ac71b39f0023:0x1b99687bfd9da216!8m2!3d20.9984002!4d105.8444061!16s%2Fg%2F11g6rkgsbg!19sChIJIwCfs3GsNTERFqKd_XtomRs?authuser=0&hl=en&rclk=1,bai do xe quan 2 +ChIJ30uWsxkmdTERfyKZmiUj4V0,Bai Giu Xe,,,0,0,"Name: Bai Giu Xe 24/24 NHAN DUC +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+24%2F24+NH%C3%82N+%C4%90%E1%BB%A8C/@10.8027331,106.7525635?authuser=0&hl=en&entry=ttu +Reviews: 11 reviews + +Name: Bai xe +Link: https://www.google.com/maps/search/B%C3%A3i+xe/@10.8003738,106.7306989?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@10.8038765,106.7439412?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe oto 4 banh +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4t%C3%B4+4+b%C3%A1nh/@10.7906345,106.7304389?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe oto xe may +Link: https://www.google.com/maps/search/B%C3%A3i+xe+%C3%B4t%C3%B4+xe+m%C3%A1y/@10.8033743,106.73299879999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0919 191 911,1,Bai Giu Xe (Owner),,,Parking lot,Parking lot,5:30 AM-11 PM,,Open All Days,"2, Tong Huu Dinh, Phuong Thao Dien, Quan 2, Thanh Pho Ho Chi Minh, Thao Dien, Thu Duc, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+Gi%E1%BB%AF+Xe/data=!4m7!3m6!1s0x31752619b3964bdf:0x5de123259a99227f!8m2!3d10.8061749!4d106.7333204!16s%2Fg%2F11c5stql7r!19sChIJ30uWsxkmdTERfyKZmiUj4V0?authuser=0&hl=en&rclk=1,bai do xe quan 2 +ChIJwUD57jwndTERzsgRXe3FC3A,Bai gui xe oto 4 banh,"Xin chao , o day co mai che thon mat . Ai co nhu cau gui xe xin lien he tai dia chi tren.",,0,0,"Name: Bai Giu Xe 24/24 NHAN DUC +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+24%2F24+NH%C3%82N+%C4%90%E1%BB%A8C/@10.8027331,106.7525635?authuser=0&hl=en&entry=ttu +Reviews: 11 reviews + +Name: Bai o to Khanh Hoi - Quan 4 +Link: https://www.google.com/maps/search/B%C3%A3i+%C3%B4+t%C3%B4+Kh%C3%A1nh+H%E1%BB%99i+-+Qu%E1%BA%ADn+4/@10.755133599999999,106.69118189999999?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Bai Giu Xe O To So 2 +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4+S%E1%BB%91+2/@10.770363399999999,106.6437936?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: BAI GIU XE TAN AN NGUYEN +Link: https://www.google.com/maps/search/B%C3%83I+GI%E1%BB%AE+XE+T%C3%82N+AN+NGUY%C3%8AN/@10.788878799999999,106.7297475?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Giu Xe +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe/@10.8061749,106.73332040000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Bai gui xe oto 4 banh (Owner),https://www.google.com/maps/contrib/114289761630274458697,https://lh3.ggpht.com/p/AF1QipMdDGrL0VTg7r-lfWGYEwKj4EGjsOuHc3ggfHfE=s1024,Parking lot,Parking lot,7:30 AM-10 PM,,Open All Days,"163 Tran Nao, Binh Khanh, Quan 2, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4t%C3%B4+4+b%C3%A1nh/data=!4m7!3m6!1s0x3175273ceef940c1:0x700bc5ed5d11c8ce!8m2!3d10.7906345!4d106.7304389!16s%2Fg%2F11fsq0xcwx!19sChIJwUD57jwndTERzsgRXe3FC3A?authuser=0&hl=en&rclk=1,bai do xe quan 2 diff --git a/backend/prisma/packingCrawler/csv/all-task-7-overview.csv b/backend/prisma/packingCrawler/csv/all-task-7-overview.csv new file mode 100644 index 0000000..4b89eaf --- /dev/null +++ b/backend/prisma/packingCrawler/csv/all-task-7-overview.csv @@ -0,0 +1,369 @@ +place_id,name,description,is_spending_on_ads,reviews,rating,competitors,website,phone,can_claim,owner_name,owner_profile_link,featured_image,main_category,categories,workday_timing,is_temporarily_closed,closed_on,address,review_keywords,link,query +ChIJ2d2KrRirNTER-Hj5W4gt7dE,Bai do xe cong vien Thu Le,,,50,3.8,"Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9867769,105.8198008?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Diem Do Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4/@21.0477423,105.8104151?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe cong vien Thu Le (Owner),,https://lh3.ggpht.com/p/AB5caB-rhnMb-p8jejTKC5YGuwJqnI5tLQRrRsxf35StDD-9xOsy2DmIJ1Zgt-msGJJz_nQWqkx9F74R-FdxX63imtHXUXsqPeuJT83Gkl40hllZEhTw3tvACHdH4uDtleFd9oN9iO6bvA=s1024,Parking lot,Parking lot,,,Open All Days,"2RJ5+QPF, Ngoc Khanh, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+c%C3%B4ng+vi%C3%AAn+Th%E1%BB%A7+L%E1%BB%87/data=!4m7!3m6!1s0x3135ab18ad8addd9:0xd1ed2d885bf978f8!8m2!3d21.0319313!4d105.8093104!16s%2Fg%2F11gr1fh6vc!19sChIJ2d2KrRirNTER-Hj5W4gt7dE?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJi7DTZ9kndTERYQqwzdO_4Nw,Bai giu xe o to Phong Phu,,,9,2.8,"Name: Bai Giu Xe Minh Phuc +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+Minh+Phu%CC%81c/@10.8185941,106.7768261?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Giu Xe So 5 +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+S%E1%BB%91+5/@10.8389165,106.7777339?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Giu Xe Ot WINPHAT +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+%C3%94t+WINPHAT/@10.8356292,106.77462299999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Cong Ty Tnhh Dich Vu Giu Xe 24/24 +Link: https://www.google.com/maps/search/C%C3%B4ng+Ty+Tnhh+D%E1%BB%8Bch+V%E1%BB%A5+Gi%E1%BB%AF+Xe+24%2F24/@10.839639,106.77959919999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe Huu Duyen +Link: https://www.google.com/maps/search/B%C3%A3i+xe+H%E1%BB%AFu+Duy%C3%AAn/@10.839926,106.7804362?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0936 303 759,,Bai giu xe o to Phong Phu (Owner),https://www.google.com/maps/contrib/113829690035271610483,,Parking lot,Parking lot,Open 24 hours,,Open All Days,"Tang Nhon Phu B, Thu Duc City, Ho Chi Minh City",,https://www.google.com/maps/place/B%C3%A3i+gi%E1%BB%AF+xe+%C3%B4+t%C3%B4+Phong+Ph%C3%BA/data=!4m7!3m6!1s0x317527d967d3b08b:0xdce0bfd3cdb00a61!8m2!3d10.8334033!4d106.784837!16s%2Fg%2F11fhy2b_6j!19sChIJi7DTZ9kndTERYQqwzdO_4Nw?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJ3frC2iAndTER0JGG-CO7Trw,Bai gui xe 989,"bai giu xe o to 989 la dia chi uy tin dang tin cay hien nhan duoc su tin tuong cua nhieu khach hang khi chon giu xe, gui xe o to tai phuong Truong Thanh, Thu Duc",,7,5,"Name: Bai Giu xe o to Thu Duc +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+xe+%C3%B4+t%C3%B4+Th%E1%BB%A7+%C4%90%E1%BB%A9c/@10.8336864,106.762632?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai xe +Link: https://www.google.com/maps/search/B%C3%A3i+xe/@10.8003738,106.7306989?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Bai Giu Xe OTo Kim Map +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+%C3%94T%C3%B4+Kim+M%E1%BA%ADp/@10.8512491,106.74670259999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Giu Xe o To - Hiep Binh Phuoc +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+%C3%B4+T%C3%B4+-+Hi%E1%BB%87p+B%C3%ACnh+Ph%C6%B0%E1%BB%9Bc/@10.8480198,106.7207609?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@10.8038765,106.7439412?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",https://baixe989.com/,0906 733 939,,Bai gui xe 989 (Owner),https://www.google.com/maps/contrib/111329002236345694192,https://lh3.ggpht.com/p/AF1QipObeTl9on_qS86SUWhNX2ZMxu7IMM74qjYQzuhF=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"5A Duong Lo Lu, KP. Phuoc Hiep, P, Thu Duc, Ho Chi Minh 700000",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+989/data=!4m7!3m6!1s0x31752720dac2fadd:0xbc4ebb23f88691d0!8m2!3d10.8246151!4d106.8136735!16s%2Fg%2F11vyvsp7n9!19sChIJ3frC2iAndTER0JGG-CO7Trw?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJcb6sjaasNTERaPWSDd4IA0U,117 Tran Duy Hung Parking,,,27,3.8,"Name: Bac Co Parking +Link: https://www.google.com/maps/search/Bac+Co+Parking/@21.0264429,105.85906609999999?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Dien dung xe +Link: https://www.google.com/maps/search/%C4%90i%C3%AA%CC%89n+d%C6%B0%CC%80ng+xe/@21.0413088,105.7729712?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/@20.9918493,105.7932795?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,117 Tran Duy Hung Parking (Owner),,https://lh3.ggpht.com/p/AB5caB-DMxTYByXjBvgQJXvimMgMb4O2-VDRyzb8EBxYZgpa1P2Lytr7DsEJ7n-w4GjCaJGOl0hpfC-au03cigQ5KZ4Hbo1MzxXru3maaRKvoUSkXdYbS7XZB4E_pYU_VZXfCZ5gM4SArA=s1024,Parking lot,Parking lot,,,Open All Days,"117 D. Tran Duy Hung, Trung Hoa, Cau Giay, Ha Noi",,https://www.google.com/maps/place/117+Tr%E1%BA%A7n+Duy+H%C6%B0ng+Parking/data=!4m7!3m6!1s0x3135aca68dacbe71:0x450308de0d92f568!8m2!3d21.0079468!4d105.7972974!16s%2Fg%2F11gd67tr_f!19sChIJcb6sjaasNTERaPWSDd4IA0U?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJcYUrXcKtNTERoySFi_oB2eQ,15A Phuong Mai,,,6,4.2,"Name: Cua hang xe +Link: https://www.google.com/maps/search/C%E1%BB%ADa+h%C3%A0ng+xe/@20.9833592,105.8568603?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai giu xe dinh Kim Lien +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+%C4%91%C3%ACnh+Kim+Li%C3%AAn/@21.010115,105.83831699999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe BV Bach Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+BV+B%E1%BA%A1ch+Mai/@21.0033904,105.840864?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Gara Tai Da Nang +Link: https://www.google.com/maps/search/Gara+T%C3%A0i+%C4%90%C3%A0+N%E1%BA%B5ng/@20.960684399999998,105.8412022?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,15A Phuong Mai (Owner),,https://lh3.ggpht.com/p/AB5caB-k-aW6MhffDFIxY5TRG1PQ0hceWG0Vb12naeXnzQ9ixmBFuO0LveF0GGf_uH98xJ2IJ12J70C2ZMhw_6iJOrr3mWuGYfv3B22rQWmtK2IBuKm5aN7tD09N4U6jzSRYYt9UJxz0sXOgR2Se=s1024,Parking garage,Parking garage,,,Open All Days,"15A Phuong Mai, Dong Da, Ha Noi 100000",,https://www.google.com/maps/place/15A+Ph%C6%B0%C6%A1ng+Mai/data=!4m7!3m6!1s0x3135adc25d2b8571:0xe4d901fa8b8524a3!8m2!3d21.0038019!4d105.8386591!16s%2Fg%2F11mvqn104r!19sChIJcYUrXcKtNTERoySFi_oB2eQ?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJHWoJslUmdTERc0T4hKjS9IE,Bai xe o to 232 Do Xuan Hop,,,0,0,"Name: Bai xe o to 72/56 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+%C3%B4+t%C3%B4+72%2F56/@10.837803899999999,106.72201260000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do -rua xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+-r%E1%BB%AFa+xe/@10.8437118,106.7640045?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe oto va xe may +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+oto+v%C3%A0+xe+m%C3%A1y/@10.8424607,106.746427?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Goi Xe o to 24H +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%9Fi+Xe+%C3%B4+t%C3%B4+24H/@10.8337703,106.77053660000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@10.8038765,106.7439412?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0934 141 050,1,Bai xe o to 232 Do Xuan Hop (Owner),,,Parking lot,Parking lot,,,Open All Days,"232 Do Xuan Hop, Phuoc Long A, Thu Duc, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+xe+%C3%B4+t%C3%B4+232+%C4%90%E1%BB%97+Xu%C3%A2n+H%E1%BB%A3p/data=!4m7!3m6!1s0x31752655b2096a1d:0x81f4d2a884f84473!8m2!3d10.826632!4d106.7684338!16s%2Fg%2F11dxdcy26y!19sChIJHWoJslUmdTERc0T4hKjS9IE?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJxS0oHVGrNTERiZO3z0nvgxw,Tram rua xe so 9,,,1,4,"Name: Dich Vu Rua Xe O To - Xe May +Link: https://www.google.com/maps/search/D%E1%BB%8Bch+V%E1%BB%A5+R%E1%BB%ADa+Xe+%C3%94+T%C3%B4+-+Xe+M%C3%A1y/@21.016498199999997,105.85398719999999?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Manh Cuong Chuyen Rua Xe O To +Link: https://www.google.com/maps/search/M%E1%BA%A1nh+C%C6%B0%E1%BB%9Dng+Chuy%C3%AAn+R%E1%BB%ADa+Xe+%C3%94+T%C3%B4/@20.990290400000003,105.81172880000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Dich Vu Rua Xe +Link: https://www.google.com/maps/search/D%E1%BB%8Bch+V%E1%BB%A5+R%E1%BB%ADa+Xe/@21.017882099999998,105.8332604?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Tiem Rua Xe Thuc +Link: https://www.google.com/maps/search/Ti%E1%BB%87m+R%E1%BB%ADa+Xe+Th%E1%BB%B1c/@21.0144567,105.86282790000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Dich Vu Rua Xe 19 +Link: https://www.google.com/maps/search/D%E1%BB%8Bch+V%E1%BB%A5+R%E1%BB%ADa+Xe+19/@20.9990055,105.8179736?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0918 001 289,1,Tram rua xe so 9 (Owner),,https://lh3.ggpht.com/p/AB5caB8RZD-325TMOnrw2QmyDUk81LpV95t3_irY7dKV4Frmd1N5UXCei1ZRh6qgCiJTnRAQ646SO9p6g9Ovc4UcJ7Rnef0TXY-Mp6vo2b9uBIAggMh0XYLWltyLF88uPQXtwZ1U_D4=s1024,Car wash,Car wash,Open 24 hours,,Open All Days,"2V76+J2M, P. Tran Thanh Tong, Pham Dinh Ho, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/Tr%E1%BA%A1m+r%E1%BB%ADa+xe+s%E1%BB%91+9/data=!4m7!3m6!1s0x3135ab511d282dc5:0x1c83ef49cfb79389!8m2!3d21.0140838!4d105.8600617!16s%2Fg%2F11sp51sbgy!19sChIJxS0oHVGrNTERiZO3z0nvgxw?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJ23IAIwKrNTEROob_zmPsohw,Nha xe Ngoc Chinh,,,0,0,"Name: Ngoc Cuong Bus Station +Link: https://www.google.com/maps/search/Ngoc+Cuong+Bus+Station/@21.0290335,105.77622170000001?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Diem don khach nha xe Anh Dung +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%91%C3%B3n+kh%C3%A1ch+nh%C3%A0+xe+Anh+D%C5%A9ng/@21.029701499999998,105.79267?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Nha xe HN Ngoc Lac +Link: https://www.google.com/maps/search/Nh%C3%A0+xe+HN+Ng%E1%BB%8Dc+L%E1%BA%B7c/@20.971558599999998,105.84700579999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Nn +Link: https://www.google.com/maps/search/Nn/@21.033067,105.78416899999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Nha xe Ngoc Chinh (Owner),,,Parking lot,Parking lot,,,Open All Days,"9 Ng. 11 P. Duy Tan, Dich Vong Hau, Cau Giay, Ha Noi",,https://www.google.com/maps/place/Nh%C3%A0+xe+Ng%E1%BB%8Dc+Ch%E1%BB%89nh/data=!4m7!3m6!1s0x3135ab02230072db:0x1ca2ec63ceff863a!8m2!3d21.0292791!4d105.7840138!16s%2Fg%2F11n0v2v0th!19sChIJ23IAIwKrNTEROob_zmPsohw?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJNXzQmHCsNTERvq_h6GVZfLM,Benh Vien Bach Mai - 78 Giai Phong,,,124,4.2,"Name: Bach Mai Hospital +Link: https://www.google.com/maps/search/Bach+Mai+Hospital/@21.0019284,105.84038419999999?authuser=0&hl=en&entry=ttu +Reviews: 705 reviews + +Name: 368-370 Bach Mai +Link: https://www.google.com/maps/search/368-370+B%E1%BA%A1ch+Mai/@21.000446699999998,105.850348?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: 215 Bach Mai +Link: https://www.google.com/maps/search/215+B%E1%BA%A1ch+Mai/@21.004305199999997,105.8511248?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: 216-218 Bach Mai +Link: https://www.google.com/maps/search/216-218+B%E1%BA%A1ch+Mai/@21.003979800000003,105.8509624?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: 327 Bach Mai +Link: https://www.google.com/maps/search/327+B%E1%BA%A1ch+Mai/@21.00102,105.850695?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews",,,,Benh Vien Bach Mai - 78 Giai Phong (Owner),,https://lh3.ggpht.com/p/AB5caB8-B69UJgmYmT2yGI3zKkn9VGGizIL27pZmr-rc6GkQDbwKCPm8bpPO1kuuWbRBUf_i_1oCxZAw5z_4OP1dbSbDgr06VFE_qoAVo25K8pMSOw4wsPRlJrB0jSIrKMr6IkwphZxV6g=s1024,Bus stop,Bus stop,,,Open All Days,"Dong Da, Hanoi",,https://www.google.com/maps/place/B%E1%BB%87nh+Vi%E1%BB%87n+B%E1%BA%A1ch+Mai+-+78+Gi%E1%BA%A3i+Ph%C3%B3ng/data=!4m7!3m6!1s0x3135ac7098d07c35:0xb37c5965e8e1afbe!8m2!3d21.0010301!4d105.8411324!16s%2Fg%2F11n86srb4l!19sChIJNXzQmHCsNTERvq_h6GVZfLM?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJcSXkV94hdTERW4cSP0KMd60,Bai do xe S9,,,2,5,"Name: Bai do -rua xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+-r%E1%BB%AFa+xe/@10.8437118,106.7640045?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Dau Xe 96 +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BA%ADu+Xe+96/@10.82227,106.7195?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai xe o to 232 Do Xuan Hop +Link: https://www.google.com/maps/search/B%C3%A3i+xe+%C3%B4+t%C3%B4+232+%C4%90%E1%BB%97+Xu%C3%A2n+H%E1%BB%A3p/@10.826632,106.7684338?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@10.8038765,106.7439412?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai Goi Xe o to 24H +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%9Fi+Xe+%C3%B4+t%C3%B4+24H/@10.8337703,106.77053660000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe S9 (Owner),,https://lh3.ggpht.com/p/AB5caB_xqluuaqF8oxWs8Pk86veThtT7cMYWLAji5OSlfGNkdVEj63MaxcIjHQ33uWp-GEK-uj_D0U_oGjvT173HaIrFzuBRTUnJ4bo6_QQeTdhR3JTV04lNFR4fskGWP0RMvulp4QcfEg=s1024,Parking lot,Parking lot,,,Open All Days,"RRWP+JP7, Long Thanh My, Thu Duc, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+S9/data=!4m7!3m6!1s0x317521de57e42571:0xad778c423f12875b!8m2!3d10.8458975!4d106.8370903!16s%2Fg%2F11tt274pyr!19sChIJcSXkV94hdTERW4cSP0KMd60?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJYXhLT0CtNTERodtRW1xxnSk,Nuoc Ngam Bus Station,,,2444,4.2,"Name: Nuoc Ngam Bus Station +Link: https://www.google.com/maps/search/Nuoc+Ngam+Bus+Station/@20.9654615,105.84324509999999?authuser=0&hl=en&entry=ttu +Reviews: 2707 reviews + +Name: Ben Xe Nuoc Ngam +Link: https://www.google.com/maps/search/B%E1%BA%BFn+Xe+N%C6%B0%E1%BB%9Bc+Ng%E1%BA%A7m/@20.9648046,105.8421563?authuser=0&hl=en&entry=ttu +Reviews: 383 reviews + +Name: Nuoc Ngam Bus Station +Link: https://www.google.com/maps/search/Nuoc+Ngam+Bus+Station/@20.964973399999998,105.8430513?authuser=0&hl=en&entry=ttu +Reviews: 92 reviews + +Name: ben xe nuoc ngam +Link: https://www.google.com/maps/search/b%E1%BA%BFn+xe+n%C6%B0%E1%BB%9Bc+ng%E1%BA%A7m/@20.9649906,105.8431569?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Tra khach nuoc ngam +Link: https://www.google.com/maps/search/Tr%E1%BA%A3+kh%C3%A1ch+n%C6%B0%E1%BB%9Bc+ng%E1%BA%A7m/@20.9627223,105.8469093?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",http://benxenuocngam.vn/,,1,Nuoc Ngam Bus Station (Owner),,https://lh3.ggpht.com/p/AB5caB8sDh4fEW9j624Th8DftslC7yiKcwSF70srUNHSAuB1Ia_g1ohOA40LskvsI80mjsl1VqlheoUuTjr74t4iSOM7WyJNfqbyO-TrxeY9klpndI00tPsnGocwL5zwkXblwPcS9ah9=s1024,Parking lot,Parking lot,,,Open All Days,"1 D. Ngoc Hoi, Hoang Liet, Hoang Mai, Ha Noi","ticket, prices, travel, taxi drivers, town, passengers, traffic, number, washroom, massage",https://www.google.com/maps/place/Nuoc+Ngam+Bus+Station/data=!4m7!3m6!1s0x3135ad404f4b7861:0x299d715c5b51dba1!8m2!3d20.9654452!4d105.8423284!16s%2Fg%2F11gqqnwhsh!19sChIJYXhLT0CtNTERodtRW1xxnSk?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJ0wHuOX6rNTERylMRuJt-RrQ,332 P. Tay Son - Quang Trung,,,24,4.3,"Name: 290 Tay Son +Link: https://www.google.com/maps/search/290+T%C3%A2y+S%C6%A1n/@21.007122000000003,105.823125?authuser=0&hl=en&entry=ttu +Reviews: 19 reviews + +Name: 254-256 Le Duan +Link: https://www.google.com/maps/search/254-256+L%C3%AA+Du%E1%BA%A9n/@21.0156946,105.8413029?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews + +Name: 140 Son Tay +Link: https://www.google.com/maps/search/140+S%C6%A1n+T%C3%A2y/@21.0326679,105.8293242?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: 50 +Link: https://www.google.com/maps/search/50/@21.0126846,105.77041?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: 133 Thai Thinh +Link: https://www.google.com/maps/search/133+Th%C3%A1i+Th%E1%BB%8Bnh/@21.0139566,105.81475239999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,,332 P. Tay Son - Quang Trung (Owner),,https://lh3.ggpht.com/p/AB5caB-3iWtKOo1gSkOlDK4fZZ2hQF3eMMg3PFC2BMtvZJTr2kRZ9HsQ7ybUYfXKJNOoqRqsKENHz_JjGUFgY-ZGCOzOh14AhbVN-X6E43wznMN_FyQVQAzl9PFdXKWllQUy3TWHCX0=s1024,Bus stop,Bus stop,,,Open All Days,"doi dien 145 P. Tay Son, Quang Trung, Dong Da, Ha Noi",,https://www.google.com/maps/place/332+P.+T%C3%A2y+S%C6%A1n+-+Quang+Trung/data=!4m7!3m6!1s0x3135ab7e39ee01d3:0xb4467e9bb81153ca!8m2!3d21.0111629!4d105.8252533!16s%2Fg%2F1tyct3dc!19sChIJ0wHuOX6rNTERylMRuJt-RrQ?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJrwU5-56rNTERCecYnwnKphs,Ga Ha Noi,,,3390,4.3,"Name: Hanoi Railway Station +Link: https://www.google.com/maps/search/Hanoi+Railway+Station/@21.0242529,105.84102899999999?authuser=0&hl=en&entry=ttu +Reviews: 1330 reviews + +Name: Thai Ha Station +Link: https://www.google.com/maps/search/Thai+Ha+Station/@21.0144833,105.8194491?authuser=0&hl=en&entry=ttu +Reviews: 264 reviews + +Name: Ga Ha Noi +Link: https://www.google.com/maps/search/Ga+H%C3%A0+N%E1%BB%99i/@21.0250615,105.8411814?authuser=0&hl=en&entry=ttu +Reviews: 177 reviews + +Name: Ga Ha Noi - 120 Le Duan +Link: https://www.google.com/maps/search/Ga+H%C3%A0+N%E1%BB%99i+-+120+L%C3%AA+Du%E1%BA%A9n/@21.023294999999997,105.84137799999999?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Arret Bus pour Sapa +Link: https://www.google.com/maps/search/Arr%C3%AAt+Bus+pour+Sapa/@21.0243033,105.841093?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,,Ga Ha Noi (Owner),https://www.google.com/maps/contrib/105655510386027356630,https://lh3.ggpht.com/p/AB5caB8ssXBm_1WPnxz5YmK3FuDM2tuosS1pmv5w3eMTka7St8PTz9wpJt6bcMTfRPiV9izmYwh1dZKyVC1lCZVhAAEUdNb_BKfFdAHpBPyrh5eNZf1wXsiqeTUIzKLxWNNJR4eQnVs=s1024,Train yard,Train yard,6:36 AM-8:02 PM,,Open All Days,"120 D. Le Duan, Van Mieu, Hoan Kiem, Ha Noi","experience, luggage, tickets, toilet, snacks, morning, sleeper, locker, capital, tourist",https://www.google.com/maps/place/Ga+H%C3%A0+N%E1%BB%99i/data=!4m7!3m6!1s0x3135ab9efb3905af:0x1ba6ca099f18e709!8m2!3d21.0243303!4d105.8410933!16s%2Fg%2F11h23l0q7j!19sChIJrwU5-56rNTERCecYnwnKphs?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJhwIS7QYndTER86qSWz8wiIs,Bai do xe,,,0,0,"Name: Bai Giu Xe 24/24 NHAN DUC +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+24%2F24+NH%C3%82N+%C4%90%E1%BB%A8C/@10.8027331,106.7525635?authuser=0&hl=en&entry=ttu +Reviews: 11 reviews + +Name: Bai xe +Link: https://www.google.com/maps/search/B%C3%A3i+xe/@10.8003738,106.7306989?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Bai do -rua xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+-r%E1%BB%AFa+xe/@10.8437118,106.7640045?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Giu Xe +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe/@10.8061749,106.73332040000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe oto xe may +Link: https://www.google.com/maps/search/B%C3%A3i+xe+%C3%B4t%C3%B4+xe+m%C3%A1y/@10.8033743,106.73299879999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0908 284 839,1,Bai do xe (Owner),,https://lh3.ggpht.com/p/AB5caB_NqldsCCbzA7r4n7LZa0QtmzjcYOzW_WTgLKhxGx8ARZ8qgXlprX7rm2Zwcq0W5rkVZv8kaL_xyhoSOMZ3eRpxzl3zXVsjwuM9kD6GYQmF2bOb9IwC5nfgphvdb-v_q3_CTnuc=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"17 D. So 10, Thao Dien, Thu Duc, Ho Chi Minh",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe/data=!4m7!3m6!1s0x31752706ed120287:0x8b88303f5b92aaf3!8m2!3d10.8038765!4d106.7439412!16s%2Fg%2F11fvxz3h52!19sChIJhwIS7QYndTER86qSWz8wiIs?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJvfV5iewndTERJURTQuXGcKg,Giu xe Hoang Nhat,,,22,5,"Name: Bai giu xe o to Phong Phu +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+%C3%B4+t%C3%B4+Phong+Ph%C3%BA/@10.833403299999999,106.784837?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai Giu Xe Ot WINPHAT +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+%C3%94t+WINPHAT/@10.8356292,106.77462299999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai giu xe oto Thanh Dat +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+%C3%B4t%C3%B4+Th%C3%A0nh+%C4%90%E1%BA%A1t/@10.8420755,106.7437722?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Cong Ty Tnhh Dich Vu Giu Xe 24/24 +Link: https://www.google.com/maps/search/C%C3%B4ng+Ty+Tnhh+D%E1%BB%8Bch+V%E1%BB%A5+Gi%E1%BB%AF+Xe+24%2F24/@10.839639,106.77959919999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai giu xe +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe/@10.8342263,106.7811237?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0986 251 779,,Giu xe Hoang Nhat (Owner),https://www.google.com/maps/contrib/118009397686028168027,https://lh3.ggpht.com/p/AB5caB_rejryvgZ5X0ijhADj-9KyaV8WJsWNoqXnrED70fKgcPw2wbgmd58kvnWEJXKX9oZ4qmLQ1hP6sczju6wYQss-NHtTcjToA6NK3wJIayI9vFKau4K80Si3ysvAMAfi0pddhEvf=s1024,Automobile storage facility,Automobile storage facility,Open 24 hours,,Open All Days,"RQPG+MM8, Duong 10, Tang Nhon Phu B, Thu Duc, Ho Chi Minh",,https://www.google.com/maps/place/Gi%E1%BB%AF+xe+Ho%C3%A0ng+Nh%E1%BA%ADt/data=!4m7!3m6!1s0x317527ec8979f5bd:0xa870c6e542534425!8m2!3d10.8359249!4d106.7779336!16s%2Fg%2F11fmrj_kjr!19sChIJvfV5iewndTERJURTQuXGcKg?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJPw42_ZKrNTEROD7sk_GKCBQ,58B Ba Trieu,,,6,4.2,"Name: 22B Hai Ba Trung +Link: https://www.google.com/maps/search/22B+Hai+B%C3%A0+Tr%C6%B0ng/@21.024086999999998,105.8536307?authuser=0&hl=en&entry=ttu +Reviews: 20 reviews + +Name: 92-94 Ba Trieu +Link: https://www.google.com/maps/search/92-94+B%C3%A0+Tri%E1%BB%87u/@21.0192062,105.8493922?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: 25A-25B Pho Hue - Hang Bai - Hoan Kiem +Link: https://www.google.com/maps/search/25A-25B+Ph%E1%BB%91+Hu%E1%BA%BF+-+H%C3%A0ng+B%C3%A0i+-+Ho%C3%A0n+Ki%E1%BA%BFm/@21.0187945,105.8517851?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: 08, 31, 35, 38 +Link: https://www.google.com/maps/search/08%2C+31%2C+35%2C+38/@21.015871900000004,105.8491006?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: 180 - 182 Ba Trieu +Link: https://www.google.com/maps/search/180+-+182+B%C3%A0+Tri%E1%BB%87u/@21.0159523,105.84914789999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,58B Ba Trieu (Owner),,https://lh3.ggpht.com/p/AB5caB-lqsog5ElXwYmPY0HvQuWBsKXMQXutm3EnocaNocjlV8InSTh8Ls2ZXwD-TIsQ2CI40hpyktl-CQUpdtl6POjEmi_BQQL5_njHqk1c4iJnLW3iy3f6mxz_QQlNm2OJhRPPFVFQ=s1024,Bus stop,Bus stop,,,Open All Days,"58B P. Ba Trieu, Tran Hung Dao, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/58B+B%C3%A0+Tri%E1%BB%87u/data=!4m7!3m6!1s0x3135ab92fd360e3f:0x14088af193ec3e38!8m2!3d21.0220545!4d105.8503593!16s%2Fg%2F1tdgrwm1!19sChIJPw42_ZKrNTEROD7sk_GKCBQ?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJmadfJOurNTER9AEGhTvL4O4,Buu Dien Thanh Pho Ha Noi - 75B Dinh Tien Hoang,,,73,4.3,"Name: Hanoi Post Office +Link: https://www.google.com/maps/search/Hanoi+Post+Office/@21.0266056,105.85380029999999?authuser=0&hl=en&entry=ttu +Reviews: 251 reviews + +Name: Central Post office +Link: https://www.google.com/maps/search/Central+Post+office/@21.0270743,105.8537868?authuser=0&hl=en&entry=ttu +Reviews: 96 reviews + +Name: 162 Tran Quang Khai +Link: https://www.google.com/maps/search/162+Tr%E1%BA%A7n+Quang+Kh%E1%BA%A3i/@21.032008299999998,105.85610299999999?authuser=0&hl=en&entry=ttu +Reviews: 24 reviews + +Name: Bai Do Xe Buyt Tran Khanh Du - Phan Chu Trinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+Bu%C3%BDt+Tr%E1%BA%A7n+Kh%C3%A1nh+D%C6%B0+-+Phan+Chu+Trinh/@21.0234788,105.86072340000001?authuser=0&hl=en&entry=ttu +Reviews: 22 reviews + +Name: Hanoi Post - Customer Sevice Centre +Link: https://www.google.com/maps/search/Hanoi+Post+-+Customer+Sevice+Centre/@21.0265421,105.8536137?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews",,,,Buu Dien Thanh Pho Ha Noi - 75B Dinh Tien Hoang (Owner),,https://lh3.ggpht.com/p/AB5caB9nA4H2TKwUCysnnRo_8982ZumjZ2--osCx8aKVKjFMqCAOTF_OtHXRTDl7mk-v0PJOkY-Vt0XFMalq3sp2DLNl50qauDsPrtyFfAbAo06D_cyNMIoBPpsCSdoSqTHVCJ-9G8AAlQ=s1024,Bus stop,Bus stop,,,Open All Days,"75 P. Dinh Tien Hoang, French Quarter, Hoan Kiem, Ha Noi","airport, opera house, platform, lake",https://www.google.com/maps/place/B%C6%B0u+%C4%90i%E1%BB%87n+Th%C3%A0nh+Ph%E1%BB%91+H%C3%A0+N%E1%BB%99i+-+75B+%C4%90inh+Ti%C3%AAn+Ho%C3%A0ng/data=!4m7!3m6!1s0x3135abeb245fa799:0xeee0cb3b850601f4!8m2!3d21.0269327!4d105.8536015!16s%2Fg%2F1tfx2cnt!19sChIJmadfJOurNTER9AEGhTvL4O4?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJsYgoI0KrNTERSHYF7-zBU-8,Diem Trung Chuyen Cau Giay - GTVT 01,,,5,3.6,"Name: So 148-150 Cau Giay +Link: https://www.google.com/maps/search/S%E1%BB%91+148-150+C%E1%BA%A7u+Gi%E1%BA%A5y/@21.032951699999998,105.7985623?authuser=0&hl=en&entry=ttu +Reviews: 48 reviews + +Name: Diem Trung Chuyen Cau Giay - Thu Le 01 +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Trung+Chuy%E1%BB%83n+C%E1%BA%A7u+Gi%E1%BA%A5y+-+Th%E1%BB%A7+L%E1%BB%87+01/@21.0291604,105.80397099999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Diem Trung Chuyen Cau Giay - GTVT 02 +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Trung+Chuy%E1%BB%83n+C%E1%BA%A7u+Gi%E1%BA%A5y+-+GTVT+02/@21.0287042,105.8034199?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Diem Trung Chuyen Cau Giay - Thu Le 02 +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Trung+Chuy%E1%BB%83n+C%E1%BA%A7u+Gi%E1%BA%A5y+-+Th%E1%BB%A7+L%E1%BB%87+02/@21.0293608,105.803603?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Dai Giua Diem Trung Chuyen Cau Giay - Nha Ga S8-04 +Link: https://www.google.com/maps/search/D%E1%BA%A3i+Gi%E1%BB%AFa+%C4%90i%E1%BB%83m+Trung+Chuy%E1%BB%83n+C%E1%BA%A7u+Gi%E1%BA%A5y+-+Nh%C3%A0+Ga+S8-04/@21.0294179,105.8026538?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,,Diem Trung Chuyen Cau Giay - GTVT 01 (Owner),,https://lh3.ggpht.com/p/AB5caB9H-Kp33vIQLU0xubjCTvj2QDyDV3DpSS9TSSJn6ROPd8Ez1HOYHSCkuPK8ddH5_ucEWc47DeDMv7G2QWDaj0hX8w3-95QUrpOlZ6IpIpK3s1KeudepO519ueieVfJnbSCKuKdk=s1024,Bus stop,Bus stop,,,Open All Days,"Lang Thuong, Dong Da, Hanoi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+Trung+Chuy%E1%BB%83n+C%E1%BA%A7u+Gi%E1%BA%A5y+-+GTVT+01/data=!4m7!3m6!1s0x3135ab42232888b1:0xef53c1ecef057648!8m2!3d21.028522!4d105.8038578!16s%2Fg%2F11n86s27_v!19sChIJsYgoI0KrNTERSHYF7-zBU-8?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJmcAx9LJUNDERKBFGzbpDQOQ,Ben Xe My Dinh,,,1280,3.7,"Name: Ben Xe Khach My Dinh +Link: https://www.google.com/maps/search/B%E1%BA%BFn+Xe+Kh%C3%A1ch+M%E1%BB%B9+%C4%90%C3%ACnh/@21.0283653,105.7782948?authuser=0&hl=en&entry=ttu +Reviews: 74 reviews + +Name: Ben xe My Dinh +Link: https://www.google.com/maps/search/B%E1%BA%BFn+xe+M%E1%BB%B9+%C4%90%C3%ACnh/@21.02758,105.77875900000001?authuser=0&hl=en&entry=ttu +Reviews: 32 reviews + +Name: Ben Xe Bus My Dinh +Link: https://www.google.com/maps/search/B%E1%BA%BFn+Xe+Bus+M%E1%BB%B9+%C4%90%C3%ACnh/@21.0263377,105.77622129999999?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Ben Xe My Dinh Ha Noi +Link: https://www.google.com/maps/search/B%E1%BA%BFn+Xe+M%E1%BB%B9+%C4%90%C3%ACnh+H%C3%A0+N%E1%BB%99i/@21.0284308,105.77647569999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Trung Tam Dieu Hanh Ben Xe My Dinh +Link: https://www.google.com/maps/search/Trung+T%C3%A2m+%C4%90i%E1%BB%81u+H%C3%A0nh+B%E1%BA%BFn+Xe+M%E1%BB%B9+%C4%90%C3%ACnh/@21.027563699999998,105.7786282?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Ben Xe My Dinh (Owner),,https://lh3.ggpht.com/p/AB5caB9D3l5UTZ3rE-Fu2X2U-XRgNBnjXy66oS41VK9OPyd1KIv4ryekcLLi-9MCDG3JUo4xOu6aVAiolnq4rzkzeXnAR22h1ha12i7Tiw1sn-uZxjxbnlRxQn1Oe_N44821vaKtBeNE=s1024,Bus stop,Bus stop,,,Open All Days,"My Dinh, Nam Tu Liem, Hanoi","ticket, intercity, bus terminus, money, scam, cost, buses in japan, washroom, driver",https://www.google.com/maps/place/B%E1%BA%BFn+Xe+M%E1%BB%B9+%C4%90%C3%ACnh/data=!4m7!3m6!1s0x313454b2f431c099:0xe44043bacd461128!8m2!3d21.0284297!4d105.7782687!16s%2Fg%2F1tgdqlwg!19sChIJmcAx9LJUNDERKBFGzbpDQOQ?authuser=0&hl=en&rclk=1,bai do xe quan 9 +ChIJGUI1vimtNTERYIqayJ3SdFE,BINH MINH LIMOUSINE,,,167,2.7,"Name: NINH BINH CAR +Link: https://www.google.com/maps/search/NINH+B%C3%8CNH+CAR/@20.971687499999998,105.84706249999999?authuser=0&hl=en&entry=ttu +Reviews: 180 reviews + +Name: Binh Hoai Limousine +Link: https://www.google.com/maps/search/B%C3%ACnh+Ho%C3%A0i+Limousine/@20.970512300000003,105.8476529?authuser=0&hl=en&entry=ttu +Reviews: 39 reviews + +Name: Binh An Limousine Hoang Mai +Link: https://www.google.com/maps/search/B%C3%ACnh+An+Limousine+Ho%C3%A0ng+Mai/@20.971035,105.8491718?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: MINH THUY LIMOUSINE +Link: https://www.google.com/maps/search/MINH+TH%C3%9AY+LIMOUSINE/@20.9609871,105.8429326?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Nha Xe Minh Quan LMS +Link: https://www.google.com/maps/search/Nh%C3%A0+Xe+Minh+Qu%C3%A2n+LMS/@21.0184095,105.8407493?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",http://binhminhlimousine.com.vn/,1900 1531,,BINH MINH LIMOUSINE (Owner),https://www.google.com/maps/contrib/114622283759755294871,https://lh3.ggpht.com/p/AB5caB9zgtRuxMeQPetmVAvYZ7-FSacUF5mN10kYoZwhxHGM3zwMu0FmIhf_SlpVLYBph2Ozr8EZ9h0g8ZZaZ6RWHHrzb6FleRoJvo5mhJp78_p-kvU5qdOA5EdixqlS6ISzU2O5bleJTA=s1024,Trucking company,Trucking company,Open 24 hours,,Open All Days,"Dong Tau, N 7, KDT DONG TAU, Hoang Mai, Ha Noi","driver, bus, communication, price, seats, book, pictures, management, whatsapp, passengers",https://www.google.com/maps/place/B%C3%8CNH+MINH+LIMOUSINE/data=!4m7!3m6!1s0x3135ad29be354219:0x5174d29dc89a8a60!8m2!3d20.970282!4d105.8482623!16s%2Fg%2F11gj1lfkx0!19sChIJGUI1vimtNTERYIqayJ3SdFE?authuser=0&hl=en&rclk=1,bai do xe quan 9 diff --git a/backend/prisma/packingCrawler/csv/packing_1.csv b/backend/prisma/packingCrawler/csv/packing_1.csv new file mode 100644 index 0000000..8c2d3c5 --- /dev/null +++ b/backend/prisma/packingCrawler/csv/packing_1.csv @@ -0,0 +1,2019 @@ +place_id,name,description,is_spending_on_ads,reviews,rating,competitors,website,phone,can_claim,owner_name,owner_profile_link,featured_image,main_category,categories,workday_timing,is_temporarily_closed,closed_on,address,review_keywords,link,query +ChIJkUU8zbpVNDERRci3rBXwxxs,Ham Gui Xe Me Tri Ha,,,15,4.9,"Name: Bai Gui Xe Dh Mo-dia Chat +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C4%90h+M%E1%BB%8F-%C4%91%E1%BB%8Ba+Ch%E1%BA%A5t/@21.071608800000003,105.7776627?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/@20.9918493,105.7932795?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,024 6293 2989,1,Ham Gui Xe Me Tri Ha (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB9x9nviwKeeNHspRMeMmYqFjYx98Ncu9xabc2TPThOB1Dz8_FyGhBWSBfR-mMdXOH5cYHm_NKkSe6BY95jMtiOruY76TGWJDcSB5D8ydU7d6njLZURP4YdirGiSvNeFh6uDUZQZ=w408-h306-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"D. Me Tri, Khu do thi Me Tri Ha, Nam Tu Liem, Ha Noi 12012",,https://www.google.com/maps/place/H%E1%BA%A7m+G%E1%BB%ADi+Xe+M%E1%BB%85+Tr%C3%AC+H%E1%BA%A1/data=!4m7!3m6!1s0x313455bacd3c4591:0x1bc7f015acb7c845!8m2!3d21.0143398!4d105.7816885!16s%2Fg%2F11l2qvklqq!19sChIJkUU8zbpVNDERRci3rBXwxxs?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJzdGAgE2rNTERJhC2jryGL0k,Bai do xe Nguyen Thi Due,,,0,0,"Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe may +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/@21.0507824,105.8033172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.011681199999998,105.7935883?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe Nguyen Thi Due (Owner),,,Parking lot,Parking lot,,,Open All Days,"2Q9R+M23, P. Nguyen Thi Due, Yen Hoa, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%E1%BB%85n+Th%E1%BB%8B+Du%E1%BB%87/data=!4m7!3m6!1s0x3135ab4d8080d1cd:0x492f86bc8eb61026!8m2!3d21.019136!4d105.790051!16s%2Fg%2F11l1y3n88s!19sChIJzdGAgE2rNTERJhC2jryGL0k?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJn85dOCmrNTER-5GSIOxgrIo,Bai gui xe 221 Trung Kinh,,,3,2.7,"Name: Diem Trong Giu Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4/@21.014042399999997,105.79629949999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe o to 24/24h +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4+24%2F24h/@21.0312783,105.740607?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai gui xe 221 Trung Kinh (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB-RqPaSrv7T0e5-S41I08cOd_T67vrWscRSDc_0U8mE-dQK_cohK6H2rnEal_fdIKl9lmV11SN7T0sR3PuazC93AouQw1KWRB0cj1O1DHT_IPQGyvyUP40hh8ZKcyYLfosJBwl5zw=w408-h544-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"2QCR+9F5, Yen Hoa, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+221+Trung+K%C3%ADnh/data=!4m7!3m6!1s0x3135ab29385dce9f:0x8aac60ec209291fb!8m2!3d21.0208938!4d105.7912419!16s%2Fg%2F11qrkq1d78!19sChIJn85dOCmrNTER-5GSIOxgrIo?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJC32io8GtNTERHbwfoG2knU8,Bai do xe,,,0,0,"Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe may +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/@21.0507824,105.8033172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai rua xe do xe +Link: https://www.google.com/maps/search/B%C3%A3i+r%E1%BB%ADa+xe+%C4%91%E1%BB%97+xe/@20.9834615,105.8704131?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe Nguyen Thi Due +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%E1%BB%85n+Th%E1%BB%8B+Du%E1%BB%87/@21.019136,105.79005099999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"116 P. Nguyen Chanh, Trung Hoa, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe/data=!4m7!3m6!1s0x3135adc1a3a27d0b:0x4f9da46da01fbc1d!8m2!3d21.0116812!4d105.7935883!16s%2Fg%2F11r4k4t8kc!19sChIJC32io8GtNTERHbwfoG2knU8?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJvWtdFnutNTEREnb2U5kc20o,Bai Trong Xe May Tu Mo,,,4,3.8,"Name: Diem Trong Giu Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4/@21.014042399999997,105.79629949999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe Truong Man Non Sao Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Tr%C6%B0%E1%BB%9Dng+M%E1%BA%A7n+Non+Sao+Mai/@21.0453212,105.77690919999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/@20.9918493,105.7932795?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai Trong Xe May Tu Mo (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB81WWrvnWIyxYsvKjND2x2RclmuN87w4QoomnTW_XynNzMjWBxmBf-SeAOVkTcfM7-5NMLePb2wAqXnEpl0kLGudptT1Qw68LcqpJeYNFQVa3GOhsC32rhrAmXAPS3cBnmwGWF8=w408-h306-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"2Q5V+XCR Tu Mo, P. Nguyen Chanh, Trung Hoa, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+Tr%C3%B4ng+Xe+M%C3%A1y+T%C3%BA+M%E1%BB%A1/data=!4m7!3m6!1s0x3135ad7b165d6bbd:0x4adb1c9953f67612!8m2!3d21.0099804!4d105.7935213!16s%2Fg%2F11qr2pcd4f!19sChIJvWtdFnutNTEREnb2U5kc20o?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJbXOEtsCtNTER-HW0XFxXH7g,Bai Dau Xe 24/7,Bai do xe 24/7. Dich vu trong giu xe ngay va dem. Khong gian rong rai thoang dang. Gia ca hop ly.,,2,5,"Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+xe+oto/@20.998038299999997,105.8050507?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/@20.9918493,105.7932795?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",http://zalo.me/bshs0922122123,0978 412 682,,Bai Dau Xe 24/7 (Owner),https://www.google.com/maps/contrib/103489359771778675067,https://lh3.googleusercontent.com/p/AF1QipMEIJMh16lWtgcOX06BG4bVt7UB7axACAiNO_19=w408-h544-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"1 P. To Huu, Nhan Chinh, Thanh Xuan, Ha Noi 100000",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BA%ADu+Xe+24%2F7/data=!4m7!3m6!1s0x3135adc0b684736d:0xb81f575c5cb475f8!8m2!3d20.9987748!4d105.7964516!16s%2Fg%2F11t825wtvm!19sChIJbXOEtsCtNTER-HW0XFxXH7g?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ0W8wJxdVNDER2uugK2fqV4g,Diem dung xe buyt,,,8,3.9,"Name: Bus stop +Link: https://www.google.com/maps/search/Bus+stop/@21.0293787,105.803663?authuser=0&hl=en&entry=ttu +Reviews: 81 reviews + +Name: Tram Xe Buyt 26 - 97 +Link: https://www.google.com/maps/search/Tr%E1%BA%A1m+Xe+Bu%C3%BDt+26+-+97/@21.031453,105.76957309999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Diem Dung Xe Buyt +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+D%E1%BB%ABng+Xe+Bu%C3%BDt/@20.982922199999997,105.8772034?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Gan Nga 4 Pham Hung - Dinh Thon - Cot Sau +Link: https://www.google.com/maps/search/G%E1%BA%A7n+Ng%C3%A3+4+Ph%E1%BA%A1m+H%C3%B9ng+-+%C4%90%C3%ACnh+Th%C3%B4n+-+C%E1%BB%99t+Sau/@21.0233489,105.7784272?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Buyt 215 Ben Xe My Dinh - Ben Xe truc ninh nam dinh +Link: https://www.google.com/maps/search/Bu%C3%BDt+215+B%E1%BA%BFn+Xe+M%E1%BB%B9+%C4%90%C3%ACnh+-+B%E1%BA%BFn+Xe+tr%E1%BB%B1c+ninh+nam+%C4%91%E1%BB%8Bnh/@21.0280202,105.7784375?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Diem dung xe buyt (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB8njETeLa4W9Z68zBVMj-KALPwYU_X_7HOOCQaQ1mhs3rUV1yx9Nu3oPO9CV1PeF82BIJautuX15uPUkYpwy-LG8Nq_KeVZuiAhZQhwPxxPN94Ic-8c-ynmNUIF9KNCCV8eM_vS=w408-h544-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"2QGH+VP7 Doi Dien Ben Xe, D. Pham Hung, My Dinh, Nam Tu Liem, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+d%E1%BB%ABng+xe+bu%C3%BDt/data=!4m7!3m6!1s0x3134551727306fd1:0x8857ea672ba0ebda!8m2!3d21.0271724!4d105.7793072!16s%2Fg%2F11mpqgf795!19sChIJ0W8wJxdVNDER2uugK2fqV4g?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJpXugbCJVNDERBnh5v1_QbOI,Ben Xe My Dinh,,,54,4.2,"Name: Ben Xe Khach My Dinh +Link: https://www.google.com/maps/search/B%E1%BA%BFn+Xe+Kh%C3%A1ch+M%E1%BB%B9+%C4%90%C3%ACnh/@21.0283653,105.7782948?authuser=0&hl=en&entry=ttu +Reviews: 73 reviews + +Name: Ben xe My Dinh +Link: https://www.google.com/maps/search/B%E1%BA%BFn+xe+M%E1%BB%B9+%C4%90%C3%ACnh/@21.02758,105.77875900000001?authuser=0&hl=en&entry=ttu +Reviews: 32 reviews + +Name: Ben Xe My Dinh Ha Noi +Link: https://www.google.com/maps/search/B%E1%BA%BFn+Xe+M%E1%BB%B9+%C4%90%C3%ACnh+H%C3%A0+N%E1%BB%99i/@21.0284308,105.77647569999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Ban Quan Ly Ben Xe Khach My Dinh +Link: https://www.google.com/maps/search/Ban+Qu%E1%BA%A3n+L%C3%BD+B%E1%BA%BFn+Xe+Kh%C3%A1ch+M%E1%BB%B9+%C4%90%C3%ACnh/@21.027872800000004,105.7765374?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Trung Tam Dieu Hanh Ben Xe My Dinh +Link: https://www.google.com/maps/search/Trung+T%C3%A2m+%C4%90i%E1%BB%81u+H%C3%A0nh+B%E1%BA%BFn+Xe+M%E1%BB%B9+%C4%90%C3%ACnh/@21.027563699999998,105.7786282?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Ben Xe My Dinh (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB86TF6X_c9jrIKUkBJmd50R906I6GxtKHGo2MDwOCENpf8Cmr7COGVm20zXqcRrovY7GtMKwb6TEnBI6oj1uu_aLHdYDg3AuM1xRMr6Bikn-K04CnKiUB8ZSu_4-XjZBCsIuv1bbQ=w408-h544-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"Xa, Lo 24A Khu dat gia dat, My Dinh, Nam Tu Liem, Ha Noi",,https://www.google.com/maps/place/B%E1%BA%BFn+Xe+M%E1%BB%B9+%C4%90%C3%ACnh/data=!4m7!3m6!1s0x313455226ca07ba5:0xe26cd05fbf797806!8m2!3d21.0283794!4d105.7776771!16s%2Fg%2F11tsnznyn3!19sChIJpXugbCJVNDERBnh5v1_QbOI?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJC3OxGQBVNDERqMd0HXrTE-4,Bai Do Xe Thong Minh Hoa Vu,,,1,5,"Name: Bai do xe may +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/@21.0507824,105.8033172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai dau xe ULIS-VNU +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BA%ADu+xe+ULIS-VNU/@21.0385673,105.78214469999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe Truong Man Non Sao Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Tr%C6%B0%E1%BB%9Dng+M%E1%BA%A7n+Non+Sao+Mai/@21.0453212,105.77690919999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe thong minh car parking +Link: https://www.google.com/maps/search/B%C3%A3i+xe+th%C3%B4ng+minh+car+parking/@21.0019779,105.8273997?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe Nguyen Thi Due +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%E1%BB%85n+Th%E1%BB%8B+Du%E1%BB%87/@21.019136,105.79005099999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai Do Xe Thong Minh Hoa Vu (Owner),,,Parking lot,Parking lot,,,Open All Days,"47 Ng. 66 D. Ho Tung Mau, Mai Dich, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%97+Xe+Th%C3%B4ng+Minh+H%C3%B3a+V%C5%A9/data=!4m7!3m6!1s0x3134550019b1730b:0xee13d37a1d74c7a8!8m2!3d21.0379708!4d105.7776298!16s%2Fg%2F11vwm_37rj!19sChIJC3OxGQBVNDERqMd0HXrTE-4?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJAWZhLl2rNTERbXMma7tvB8o,Bai De Xe Chua Lang,,,10,3.7,"Name: Bai Xe Chua Boc +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+Ch%C3%B9a+B%E1%BB%99c/@21.0073957,105.8293817?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai gui xe Truong Man Non Sao Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Tr%C6%B0%E1%BB%9Dng+M%E1%BA%A7n+Non+Sao+Mai/@21.0453212,105.77690919999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Diem Trong Giu Xe Duc Thuan +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C4%90%E1%BB%A9c+Thu%E1%BA%ADn/@21.0334926,105.7878846?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0962 553 966,1,Bai De Xe Chua Lang (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB9AlM-2lYIEq3DDpqcBFB6dGNEtpGGcvf8Qt9Ypc-xdW19c0ADW4vcVtaI53P_PMI1mp7QJvWJf06C972dsBpnQMCaGREITPGjzZy5ayak0i5FtYAkk4O80fF8LKJ40VcvCDM86bg=w408-h306-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"157 P. Chua Lang, Lang Thuong, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%83+Xe+Ch%C3%B9a+L%C3%A1ng/data=!4m7!3m6!1s0x3135ab5d2e616601:0xca076fbb6b26736d!8m2!3d21.0231036!4d105.8031782!16s%2Fg%2F1tqpwqk0!19sChIJAWZhLl2rNTERbXMma7tvB8o?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ3RSd1UurNTERf7w4fh92BCA,Diem Trong Giu Xe Duc Thuan,,,0,0,"Name: Bai De Xe Chua Lang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%83+Xe+Ch%C3%B9a+L%C3%A1ng/@21.0231036,105.80317819999999?authuser=0&hl=en&entry=ttu +Reviews: 10 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@21.041933,105.78874599999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Truong Man Non Sao Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Tr%C6%B0%E1%BB%9Dng+M%E1%BA%A7n+Non+Sao+Mai/@21.0453212,105.77690919999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Diem Trong Giu Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4/@21.014042399999997,105.79629949999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Diem Trong Giu Xe Duc Thuan (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB-q-vHDVqTR8Y8d1dW7ODd7MSPtx4gYrpcWMbLuLsVbq2rnfnLQizsVEkdNphlHSCwvpmPLJcvVPOSvVTMuV3ddKgsmKhXCQecKVe1njnVC0ywjMCrwc0Kiq7N3YUJC5ON1qeww=w408-h544-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"6 P. Dich Vong Hau, Dich Vong Hau, Cau Giay, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C4%90%E1%BB%A9c+Thu%E1%BA%ADn/data=!4m7!3m6!1s0x3135ab4bd59d14dd:0x2004761f7e38bc7f!8m2!3d21.0334926!4d105.7878846!16s%2Fg%2F11btrqs_jg!19sChIJ3RSd1UurNTERf7w4fh92BCA?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJmWhfZ1irNTERc0qcpOUE_ag,Diem Trong Giu Xe O To,,,0,0,"Name: Bai Trong Xe May Tu Mo +Link: https://www.google.com/maps/search/B%C3%A3i+Tr%C3%B4ng+Xe+M%C3%A1y+T%C3%BA+M%E1%BB%A1/@21.009980400000003,105.7935213?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai gui xe 221 Trung Kinh +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+221+Trung+K%C3%ADnh/@21.0208938,105.79124189999999?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai gui xe o to 24/24h +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4+24%2F24h/@21.0312783,105.740607?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Diem Trong Giu Xe O To (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB9ee1uEFbk7AD9oN-eoWpLsUtA5B_Q-H7e-StYWIE0XyPTp1HB0ay48cEkatihyazs1IqajgkrmkEraRlWSnCRsjZGxACnFoIfZhA4v-L4N651pBamW03D6N_STjB9_T9iRo5XK=w408-h544-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"107 P. Trung Kinh, Trung Hoa, Cau Giay, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4/data=!4m7!3m6!1s0x3135ab58675f6899:0xa8fd04e5a49c4a73!8m2!3d21.0140424!4d105.7962995!16s%2Fg%2F11p4cwmgj6!19sChIJmWhfZ1irNTERc0qcpOUE_ag?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ2d2KrRirNTER-Hj5W4gt7dE,Bai do xe cong vien Thu Le,,,50,3.8,"Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9867769,105.8198008?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Diem Do Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4/@21.0477423,105.8104151?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe cong vien Thu Le (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB_7nDnSgnAebnC9hMsvn6Yzi--rIciO4SmAxq_QJcaIAvUvv6-pNuUl0gt1HcgWYIECqGVe8epCAEWQ-oR7ieWwrK0tZ68mBc3ao9zKY3kXhA1rKwr3jHRI_qVt0MBnDPslNYFSbg=w408-h306-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"2RJ5+QPF, Ngoc Khanh, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+c%C3%B4ng+vi%C3%AAn+Th%E1%BB%A7+L%E1%BB%87/data=!4m7!3m6!1s0x3135ab18ad8addd9:0xd1ed2d885bf978f8!8m2!3d21.0319313!4d105.8093104!16s%2Fg%2F11gr1fh6vc!19sChIJ2d2KrRirNTER-Hj5W4gt7dE?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJoZOUolSrNTERPqgahAX79Kc,Bai gui xe,,,1,5,"Name: Diem Gui Xe +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+G%E1%BB%ADi+Xe/@21.0330475,105.7881365?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Truong Man Non Sao Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Tr%C6%B0%E1%BB%9Dng+M%E1%BA%A7n+Non+Sao+Mai/@21.0453212,105.77690919999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Diem Trong Giu Xe Duc Thuan +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C4%90%E1%BB%A9c+Thu%E1%BA%ADn/@21.0334926,105.7878846?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai gui xe (Owner),,,Playground,Playground,,,Open All Days,"2QRQ+RG4, Dich Vong Hau, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe/data=!4m7!3m6!1s0x3135ab54a29493a1:0xa7f4fb05841aa83e!8m2!3d21.041933!4d105.788746!16s%2Fg%2F11tsdtrqfy!19sChIJoZOUolSrNTERPqgahAX79Kc?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJxbSXSgtVNDEReerhsva72qY,Bai do xe xonxao cafe,Bai do xe theo quy dinh cua dia phuong,,0,0,"Name: xonxao cafe +Link: https://www.google.com/maps/search/xonxao+caf%C3%A9/@21.0401971,105.7623134?authuser=0&hl=en&entry=ttu +Reviews: 539 reviews + +Name: Diem do xe cua Thuc +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%91%E1%BB%97+xe+c%E1%BB%A7a+Th%E1%BB%B1c/@21.066626100000004,105.7806463?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai Do Xe Thong Minh Hoa Vu +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+Th%C3%B4ng+Minh+H%C3%B3a+V%C5%A9/@21.0379708,105.77762980000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe co quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+c%C6%A1+quan/@21.028288699999997,105.78174840000001?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Bai do xe xonxao cafe (Owner),https://www.google.com/maps/contrib/102631327943681963365,https://lh3.googleusercontent.com/p/AF1QipMPr43YOg7stxqzo3mmmwgh8DXLb_4teui57_vC=w408-h254-k-no=s1024,Free parking lot,Free parking lot,8 AM-11 PM,,Open All Days,"267 D. Ho Tung Mau, Cau Dien, Nam Tu Liem, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+xonxao+cafe/data=!4m7!3m6!1s0x3134550b4a97b4c5:0xa6dabbf6b2e1ea79!8m2!3d21.0411728!4d105.7623605!16s%2Fg%2F11y48pdrkb!19sChIJxbSXSgtVNDEReerhsva72qY?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ_xk0WNStNTER1bahKS4i3JU,Bai do xe Truong Chinh,,,13,4.9,"Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+xe+oto/@20.998038299999997,105.8050507?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe +Link: https://www.google.com/maps/search/B%C3%A3i+xe/@20.995946099999998,105.82298229999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,024 3566 7333,1,Bai do xe Truong Chinh (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB8n0GuITXckkdO2SHfmishDW4lvdpIGzxP-7OsBzvB9plKfI0bhufXMJp9K1HSScRmYbLA8s3wBOekCixMex21F_bexXzx2RaqBNzJ7TePzKb5envUDqfPvUyqbK4sJTK5PV1RZ=w408-h306-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"315 D. Truong Chinh, Khuong Thuong, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+Tr%C6%B0%E1%BB%9Dng+Chinh/data=!4m7!3m6!1s0x3135add4583419ff:0x95dc222e29a1b6d5!8m2!3d21.0018285!4d105.8229903!16s%2Fg%2F11h6jyp_r6!19sChIJ_xk0WNStNTER1bahKS4i3JU?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJJ_xogZFVNDER4Veqx-kgCrg,Bai gui xe Truong Man Non Sao Mai,,,0,0,"Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@21.041933,105.78874599999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe may +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/@21.0507824,105.8033172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Diem Trong Giu Xe Duc Thuan +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C4%90%E1%BB%A9c+Thu%E1%BA%ADn/@21.0334926,105.7878846?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe o to 24/24h +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4+24%2F24h/@21.0312783,105.740607?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Diem Trong Giu Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4/@21.014042399999997,105.79629949999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai gui xe Truong Man Non Sao Mai (Owner),,,Parking lot,Parking lot,,,Open All Days,"To 24 - pho, Duong Khue, Mai Dich, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+Tr%C6%B0%E1%BB%9Dng+M%E1%BA%A7n+Non+Sao+Mai/data=!4m7!3m6!1s0x313455918168fc27:0xb80a20e9c7aa57e1!8m2!3d21.0453212!4d105.7769092!16s%2Fg%2F11p65rd2c5!19sChIJJ_xogZFVNDER4Veqx-kgCrg?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJZyQ7w_qtNTERfjNNLxije-E,"Bai do xe & rua xe,don noi that,thay dau o to xe may, Trung Van",,,1,5,"Name: Bai do xe Phung Khoang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Ph%C3%B9ng+Khoang/@20.987450799999998,105.79607130000001?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai rua xe do xe +Link: https://www.google.com/maps/search/B%C3%A3i+r%E1%BB%ADa+xe+%C4%91%E1%BB%97+xe/@20.9834615,105.8704131?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe Nguyen Hong +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%C3%AAn+H%E1%BB%93ng/@21.0237612,105.81164129999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,"Bai do xe & rua xe,don noi that,thay dau o to xe may, Trung Van (Owner)",,,Parking lot,Parking lot,7:30 AM-7 PM,,Open All Days,"290 D. Nguyen Trai, P. Van Quan, Nam Tu Liem, Ha Noi",,"https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+%26+r%E1%BB%ADa+xe,d%E1%BB%8Dn+n%E1%BB%99i+th%E1%BA%A5t,thay+d%E1%BA%A7u+%C3%B4+t%C3%B4+xe+m%C3%A1y,+Trung+V%C4%83n/data=!4m7!3m6!1s0x3135adfac33b2467:0xe17ba3182f4d337e!8m2!3d20.9872551!4d105.7960332!16s%2Fg%2F11s5_x4sd0!19sChIJZyQ7w_qtNTERfjNNLxije-E?authuser=0&hl=en&rclk=1",bai do xe gan day +ChIJz7wn7UhVNDERztdCFOKRgq4,Bai gui xe,,,0,0,"Name: Bai gui xe so 1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+s%E1%BB%91+1/@20.987584599999998,105.8314704?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/@20.9918493,105.7932795?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai Gui Xe Dh Mo-dia Chat +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C4%90h+M%E1%BB%8F-%C4%91%E1%BB%8Ba+Ch%E1%BA%A5t/@21.071608800000003,105.7776627?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe Thinh Liet +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Th%E1%BB%8Bnh+Li%E1%BB%87t/@20.971021699999998,105.8483868?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai gui xe (Owner),,,Apartment building,Apartment building,,,Open All Days,"49 P. Nguyen Hoang, My Dinh, Nam Tu Liem, Ha Noi 100000",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe/data=!4m7!3m6!1s0x31345548ed27bccf:0xae8291e21442d7ce!8m2!3d21.0322476!4d105.7738353!16s%2Fg%2F11mqw0l0l2!19sChIJz7wn7UhVNDERztdCFOKRgq4?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ9XmuQnJVNDER1H3DNINAwNo,NT,,,0,0,"Name: Bai Xe Phu Do +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+Ph%C3%BA+%C4%90%C3%B4/@21.0119816,105.76273789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe Viet Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Vi%E1%BB%87t+Nh%E1%BA%ADt/@20.987934,105.779733?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: TD Parking +Link: https://www.google.com/maps/search/TD+Parking/@21.065039799999997,105.8020834?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Base +Link: https://www.google.com/maps/search/Base/@21.0237956,105.8147214?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.9865449,105.8308979?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,NT (Owner),,,Parking lot,Parking lot,,,Open All Days,"39 D. Le Duc Tho, My Dinh, Nam Tu Liem, Ha Noi",,https://www.google.com/maps/place/NT/data=!4m7!3m6!1s0x3134557242ae79f5:0xdac0408334c37dd4!8m2!3d21.0322241!4d105.7697981!16s%2Fg%2F11rty8vl4m!19sChIJ9XmuQnJVNDER1H3DNINAwNo?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ3523x4OsNTERL9VTB4cJJg8,Bai Gui Xe,,,3,4.3,"Name: Bai do xe Truong Chinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Tr%C6%B0%E1%BB%9Dng+Chinh/@21.0018285,105.8229903?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews + +Name: Bai De Xe Chua Lang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%83+Xe+Ch%C3%B9a+L%C3%A1ng/@21.0231036,105.80317819999999?authuser=0&hl=en&entry=ttu +Reviews: 10 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Dau Xe 24/7 +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BA%ADu+Xe+24%2F7/@20.9987748,105.7964516?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai Gui Xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"21 P. Thai Thinh, Nga Tu So, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe/data=!4m7!3m6!1s0x3135ac83c7b79ddf:0xf2609870753d52f!8m2!3d21.006453!4d105.821833!16s%2Fg%2F11h4143st6!19sChIJ3523x4OsNTERL9VTB4cJJg8?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJDykMaMKrNTERorvy82LlxXM,Bai gui xe,,,6,3.7,"Name: Bai gui xe so 1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+s%E1%BB%91+1/@20.987584599999998,105.8314704?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai Do Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4/@21.0224655,105.8532371?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai gui xe vien Phoi +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+vi%E1%BB%87n+Ph%E1%BB%95i/@21.041498500000003,105.8123838?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews",,,1,Bai gui xe (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB-aq7BX2-FYPRORwb1yqVXGxRJKOIhS0JsipHLzIIhBjhuQiICJbAxE6jgPfcjsjyJrKwI_KKOH_MHwLNcZYUiuvT8fVFHNrCiyIH273c-guPNMo8YKxVF_J4yBYWm3hFNvTv3-lw=w408-h544-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"Ngh. 207/28 P. Bui Xuong Trach, Chuong Duong Do, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe/data=!4m7!3m6!1s0x3135abc2680c290f:0x73c5e562f3f2bba2!8m2!3d20.9867769!4d105.8198008!16s%2Fg%2F11f3jnxl46!19sChIJDykMaMKrNTERorvy82LlxXM?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ94AkehpVNDERZ02H3P8OIKI,Bai xe AVIS HN,Day la khu vuc do xe qua dem cua Cong ty AVIS Vietnam,,1,5,"Name: Bai Do Xe Thong Minh Hoa Vu +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+Th%C3%B4ng+Minh+H%C3%B3a+V%C5%A9/@21.0379708,105.77762980000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai dau xe ULIS-VNU +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BA%ADu+xe+ULIS-VNU/@21.0385673,105.78214469999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Bai xe AVIS HN (Owner),https://www.google.com/maps/contrib/106029341771534750825,https://lh3.googleusercontent.com/gps-cs-s/AB5caB9xWUMdA-cfMX54dWKWs8DzaW3EHgKInaTWgGlwE_Id_4Guh1f2jFTFlqKuw0a0LXY-9tMVYWJ17pKE9O19GkjgM_FDckUvFWnTXIIFGUUJ8ugbsxv17Wm9AcRPISp_hIYpQ15A=w426-h240-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"5 P. Tran Vy, Mai Dich, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+AVIS+HN/data=!4m7!3m6!1s0x3134551a7a2480f7:0xa2200effdc874d67!8m2!3d21.041943!4d105.7726229!16s%2Fg%2F11st6z3svg!19sChIJ94AkehpVNDERZ02H3P8OIKI?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJm_wuSSmrNTERacKuLlHVuvs,Bai do xe CP taxi Ha Noi,,,1,4,"Name: Bai do xe o to Nguyen Cong Hoan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4+Nguy%E1%BB%85n+C%C3%B4ng+Hoan/@21.027268499999998,105.8167297?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe 81 Lang Ha +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+81+L%C3%A1ng+H%E1%BA%A1/@21.017794199999997,105.8168796?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe Nguyen Hong +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%C3%AAn+H%E1%BB%93ng/@21.0237612,105.81164129999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0906 228 403,1,Bai do xe CP taxi Ha Noi (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB9BWObioKrIpTEqzxCjTsRf1NkhPLdK_LPzapJRl38O9DfIgoYSesf91Ims84kAI_MfZ5HjWiRrOzotKuaA4BNIv5Avz_i4aDB4uEFNkWI3Us4ilDE02Y-pPH5UHsxuRzWEraxrdA=w408-h306-k-no=s1024,Parking garage,Parking garage,,,Open All Days,"2R67+RV6, Ng. 105 P. Lang Ha, Lang Ha, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+CP+taxi+H%C3%A0+N%E1%BB%99i/data=!4m7!3m6!1s0x3135ab29492efc9b:0xfbbad5512eaec269!8m2!3d21.0120375!4d105.8146406!16s%2Fg%2F11fn98fln0!19sChIJm_wuSSmrNTERacKuLlHVuvs?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJAcZMO1utNTERTLXjcYZ9gEo,Bai xe,,,0,0,"Name: Bai do xe Truong Chinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Tr%C6%B0%E1%BB%9Dng+Chinh/@21.0018285,105.8229903?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews + +Name: Bai do xe 183 HVT +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+183+HVT/@20.9968668,105.82281259999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+xe+oto/@20.998038299999997,105.8050507?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.995428,105.82421219999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"So 29 Ng. 183 P. Hoang Van Thai, Khuong Trung, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe/data=!4m7!3m6!1s0x3135ad5b3b4cc601:0x4a807d8671e3b54c!8m2!3d20.9959461!4d105.8229823!16s%2Fg%2F11hn4x0_6r!19sChIJAcZMO1utNTERTLXjcYZ9gEo?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ17mg8-CtNTERzOFrtUoqgBk,Bai xe oto,,,1,3,"Name: Bai Dau Xe 24/7 +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BA%ADu+Xe+24%2F7/@20.9987748,105.7964516?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Gara Trong +Link: https://www.google.com/maps/search/Gara+Tr%E1%BB%8Dng/@20.999530999999998,105.8074389?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe +Link: https://www.google.com/maps/search/B%C3%A3i+xe/@20.995946099999998,105.82298229999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai xe oto (Owner),,,Parking lot,Parking lot,,,Open All Days,"132 Nguyen Huy Tuong, Thanh Xuan Trung, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+oto/data=!4m7!3m6!1s0x3135ade0f3a0b9d7:0x19802a4ab56be1cc!8m2!3d20.9980383!4d105.8050507!16s%2Fg%2F11h5m3r9xj!19sChIJ17mg8-CtNTERzOFrtUoqgBk?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJXaWeEGKrNTERJsI1UnuJMIg,Bai xe Electric Power University,,,2,5,"Name: Bai do xe VNPT-Technology +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+VNPT-Technology/@21.0468449,105.79183499999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Gui Xe Huy Hoang +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+Huy+Ho%C3%A0ng/@20.9621674,105.7984347?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe Cong vien Thanh Xuan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+C%C3%B4ng+vi%C3%AAn+Thanh+Xu%C3%A2n/@21.004293699999998,105.79618870000002?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe +Link: https://www.google.com/maps/search/B%C3%A3i+xe/@20.995946099999998,105.82298229999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai xe Electric Power University (Owner),,,Parking lot,Parking lot,,,Open All Days,"235 Hoang Quoc Viet, Khu tap the Nghia Tan, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+Electric+Power+University/data=!4m7!3m6!1s0x3135ab62109ea55d:0x8830897b5235c226!8m2!3d21.0470872!4d105.7851829!16s%2Fg%2F11khgh0xdn!19sChIJXaWeEGKrNTERJsI1UnuJMIg?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJBbu0PqatNTERMqYgd3Qpvzw,Bai do xe Phung Khoang,"Bai do xe Phung Khoang nhan trong giu cac loai xe may xe o to theo ngay, thang.",,5,1.4,"Name: Phung khoang diem do +Link: https://www.google.com/maps/search/Ph%C3%B9ng+khoang+%C4%91i%E1%BB%83m+%C4%91%E1%BB%97/@20.9869368,105.7931327?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe & rua xe,don noi that,thay dau o to xe may, Trung Van +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%26+r%E1%BB%ADa+xe%2Cd%E1%BB%8Dn+n%E1%BB%99i+th%E1%BA%A5t%2Cthay+d%E1%BA%A7u+%C3%B4+t%C3%B4+xe+m%C3%A1y%2C+Trung+V%C4%83n/@20.9872551,105.7960332?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe san vui choi Phung Khoang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+s%C3%A2n+vui+ch%C6%A1i+Ph%C3%B9ng+Khoang/@20.990264,105.793673?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe trong nha 24/7 - 32 Trung Van 800k 1 thang +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+trong+nh%C3%A0+24%2F7+-+32+Trung+V%C4%83n+800k+1+th%C3%A1ng/@20.9918493,105.7932795?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,024 3553 9915,,Bai do xe Phung Khoang (Owner),https://www.google.com/maps/contrib/109445558299262893295,https://lh3.googleusercontent.com/gps-cs-s/AB5caB9E6Z1ZD53_UqCita4p4qNh8Lfe0v81-gvmK0uUTVskkF6aD7lQEWTWsYYeYxLLw3GCkUS0pQwK-b3O15EUbvufUe3_umxgMc4jdFNIXKhDi-SuZVQFVPGP77d14360MHFdkORe=w426-h240-k-no=s1024,Parking lot,Parking lot,5 AM-11:30 PM,,Open All Days,"Unnamed Road, P. Van Quan, Nam Tu Liem, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+Ph%C3%B9ng+Khoang/data=!4m7!3m6!1s0x3135ada63eb4bb05:0x3cbf29747720a632!8m2!3d20.9874508!4d105.7960713!16s%2Fg%2F11fm_c5k22!19sChIJBbu0PqatNTERMqYgd3Qpvzw?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJhcCq7oZTNDERoJRsGFcobLQ,Bai do xe Viet Nhat,,,1,5,"Name: Bai do xe & rua xe,don noi that,thay dau o to xe may, Trung Van +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%26+r%E1%BB%ADa+xe%2Cd%E1%BB%8Dn+n%E1%BB%99i+th%E1%BA%A5t%2Cthay+d%E1%BA%A7u+%C3%B4+t%C3%B4+xe+m%C3%A1y%2C+Trung+V%C4%83n/@20.9872551,105.7960332?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe 183 HVT +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+183+HVT/@20.9968668,105.82281259999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Ben do Vu Minh Thi +Link: https://www.google.com/maps/search/B%E1%BA%BFn+%C4%91%E1%BB%97+V%C5%A9+Minh+Thi/@21.060495700000004,105.72077709999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: NT +Link: https://www.google.com/maps/search/NT/@21.0322241,105.76979809999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe Viet Nhat (Owner),,,Parking lot,Parking lot,,,Open All Days,"Truoc Nha Cho Mo Lao, 30M P. To Huu, Nam Tu Liem, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+Vi%E1%BB%87t+Nh%E1%BA%ADt/data=!4m7!3m6!1s0x31345386eeaac085:0xb46c2857186c94a0!8m2!3d20.987934!4d105.779733!16s%2Fg%2F11vdc3dz8t!19sChIJhcCq7oZTNDERoJRsGFcobLQ?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJP0ZKBDurNTERlMi4MQ0Hseo,Car park Send CV Nghia,,,4,2.8,"Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe may +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/@21.0507824,105.8033172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe CP taxi Ha Noi +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+CP+taxi+H%C3%A0+N%E1%BB%99i/@21.012037499999998,105.81464059999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Xe HT +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+HT/@21.0494967,105.79735579999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe Truong Man Non Sao Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Tr%C6%B0%E1%BB%9Dng+M%E1%BA%A7n+Non+Sao+Mai/@21.0453212,105.77690919999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0988 597 698,,Car park Send CV Nghia (Owner),https://www.google.com/maps/contrib/115268176352842959249,https://lh3.googleusercontent.com/gps-cs-s/AB5caB8PCIMMVDHncD8Wdjvv0t7AfTOIhyru_qVH9NW-yxlrXsn8zhUAAM-udaBEnpiS1N6nBhnVVAXsL9hY9CjfiYm6cQ_7xa9KEhm3qB4fBbnADM40Hz6yHWRMWh7YMSX_BLaiHmSD=w426-h240-k-no=s1024,Taxi service,Taxi service,,,Open All Days,"D. Nguyen Van Huyen, Nghia Do, Cau Giay, Ha Noi",,https://www.google.com/maps/place/Car+park+Send+CV+Nghia/data=!4m7!3m6!1s0x3135ab3b044a463f:0xeab1070d31b8c894!8m2!3d21.044841!4d105.7974441!16s%2Fg%2F119v0w2tq!19sChIJP0ZKBDurNTERlMi4MQ0Hseo?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJGwsqNfWsNTERZvt2WGhfqBk,Bai Do Xe So 2 Dinh Cong,,,17,4.2,"Name: Bai gui xe so 1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+s%E1%BB%91+1/@20.987584599999998,105.8314704?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.9865449,105.8308979?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4/@20.9826099,105.8278894?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0912 910 661,1,Bai Do Xe So 2 Dinh Cong (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB_5lMXBgWUKYi4BRTqzWSY01LTpTutooboZvc2xz5oaufO_P4TQzMb94EA3k8R6kpFv0i_alJt7m5y-jI3vdx3pfBHsG8UdONrh5MT_ORjOYzDS0Z1jM1gWi1gOmALC--Iw7uEJOw=w408-h306-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"Dinh Cong Car Parking No 2, Pho P. Tran Dien, Dinh Cong, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%97+Xe+S%E1%BB%91+2+%C4%90%E1%BB%8Bnh+C%C3%B4ng/data=!4m7!3m6!1s0x3135acf5352a0b1b:0x19a85f685876fb66!8m2!3d20.986452!4d105.8273795!16s%2Fg%2F11c4twmw8j!19sChIJGwsqNfWsNTERZvt2WGhfqBk?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJfXlf4QmrNTERZvVzADIF_58,Bai do xe Ngoc Ha,,,26,3.8,"Name: Bai do xe o to Nguyen Cong Hoan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4+Nguy%E1%BB%85n+C%C3%B4ng+Hoan/@21.027268499999998,105.8167297?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai gui xe vien Phoi +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+vi%E1%BB%87n+Ph%E1%BB%95i/@21.041498500000003,105.8123838?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews",,,1,Bai do xe Ngoc Ha (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB9fvjlcpghfWK00YUo-Qt2HgFVzkNfZ7bBuJElw2Kr9dZQx5e5SU6ve__Vz7EkfRDGhiB10Z45REJTxadDGbxyvReAAfnx3-0tzk9ESifNJA8Fq0zpDZ-iy3kSHY6LYIrINROES=w408-h544-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"2RQH+JJV, Ngoc Ho, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+Ng%E1%BB%8Dc+H%C3%A0/data=!4m7!3m6!1s0x3135ab09e15f797d:0x9fff05320073f566!8m2!3d21.0391194!4d105.8290374!16s%2Fg%2F1tlk8vy8!19sChIJfXlf4QmrNTERZvVzADIF_58?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJkYOJxY2rNTER8LKdwEOhTmw,Bai do xe VNPT-Technology,,,1,5,"Name: VNPT Technology +Link: https://www.google.com/maps/search/VNPT+Technology/@21.046828700000002,105.79180149999999?authuser=0&hl=en&entry=ttu +Reviews: 19 reviews + +Name: Bai xe Electric Power University +Link: https://www.google.com/maps/search/B%C3%A3i+xe+Electric+Power+University/@21.047087200000004,105.7851829?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai trong o to mat tien Hoang Quoc Viet +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+%C3%B4+t%C3%B4+m%E1%BA%B7t+ti%E1%BB%81n+Ho%C3%A0ng+Qu%E1%BB%91c+Vi%E1%BB%87t/@21.04647,105.792306?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: diem do xe bus hoang quoc viet +Link: https://www.google.com/maps/search/%C4%91i%E1%BB%83m+%C4%91%E1%BB%97+xe+bus+ho%C3%A0ng+qu%E1%BB%91c+vi%E1%BB%87t/@21.0458559,105.7852487?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe VNPT-Technology (Owner),,,Parking lot,Parking lot,,,Open All Days,"124 Hoang Quoc Viet, Co Nhue, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+VNPT-Technology/data=!4m7!3m6!1s0x3135ab8dc5898391:0x6c4ea143c09db2f0!8m2!3d21.0468449!4d105.791835!16s%2Fg%2F11v3r3dj3y!19sChIJkYOJxY2rNTER8LKdwEOhTmw?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJB8IzqbOrNTERzQwuU3Za7Wg,Bai Xe HT,,,0,0,"Name: Bai gui xe 04 Tay Ho +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+04+T%C3%A2y+H%E1%BB%93/@21.0661386,105.8259885?authuser=0&hl=en&entry=ttu +Reviews: 16 reviews + +Name: Car park Send CV Nghia +Link: https://www.google.com/maps/search/Car+park+Send+CV+Nghia/@21.044840999999998,105.79744409999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+xe+oto/@20.998038299999997,105.8050507?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Dich Vu Cho Thue Bai Do Xe Le Thi Nguyet +Link: https://www.google.com/maps/search/D%E1%BB%8Bch+V%E1%BB%A5+Cho+Thu%C3%AA+B%C3%A3i+%C4%90%E1%BB%95+Xe+L%C3%AA+Th%E1%BB%8B+Nguy%E1%BB%87t/@21.0624874,105.8095932?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe +Link: https://www.google.com/maps/search/B%C3%A3i+xe/@20.995946099999998,105.82298229999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0906 658 899,1,Bai Xe HT (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB9fjmjq9_IpNvVY4VNCLrfShFS-98nA_pEWWWypok81d7ZTP48mx5I18Qy2Wm3jf_UsrWda2pZX5InGRWBF68WswzTUTy9qad6_4W4Fv9Kp7M_ID-TXK57WA9LqYw78viddBZVMqg=w408-h816-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"2QXW+QWX, D. Nguyen Van Huyen, Xuan La, Tay Ho, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+Xe+HT/data=!4m7!3m6!1s0x3135abb3a933c207:0x68ed5a76532e0ccd!8m2!3d21.0494967!4d105.7973558!16s%2Fg%2F11k8chsg5t!19sChIJB8IzqbOrNTERzQwuU3Za7Wg?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJe_GtayGrNTERKV9AVKUraSU,Bai trong xe Phan ke binh,,,0,0,"Name: EVN parking lot +Link: https://www.google.com/maps/search/EVN+parking+lot/@21.0439337,105.8429688?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe vien Phoi +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+vi%E1%BB%87n+Ph%E1%BB%95i/@21.041498500000003,105.8123838?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai giu xe Linh Lang - Phan Ke Binh +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+Linh+Lang+-+Phan+K%E1%BA%BF+B%C3%ADnh/@21.034806,105.8103702?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,Bai trong xe Phan ke binh (Owner),,,Parking lot,Parking lot,,,Open All Days,"5 P. Phan Ke Binh, Cong Vi, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+tr%C3%B4ng+xe+Phan+k%E1%BA%BF+b%C3%ADnh/data=!4m7!3m6!1s0x3135ab216badf17b:0x25692ba554405f29!8m2!3d21.0343043!4d105.8122015!16s%2Fg%2F11l1js8p5k!19sChIJe_GtayGrNTERKV9AVKUraSU?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJZZp0LqCtNTERnmJMDqe5s08,Diem xe buyt,,,1,5,"Name: Diem dung xe buyt +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+d%E1%BB%ABng+xe+bu%C3%BDt/@21.027172399999998,105.77930719999999?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Diem dan ve xe Bus +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+d%C3%A1n+v%C3%A9+xe+Bus/@21.0121786,105.80169079999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Diem Do Xe Buyt Chuong My +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+Xe+Bu%C3%BDt+Ch%C6%B0%C6%A1ng+M%E1%BB%B9/@20.9236498,105.6965651?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Diem Dung Xe Buyt +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+D%E1%BB%ABng+Xe+Bu%C3%BDt/@20.971465600000002,105.8409279?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Ben xe buyt +Link: https://www.google.com/maps/search/B%E1%BA%BFn+xe+bu%C3%BDt/@21.0188125,105.8386053?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,Diem xe buyt (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB-T0E1vpLdZGBpaf9k-E9fkYWLC43v2SuoTSLf51M4upEwvYivTVC_DSQCWe66__UibqsTQZISL-MeCUqxIervSe3hLwmart_ZLADzdYS2NypVvt5Ej0FO8hK_70Fneg8Nz09X2Rg=w408-h725-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"XRR2+5HJ, Khu Tap The, Khu tap the Thanh Xuan Bac, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+xe+bu%C3%BDt/data=!4m7!3m6!1s0x3135ada02e749a65:0x4fb3b9a70e4c629e!8m2!3d20.9904529!4d105.8013852!16s%2Fg%2F11ngjyfl7g!19sChIJZZp0LqCtNTERnmJMDqe5s08?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ88IbTs2rNTERZf3QVZfDaZA,Bai trong o to mat tien Hoang Quoc Viet,,,0,0,"Name: Bai do xe VNPT-Technology +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+VNPT-Technology/@21.0468449,105.79183499999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe may +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/@21.0507824,105.8033172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Nha de Xe dap Xe may +Link: https://www.google.com/maps/search/Nh%C3%A0+%C4%91%E1%BB%83+Xe+%C4%91%E1%BA%A1p+Xe+m%C3%A1y/@21.0492037,105.8010137?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Gui Xe Dh Mo-dia Chat +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C4%90h+M%E1%BB%8F-%C4%91%E1%BB%8Ba+Ch%E1%BA%A5t/@21.071608800000003,105.7776627?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai trong o to mat tien Hoang Quoc Viet (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB9lXkfHja06adAcuxK1Zn_1z7qeg3FA5gKKLeJzRrWUBYubR3Lcj4CvDiC-zxctH66A7ihieDZct2x44BzXm2jyC2o2d2fABEq0c9M_p6MCcP2qtsjxr2DcCtT6G4GLonBqLAI=w408-h544-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"122 Hoang Quoc Viet, Co Nhue, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+tr%C3%B4ng+%C3%B4+t%C3%B4+m%E1%BA%B7t+ti%E1%BB%81n+Ho%C3%A0ng+Qu%E1%BB%91c+Vi%E1%BB%87t/data=!4m7!3m6!1s0x3135abcd4e1bc2f3:0x9069c39755d0fd65!8m2!3d21.04647!4d105.792306!16s%2Fg%2F11nxq9wvng!19sChIJ88IbTs2rNTERZf3QVZfDaZA?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJmcAx9LJUNDERKBFGzbpDQOQ,Ben Xe My Dinh,,,1279,3.7,"Name: Ben Xe Khach My Dinh +Link: https://www.google.com/maps/search/B%E1%BA%BFn+Xe+Kh%C3%A1ch+M%E1%BB%B9+%C4%90%C3%ACnh/@21.0283653,105.7782948?authuser=0&hl=en&entry=ttu +Reviews: 73 reviews + +Name: Ben xe My Dinh +Link: https://www.google.com/maps/search/B%E1%BA%BFn+xe+M%E1%BB%B9+%C4%90%C3%ACnh/@21.02758,105.77875900000001?authuser=0&hl=en&entry=ttu +Reviews: 32 reviews + +Name: Ben Xe Bus My Dinh +Link: https://www.google.com/maps/search/B%E1%BA%BFn+Xe+Bus+M%E1%BB%B9+%C4%90%C3%ACnh/@21.0263377,105.77622129999999?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Ben Xe My Dinh Ha Noi +Link: https://www.google.com/maps/search/B%E1%BA%BFn+Xe+M%E1%BB%B9+%C4%90%C3%ACnh+H%C3%A0+N%E1%BB%99i/@21.0284308,105.77647569999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Trung Tam Dieu Hanh Ben Xe My Dinh +Link: https://www.google.com/maps/search/Trung+T%C3%A2m+%C4%90i%E1%BB%81u+H%C3%A0nh+B%E1%BA%BFn+Xe+M%E1%BB%B9+%C4%90%C3%ACnh/@21.027563699999998,105.7786282?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Ben Xe My Dinh (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB_MIeJ1AIhk7GQ7CMKnq-fi5tHVSUktmR_2BTtMEJRwvxXVcIXB5IDKNeEwpfIPyX491jCDssVWS96XLum8pOWDExkp7blSTE_H9LnsegKRgTX91xTGIbn3tWsVHxN42LzLlkAz=w408-h306-k-no=s1024,Bus stop,Bus stop,,,Open All Days,"My Dinh, Nam Tu Liem, Hanoi","ticket, intercity, bus terminus, money, scam, cost, buses in japan, washroom, driver",https://www.google.com/maps/place/B%E1%BA%BFn+Xe+M%E1%BB%B9+%C4%90%C3%ACnh/data=!4m7!3m6!1s0x313454b2f431c099:0xe44043bacd461128!8m2!3d21.0284297!4d105.7782687!16s%2Fg%2F1tgdqlwg!19sChIJmcAx9LJUNDERKBFGzbpDQOQ?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ4_UZWjOrNTERKo-ZL-WgQR8,Nn,,,0,0,"Name: EVN parking lot +Link: https://www.google.com/maps/search/EVN+parking+lot/@21.0439337,105.8429688?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Thuong tin ha noi +Link: https://www.google.com/maps/search/Th%C6%B0%E1%BB%9Dng+t%C3%ADn+h%C3%A0+n%E1%BB%99i/@21.034584,105.80505629999999?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Cong ty TNHH Thuong mai dich vu N&N Ha Noi +Link: https://www.google.com/maps/search/C%C3%B4ng+ty+TNHH+Th%C6%B0%C6%A1ng+m%E1%BA%A1i+d%E1%BB%8Bch+v%E1%BB%A5+N%26N+H%C3%A0+N%E1%BB%99i/@21.012101299999998,105.8076475?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Dien dung xe +Link: https://www.google.com/maps/search/%C4%90i%C3%AA%CC%89n+d%C6%B0%CC%80ng+xe/@21.0413088,105.7729712?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Cong Ty Tnhh O To Dich Vu Van An +Link: https://www.google.com/maps/search/C%C3%B4ng+Ty+Tnhh+%C3%94+T%C3%B4+D%E1%BB%8Bch+V%E1%BB%A5+V%E1%BA%A1n+An/@21.0329251,105.8024171?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Nn (Owner),,,Parking lot,Parking lot,,,Open All Days,"58 Ngach 18 Ng. 66 P. Dich Vong Hau, Dich Vong Hau, Cau Giay, Ha Noi",,https://www.google.com/maps/place/Nn/data=!4m7!3m6!1s0x3135ab335a19f5e3:0x1f41a0e52f998f2a!8m2!3d21.033067!4d105.784169!16s%2Fg%2F11kb3l6r77!19sChIJ4_UZWjOrNTERKo-ZL-WgQR8?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ2ShJXWCsNTERoaQKC6BGWjE,Bai gui xe so 1,,,12,4.2,"Name: Bai Do Xe So 2 Dinh Cong +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+S%E1%BB%91+2+%C4%90%E1%BB%8Bnh+C%C3%B4ng/@20.986452,105.82737949999999?authuser=0&hl=en&entry=ttu +Reviews: 17 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9867769,105.8198008?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4/@20.9826099,105.8278894?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.9865449,105.8308979?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai gui xe so 1 (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB8qAGKsqb-M-GRbBlj7yI7fLEC65riO7oY1_EjKivuOcAe5YrI9TEsJxK4fEMUQ1LYohLzr8igolz-nV_CQkvsughOMKL2VfzDitUDRtmaPbjvyR2xsLnNyW947bJEYKvqNoKAs=w408-h544-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"XRQJ+2HQ, Dinh Cong, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+s%E1%BB%91+1/data=!4m7!3m6!1s0x3135ac605d4928d9:0x315a46a00b0aa4a1!8m2!3d20.9875846!4d105.8314704!16s%2Fg%2F11c4ww3cx1!19sChIJ2ShJXWCsNTERoaQKC6BGWjE?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJR34Xus1VNDERJCdDK1cGpcY,Nha Xe Hoa Hong,,,3,3.7,"Name: Nha xe Hao Huong +Link: https://www.google.com/maps/search/Nh%C3%A0+xe+H%C3%A0o+H%C6%B0%C6%A1ng/@21.0438196,105.774295?authuser=0&hl=en&entry=ttu +Reviews: 69 reviews + +Name: Van Phong Nha Xe Hoa Hong +Link: https://www.google.com/maps/search/V%C4%83n+Ph%C3%B2ng+Nh%C3%A0+Xe+Hoa+H%E1%BB%93ng/@21.039684299999998,105.77272049999999?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Hop tac xa van tai Xe Hong Ha +Link: https://www.google.com/maps/search/H%E1%BB%A3p+t%C3%A1c+x%C3%A3+v%E1%BA%ADn+t%E1%BA%A3i+Xe+H%E1%BB%93ng+H%C3%A0/@21.0326097,105.7981282?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: hop tac xa van tai Xe Hong Ha +Link: https://www.google.com/maps/search/h%E1%BB%A3p+t%C3%A1c+x%C3%A3+v%E1%BA%ADn+t%E1%BA%A3i+Xe+H%E1%BB%93ng+H%C3%A0/@21.0366917,105.7919709?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Dien dung xe +Link: https://www.google.com/maps/search/%C4%90i%C3%AA%CC%89n+d%C6%B0%CC%80ng+xe/@21.0413088,105.7729712?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0935 086 111,1,Nha Xe Hoa Hong (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB-AkWjkvqmLkXZf0tQnvM88yenpCr33xKEX9z82AjGFPamEQwQw4KNKBkOhssrMFLDNbmASUmIZUakvVvUfyqYl-oJH9n2pE2dvv6OoXMjUnHX0O-Lhykm9GeUIH8DRTX7vIdPi=w408-h408-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"36 P. Tran Vy, Mai Dich, Cau Giay, Ha Noi",,https://www.google.com/maps/place/Nh%C3%A0+Xe+Hoa+H%E1%BB%93ng/data=!4m7!3m6!1s0x313455cdba177e47:0xc6a506572b432724!8m2!3d21.0422086!4d105.7741517!16s%2Fg%2F11vknbf1_z!19sChIJR34Xus1VNDERJCdDK1cGpcY?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJUdRruP-tNTER_MllgKhtTfI,Bai gui xe,,,1,4,"Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe Kim Giang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Kim+Giang/@20.979834,105.814644?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Kim Van +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Kim+V%C4%83n/@20.9754531,105.82180749999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+xe+oto/@20.998038299999997,105.8050507?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe +Link: https://www.google.com/maps/search/B%C3%A3i+xe/@20.995946099999998,105.82298229999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai gui xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"So 73 Ngh. 3/4 P. Hoang Dao Thanh, Kim Giang, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe/data=!4m7!3m6!1s0x3135adffb86bd451:0xf24d6da88065c9fc!8m2!3d20.9820363!4d105.8123172!16s%2Fg%2F11r519zrlp!19sChIJUdRruP-tNTER_MllgKhtTfI?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJBUu-kxmrNTERpB_Jh9KhCwM,Diem Do Xe O To,,,0,0,"Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe Nguyen Thi Due +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%E1%BB%85n+Th%E1%BB%8B+Du%E1%BB%87/@21.019136,105.79005099999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Diem Do Xe O To (Owner),,,Parking lot,Parking lot,,,Open All Days,"266 D. Thuy Khue, Buoi, Tay Ho, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4/data=!4m7!3m6!1s0x3135ab1993be4b05:0x30ba1d287c91fa4!8m2!3d21.0477423!4d105.8104151!16s%2Fg%2F11j4svzz4g!19sChIJBUu-kxmrNTERpB_Jh9KhCwM?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJZWqVD1itNTERif8C2vR_UZw,"Viet Chao - He thong do xe thong minh, bai do xe tu dong","Cong ty Co phan Viet Chao xin gui toi Quy khach hang loi chao tran trong nhat! + +Duoc thanh lap tu nam 2004, trai qua hon 20 nam phat trien va truong thanh, voi su doan ket, nhiet huyet cua tung can bo cong ty, duoi su lanh dao tam huyet cua ban lanh dao, den nay Cong ty Co phan Viet Chao da phat trien va tro thanh Don vi cung cap va lap dat He thong do xe thong minh TOP 1 Viet Nam. + +* Thi cong va lap dat hon 5000+ cho do cho cac du an VIP nhu Bason Homes, Luminere Tay Mo, Ghomes, Delasol, Thao Dien, Tien Bo Plaza... +* La don vi tien phong thi cong va lap dat du an He thong do xe thong minh dau tien tai Viet Nam tu nam 2009 +* San pham nhap khau 100% dong bo tu nha may TOP 1 he thong do xe thong minh the gioi - XIZI iParking",,2,4.5,"Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Do Xe Thong Minh Hoa Vu +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+Th%C3%B4ng+Minh+H%C3%B3a+V%C5%A9/@21.0379708,105.77762980000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe 81 Lang Ha +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+81+L%C3%A1ng+H%E1%BA%A1/@21.017794199999997,105.8168796?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Do Xe O To Cho Yen Phuc +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4+Ch%E1%BB%A3+Y%C3%AAn+Ph%C3%BAc/@20.9693032,105.7860858?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe thong minh car parking +Link: https://www.google.com/maps/search/B%C3%A3i+xe+th%C3%B4ng+minh+car+parking/@21.0019779,105.8273997?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",https://doxethongminh.vn/,0898 552 888,,"Viet Chao - He thong do xe thong minh, bai do xe tu dong (Owner)",https://www.google.com/maps/contrib/110255192378328704943,https://lh3.googleusercontent.com/p/AF1QipPt0IZAYEoGrRrTRj6IYdRqkNx8pvmgjB_pmlU=w408-h306-k-no=s1024,Parking lot,Parking lot,8 AM-5:30 PM,,Sunday,"61, ngo 66 P. Trieu Khuc, Tan Trieu, Thanh Tri, Ha Noi 100000",,"https://www.google.com/maps/place/Vi%E1%BB%87t+Ch%C3%A0o+-+H%E1%BB%87+th%E1%BB%91ng+%C4%91%E1%BB%97+xe+th%C3%B4ng+minh,+b%C3%A3i+%C4%91%E1%BB%97+xe+t%E1%BB%B1+%C4%91%E1%BB%99ng/data=!4m7!3m6!1s0x3135ad580f956a65:0x9c517ff4da02ff89!8m2!3d20.9827668!4d105.7987087!16s%2Fg%2F11y8m5wmsv!19sChIJZWqVD1itNTERif8C2vR_UZw?authuser=0&hl=en&rclk=1",bai do xe gan day +ChIJzwl6_sSrNTERMwIx63gbe4k,Van phong xe Ha Noi - Ninh Binh,,,0,0,"Name: Ninh Binh Car Rental +Link: https://www.google.com/maps/search/Ninh+Binh+Car+Rental/@21.035087,105.85348599999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Hello Ninh Binh Bus +Link: https://www.google.com/maps/search/Hello+Ninh+Binh+Bus/@21.030069599999997,105.8469367?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Nha xe Manh Phuong - Nho Quan Me - Gia Vien Ninh Binh +Link: https://www.google.com/maps/search/Nh%C3%A0+xe+M%E1%BA%A1nh+Ph%C6%B0%C6%A1ng+-+Nho+Quan+Me+-+Gia+Vi%E1%BB%85n+Ninh+B%C3%ACnh/@21.040118,105.776187?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Ninh Binh Car Rentals +Link: https://www.google.com/maps/search/Ninh+Binh+Car+Rentals/@21.034629499999998,105.851575?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai trong xe Phan ke binh +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+Phan+k%E1%BA%BF+b%C3%ADnh/@21.0343043,105.8122015?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",http://ninhbinhcar.com/,,1,Van phong xe Ha Noi - Ninh Binh (Owner),,,Parking lot,Parking lot,,,Open All Days,"2 P. Pham Huy Thong, Ngoc Khanh, Dong Da, Ha Noi",,https://www.google.com/maps/place/V%C4%83n+ph%C3%B2ng+xe+H%C3%A0+N%E1%BB%99i+-+Ninh+B%C3%ACnh/data=!4m7!3m6!1s0x3135abc4fe7a09cf:0x897b1b78eb310233!8m2!3d21.0293339!4d105.811462!16s%2Fg%2F11t_hxhxw2!19sChIJzwl6_sSrNTERMwIx63gbe4k?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJK1tojT2tNTERYA9fJpny5FM,Bai Do Xe 195 Dinh Cong Ha,"Nhan trong xe o to, bai xe co mai che mo 24/24",,2,3,"Name: Bai gui xe so 1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+s%E1%BB%91+1/@20.987584599999998,105.8314704?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai 24/2 +Link: https://www.google.com/maps/search/B%C3%A3i+24%2F2/@20.9831403,105.8303121?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe Cong vien Thanh Xuan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+C%C3%B4ng+vi%C3%AAn+Thanh+Xu%C3%A2n/@21.004293699999998,105.79618870000002?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0975 603 553,,Bai Do Xe 195 Dinh Cong Ha (Owner),https://www.google.com/maps/contrib/112161675954824910059,https://lh3.googleusercontent.com/p/AF1QipPQ8S4V7As0LIiVle1SxEvwijgOQPveYvjAujFv=w408-h459-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"195 Dinh Cong Ha, Dinh Cong, Hoang Mai, Ha Noi 100000",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%97+Xe+195+%C4%90%E1%BB%8Bnh+C%C3%B4ng+H%E1%BA%A1/data=!4m7!3m6!1s0x3135ad3d8d685b2b:0x53e4f299265f0f60!8m2!3d20.9828599!4d105.8254294!16s%2Fg%2F11g0g6bjqy!19sChIJK1tojT2tNTERYA9fJpny5FM?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJTZImQbOrNTERfIURI7SiWa0,Diem Gui Xe,Nhan trong giu xe oto xe may,,1,1,"Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@21.041933,105.78874599999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/Bai+Gui+Xe/@21.0199227,105.85929739999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Truong Man Non Sao Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Tr%C6%B0%E1%BB%9Dng+M%E1%BA%A7n+Non+Sao+Mai/@21.0453212,105.77690919999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Dien dung xe +Link: https://www.google.com/maps/search/%C4%90i%C3%AA%CC%89n+d%C6%B0%CC%80ng+xe/@21.0413088,105.7729712?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0962 606 612,,Diem Gui Xe (Owner),https://www.google.com/maps/contrib/116044309548415463096,https://lh3.googleusercontent.com/p/AF1QipMg6u106cqGovIpha7LU4uyXXr7JIToKrx9VFT0=w408-h544-k-no=s1024,Bicycle rack,Bicycle rack,Open 24 hours,,Open All Days,"Ngo 1, Dich Vong Hau, Cau Giay, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+G%E1%BB%ADi+Xe/data=!4m7!3m6!1s0x3135abb34126924d:0xad59a2b42311857c!8m2!3d21.0330475!4d105.7881365!16s%2Fg%2F11vhchyqlx!19sChIJTZImQbOrNTERfIURI7SiWa0?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJeTfecKStNTERf3B8oBCG-ZY,Bai do xe Kim Giang,,,1,5,"Name: Temporary car parking place +Link: https://www.google.com/maps/search/Temporary+car+parking+place/@20.9813418,105.8152956?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe Kim Van +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Kim+V%C4%83n/@20.9754531,105.82180749999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe may +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/@21.0507824,105.8033172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,Bai do xe Kim Giang (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB_khH7LjFGLhGBtgghl1ddHB_6YUMuVWNSjUvJrLA4xHJWXMoiWQYP0knlI_mx_YOY0I3NYxhacUkXhTm4_sz2-wi3u5LGHo7XrUZqGVrWkA2apuBr7-xtKOGU0j-A-2g9aL1_sGw=w532-h240-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"XRH7+WVJ, Kim Van, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+Kim+Giang/data=!4m7!3m6!1s0x3135ada470de3779:0x96f98610a07c707f!8m2!3d20.979834!4d105.814644!16s%2Fg%2F11h7nb9ymd!19sChIJeTfecKStNTERf3B8oBCG-ZY?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJRVf6TDqtNTEREvXQWHrczgg,Diem don Bus SDV,,,1,5,"Name: Bus stop +Link: https://www.google.com/maps/search/Bus+stop/@21.0293787,105.803663?authuser=0&hl=en&entry=ttu +Reviews: 81 reviews + +Name: Canh Dai Hoc Khoa Hoc Tu Nhien - 322 Nguyen Trai - Thanh Xuan Trung +Link: https://www.google.com/maps/search/C%E1%BA%A1nh+%C4%90%E1%BA%A1i+H%E1%BB%8Dc+Khoa+H%E1%BB%8Dc+T%E1%BB%B1+Nhi%C3%AAn+-+322+Nguy%E1%BB%85n+Tr%C3%A3i+-+Thanh+Xu%C3%A2n+Trung/@20.9958933,105.809136?authuser=0&hl=en&entry=ttu +Reviews: 21 reviews + +Name: Diem dan ve xe Bus +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+d%C3%A1n+v%C3%A9+xe+Bus/@21.0121786,105.80169079999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Diem bus semv +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+bus+semv/@20.995165999999998,105.80874100000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Diem bus SDV +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+bus+SDV/@20.9950424,105.8086215?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Diem don Bus SDV (Owner),,,Parking lot,Parking lot,,,Open All Days,"332A D. Nguyen Trai, Thuong Dinh, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+%C4%91%C3%B3n+Bus+SDV/data=!4m7!3m6!1s0x3135ad3a4cfa5745:0x8cedc7a58d0f512!8m2!3d20.9951288!4d105.8086063!16s%2Fg%2F11rhwj337f!19sChIJRVf6TDqtNTEREvXQWHrczgg?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJwZXT5wlTNDEROsBOWwbG1w8,Nha do xe Galaxy,,,5,3.4,"Name: Bai Do Xe O To Cho Yen Phuc +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4+Ch%E1%BB%A3+Y%C3%AAn+Ph%C3%BAc/@20.9693032,105.7860858?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: bai xe phong thuy +Link: https://www.google.com/maps/search/b%C3%A3i+xe+phong+thu%C3%BD/@20.9712452,105.79221369999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe MQ VN +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+MQ+VN/@20.9751066,105.76271729999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0988 556 288,,Nha do xe Galaxy (Owner),https://www.google.com/maps/contrib/114306118638948385658,https://lh3.googleusercontent.com/p/AF1QipMZgetm3rD9hx1BJqBpK5KesVWdD1buwVrXCFAi=w426-h240-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"9 Galaxy 9, Du an Ngan Ha, Ha Dong, Ha Noi 000084",,https://www.google.com/maps/place/Nh%C3%A0+%C4%91%E1%BB%97+xe+Galaxy/data=!4m7!3m6!1s0x31345309e7d395c1:0xfd7c6065b4ec03a!8m2!3d20.9831051!4d105.7770085!16s%2Fg%2F11vyhy1gt1!19sChIJwZXT5wlTNDEROsBOWwbG1w8?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ1fKCCbmrNTERZpw-XDTifHo,Bai do xe may,,,1,1,"Name: Car park Send CV Nghia +Link: https://www.google.com/maps/search/Car+park+Send+CV+Nghia/@21.044840999999998,105.79744409999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.006772599999998,105.86952029999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai trong o to mat tien Hoang Quoc Viet +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+%C3%B4+t%C3%B4+m%E1%BA%B7t+ti%E1%BB%81n+Ho%C3%A0ng+Qu%E1%BB%91c+Vi%E1%BB%87t/@21.04647,105.792306?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe Nguyen Thi Due +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Nguy%E1%BB%85n+Th%E1%BB%8B+Du%E1%BB%87/@21.019136,105.79005099999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe may (Owner),,,Parking lot,Parking lot,,,Open All Days,"64 Ng. 45 D. Vo Chi, Nghia Do, Cau Giay, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/data=!4m7!3m6!1s0x3135abb90982f2d5:0x7a7ce2345c3e9c66!8m2!3d21.0507824!4d105.8033172!16s%2Fg%2F11thc7wh0k!19sChIJ1fKCCbmrNTERZpw-XDTifHo?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJnaOEbyatNTERVZfvzqX9b9w,Oto,,,0,0,"Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Do Xe 195 Dinh Cong Ha +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+195+%C4%90%E1%BB%8Bnh+C%C3%B4ng+H%E1%BA%A1/@20.982859899999998,105.82542939999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai 24/2 +Link: https://www.google.com/maps/search/B%C3%A3i+24%2F2/@20.9831403,105.8303121?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.9865449,105.8308979?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Oto (Owner),,,Parking lot,Parking lot,,,Open All Days,"186 Dinh Cong Ha, Dinh Cong, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/Oto/data=!4m7!3m6!1s0x3135ad266f84a39d:0xdc6ffda5ceef9755!8m2!3d20.9840065!4d105.8254526!16s%2Fg%2F11s9h88k3d!19sChIJnaOEbyatNTERVZfvzqX9b9w?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJBVwvEPq_s6ERWP4G7-rFxwk,Xe KaLong My Dinh - Mong Cai,"XE KA LONG 22 CABIN: MY DINH: 20h30' - MONG CAI: 22h00' +Tu 100K: MY DINH - NOI BAI -BAC NINH/ SAMSUNG YEN PHONG /KCN QUE VO 1,2 - CHI LINH/ SAO DO - DONG TRIEU - UONG BI - HA LONG - CAM PHA / CUA ONG - TIEN YEN - DAM HA - HA COI / KCN TEXHON - MONG CAI +# Your reliable transportor # +#benxemydinh +Xe Ha Noi Mong Cai +Xe giuong nam Mong Cai - Ha Noi +Xe kalong mong cai - ha noi +Xe giuong nam Kalong Mong cai - Ha Noi +XE DEM giuong nam cao cap KA LONG tuyen Mong Cai +Nha xe di Mong Cai Ha Noi",,17,4.4,"Name: Xe Hung Long +Link: https://www.google.com/maps/search/Xe+H%C6%B0ng+Long/@21.0217586,105.7788046?authuser=0&hl=en&entry=ttu +Reviews: 273 reviews + +Name: Nha Xe Nhuan Nam +Link: https://www.google.com/maps/search/Nh%C3%A0+Xe+Nhu%E1%BA%ADn+N%C4%83m/@21.0213057,105.778685?authuser=0&hl=en&entry=ttu +Reviews: 31 reviews + +Name: VP nha xe Khanh Nam +Link: https://www.google.com/maps/search/VP+nh%C3%A0+xe+Kh%C3%A1nh+Nam/@21.0216328,105.77881169999999?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Xe Bao Khang Limousine +Link: https://www.google.com/maps/search/Xe+B%E1%BA%A3o+Khang+Limousine/@21.021198,105.77859149999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Ve xe Ha Noi - Ha Long - Mong Cai +Link: https://www.google.com/maps/search/V%C3%A9+xe+H%C3%A0+N%E1%BB%99i+-+H%E1%BA%A1+Long+-+M%C3%B3ng+C%C3%A1i/@21.0170791,105.78364649999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,0965 688 588,,Xe KaLong My Dinh - Mong Cai (Owner),https://www.google.com/maps/contrib/116697375080879695301,https://lh3.googleusercontent.com/p/AF1QipMw3MmpuCNcXS8WHEN9TlkqiIlCSHQ0QooaUnbi=w408-h408-k-no=s1024,Transportation service,Transportation service,5 AM-11:30 PM,,Open All Days,"20 D. Pham Hung, My Dinh, Ha Noi, 100000",,https://www.google.com/maps/place/Xe+KaLong+M%E1%BB%B9+%C4%90%C3%ACnh+-+M%C3%B3ng+C%C3%A1i/data=!4m7!3m6!1s0xa1b3bffa102f5c05:0x9c7c5eaef06fe58!8m2!3d21.0280686!4d105.7777843!16s%2Fg%2F11p_8lqt7_!19sChIJBVwvEPq_s6ERWP4G7-rFxwk?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJjzaRxXurNTERaGphkcz9-JI,Bai do xe tho quan,,,2,4.5,"Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0149662,105.84152209999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe CP taxi Ha Noi +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+CP+taxi+H%C3%A0+N%E1%BB%99i/@21.012037499999998,105.81464059999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe tho quan (Owner),,,Parking lot,Parking lot,,,Open All Days,"2R8P+83R, Tho Quan, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/data=!4m7!3m6!1s0x3135ab7bc591368f:0x92f8fdcc91616a68!8m2!3d21.015855!4d105.8351441!16s%2Fg%2F11h1mkq_rv!19sChIJjzaRxXurNTERaGphkcz9-JI?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ587QoHKtNTER1dzE3kglWt0,Bai Xe Chua Boc,,,12,1.8,"Name: Bai De Xe Chua Lang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%83+Xe+Ch%C3%B9a+L%C3%A1ng/@21.0231036,105.80317819999999?authuser=0&hl=en&entry=ttu +Reviews: 10 reviews + +Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,0902 188 080,1,Bai Xe Chua Boc (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB8dk7N0UThwpnFjBhu-_ehs-O7k1_1b0TgbeoqHdL4jTCsO6_vIL-f_QxltRcgm7Zq1xW3ctsYazrVxCWMylakCKixlDkjqwMFTaisSpj5AFGEaqf2n81ut5OKoLmcIZjfd_4-i=w408-h306-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"8 P. Chua Boc, Quang Trung, Dong Da, Ha Noi 11514",,https://www.google.com/maps/place/B%C3%A3i+Xe+Ch%C3%B9a+B%E1%BB%99c/data=!4m7!3m6!1s0x3135ad72a0d0cee7:0xdd5a2548dec4dcd5!8m2!3d21.0073957!4d105.8293817!16s%2Fg%2F11tszzms3v!19sChIJ587QoHKtNTER1dzE3kglWt0?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJZ4_97dSrNTER8n0BUmyQuMA,Bai do xe,,,2,4.5,"Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai xe Cong ty TNHH Phat trien dich vu Dung Truong +Link: https://www.google.com/maps/search/B%C3%A3i+xe+C%C3%B4ng+ty+TNHH+Ph%C3%A1t+tri%E1%BB%83n+d%E1%BB%8Bch+v%E1%BB%A5+D%C5%A9ng+Tr%C6%B0%C6%A1ng/@21.0205669,105.83865070000002?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"293 D. Le Duan, Le Dai Hanh, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe/data=!4m7!3m6!1s0x3135abd4edfd8f67:0xc0b8906c52017df2!8m2!3d21.0149662!4d105.8415221!16s%2Fg%2F11jpyv8fqj!19sChIJZ4_97dSrNTER8n0BUmyQuMA?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJPaF0KFKtNTERiNuw3W92AJw,Bai Gui Xe D4-D6,,,2,5,"Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0149662,105.84152209999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",http://hust.edu.vn/,,1,Bai Gui Xe D4-D6 (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB8mxrxQbSPUR8i3zPsx-VU44A0cYUKO85RI8Hln7Ne1ZvwsuoXoOArXBdnAqj85bu3dC38GNcrnoQiGQCKo_E43xENfvSFG8s8ga-CrD8-5wnDBBWfbhDjlOCmsrB_6XEMcizA=w408-h544-k-no=s1024,Parking lot,Parking lot,6 AM-6 PM,,Open All Days,"17duong D. Giai Phong, Dong Tam, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/data=!4m7!3m6!1s0x3135ad522874a13d:0x9c00766fddb0db88!8m2!3d21.004815!4d105.8422449!16s%2Fg%2F11fpqxgj7g!19sChIJPaF0KFKtNTERiNuw3W92AJw?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJg_VX_WetNTERC5WQBOMdQsM,Bai do xe,,,0,0,"Name: Bai Do Xe So 2 Dinh Cong +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+S%E1%BB%91+2+%C4%90%E1%BB%8Bnh+C%C3%B4ng/@20.986452,105.82737949999999?authuser=0&hl=en&entry=ttu +Reviews: 17 reviews + +Name: Bai gui xe so 1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+s%E1%BB%91+1/@20.987584599999998,105.8314704?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Oto +Link: https://www.google.com/maps/search/Oto/@20.9840065,105.82545259999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe dich vu +Link: https://www.google.com/maps/search/B%C3%A3i+xe+d%E1%BB%8Bch+v%E1%BB%A5/@20.968697799999997,105.8758929?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"Nha D, Dinh Cong, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe/data=!4m7!3m6!1s0x3135ad67fd57f583:0xc3421de30490950b!8m2!3d20.9865449!4d105.8308979!16s%2Fg%2F11nnypbvnf!19sChIJg_VX_WetNTERC5WQBOMdQsM?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJrzAzQR-tNTERjCW--qrfQrQ,Gara oto thanh do,,,1,5,"Name: Gara oto 168 (765 Nguyen Xien) +Link: https://www.google.com/maps/search/Gara+%C3%B4t%C3%B4+168+(765+Nguy%E1%BB%85n+Xi%E1%BB%83n)/@20.9794505,105.8125464?authuser=0&hl=en&entry=ttu +Reviews: 22 reviews + +Name: Garage Thanh Nam +Link: https://www.google.com/maps/search/Garage+Th%C3%A0nh+Nam/@20.9806995,105.81162859999999?authuser=0&hl=en&entry=ttu +Reviews: 15 reviews + +Name: Gara o to giang son +Link: https://www.google.com/maps/search/Gara+%C3%B4+t%C3%B4+giang+s%C6%A1n/@20.934385799999998,105.8458325?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe Kim Giang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Kim+Giang/@20.979834,105.814644?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Gara O To Gia Phat +Link: https://www.google.com/maps/search/Gara+%C3%94+T%C3%B4+Gia+Ph%C3%A1t/@20.977361,105.8140999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0989 411 029,,Gara oto thanh do (Owner),https://www.google.com/maps/contrib/105777307292850065654,https://lh3.googleusercontent.com/p/AF1QipMT0nloFCFToaq087u1jbCjfB2NW_tQm9KUefMq=w408-h543-k-no=s1024,Parking garage,Parking garage,Open 24 hours,,Open All Days,"Nghiem Xuan Yem, Dai Kim, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/Gara+%C3%B4t%C3%B4+th%C3%A0nh+%C4%91%C3%B4/data=!4m7!3m6!1s0x3135ad1f413330af:0xb442dfaafabe258c!8m2!3d20.9816067!4d105.8115938!16s%2Fg%2F11fp3l2lx8!19sChIJrzAzQR-tNTERjCW--qrfQrQ?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ1ywA8iGrNTERdypAUtqsphk,Bai gui xe 04 Tay Ho,"Bai gui, rua xe o to +Trong giu xe o to",,16,5,"Name: Bai gui xe QDNDVN +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Q%C4%90NDVN/@21.0673225,105.811123?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe - Nha co cay sung +Link: https://www.google.com/maps/search/B%C3%A3i+xe+-+Nh%C3%A0+c%C3%B3+c%C3%A2y+sung/@21.068853999999998,105.83099299999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai Xe HT +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+HT/@21.0494967,105.79735579999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0901 756 086,,Bai gui xe 04 Tay Ho (Owner),https://www.google.com/maps/contrib/103052286351299965685,https://lh3.googleusercontent.com/p/AF1QipPZLyKl1cc2TE7jiwUIeURzJ2HZYj-Xs8xNZgNj=w408-h305-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"4 D. Tay Ho, Quang An, Tay Ho, Ha Noi 10000",service,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+04+T%C3%A2y+H%E1%BB%93/data=!4m7!3m6!1s0x3135ab21f2002cd7:0x19a6acda52402a77!8m2!3d21.0661386!4d105.8259885!16s%2Fg%2F11kpntcf3j!19sChIJ1ywA8iGrNTERdypAUtqsphk?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJb45j1KSrNTERuqQniRmyAOE,BAI DO XE O TO,,,6,4.3,"Name: Bai do xe Ngoc Ha +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Ng%E1%BB%8Dc+H%C3%A0/@21.0391194,105.82903739999999?authuser=0&hl=en&entry=ttu +Reviews: 26 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9867769,105.8198008?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0190385,105.8242586?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,BAI DO XE O TO (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB_GI1f_xdE0ua0jA40gaQ_PYUZzNwSSzRTwzJMv1Os7j4wlMzcMhnJhDNgA-ytEepzfWjW6d8HPAnqlstvpL4y6QAt2W03dDjxteA9SfXdHfO8Gmajx5pod4JDb_b_DgOcPfqPuNyY3BIcy=w408-h544-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"39b P. Phuc Xa, Phuc xa, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/data=!4m7!3m6!1s0x3135aba4d4638e6f:0xe100b2198927a4ba!8m2!3d21.0478608!4d105.8457672!16s%2Fg%2F11fb2jgpx8!19sChIJb45j1KSrNTERuqQniRmyAOE?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJIwCfs3GsNTERFqKd_XtomRs,Diem Gui Xe May,,,9,4.7,"Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.006453,105.821833?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,0903 043 636,1,Diem Gui Xe May (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB-Du3lJ8O4gZcHEzukSndL0YXJILHNLJmD6F6Li-LJoJlbTRP5bJyWhBIKMM4IhdAG5DsishHseNciUbUVIwfj1Gmp0tkFL9rygMoknlifPBtfesfLzxm_K4-HEylf8tHOJxGhr8w=w408-h306-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"51/2, Ngo 128C Pho Dai La, Quan Hai Ba Trung, Thanh Pho Ha Noi, Dong Tam, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+G%E1%BB%ADi+Xe+M%C3%A1y/data=!4m7!3m6!1s0x3135ac71b39f0023:0x1b99687bfd9da216!8m2!3d20.9984002!4d105.8444061!16s%2Fg%2F11g6rkgsbg!19sChIJIwCfs3GsNTERFqKd_XtomRs?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ4-apdV-sNTERenQCsf3OdcA,Bai 24/2,,,1,5,"Name: Bai gui xe so 1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+s%E1%BB%91+1/@20.987584599999998,105.8314704?authuser=0&hl=en&entry=ttu +Reviews: 12 reviews + +Name: Bai Do Xe 195 Dinh Cong Ha +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+195+%C4%90%E1%BB%8Bnh+C%C3%B4ng+H%E1%BA%A1/@20.982859899999998,105.82542939999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4/@20.9826099,105.8278894?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe dich vu +Link: https://www.google.com/maps/search/B%C3%A3i+xe+d%E1%BB%8Bch+v%E1%BB%A5/@20.968697799999997,105.8758929?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai 24/2 (Owner),,,Parking lot,Parking lot,,,Open All Days,"4 Ng. 16 P. Dinh Cong Ha, Dinh Cong, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+24%2F2/data=!4m7!3m6!1s0x3135ac5f75a9e6e3:0xc075cefdb102747a!8m2!3d20.9831403!4d105.8303121!16s%2Fg%2F11g20w36z8!19sChIJ4-apdV-sNTERenQCsf3OdcA?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ-Xzr0nesNTER6tLlobZ4Koc,Bai gui xe C1,,,2,4.5,"Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai gui xe C1 (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB_4N6npAapG3b2vZYeX0eVUf5LuMrJ9Wjx_EeIj3h6n9iWe7jpUnEfSdTr2HdXcDRjr5H6-OvBUvlmLm4aJUiwnAMMvsr9eEDkNlKJnm8tD8HaVijEwEZI-QBVrYbLv0IVu6YUI=w408-h259-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"2R4V+XCX, P. Tran Dai Nghia, Bach Khoa, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+C1/data=!4m7!3m6!1s0x3135ac77d2eb7cf9:0x872a78b6a1e5d2ea!8m2!3d21.0074865!4d105.8435941!16s%2Fg%2F11cnwgsdc6!19sChIJ-Xzr0nesNTER6tLlobZ4Koc?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJpybTMwetNTERX5mu4eL7qCE,Bai gui xe Kim Van,,,1,5,"Name: Bai giu xe dinh Kim Lien +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+%C4%91%C3%ACnh+Kim+Li%C3%AAn/@21.010115,105.83831699999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe Kim Giang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Kim+Giang/@20.979834,105.814644?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe +Link: https://www.google.com/maps/search/B%C3%A3i+xe/@20.995946099999998,105.82298229999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai gui xe Kim Van (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB8pmEZXHc2IstcEjmcjmxdUHo5JzhLCCXCzuFGqIrablc2L2SetQJm2CHD5bl6Ugq425CH9UpfBbGcSYTM_1DbeP8bLugRgC8p9ubhLljpIaPMlYAPYXF_dRSFWY2XgjxnvV8n8=w426-h240-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"38 Ng. 282 Kim Giang, Kim Van, Thanh Xuan, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+Kim+V%C4%83n/data=!4m7!3m6!1s0x3135ad0733d326a7:0x21a8fbe2e1ae995f!8m2!3d20.9754531!4d105.8218075!16s%2Fg%2F11vf975z5j!19sChIJpybTMwetNTERX5mu4eL7qCE?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJwaY-C7-tNTERHrcg2w9AgYg,Bai do xe,,,1,4,"Name: Bai gui xe HH +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+HH/@20.962063600000004,105.8285465?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai rua xe do xe +Link: https://www.google.com/maps/search/B%C3%A3i+r%E1%BB%ADa+xe+%C4%91%E1%BB%97+xe/@20.9834615,105.8704131?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,Bai do xe (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB-QCKtTIWs-5v8WYK1gBPKshgA7r-B-E32lEAJdIUQUT55O7ChRCqpcm2k_1vISh-QXog32_gFPJMmDbqop8XqjN3d4T1L-rHARLk5tXqpTbwWJkdjdXFPjaNWpS_Fua5wZs1nqQg=w426-h240-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"XR8F+9HJ, Hoang Liet, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe/data=!4m7!3m6!1s0x3135adbf0b3ea6c1:0x8881400fdb20b71e!8m2!3d20.965961!4d105.8238765!16s%2Fg%2F11ffm06pg6!19sChIJwaY-C7-tNTERHrcg2w9AgYg?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJMxjdePKrNTERhz2JjPiy-w0,Bai xe Cong ty TNHH Phat trien dich vu Dung Truong,Trong giu xe o to va xe may 24/24h,,0,0,"Name: Bai do xe Truong Chinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Tr%C6%B0%E1%BB%9Dng+Chinh/@21.0018285,105.8229903?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0149662,105.84152209999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe Dung Ngong +Link: https://www.google.com/maps/search/B%C3%A3i+xe+D%C5%A9ng+Ng%E1%BB%8Dng/@20.9684492,105.8788809?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0902 061 975,,Bai xe Cong ty TNHH Phat trien dich vu Dung Truong (Owner),https://www.google.com/maps/contrib/113229938671280041908,https://lh3.googleusercontent.com/p/AF1QipPorcNWMqpft7xoDLzZPmbMoKKz0VuCDPzbQRzq=w408-h278-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"82 Ng. Trung Tien, Pho, Dong Da, Ha Noi 10000",,https://www.google.com/maps/place/B%C3%A3i+xe+C%C3%B4ng+ty+TNHH+Ph%C3%A1t+tri%E1%BB%83n+d%E1%BB%8Bch+v%E1%BB%A5+D%C5%A9ng+Tr%C6%B0%C6%A1ng/data=!4m7!3m6!1s0x3135abf278dd1833:0xdfbb2f88c893d87!8m2!3d21.0205669!4d105.8386507!16s%2Fg%2F11r4jhfp2k!19sChIJMxjdePKrNTERhz2JjPiy-w0?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJST0r4rytNTERswWzF-k_Xvc,Bai gui xe D3-5,,,5,3.4,"Name: Diem Gui Xe May +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+G%E1%BB%ADi+Xe+M%C3%A1y/@20.9984002,105.8444061?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai gui xe D3-5 (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB8p_imfI0xbXeo7srzsAOlhmx_JEWzTJNaN9T0dB7R_-EF3uJQn2wSlVWk9f78AXCufcLefVpjOZXVPsar2o6iNaNf6tgfTkXwbMJ92JF0FUcipYMugCnueR_2qD8TTrGEEsWgBnQ=w408-h306-k-no=s1024,Parking lot for motorcycles,Parking lot for motorcycles,6 AM-10 PM,,Open All Days,"2R3W+W58, Bai gui xe, Bach Khoa, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/data=!4m7!3m6!1s0x3135adbce22b3d49:0xf75e3fe917b305b3!8m2!3d21.0047785!4d105.8454584!16s%2Fg%2F11fj171gkr!19sChIJST0r4rytNTERswWzF-k_Xvc?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ8YIFC0dTNDER6Wxkw2EWxeg,Bai do xe MQ VN,,,0,0,"Name: Bai Gui Xe Huy Hoang +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+Huy+Ho%C3%A0ng/@20.9621674,105.7984347?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe Kim Giang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Kim+Giang/@20.979834,105.814644?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Gui Xe O To Khach San Muong Thanh +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4+Kh%C3%A1ch+S%E1%BA%A1n+M%C6%B0%E1%BB%9Dng+Thanh/@20.960570999999998,105.791744?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe CT1B2 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+CT1B2/@20.9637127,105.792153?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe MQ VN (Owner),,,Parking lot,Parking lot,,,Open All Days,"CT4 Hyundai, Ha Dong, Ha Noi 100000",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+MQ+VN/data=!4m7!3m6!1s0x313453470b0582f1:0xe8c51661c3646ce9!8m2!3d20.9751066!4d105.7627173!16s%2Fg%2F11q310r_65!19sChIJ8YIFC0dTNDER6Wxkw2EWxeg?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ2TOjjC1VNDERTXzzmAT7Chc,Bai Gui Xe Dh Mo-dia Chat,,,0,0,"Name: Diem do xe cua Thuc +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%91%E1%BB%97+xe+c%E1%BB%A7a+Th%E1%BB%B1c/@21.066626100000004,105.7806463?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Diem trong giu xe o to ngay dem +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+tr%C3%B4ng+gi%E1%BB%AF+xe+%C3%B4+t%C3%B4+ng%C3%A0y+%C4%91%C3%AAm/@21.0843843,105.77159619999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe may +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/@21.0507824,105.8033172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,Bai Gui Xe Dh Mo-dia Chat (Owner),,,Parking garage,Parking garage,Open 24 hours,,Open All Days,"3QCH+J3V, Co Nhue, Bac Tu Liem, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe+%C4%90h+M%E1%BB%8F-%C4%91%E1%BB%8Ba+Ch%E1%BA%A5t/data=!4m7!3m6!1s0x3134552d8ca333d9:0x170afb0498f37c4d!8m2!3d21.0716088!4d105.7776627!16s%2Fg%2F11gdqtqzdd!19sChIJ2TOjjC1VNDERTXzzmAT7Chc?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJZVap4pKtNTER3CsCs-bnXak,Bai xe Tinh Van Quan,,,5,4.8,"Name: Bai do xe Tinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+T%C4%A9nh/@20.9582664,105.7620881?authuser=0&hl=en&entry=ttu +Reviews: 31 reviews + +Name: Bai Gui Xe O To Khach San Muong Thanh +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4+Kh%C3%A1ch+S%E1%BA%A1n+M%C6%B0%E1%BB%9Dng+Thanh/@20.960570999999998,105.791744?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe MQ VN +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+MQ+VN/@20.9751066,105.76271729999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe CT1B2 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+CT1B2/@20.9637127,105.792153?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: bai xe phong thuy +Link: https://www.google.com/maps/search/b%C3%A3i+xe+phong+thu%C3%BD/@20.9712452,105.79221369999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai xe Tinh Van Quan (Owner),,,Parking lot,Parking lot,,,Open All Days,"265 Chien Thang, P. Van Quan, Ha Dong, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+T%C4%A9nh+V%C4%83n+Qu%C3%A1n/data=!4m7!3m6!1s0x3135ad92e2a95665:0xa95de7e6b3022bdc!8m2!3d20.9764136!4d105.7980059!16s%2Fg%2F11swzk2rsz!19sChIJZVap4pKtNTER3CsCs-bnXak?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJk5eDYACtNTERtKSkNgN8DvY,BAI XE VAN THUAN - Xe Thanh Lan Bac Giang Bac Ninh,,,4,5,"Name: Cay xang Van Thuan +Link: https://www.google.com/maps/search/C%C3%A2y+x%C4%83ng+V%E1%BA%A1n+Thu%E1%BA%ADn/@20.9746125,105.8093141?authuser=0&hl=en&entry=ttu +Reviews: 259 reviews + +Name: Cong ty CP DT va KD XNK Van Thuan +Link: https://www.google.com/maps/search/C%C3%B4ng+ty+CP+%C4%90T+v%C3%A0+KD+XNK+V%E1%BA%A1n+Thu%E1%BA%ADn/@20.9745866,105.80911479999999?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Bai xe van tai bac nam +Link: https://www.google.com/maps/search/B%C3%A3i+xe+v%E1%BA%ADn+t%E1%BA%A3i+b%E1%BA%AFc+nam/@20.9796342,105.8877131?authuser=0&hl=en&entry=ttu +Reviews: 8 reviews + +Name: Bai xe Van Thuan . Nha xe Gia huy - HP +Link: https://www.google.com/maps/search/B%C3%A3i+xe+V%E1%BA%A1n+Thu%E1%BA%ADn+.+Nh%C3%A0+xe+Gia+huy+-+HP/@20.9748098,105.80950829999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Chinh Huyen - Van Thuan +Link: https://www.google.com/maps/search/Ch%C3%ADnh+Huy%E1%BB%81n+-+V%E1%BA%A1n+Thu%E1%BA%ADn/@20.9748195,105.80938619999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,BAI XE VAN THUAN - Xe Thanh Lan Bac Giang Bac Ninh (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB_ZJPPs9nnuMhqIdh1H-Ta1NNL0GVh3Lba4y8sBvi3xm84y_bjEIt3BObaZ3Xg4FzTMckPaRb0jd248PfRrAb8okhQvDFd_rLvVHpvbKlv578Py6osmDAF-p7JDjiJvRNeoJmE=w408-h544-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"10 D. Pham Tu, Dai Kim, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%83I+XE+V%E1%BA%A0N+THU%E1%BA%ACN+-+Xe+Thanh+Lan+B%E1%BA%AFc+Giang+B%E1%BA%AFc+Ninh/data=!4m7!3m6!1s0x3135ad0060839793:0xf60e7c0336a4a4b4!8m2!3d20.9749124!4d105.8095736!16s%2Fg%2F11vzp7xrcm!19sChIJk5eDYACtNTERtKSkNgN8DvY?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ63BoQtetNTERRLgGGu5p3uM,Bai gui xe D9,,,5,3.6,"Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai gui xe D9 (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB-785yqbce2yB-P4P8h38Bg5r1zDV0PrAJXq5bLjq2woujnkvCzWK4VbNGZUmx0Szz77zYfd98F02B5_OlhnFqdUargKb2WY66lzqA4akuafL6a04_E1FMoy4iTQlWxaURCGlpr=w408-h544-k-no=s1024,Parking lot,Parking lot,6 AM-10 PM,,Open All Days,"D9 P. Tran Dai Nghia, Dong Tam, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+D9/data=!4m7!3m6!1s0x3135add7426870eb:0xe3de69ee1a06b844!8m2!3d21.0039847!4d105.8441366!16s%2Fg%2F11gx_w_6d7!19sChIJ63BoQtetNTERRLgGGu5p3uM?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJZYTPhYqrNTER1TMNpIlU1iE,Bai Gui Xe,,,2,5,"Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai Gui Xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"Ngo 27 D. Dai Co Viet, Cau Den, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe/data=!4m7!3m6!1s0x3135ab8a85cf8465:0x21d65489a40d33d5!8m2!3d21.008089!4d105.8500022!16s%2Fg%2F11f3dylxlb!19sChIJZYTPhYqrNTER1TMNpIlU1iE?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJdynlbbFUNDERIgIDhwGEHuo,Xe khach Van Minh My Dinh,,,455,4.1,"Name: Nha xe Minh Dung Van phong Ha Noi +Link: https://www.google.com/maps/search/Nh%C3%A0+xe+Minh+D%C5%A9ng+V%C4%83n+ph%C3%B2ng+H%C3%A0+N%E1%BB%99i/@21.0331624,105.773292?authuser=0&hl=en&entry=ttu +Reviews: 86 reviews + +Name: Van phong xe khach Vu Han (My Dinh -Tuyen Quang - Ha Giang - Lao Cai) +Link: https://www.google.com/maps/search/V%C4%83n+ph%C3%B2ng+xe+kh%C3%A1ch+V%C5%A9+H%C3%A1n+(M%E1%BB%B9+%C4%90%C3%ACnh+-Tuy%C3%AAn+Quang+-+H%C3%A0+Giang+-+L%C3%A0o+Cai)/@21.028492999999997,105.7761058?authuser=0&hl=en&entry=ttu +Reviews: 36 reviews + +Name: Chuyen phat nhanh Van Minh +Link: https://www.google.com/maps/search/Chuy%E1%BB%83n+ph%C3%A1t+nhanh+V%C4%83n+Minh/@21.0298624,105.7749705?authuser=0&hl=en&entry=ttu +Reviews: 24 reviews + +Name: Xe Minh Map - My Dinh +Link: https://www.google.com/maps/search/Xe+Minh+M%E1%BA%ADp+-+M%E1%BB%B9+%C4%90%C3%ACnh/@21.041639399999998,105.773527?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Cong Ty Co Phan Dich Vu Van Tai Van Minh +Link: https://www.google.com/maps/search/C%C3%B4ng+Ty+C%E1%BB%95+Ph%E1%BA%A7n+D%E1%BB%8Bch+V%E1%BB%A5+V%E1%BA%ADn+T%E1%BA%A3i+V%C4%83n+Minh/@21.0180151,105.81662709999999?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews",http://vanminh76.vn/,1900 088840,,Xe khach Van Minh My Dinh (Owner),https://www.google.com/maps/contrib/112938335037364799252,https://lh3.googleusercontent.com/gps-cs-s/AB5caB8WTW37lTtEaHs0u7-SrYaIIORMOLYYx371wsv6Z--0DErOfDrC9M1cDazdV2BaKqDmZU6vx34pdthM5iVb3JeZ-XadE4xmRrhzEQ-HA6p1YKJig80sjyX0zDZqDRanou5OyqTZ=w408-h306-k-no=s1024,Bus company,Bus company,,,Open All Days,"172 P. Tran Binh, My Dinh, Nam Tu Liem, Ha Noi",,https://www.google.com/maps/place/Xe+kh%C3%A1ch+V%C4%83n+Minh+M%E1%BB%B9+%C4%90%C3%ACnh/data=!4m7!3m6!1s0x313454b16de52977:0xea1e840187030222!8m2!3d21.0298594!4d105.7749946!16s%2Fg%2F11cn2y7f7v!19sChIJdynlbbFUNDERIgIDhwGEHuo?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJoTR7kAKtNTERmT9tF_hdch0,Bai Gui Xe O To,,,2,5,"Name: Bai gui xe HH +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+HH/@20.962063600000004,105.8285465?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Thinh Liet +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Th%E1%BB%8Bnh+Li%E1%BB%87t/@20.971021699999998,105.8483868?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai Gui Xe O To (Owner),,,Free parking lot,Free parking lot,,,Open All Days,"XR79+8P8, Bang A, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/data=!4m7!3m6!1s0x3135ad02907b34a1:0x1d725df8176d3f99!8m2!3d20.9632812!4d105.8193362!16s%2Fg%2F11gdykpcs_!19sChIJoTR7kAKtNTERmT9tF_hdch0?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJSfK1p7NVNDERoCf4FAYD9EY,Bai gui xe o to 24/24h,"gui xe o to theo thang 24/24h khoa rieng, pccc dam bao, an ninh tot",,0,0,"Name: Bai gui xe Tuan Ngo +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Tu%E1%BA%A5n+Ng%E1%BB%8D/@20.9881931,105.77049919999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+xe+oto/@20.998038299999997,105.8050507?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Truong Man Non Sao Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Tr%C6%B0%E1%BB%9Dng+M%E1%BA%A7n+Non+Sao+Mai/@21.0453212,105.77690919999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Diem Trong Giu Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+Tr%C3%B4ng+Gi%E1%BB%AF+Xe+%C3%94+T%C3%B4/@21.014042399999997,105.79629949999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Bai gui xe o to 24/24h (Owner),https://www.google.com/maps/contrib/111052824178126377213,,Parking lot,Parking lot,,,Open All Days,"21 ngach 341/113 D. Xuan Phuong, Xuan Phuong, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+%C3%B4+t%C3%B4+24%2F24h/data=!4m7!3m6!1s0x313455b3a7b5f249:0x46f4030614f827a0!8m2!3d21.0312783!4d105.740607!16s%2Fg%2F11vymtfcd5!19sChIJSfK1p7NVNDERoCf4FAYD9EY?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJK2wAd1atNTERFWLoMYQDbLY,Bai xe Ha anh 161 tran hoa,phu tung o to Ha anh chuyen van phong ve ngo 161 pho Tran hoa,,4,4.5,"Name: San tap lai xe tran hoa +Link: https://www.google.com/maps/search/S%C3%A2n+t%E1%BA%ADp+l%C3%A1i+xe+tr%E1%BA%A7n+ho%C3%A0/@20.9735478,105.8263522?authuser=0&hl=en&entry=ttu +Reviews: 10 reviews + +Name: Bai xe 86 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+86/@20.975667200000004,105.8256243?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Bai Do Xe 195 Dinh Cong Ha +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+195+%C4%90%E1%BB%8Bnh+C%C3%B4ng+H%E1%BA%A1/@20.982859899999998,105.82542939999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai 24/2 +Link: https://www.google.com/maps/search/B%C3%A3i+24%2F2/@20.9831403,105.8303121?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.9865449,105.8308979?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0981 062 882,,Bai xe Ha anh 161 tran hoa (Owner),https://www.google.com/maps/contrib/110279611909120787735,https://lh3.googleusercontent.com/gps-cs-s/AB5caB92JONRJn5jb98msE-NzxLldec13fcULwkK8nw-JIlPKDbnAPZXIW10o0LecIJcmU-Bky2nwXDP6fCNg2FCanGTPcZ3-74iG5_zrxOCfXU6QYjqlBvSpzdvele8GhlLcEMTp5B5=w408-h306-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"ngo 161 P. Tran Hoa, Dinh Cong, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+H%C3%A0+anh+161+tr%E1%BA%A7n+ho%C3%A0/data=!4m7!3m6!1s0x3135ad5677006c2b:0xb66c038431e86215!8m2!3d20.9756617!4d105.8256676!16s%2Fg%2F11jpbys60k!19sChIJK2wAd1atNTERFWLoMYQDbLY?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJm1jgH9msNTERKlIn-RMtiQQ,Bai do xe o to TC5,,,35,3.7,"Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai do xe yen xa +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+y%C3%AAn+x%C3%A1/@20.968992699999998,105.79845519999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: BAI GUI XE O TO LY SAC +Link: https://www.google.com/maps/search/B%C3%83I+G%E1%BB%ACI+XE+%C3%94+T%C3%94+LY+S%E1%BA%AEC/@20.921729199999998,105.8640064?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0454579,105.8845698?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe o to TC5 (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB_jJEcEv9fS_HrgRwPciklsrlQxi1GBx91B4FekOpPCmIcwl5NdJVNBuwwOUP9fuOgO8oc7cbCKCns38f30CP7uXKUOe-EzH4bls8UVgkKSzYEDudZUwH04axnUz4VcgirBwGlbEg=w408-h408-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"XQ9X+J6C, Yen Xa, Thanh Tri, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4+TC5/data=!4m7!3m6!1s0x3135acd91fe0589b:0x4892d13f927522a!8m2!3d20.9690679!4d105.798014!16s%2Fg%2F11b6t5w5nv!19sChIJm1jgH9msNTERKlIn-RMtiQQ?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJU_GHxO-tNTERElY6SMhdWw4,Bai do xe,,,1,5,"Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.006772599999998,105.86952029999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0357 136 019,,Bai do xe (Owner),https://www.google.com/maps/contrib/108578231754010239428,https://lh3.googleusercontent.com/gps-cs-s/AB5caB-toEP8-6OBFepHMTBpH6xsV82ngsmTAc_bxX80DlpNlMX7mB7HI4q-GF00f58eEqsx1toMYhb6fbUv5EMtPEIKg4MRaaEs9dja3yik9QmgGIKWfT_cluNUls3o_KWG2EJ1vjBF=w408-h240-k-no-pi-0-ya20-ro-0-fo100=s1024,Parking lot,Parking lot,,,Open All Days,"Ngo 90 P. Yen Lac, Vinh Tuy, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91o+xe/data=!4m7!3m6!1s0x3135adefc487f153:0xe5b5dc8483a5612!8m2!3d21.001345!4d105.864885!16s%2Fg%2F11lrn257xx!19sChIJU_GHxO-tNTERElY6SMhdWw4?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJoyJf5aOtNTERg3twCFeHgQA,"Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang)",,,2,4.5,"Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Trung tam o to +Link: https://www.google.com/maps/search/Trung+t%C3%A2m+%C3%B4+t%C3%B4/@20.9758475,105.85757939999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Thinh Liet +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Th%E1%BB%8Bnh+Li%E1%BB%87t/@20.971021699999998,105.8483868?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,"Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) (Owner)",https://www.google.com/maps/contrib/117925395255731103705,https://lh3.googleusercontent.com/gps-cs-s/AB5caB_xy7wjCokm22-l21ooRB7ZFuQ75199o2vLXrNenjGDTLEFCfupIYtOFG950IHxHAplcPfywaHf4EAj8H6PsHQEGZDZ67aJs4y687tkMg7rcKzZftEEGFXGA2iffsM8_9ZjR5e7=w408-h306-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"33 Ngach 143/74 Pho Nguyen Chinh, Thinh Liet, Hoang Mai, Ha Noi",,"https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+%28%C4%91%E1%BB%97+xe+ng%C3%A0y,+%C4%91%C3%AAm,+theo+th%C3%A1ng%29/data=!4m7!3m6!1s0x3135ada3e55f22a3:0x81875708707b83!8m2!3d20.9761118!4d105.8511079!16s%2Fg%2F11jk1m2yx0!19sChIJoyJf5aOtNTERg3twCFeHgQA?authuser=0&hl=en&rclk=1",bai do xe gan day +ChIJxdUIZvNTNDERxge29WLgBCg,Bai xe Le Trong Tan - Ha Dong,Bai trong giu xe ngay dem. Trung chuyen hang hoa Bac Trung Nam.Sdt bai xe 0962633044,,5,4.8,"Name: Bai Giu Xe Cuong Phong +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+C%C6%B0%E1%BB%9Dng+Phong/@20.9576875,105.7590723?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Gui Xe O To Khach San Muong Thanh +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4+Kh%C3%A1ch+S%E1%BA%A1n+M%C6%B0%E1%BB%9Dng+Thanh/@20.960570999999998,105.791744?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe CT1B2 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+CT1B2/@20.9637127,105.792153?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0962 633 044,,Bai xe Le Trong Tan - Ha Dong (Owner),https://www.google.com/maps/contrib/106355754703286072140,https://lh3.googleusercontent.com/p/AF1QipMMkRKAb_Hvn1aYChZRfM8HBQHQBe9fp8JkCL7S=w425-h240-k-no=s1024,Park & ride,Park & ride,Open 24 hours,,Open All Days,"D. Le Trong Tan, Duong Noi, Ha Dong, Ha Noi 003000",,https://www.google.com/maps/place/B%C3%A3i+xe+L%C3%AA+Tr%E1%BB%8Dng+T%E1%BA%A5n+-+H%C3%A0+%C4%90%C3%B4ng/data=!4m7!3m6!1s0x313453f36608d5c5:0x2804e062f5b607c6!8m2!3d20.9867844!4d105.7383723!16s%2Fg%2F11rty8sygs!19sChIJxdUIZvNTNDERxge29WLgBCg?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJq8z3ERitNTERyzTPbzTXJwU,Bai do xe Dai Thanh,,,5,4.8,"Name: Bai do xe o to TC5 +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4+TC5/@20.9690679,105.798014?authuser=0&hl=en&entry=ttu +Reviews: 35 reviews + +Name: Bai Do Xe So 2 Dinh Cong +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+S%E1%BB%91+2+%C4%90%E1%BB%8Bnh+C%C3%B4ng/@20.986452,105.82737949999999?authuser=0&hl=en&entry=ttu +Reviews: 17 reviews + +Name: Bai do xe yen xa +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+y%C3%AAn+x%C3%A1/@20.968992699999998,105.79845519999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",http://kientrucvietas.com/,,1,Bai do xe Dai Thanh (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB-7dbUrbrILv2o2gkPUFfF46A83ZlBiT5M_j0MRpmSzZgdJ1Da7_MuNJGp4DPZlp29eODo6j7QoZyzkN-HKVqr1LoNeoKFE9zAFBC1L6M7qM6TAdJoVUI2qPCv_ol2FH9LCM-tR=w408-h544-k-no=s1024,Parking lot,Parking lot,12 AM-11:30 PM,,Open All Days,"Cau Huu Hoa, Ta Thanh Oai, Thanh Tri, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+%C4%90%E1%BA%A1i+Thanh/data=!4m7!3m6!1s0x3135ad1811f7ccab:0x527d7346fcf34cb!8m2!3d20.954767!4d105.8068271!16s%2Fg%2F11b7q0b4w7!19sChIJq8z3ERitNTERyzTPbzTXJwU?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJdcqIDSqtNTERkypqeQTBJcE,Bai xe Pham Dung,,,0,0,"Name: Bai rua xe Pham Dung +Link: https://www.google.com/maps/search/B%C3%A3i+r%E1%BB%ADa+xe+Ph%E1%BA%A1m+D%C5%A9ng/@20.9746138,105.81887420000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe Kim Giang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Kim+Giang/@20.979834,105.814644?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Kim Van +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Kim+V%C4%83n/@20.9754531,105.82180749999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: So 119 - Ngo 24 Kim Dong - Bai trong giu xe oto +Link: https://www.google.com/maps/search/S%E1%BB%91+119+-+Ng%C3%B5+24+Kim+%C4%90%E1%BB%93ng+-+B%C3%A3i+tr%C3%B4ng+gi%E1%BB%AF+xe+%C3%B4t%C3%B4/@20.979865099999998,105.8429116?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,0979 988 177,,Bai xe Pham Dung (Owner),https://www.google.com/maps/contrib/108530474956333418135,,Parking lot,Parking lot,,,Open All Days,"KDT moi, VIET NAM, Hanoi",,https://www.google.com/maps/place/B%C3%A3i+xe+Ph%E1%BA%A1m+D%C5%A9ng/data=!4m7!3m6!1s0x3135ad2a0d88ca75:0xc125c104796a2a93!8m2!3d20.9745813!4d105.8188736!16s%2Fg%2F11s4t4z078!19sChIJdcqIDSqtNTERkypqeQTBJcE?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJAQBAWHesNTER-ksL5H-2nDw,Bai gui xe BV Bach Mai,,,1,5,"Name: Nha De Xe Can Bo - Nhan Vien Benh Vien +Link: https://www.google.com/maps/search/Nh%C3%A0+%C4%90%E1%BB%83+Xe+C%C3%A1n+B%E1%BB%99+-+Nh%C3%A2n+Vi%C3%AAn+B%E1%BB%87nh+Vi%E1%BB%87n/@21.0030423,105.8397335?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai gui xe BV Bach Mai (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB-JjOIDO0_qmsxsUpVZIeLQtcjFYLz73E-_AftQE-MIozt7un4iDTi5tNAJLz1mjM2vubxvn3Mrl_E0TRj3Yp0jVP_XErcY0BnPyEI7nKDlBHBKS0gJltVNcF9XuKIBJ7LX2yPYEg=w408-h725-k-no=s1024,Parking lot for motorcycles,Parking lot for motorcycles,,,Open All Days,"2R3R+985, Phuong Mai, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+BV+B%E1%BA%A1ch+Mai/data=!4m7!3m6!1s0x3135ac7758400001:0x3c9cb67fe40b4bfa!8m2!3d21.0033904!4d105.840864!16s%2Fg%2F11y4061rt4!19sChIJAQBAWHesNTER-ksL5H-2nDw?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJx5GPJtqsNTERngEd9RucV0E,Bai Xe Tong Cuc 5,,,60,3.9,"Name: Thanh Liet Gas Station +Link: https://www.google.com/maps/search/Thanh+Liet+Gas+Station/@20.966821799999998,105.821659?authuser=0&hl=en&entry=ttu +Reviews: 367 reviews + +Name: Cay xang Tam Hung Tram sac vinfast oto +Link: https://www.google.com/maps/search/C%C3%A2y+x%C4%83ng+Tam+H%C6%B0ng+Tr%E1%BA%A1m+s%E1%BA%A1c+vinfast+%C3%B4t%C3%B4/@20.888406699999997,105.7962517?authuser=0&hl=en&entry=ttu +Reviews: 64 reviews + +Name: Tram Xang Dau Thanh Ha - Cienco 5 +Link: https://www.google.com/maps/search/Tr%E1%BA%A1m+X%C4%83ng+D%E1%BA%A7u+Thanh+H%C3%A0+-+Cienco+5/@20.9411781,105.78463339999999?authuser=0&hl=en&entry=ttu +Reviews: 25 reviews + +Name: Bai do xe yen xa +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+y%C3%AAn+x%C3%A1/@20.968992699999998,105.79845519999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai xe tong cuc 5 yen xa +Link: https://www.google.com/maps/search/B%C3%A3i+xe+t%E1%BB%95ng+c%E1%BB%A5c+5+y%C3%AAn+x%C3%A1/@20.969130099999997,105.7985679?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai Xe Tong Cuc 5 (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB-PCdyWiXzY3nS25jjES8WD09I5dFolIUXNkSUkjh-Rwx3yta_2x5oRrLLqRu5X0be4YlSnghRLmPDVuV60Xgla-ctPPkW8Lo7I6ewqpPbqev6nLeyVy12Mp1bgk6PBoTCVGy91=w408-h544-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"3/12/123 D. Yen Xa, Tan Trieu, Thanh Tri, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+Xe+T%E1%BB%95ng+C%E1%BB%A5c+5/data=!4m7!3m6!1s0x3135acda268f91c7:0x41579c1bf51d019e!8m2!3d20.9730653!4d105.7959768!16s%2Fg%2F11ck6r_q0y!19sChIJx5GPJtqsNTERngEd9RucV0E?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJSU_d-plVNDERa4uIZTj9sVQ,Diem do xe cua Thuc,,,3,5,"Name: Bai do xe TDP Dong Ngac 1 +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+TDP+%C4%90%C3%B4ng+Ng%E1%BA%A1c+1/@21.0927489,105.7814958?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Diem trong giu xe o to ngay dem +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+tr%C3%B4ng+gi%E1%BB%AF+xe+%C3%B4+t%C3%B4+ng%C3%A0y+%C4%91%C3%AAm/@21.0843843,105.77159619999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Gui Xe Dh Mo-dia Chat +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C4%90h+M%E1%BB%8F-%C4%91%E1%BB%8Ba+Ch%E1%BA%A5t/@21.071608800000003,105.7776627?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Diem Do Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4/@21.0477423,105.8104151?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Diem do xe cua Thuc (Owner),,,Parking lot,Parking lot,,,Open All Days,"3Q8J+M72, P. Che Lan Vien, Co Nhue, Bac Tu Liem, Ha Noi",,https://www.google.com/maps/place/%C4%90i%E1%BB%83m+%C4%91%E1%BB%97+xe+c%E1%BB%A7a+Th%E1%BB%B1c/data=!4m7!3m6!1s0x31345599fadd4f49:0x54b1fd3865888b6b!8m2!3d21.0666261!4d105.7806463!16s%2Fg%2F11sr7pqvsj!19sChIJSU_d-plVNDERa4uIZTj9sVQ?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJXTyU5cqtNTERe5tTrmLQKYs,So 119 - Ngo 24 Kim Dong - Bai trong giu xe oto,,,1,4,"Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe Kim Van +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Kim+V%C4%83n/@20.9754531,105.82180749999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Nhan Trong Xe Ngay Dem +Link: https://www.google.com/maps/search/Nh%E1%BA%ADn+Tr%C3%B4ng+Xe+Ng%C3%A0y+%C4%90%C3%AAm/@20.979515,105.842468?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai gui xe Thinh Liet +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Th%E1%BB%8Bnh+Li%E1%BB%87t/@20.971021699999998,105.8483868?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,So 119 - Ngo 24 Kim Dong - Bai trong giu xe oto (Owner),,,Parking lot,Parking lot,,,Open All Days,"119 Ng. 24 P. Kim Dong, Giap Bat, Hoang Mai, Ha Noi 100000",,https://www.google.com/maps/place/S%E1%BB%91+119+-+Ng%C3%B5+24+Kim+%C4%90%E1%BB%93ng+-+B%C3%A3i+tr%C3%B4ng+gi%E1%BB%AF+xe+%C3%B4t%C3%B4/data=!4m7!3m6!1s0x3135adcae5943c5d:0x8b29d062ae539b7b!8m2!3d20.9798651!4d105.8429116!16s%2Fg%2F11rcq92jq5!19sChIJXTyU5cqtNTERe5tTrmLQKYs?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJt381af6tNTER1Fs7M7Ye8oQ,Bai gui xe Thinh Liet,,,0,0,"Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai trong xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/@20.9713119,105.8475225?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: So 119 - Ngo 24 Kim Dong - Bai trong giu xe oto +Link: https://www.google.com/maps/search/S%E1%BB%91+119+-+Ng%C3%B5+24+Kim+%C4%90%E1%BB%93ng+-+B%C3%A3i+tr%C3%B4ng+gi%E1%BB%AF+xe+%C3%B4t%C3%B4/@20.979865099999998,105.8429116?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,Bai gui xe Thinh Liet (Owner),,,Parking lot,Parking lot,,,Open All Days,"P304, Toa nha N 6, Khu chung cu, Dong Tau, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+Th%E1%BB%8Bnh+Li%E1%BB%87t/data=!4m7!3m6!1s0x3135adfe69357fb7:0x84f21eb6333b5bd4!8m2!3d20.9710217!4d105.8483868!16s%2Fg%2F11tjxjxfys!19sChIJt381af6tNTER1Fs7M7Ye8oQ?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJSTRV67CrNTERtjzT6s5yylg,EVN parking lot,,,5,3.2,"Name: 156 parking Phuong Liet +Link: https://www.google.com/maps/search/156+parking+Phuong+Liet/@20.9970109,105.8387855?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai do xe 81 Lang Ha +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+81+L%C3%A1ng+H%E1%BA%A1/@21.017794199999997,105.8168796?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai trong xe Phan ke binh +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe+Phan+k%E1%BA%BF+b%C3%ADnh/@21.0343043,105.8122015?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe Tap The Thong Tan Xa Viet Nam +Link: https://www.google.com/maps/search/B%C3%A3i+xe+T%E1%BA%ADp+Th%E1%BB%83+Th%C3%B4ng+T%E1%BA%A5n+X%C3%A3+Vi%E1%BB%87t+Nam/@21.0013747,105.8530916?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,EVN parking lot (Owner),,,Parking lot,Parking lot,,,Open All Days,"1 P. Nguyen Khac Nhu, Truc Bach, Ba Dinh, Ha Noi",,https://www.google.com/maps/place/EVN+parking+lot/data=!4m7!3m6!1s0x3135abb0eb553449:0x58ca72ceead33cb6!8m2!3d21.0439337!4d105.8429688!16s%2Fg%2F11cncv2ygg!19sChIJSTRV67CrNTERtjzT6s5yylg?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJuWCJ44mrNTERquJuwGIwXd0,Bai gui xe CV Thong Nhat,,,4,2.8,"Name: Gui xe Cong vien - Nguyen Dinh Chieu +Link: https://www.google.com/maps/search/G%E1%BB%ADi+xe+C%C3%B4ng+vi%C3%AAn+-+Nguy%E1%BB%85n+%C4%90%C3%ACnh+Chi%E1%BB%83u/@21.0166327,105.8476317?authuser=0&hl=en&entry=ttu +Reviews: 11 reviews + +Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,0963 319 468,1,Bai gui xe CV Thong Nhat (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB94xzRadChbXy3FdYipvZL3KQ7JxKLRes-nx6suw_LXs1pXOfxJquiTzIIVVvSBeo_9yaLxKAmmdpG21LP0IPyWIGFrJUGcG-Kja5633tyI5Gq26Hqv3-s_YmdGemZQYfkHpn4=w408-h544-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"2R5W+873, Le Dai Hanh, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/data=!4m7!3m6!1s0x3135ab89e38960b9:0xdd5d3062c06ee2aa!8m2!3d21.0082606!4d105.8456587!16s%2Fg%2F11gd1rxccl!19sChIJuWCJ44mrNTERquJuwGIwXd0?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ1TsDEQCtNTERokuwVDkReks,Bai Gui Xe Huy Hoang,,,1,5,"Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Giu Xe Cuong Phong +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+C%C6%B0%E1%BB%9Dng+Phong/@20.9576875,105.7590723?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe MQ VN +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+MQ+VN/@20.9751066,105.76271729999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai Gui Xe Huy Hoang (Owner),,,Parking lot,Parking lot,,,Open All Days,"Dau ngo 94 D. Cau Buou, Khu Do Thi Moi, Ha Dong, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe+Huy+Ho%C3%A0ng/data=!4m7!3m6!1s0x3135ad0011033bd5:0x4b7a113954b04ba2!8m2!3d20.9621674!4d105.7984347!16s%2Fg%2F11y58zrgfr!19sChIJ1TsDEQCtNTERokuwVDkReks?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJLyD3OYqrNTERE5iEpj6lu-M,Bai do xe o to,,,0,0,"Name: Bai gui xe D9 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D9/@21.0039847,105.8441366?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91o+xe/@21.001345,105.86488500000002?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.006772599999998,105.86952029999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe o to (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB-AbeoRN3lWknD7mloSUXHjdjDk3YX0GvQ8JDVD3LEb5OZQMLaRJ2XISZG9QHssagXsJZPJg3Pyc1YID8_Ya_SmXiruD_-n2-fRZ4ff8eUeAD6jAjodHuONoGmY0_0hxEG5ecK8=w408-h306-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"29 P. Vo Thi Sau, Thanh Nhan, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/data=!4m7!3m6!1s0x3135ab8a39f7202f:0xe3bba53ea6849813!8m2!3d21.0080236!4d105.8547246!16s%2Fg%2F11mc8rnqsm!19sChIJLyD3OYqrNTERE5iEpj6lu-M?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJa3ZCO1OtNTERYmohkGjzbJQ,Bai de xe can bo,,,1,5,"Name: Nha De Xe Can Bo - Nhan Vien Benh Vien +Link: https://www.google.com/maps/search/Nh%C3%A0+%C4%90%E1%BB%83+Xe+C%C3%A1n+B%E1%BB%99+-+Nh%C3%A2n+Vi%C3%AAn+B%E1%BB%87nh+Vi%E1%BB%87n/@21.0030423,105.8397335?authuser=0&hl=en&entry=ttu +Reviews: 9 reviews + +Name: Bai gui xe D3-5 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+D3-5/@21.0047785,105.8454584?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0149662,105.84152209999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Nha de xe Can bo +Link: https://www.google.com/maps/search/Nh%C3%A0+%C4%91%E1%BB%83+xe+C%C3%A1n+b%E1%BB%99/@21.0079294,105.82428259999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",http://hust.edu.vn/,,1,Bai de xe can bo (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB_mzug4Vg9QhICfhcHXeGmSDz22oQz46khdCkdZOixMpPHwKp0cWxJIt41SyOyt8Y47szWwaKSo5HwSBTn2Z7hn4lq8a7ZFawRUDo0coQD7qgshb9vKH0p1klgz0Vsv4XBu3hFDqg=w408-h544-k-no=s1024,Parking lot for motorcycles,Parking lot for motorcycles,6 AM-6 PM,,Open All Days,"C5, Bach Khoa, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%83+xe+c%C3%A1n+b%E1%BB%99/data=!4m7!3m6!1s0x3135ad533b42766b:0x946cf36890216a62!8m2!3d21.0058781!4d105.8445652!16s%2Fg%2F11j11k4hm2!19sChIJa3ZCO1OtNTERYmohkGjzbJQ?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ4cXudLGrNTERpyNd8HwQ3LY,Bai giu xe dinh Kim Lien,,,2,2,"Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai giu xe Linh Lang - Phan Ke Binh +Link: https://www.google.com/maps/search/B%C3%A3i+gi%E1%BB%AF+xe+Linh+Lang+-+Phan+K%E1%BA%BF+B%C3%ADnh/@21.034806,105.8103702?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe Kim Van +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Kim+V%C4%83n/@20.9754531,105.82180749999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9820363,105.8123172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe Kim Giang +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Kim+Giang/@20.979834,105.814644?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,0387 580 861,1,Bai giu xe dinh Kim Lien (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB-3h5Ir9g5lp6Jj7ewkA1V3rh7LbwWmS6sNua97PBWlsQhD1LDqREngs3CD-bQ-mIyYyrbIBn2aSDqjFYAkd39PepGMISWnXYVhWB6vrwthgyQQUYxSGgnvoYMLOabfj7Xad_5sGg=w408-h725-k-no=s1024,Parking garage,Parking garage,Open 24 hours,,Open All Days,"152 P. Xa Dan, Phuong Lien, Dong Da, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+gi%E1%BB%AF+xe+%C4%91%C3%ACnh+Kim+Li%C3%AAn/data=!4m7!3m6!1s0x3135abb174eec5e1:0xb6dc107cf05d23a7!8m2!3d21.010115!4d105.838317!16s%2Fg%2F11j50f3f7y!19sChIJ4cXudLGrNTERpyNd8HwQ3LY?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJE9q-pZFTNDERnh53prBYOgQ,Bai do xe Tinh B34,"Bai dau xe Tinh Lo B34 khu B khu do thi moi hai ben duong Le Trong Tan. Duong Noi, Ha Dong, Ha Noi",,0,0,"Name: Bai do xe Tinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+T%C4%A9nh/@20.9582664,105.7620881?authuser=0&hl=en&entry=ttu +Reviews: 31 reviews + +Name: Bai Do Xe Khu Do Thi Linh Dam +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+Khu+%C4%90%C3%B4+Th%E1%BB%8B+Linh+%C4%90%C3%A0m/@20.9674685,105.82657429999999?authuser=0&hl=en&entry=ttu +Reviews: 7 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai rua xe do xe +Link: https://www.google.com/maps/search/B%C3%A3i+r%E1%BB%ADa+xe+%C4%91%E1%BB%97+xe/@20.9834615,105.8704131?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai dau xe Tinh CTY HAT +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BA%ADu+xe+T%C4%A9nh+CTY+HAT/@20.9935762,105.7312048?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0976 811 241,,Bai do xe Tinh B34 (Owner),https://www.google.com/maps/contrib/102837034364204407202,https://lh3.googleusercontent.com/p/AF1QipPJ43GpJ62ZHPAVexjms1LhgxZ6S95Kfj6SFgIx=w408-h306-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"khu B/B34 D. Le Trong Tan, khu do thi moi hai ben, Ha Dong, Ha Noi 00030",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+T%C4%A9nh+B34/data=!4m7!3m6!1s0x31345391a5beda13:0x43a58b0a6771e9e!8m2!3d20.9632147!4d105.7638428!16s%2Fg%2F11w2trt36_!19sChIJE9q-pZFTNDERnh53prBYOgQ?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJz_n2z-yrNTERgqBLH2oYWwk,Bai Do Xe O To,,,7,4.7,"Name: Bai do xe Truong Chinh +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Tr%C6%B0%E1%BB%9Dng+Chinh/@21.0018285,105.8229903?authuser=0&hl=en&entry=ttu +Reviews: 13 reviews + +Name: Bai gui xe +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe/@20.9867769,105.8198008?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0149662,105.84152209999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Bai Do Xe O To (Owner),,,Motorcycles,Motorcycles,,,Open All Days,"33 P. Ly Thuong Kiet, Hang Bai, Hoan Kiem, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4/data=!4m7!3m6!1s0x3135abeccff6f9cf:0x95b186a1f4ba082!8m2!3d21.0224655!4d105.8532371!16s%2Fg%2F11j4sw0m70!19sChIJz_n2z-yrNTERgqBLH2oYWwk?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ5yfDruKtNTERSKJ_YhgwS_8,Bai rua xe do xe,,,1,5,"Name: Bai Gui Xe so 16 ngo 296 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+s%E1%BB%91+16+ng%C3%B5+296/@20.9798947,105.8790592?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Do Xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe/@20.961006299999998,105.8216358?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai xe Dong Xa 2 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+%C4%90%E1%BB%93ng+Xa+2/@20.983598699999998,105.8718431?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Xe Trung Quan +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+Trung+Qu%C3%A2n/@20.992809599999998,105.8742443?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0813 101 080,,Bai rua xe do xe (Owner),https://www.google.com/maps/contrib/101292498476479743320,https://lh3.googleusercontent.com/p/AF1QipPOkAMt3KgYsf_c2nPFJdJ9A3cm9LykMiOnT5OP=w426-h240-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"Vinh Hung, Hoang Mai, Hanoi",,https://www.google.com/maps/place/B%C3%A3i+r%E1%BB%ADa+xe+%C4%91%E1%BB%97+xe/data=!4m7!3m6!1s0x3135ade2aec327e7:0xff4b3018627fa248!8m2!3d20.9834615!4d105.8704131!16s%2Fg%2F11hzkr38fw!19sChIJ5yfDruKtNTERSKJ_YhgwS_8?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJy8ZN1wCtNTERIxgO0WmZdHU,bai xe phong thuy,,,0,0,"Name: Bai Gui Xe Huy Hoang +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+Huy+Ho%C3%A0ng/@20.9621674,105.7984347?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Giu Xe Cuong Phong +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+C%C6%B0%E1%BB%9Dng+Phong/@20.9576875,105.7590723?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe CT1B2 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+CT1B2/@20.9637127,105.792153?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai Do Xe O To Cho Yen Phuc +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4+Ch%E1%BB%A3+Y%C3%AAn+Ph%C3%BAc/@20.9693032,105.7860858?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0904 558 720,1,bai xe phong thuy (Owner),,,Parking lot,Parking lot,Open 24 hours,,Open All Days,"12BT4, Khu do thi Van Quan, Ha Dong, Ha Noi",,https://www.google.com/maps/place/b%C3%A3i+xe+phong+thu%C3%BD/data=!4m7!3m6!1s0x3135ad00d74dc6cb:0x75749969d10e1823!8m2!3d20.9712452!4d105.7922137!16s%2Fg%2F11qncp92v8!19sChIJy8ZN1wCtNTERIxgO0WmZdHU?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ35wSMoyrNTERZPcMjRpjk2I,Gui xe Cong vien - Nguyen Dinh Chieu,,,11,3.9,"Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: D6 Thanh Cong +Link: https://www.google.com/maps/search/D6+Th%C3%A0nh+C%C3%B4ng/@21.023622,105.812858?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Gara o to tu dong +Link: https://www.google.com/maps/search/Gara+%C3%B4+t%C3%B4+t%E1%BB%B1+%C4%91%E1%BB%99ng/@21.0137418,105.8524695?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Gui xe Cong vien - Nguyen Dinh Chieu (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB8teCcQClm-4MkYZHhef5sSN38F7sMWZTFnVQnmB6-QZuqY10AkqkH_0CirmP0DyHBSTCe2zXUZ-M7WvNX9FaJoJlDOm8cSgabJVRgzMN9b-vtGh-BkGWRlDN7cPnjvw-Be2RhsEQ=w479-h240-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"2R8X+M32, P. Nguyen Dinh Chieu, Le Dai Hanh, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/G%E1%BB%ADi+xe+C%C3%B4ng+vi%C3%AAn+-+Nguy%E1%BB%85n+%C4%90%C3%ACnh+Chi%E1%BB%83u/data=!4m7!3m6!1s0x3135ab8c32129cdf:0x6293631a8d0cf764!8m2!3d21.0166327!4d105.8476317!16s%2Fg%2F12m91k83c!19sChIJ35wSMoyrNTERZPcMjRpjk2I?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJnd5HHI5TNDERSELR3ggWOrI,Bai dau xe,,,1,4,"Name: Bai Do Xe O To Ngan Binh Lai Xa +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4+Ng%C3%A2n+B%C3%ACnh+Lai+X%C3%A1/@21.060934,105.7176707?authuser=0&hl=en&entry=ttu +Reviews: 11 reviews + +Name: Bai Dau Xe 24/7 +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BA%ADu+Xe+24%2F7/@20.9987748,105.7964516?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai trong xe +Link: https://www.google.com/maps/search/B%C3%A3i+tr%C3%B4ng+xe/@20.9777021,105.73705869999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,0941 145 333,1,Bai dau xe (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB8r0bTYQbLQuO3EiFCZfnjwQcigrHZJUDHTVnpmf0SeBSL5R0-dxLTgyg0eE0VdlXlzqPopE1300naruCGoRsJ6qrux7sMzRMdcVV3TM8Zji1iXNBsU_7w2nZMOsjPHU0TGzmnIvQ=w505-h240-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"50 Duong An Tho 1, An Phu, Hoai Duc, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BA%ADu+xe/data=!4m7!3m6!1s0x3134538e1c47de9d:0xb23a1608ded14248!8m2!3d21.0080458!4d105.7224628!16s%2Fg%2F11q7zds14z!19sChIJnd5HHI5TNDERSELR3ggWOrI?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJAxxfOeGqNTERdELkN_zLGHI,Dich Vu Cho Thue Bai Do Xe Le Thi Nguyet,,,0,0,"Name: Bai gui xe 04 Tay Ho +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+04+T%C3%A2y+H%E1%BB%93/@21.0661386,105.8259885?authuser=0&hl=en&entry=ttu +Reviews: 16 reviews + +Name: Bai gui xe QDNDVN +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Q%C4%90NDVN/@21.0673225,105.811123?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: Bai Xe HT +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+HT/@21.0494967,105.79735579999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Diem Do Xe O To +Link: https://www.google.com/maps/search/%C4%90i%E1%BB%83m+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4/@21.0477423,105.8104151?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe Cho Tu Lien +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+Ch%E1%BB%A3+T%E1%BB%A9+Li%C3%AAn/@21.065845799999998,105.8304328?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,0945 169 109,1,Dich Vu Cho Thue Bai Do Xe Le Thi Nguyet (Owner),,,Parking lot,Parking lot,,,Open All Days,"505, Lac Long Quan, Quan Tay Ho, Thanh Pho Ha Noi, Buoi, Tay Ho, Ha Noi",,https://www.google.com/maps/place/D%E1%BB%8Bch+V%E1%BB%A5+Cho+Thu%C3%AA+B%C3%A3i+%C4%90%E1%BB%95+Xe+L%C3%AA+Th%E1%BB%8B+Nguy%E1%BB%87t/data=!4m7!3m6!1s0x3135aae1395f1c03:0x7218cbfc37e44274!8m2!3d21.0624874!4d105.8095932!16s%2Fg%2F11c6w0r2cc!19sChIJAxxfOeGqNTERdELkN_zLGHI?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ19a5ygOtNTERHjGds14_1V8,Bai Do Xe,,,2,3.5,"Name: Bai gui xe HH +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+HH/@20.962063600000004,105.8285465?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai Gui Xe O To +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4/@20.963281199999997,105.8193362?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai rua xe do xe +Link: https://www.google.com/maps/search/B%C3%A3i+r%E1%BB%ADa+xe+%C4%91%E1%BB%97+xe/@20.9834615,105.8704131?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,,1,Bai Do Xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"Ng. 123 P. Bang Liet, Bang A, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%97+Xe/data=!4m7!3m6!1s0x3135ad03cab9d6d7:0x5fd53f5eb39d311e!8m2!3d20.9610063!4d105.8216358!16s%2Fg%2F11hb2gxftj!19sChIJ19a5ygOtNTERHjGds14_1V8?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJm97M57hVNDERsIWLJ60n7Bk,Bai Do Xe O To Ngan Binh Lai Xa,Bai Gui Xe O To Ngay Dem Ngan Binh - Lai Xa,,11,4.9,"Name: BAI DO XE O TO +Link: https://www.google.com/maps/search/B%C3%83I+%C4%90%E1%BB%96+XE+%C3%94+T%C3%94/@21.0478608,105.8457672?authuser=0&hl=en&entry=ttu +Reviews: 6 reviews + +Name: Bai de xe lang Giang Xa +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%83+xe+l%C3%A0ng+Giang+X%C3%A1/@21.067092,105.7056856?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai dau xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BA%ADu+xe/@21.008045799999998,105.72246279999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe may +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/@21.0507824,105.8033172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews",,0961 236 327,,Bai Do Xe O To Ngan Binh Lai Xa (Owner),https://www.google.com/maps/contrib/103602306226778415667,https://lh3.googleusercontent.com/p/AF1QipPzSSzvpKwo7-R3wk8GdLP2qRJLRL9D7NxKdw_R=w426-h240-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"Ng. 101A Tay Lai Xa/9 Tay Lai Xa, Duc Giang, Hoai Duc, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4+Ng%C3%A2n+B%C3%ACnh+Lai+X%C3%A1/data=!4m7!3m6!1s0x313455b8e7ccde9b:0x19ec27ad278b85b0!8m2!3d21.060934!4d105.7176707!16s%2Fg%2F11v0b9nq9x!19sChIJm97M57hVNDERsIWLJ60n7Bk?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJzzv2B7NUNDERSS63A9Mb544,18 Pham Hung,,,23,4.6,"Name: Nha CT5 KDT Song Da My Dinh - Pham Hung +Link: https://www.google.com/maps/search/Nh%C3%A0+CT5+K%C4%90T+S%C3%B4ng+%C4%90%C3%A0+M%E1%BB%B9+%C4%90%C3%ACnh+-+Ph%E1%BA%A1m+H%C3%B9ng/@21.0184753,105.78112689999999?authuser=0&hl=en&entry=ttu +Reviews: 18 reviews + +Name: Nha CT5-D KDT My Dinh - Pham Hung +Link: https://www.google.com/maps/search/Nh%C3%A0+CT5-D+K%C4%90T+M%E1%BB%B9+%C4%90%C3%ACnh+-+Ph%E1%BA%A1m+H%C3%B9ng/@21.0145961,105.7842568?authuser=0&hl=en&entry=ttu +Reviews: 14 reviews + +Name: Big Tower Gold Land +Link: https://www.google.com/maps/search/Big+Tower+Gold+Land/@21.0308611,105.77904129999999?authuser=0&hl=en&entry=ttu +Reviews: 5 reviews + +Name: 50 +Link: https://www.google.com/maps/search/50/@21.0126846,105.77041?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Ben Xe Bus Ha Noi +Link: https://www.google.com/maps/search/B%E1%BA%BFn+Xe+Bus+H%C3%A0+N%E1%BB%99i/@21.0293779,105.7786084?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,18 Pham Hung (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB89f91y28uNsPYqQrKaEcgHZ8RN8MfbfFEO32ldOae1ECpj-e6uOkRr84UCFrUIHevAothvKK0uOSwFKObewk4T5M83MjxMRWnv4BCgLrbKmvmXOZRlgtJpJIw77Cw3fTt59NTAsQ=w426-h240-k-no=s1024,Bus stop,Bus stop,,,Open All Days,"18 D. Pham Hung, My Dinh, Cau Giay, Ha Noi",,https://www.google.com/maps/place/18+Ph%E1%BA%A1m+H%C3%B9ng/data=!4m7!3m6!1s0x313454b307f63bcf:0x8ee71bd303b72e49!8m2!3d21.0304255!4d105.7792452!16s%2Fg%2F1tf5yrzs!19sChIJzzv2B7NUNDERSS63A9Mb544?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJDYr2SIyrNTERX2afF4EsZ64,Gui xe Vien Y Hoc Co Truyen TW,,,6,2.2,"Name: Bai gui xe CV Thong Nhat +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+CV+Th%E1%BB%91ng+Nh%E1%BA%A5t/@21.0082606,105.8456587?authuser=0&hl=en&entry=ttu +Reviews: 4 reviews + +Name: Bai gui xe C1 +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+C1/@21.0074865,105.84359409999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe/@21.008089,105.85000219999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai Gui Xe D4-D6 +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+D4-D6/@21.004815,105.8422449?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews",,,1,Gui xe Vien Y Hoc Co Truyen TW (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB9dSkdn-jWH0mNYaps43EOfb83v_gBiOsSSlkMYcB_G9Y0GRbmY7WOvbCGsHqicau6P5CPzJrjWwf8FXRxrAqyXu-WMBGw-FI-Z6T2Ydy_eMBiOppSOsKaBqQk3YLI0cBVsUoA=w408-h544-k-no=s1024,Parking lot,Parking lot,12 AM-11:30 PM,,Open All Days,"2R8X+78P, P. Nguyen Binh Khiem, Nguyen Du, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/G%E1%BB%ADi+xe+Vi%E1%BB%87n+Y+H%E1%BB%8Dc+C%E1%BB%95+Truy%E1%BB%81n+TW/data=!4m7!3m6!1s0x3135ab8c48f68a0d:0xae672c81179f665f!8m2!3d21.0157067!4d105.8483306!16s%2Fg%2F12ltpq69l!19sChIJDYr2SIyrNTERX2afF4EsZ64?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJYcXpLqKtNTERMIp2F356wzg,Bai trong xe oto,,,1,5,"Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe oto +Link: https://www.google.com/maps/search/B%C3%A3i+xe+oto/@20.998038299999997,105.8050507?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe Thinh Liet +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+Th%E1%BB%8Bnh+Li%E1%BB%87t/@20.971021699999998,105.8483868?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai trong xe oto (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB9guzPuBcKkVRHmjlr9y5mN5RwTLnK5D6M2i8VxeTHY9BlrrJXE0SEQvM_AvkdG7fVuuudvNOSoLXk06wjWtgmho-rqIcfKHPv7EAKbPUbikSnv-deB-3fk3xf5F2xMVyXYjQim=w426-h240-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"XRCX+G2C, Thinh Liet, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+tr%C3%B4ng+xe+%C3%B4t%C3%B4/data=!4m7!3m6!1s0x3135ada22ee9c561:0x38c37a7e17768a30!8m2!3d20.9713119!4d105.8475225!16s%2Fg%2F11qqf_dqh5!19sChIJYcXpLqKtNTERMIp2F356wzg?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ11qdmiKrNTERI4Q0g-r56rU,Bai do xe,,,0,0,"Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe O to dinh Giap Tu (do xe ngay, dem, theo thang) +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%94+t%C3%B4+%C4%91%C3%ACnh+Gi%C3%A1p+T%E1%BB%A9+(%C4%91%E1%BB%97+xe+ng%C3%A0y%2C+%C4%91%C3%AAm%2C+theo+th%C3%A1ng)/@20.976111799999998,105.85110789999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91o+xe/@21.001345,105.86488500000002?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe may +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+m%C3%A1y/@21.0507824,105.8033172?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe o to +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+%C3%B4+t%C3%B4/@21.008023599999998,105.8547246?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe (Owner),,,Parking lot,Parking lot,,,Open All Days,"Ngo 920 D. Bach Dang, Thanh Luong, Hai Ba Trung, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe/data=!4m7!3m6!1s0x3135ab229a9d5ad7:0xb5eaf9ea83348423!8m2!3d21.0067726!4d105.8695203!16s%2Fg%2F11fklq40wq!19sChIJ11qdmiKrNTERI4Q0g-r56rU?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJ5X8cJFitNTER52RAjdFf68k,Bai Gui Xe O To Khach San Muong Thanh,,,0,0,"Name: Bai Giu Xe Cuong Phong +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+C%C6%B0%E1%BB%9Dng+Phong/@20.9576875,105.7590723?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe CT1B2 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+CT1B2/@20.9637127,105.792153?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe CT1A Xala +Link: https://www.google.com/maps/search/B%C3%A3i+xe+CT1A+Xala/@20.963961899999997,105.79147909999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai do xe MQ VN +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+MQ+VN/@20.9751066,105.76271729999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai Gui Xe O To Khach San Muong Thanh (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB8a94VzSVCHCOOm2XkAzA1YC1SyCKbs8mwi-e9efXNlNLhInR5eHIow6WdB0Z2bJBgwy8kWSYqwkpgt_tx9ctao9jAaIzwUwg-8bxopzT5s-LCtnuwIgqQ07-5Bceir7Bg6f6Mprw=w408-h725-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"XQ6R+6MH, Khu do thi Xa La, Ha Dong, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4+Kh%C3%A1ch+S%E1%BA%A1n+M%C6%B0%E1%BB%9Dng+Thanh/data=!4m7!3m6!1s0x3135ad58241c7fe5:0xc9eb5fd18d4064e7!8m2!3d20.960571!4d105.791744!16s%2Fg%2F11glf3pf13!19sChIJ5X8cJFitNTER52RAjdFf68k?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJf6q5iBitNTERUMYARsQ2AxA,Nha De Xe Can Bo - Nhan Vien Benh Vien,,,9,3.9,"Name: Bai gui xe HH +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+HH/@20.962063600000004,105.8285465?authuser=0&hl=en&entry=ttu +Reviews: 3 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@21.0149662,105.84152209999999?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai de xe can bo +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%83+xe+c%C3%A1n+b%E1%BB%99/@21.0058781,105.84456519999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai gui xe BV Bach Mai +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+BV+B%E1%BA%A1ch+Mai/@21.0033904,105.840864?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Nha de xe Can bo +Link: https://www.google.com/maps/search/Nh%C3%A0+%C4%91%E1%BB%83+xe+C%C3%A1n+b%E1%BB%99/@21.0079294,105.82428259999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Nha De Xe Can Bo - Nhan Vien Benh Vien (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB-H0idBkdLeZ8cerTJIorfgdXSNGhowh4uvUn3ONub8499joIoFIQWr1hIy18anOpBJ6uVLOS53hV1BtK05uQVNuy_aNCbG-evmIKlC4WnBd94pbHRBbDrtB4fJmkecJW7eSVkJ=w408-h408-k-no=s1024,Parking lot for motorcycles,Parking lot for motorcycles,Open 24 hours,,Open All Days,"2R3Q+6V9, Phuong Mai, Dong Da, Ha Noi",,https://www.google.com/maps/place/Nh%C3%A0+%C4%90%E1%BB%83+Xe+C%C3%A1n+B%E1%BB%99+-+Nh%C3%A2n+Vi%C3%AAn+B%E1%BB%87nh+Vi%E1%BB%87n/data=!4m7!3m6!1s0x3135ad1888b9aa7f:0x100336c44600c650!8m2!3d21.0030423!4d105.8397335!16s%2Fg%2F11h6psyjsb!19sChIJf6q5iBitNTERUMYARsQ2AxA?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJC7e4GMGtNTERjbJE6vtUCZA,Bai xe CT1B2,,,0,0,"Name: Bai Giu Xe Cuong Phong +Link: https://www.google.com/maps/search/B%C3%A3i+Gi%E1%BB%AF+Xe+C%C6%B0%E1%BB%9Dng+Phong/@20.9576875,105.7590723?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Gui Xe O To Khach San Muong Thanh +Link: https://www.google.com/maps/search/B%C3%A3i+G%E1%BB%ADi+Xe+%C3%94+T%C3%B4+Kh%C3%A1ch+S%E1%BA%A1n+M%C6%B0%E1%BB%9Dng+Thanh/@20.960570999999998,105.791744?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe CT1A Xala +Link: https://www.google.com/maps/search/B%C3%A3i+xe+CT1A+Xala/@20.963961899999997,105.79147909999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai Do Xe O To Cho Yen Phuc +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%90%E1%BB%97+Xe+%C3%94+T%C3%B4+Ch%E1%BB%A3+Y%C3%AAn+Ph%C3%BAc/@20.9693032,105.7860858?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai xe CT1B2 (Owner),,,Parking lot,Parking lot,,,Open All Days,"XQ7R+FVJ, Khu do thi Xa La, Ha Dong, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+CT1B2/data=!4m7!3m6!1s0x3135adc118b8b70b:0x900954fbea44b28d!8m2!3d20.9637127!4d105.792153!16s%2Fg%2F11lkc3qbdc!19sChIJC7e4GMGtNTERjbJE6vtUCZA?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJmU8Wax-sNTERh0U2o9qGpw8,Bai xe Dong Xa 2,,,1,5,"Name: Bai rua xe do xe +Link: https://www.google.com/maps/search/B%C3%A3i+r%E1%BB%ADa+xe+%C4%91%E1%BB%97+xe/@20.9834615,105.8704131?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe Huong Bao +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+H%C6%B0%C6%A1ng+B%E1%BA%A3o/@20.980169,105.8891658?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe nha Nghe +Link: https://www.google.com/maps/search/B%C3%A3i+xe+nh%C3%A0+Ngh%C3%A9/@20.9851495,105.8637127?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai Xe Trung Quan +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+Trung+Qu%C3%A2n/@20.992809599999998,105.8742443?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,,Bai xe Dong Xa 2 (Owner),https://www.google.com/maps/contrib/112905087962132743314,https://lh3.googleusercontent.com/gps-cs-s/AB5caB85qelTC0lzr5COxfFs0sPkTvjGfFEKVoiEc5bgJOU7_2Ow4xj06DFBlomNv0CQU-TRb0f-mg--maDZoCjvFNlJ0aWaTIqImJeAWwEJ8WcvRw7jIV_5RUzL_S9M6ziLECTcVmi3=w408-h306-k-no=s1024,Parking lot,Parking lot,Open 24 hours,,Open All Days,"Unnamed Road, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+%C4%90%E1%BB%93ng+Xa+2/data=!4m7!3m6!1s0x3135ac1f6b164f99:0xfa786daa3364587!8m2!3d20.9835987!4d105.8718431!16s%2Fg%2F11f3rcbjn7!19sChIJmU8Wax-sNTERh0U2o9qGpw8?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJddLHJxOtNTERcO_MzfAWc5M,Bai xe nha Nghe,,,0,0,"Name: Bai xe Hang Nga +Link: https://www.google.com/maps/search/B%C3%A3i+xe+H%E1%BA%B1ng+Nga/@20.9721098,105.865428?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai xe Dong Xa 2 +Link: https://www.google.com/maps/search/B%C3%A3i+xe+%C4%90%E1%BB%93ng+Xa+2/@20.983598699999998,105.8718431?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe/@20.965961,105.82387650000001?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai Xe Sang Man +Link: https://www.google.com/maps/search/B%C3%A3i+Xe+Sang+Man/@20.9839067,105.8627039?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Bai xe TNC Tam Trinh +Link: https://www.google.com/maps/search/B%C3%A3i+xe+TNC+Tam+Trinh/@20.96531,105.858705?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai xe nha Nghe (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB9XWhFQQZQE9TuLKmkO3mT_lShBaM33DeBAYtaOjZ0ZRbM5JuAE3c2ANzoljR_JUWPFbsQh0Jsy2woqW_017DWgpQgE8Q2MhNteOrNUvCpr6HeOgWCGfwW_9JPhMuJhw3-oaIWf=w408-h306-k-no=s1024,Parking lot,Parking lot,,,Open All Days,"409 D. Tam Trinh, Hoang Van Thu, Hoang Mai, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+xe+nh%C3%A0+Ngh%C3%A9/data=!4m7!3m6!1s0x3135ad1327c7d275:0x937316f0cdccef70!8m2!3d20.9851495!4d105.8637127!16s%2Fg%2F11sj9ty3mw!19sChIJddLHJxOtNTERcO_MzfAWc5M?authuser=0&hl=en&rclk=1,bai do xe gan day +ChIJh2nCAQBTNDERELTLHZYdvAY,Bai do xe Thien duong Bao Son,,,4,3.3,"Name: Bai do xe tho quan +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+th%E1%BB%95+quan/@21.015855,105.83514410000001?authuser=0&hl=en&entry=ttu +Reviews: 2 reviews + +Name: Bai gui xe son duong +Link: https://www.google.com/maps/search/B%C3%A3i+g%E1%BB%ADi+xe+s%C6%A1n+d%C6%B0%C6%A1ng/@21.0667632,105.82316589999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Bai do xe P11 - An Son Group +Link: https://www.google.com/maps/search/B%C3%A3i+%C4%91%E1%BB%97+xe+P11+-+An+S%C6%A1n+Group/@21.018893199999997,105.72636609999999?authuser=0&hl=en&entry=ttu +Reviews: 1 reviews + +Name: Doi Dien Thien Duong Bao Son - Dai Lo Thang Long +Link: https://www.google.com/maps/search/%C4%90%E1%BB%91i+Di%E1%BB%87n+Thi%C3%AAn+%C4%90%C6%B0%E1%BB%9Dng+B%E1%BA%A3o+S%C6%A1n+-+%C4%90%E1%BA%A1i+L%E1%BB%99+Th%C4%83ng+Long/@21.011167,105.72874999999999?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews + +Name: Hien bang tai +Link: https://www.google.com/maps/search/Hi%E1%BB%81n+b%C4%83ng+t%E1%BA%A3i/@21.0112646,105.7290081?authuser=0&hl=en&entry=ttu +Reviews: No Reviews reviews",,,1,Bai do xe Thien duong Bao Son (Owner),,https://lh3.googleusercontent.com/gps-cs-s/AB5caB-0CcM4nm-HBPZIsWbkezNHOABK5G84TALPYcXr7MaYuqXTlW8cQ71XI7cxHhTH0XtyU0pyAOiTP8QmSyz8rql7UdG-YUFdvqVVVcLmq6Kiz5b3_ugF9bK8V6PK4R8i9_HjKz2jcUJia4-J=w408-h240-k-no-pi-0.11254019-ya179.88747-ro0-fo100=s1024,Parking lot,Parking lot,,,Open All Days,"XPXM+MQ, An Khanh, Hoai Duc, Ha Noi",,https://www.google.com/maps/place/B%C3%A3i+%C4%91%E1%BB%97+xe+Thi%C3%AAn+%C4%91%C6%B0%E1%BB%9Dng+B%E1%BA%A3o+S%C6%A1n/data=!4m7!3m6!1s0x3134530001c26987:0x6bc1d961dcbb410!8m2!3d20.9991967!4d105.7344674!16s%2Fg%2F11vqrq80zg!19sChIJh2nCAQBTNDERELTLHZYdvAY?authuser=0&hl=en&rclk=1,bai do xe gan day diff --git a/backend/prisma/packingCrawler/model.ts b/backend/prisma/packingCrawler/model.ts new file mode 100644 index 0000000..0216743 --- /dev/null +++ b/backend/prisma/packingCrawler/model.ts @@ -0,0 +1,32 @@ +export class CSVRow { + place_id?: string; + name?: string; + description?: string; + is_spending_on_ads?: string; + reviews?: string; + rating?: string; + competitors?: string; + website?: string; + phone?: string; + can_claim?: string; + owner_name?: string; + owner_profile_link?: string; + featured_image?: string; + main_category?: string; + categories?: string; + workday_timing?: string; + is_temporarily_closed?: string; + closed_on?: string; + address?: string; + review_keywords?: string; + link?: string; + query?: string; + lat?: number; + lng?: number; + city?: string; + district?: string; + ward?: string; + open?: string; + close?: string; + +} \ No newline at end of file diff --git a/backend/prisma/packingCrawler/seed.ts b/backend/prisma/packingCrawler/seed.ts new file mode 100644 index 0000000..9374782 --- /dev/null +++ b/backend/prisma/packingCrawler/seed.ts @@ -0,0 +1,89 @@ +import { BookingType, PrismaClient, SlotType } from '@prisma/client'; +// import { PrismaClient } from '@prisma/client'; +import fs from 'fs'; +import path from 'path'; +import csv from 'csv-parser'; +import { CSVRow } from './model'; +import { URLtoLatLng, convertAddressToDetail, convertWorkdayTiming } from '../../src/share/tool'; +async function readCsv(csvFileName): Promise { + function doParse(resolve) { + const results = []; + fs.createReadStream(csvFileName) + .pipe(csv()) + .on('data', (data: CSVRow) => { + + // convert lat lng + const latLng = URLtoLatLng(data.link); + // convert workday timing + const workdayTiming = convertWorkdayTiming(data.workday_timing); + // convert address to detail + const addressDetail = convertAddressToDetail(data.address); + results.push({ ...data, ...latLng, ...addressDetail, ...workdayTiming }); + }) + .on('end', () => { + resolve(results); + }); + } + return new Promise((resolve) => doParse(resolve)); +} +const prisma = new PrismaClient(); +async function main() { + prisma.$transaction(async (tx: PrismaClient) => { + console.log('Seeding...'); + try { + // get list file csv from forder dumps + const directoryPath = path.join(__dirname, 'csv'); + // read directory + const files = fs.readdirSync(directoryPath); + // listing all files using forEach + for (const file of files) { + if (!file.endsWith('.csv')) continue; + const filePath = path.join(directoryPath, file); + const slotsData = await readCsv(filePath); + // convert to json + + // insert to db + await tx.slot.createMany({ + data: slotsData.map((e) => ({ + lat: e.lat, + lng: e.lng, + address: e.address, + city: e.city, + district: e.district, + ward: e.ward, + name: e.name, + total: 99, + empty: 99, + alow_booking_type: BookingType.All, + slot_type: SlotType.Orther, + images: [], + phone: e.phone, + close: e.close, + open: e.open, + directions: { + competitors: e.competitors, + rating: e.rating, + reviews: e.reviews, + website: e.website, + }, + })), + skipDuplicates: true, + }); + console.log(`Inserted ${slotsData.length} slots from ${file}`); + } + + } catch (error) { + console.error('Error reading CSV file:', error); + } + }); +} + +main() + .catch((e) => { + console.error(e); + process.exit(1); + }) + .finally(async () => { + // close the Prisma Client at the end + // await prisma.$disconnect(); + }); diff --git a/backend/prisma/schema.prisma b/backend/prisma/schema.prisma new file mode 100644 index 0000000..6009459 --- /dev/null +++ b/backend/prisma/schema.prisma @@ -0,0 +1,226 @@ +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema + +generator client { + provider = "prisma-client-js" + + // https://github.com/prisma/prisma-client-js/issues/616#issuecomment-616107821 + binaryTargets = ["native", "darwin", "debian-openssl-1.1.x"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +model User { + id Int @id @default(autoincrement()) + email String? @unique + username String? @unique + password String? + phone String? @unique + fullname String? + dob DateTime? + gender Gender @default(Female) + bookings Booking[] + language Language @default(vi) + Slots Slot[] + Comments Comment[] + created_at DateTime @default(now()) @db.Timestamptz(3) + updated_at DateTime @updatedAt @db.Timestamptz(3) + deleted_at DateTime? @db.Timestamptz(3) + Like Like[] + Vote Vote[] + + @@index([id, email]) +} + +model Booking { + id Int @id @default(autoincrement()) + path String? + image String? + public Boolean @default(true) + user User @relation(fields: [user_id], references: [id], onUpdate: Cascade, onDelete: Cascade) + user_id Int + status BookingStatus @default(pending) + slot Slot @relation(fields: [slot_id], references: [id]) + slot_id Int + start_at DateTime @db.Timestamptz(3) + end_at DateTime @db.Timestamptz(3) + owner String + license_plates String + contact String + pricing Int? + booking_type BookingType? @default(All) + slot_type SlotType? @default(Car) + created_at DateTime @default(now()) @db.Timestamptz(3) + updated_at DateTime @updatedAt @db.Timestamptz(3) + deleted_at DateTime? @db.Timestamptz(3) + + @@index([user_id, id]) +} + +model Slot { + id Int @id @default(autoincrement()) + name String + lat Float + lng Float + images String[] @default([]) + address String + district String + ward String + city String + destination String? + phone String? + total Int + empty Int + published Boolean @default(false) + tenant Tenant? @relation(fields: [tenantId], references: [id]) + tenantId Int? + user User? @relation(fields: [userId], references: [id]) + userId Int? + distance Float? + duration Float? + directions Json? + slot_type SlotType? @default(Car) + alow_booking_type BookingType? @default(All) + open String? @db.VarChar(5) + close String? @db.VarChar(5) + created_at DateTime @default(now()) @db.Timestamptz(3) + updated_at DateTime @updatedAt @db.Timestamptz(3) + deleted_at DateTime? @db.Timestamptz(3) + pricing_per_hour Int @default(0) + Bookings Booking[] + Comments Comment[] + Vote Vote[] + + @@index([id]) +} + +model Admin { + id Int @id @default(autoincrement()) + username String @unique + password String + password_confirmation String? + street String? + city String? + province String? + first_name String + last_name String + phone String + dob DateTime? + language Language @default(vi) + last_login_at DateTime? + current_login_at DateTime? + last_login_failed_at DateTime? + consecutive_login_penalty Int @default(0) + avatarUrl String? + active Boolean @default(true) + last_lockout_at DateTime? + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model Tenant { + id Int @id @default(autoincrement()) + email String? @unique + username String @unique + password String + password_confirmation String? + street String? + city String? + province String? + postal_code String? + first_name String + last_name String + phone String + language Language @default(vi) + last_login_at DateTime? + current_login_at DateTime? + last_login_failed_at DateTime? + consecutive_login_penalty Int @default(0) + avatarUrl String? + active Boolean @default(true) + last_lockout_at DateTime? + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + Slots Slot[] + Comments Comment[] +} + +model File { + id Int @id @default(autoincrement()) + path String + slot_id Int? + user_id Int? + size Int + mine_type String? + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + deletedAt DateTime? +} + +model History { + id Int @id @default(autoincrement()) +} + +model Comment { + id Int @id @default(autoincrement()) + slot_id Int + content String? + tenant Tenant? @relation(fields: [tenantId], references: [id]) + tenantId Int? + user User? @relation(fields: [userId], references: [id]) + userId Int? + slot Slot @relation(fields: [slot_id], references: [id]) + likes Like[] +} + +model Like { + id Int @id @default(autoincrement()) + Comment Comment @relation(fields: [commentId], references: [id]) + commentId Int + user User? @relation(fields: [userId], references: [id]) + userId Int? +} + +model Vote { + id Int @id @default(autoincrement()) + slot Slot @relation(fields: [slot_id], references: [id]) + slot_id Int + user User? @relation(fields: [userId], references: [id]) + userId Int? + source Int @default(0) + type Int @default(0) +} + +enum Language { + vi + en +} + +enum Gender { + Male + Female + LGBT +} + +enum BookingStatus { + done + pending + reject + cancel + out +} + +enum SlotType { + Car + Mortorbike + Orther +} + +enum BookingType { + Fulltime + Parttime + All +} diff --git a/backend/prisma/seed.ts b/backend/prisma/seed.ts new file mode 100644 index 0000000..035e48f --- /dev/null +++ b/backend/prisma/seed.ts @@ -0,0 +1,23 @@ +import { PrismaClient } from '@prisma/client'; +import tenant from './tenant'; +// initialize the Prisma Client +const prisma = new PrismaClient(); + +async function main() { + // create two dummy articles + return prisma.$transaction(async (tx: PrismaClient) => { + console.log('Seeding...'); + await tenant(tx); + }); +} + +// execute the main function +main() + .catch((e) => { + console.error(e); + process.exit(1); + }) + .finally(async () => { + // close the Prisma Client at the end + await prisma.$disconnect(); + }); diff --git a/backend/prisma/slot.ts b/backend/prisma/slot.ts new file mode 100644 index 0000000..4d19740 --- /dev/null +++ b/backend/prisma/slot.ts @@ -0,0 +1,23 @@ +import { PrismaClient } from '@prisma/client'; + +import { data as slots } from './dump/slot.json'; +async function main(prisma: PrismaClient) { + console.log(`seed tenant data: ${slots}`); + await prisma.slot.createMany({ + data: slots.map((e) => ({ + lat: e.lat, + lng: e.lng, + address: e.address, + city: e.city, + district: e.district, + ward: e.ward, + directions: e.directions, + name: e.name, + tenantId: e.tenantId, + total: 5, + empty: 0, + })), + }); +} + +export default main; diff --git a/backend/prisma/tenant.ts b/backend/prisma/tenant.ts new file mode 100644 index 0000000..375add8 --- /dev/null +++ b/backend/prisma/tenant.ts @@ -0,0 +1,39 @@ +import { PrismaClient } from '@prisma/client'; +import { hashSync } from 'bcrypt'; + +import { data as tenants } from './dump/tenant.json'; +import { data as slots } from './dump/slot.json'; + +async function main(prisma: PrismaClient) { + console.log(`seed tenant data: ${tenants}`); + + await prisma.tenant.create({ + data: { + email: tenants[0].email, + phone: tenants[0].phone, + username: tenants[0].username, + password: hashSync(tenants[0].password, 10), + first_name: tenants[0].first_name, + last_name: tenants[0].last_name, + Slots: { + create: slots.map((e) => ({ + lat: e.lat, + lng: e.lng, + address: e.address, + city: e.city, + district: e.district, + ward: e.ward, + directions: e.directions, + name: e.name, + total: 5, + empty: 0, + })), + }, + }, + include: { + Slots: true, + }, + }); +} + +export default main; diff --git a/backend/simple-seed.ts b/backend/simple-seed.ts new file mode 100644 index 0000000..e69de29 diff --git a/backend/src/app/app.controller.spec.ts b/backend/src/app/app.controller.spec.ts new file mode 100644 index 0000000..b0b2f1f --- /dev/null +++ b/backend/src/app/app.controller.spec.ts @@ -0,0 +1,22 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { AppController } from './app.controller'; +import { AppService } from './app.service'; + +describe('AppController', () => { + let appController: AppController; + + beforeEach(async () => { + const app: TestingModule = await Test.createTestingModule({ + controllers: [AppController], + providers: [AppService], + }).compile(); + + appController = app.get(AppController); + }); + + describe('root', () => { + it('should return "Hello World!"', () => { + expect(appController.healthCheck()).toBe('Hello World!'); + }); + }); +}); diff --git a/backend/src/app/app.controller.ts b/backend/src/app/app.controller.ts new file mode 100644 index 0000000..27effdd --- /dev/null +++ b/backend/src/app/app.controller.ts @@ -0,0 +1,14 @@ +import { Controller, Get } from '@nestjs/common'; +import { AppService } from './app.service'; +import { Public } from 'src/auth/decorators/public.auth'; + +@Controller() +export class AppController { + constructor(private readonly appService: AppService) {} + + @Get('health-check') + @Public() + healthCheck(): string { + return this.appService.healthCheck(); + } +} diff --git a/backend/src/app/app.module.ts b/backend/src/app/app.module.ts new file mode 100644 index 0000000..fda0ff9 --- /dev/null +++ b/backend/src/app/app.module.ts @@ -0,0 +1,47 @@ +import { Module } from '@nestjs/common'; +import { AppController } from './app.controller'; +import { AppService } from './app.service'; +import { PrismaModule } from '../prisma/prisma.module'; +import { AppConfigModule } from '../config/app/app-config.module'; +import { UserController } from '../modules/user/user.controller'; +import { HookController } from '../modules/hook/hook.controller'; +import { APP_GUARD } from '@nestjs/core'; +import { JwtAuthGuard } from '../auth/guard/jwt-auth.guard'; +import { AuthModule } from '../auth/auth.module'; +import { RedisModule } from '../cache/cache.module'; +import { HeaderApiKeyStrategy } from '../auth/strategies/api-key.strategy'; +// import { BookingModule } from '../modules/booking/booking.module'; +import { SlotModule } from '../modules/slot/slot.module'; +import { BookingSlotModule } from '../modules/booking-slot/booking-slot.module'; +import { AppConfigService } from '../config/app/app-config.service'; +import { MailModule } from 'src/share/mail/mail.module'; +import { FilesModule } from 'src/modules/files/files.module'; +import { CommentModule } from 'src/modules/comment/comment.module'; +import { ZNSModule } from 'src/modules/zns/zns.module'; + +@Module({ + imports: [ + AppConfigModule, + PrismaModule, + CommentModule, + AuthModule, + RedisModule, + // BookingModule, + BookingSlotModule, + SlotModule, + MailModule, + FilesModule, + ZNSModule, + ], + controllers: [AppController, UserController, HookController], + providers: [ + AppService, + AppConfigService, + { + provide: APP_GUARD, + useClass: JwtAuthGuard, + }, + HeaderApiKeyStrategy, + ], +}) +export class AppModule {} diff --git a/backend/src/app/app.service.ts b/backend/src/app/app.service.ts new file mode 100644 index 0000000..4d90cbf --- /dev/null +++ b/backend/src/app/app.service.ts @@ -0,0 +1,8 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class AppService { + healthCheck(): string { + return 'Done!'; + } +} diff --git a/backend/src/auth/auth.controller.ts b/backend/src/auth/auth.controller.ts new file mode 100644 index 0000000..14d1bc5 --- /dev/null +++ b/backend/src/auth/auth.controller.ts @@ -0,0 +1,71 @@ +import { Controller, Post, Body } from '@nestjs/common'; +import { + AdminLoginGoogle, + ChangePassword, + TenantSignUp, + UserConfirmSignUp, + UserLogin, + UserSignUp, +} from './dto/login.dto'; +import { AuthService } from './auth.service'; +import { Public } from './decorators/public.auth'; +import { RefreshTokenDto } from './dto/refresh-token.dto'; +import { AuthUser } from 'src/common/auth/decorators'; +import { AuthPayload } from './decorators/auth.payload'; + +@Controller('auth') +export class AuthController { + constructor(private readonly authService: AuthService) {} + + @Public() + @Post('login') + async loginByUsername(@Body() body: UserLogin) { + return await this.authService.userLogin(body); + } + + @Public() + @Post('/sign-up') + async registerUser(@Body() body: UserSignUp) { + return await this.authService.signUpUser(body); + } + + @Post('/change-password') + async changePassword( + @Body() body: ChangePassword, + @AuthUser() user: AuthPayload, + ) { + return await this.authService.changePassword(body, user); + } + + // @Public() + // @Post('/confirm-sign-up') + // async confirmSignUp(@Body() body: UserConfirmSignUp) { + // return await this.authService.confirmSignUpUser(body); + // } + + @Public() + @Post('login-google') + async loginGoogle(@Body() googleLogin: AdminLoginGoogle) { + return await this.authService.userLoginByGoogleOAuth2( + googleLogin.google_token, + ); + } + + @Public() + @Post('refresh-token') + async userRefreshToken(@Body() data: RefreshTokenDto) { + return await this.authService.refreshToken(data.refresh_token); + } + + @Public() + @Post('tenant/login') + async userLogin(@Body() data: UserLogin) { + return await this.authService.tenantLogin(data); + } + + @Public() + @Post('tenant/sign-up') + async registerTenant(@Body() data: TenantSignUp) { + return await this.authService.signUpTenant(data); + } +} diff --git a/backend/src/auth/auth.module.ts b/backend/src/auth/auth.module.ts new file mode 100644 index 0000000..ff68d11 --- /dev/null +++ b/backend/src/auth/auth.module.ts @@ -0,0 +1,50 @@ +import { Module } from '@nestjs/common'; + +import { GoogleStrategy } from './strategies/google.strategy'; +import { PassportModule } from '@nestjs/passport'; +import { JwtModule } from '@nestjs/jwt'; +import { HeaderApiKeyStrategy } from './strategies/api-key.strategy'; +import { JwtStrategy } from './strategies/jwt.strategy'; +import { AppConfigModule } from 'src/config/app/app-config.module'; +import { RedisModule } from 'src/cache/cache.module'; +import { AuthService } from './auth.service'; +import { AppConfigService } from 'src/config/app/app-config.service'; +import { AuthController } from './auth.controller'; +import { PrismaModule } from 'src/prisma/prisma.module'; +import { PrismaService } from 'src/prisma/prisma.service'; +import { MailModule } from 'src/share/mail/mail.module'; +import { MailService } from 'src/share/mail/mail.service'; +// import { PrismaModule, PrismaService } from 'nestjs-prisma'; + +@Module({ + imports: [ + AppConfigModule, + PassportModule.register({ defaultStrategy: 'jwt' }), + JwtModule.registerAsync({ + inject: [AppConfigService], + imports: [AppConfigModule], + useFactory: (cf: AppConfigService) => { + return { + secret: cf.jwtAccessSecret, + signOptions: { + expiresIn: cf.jwtExpiresIn, + }, + }; + }, + }), + RedisModule, + PrismaModule, + MailModule, + ], + controllers: [AuthController], + providers: [ + AppConfigService, + GoogleStrategy, + HeaderApiKeyStrategy, + JwtStrategy, + AuthService, + PrismaService, + MailService, + ], +}) +export class AuthModule {} diff --git a/backend/src/auth/auth.service.ts b/backend/src/auth/auth.service.ts new file mode 100644 index 0000000..218f86c --- /dev/null +++ b/backend/src/auth/auth.service.ts @@ -0,0 +1,393 @@ +import { + BadRequestException, + Injectable, + Logger, + UnauthorizedException, +} from '@nestjs/common'; +import { hashSync, compareSync } from 'bcrypt'; +import { JwtService } from '@nestjs/jwt'; +import { + LoginTicket, + OAuth2Client as GoogleOAuth2Client, + OAuth2Client, +} from 'google-auth-library'; +import { RedisClientService } from 'src/cache/cache.service'; +import { + EMAIL_EXISTS, + EXP_FIRST_LOGIN, + PHONE_EXISTS, + TENANT_EXISTS, + TENANT_NOTFOUND, + USER_NOTFOUND, + VERIFY_GOOGLE_TOKEN_FAILED, + VERIFY_TENANT_FAILED, + VERIFY_USER_FAILED, +} from 'src/share/eCode'; +import { AppConfigService } from 'src/config/app/app-config.service'; +import { UserEntity } from 'src/modules/user/entities/user.entity'; +import { PrismaService } from 'src/prisma/prisma.service'; +import { convertShortTimeToSecond } from 'src/share/tool'; +import { ChangePassword, TenantSignUp, UserConfirmSignUp, UserLogin, UserSignUp } from './dto/login.dto'; +import { eUserType } from 'src/common/auth/type'; +import { AuthPayload } from './decorators/auth.payload'; +import { bool } from 'joi'; + +@Injectable() +export class AuthService { + private readonly logger = new Logger(AuthService.name); + private readonly oAuth2client: GoogleOAuth2Client; + + constructor( + private readonly redisService: RedisClientService, + private readonly jwtService: JwtService, + private readonly configService: AppConfigService, + private prisma: PrismaService, + ) { + // const { clientId, clientSecret } = this.configService.get('googleAuth'); + this.oAuth2client = new OAuth2Client({ + clientId: process.env.GOOGLE_CLIENT_ID, + clientSecret: process.env.GOOGLE_SECRET, + }); + } + + async generateToken( + account: string, + dataToken: AuthPayload, + first_login = Date.now(), + ) { + const tid = hashSync(account, 10); + const payload = { + tid, + ...dataToken, + first_login, + }; + + const payloadRefreshToken = { + tid, + ...dataToken, + first_login, + }; + const [access_token, refresh_token] = await Promise.all([ + this.jwtService.signAsync(payload, { + secret: this.configService.jwtAccessSecret, + expiresIn: this.configService.jwtExpiresIn, + }), + this.jwtService.signAsync(payloadRefreshToken, { + secret: this.configService.jwtRefreshSecret, + expiresIn: this.configService.jwtRefreshIn, + }), + ]); + + return { access_token, refresh_token, tid }; + } + + async userLoginByGoogleOAuth2(token: string): Promise<{ + access_token: string; + refresh_token: string; + user: UserEntity; + }> { + try { + const googleLoginTicket: LoginTicket = + await this.oAuth2client.verifyIdToken({ + idToken: token, + audience: process.env.GOOGLE_CLIENT_ID, + }); + + const { email } = googleLoginTicket.getPayload(); + + let user = await this.prisma.user.findFirst({ + where: { + email, + }, + }); + + if (!user) { + user = await this.prisma.user.create({ + data: { + email, + fullname: email, + }, + }); + } + const { access_token, refresh_token, tid } = await this.generateToken( + user.email, + { + id: user.id, + account: user.email, + type: eUserType.USER, + containsPassword: Boolean(user.password), + }, + ); + await this.redisService.markLogin(user.id, tid); + return { + user: user, + access_token, + refresh_token, + }; + } catch (error) { + this.logger.error(error); + if (error instanceof BadRequestException) { + throw error; + } + throw new UnauthorizedException(VERIFY_GOOGLE_TOKEN_FAILED); + } + } + + async userLogin(data: UserLogin): Promise<{ + access_token: string; + refresh_token: string; + user: UserEntity; + }> { + try { + const user = await this.prisma.user.findFirst({ + where: { + username: data.username, + }, + }); + if (!user) { + throw new BadRequestException(USER_NOTFOUND); + } + const { access_token, refresh_token, tid } = await this.generateToken( + user.username, + { + id: user.id, + account: user.username, + type: eUserType.USER, + containsPassword: Boolean(user.password), + }, + ); + // Check pass + if (!compareSync(data.password, user.password)) { + throw new UnauthorizedException(VERIFY_TENANT_FAILED); + } + await this.redisService.markLogin(user.id, tid); + return { + access_token, + refresh_token, + user: user, + }; + } catch (error) { + this.logger.error(error); + if (error instanceof BadRequestException) { + throw error; + } + throw new UnauthorizedException(VERIFY_USER_FAILED); + } + } + + async tenantLogin(data: UserLogin): Promise<{ + access_token: string; + refresh_token: string; + }> { + try { + const tenant = await this.prisma.tenant.findFirst({ + where: { + username: data.username, + }, + }); + + if (!tenant) { + throw new BadRequestException(TENANT_NOTFOUND); + } + + const { access_token, refresh_token, tid } = await this.generateToken( + tenant.username, + { + id: tenant.id, + account: tenant.username, + type: eUserType.TENANT, + containsPassword: Boolean(tenant.password), + }, + ); + // Check pass + if (!compareSync(data.password, tenant.password)) { + throw new UnauthorizedException(VERIFY_TENANT_FAILED); + } + await this.redisService.markLogin(tenant.id, tid); + return { + access_token, + refresh_token, + }; + } catch (error) { + this.logger.error(error); + if (error instanceof BadRequestException) { + throw error; + } + throw new UnauthorizedException(VERIFY_TENANT_FAILED); + } + } + + async refreshToken(refreshToken: string) { + let decodedRefreshToken = null; + try { + decodedRefreshToken = await this.jwtService.verifyAsync(refreshToken, { + secret: this.configService.jwtRefreshSecret, + }); + const { id: sub, tid, type } = decodedRefreshToken; + if (!(await this.redisService.checkRefreshTokenFound(sub, tid))) { + throw new UnauthorizedException('Decoded token not found'); + } + //check first login + const dateExp: any = new Date(decodedRefreshToken.first_login); + const timeAutoLogout = this.configService.jwtRefreshIn || '30d'; + dateExp.setSeconds( + dateExp.getSeconds() + convertShortTimeToSecond(timeAutoLogout), + ); + + if (Date.now() > dateExp) { + const { sub, tid } = decodedRefreshToken; + await this.logout(sub, tid); + throw new UnauthorizedException(EXP_FIRST_LOGIN); + } + + const user = + type == eUserType.USER + ? await this.prisma.user.findFirstOrThrow({ + where: { + email: decodedRefreshToken.account, + }, + }) + : await this.prisma.tenant.findFirstOrThrow({ + where: { + username: decodedRefreshToken.account, + }, + }); + + const { + access_token, + refresh_token, + tid: _tid, + } = await this.generateToken( + decodedRefreshToken.account, + { + id: user.id, + account: type == eUserType.USER ? user.email : user.username, + type, + containsPassword: Boolean(user.password), + }, + decodedRefreshToken.first_login, + ); + + await this.logout(sub, tid); + await this.redisService.markLogin(user.id, _tid); + return { access_token, refresh_token }; + } catch (error) { + console.log(error); + + this.logger.error(error.message); + throw new UnauthorizedException(error.message); + } + } + + async logout(uid: string, tid: string) { + try { + if (!tid) return false; + await this.redisService.delMarkLogin(uid, tid); + return true; + } catch (err) { + this.logger.error(err.message); + return false; + } + } + + async signUpTenant(data: TenantSignUp) { + const { username, password } = data; + delete data.password_confirmation; + return await this.prisma.$transaction(async (tx) => { + const teannt = await tx.tenant.findFirst({ + where: { + username, + }, + }); + if (teannt) { + throw new BadRequestException(TENANT_EXISTS); + } + const newTenant = await tx.tenant.create({ + data: { + ...data, + password: hashSync(password, 10), + }, + }); + + return { ...newTenant, password: undefined }; + }); + } + + async signUpUser(data: UserSignUp) { + const { username, password } = data; + delete data.password_confirmation; + const userQuery: any[] = [ + { + username: username, + }, + ]; + if (data.phone) { + userQuery.push({ phone: data.phone }); + } + if (data.email) { + userQuery.push({ email: data.email }); + } + return await this.prisma.$transaction(async (tx) => { + const user = await tx.user.findFirst({ + where: { + OR: userQuery, + }, + }); + if (user) { + if (user.username == username) { + throw new BadRequestException(TENANT_EXISTS); + } + if (user.phone == data.phone) { + throw new BadRequestException(PHONE_EXISTS); + } + if (user.email == data.email) { + throw new BadRequestException(EMAIL_EXISTS); + } + throw new BadRequestException(TENANT_EXISTS); + } + const newUser = await tx.user.create({ + data: { + ...data, + password: hashSync(password, 10), + }, + }); + + return { ...newUser, password: undefined }; + }); + } + + async confirmSignUpUser(data: UserConfirmSignUp) { + this.logger.log('confirmSignUpUser', data); + } + + async changePassword(data: ChangePassword, auth: AuthPayload) { + const { old_password, password } = data; + return await this.prisma.$transaction(async (tx) => { + const user = await tx.user.findFirst({ + where: { + id: +auth.id, + }, + }); + if (!user) { + throw new BadRequestException(USER_NOTFOUND); + } + if (!user.password?.length) { + return; + } + if (!compareSync(old_password, user.password)) { + throw new UnauthorizedException(VERIFY_USER_FAILED); + } + const newUser = await tx.user.update({ + where: { + id: +auth.id, + }, + data: { + password: hashSync(password, 10), + }, + }); + + return { ...newUser, password: undefined }; + }); + + } +} diff --git a/backend/src/auth/decorators/auth.payload.ts b/backend/src/auth/decorators/auth.payload.ts new file mode 100644 index 0000000..81208ec --- /dev/null +++ b/backend/src/auth/decorators/auth.payload.ts @@ -0,0 +1,53 @@ +import { + ExecutionContext, + UnauthorizedException, + createParamDecorator, +} from '@nestjs/common'; +import { eUserType } from 'src/common/auth/type'; + +export type AuthPayload = { + id: string | number; + account: string; + type: eUserType; + containsPassword: boolean; +}; +export type RefreshTokenPayload = AuthPayload & { + prefix: string; + tid: string; +}; +// export type AuthUserPayloadType = JwtAccessTokenPayload; + +export const AuthAllPayload = createParamDecorator( + async (_: unknown, ctx: ExecutionContext) => { + const request = ctx.switchToHttp().getRequest(); + const user = request.user; + return user; + }, +); + +export const AuthUser = createParamDecorator( + async (_: unknown, ctx: ExecutionContext) => { + const request = ctx.switchToHttp().getRequest(); + const user = request.user; + if (user.type !== eUserType.USER) throw new UnauthorizedException(); + return user; + }, +); + +export const AuthTenant = createParamDecorator( + async (_: unknown, ctx: ExecutionContext) => { + const request = ctx.switchToHttp().getRequest(); + const user = request.user; + if (user.type !== eUserType.TENANT) throw new UnauthorizedException(); + return user; + }, +); + +export const AuthAdmin = createParamDecorator( + async (_: unknown, ctx: ExecutionContext) => { + const request = ctx.switchToHttp().getRequest(); + const user = request.user; + if (user.type !== eUserType.ADMIN) throw new UnauthorizedException(); + return user; + }, +); diff --git a/backend/src/auth/decorators/match.decorator.ts b/backend/src/auth/decorators/match.decorator.ts new file mode 100644 index 0000000..46ca915 --- /dev/null +++ b/backend/src/auth/decorators/match.decorator.ts @@ -0,0 +1,28 @@ +import { + registerDecorator, + ValidationArguments, + ValidationOptions, + ValidatorConstraint, + ValidatorConstraintInterface, +} from 'class-validator'; + +export function Match(property: string, validationOptions?: ValidationOptions) { + return (object: any, propertyName: string) => { + registerDecorator({ + target: object.constructor, + propertyName, + options: validationOptions, + constraints: [property], + validator: MatchConstraint, + }); + }; +} + +@ValidatorConstraint({ name: 'Match' }) +export class MatchConstraint implements ValidatorConstraintInterface { + validate(value: any, args: ValidationArguments) { + const [relatedPropertyName] = args.constraints; + const relatedValue = (args.object as any)[relatedPropertyName]; + return value === relatedValue; + } +} diff --git a/backend/src/auth/decorators/public.auth.ts b/backend/src/auth/decorators/public.auth.ts new file mode 100644 index 0000000..c714746 --- /dev/null +++ b/backend/src/auth/decorators/public.auth.ts @@ -0,0 +1,6 @@ +import { SetMetadata } from '@nestjs/common'; + +export const IS_PUBLIC_KEY = 'isPublic'; +export const IS_PUBLIC_API_KEY = 'isPublicApiKey'; +export const Public = () => SetMetadata(IS_PUBLIC_KEY, true); +export const PublicApiKey = () => SetMetadata(IS_PUBLIC_API_KEY, true); diff --git a/backend/src/auth/dto/login.dto.ts b/backend/src/auth/dto/login.dto.ts new file mode 100644 index 0000000..758ec5d --- /dev/null +++ b/backend/src/auth/dto/login.dto.ts @@ -0,0 +1,174 @@ +import { ApiProperty } from '@nestjs/swagger'; +// import { Language } from '@prisma/client'; +import { + IsEmail, + IsMobilePhone, + IsNotEmpty, + IsNumberString, + IsOptional, + IsString, + Length, + MaxLength, + MinLength, +} from 'class-validator'; +import { Match } from '../decorators/match.decorator'; + +export class AdminLoginGoogle { + @ApiProperty({ example: 'token', type: 'string' }) + @IsString() + @IsNotEmpty() + google_token!: string; +} + +export class UserLogin { + @ApiProperty({ example: 'username', type: 'string' }) + @IsString() + @IsNotEmpty() + username!: string; + + @ApiProperty({ example: 'password', type: 'string' }) + @IsString() + @IsNotEmpty() + password!: string; +} + +export class TenantSignUp { + @ApiProperty({ example: 'abc@gmail,com', type: 'string' }) + @IsString() + @IsOptional() + email: string; + + @ApiProperty({ example: 'street', type: 'string' }) + @IsString() + @IsOptional() + street: string; + + @ApiProperty({ example: 'city', type: 'string' }) + @IsString() + @IsOptional() + city: string; + + @ApiProperty({ example: 'province', type: 'string' }) + @IsString() + @IsOptional() + province: string; + + @ApiProperty({ example: '100000', type: 'string' }) + @IsString() + @IsOptional() + postal_code: string; + + @ApiProperty({ example: 'B', type: 'string' }) + @IsString() + @IsOptional() + first_name: string; + + @ApiProperty({ example: 'A', type: 'string' }) + @IsString() + @IsOptional() + last_name: string; + + @ApiProperty({ example: '09658623548', type: 'string' }) + @IsMobilePhone('vi-VN') + @IsNotEmpty() + phone: string; + + @ApiProperty({ example: 'username', type: 'string' }) + @IsString() + @IsNotEmpty() + username!: string; + + @ApiProperty({ example: 'POSvQUfwxG', type: 'string' }) + @IsString() + @IsNotEmpty() + @MinLength(8) + @MaxLength(20) + // @Matches(/((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/, { + // message: 'password too weak', + // }) + password!: string; + + @ApiProperty({ example: 'POSvQUfwxG', type: 'string' }) + @IsString() + @IsNotEmpty() + @Match('password') + password_confirmation: string; +} + +export class UserSignUp { + @ApiProperty({ example: 'A', type: 'string' }) + @IsString() + @IsOptional() + fullname: string; + + @ApiProperty({ example: '0965862358', type: 'string' }) + @IsMobilePhone('vi-VN') + @IsNotEmpty() + phone: string; + + @ApiProperty({ example: 'abc@gmail,com', type: 'string' }) + @IsOptional() + @IsEmail() + email: string; + + @ApiProperty({ example: 'username', type: 'string' }) + @IsString() + @IsNotEmpty() + @MaxLength(15) + username!: string; + + @ApiProperty({ example: 'POSvQUfwxG', type: 'string' }) + @IsString() + @IsNotEmpty() + @MinLength(6) + @MaxLength(20) + // @Matches(/((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/, { + // message: 'password too weak', + // }) + password!: string; + + @ApiProperty({ example: 'POSvQUfwxG', type: 'string' }) + @IsString() + @IsNotEmpty() + @Match('password') + password_confirmation: string; +} + +export class UserConfirmSignUp { + @ApiProperty({ example: 'abc@gmail,com', type: 'string' }) + @IsString() + id: string; + + @ApiProperty({ example: '123456', type: 'string' }) + @IsNumberString() + @IsNotEmpty() + @Length(6, 6) + otp: string; +} + +export class ChangePassword { + @ApiProperty({ example: 'POSvQUfwxG', type: 'string' }) + @IsString() + @IsOptional() + @MaxLength(32) + // @Matches(/((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/, { + // message: 'password too weak', + // }) + old_password!: string; + + @ApiProperty({ example: 'POSvQUfwxG', type: 'string' }) + @IsString() + @IsNotEmpty() + @MinLength(8) + @MaxLength(32) + // @Matches(/((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/, { + // message: 'password too weak', + // }) + password!: string; + + @ApiProperty({ example: 'POSvQUfwxG', type: 'string' }) + @IsString() + @IsNotEmpty() + @Match('password') + password_confirmation: string; +} \ No newline at end of file diff --git a/backend/src/auth/dto/refresh-token.dto.ts b/backend/src/auth/dto/refresh-token.dto.ts new file mode 100644 index 0000000..3f04b41 --- /dev/null +++ b/backend/src/auth/dto/refresh-token.dto.ts @@ -0,0 +1,13 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsNotEmpty, IsString } from 'class-validator'; +import { REFRESH_TOKEN_EXAMPLE } from 'src/share/constans'; + +export class RefreshTokenDto { + @ApiProperty({ + example: REFRESH_TOKEN_EXAMPLE, + description: 'refresh token of user which has sent with access token', + }) + @IsNotEmpty() + @IsString() + refresh_token: string; +} diff --git a/backend/src/auth/guard/jwt-auth.guard.ts b/backend/src/auth/guard/jwt-auth.guard.ts new file mode 100644 index 0000000..19d0175 --- /dev/null +++ b/backend/src/auth/guard/jwt-auth.guard.ts @@ -0,0 +1,22 @@ +import { ExecutionContext, Injectable } from '@nestjs/common'; +import { Reflector } from '@nestjs/core'; +import { AuthGuard } from '@nestjs/passport'; +import { IS_PUBLIC_KEY } from '../decorators/public.auth'; + +@Injectable() +export class JwtAuthGuard extends AuthGuard('jwt') { + constructor(private reflector: Reflector) { + super(); + } + + canActivate(context: ExecutionContext) { + const isPublic = this.reflector.getAllAndOverride(IS_PUBLIC_KEY, [ + context.getHandler(), + context.getClass(), + ]); + if (isPublic) { + return true; + } + return super.canActivate(context); + } +} diff --git a/backend/src/auth/strategies/api-key.strategy.ts b/backend/src/auth/strategies/api-key.strategy.ts new file mode 100644 index 0000000..400d2a0 --- /dev/null +++ b/backend/src/auth/strategies/api-key.strategy.ts @@ -0,0 +1,31 @@ +import { Injectable, UnauthorizedException } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; +import { PassportStrategy } from '@nestjs/passport'; +import Strategy from 'passport-headerapikey'; + +@Injectable() +export class HeaderApiKeyStrategy extends PassportStrategy( + Strategy, + 'api-key', +) { + constructor(private readonly configService: ConfigService) { + super( + { header: 'x-api-key', prefix: '' }, + true, + async (apiKey: string, done: any) => { + return this.validate(apiKey, done); + }, + ); + } + + public validate = ( + apiKey: string, + done: (error: Error, data: any) => any, + ) => { + if (this.configService.get('externalApiKey') === apiKey) { + done(null, true); + } + + done(new UnauthorizedException(), null); + }; +} diff --git a/backend/src/auth/strategies/google.strategy.ts b/backend/src/auth/strategies/google.strategy.ts new file mode 100644 index 0000000..646fe78 --- /dev/null +++ b/backend/src/auth/strategies/google.strategy.ts @@ -0,0 +1,37 @@ +import { PassportStrategy } from '@nestjs/passport'; +import { Strategy, VerifyCallback } from 'passport-google-oauth20'; +import { config } from 'dotenv'; + +import { Injectable } from '@nestjs/common'; + +config(); + +@Injectable() +export class GoogleStrategy extends PassportStrategy(Strategy) { + constructor() { + super({ + clientID: process.env.GOOGLE_CLIENT_ID, + clientSecret: process.env.GOOGLE_SECRET, + callbackURL: + process.env.GOOGLE_CALLBACK || 'http://localhost:3000/google/redirect', + scope: ['email', 'profile'], + }); + } + + async validate( + accessToken: string, + refreshToken: string, + profile: any, + done: VerifyCallback, + ): Promise { + const { name, emails, photos } = profile; + const user = { + email: emails[0].value, + firstName: name.givenName, + lastName: name.familyName, + picture: photos[0].value, + accessToken, + }; + done(null, user); + } +} diff --git a/backend/src/auth/strategies/jwt.strategy.ts b/backend/src/auth/strategies/jwt.strategy.ts new file mode 100644 index 0000000..2e3f48f --- /dev/null +++ b/backend/src/auth/strategies/jwt.strategy.ts @@ -0,0 +1,42 @@ +import { Injectable, Logger, UnauthorizedException } from '@nestjs/common'; +import { PassportStrategy } from '@nestjs/passport'; +import { ExtractJwt, Strategy } from 'passport-jwt'; +import { RedisClientService } from '../../cache/cache.service'; +import { AppConfigService } from '../../config/app/app-config.service'; +import { AuthPayload, RefreshTokenPayload } from '../decorators/auth.payload'; + +@Injectable() +export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') { + private readonly logger = new Logger(JwtStrategy.name); + constructor( + private readonly configService: AppConfigService, + private readonly redisService: RedisClientService, + ) { + super({ + jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), + ignoreExpiration: false, + secretOrKey: configService.jwtAccessSecret, + }); + } + + async validate(payload: RefreshTokenPayload): Promise { + const { id, tid, prefix } = payload; + const { isMark } = await this.redisService.checkMarkLogin(id, tid, prefix); + // console.log(payload); + + if (!isMark) { + this.logger.debug( + `token in black list tid: ${tid}, sub: ${id}, prefix: ${prefix}`, + ); + throw new UnauthorizedException('Token is in blacklist'); + } + + return { + id: payload.id, + // tid: payload.tid, + account: payload.account, + type: payload.type, + containsPassword: payload.containsPassword, + }; + } +} diff --git a/backend/src/cache/cache.const.ts b/backend/src/cache/cache.const.ts new file mode 100644 index 0000000..c711709 --- /dev/null +++ b/backend/src/cache/cache.const.ts @@ -0,0 +1,65 @@ +export class CacheConst { + static readonly AUTO_LOGOUT = 'auto_logout:'; + static readonly ACCESS_TOKEN = 'access_token:'; + static readonly REFRESH_TOKEN = 'refresh_token:'; + static readonly HOTP = 'hotp:'; + static readonly LINE = 'line:'; + static readonly DOCUMENT = 'document:'; + static readonly IMPORT_JOB = 'import-job'; + static readonly PUBLIC_SIGN = 'public-sign'; + + async getDocumetChangeKey(userId: number) { + return `${CacheConst.DOCUMENT}:change:${userId}`; + } + + getDocumetFirstChangeKey(userId: number) { + return `${CacheConst.DOCUMENT}change:${userId}:first`; + } + + getDocumetSecondChangeKey(userId: number) { + return `${CacheConst.DOCUMENT}change:${userId}:second`; + } + + static getImportJobKey(uid: string) { + return `${CacheConst.IMPORT_JOB}:${uid}`; + } + + static getKeyDataImport(uid: string) { + return `${CacheConst.IMPORT_JOB}:${uid}:`; + } + + static getKeyMapData(uid: string) { + return `${CacheConst.IMPORT_JOB}:${uid}:map`; + } + + static genKeyAccessToken = ( + uid: string | number, + tid: string, + prefix = 'admin', + ) => { + return `${this.ACCESS_TOKEN}${prefix}:${uid}:${tid}`; + }; + + static genKeyRefreshToken = ( + uid: string | number, + tid: string, + prefix = 'admin', + ) => { + return `${this.REFRESH_TOKEN}${prefix}:${uid}:${tid}`; + }; + + static genKeyPubicName = ( + uid: string | number, + tid: string, + prefix = 'public_name', + ) => { + return `${this.PUBLIC_SIGN}:${prefix}:${uid}:${tid}`; + }; +} + +export const ALL_TOPIC_LINE = 'all_topic_line'; +export const TOPIC_LINE = 'topic_line:'; +export const ALL_QUESTION_LINE = 'all_question_line:'; +export const ANSWER_LINE = 'answer_line:'; +export const ENTERING_DATA_LINE = 'entering_data_line'; +export const CONTRACT_LOGIN = 'contract_login'; diff --git a/backend/src/cache/cache.module.ts b/backend/src/cache/cache.module.ts new file mode 100644 index 0000000..10181fe --- /dev/null +++ b/backend/src/cache/cache.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { RedisClientService } from './cache.service'; +import { AppConfigService } from 'src/config/app/app-config.service'; +import { ConfigService } from '@nestjs/config'; + +@Module({ + imports: [], + providers: [RedisClientService, ConfigService, AppConfigService], + exports: [RedisClientService], +}) +export class RedisModule {} diff --git a/backend/src/cache/cache.service.ts b/backend/src/cache/cache.service.ts new file mode 100644 index 0000000..e01e7f4 --- /dev/null +++ b/backend/src/cache/cache.service.ts @@ -0,0 +1,122 @@ +import { Injectable, Logger } from '@nestjs/common'; +import IORedis, { Redis } from 'ioredis'; + +import { CacheConst } from './cache.const'; +import { convertShortTimeToSecond, generateOTP } from 'src/share/tool'; +import { AppConfigService } from 'src/config/app/app-config.service'; + +@Injectable() +export class RedisClientService { + private client: Redis; + private logger: Logger = new Logger(RedisClientService.name); + public readonly TTL_IMPORT: number = 60 * 60 * 24; + public readonly TTL_OTP: number = 90; + + constructor(private configService: AppConfigService) { + this.client = new IORedis(this.configService.redisUri); + } + + getClient() { + if (!this.client) { + this.client = new IORedis(this.configService.redisUri); + } + return this.client; + } + + private async delKeys(key: string) { + try { + const client = this.client; + const keys = await this.client.keys(key); + await Promise.all(keys.map((e) => client.del(e))); + } catch (error) { + return; + } + } + + async markLogin(uid: number, tid: string, prefix = 'admin') { + try { + const keyAccess = CacheConst.genKeyAccessToken(uid, tid, prefix); + const keyRefresh = CacheConst.genKeyRefreshToken(uid, tid, prefix); + const accessTokenTTL = + convertShortTimeToSecond(this.configService.jwtExpiresIn) || 300; + const refreshTokenTTL = + convertShortTimeToSecond(this.configService.jwtRefreshIn) || 1000; + await this.client.set(keyAccess, '1', 'EX', accessTokenTTL); + await this.client.set(keyRefresh, '1', 'EX', refreshTokenTTL); + } catch (error) { + this.logger.error(error.message); + } + } + + async delMarkLogin(uid: string, tid: string, prefix = 'admin') { + try { + const keyAccess = CacheConst.genKeyAccessToken(uid, tid, prefix); + const keyRefresh = CacheConst.genKeyRefreshToken(uid, tid, prefix); + const keyPublicName = CacheConst.genKeyPubicName(uid, tid); + await this.delKeys(keyAccess); + await this.delKeys(keyRefresh); + await this.delKeys(keyPublicName); + } catch (error) { + this.logger.error(error.message); + } + } + + async getPublicName(uid: string, tid: string) { + const keyPublicName = CacheConst.genKeyPubicName(uid, tid); + + this.logger.debug( + `${this.getPublicName.name} keyPublicName: ${keyPublicName}`, + ); + + const publicName = await this.getClient().get(keyPublicName); + + this.logger.debug(`${this.getPublicName.name} publicName: ${publicName}`); + + return publicName; + } + + async setPublicName(uid: string | number, tid: string, name: string) { + const keyPublicName = CacheConst.genKeyPubicName(uid, tid); + + await this.getClient().set(keyPublicName, name); + } + + async checkMarkLogin(uid: string | number, tid: string, prefix = 'admin') { + try { + const keyadminAccess = await this.client.get( + `${CacheConst.genKeyAccessToken(uid, tid, prefix)}`, + ); + return { + key: keyadminAccess, + isMark: Boolean(keyadminAccess), + }; + } catch (error) { + this.logger.error(error.message); + return null; + } + } + + async checkRefreshTokenFound(uid: string, tid: string, prefix = 'admin') { + try { + const keyRefresh = await this.client.get( + `${CacheConst.genKeyRefreshToken(uid, tid, prefix)}`, + ); + return Boolean(keyRefresh); + } catch (error) { + this.logger.error(error.message); + return null; + } + } + + async setOTP(id: string, data: any) { + const otp = generateOTP(); + if (!id) { + throw new Error('id not found'); + } + + const jsonData = JSON.stringify(data); + const key = `${otp}:${id}`; + await this.client.set(key, jsonData, 'EX', this.TTL_OTP); + return otp; + } +} diff --git a/backend/src/common/auth/decorators.ts b/backend/src/common/auth/decorators.ts new file mode 100644 index 0000000..46a8c96 --- /dev/null +++ b/backend/src/common/auth/decorators.ts @@ -0,0 +1,34 @@ +import { + createParamDecorator, + ExecutionContext, + UnauthorizedException, +} from '@nestjs/common'; +import { JwtAccessTokenPayload } from './type'; + +export type AuthUserPayloadType = JwtAccessTokenPayload; + +export const AuthUser = createParamDecorator( + async (_: unknown, ctx: ExecutionContext) => { + const request = ctx.switchToHttp().getRequest(); + const user = request.user; + return user; + }, +); + +export const AuthTenant = createParamDecorator( + async (_: unknown, ctx: ExecutionContext) => { + const request = ctx.switchToHttp().getRequest(); + const user = request.user; + if (user.type !== 'tenant') throw new UnauthorizedException(); + return user; + }, +); + +export const AuthAdmin = createParamDecorator( + async (_: unknown, ctx: ExecutionContext) => { + const request = ctx.switchToHttp().getRequest(); + const user = request.user; + if (user.type !== 'admin') throw new UnauthorizedException(); + return user; + }, +); diff --git a/backend/src/common/auth/type.ts b/backend/src/common/auth/type.ts new file mode 100644 index 0000000..f2e690f --- /dev/null +++ b/backend/src/common/auth/type.ts @@ -0,0 +1,20 @@ +export enum eUserType { + USER, + TENANT, + ADMIN, +} + +export type TokenUserType = eUserType.ADMIN | eUserType.TENANT | eUserType.USER; + +export type JwtAccessTokenPayload = { + id: number; + roleId: number; + tokenId: string; + type: TokenUserType; +}; + +export type JwtRefreshTokenPayload = { + id: number; + tokenId: string; + type: TokenUserType; +}; diff --git a/backend/src/common/dto/search.ts b/backend/src/common/dto/search.ts new file mode 100644 index 0000000..7523f77 --- /dev/null +++ b/backend/src/common/dto/search.ts @@ -0,0 +1,57 @@ +import { ApiExtraModels, ApiProperty } from '@nestjs/swagger'; +import { Type } from 'class-transformer'; +import { IsNumber, IsOptional, IsString, Max, Min } from 'class-validator'; + +export enum Order { + Desc = 'DESC', + Asc = 'ASC', +} + +@ApiExtraModels() +export class PagingReqDto { + @ApiProperty({ example: 'abc', required: false, type: String }) + @IsOptional() + @IsString() + search? = ''; + + @ApiProperty({ example: 20, required: false, type: Number }) + @IsOptional() + @IsNumber() + @Min(0) + @Max(100) + @Type(() => Number) + pageSize = 10; + + @ApiProperty({ example: 20, required: false, type: Number }) + @IsOptional() + @IsNumber() + @Type(() => Number) + @Min(1) + pageNumber = 1; + + @ApiProperty({ + name: 'sort', + type: 'object', + additionalProperties: { type: 'string' }, + description: 'Data object with key-value pairs', + required: false, + example: { + created_at: 'asc', + }, + }) + @IsOptional() + sort: Record = { + created_at: 'asc', + }; +} + +export class PagingRes { + @ApiProperty({ example: 100 }) + pages: number; + + @ApiProperty({ example: 1000 }) + count: number; + + @ApiProperty({ example: 5 }) + pageNumber: number; +} diff --git a/backend/src/common/interceptor/transform.error.interceptor.ts b/backend/src/common/interceptor/transform.error.interceptor.ts new file mode 100644 index 0000000..bddf6d9 --- /dev/null +++ b/backend/src/common/interceptor/transform.error.interceptor.ts @@ -0,0 +1,34 @@ +import { + Injectable, + NestInterceptor, + ExecutionContext, + CallHandler, + Logger, + HttpException, +} from '@nestjs/common'; +import { Observable, catchError } from 'rxjs'; + +@Injectable() +export class TransformErrorInterceptor implements NestInterceptor { + private readonly logger = new Logger(TransformErrorInterceptor.name); + intercept(context: ExecutionContext, next: CallHandler): Observable { + // next.handle() is an Observable of the controller's result value + return next.handle().pipe( + catchError((error) => { + const response = error.response || {}; + const { statusCode, message } = response; + throw new HttpException( + { + status: statusCode, + code: error['code'], + details: { + type: 'error', + message: message, + }, + }, + statusCode, + ); + }), + ); + } +} diff --git a/backend/src/common/interceptor/transform.response.interceptor.ts b/backend/src/common/interceptor/transform.response.interceptor.ts new file mode 100644 index 0000000..1eb8f98 --- /dev/null +++ b/backend/src/common/interceptor/transform.response.interceptor.ts @@ -0,0 +1,41 @@ +import { + Injectable, + NestInterceptor, + ExecutionContext, + CallHandler, + StreamableFile, +} from '@nestjs/common'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { DEFAULT_SUCCESS_MSG } from 'src/share/constans'; + +export interface Response { + statusCode: number; + message: string; + data: T; +} + +@Injectable() +export class TransformResponseInterceptor + implements NestInterceptor | StreamableFile> +{ + intercept( + context: ExecutionContext, + next: CallHandler, + ): Observable | StreamableFile> { + return next.handle().pipe( + map((data) => { + if (data instanceof StreamableFile) { + return data; + } + return { + statusCode: + data?.statusCode || + context.switchToHttp().getResponse().statusCode, + message: data?.message || DEFAULT_SUCCESS_MSG, + data: data, + }; + }), + ); + } +} diff --git a/backend/src/common/interceptor/uid.interceptor.ts b/backend/src/common/interceptor/uid.interceptor.ts new file mode 100644 index 0000000..655054f --- /dev/null +++ b/backend/src/common/interceptor/uid.interceptor.ts @@ -0,0 +1,28 @@ +import { + Injectable, + NestInterceptor, + ExecutionContext, + CallHandler, + StreamableFile, +} from '@nestjs/common'; +import { Observable } from 'rxjs'; + +export interface Response { + statusCode: number; + message: string; + data: T; +} + +@Injectable() +export class UUIDRequestInterceptor + implements NestInterceptor | StreamableFile> +{ + intercept( + context: ExecutionContext, + next: CallHandler, + ): Observable | StreamableFile> { + const request = context.switchToHttp().getRequest(); + request.headers['x-request-id'] = 'asf'; + return next.handle(); + } +} diff --git a/backend/src/config/app/app-config.module.ts b/backend/src/config/app/app-config.module.ts new file mode 100644 index 0000000..e712ada --- /dev/null +++ b/backend/src/config/app/app-config.module.ts @@ -0,0 +1,17 @@ +import { Module } from '@nestjs/common'; +import { ConfigModule, ConfigService } from '@nestjs/config'; +import appConfiguration from './app-configuration'; +import { AppConfigService } from './app-config.service'; +import { appConfigValidationSchema } from './app-config.schema'; + +@Module({ + imports: [ + ConfigModule.forRoot({ + load: [appConfiguration], + validationSchema: appConfigValidationSchema, + }), + ], + providers: [ConfigService, AppConfigService], + exports: [ConfigService, AppConfigService], +}) +export class AppConfigModule {} diff --git a/backend/src/config/app/app-config.schema.ts b/backend/src/config/app/app-config.schema.ts new file mode 100644 index 0000000..9556fdd --- /dev/null +++ b/backend/src/config/app/app-config.schema.ts @@ -0,0 +1,24 @@ +import * as Joi from 'joi'; + +export const appConfigValidationSchema = Joi.object({ + ENVIRONMENT: Joi.string().valid('dev', 'stag', 'prod').default('dev'), + APP_NAME: Joi.string().default('NestJS Example App'), + APP_URL: Joi.string().default('http://localhost:3000'), + PORT: Joi.number().default(3000), + APP_CORS_ENABLED: Joi.boolean().default(true), + JWT_ACCESS_SECRET: Joi.string().required(), + JWT_REFRESH_SECRET: Joi.string().required(), + JWT_EXPIRES_IN: Joi.string().required(), + JWT_REFRESH_IN: Joi.string().required(), + BCRYPT_SALT_ROUNDS: Joi.number().default(10), + GRAPHQL_PLAYGROUND_ENABLED: Joi.boolean().default(true), + GRAPHQL_DEBUG: Joi.boolean().default(true), + GRAPHQL_SCHEMA_DESTINATION: Joi.string().default('schema.graphql'), + GRAPHQL_SORT_SCHEMA: Joi.boolean().default(true), + SWAGGER_ENABLED: Joi.boolean().default(true), + SWAGGER_DESCRIPTION: Joi.string().default('NestJS example app API'), + SWAGGER_VERSION: Joi.string().default('1.5'), + SWAGGER_PATH: Joi.string().default('api'), + REDIS_URL: Joi.string().default('redis://localhost:6379'), + UPLOAD_LOCATION: Joi.string().default('audio'), +}); diff --git a/backend/src/config/app/app-config.service.ts b/backend/src/config/app/app-config.service.ts new file mode 100644 index 0000000..3f88753 --- /dev/null +++ b/backend/src/config/app/app-config.service.ts @@ -0,0 +1,100 @@ +import { Injectable } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; + +@Injectable() +export class AppConfigService { + constructor(private configService: ConfigService) {} + + get environment(): string { + return this.configService.get('app.environment'); + } + get name(): string { + return this.configService.get('app.name'); + } + + get url(): string { + return this.configService.get('app.url'); + } + + get port(): number { + return Number(this.configService.get('app.port')); + } + + get corsEnabled(): boolean { + return this.configService.get('app.corsEnabled'); + } + + get jwtAccessSecret(): string { + return this.configService.get('app.jwtAccessSecret'); + } + + get jwtRefreshSecret(): string { + return this.configService.get('app.jwtRefreshSecret'); + } + + get jwtExpiresIn(): string { + return this.configService.get('app.jwtExpiresIn'); + } + + get jwtRefreshIn(): string { + return this.configService.get('app.jwtRefreshIn'); + } + + get bcryptSaltRounds(): number { + return this.configService.get('app.bcryptSaltRounds'); + } + + get graphqlPlaygroundEnabled(): boolean { + return this.configService.get('app.graphqlPlaygroundEnabled'); + } + + get graphqlDebug(): boolean { + return this.configService.get('app.graphqlDebug'); + } + + get graphqlSchemaDestination(): string { + return this.configService.get('app.graphqlSchemaDestination'); + } + + get graphqlSortSchema(): boolean { + return this.configService.get('app.graphqlSortSchema'); + } + + get swaggerEnabled(): boolean { + return this.configService.get('app.swaggerEnabled'); + } + + get swaggerDescription(): string { + return this.configService.get('app.swaggerDescription'); + } + + get swaggerVersion(): string { + return this.configService.get('app.swaggerVersion'); + } + + get swaggerPath(): string { + return this.configService.get('app.swaggerPath'); + } + + get gClientId(): string { + return this.configService.get('app.gClientId'); + } + + get gClientSecret(): string { + return this.configService.get('app.gClientSecret'); + } + + get redisUri(): string { + return this.configService.get('app.redis'); + } + + get loggingType(): string { + return this.configService.get('app.loggingType'); + } + get googleMailer(): string { + return this.configService.get('app.googleMailer'); + } + get contactMailer(): string { + return this.configService.get('app.googleMailer.contactMail'); + } +} diff --git a/backend/src/config/app/app-configuration.ts b/backend/src/config/app/app-configuration.ts new file mode 100644 index 0000000..acc1f9d --- /dev/null +++ b/backend/src/config/app/app-configuration.ts @@ -0,0 +1,39 @@ +import { registerAs } from '@nestjs/config'; + +export default registerAs('app', () => ({ + environment: process.env.ENVIRONMENT, + name: process.env.APP_NAME, + url: process.env.APP_URL, + port: process.env.PORT, + redis: process.env.REDIS_URL, + corsEnabled: process.env.APP_CORS_ENABLED, + jwtAccessSecret: process.env.JWT_ACCESS_SECRET, + jwtRefreshSecret: process.env.JWT_REFRESH_SECRET, + jwtExpiresIn: process.env.JWT_EXPIRES_IN, + jwtRefreshIn: process.env.JWT_REFRESH_IN, + bcryptSaltRounds: process.env.BCRYPT_SALT_ROUNDS, + graphqlPlaygroundEnabled: process.env.GRAPHQL_PLAYGROUND_ENABLED, + graphqlDebug: process.env.GRAPHQL_DEBUG, + graphqlSchemaDestination: process.env.GRAPHQL_SCHEMA_DESTINATION, + graphqlSortSchema: process.env.GRAPHQL_SORT_SCHEMA, + swaggerEnabled: process.env.SWAGGER_ENABLED, + swaggerDescription: process.env.SWAGGER_DESCRIPTION, + swaggerVersion: process.env.SWAGGER_VERSION, + swaggerPath: process.env.SWAGGER_PATH, + gClientId: process.env.GOOGLE_CLIENT_ID, + gClientSecret: process.env.GOOGLE_SECRET, + loggingType: process.env.LOGGING_TYPE || 'dev', + googleMailer: { + contactMail: process.env.CONTACT_MAIL || '', + clientId: process.env.GOOGLE_MAILER_CLIENT_ID || '', + clientSecret: process.env.GOOGLE_MAILER_CLIENT_SECRET || '', + refreshToken: process.env.GOOGLE_MAILER_REFRESH_TOKEN || '', + host: process.env.MAILER_HOST || '', + port: process.env.MAILER_PORT || '', + secure: process.env.MAILER_REFRESH_TOKEN || '', + auth: { + user: process.env.ADMIN_EMAIL_ADDRESS || '', + pass: process.env.ADMIN_EMAIL_PASS || '', + }, + }, +})); diff --git a/backend/src/main.ts b/backend/src/main.ts new file mode 100644 index 0000000..a398345 --- /dev/null +++ b/backend/src/main.ts @@ -0,0 +1,5 @@ +// src/main.ts + +import bootstrap from './www/bin/bootstrap'; + +bootstrap(); diff --git a/backend/src/modules/articles/articles.controller.spec.ts b/backend/src/modules/articles/articles.controller.spec.ts new file mode 100644 index 0000000..c170385 --- /dev/null +++ b/backend/src/modules/articles/articles.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ArticlesController } from './articles.controller'; +import { ArticlesService } from './articles.service'; + +describe('ArticlesController', () => { + let controller: ArticlesController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [ArticlesController], + providers: [ArticlesService], + }).compile(); + + controller = module.get(ArticlesController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/backend/src/modules/articles/articles.controller.ts b/backend/src/modules/articles/articles.controller.ts new file mode 100644 index 0000000..175c849 --- /dev/null +++ b/backend/src/modules/articles/articles.controller.ts @@ -0,0 +1,60 @@ +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, + ParseIntPipe, +} from '@nestjs/common'; +import { ArticlesService } from './articles.service'; +import { CreateArticleDto } from './dto/create-article.dto'; +import { UpdateArticleDto } from './dto/update-article.dto'; +import { ApiCreatedResponse, ApiOkResponse, ApiTags } from '@nestjs/swagger'; +import { ArticleEntity } from './entities/article.entity'; + +@Controller('articles') +@ApiTags('articles') +export class ArticlesController { + constructor(private readonly articlesService: ArticlesService) {} + + @Post() + @ApiCreatedResponse({ type: ArticleEntity }) + create(@Body() createArticleDto: CreateArticleDto) { + return this.articlesService.create(createArticleDto); + } + + @Get() + @ApiOkResponse({ type: ArticleEntity, isArray: true }) + findAll() { + return this.articlesService.findAll(); + } + + @Get('drafts') + @ApiOkResponse({ type: ArticleEntity, isArray: true }) + findDrafts() { + return this.articlesService.findDrafts(); + } + + @Get(':id') + @ApiOkResponse({ type: ArticleEntity }) + findOne(@Param('id', ParseIntPipe) id: number) { + return this.articlesService.findOne(id); + } + + @Patch(':id') + @ApiCreatedResponse({ type: ArticleEntity }) + update( + @Param('id', ParseIntPipe) id: number, + @Body() updateArticleDto: UpdateArticleDto, + ) { + return this.articlesService.update(id, updateArticleDto); + } + + @Delete(':id') + @ApiOkResponse({ type: ArticleEntity }) + remove(@Param('id', ParseIntPipe) id: number) { + return this.articlesService.remove(id); + } +} diff --git a/backend/src/modules/articles/articles.module.ts b/backend/src/modules/articles/articles.module.ts new file mode 100644 index 0000000..ac01ea0 --- /dev/null +++ b/backend/src/modules/articles/articles.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { ArticlesService } from './articles.service'; +import { ArticlesController } from './articles.controller'; +import { PrismaModule } from 'src/prisma/prisma.module'; + +@Module({ + controllers: [ArticlesController], + providers: [ArticlesService], + imports: [PrismaModule], +}) +export class ArticlesModule {} diff --git a/backend/src/modules/articles/articles.service.spec.ts b/backend/src/modules/articles/articles.service.spec.ts new file mode 100644 index 0000000..3fd264d --- /dev/null +++ b/backend/src/modules/articles/articles.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ArticlesService } from './articles.service'; + +describe('ArticlesService', () => { + let service: ArticlesService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ArticlesService], + }).compile(); + + service = module.get(ArticlesService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/backend/src/modules/articles/articles.service.ts b/backend/src/modules/articles/articles.service.ts new file mode 100644 index 0000000..2407043 --- /dev/null +++ b/backend/src/modules/articles/articles.service.ts @@ -0,0 +1,36 @@ +import { Injectable } from '@nestjs/common'; +import { PrismaService } from 'src/prisma/prisma.service'; +import { CreateArticleDto } from './dto/create-article.dto'; +import { UpdateArticleDto } from './dto/update-article.dto'; + +@Injectable() +export class ArticlesService { + constructor(private prisma: PrismaService) {} + + create(createArticleDto: CreateArticleDto) { + // return this.prisma.article.create({ data: createArticleDto }); + } + + findDrafts() { + // return this.prisma.article.findMany({ where: { published: false } }); + } + + findAll() { + // return this.prisma.article.findMany({ where: { published: true } }); + } + + findOne(id: number) { + // return this.prisma.article.findUnique({ where: { id } }); + } + + update(id: number, updateArticleDto: UpdateArticleDto) { + // return this.prisma.article.update({ + // where: { id }, + // data: updateArticleDto, + // }); + } + + remove(id: number) { + // return this.prisma.article.delete({ where: { id } }); + } +} diff --git a/backend/src/modules/articles/dto/create-article.dto.ts b/backend/src/modules/articles/dto/create-article.dto.ts new file mode 100644 index 0000000..64e2004 --- /dev/null +++ b/backend/src/modules/articles/dto/create-article.dto.ts @@ -0,0 +1,36 @@ +// src/articles/dto/create-article.dto.ts + +import { ApiProperty } from '@nestjs/swagger'; +import { + IsBoolean, + IsNotEmpty, + IsOptional, + IsString, + MaxLength, + MinLength, +} from 'class-validator'; + +export class CreateArticleDto { + @IsString() + @IsNotEmpty() + @MinLength(5) + @ApiProperty() + title: string; + + @IsString() + @IsOptional() + @IsNotEmpty() + @MaxLength(300) + @ApiProperty({ required: false }) + description?: string; + + @IsString() + @IsNotEmpty() + @ApiProperty() + body: string; + + @IsBoolean() + @IsOptional() + @ApiProperty({ required: false, default: false }) + published?: boolean = false; +} diff --git a/backend/src/modules/articles/dto/update-article.dto.ts b/backend/src/modules/articles/dto/update-article.dto.ts new file mode 100644 index 0000000..429306f --- /dev/null +++ b/backend/src/modules/articles/dto/update-article.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/swagger'; +import { CreateArticleDto } from './create-article.dto'; + +export class UpdateArticleDto extends PartialType(CreateArticleDto) {} diff --git a/backend/src/modules/articles/entities/article.entity.ts b/backend/src/modules/articles/entities/article.entity.ts new file mode 100644 index 0000000..1e38afb --- /dev/null +++ b/backend/src/modules/articles/entities/article.entity.ts @@ -0,0 +1,25 @@ +// import { Article } from '@prisma/client'; +import { ApiProperty } from '@nestjs/swagger'; + +export class ArticleEntity { + @ApiProperty() + id: number; + + @ApiProperty() + title: string; + + @ApiProperty({ required: false, nullable: true }) + description: string | null; + + @ApiProperty() + body: string; + + @ApiProperty() + published: boolean; + + @ApiProperty() + createdAt: Date; + + @ApiProperty() + updatedAt: Date; +} diff --git a/backend/src/modules/booking-slot/booking-slot.controller.spec.ts b/backend/src/modules/booking-slot/booking-slot.controller.spec.ts new file mode 100644 index 0000000..a4f42a7 --- /dev/null +++ b/backend/src/modules/booking-slot/booking-slot.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { BookingSlotController } from './booking-slot.controller'; +import { BookingSlotService } from './booking-slot.service'; + +describe('BookingSlotController', () => { + let controller: BookingSlotController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [BookingSlotController], + providers: [BookingSlotService], + }).compile(); + + controller = module.get(BookingSlotController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/backend/src/modules/booking-slot/booking-slot.controller.ts b/backend/src/modules/booking-slot/booking-slot.controller.ts new file mode 100644 index 0000000..e1db3a0 --- /dev/null +++ b/backend/src/modules/booking-slot/booking-slot.controller.ts @@ -0,0 +1,78 @@ +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, + Query, +} from '@nestjs/common'; +import { BookingSlotService } from './booking-slot.service'; +import { CreateBookingSlotDto } from './dto/create-booking-slot.dto'; +import { UpdateBookingSlotDto } from './dto/update-booking-slot.dto'; +import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; +import { AuthPayload, AuthUser } from 'src/auth/decorators/auth.payload'; +import { HistoryBookingSlot } from './dto/search-booking.dto'; +// import { Public } from 'src/auth/decorators/public.auth'; + +@Controller('booking-slot') +@ApiTags('Booking slot API') +@ApiBearerAuth() +export class BookingSlotController { + constructor(private readonly bookingSlotService: BookingSlotService) { } + + @Post() + create( + @Body() createBookingSlotDto: CreateBookingSlotDto, + @AuthUser() user: AuthPayload, + ) { + return this.bookingSlotService.create(createBookingSlotDto, user); + } + + @Get('/history') + history( + @Query() query: HistoryBookingSlot, + @AuthUser() user: AuthPayload, + ) { + return this.bookingSlotService.historyBooking(query, user); + } + + @Get('/submit/:id') + submitMyBooking( + @Param('id') id: string, + @AuthUser() user: AuthPayload, + ) { + return this.bookingSlotService.submitMyBooking(+id, user); + } + + @Get('/out/:id') + outMyBooking(@Param('id') id: string, @AuthUser() user: AuthPayload) { + return this.bookingSlotService.outMyBooking(+id, user); + } + + @Get(':id') + findOne(@Param('id') id: string, @AuthUser() user: AuthPayload) { + return this.bookingSlotService.findOne(+id, user); + } + + @Patch(':id') + update( + @Param('id') id: string, + @Body() updateBookingSlotDto: UpdateBookingSlotDto, + @AuthUser() user: AuthPayload, + ) { + return this.bookingSlotService.update(+id, updateBookingSlotDto, user); + } + + @Delete('/cancel/:id') + cancel(@Param('id') id: string, @AuthUser() user: AuthPayload) { + return this.bookingSlotService.cancel(+id, user); + } + + // @Get('/test/sql') + // @Public() + // test() { + // return this.bookingSlotService.test(); + // } +} diff --git a/backend/src/modules/booking-slot/booking-slot.module.ts b/backend/src/modules/booking-slot/booking-slot.module.ts new file mode 100644 index 0000000..1b360db --- /dev/null +++ b/backend/src/modules/booking-slot/booking-slot.module.ts @@ -0,0 +1,13 @@ +import { Module } from '@nestjs/common'; +import { BookingSlotService } from './booking-slot.service'; +import { BookingSlotController } from './booking-slot.controller'; +import { PrismaModule } from 'src/prisma/prisma.module'; +import { SlotService } from '../slot/slot.service'; + +@Module({ + controllers: [BookingSlotController], + providers: [BookingSlotService, SlotService], + imports: [PrismaModule], + exports: [BookingSlotService], +}) +export class BookingSlotModule {} diff --git a/backend/src/modules/booking-slot/booking-slot.service.spec.ts b/backend/src/modules/booking-slot/booking-slot.service.spec.ts new file mode 100644 index 0000000..d4e9fe1 --- /dev/null +++ b/backend/src/modules/booking-slot/booking-slot.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { BookingSlotService } from './booking-slot.service'; + +describe('BookingSlotService', () => { + let service: BookingSlotService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [BookingSlotService], + }).compile(); + + service = module.get(BookingSlotService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/backend/src/modules/booking-slot/booking-slot.service.ts b/backend/src/modules/booking-slot/booking-slot.service.ts new file mode 100644 index 0000000..1cd137e --- /dev/null +++ b/backend/src/modules/booking-slot/booking-slot.service.ts @@ -0,0 +1,247 @@ +import { + BadRequestException, + forwardRef, + Inject, + Injectable, + Logger, +} from '@nestjs/common'; +import { CreateBookingSlotDto } from './dto/create-booking-slot.dto'; +import { UpdateBookingSlotDto } from './dto/update-booking-slot.dto'; +import { AuthPayload } from 'src/auth/decorators/auth.payload'; +import { PrismaService } from 'src/prisma/prisma.service'; +import { + SLOT_BOOKING_EXISTS, + SLOT_BOOKING_FULL, + SLOT_BOOKING_NOTFOUND, +} from 'src/share/eCode'; +import { SlotService } from '../slot/slot.service'; +import { HistoryBookingSlot } from './dto/search-booking.dto'; + +@Injectable() +export class BookingSlotService { + private readonly LOG = new Logger(BookingSlotService.name); + + constructor( + private prisma: PrismaService, + @Inject(forwardRef(() => SlotService)) + private readonly slotService: SlotService, + ) {} + + public async countBookingActiveByGroup(slots: number[]) { + const now = new Date(); + const results = await this.prisma.booking.groupBy({ + by: ['slot_id'], + _count: { + _all: true, + }, + where: { + slot_id: { + in: slots, + }, + status: 'done', + start_at: { + lte: now, + }, + end_at: { + gte: now, + }, + }, + }); + const mapIdToCount = {}; + for (const iterator of results) { + const slot_id = iterator.slot_id; + const all = iterator._count._all; + mapIdToCount[slot_id] = all; + } + return mapIdToCount; + } + + public async countBookingActive(slotId: number) { + const now = new Date(); + const count = await this.prisma.booking.count({ + where: { + slot_id: slotId, + status: 'done', + start_at: { + lte: now, + }, + end_at: { + gte: now, + }, + slot: { + id: slotId, + deleted_at: null, + }, + }, + }); + this.LOG.debug(`${now}slot :${slotId} exits ${count} booking`); + return count; + } + + public async checkBookingSlot(bookingId: number, user_id?: number) { + const query = { id: bookingId }; + if (user_id) query['user_id'] = user_id; + const booking = await this.prisma.booking.findFirst({ + where: query, + }); + if (!booking) { + throw new BadRequestException(SLOT_BOOKING_EXISTS); + } + return booking; + } + + async create(data: CreateBookingSlotDto, user: AuthPayload) { + // Check slot + const slot = await this.slotService.getSlot(+data.slotId); + const result = await this.prisma.booking.create({ + data: { + start_at: data.startAt, + user_id: +user.id, + slot_id: slot.id, + contact: data.contact, + end_at: data.endAt, + owner: data.owner, + license_plates: data.licensePlates, + slot_type: data.slot_type, + }, + }); + return result; + } + // isolation need + async submitMyBooking(id: number, user: AuthPayload) { + return this.prisma.$transaction(async (trans) => { + const booking = await this.checkBookingSlot(id, +user.id); + const slotBooking = await this.slotService.getSlot(booking.slot_id); + const totalSlot = await this.countBookingActive(slotBooking.id); + if (totalSlot >= slotBooking.total) { + throw new BadRequestException(SLOT_BOOKING_FULL); + } + if (booking.status == 'pending') { + await trans.booking.update({ + data: { + status: 'done', + }, + where: { + id: booking.id, + }, + }); + } + return `This action submit a #${id} bookingSlot`; + }); + } + + async outMyBooking(id: number, user: AuthPayload) { + return this.prisma.$transaction(async (trans) => { + const booking = await this.checkBookingSlot(id, +user.id); + + if (booking.status !== 'done') { + await trans.booking.update({ + data: { + status: 'out', + }, + where: { + id: booking.id, + }, + }); + return `This action submit a #${id} bookingSlot`; + } + throw new BadRequestException(); + }); + } + async findOne(id: number, user: AuthPayload) { + const booking = await this.prisma.booking.findFirst({ + where: { + id, + user_id: +user.id, + }, + include: { + slot: true, + }, + }); + if (!booking) { + throw new BadRequestException(SLOT_BOOKING_NOTFOUND); + } + this.LOG.debug(`Find booking by id: ${id} ${JSON.stringify(booking)} `); + return booking; + } + + async update( + id: number, + updateBookingSlotDto: UpdateBookingSlotDto, + user: AuthPayload, + ) { + const booking = await this.findOne(id, user); + if (booking.status == 'done') { + return `This action updates a #${id} block`; + } + const result = await this.prisma.$transaction([ + this.prisma.booking.update({ + where: { + id, + }, + data: { + owner: updateBookingSlotDto.owner || booking.owner, + start_at: updateBookingSlotDto.startAt || booking.start_at, + end_at: updateBookingSlotDto.endAt || booking.end_at, + license_plates: + updateBookingSlotDto.licensePlates || booking.license_plates, + }, + }), + ]); + + this.LOG.debug(result); + return `This action updates a #${id} bookingSlot`; + } + + async cancel(id: number, user: AuthPayload) { + return this.prisma.$transaction(async (trans) => { + const booking = await this.checkBookingSlot(id, +user.id); + + if (booking.status !== 'done') { + await trans.booking.update({ + data: { + status: 'cancel', + }, + where: { + id: booking.id, + }, + }); + return `This action cancel a #${id} bookingSlot`; + } else { + await trans.booking.update({ + data: { + status: 'reject', + }, + where: { + id: booking.id, + }, + }); + return `This action reject a #${id} bookingSlot`; + } + }); + } + + async test() { + return this.countBookingActiveByGroup([1]); + } + + async historyBooking(query: HistoryBookingSlot, user: AuthPayload) { + const { pageSize, pageNumber, sort } = query; + const take = pageSize; + const skip = (pageNumber - 1) * pageSize; + const condition = { + where: { + user_id: +user.id, + }, + skip, + take, + orderBy: sort, + }; + + const [bookings, total] = await this.prisma.$transaction([ + this.prisma.booking.findMany(condition), + this.prisma.booking.count({ where: condition.where }), + ]); + return { bookings, total }; + } +} diff --git a/backend/src/modules/booking-slot/dto/create-booking-slot.dto.ts b/backend/src/modules/booking-slot/dto/create-booking-slot.dto.ts new file mode 100644 index 0000000..04c3872 --- /dev/null +++ b/backend/src/modules/booking-slot/dto/create-booking-slot.dto.ts @@ -0,0 +1,81 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { SlotType } from '@prisma/client'; +import { Type } from 'class-transformer'; +import { + IsDate, + IsDateString, + IsEnum, + IsNotEmpty, + IsNumber, + IsOptional, + IsString, + MinDate, +} from 'class-validator'; + +export class CreateBookingSlotDto { + @ApiProperty({ + example: 'Hello word', + }) + @IsString() + @IsNotEmpty() + @Type(() => String) + owner: string; + + @ApiProperty({ + example: 'Hello word', + }) + @IsString() + @IsNotEmpty() + @Type(() => String) + licensePlates: string; + + @ApiProperty({ + example: '10H 346543', + }) + @IsString() + @IsOptional() + @Type(() => String) + contact: string; + + @ApiProperty({ + example: '', + }) + @IsString() + @IsOptional() + @Type(() => String) + image: string; + + @ApiProperty({ + example: 1, + }) + @IsNumber() + @IsNotEmpty() + @Type(() => Number) + slotId: number; + + @ApiProperty({ + example: new Date(), + }) + @IsDate() + @IsNotEmpty() + // @MinDate(new Date()) + @Type(() => Date) + startAt: Date; + + @ApiProperty({ + example: new Date(), + }) + @IsDate() + @IsNotEmpty() + @MinDate(new Date()) + @Type(() => Date) + endAt: Date; + + @ApiProperty({ + example: SlotType.Orther, + }) + @IsEnum(SlotType) + @IsString() + @IsOptional() + slot_type: SlotType = SlotType.Orther; +} diff --git a/backend/src/modules/booking-slot/dto/search-booking.dto.ts b/backend/src/modules/booking-slot/dto/search-booking.dto.ts new file mode 100644 index 0000000..14befa1 --- /dev/null +++ b/backend/src/modules/booking-slot/dto/search-booking.dto.ts @@ -0,0 +1,11 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Type } from 'class-transformer'; +import { IsNotEmpty, IsNumber, IsOptional, IsString } from 'class-validator'; +import { PagingReqDto } from 'src/common/dto/search'; + +export class HistoryBookingSlot extends PagingReqDto { + @ApiProperty({ example: 'abc', required: false, type: String }) + @IsOptional() + @IsString() + name? = ''; +} diff --git a/backend/src/modules/booking-slot/dto/update-booking-slot.dto.ts b/backend/src/modules/booking-slot/dto/update-booking-slot.dto.ts new file mode 100644 index 0000000..427005c --- /dev/null +++ b/backend/src/modules/booking-slot/dto/update-booking-slot.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/swagger'; +import { CreateBookingSlotDto } from './create-booking-slot.dto'; + +export class UpdateBookingSlotDto extends PartialType(CreateBookingSlotDto) {} diff --git a/backend/src/modules/booking-slot/entities/booking-slot.entity.ts b/backend/src/modules/booking-slot/entities/booking-slot.entity.ts new file mode 100644 index 0000000..91b1cee --- /dev/null +++ b/backend/src/modules/booking-slot/entities/booking-slot.entity.ts @@ -0,0 +1 @@ +export class BookingSlot {} diff --git a/backend/src/modules/comment/comment.controller.spec.ts b/backend/src/modules/comment/comment.controller.spec.ts new file mode 100644 index 0000000..747bde9 --- /dev/null +++ b/backend/src/modules/comment/comment.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { CommentController } from './comment.controller'; +import { CommentService } from './comment.service'; + +describe('CommentController', () => { + let controller: CommentController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [CommentController], + providers: [CommentService], + }).compile(); + + controller = module.get(CommentController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/backend/src/modules/comment/comment.controller.ts b/backend/src/modules/comment/comment.controller.ts new file mode 100644 index 0000000..c959af4 --- /dev/null +++ b/backend/src/modules/comment/comment.controller.ts @@ -0,0 +1,67 @@ +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, + Query, +} from '@nestjs/common'; +import { CommentService } from './comment.service'; +import { CreateCommentDto } from './dto/create-comment.dto'; +import { UpdateCommentDto } from './dto/update-comment.dto'; +import { AuthPayload, AuthUser } from 'src/auth/decorators/auth.payload'; +import { SearchCommentDto } from './dto/search-comment,dto'; +import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; +@ApiTags('Comment API') +@ApiBearerAuth() +@Controller('comment') +export class CommentController { + constructor(private readonly commentService: CommentService) { } + + @Post() + create( + @Body() createCommentDto: CreateCommentDto, + @AuthUser() user: AuthPayload, + ) { + return this.commentService.create(createCommentDto, user); + } + + @Get('by-slot/:slot_id') + findAll( + @Param('slot_id') slot_id: number, + @Query() query: SearchCommentDto, + @AuthUser() user: AuthPayload, + ) { + return this.commentService.findAll(+slot_id, query, user); + } + + @Post('react/:id') + react( + @Param('id') slot_id: number, + // @Query() query: SearchCommentDto, + @AuthUser() user: AuthPayload, + ) { + return this.commentService.reactComment(+slot_id, user); + } + + @Get(':id') + findOne(@Param('id') id: number) { + return this.commentService.findOne(+id); + } + + @Patch(':id') + update( + @Param('id') id: number, + @Body() updateCommentDto: UpdateCommentDto, + @AuthUser() user: AuthPayload, + ) { + return this.commentService.update(+id, updateCommentDto, user); + } + + @Delete(':id') + remove(@Param('id') id: number, @AuthUser() user: AuthPayload,) { + return this.commentService.remove(+id, user); + } +} diff --git a/backend/src/modules/comment/comment.module.ts b/backend/src/modules/comment/comment.module.ts new file mode 100644 index 0000000..def288a --- /dev/null +++ b/backend/src/modules/comment/comment.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { CommentService } from './comment.service'; +import { CommentController } from './comment.controller'; +import { PrismaModule } from 'src/prisma/prisma.module'; + +@Module({ + controllers: [CommentController], + providers: [CommentService], + imports: [PrismaModule], + exports: [CommentService], +}) +export class CommentModule {} diff --git a/backend/src/modules/comment/comment.service.spec.ts b/backend/src/modules/comment/comment.service.spec.ts new file mode 100644 index 0000000..0f57aec --- /dev/null +++ b/backend/src/modules/comment/comment.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { CommentService } from './comment.service'; + +describe('CommentService', () => { + let service: CommentService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [CommentService], + }).compile(); + + service = module.get(CommentService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/backend/src/modules/comment/comment.service.ts b/backend/src/modules/comment/comment.service.ts new file mode 100644 index 0000000..4410321 --- /dev/null +++ b/backend/src/modules/comment/comment.service.ts @@ -0,0 +1,172 @@ +import { Logger, Injectable, BadRequestException } from '@nestjs/common'; +import { CreateCommentDto } from './dto/create-comment.dto'; +import { UpdateCommentDto } from './dto/update-comment.dto'; +import { PrismaService } from 'src/prisma/prisma.service'; +import { AuthPayload } from 'src/auth/decorators/auth.payload'; +import { COMMENT_NOTFOUND, SLOT_NOTFOUND } from 'src/share/eCode'; +import { SearchCommentDto } from './dto/search-comment,dto'; +import { eUserType } from 'src/common/auth/type'; +@Injectable() +export class CommentService { + private readonly LOG = new Logger(CommentService.name); + + constructor(private prisma: PrismaService) { } + async find_comment_by_user(id: number, user: AuthPayload) { + const comment = await this.prisma.comment.findFirst({ + where: { + id, + userId: +user.id, + }, + }); + + if (comment) return comment; + throw new BadRequestException(COMMENT_NOTFOUND); + } + async create(createCommentDto: CreateCommentDto, user: AuthPayload) { + try { + // check slot + const userCreate = {}; + if (user.type == eUserType.TENANT) { + userCreate['tenantId'] = +user.id; + } else { + userCreate['userId'] = +user.id; + } + const slot = await this.prisma.slot.findFirst({ + where: { id: createCommentDto.slot_id }, + }); + if (!slot) { + throw new BadRequestException(SLOT_NOTFOUND); + } + await this.prisma.$transaction([ + this.prisma.comment.create({ + data: { ...createCommentDto, ...userCreate }, + }), + ]); + return true; + } catch (e) { + this.LOG.error(e); + throw e; + } + } + + async findAll( + slot_id: number, + query: SearchCommentDto, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + user: AuthPayload = null, + ) { + try { + const { pageSize, pageNumber, sort, search } = query; + const take = pageSize; + const skip = (pageNumber - 1) * pageSize; + const condition = { + where: { slot_id }, + skip, + take, + // orderBy: sort, + include: { + tenant: true, + user: true, + _count: { select: { likes: true } }, + }, + }; + const [comments, total] = await this.prisma.$transaction([ + this.prisma.comment.findMany(condition), + this.prisma.comment.count({ where: condition.where }), + ]); + return { + comments: comments?.map((e) => { + delete e?.user?.password; + delete e?.user?.username; + delete e?.tenant?.username; + delete e?.tenant?.username; + return { + ...e, + }; + }), + total, + }; + } catch (error) { + this.LOG.error(error); + throw error; + } + } + + async findOne(id: number, user: AuthPayload = null) { + try { + const comment = await this.prisma.comment.findFirst({ + where: { + id, + }, + }); + + if (comment) return comment; + throw new BadRequestException(COMMENT_NOTFOUND); + } catch (error) { + this.LOG.error(error); + throw error; + } + } + + async update( + id: number, + updateCommentDto: UpdateCommentDto, + user: AuthPayload, + ) { + try { + await this.find_comment_by_user(id, user); + await this.prisma.$transaction([ + this.prisma.comment.update({ + where: { id }, + data: { + content: updateCommentDto.content, + }, + }), + ]); + return `This action updates a #${id} comment`; + } catch (error) { + this.LOG.error(error); + throw error; + } + } + + async remove(id: number, user: AuthPayload) { + try { + await this.find_comment_by_user(id, user); + await this.prisma.$transaction([ + this.prisma.comment.deleteMany({ + where: { id }, + }), + ]); + } catch (error) { + this.LOG.error(error); + throw error; + } + } + + async reactComment(id: number, user: AuthPayload = null) { + try { + const comment = await this.find_comment_by_user(id, user); + const like = await this.prisma.like.findFirst({ + where: { + commentId: comment.id, + userId: +user.id, + }, + }); + if (like) { + await this.prisma.like.delete({ where: { id: +like.id } }); + } else { + await this.prisma.like.create({ + data: { + commentId: comment.id, + userId: +user.id, + }, + }); + } + return true; + } catch (error) { + this.LOG.error(error); + throw error; + } + } +} diff --git a/backend/src/modules/comment/dto/create-comment.dto.ts b/backend/src/modules/comment/dto/create-comment.dto.ts new file mode 100644 index 0000000..3731b07 --- /dev/null +++ b/backend/src/modules/comment/dto/create-comment.dto.ts @@ -0,0 +1,19 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { + IsNotEmpty, + IsNumber, + IsString, +} from 'class-validator'; + +export class CreateCommentDto { + @ApiProperty() + @IsString() + @IsNotEmpty() + content: string; + + @ApiProperty() + @IsNumber() + @IsNotEmpty() + slot_id: number +} + diff --git a/backend/src/modules/comment/dto/search-comment,dto.ts b/backend/src/modules/comment/dto/search-comment,dto.ts new file mode 100644 index 0000000..783fb8d --- /dev/null +++ b/backend/src/modules/comment/dto/search-comment,dto.ts @@ -0,0 +1,6 @@ + +import { PagingReqDto } from 'src/common/dto/search'; + +export class SearchCommentDto extends PagingReqDto { + +} diff --git a/backend/src/modules/comment/dto/update-comment.dto.ts b/backend/src/modules/comment/dto/update-comment.dto.ts new file mode 100644 index 0000000..00d45a8 --- /dev/null +++ b/backend/src/modules/comment/dto/update-comment.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/swagger'; +import { CreateCommentDto } from './create-comment.dto'; + +export class UpdateCommentDto extends PartialType(CreateCommentDto) {} diff --git a/backend/src/modules/comment/entities/comment.entity.ts b/backend/src/modules/comment/entities/comment.entity.ts new file mode 100644 index 0000000..9734e99 --- /dev/null +++ b/backend/src/modules/comment/entities/comment.entity.ts @@ -0,0 +1 @@ +export class Comment {} diff --git a/backend/src/modules/files/dto/create-file.dto.ts b/backend/src/modules/files/dto/create-file.dto.ts new file mode 100644 index 0000000..ac44e61 --- /dev/null +++ b/backend/src/modules/files/dto/create-file.dto.ts @@ -0,0 +1 @@ +export class CreateFileDto {} diff --git a/backend/src/modules/files/dto/update-file.dto.ts b/backend/src/modules/files/dto/update-file.dto.ts new file mode 100644 index 0000000..a5c5c9d --- /dev/null +++ b/backend/src/modules/files/dto/update-file.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/swagger'; +import { CreateFileDto } from './create-file.dto'; + +export class UpdateFileDto extends PartialType(CreateFileDto) {} diff --git a/backend/src/modules/files/entities/file.entity.ts b/backend/src/modules/files/entities/file.entity.ts new file mode 100644 index 0000000..23f12c5 --- /dev/null +++ b/backend/src/modules/files/entities/file.entity.ts @@ -0,0 +1 @@ +export class File {} diff --git a/backend/src/modules/files/files.controller.spec.ts b/backend/src/modules/files/files.controller.spec.ts new file mode 100644 index 0000000..b352a39 --- /dev/null +++ b/backend/src/modules/files/files.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { FilesController } from './files.controller'; +import { FilesService } from './files.service'; + +describe('FilesController', () => { + let controller: FilesController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [FilesController], + providers: [FilesService], + }).compile(); + + controller = module.get(FilesController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/backend/src/modules/files/files.controller.ts b/backend/src/modules/files/files.controller.ts new file mode 100644 index 0000000..a911729 --- /dev/null +++ b/backend/src/modules/files/files.controller.ts @@ -0,0 +1,58 @@ +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, + UploadedFile, + UseInterceptors, + StreamableFile, + Header, +} from '@nestjs/common'; +import { FilesService } from './files.service'; +import { UpdateFileDto } from './dto/update-file.dto'; +import { FileInterceptor } from '@nestjs/platform-express'; +import AvatarMulterOpions from 'src/common/upload/avatar'; +import { + AuthPayload, + AuthTenant, +} from 'src/auth/decorators/auth.payload'; +import { Public } from 'src/auth/decorators/public.auth'; + +@Controller('files') +export class FilesController { + constructor(private readonly filesService: FilesService) { } + + @Post() + @UseInterceptors(FileInterceptor('file', AvatarMulterOpions)) + uploadFile( + @UploadedFile() file: Express.Multer.File, + @AuthTenant() tenant: AuthPayload, + ) { + return this.filesService.create(file, tenant); + } + + @Get('/:folder/:id') + @Header('Cross-Origin-Opener-Policy', 'unsafe-none') + @Header('Cross-Origin-Resource-Policy', 'cross-origin') + @Public() + findOne( + @Param('folder') folder: string, + @Param('id') id: string, + ): StreamableFile { + const file = this.filesService.getFile(folder, id); + return new StreamableFile(file); + } + + @Patch(':id') + update(@Param('id') id: string, @Body() updateFileDto: UpdateFileDto) { + return this.filesService.update(+id, updateFileDto); + } + + @Delete(':id') + remove(@Param('id') id: string) { + return this.filesService.remove(+id); + } +} diff --git a/backend/src/modules/files/files.module.ts b/backend/src/modules/files/files.module.ts new file mode 100644 index 0000000..61532be --- /dev/null +++ b/backend/src/modules/files/files.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { FilesService } from './files.service'; +import { FilesController } from './files.controller'; +import { PrismaModule } from 'src/prisma/prisma.module'; + +@Module({ + controllers: [FilesController], + providers: [FilesService], + imports: [PrismaModule], +}) +export class FilesModule {} diff --git a/backend/src/modules/files/files.service.spec.ts b/backend/src/modules/files/files.service.spec.ts new file mode 100644 index 0000000..c653b32 --- /dev/null +++ b/backend/src/modules/files/files.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { FilesService } from './files.service'; + +describe('FilesService', () => { + let service: FilesService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [FilesService], + }).compile(); + + service = module.get(FilesService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/backend/src/modules/files/files.service.ts b/backend/src/modules/files/files.service.ts new file mode 100644 index 0000000..442274f --- /dev/null +++ b/backend/src/modules/files/files.service.ts @@ -0,0 +1,31 @@ +import { Injectable } from '@nestjs/common'; +import { UpdateFileDto } from './dto/update-file.dto'; +import { AuthPayload } from 'src/auth/decorators/auth.payload'; +import { PrismaService } from 'src/prisma/prisma.service'; +import { createReadStream } from 'fs'; +import { join } from 'path'; + +@Injectable() +export class FilesService { + constructor(private prisma: PrismaService) {} + + create(file: Express.Multer.File, tenant: AuthPayload) { + // save file id + // this.prisma. + + return file.filename; + } + + getFile(path: string, id: string) { + const file = createReadStream(join(process.cwd(), path, id)); + return file; + } + + update(id: number, updateFileDto: UpdateFileDto) { + return `This action updates a #${id} file`; + } + + remove(id: number) { + return `This action removes a #${id} file`; + } +} diff --git a/backend/src/modules/hook/hook.controller.spec.ts b/backend/src/modules/hook/hook.controller.spec.ts new file mode 100644 index 0000000..d958d22 --- /dev/null +++ b/backend/src/modules/hook/hook.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { HookController } from './hook.controller'; + +describe('HookController', () => { + let controller: HookController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [HookController], + }).compile(); + + controller = module.get(HookController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/backend/src/modules/hook/hook.controller.ts b/backend/src/modules/hook/hook.controller.ts new file mode 100644 index 0000000..81cebfd --- /dev/null +++ b/backend/src/modules/hook/hook.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('callback') +export class HookController {} diff --git a/backend/src/modules/mail/mail.module.ts b/backend/src/modules/mail/mail.module.ts new file mode 100644 index 0000000..c5f19e3 --- /dev/null +++ b/backend/src/modules/mail/mail.module.ts @@ -0,0 +1,68 @@ +import { Module } from '@nestjs/common'; +import { MailService } from './mail.service'; +import { MailerModule, MailerOptions } from '@nestjs-modules/mailer'; +import { ConfigModule, ConfigService } from '@nestjs/config'; +import { OAuth2Client } from 'google-auth-library'; +@Module({ + imports: [ + MailerModule.forRootAsync({ + imports: [ConfigModule], + useFactory: async (configService: ConfigService) => { + const mailConfig = configService.get('googleMailer'); + console.log(mailConfig); + + const clientSecret = mailConfig['clientSecret']; + const clientId = mailConfig['clientId']; + const auth = mailConfig['auth']; + const host = mailConfig['host']; + const port = +mailConfig['port']; + try { + const myOAuth2Client = new OAuth2Client(clientId, clientSecret); + myOAuth2Client.setCredentials({ + refresh_token: mailConfig['refreshToken'], + }); + const myAccessTokenObject = await myOAuth2Client.getAccessToken(); + // Access Token sẽ nằm trong property 'token' trong Object mà chúng ta vừa get được ở trên + const myAccessToken = myAccessTokenObject?.token; + // const transport = createTransport().get() + return { + transport: { + host, + port, + secure: true, // use SSL + service: 'gmail', + auth: { + type: 'OAuth2', + user: auth.user, + clientId: clientId, + clientSecret: clientSecret, + accessToken: myAccessToken, + }, + }, + }; + } catch (error) { + console.log(error); + return { + transport: { + host, + port, + secure: true, // use SSL + service: 'gmail', + auth: { + type: 'OAuth2', + user: null, + clientId: null, + clientSecret: null, + accessToken: null, + }, + }, + }; + } + }, + inject: [ConfigService], + }), + ], + providers: [MailService], + exports: [MailService], +}) +export class MailModule {} diff --git a/backend/src/modules/mail/mail.service.ts b/backend/src/modules/mail/mail.service.ts new file mode 100644 index 0000000..2036367 --- /dev/null +++ b/backend/src/modules/mail/mail.service.ts @@ -0,0 +1,81 @@ +import { MailerService } from '@nestjs-modules/mailer'; +import { Injectable } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; + +@Injectable() +export class MailService { + constructor( + private mailerService: MailerService, + private configService: ConfigService, + ) {} + + async sendMailRequestResetPass( + email: string, + username: string, + token: string, + path: string, + ) { + const url = `${this.configService.get('domain')}${path}`; + await this.mailerService.sendMail({ + to: email, + subject: `Thông báo cấp lại mật khẩu cho tài khoản: ${username}.`, + html: ` + + + Thông báo đổi mật khẩu + + +

Thông báo đổi mật khẩu

+

Chào bạn,

+

Chúng tôi xác nhận rằng bạn đã yêu cầu quên mật khẩu.

+

Nhấn để xác nhận.

+

Xin cảm ơn.

+

Đội ngũ hỗ trợ

+ + `, + }); + } + + async sendMaiComfirmResetPass(email: string, password: string) { + await this.mailerService.sendMail({ + to: email, + subject: 'Thông báo cấp lại mật khẩu.', + html: ` + + + Thông báo đổi mật khẩu + + +

Thông báo đổi mật khẩu

+

Chào bạn,

+

Chúng tôi xác nhận rằng bạn đã làm mới mật khẩu thành công.

+

Mật khẩu mới hiện tại là : ${password}.

+

Xin cảm ơn.

+

Đội ngũ hỗ trợ

+ + `, + }); + } + + async sendMailContact(email: string, message: string) { + await this.mailerService.sendMail({ + from: email, + to: 'lacacity.co@gmail.com', + subject: 'Góp ý về laca city.', + html: ` + + + + + +

Thông báo đổi mật khẩu

+

Chào bạn,

+

Chúng tôi xác nhận rằng bạn đã làm mới mật khẩu thành công.

+

${message}

+

Xin cảm ơn.

+

Đội ngũ hỗ trợ

+ + `, + }); + } +} diff --git a/backend/src/modules/slot/dto/create-slot.dto.ts b/backend/src/modules/slot/dto/create-slot.dto.ts new file mode 100644 index 0000000..acd5bdb --- /dev/null +++ b/backend/src/modules/slot/dto/create-slot.dto.ts @@ -0,0 +1,129 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { BookingType, SlotType } from '@prisma/client'; +import { Type } from 'class-transformer'; +import { + IsArray, + IsEnum, + IsMilitaryTime, + IsNotEmpty, + IsNumber, + IsOptional, + IsString, +} from 'class-validator'; + +export class CreateSlotDto { + @ApiProperty({ + example: 'Bãi Đỗ Xe 1', + }) + @IsString() + name: string; + + @ApiProperty({ + example: 21.00369935885945, + }) + @IsNumber() + @IsNotEmpty() + @Type(() => Number) + lat: number; + + @ApiProperty({ + example: 21.00369935885945, + }) + @IsNumber() + @IsNotEmpty() + @Type(() => Number) + lng: number; + + @ApiProperty({ + example: '116 Miếu Đầm', + }) + @IsString() + @IsNotEmpty() + address: string; + + @ApiProperty({ + example: 'Nam Từ Liêm', + }) + @IsString() + @IsNotEmpty() + district: string; + + @ApiProperty({ + example: 'Mễ Trì', + }) + @IsString() + @IsNotEmpty() + ward: string; + + @ApiProperty({ + example: 'Hà Nội', + }) + @IsString() + @IsNotEmpty() + city: string; + + @ApiProperty() + @IsString() + @IsOptional() + destination: string; + + @ApiProperty({ + example: 5, + }) + @IsNumber() + @IsNotEmpty() + total: number; + + @ApiProperty({ + example: 21.00369935885945, + }) + @IsNumber() + @IsNotEmpty() + @Type(() => Number) + pricingPerHour: number; + + @ApiProperty({ + example: '20:56', + }) + @IsNotEmpty() + @IsMilitaryTime() + close: string; + + @ApiProperty({ + example: '20:56', + }) + @IsNotEmpty() + @IsMilitaryTime() + open: string; + + @ApiProperty({ + example: 5, + }) + @IsOptional() + @IsArray() + images: string[]; + + @ApiProperty({ + example: BookingType.All, + }) + @IsString() + @IsEnum(BookingType) + @IsOptional() + alow_booking_type: BookingType = BookingType.All; + + @ApiProperty({ + example: SlotType.Orther, + }) + @IsEnum(SlotType) + @IsString() + @IsOptional() + slot_type: SlotType = SlotType.Orther; +} + + +export class VoteCommentDto { + @ApiProperty() + @IsNumber() + @IsNotEmpty() + source: number +} \ No newline at end of file diff --git a/backend/src/modules/slot/dto/search-slot.dto.ts b/backend/src/modules/slot/dto/search-slot.dto.ts new file mode 100644 index 0000000..985b60b --- /dev/null +++ b/backend/src/modules/slot/dto/search-slot.dto.ts @@ -0,0 +1,51 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Type } from 'class-transformer'; +import { IsNotEmpty, IsNumber, IsOptional, IsString } from 'class-validator'; +import { PagingReqDto } from 'src/common/dto/search'; + +export class SearchNearSlotDto { + @ApiProperty({ + example: 21.00369935885945, + }) + @IsNumber() + @IsNotEmpty() + @Type(() => Number) + lat: number; + + @ApiProperty({ + example: 21.00369935885945, + }) + @IsNumber() + @IsNotEmpty() + @Type(() => Number) + lng: number; + + @ApiProperty({ + example: 1, + }) + @IsNumber() + @IsOptional() + @Type(() => Number) + radius?: number = 1; +} + +export class SearchSlot extends PagingReqDto { + @ApiProperty({ example: 'abc', required: false, type: String }) + @IsOptional() + @IsString() + name? = ''; +} + +export class SearchSlotByCursor extends PagingReqDto { + @ApiProperty({ example: 'abc', required: false }) + @IsOptional() + @IsNumber() + @Type(() => Number) + cursorId?: number; + + @ApiProperty({ example: 'abc', required: false, type: String }) + @IsOptional() + @IsString() + action: 'next' | 'prev' = 'next'; + +} diff --git a/backend/src/modules/slot/dto/update-slot.dto.ts b/backend/src/modules/slot/dto/update-slot.dto.ts new file mode 100644 index 0000000..bd567c5 --- /dev/null +++ b/backend/src/modules/slot/dto/update-slot.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/swagger'; +import { CreateSlotDto } from './create-slot.dto'; + +export class UpdateSlotDto extends PartialType(CreateSlotDto) {} diff --git a/backend/src/modules/slot/entities/slot.entity.ts b/backend/src/modules/slot/entities/slot.entity.ts new file mode 100644 index 0000000..1603f92 --- /dev/null +++ b/backend/src/modules/slot/entities/slot.entity.ts @@ -0,0 +1 @@ +export class Slot {} diff --git a/backend/src/modules/slot/slot.controller.spec.ts b/backend/src/modules/slot/slot.controller.spec.ts new file mode 100644 index 0000000..b284435 --- /dev/null +++ b/backend/src/modules/slot/slot.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { SlotController } from './slot.controller'; +import { SlotService } from './slot.service'; + +describe('SlotController', () => { + let controller: SlotController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [SlotController], + providers: [SlotService], + }).compile(); + + controller = module.get(SlotController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/backend/src/modules/slot/slot.controller.ts b/backend/src/modules/slot/slot.controller.ts new file mode 100644 index 0000000..afb3c4f --- /dev/null +++ b/backend/src/modules/slot/slot.controller.ts @@ -0,0 +1,116 @@ +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, + Query, +} from '@nestjs/common'; +import { SlotService } from './slot.service'; +import { CreateSlotDto, VoteCommentDto } from './dto/create-slot.dto'; +import { UpdateSlotDto } from './dto/update-slot.dto'; +import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; +import { SearchNearSlotDto, SearchSlot, SearchSlotByCursor } from './dto/search-slot.dto'; +import { + AuthAllPayload, + // AuthAllPayload, + AuthPayload, + AuthTenant, + AuthUser, +} from 'src/auth/decorators/auth.payload'; +import { Public } from 'src/auth/decorators/public.auth'; + +@ApiTags('Slot API') +@ApiBearerAuth() +@Controller('slot') +export class SlotController { + constructor(private readonly slotService: SlotService) { } + + @Post() + create( + @Body() createSlotDto: CreateSlotDto, + @AuthAllPayload() tenant: AuthPayload, + ) { + try { + return this.slotService.create(createSlotDto, tenant); + } catch (error) { + console.log(error); + throw error; + } + } + + + @Post('vote/:id') + vote( + @Param('id') slot_id: number, + @Body() voteCommentDto: VoteCommentDto, + @AuthUser() user: AuthPayload, + ) { + return this.slotService.voteSlot(+slot_id, voteCommentDto, user); + } + + @Get('vote/:id') + detaiVote( + @Param('id') slot_id: number, + // @Body() voteCommentDto: VoteCommentDto, + @AuthUser() user: AuthPayload, + ) { + return this.slotService.getVoteSlot(+slot_id, user); + } + + @Get() + @Public() + findAll(@Query() query: SearchSlot) { + return this.slotService.findAll(query); + } + + @Get('/cursor') + @Public() + findAllByCursor(@Query() query: SearchSlotByCursor) { + return this.slotService.listByCursor(query); + } + + @Get('/tenant') + findAllOfMe( + @Query() query: SearchSlot, + @AuthTenant() tenant: AuthPayload, + ) { + return this.slotService.findAll(query, tenant); + } + + @Get('/user') + findAllOfUser( + @Query() query: SearchSlot, + @AuthUser() user: AuthPayload, + ) { + return this.slotService.findAll(query, user); + } + + @Get('/near') + @Public() + findNear(@Query() query: SearchNearSlotDto) { + return this.slotService.userFindNearByCoordinate(query); + } + + @Get(':id') + @Public() + findOne(@Param('id') id: string) { + return this.slotService.findOne(+id); + } + + @Patch(':id') + update( + @Param('id') id: string, + @Body() updateSlotDto: UpdateSlotDto, + @AuthAllPayload() tenant: AuthPayload, + ) { + return this.slotService.update(+id, updateSlotDto, tenant); + } + + @Delete(':id') + remove(@Param('id') id: string, @AuthTenant() tenant: AuthPayload) { + return this.slotService.remove(+id, tenant); + } +} diff --git a/backend/src/modules/slot/slot.module.ts b/backend/src/modules/slot/slot.module.ts new file mode 100644 index 0000000..b3d43eb --- /dev/null +++ b/backend/src/modules/slot/slot.module.ts @@ -0,0 +1,14 @@ +import { Module } from '@nestjs/common'; +import { SlotService } from './slot.service'; +import { SlotController } from './slot.controller'; +import { PrismaModule } from 'src/prisma/prisma.module'; +import { BookingSlotService } from '../booking-slot/booking-slot.service'; +import { BookingSlotModule } from '../booking-slot/booking-slot.module'; + +@Module({ + controllers: [SlotController], + providers: [BookingSlotService, SlotService], + imports: [PrismaModule, BookingSlotModule], + exports: [SlotService], +}) +export class SlotModule {} diff --git a/backend/src/modules/slot/slot.service.spec.ts b/backend/src/modules/slot/slot.service.spec.ts new file mode 100644 index 0000000..18d1bd8 --- /dev/null +++ b/backend/src/modules/slot/slot.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { SlotService } from './slot.service'; + +describe('SlotService', () => { + let service: SlotService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [SlotService], + }).compile(); + + service = module.get(SlotService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/backend/src/modules/slot/slot.service.ts b/backend/src/modules/slot/slot.service.ts new file mode 100644 index 0000000..452b4e4 --- /dev/null +++ b/backend/src/modules/slot/slot.service.ts @@ -0,0 +1,471 @@ +import { + BadRequestException, + forwardRef, + Inject, + Injectable, + Logger, +} from '@nestjs/common'; +import { CreateSlotDto, VoteCommentDto } from './dto/create-slot.dto'; +import { UpdateSlotDto } from './dto/update-slot.dto'; +import { PrismaService } from 'src/prisma/prisma.service'; +import { SearchNearSlotDto, SearchSlot, SearchSlotByCursor } from './dto/search-slot.dto'; +import { AuthPayload } from 'src/auth/decorators/auth.payload'; +import { SLOT_BOOKING_EXISTS, SLOT_NOTFOUND } from 'src/share/eCode'; +import { BookingSlotService } from '../booking-slot/booking-slot.service'; +import { BookingType, Slot, SlotType } from '@prisma/client'; +import { eUserType } from 'src/common/auth/type'; +import { Prisma } from '@prisma/client'; +import { removeVietnameseTones } from 'src/share/tool'; +@Injectable() +export class SlotService { + private readonly LOG = new Logger(SlotService.name); + + constructor( + @Inject(forwardRef(() => BookingSlotService)) + private readonly bookingSlotService: BookingSlotService, + private prisma: PrismaService, + ) { } + + public async getSlot(slotId: number) { + const slot = await this.prisma.slot.findUnique({ + where: { id: slotId }, + }); + if (!slot) { + throw new BadRequestException(SLOT_NOTFOUND); + } + + return slot; + } + + async create(createSlotDto: CreateSlotDto, user: AuthPayload) { + const tenantId = +user.id; + const pricingPerHour = createSlotDto.pricingPerHour; + delete createSlotDto.pricingPerHour; + this.LOG.debug( + `Create slot by ${user.type}: ${user.account} data: ${JSON.stringify( + createSlotDto, + )}`, + ); + + const dataSlot: Slot = { + ...((createSlotDto)), + pricing_per_hour: pricingPerHour, + alow_booking_type: + BookingType[ + createSlotDto.alow_booking_type as keyof typeof BookingType + ] || BookingType.All, + slot_type: + SlotType[createSlotDto.slot_type as keyof typeof SlotType] || + SlotType.Orther, + empty: 0, + }; + if (user.type == eUserType.TENANT) { + dataSlot.tenantId = tenantId; + } else { + dataSlot.userId = tenantId; + } + + // delete dataSlot['slotType']; + // delete dataSlot['bookingType']; + const slot = await this.prisma.slot.create({ + data: dataSlot, + }); + + this.LOG.debug( + `Create done slot by tenent: ${user.account} data: ${JSON.stringify( + slot, + )}`, + ); + return slot; + } + + async findAll(query: SearchSlot, user: AuthPayload = null) { + const { pageSize, pageNumber, sort, search, name } = query; + const take = pageSize; + const skip = (pageNumber - 1) * pageSize; + + let whereClause = ``; // Điều kiện mặc định + const ORS = []; + const ANDS = []; + // ✅ Thêm điều kiện tìm kiếm theo name (không dấu) + if (name.length) { + const keySearch = removeVietnameseTones(name).split(' ').join('').toLowerCase(); + // const keySearch = name.split(' ').join('').toLowerCase() + ORS.push(`replace(unaccent(name), ' ', '') ILIKE '%${keySearch}%'`); + } + + // ✅ Thêm điều kiện tìm kiếm theo search (các cột address, city, ward, district) + if (search.length) { + const listCheck = ['address', 'city', 'ward', 'district']; + const keySearch = removeVietnameseTones(search).split(' ').join('').toLowerCase();; + // const keySearch = search.split(' ').join('').toLowerCase(); + for (const element of listCheck) { + ORS.push(` replace(unaccent(${element}), ' ', '') ILIKE '%${keySearch}%'`); + } + } + if (ORS.length) { + whereClause += `(${ORS.join(' OR ')})`; + } + // ✅ Điều kiện theo user type + if (user && user.type === eUserType.TENANT) { + ANDS.push(`"tenantId" = ${+user.id}`); + } + + if (user && user.type === eUserType.USER) { + ANDS.push(`"userId" = ${+user.id}`); + } + + if (ANDS.length) { + whereClause += `(${ANDS.join(' AND ')})`; + } + // ✅ Sắp xếp (mặc định theo ID nếu không có `sort`) + + let orderByClause = ''; + const orders = []; + if (sort) { + for (const [key, value] of Object.entries(sort)) { + orders.push(` ${key} ${value}`); + } + orderByClause += 'ORDER BY'; + orderByClause += orders.join(','); + } + // ✅ Truy vấn dữ liệu chính + whereClause = whereClause.length ? `WHERE ${whereClause}` : ''; + const findSlotQuery = Prisma.sql` + SELECT * FROM "Slot" + ${Prisma.raw(whereClause)} + ${Prisma.raw(orderByClause)} + LIMIT ${Prisma.raw(`${take}`)} + OFFSET ${Prisma.raw(`${skip}`)} + `; + this.LOG.debug(findSlotQuery.text); + const slots = await this.prisma.$queryRaw`${findSlotQuery}`; + // ✅ Truy vấn tổng số bản ghi (không phân trang) + const totalQuery = Prisma.sql` + SELECT COUNT(*) FROM "Slot" + ${Prisma.raw(whereClause)} + `; + this.LOG.debug(totalQuery.text); + const totalSlot = >await this.prisma.$queryRaw`${totalQuery}`; + + // ✅ Lấy danh sách ID để đếm số lượng đặt chỗ + const slotIds = slots.map((e) => e.id); + const countBookingActiveByGroup = + await this.bookingSlotService.countBookingActiveByGroup(slotIds); + const slotData = await this.prisma.slot.findMany({ + where: { + id: { in: slotIds }, + }, + orderBy: sort, + include: { + tenant: true, + user: true, + }, + }); + // ✅ Ghi log kết quả + this.LOG.debug( + `find by ${sort} ${search} result: ${JSON.stringify( + slots, + )} total: ${totalSlot}`, + ); + return { + slots: slotData.map((e) => { + delete e?.user?.password; + delete e?.user?.username; + delete e?.tenant?.password_confirmation; + delete e?.tenant?.password; + return { + ...e, + free: e.total - (countBookingActiveByGroup[e.id] || 0), + image: '', + }; + }), + total: Number.parseInt(totalSlot.length ? totalSlot[0].count : 0), + }; + } + + async userFindNearByCoordinate(query: SearchNearSlotDto) { + this.LOG.debug(`Find near: ${JSON.stringify(query)}`); + const latitude = query.lat; + const longitude = query.lng; + const radius = query.radius; + + const whereQuery = ` + SELECT * + FROM + (SELECT *, + slot.id as sId, + (3959 * acos(cos(radians(${latitude})) * cos(radians(lat)) * cos(radians(lng) - radians(${longitude})) + sin(radians(${latitude})) * sin(radians(lat)))) AS range + FROM "Slot" slot + ) AS derivedTable + WHERE range < ${radius} + ORDER BY range + `; + const countQuery = ` + SELECT COUNT(*) AS count + FROM + (SELECT *, + (3959 * acos(cos(radians(${latitude})) * cos(radians(lat)) * cos(radians(lng) - radians(${longitude})) + sin(radians(${latitude})) * sin(radians(lat)))) AS range + FROM "Slot" slot + ) AS derivedTable + WHERE range < ${radius} + `; + this.LOG.verbose(whereQuery); + const slot: Array = await this.prisma.$queryRawUnsafe(whereQuery); + + const count = await this.prisma.$queryRawUnsafe(countQuery); + const slotIds = slot?.map((e) => e.id); + const countBookingActiveByGroup = + await this.bookingSlotService.countBookingActiveByGroup(slotIds); + return { + count: Number(count[0].count), + slots: slot?.map((e) => ({ + ...e, + id: e.sId || e.sid, + free: e.total - (countBookingActiveByGroup[e.id] || 0), + password: undefined, + password_confirmation: undefined, + })), + }; + } + + async findOne(id: number) { + const slot = await this.prisma.slot.findFirstOrThrow({ + include: { + tenant: true, + user: true, + }, + where: { + id, + }, + }); + const vote = await this.prisma.vote.aggregate({ + _avg: { + source: true, + }, + where: { slot_id: id }, + }); + this.LOG.debug(`Find slot by id: ${id} ${JSON.stringify(slot)} `); + return { ...slot, vote: vote._avg.source }; + } + + async update(id: number, updateSlotDto: UpdateSlotDto, tenant: AuthPayload) { + const isTenant = tenant.type == eUserType.TENANT; + const where = isTenant + ? { + tenantId: +tenant.id, + id, + } + : { + userId: +tenant.id, + id, + }; + const slot = await this.prisma.slot.findFirst({ + where: where, + }); + if (!slot) { + throw new BadRequestException(SLOT_NOTFOUND); + } + + const result = await this.prisma.$transaction([ + this.prisma.slot.update({ + where: { + id, + }, + data: { + address: updateSlotDto.address || slot.address, + // total: updateSlotDto.total || slot.total, + district: updateSlotDto.district || slot.district, + ward: updateSlotDto.ward || slot.ward, + city: updateSlotDto.city || slot.city, + lat: updateSlotDto.lat || slot.lat, + lng: updateSlotDto.lng || slot.lng, + name: updateSlotDto.name || slot.name, + images: updateSlotDto.images || slot.images, + close: updateSlotDto.close || slot.close, + open: updateSlotDto.open || slot.open, + alow_booking_type: + BookingType[updateSlotDto.alow_booking_type] || + slot.alow_booking_type, + slot_type: + SlotType[updateSlotDto.slot_type] || slot.slot_type, + pricing_per_hour: + updateSlotDto.pricingPerHour || slot.pricing_per_hour, + }, + }), + ]); + + this.LOG.debug(result); + return `This action updates a #${id} slot`; + } + + async remove(id: number, tenant: AuthPayload) { + const slot = await this.getSlot(id); + const count = await this.bookingSlotService.countBookingActive(slot.id); + if (count) { + throw new BadRequestException(SLOT_BOOKING_EXISTS); + } + + await this.prisma.slot.deleteMany({ + where: { + id, + tenantId: +tenant.id, + }, + }); + return `This action delete a #${id} slot`; + } + + async voteSlot( + id: number, + voteCommentDto: VoteCommentDto, + user: AuthPayload, + ) { + try { + const slot = await this.getSlot(id); + const vote = await this.prisma.vote.findFirst({ + where: { + slot_id: slot.id, + userId: +user.id, + }, + }); + if (vote) { + await this.prisma.vote.update({ + where: { id: vote.id }, + data: { source: voteCommentDto.source }, + }); + } else { + await this.prisma.vote.create({ + data: { + slot_id: slot.id, + userId: +user.id, + source: voteCommentDto.source, + }, + }); + } + return true; + } catch (error) { + this.LOG.error(error); + throw error; + } + } + + async getVoteSlot(id: number, user: AuthPayload) { + try { + const slot = await this.getSlot(id); + const vote = await this.prisma.vote.findFirst({ + where: { + slot_id: slot.id, + userId: +user.id, + }, + }); + return vote; + } catch (error) { + this.LOG.error(error); + throw error; + } + } + + async listByCursor( + query: SearchSlotByCursor, + ): Promise<{ + slots: Slot[]; + total: number; + }> { + + const { pageSize, sort, search, cursorId, action } = query; + const take = pageSize; + + let whereClause = ``; // Điều kiện mặc định + if (cursorId) { + if (action === 'next') { + whereClause += `id > ${cursorId}`; + } else if (action === 'prev') { + whereClause += `id < ${cursorId}`; + } else { + throw new BadRequestException('Action not found'); + } + } + const ORS = []; + const ANDS = []; + + + if (search.length) { + const listCheck = ['address', 'city', 'ward', 'district', 'name']; + const keySearch = search.split(' ').join('').toLowerCase(); + for (const element of listCheck) { + ORS.push(` replace(unaccent(${element}), ' ', '') ILIKE '%${keySearch}%'`); + } + } + if (ORS.length) { + whereClause += `(${ORS.join(' OR ')})`; + } + + + if (ANDS.length) { + whereClause += `(${ANDS.join(' AND ')})`; + } + + let orderByClause = ''; + const orders = []; + if (sort) { + for (const [key, value] of Object.entries(sort)) { + orders.push(` ${key} ${value}`); + } + orderByClause += 'ORDER BY'; + orderByClause += orders.join(','); + } + + + whereClause = whereClause.length ? `WHERE ${whereClause}` : ''; + const findSlotQuery = Prisma.sql` + SELECT * FROM "Slot" + ${Prisma.raw(whereClause)} + ${Prisma.raw(orderByClause)} + LIMIT ${Prisma.raw(`${take}`)} + `; + this.LOG.debug(findSlotQuery.text); + const slots = await this.prisma.$queryRaw`${findSlotQuery}`; + // ✅ Truy vấn tổng số bản ghi (không phân trang) + const totalQuery = Prisma.sql` + SELECT COUNT(*) FROM "Slot" + ${Prisma.raw(whereClause)} + `; + this.LOG.debug(totalQuery.text); + const totalSlot = >await this.prisma.$queryRaw`${totalQuery}`; + + // ✅ Lấy danh sách ID để đếm số lượng đặt chỗ + const slotIds = slots.map((e) => e.id); + const countBookingActiveByGroup = + await this.bookingSlotService.countBookingActiveByGroup(slotIds); + const slotData = await this.prisma.slot.findMany({ + where: { + id: { in: slotIds }, + }, + orderBy: sort, + include: { + tenant: true, + user: true, + }, + }); + // ✅ Ghi log kết quả + this.LOG.debug( + `find by ${sort} ${search} result: ${JSON.stringify( + slots, + )} total: ${totalSlot}`, + ); + return { + slots: slotData.map((e) => { + delete e?.user?.password; + delete e?.user?.username; + delete e?.tenant?.password_confirmation; + delete e?.tenant?.password; + return { + ...e, + free: e.total - (countBookingActiveByGroup[e.id] || 0), + image: '', + }; + }), + total: Number.parseInt(totalSlot.length ? totalSlot[0].count : 0), + }; + } +} diff --git a/backend/src/modules/user/entities/user.entity.ts b/backend/src/modules/user/entities/user.entity.ts new file mode 100644 index 0000000..47531a7 --- /dev/null +++ b/backend/src/modules/user/entities/user.entity.ts @@ -0,0 +1,35 @@ +import { Gender, Language } from '@prisma/client'; +import { ApiProperty } from '@nestjs/swagger'; + +export class UserEntity { + @ApiProperty() + id: number; + + @ApiProperty() + email: string; + + @ApiProperty({ required: false, nullable: true }) + fullname: string | null; + + @ApiProperty({ required: false, nullable: true }) + dob: Date | null; + + @ApiProperty({ required: false, nullable: true, default: Gender.Female }) + gender: Gender | null; + + @ApiProperty({ required: false, nullable: true, default: Language.en }) + language: Language | null; + + phone: string; + + username: string; + + @ApiProperty() + created_at: Date; + + @ApiProperty() + updated_at: Date; + + @ApiProperty() + deleted_at: Date; +} diff --git a/backend/src/modules/user/user.controller.spec.ts b/backend/src/modules/user/user.controller.spec.ts new file mode 100644 index 0000000..7057a1a --- /dev/null +++ b/backend/src/modules/user/user.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { UserController } from './user.controller'; + +describe('UserController', () => { + let controller: UserController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [UserController], + }).compile(); + + controller = module.get(UserController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/backend/src/modules/user/user.controller.ts b/backend/src/modules/user/user.controller.ts new file mode 100644 index 0000000..ad8c2a6 --- /dev/null +++ b/backend/src/modules/user/user.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('user') +export class UserController {} diff --git a/backend/src/modules/zns/zns.module.ts b/backend/src/modules/zns/zns.module.ts new file mode 100644 index 0000000..2fac576 --- /dev/null +++ b/backend/src/modules/zns/zns.module.ts @@ -0,0 +1,23 @@ +import { Module } from '@nestjs/common'; +import { AppConfigModule } from 'src/config/app/app-config.module'; +import { RedisModule } from 'src/cache/cache.module'; +import { AppConfigService } from 'src/config/app/app-config.service'; +import { PrismaModule } from 'src/prisma/prisma.module'; +import { PrismaService } from 'src/prisma/prisma.service'; +import { ZNSService } from './zns.service'; +// import { PrismaModule, PrismaService } from 'nestjs-prisma'; + +@Module({ + imports: [ + AppConfigModule, + RedisModule, + PrismaModule, + ], + controllers: [], + providers: [ + AppConfigService, + PrismaService, + ZNSService + ], +}) +export class ZNSModule {} diff --git a/backend/src/modules/zns/zns.service.ts b/backend/src/modules/zns/zns.service.ts new file mode 100644 index 0000000..586d45c --- /dev/null +++ b/backend/src/modules/zns/zns.service.ts @@ -0,0 +1,6 @@ +import { Injectable } from "@nestjs/common"; + +@Injectable() +export class ZNSService { + +} \ No newline at end of file diff --git a/backend/src/prisma/prisma.module.ts b/backend/src/prisma/prisma.module.ts new file mode 100644 index 0000000..ec0ce32 --- /dev/null +++ b/backend/src/prisma/prisma.module.ts @@ -0,0 +1,8 @@ +import { Module } from '@nestjs/common'; +import { PrismaService } from './prisma.service'; + +@Module({ + providers: [PrismaService], + exports: [PrismaService], +}) +export class PrismaModule {} diff --git a/backend/src/prisma/prisma.service.spec.ts b/backend/src/prisma/prisma.service.spec.ts new file mode 100644 index 0000000..a68cb9e --- /dev/null +++ b/backend/src/prisma/prisma.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { PrismaService } from './prisma.service'; + +describe('PrismaService', () => { + let service: PrismaService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [PrismaService], + }).compile(); + + service = module.get(PrismaService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/backend/src/prisma/prisma.service.ts b/backend/src/prisma/prisma.service.ts new file mode 100644 index 0000000..2c93095 --- /dev/null +++ b/backend/src/prisma/prisma.service.ts @@ -0,0 +1,5 @@ +import { Injectable } from '@nestjs/common'; +import { PrismaClient } from '@prisma/client'; + +@Injectable() +export class PrismaService extends PrismaClient {} diff --git a/backend/src/queue/constants.ts b/backend/src/queue/constants.ts new file mode 100644 index 0000000..e69de29 diff --git a/backend/src/queue/queue.module.ts b/backend/src/queue/queue.module.ts new file mode 100644 index 0000000..e69de29 diff --git a/backend/src/share/constans.ts b/backend/src/share/constans.ts new file mode 100644 index 0000000..577b3f3 --- /dev/null +++ b/backend/src/share/constans.ts @@ -0,0 +1,5 @@ +export const MAX_FILE_SIZE = 50 * 1024 * 1024; +export const MAX_FREE_TRY = 10; +export const DEFAULT_SUCCESS_MSG = 'Done'; +export const REFRESH_TOKEN_EXAMPLE = + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0aWQiOiIkMmIkMTAkMW9wNFBUNFJ2TndOWkM0Tlc5OXZYT3dFN0tjSmhWN1YwQkdNVUdlUlBvS1E1Z1VibU5IVG0iLCJzdWIiOiJmZTEyMWRjZS1lMDZjLTRmNGUtOWQ5MC1mNTRjMTYwMDg2NzYiLCJlbWFpbCI6ImRhbmdob2F0LnB0aXRAZ21haWwuY29tIiwiZmlyc3RfbG9naW4iOjE2OTI0NzcyMTMxMTIsImlhdCI6MTY5MjQ3NzIxMywiZXhwIjoxNjkyNTYzNjEzfQ.Njgwgp4T12zsqAluUnHVSW1nxhKhD6nfSgsE5TjnVpM'; diff --git a/backend/src/share/eCode.ts b/backend/src/share/eCode.ts new file mode 100644 index 0000000..55ada8e --- /dev/null +++ b/backend/src/share/eCode.ts @@ -0,0 +1,17 @@ +export const VERIFY_GOOGLE_TOKEN_FAILED = 'VERIFY_GOOGLE_TOKEN_FAILED'; +export const DOMAIN_UNAUTHORIZED = 'DOMAIN_UNAUTHORIZED'; +export const EXP_FIRST_LOGIN = 'EXP_FIRST_LOGIN'; + +export const USER_NOTFOUND = 'USER_NOTFOUND'; +export const VERIFY_USER_FAILED = 'VERIFY_USER_FAILED'; + +export const TENANT_NOTFOUND = 'TENANT_NOTFOUND'; +export const TENANT_EXISTS = 'TENANT_EXISTS'; +export const VERIFY_TENANT_FAILED = 'VERIFY_TENANT_FAILED'; +export const SLOT_NOTFOUND = 'SLOT_NOTFOUND'; +export const SLOT_BOOKING_NOTFOUND = 'SLOT_BOOKING_NOTFOUND'; +export const SLOT_BOOKING_EXISTS = 'SLOT_BOOKING_EXISTS'; +export const SLOT_BOOKING_FULL = 'SLOT_BOOKING_FULL'; +export const PHONE_EXISTS = 'PHONE_EXISTS'; +export const EMAIL_EXISTS = 'EMAIL_EXISTS'; +export const COMMENT_NOTFOUND = 'COMMENT_NOTFOUND'; diff --git a/backend/src/share/mail/mail.module.ts b/backend/src/share/mail/mail.module.ts new file mode 100644 index 0000000..0ab6613 --- /dev/null +++ b/backend/src/share/mail/mail.module.ts @@ -0,0 +1,68 @@ +import { Module } from '@nestjs/common'; +import { MailService } from './mail.service'; +import { MailerModule, MailerOptions } from '@nestjs-modules/mailer'; +import { OAuth2Client } from 'google-auth-library'; +import { AppConfigService } from 'src/config/app/app-config.service'; +import { AppConfigModule } from 'src/config/app/app-config.module'; +@Module({ + imports: [ + AppConfigModule, + MailerModule.forRootAsync({ + imports: [AppConfigModule], + useFactory: async (configService: AppConfigService) => { + const mailConfig = configService.googleMailer; + + const clientSecret = mailConfig['clientSecret']; + const clientId = mailConfig['clientId']; + const auth = mailConfig['auth']; + const host = mailConfig['host']; + const port = +mailConfig['port']; + try { + const myOAuth2Client = new OAuth2Client(clientId, clientSecret); + myOAuth2Client.setCredentials({ + refresh_token: mailConfig['refreshToken'], + }); + const myAccessTokenObject = await myOAuth2Client.getAccessToken(); + // Access Token sẽ nằm trong property 'token' trong Object mà chúng ta vừa get được ở trên + const myAccessToken = myAccessTokenObject?.token; + // const transport = createTransport().get() + return { + transport: { + host, + port, + secure: true, // use SSL + service: 'gmail', + auth: { + type: 'OAuth2', + user: auth.user, + clientId: clientId, + clientSecret: clientSecret, + accessToken: myAccessToken, + }, + }, + }; + } catch (error) { + return { + transport: { + host, + port, + secure: true, // use SSL + service: 'gmail', + auth: { + type: 'OAuth2', + user: null, + clientId: null, + clientSecret: null, + accessToken: null, + }, + }, + }; + } + }, + inject: [AppConfigService], + }), + ], + providers: [MailService, AppConfigService], + exports: [MailService, AppConfigService], +}) +export class MailModule {} diff --git a/backend/src/share/mail/mail.service.ts b/backend/src/share/mail/mail.service.ts new file mode 100644 index 0000000..248342f --- /dev/null +++ b/backend/src/share/mail/mail.service.ts @@ -0,0 +1,59 @@ +import { MailerService } from '@nestjs-modules/mailer'; +import { Injectable } from '@nestjs/common'; +import { AppConfigService } from 'src/config/app/app-config.service'; + +@Injectable() +export class MailService { + constructor( + private mailerService: MailerService, + private configService: AppConfigService, + ) {} + + async sendMailRequestResetPass( + email: string, + username: string, + token: string, + path: string, + ) { + const url = `${this.configService.url}`; + await this.mailerService.sendMail({ + to: email, + subject: `Thông báo cấp lại mật khẩu cho tài khoản: ${username}.`, + html: ` + + + Thông báo đổi mật khẩu + + +

Thông báo đổi mật khẩu

+

Chào bạn,

+

Chúng tôi xác nhận rằng bạn đã yêu cầu quên mật khẩu.

+

Nhấn để xác nhận.

+

Xin cảm ơn.

+

Đội ngũ hỗ trợ

+ + `, + }); + } + + async sendMaiComfirmResetPass(email: string, password: string) { + await this.mailerService.sendMail({ + to: email, + subject: 'Thông báo cấp lại mật khẩu.', + html: ` + + + Thông báo đổi mật khẩu + + +

Thông báo đổi mật khẩu

+

Chào bạn,

+

Chúng tôi xác nhận rằng bạn đã làm mới mật khẩu thành công.

+

Mật khẩu mới hiện tại là : ${password}.

+

Xin cảm ơn.

+

Đội ngũ hỗ trợ

+ + `, + }); + } +} diff --git a/backend/src/share/multer/user.upload.ts b/backend/src/share/multer/user.upload.ts new file mode 100644 index 0000000..6aa0ea6 --- /dev/null +++ b/backend/src/share/multer/user.upload.ts @@ -0,0 +1,37 @@ +import { HttpException, HttpStatus } from '@nestjs/common'; +import { existsSync, mkdirSync } from 'fs'; +import { diskStorage } from 'multer'; +import { extname } from 'path'; +import { v4 as uuid } from 'uuid'; +import { MAX_FILE_SIZE } from '../constans'; + +export const uploadAudio = { + limits: { + fileSize: +process.env.MAX_FILE_SIZE || MAX_FILE_SIZE, + }, + fileFilter: (req: any, file: any, cb: any) => { + if (file.originalname.match(/\.(mp3|)$/i)) { + cb(null, true); + } else { + cb( + new HttpException( + `Unsupported file type ${extname(file.originalname)}`, + HttpStatus.BAD_REQUEST, + ), + false, + ); + } + }, + storage: diskStorage({ + destination: (req: any, file: any, cb: any) => { + const uploadPath = `${process.env.UPLOAD_LOCATION}`; + if (!existsSync(uploadPath)) { + mkdirSync(uploadPath); + } + cb(null, uploadPath); + }, + filename: (req: any, file: any, cb: any) => { + cb(null, `${uuid()}${extname(file.originalname)}`); + }, + }), +}; diff --git a/backend/src/share/tool.ts b/backend/src/share/tool.ts new file mode 100644 index 0000000..cdf960b --- /dev/null +++ b/backend/src/share/tool.ts @@ -0,0 +1,129 @@ +export const convertShortTimeToSecond = (shortTime: string) => { + if (typeof shortTime !== 'string') return; + let seconds = null; + const unit = shortTime[shortTime.length - 1]; + if (unit === 'm') { + const val = shortTime.split('m')[0]; + seconds = +val * 60; + } else if (unit === 'd') { + const val = shortTime.split('d')[0]; + seconds = +val * 24 * 60 * 60; + } + return seconds; +}; + +export const insertTextToString = (str, index, value): string => { + return str.substr(0, index) + value + str.substr(index); +}; + +export const convertPermission = (premission: string): number => { + let digit = parseInt(premission, 2); + if (isNaN(digit)) { + const setPermission = new Set(premission.split('')); + digit = Array.from(setPermission).reduce((pre, current) => { + switch (current) { + case 'w': + return pre + 2; + case 'r': + return pre + 4; + default: + return pre + 1; + } + }, 0); + } + return digit; +}; +export const URLtoLatLng = (url: string) => { + const lat = url.replace(/^.+!3d(.+)!4d.+$/, '$1'); + const lng = url.replace(/^.+!4d(.+)!16.+$/, '$1'); + const latLng = { + lat: parseFloat(lat), + lng: parseFloat(lng), + }; + if (isNaN(latLng.lat)) { + latLng.lat = 0; + } + if (isNaN(latLng.lng)) { + latLng.lng = 0; + } + return latLng; +} + +export const convertAddressToDetail = (address: string) => { + const addressArr = address.split(','); + const city = addressArr.pop().replace(/\d+/g, '') || ""; + const district = addressArr.pop() || ''; + const ward = addressArr.pop() || ''; + + const detail = { + city, district, ward, address + + }; + return detail; +} +export const convertDetailToAddress = (detail: any) => { + const address = [detail.country, detail.state, detail.city, detail.district, detail.street].filter(e => e).join(', '); + return address; +} + +export const to24HourFormat = (timeStr: string) => { + const [time, period] = timeStr.split(' '); + // eslint-disable-next-line prefer-const + let [hours, minutes] = time.split(':'); + if (!minutes) minutes = '00'; + let hoursNumber = parseInt(hours); + + if (period === 'PM' && hoursNumber !== 12) hoursNumber += 12; + if (period === 'AM' && hoursNumber === 12) hoursNumber = 0; + + return `${hoursNumber.toString().padStart(2, '0')}:${minutes}`; +} + +export const convertWorkdayTiming = (workday_timing: string) => { + if (!workday_timing) return { open: '00:00', close: '23:59' }; + if (workday_timing == 'Open 24 hours') + return { open: '00:00', close: '23:59' }; + // convet 8 AM-11 PM to 08:00-23:00 + const [openTime, closeTime] = workday_timing.split('-'); + const openTimeString = to24HourFormat(openTime.trim()); + const closeTimeString = to24HourFormat(closeTime.trim()); + return { open: openTimeString, close: closeTimeString }; +} + +export const generateOTP = (length = 6) => { + const digits = '0123456789'; + let OTP = ''; + for (let i = 0; i < length; i++) { + OTP += digits.charAt(Math.floor(Math.random() * digits.length)); + } + return OTP; +} + +export const removeVietnameseTones = (str: string): string => { + str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, "a"); + str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, "e"); + str = str.replace(/ì|í|ị|ỉ|ĩ/g, "i"); + str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, "o"); + str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, "u"); + str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, "y"); + str = str.replace(/đ/g, "d"); + str = str.replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, "A"); + str = str.replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, "E"); + str = str.replace(/Ì|Í|Ị|Ỉ|Ĩ/g, "I"); + str = str.replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, "O"); + str = str.replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, "U"); + str = str.replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, "Y"); + str = str.replace(/Đ/g, "D"); + // Some system encode vietnamese combining accent as individual utf-8 characters + // Một vài bộ encode coi các dấu mũ, dấu chữ như một kí tự riêng biệt nên thêm hai dòng này + str = str.replace(/\u0300|\u0301|\u0303|\u0309|\u0323/g, ""); // ̀ ́ ̃ ̉ ̣ huyền, sắc, ngã, hỏi, nặng + str = str.replace(/\u02C6|\u0306|\u031B/g, ""); // ˆ ̆ ̛ Â, Ê, Ă, Ơ, Ư + // Remove extra spaces + // Bỏ các khoảng trắng liền nhau + // str = str.replace(/ + /g, " "); + str = str.trim(); + // Remove punctuations + // Bỏ dấu câu, kí tự đặc biệt + // str = str.replace(/!|@|%|\^|\*|\(|\)|\+|\=|\<|\>|\?|\/|,|\.|\:|\;|\'|\"|\&|\#|\[|\]|~|\$|_|`|-|{|}|\||\\/g," "); + return str; +} \ No newline at end of file diff --git a/backend/src/www/bin/bootstrap.ts b/backend/src/www/bin/bootstrap.ts new file mode 100644 index 0000000..117a656 --- /dev/null +++ b/backend/src/www/bin/bootstrap.ts @@ -0,0 +1,54 @@ +// src/main.ts + +import { HttpAdapterHost, NestFactory } from '@nestjs/core'; +import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'; +import { Logger, ValidationPipe } from '@nestjs/common'; +import helmet from 'helmet'; +import morgan from 'morgan'; +import { PrismaClientExceptionFilter } from 'nestjs-prisma'; +import { urlencoded, json } from 'express'; +import { AppConfigService } from 'src/config/app/app-config.service'; +import { TransformResponseInterceptor } from 'src/common/interceptor/transform.response.interceptor'; +import { UUIDRequestInterceptor } from 'src/common/interceptor/uid.interceptor'; +import { AppModule } from '../../app/app.module'; + +export default async function bootstrap() { + const logger = new Logger('Bootstrap'); + const app = await NestFactory.create(AppModule); + const appConfig = app.get(AppConfigService); + + app.setGlobalPrefix('v1'); + const loggingType = appConfig.environment; + app.use(morgan(loggingType)); + app.use(json({ limit: '50mb' })); + + app.use(urlencoded({ extended: true, limit: '50mb' })); + app.useGlobalPipes(new ValidationPipe({ whitelist: true })); + app.useGlobalInterceptors(new UUIDRequestInterceptor()); + app.useGlobalInterceptors(new TransformResponseInterceptor()); + const { httpAdapter } = app.get(HttpAdapterHost); + app.useGlobalFilters(new PrismaClientExceptionFilter(httpAdapter)); + + app.use( + helmet({ + contentSecurityPolicy: + appConfig.environment === 'localhost' ? false : undefined, + }), + ); + + app.enableCors(); + + const config = new DocumentBuilder() + .setTitle('Laca city API') + .setDescription('The Laca city API description') + .setVersion('0.1') + .addBearerAuth() + .addBasicAuth() + .build(); + const document = SwaggerModule.createDocument(app, config); + SwaggerModule.setup('docs', app, document); + + const port = String(appConfig.port); + await app.listen(port); + logger.log(`Application listening on port ${port}`); +} diff --git a/backend/test/app.e2e-spec.ts b/backend/test/app.e2e-spec.ts new file mode 100644 index 0000000..3ec3061 --- /dev/null +++ b/backend/test/app.e2e-spec.ts @@ -0,0 +1,24 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { INestApplication } from '@nestjs/common'; +import * as request from 'supertest'; +import { AppModule } from '../src/app/app.module'; + +describe('AppController (e2e)', () => { + let app: INestApplication; + + beforeEach(async () => { + const moduleFixture: TestingModule = await Test.createTestingModule({ + imports: [AppModule], + }).compile(); + + app = moduleFixture.createNestApplication(); + await app.init(); + }); + + it('/ (GET)', () => { + return request(app.getHttpServer()) + .get('/') + .expect(200) + .expect('Hello World!'); + }); +}); diff --git a/backend/test/jest-e2e.json b/backend/test/jest-e2e.json new file mode 100644 index 0000000..e9d912f --- /dev/null +++ b/backend/test/jest-e2e.json @@ -0,0 +1,9 @@ +{ + "moduleFileExtensions": ["js", "json", "ts"], + "rootDir": ".", + "testEnvironment": "node", + "testRegex": ".e2e-spec.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + } +} diff --git a/backend/tsconfig.build.json b/backend/tsconfig.build.json new file mode 100644 index 0000000..64f86c6 --- /dev/null +++ b/backend/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] +} diff --git a/backend/tsconfig.json b/backend/tsconfig.json new file mode 100644 index 0000000..b40064b --- /dev/null +++ b/backend/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "module": "commonjs", + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "target": "es2017", + "sourceMap": true, + "outDir": "./dist", + "baseUrl": "./", + "incremental": true, + "skipLibCheck": true, + "strictNullChecks": false, + "noImplicitAny": false, + "strictBindCallApply": false, + "forceConsistentCasingInFileNames": false, + "noFallthroughCasesInSwitch": false, + "resolveJsonModule": true, + "esModuleInterop": true, + "paths": { + "src/*": [ + "src/*" + ], + } + } +} \ No newline at end of file diff --git a/backend/yarn.lock b/backend/yarn.lock new file mode 100644 index 0000000..f2b998a --- /dev/null +++ b/backend/yarn.lock @@ -0,0 +1,7684 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@angular-devkit/core@^13.3.0", "@angular-devkit/core@13.3.11": + version "13.3.11" + resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz" + integrity sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w== + dependencies: + ajv "8.9.0" + ajv-formats "2.1.1" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.6.7" + source-map "0.7.3" + +"@angular-devkit/core@13.3.5": + version "13.3.5" + resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.5.tgz" + integrity sha512-w7vzK4VoYP9rLgxJ2SwEfrkpKybdD+QgQZlsDBzT0C6Ebp7b4gkNcNVFo8EiZvfDl6Yplw2IAP7g7fs3STn0hQ== + dependencies: + ajv "8.9.0" + ajv-formats "2.1.1" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.6.7" + source-map "0.7.3" + +"@angular-devkit/core@17.3.8": + version "17.3.8" + resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.8.tgz" + integrity sha512-Q8q0voCGudbdCgJ7lXdnyaxKHbNQBARH68zPQV72WT8NWy+Gw/tys870i6L58NWbBaCJEUcIj/kb6KoakSRu+Q== + dependencies: + ajv "8.12.0" + ajv-formats "2.1.1" + jsonc-parser "3.2.1" + picomatch "4.0.1" + rxjs "7.8.1" + source-map "0.7.4" + +"@angular-devkit/schematics-cli@17.3.8": + version "17.3.8" + resolved "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-17.3.8.tgz" + integrity sha512-TjmiwWJarX7oqvNiRAroQ5/LeKUatxBOCNEuKXO/PV8e7pn/Hr/BqfFm+UcYrQoFdZplmtNAfqmbqgVziKvCpA== + dependencies: + "@angular-devkit/core" "17.3.8" + "@angular-devkit/schematics" "17.3.8" + ansi-colors "4.1.3" + inquirer "9.2.15" + symbol-observable "4.0.0" + yargs-parser "21.1.1" + +"@angular-devkit/schematics@^13.3.0": + version "13.3.11" + resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.11.tgz" + integrity sha512-ben+EGXpCrClnIVAAnEQmhQdKmnnqFhMp5BqMxgOslSYBAmCutLA6rBu5vsc8kZcGian1wt+lueF7G1Uk5cGBg== + dependencies: + "@angular-devkit/core" "13.3.11" + jsonc-parser "3.0.0" + magic-string "0.25.7" + ora "5.4.1" + rxjs "6.6.7" + +"@angular-devkit/schematics@13.3.11": + version "13.3.11" + resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.11.tgz" + integrity sha512-ben+EGXpCrClnIVAAnEQmhQdKmnnqFhMp5BqMxgOslSYBAmCutLA6rBu5vsc8kZcGian1wt+lueF7G1Uk5cGBg== + dependencies: + "@angular-devkit/core" "13.3.11" + jsonc-parser "3.0.0" + magic-string "0.25.7" + ora "5.4.1" + rxjs "6.6.7" + +"@angular-devkit/schematics@13.3.5": + version "13.3.5" + resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.5.tgz" + integrity sha512-0N/kL/Vfx0yVAEwa3HYxNx9wYb+G9r1JrLjJQQzDp+z9LtcojNf7j3oey6NXrDUs1WjVZOa/AIdRl3/DuaoG5w== + dependencies: + "@angular-devkit/core" "13.3.5" + jsonc-parser "3.0.0" + magic-string "0.25.7" + ora "5.4.1" + rxjs "6.6.7" + +"@angular-devkit/schematics@17.3.8": + version "17.3.8" + resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.8.tgz" + integrity sha512-QRVEYpIfgkprNHc916JlPuNbLzOgrm9DZalHasnLUz4P6g7pR21olb8YCyM2OTJjombNhya9ZpckcADU5Qyvlg== + dependencies: + "@angular-devkit/core" "17.3.8" + jsonc-parser "3.2.1" + magic-string "0.30.8" + ora "5.4.1" + rxjs "7.8.1" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.24.7": + version "7.24.7" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz" + integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== + dependencies: + "@babel/highlight" "^7.24.7" + picocolors "^1.0.0" + +"@babel/compat-data@^7.24.8": + version "7.24.9" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz" + integrity sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng== + +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0", "@babel/core@>=7.0.0-beta.0 <8": + version "7.24.9" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz" + integrity sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.24.9" + "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-module-transforms" "^7.24.9" + "@babel/helpers" "^7.24.8" + "@babel/parser" "^7.24.8" + "@babel/template" "^7.24.7" + "@babel/traverse" "^7.24.8" + "@babel/types" "^7.24.9" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.24.8", "@babel/generator@^7.24.9", "@babel/generator@^7.7.2": + version "7.24.10" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz" + integrity sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg== + dependencies: + "@babel/types" "^7.24.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.24.8": + version "7.24.8" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz" + integrity sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw== + dependencies: + "@babel/compat-data" "^7.24.8" + "@babel/helper-validator-option" "^7.24.8" + browserslist "^4.23.1" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-environment-visitor@^7.24.7": + version "7.24.7" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz" + integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-function-name@^7.24.7": + version "7.24.7" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz" + integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== + dependencies: + "@babel/template" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-hoist-variables@^7.24.7": + version "7.24.7" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz" + integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-module-imports@^7.24.7": + version "7.24.7" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz" + integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-module-transforms@^7.24.9": + version "7.24.9" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz" + integrity sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw== + dependencies: + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.8.0": + version "7.24.8" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz" + integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== + +"@babel/helper-simple-access@^7.24.7": + version "7.24.7" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz" + integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-split-export-declaration@^7.24.7": + version "7.24.7" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz" + integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-string-parser@^7.24.8": + version "7.24.8" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz" + integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== + +"@babel/helper-validator-identifier@^7.24.7": + version "7.24.7" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz" + integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== + +"@babel/helper-validator-option@^7.24.8": + version "7.24.8" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz" + integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== + +"@babel/helpers@^7.24.8": + version "7.24.8" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz" + integrity sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ== + dependencies: + "@babel/template" "^7.24.7" + "@babel/types" "^7.24.8" + +"@babel/highlight@^7.24.7": + version "7.24.7" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz" + integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== + dependencies: + "@babel/helper-validator-identifier" "^7.24.7" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.24.7", "@babel/parser@^7.24.8", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": + version "7.24.8" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz" + integrity sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w== + +"@babel/plugin-syntax-async-generators@^7.8.4": + 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== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + 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== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + 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== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + 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== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + 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== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + 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== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + 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== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + 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== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + 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== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + 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== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + 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== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.24.7" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz" + integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/runtime@^7.23.9": + version "7.24.8" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz" + integrity sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.24.7", "@babel/template@^7.3.3": + version "7.24.7" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz" + integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.7.2": + version "7.24.8" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz" + integrity sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.24.8" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-hoist-variables" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" + "@babel/parser" "^7.24.8" + "@babel/types" "^7.24.8" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.24.9", "@babel/types@^7.3.3", "@babel/types@^7.6.1", "@babel/types@^7.9.6": + version "7.24.9" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz" + integrity sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ== + dependencies: + "@babel/helper-string-parser" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@cspotcode/source-map-support@^0.8.0": + 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== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@css-inline/css-inline-darwin-arm64@0.13.0": + version "0.13.0" + resolved "https://registry.npmjs.org/@css-inline/css-inline-darwin-arm64/-/css-inline-darwin-arm64-0.13.0.tgz" + integrity sha512-A4QvlZdhp8v+3IHKF/UftRf5GrAVUMEHCGRuk2Dx594xn/UR4ieh+B70aMm5rfONh2hv5mlR9UcoYAkVpEQ99g== + +"@css-inline/css-inline-darwin-x64@0.13.0": + version "0.13.0" + resolved "https://registry.npmjs.org/@css-inline/css-inline-darwin-x64/-/css-inline-darwin-x64-0.13.0.tgz" + integrity sha512-px9z4ypzeECMyBEtlrNzTMpA1tnw5MmMIiMkBRhb8UGRr2pOBZY3yd/eEIxWzVVSPt0aIjVDwUOJ3+d0Z+BskA== + +"@css-inline/css-inline-linux-arm-gnueabihf@0.13.0": + version "0.13.0" + resolved "https://registry.npmjs.org/@css-inline/css-inline-linux-arm-gnueabihf/-/css-inline-linux-arm-gnueabihf-0.13.0.tgz" + integrity sha512-+uo0coLQNgk/AKeOB8mXSRd8VIlUg38zRSB9B9q0ior9oBCDPtEdn1HuCSvWxHoOSJ8QNNk+uwbz0zW4CETzFw== + +"@css-inline/css-inline-linux-arm64-gnu@0.13.0": + version "0.13.0" + resolved "https://registry.npmjs.org/@css-inline/css-inline-linux-arm64-gnu/-/css-inline-linux-arm64-gnu-0.13.0.tgz" + integrity sha512-GVrsFbY5l0Hxyzxsm5S5JPGObvHm/Ybf2wZgnWBsQigxqGtr1FL535HaTwEnq6aHOpH3f08gR5Vx33gB7jG4pw== + +"@css-inline/css-inline-linux-arm64-musl@0.13.0": + version "0.13.0" + resolved "https://registry.npmjs.org/@css-inline/css-inline-linux-arm64-musl/-/css-inline-linux-arm64-musl-0.13.0.tgz" + integrity sha512-V5h5+CRnE01EgoafI/kyjEcM8zvN+sKLnp17Aq9LqQfsut7mO3i72d8g/xeVC37DCLoGQFLvDCzbze2NbF2dIQ== + +"@css-inline/css-inline-linux-x64-gnu@0.13.0": + version "0.13.0" + resolved "https://registry.npmjs.org/@css-inline/css-inline-linux-x64-gnu/-/css-inline-linux-x64-gnu-0.13.0.tgz" + integrity sha512-vbRV++73MW7dvz/AIbozkv4R68/k/sEp57hno/L6lx034VYxpCwdfqtGN4D0W1TOTzdr2b6qBOGNZ1oLKQZOQQ== + +"@css-inline/css-inline-linux-x64-musl@0.13.0": + version "0.13.0" + resolved "https://registry.npmjs.org/@css-inline/css-inline-linux-x64-musl/-/css-inline-linux-x64-musl-0.13.0.tgz" + integrity sha512-2tCnwU23W/yMs9cGc2/i2jd9y2pjuntx0a5OytqX7s9fvUtmI3nc0Od6wuf51LnmdU+XAU8HLT9pZppsQiwPfQ== + +"@css-inline/css-inline-win32-x64-msvc@0.13.0": + version "0.13.0" + resolved "https://registry.npmjs.org/@css-inline/css-inline-win32-x64-msvc/-/css-inline-win32-x64-msvc-0.13.0.tgz" + integrity sha512-6VFhFSXp4FH+NzJhLd6fFi7jKCPvIRW+vq0tV+CPuiQ3zPzMfC9nIk8sB/1VJR8EcvBAjMV53YnacuDjRFRT9g== + +"@css-inline/css-inline@0.13.0": + version "0.13.0" + resolved "https://registry.npmjs.org/@css-inline/css-inline/-/css-inline-0.13.0.tgz" + integrity sha512-ZozAXBiW1I8hf6eW5eTNqhxUdNOBxrNNxxUnQRiKQpWcs5ORuGaiWwV5focMBTJ5WXGN+Z8VLP93BOwWFPzCJw== + optionalDependencies: + "@css-inline/css-inline-darwin-arm64" "0.13.0" + "@css-inline/css-inline-darwin-x64" "0.13.0" + "@css-inline/css-inline-linux-arm-gnueabihf" "0.13.0" + "@css-inline/css-inline-linux-arm64-gnu" "0.13.0" + "@css-inline/css-inline-linux-arm64-musl" "0.13.0" + "@css-inline/css-inline-linux-x64-gnu" "0.13.0" + "@css-inline/css-inline-linux-x64-musl" "0.13.0" + "@css-inline/css-inline-win32-x64-msvc" "0.13.0" + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": + version "4.11.0" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz" + integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== + +"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": + version "9.3.0" + resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.1.0": + version "5.1.0" + resolved "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== + dependencies: + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.3" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@ioredis/commands@^1.1.1": + version "1.2.0" + resolved "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz" + integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz" + integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + +"@jest/core@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz" + integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/reporters" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.8.1" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^27.5.1" + jest-config "^27.5.1" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-resolve-dependencies "^27.5.1" + jest-runner "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + jest-watcher "^27.5.1" + micromatch "^4.0.4" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz" + integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== + dependencies: + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + +"@jest/fake-timers@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz" + integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== + dependencies: + "@jest/types" "^27.5.1" + "@sinonjs/fake-timers" "^8.0.1" + "@types/node" "*" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +"@jest/globals@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz" + integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/types" "^27.5.1" + expect "^27.5.1" + +"@jest/reporters@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz" + integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-haste-map "^27.5.1" + jest-resolve "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^8.1.0" + +"@jest/source-map@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz" + integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.9" + source-map "^0.6.0" + +"@jest/test-result@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz" + integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== + dependencies: + "@jest/console" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz" + integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== + dependencies: + "@jest/test-result" "^27.5.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-runtime "^27.5.1" + +"@jest/transform@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz" + integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^27.5.1" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-regex-util "^27.5.1" + jest-util "^27.5.1" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/source-map@^0.3.3": + version "0.3.6" + resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": + version "1.5.0" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@ljharb/through@^2.3.12": + version "2.3.13" + resolved "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz" + integrity sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ== + dependencies: + call-bind "^1.0.7" + +"@lukeed/csprng@^1.0.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz" + integrity sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA== + +"@mapbox/node-pre-gyp@^1.0.11": + version "1.0.11" + resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz" + integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== + 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" + +"@microsoft/tsdoc@^0.15.0": + version "0.15.0" + resolved "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.0.tgz" + integrity sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA== + +"@nestjs-modules/mailer@^1.6.1": + version "1.11.2" + resolved "https://registry.npmjs.org/@nestjs-modules/mailer/-/mailer-1.11.2.tgz" + integrity sha512-k07wyKbtCzxWMm6IqGwcGIisnXD/6sneGvUR8rBBZbxtLn1HE1FLGyiaXBrPui/0K7W41aS9x9jAIhfTawtlUg== + dependencies: + "@css-inline/css-inline" "0.13.0" + glob "10.3.10" + mjml "4.15.3" + preview-email "3.0.19" + optionalDependencies: + "@types/ejs" "^3.1.5" + "@types/pug" "^2.0.10" + ejs "^3.1.9" + handlebars "^4.7.8" + pug "^3.0.2" + +"@nestjs/cli@^10.4.2": + version "10.4.2" + resolved "https://registry.npmjs.org/@nestjs/cli/-/cli-10.4.2.tgz" + integrity sha512-fQexIfLHfp6GUgX+CO4fOg+AEwV5ox/LHotQhyZi9wXUQDyIqS0NTTbumr//62EcX35qV4nU0359nYnuEdzG+A== + dependencies: + "@angular-devkit/core" "17.3.8" + "@angular-devkit/schematics" "17.3.8" + "@angular-devkit/schematics-cli" "17.3.8" + "@nestjs/schematics" "^10.0.1" + chalk "4.1.2" + chokidar "3.6.0" + cli-table3 "0.6.5" + commander "4.1.1" + fork-ts-checker-webpack-plugin "9.0.2" + glob "10.4.2" + inquirer "8.2.6" + node-emoji "1.11.0" + ora "5.4.1" + tree-kill "1.2.2" + tsconfig-paths "4.2.0" + tsconfig-paths-webpack-plugin "4.1.0" + typescript "5.3.3" + webpack "5.92.1" + webpack-node-externals "3.0.0" + +"@nestjs/common@^10.0.0", "@nestjs/common@^10.3.10", "@nestjs/common@^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0", "@nestjs/common@^8.0.0 || ^9.0.0 || ^10.0.0", "@nestjs/common@^9.0.0 || ^10.0.0", "@nestjs/common@>=7.0.9": + version "10.3.10" + resolved "https://registry.npmjs.org/@nestjs/common/-/common-10.3.10.tgz" + integrity sha512-H8k0jZtxk1IdtErGDmxFRy0PfcOAUg41Prrqpx76DQusGGJjsaovs1zjXVD1rZWaVYchfT1uczJ6L4Kio10VNg== + dependencies: + iterare "1.2.1" + tslib "2.6.3" + uid "2.0.2" + +"@nestjs/config@^3.0.0": + version "3.2.3" + resolved "https://registry.npmjs.org/@nestjs/config/-/config-3.2.3.tgz" + integrity sha512-p6yv/CvoBewJ72mBq4NXgOAi2rSQNWx3a+IMJLVKS2uiwFCOQQuiIatGwq6MRjXV3Jr+B41iUO8FIf4xBrZ4/w== + dependencies: + dotenv "16.4.5" + dotenv-expand "10.0.0" + lodash "4.17.21" + +"@nestjs/core@^10.0.0", "@nestjs/core@^10.3.10", "@nestjs/core@^9.0.0 || ^10.0.0", "@nestjs/core@>=7.0.9": + version "10.3.10" + resolved "https://registry.npmjs.org/@nestjs/core/-/core-10.3.10.tgz" + integrity sha512-ZbQ4jovQyzHtCGCrzK5NdtW1SYO2fHSsgSY1+/9WdruYCUra+JDkWEXgZ4M3Hv480Dl3OXehAmY1wCOojeMyMQ== + dependencies: + "@nuxtjs/opencollective" "0.3.2" + fast-safe-stringify "2.1.1" + iterare "1.2.1" + path-to-regexp "3.2.0" + tslib "2.6.3" + uid "2.0.2" + +"@nestjs/jwt@^10.1.0": + version "10.2.0" + resolved "https://registry.npmjs.org/@nestjs/jwt/-/jwt-10.2.0.tgz" + integrity sha512-x8cG90SURkEiLOehNaN2aRlotxT0KZESUliOPKKnjWiyJOcWurkF3w345WOX0P4MgFzUjGoZ1Sy0aZnxeihT0g== + dependencies: + "@types/jsonwebtoken" "9.0.5" + jsonwebtoken "9.0.2" + +"@nestjs/mapped-types@*", "@nestjs/mapped-types@2.0.5": + version "2.0.5" + resolved "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.5.tgz" + integrity sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg== + +"@nestjs/passport@^10.0.0": + version "10.0.3" + resolved "https://registry.npmjs.org/@nestjs/passport/-/passport-10.0.3.tgz" + integrity sha512-znJ9Y4S8ZDVY+j4doWAJ8EuuVO7SkQN3yOBmzxbGaXbvcSwFDAdGJ+OMCg52NdzIO4tQoN4pYKx8W6M0ArfFRQ== + +"@nestjs/platform-express@^10.0.0", "@nestjs/platform-express@^10.3.10": + version "10.3.10" + resolved "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.3.10.tgz" + integrity sha512-wK2ow3CZI2KFqWeEpPmoR300OB6BcBLxARV1EiClJLCj4S1mZsoCmS0YWgpk3j1j6mo0SI8vNLi/cC2iZPEPQA== + dependencies: + body-parser "1.20.2" + cors "2.8.5" + express "4.19.2" + multer "1.4.4-lts.1" + tslib "2.6.3" + +"@nestjs/schematics@^10.0.1": + version "10.1.3" + resolved "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.1.3.tgz" + integrity sha512-aLJ4Nl/K/u6ZlgLa0NjKw5CuBOIgc6vudF42QvmGueu5FaMGM6IJrAuEvB5T2kr0PAfVwYmDFBBHCWdYhTw4Tg== + dependencies: + "@angular-devkit/core" "17.3.8" + "@angular-devkit/schematics" "17.3.8" + comment-json "4.2.3" + jsonc-parser "3.3.1" + pluralize "8.0.0" + +"@nestjs/schematics@^8.0.0": + version "8.0.11" + resolved "https://registry.npmjs.org/@nestjs/schematics/-/schematics-8.0.11.tgz" + integrity sha512-W/WzaxgH5aE01AiIErE9QrQJ73VR/M/8p8pq0LZmjmNcjZqU5kQyOWUxZg13WYfSpJdOa62t6TZRtFDmgZPoIg== + dependencies: + "@angular-devkit/core" "13.3.5" + "@angular-devkit/schematics" "13.3.5" + fs-extra "10.1.0" + jsonc-parser "3.0.0" + pluralize "8.0.0" + +"@nestjs/swagger@^7.4.0": + version "7.4.0" + resolved "https://registry.npmjs.org/@nestjs/swagger/-/swagger-7.4.0.tgz" + integrity sha512-dCiwKkRxcR7dZs5jtrGspBAe/nqJd1AYzOBTzw9iCdbq3BGrLpwokelk6lFZPe4twpTsPQqzNKBwKzVbI6AR/g== + dependencies: + "@microsoft/tsdoc" "^0.15.0" + "@nestjs/mapped-types" "2.0.5" + js-yaml "4.1.0" + lodash "4.17.21" + path-to-regexp "3.2.0" + swagger-ui-dist "5.17.14" + +"@nestjs/testing@^10.3.10": + version "10.3.10" + resolved "https://registry.npmjs.org/@nestjs/testing/-/testing-10.3.10.tgz" + integrity sha512-i3HAtVQJijxNxJq1k39aelyJlyEIBRONys7IipH/4r8W0J+M1V+y5EKDOyi4j1SdNSb/vmNyWpZ2/ewZjl3kRA== + dependencies: + tslib "2.6.3" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nuxtjs/opencollective@0.3.2": + version "0.3.2" + resolved "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz" + integrity sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA== + dependencies: + chalk "^4.1.0" + consola "^2.15.0" + node-fetch "^2.6.1" + +"@one-ini/wasm@0.1.1": + version "0.1.1" + resolved "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz" + integrity sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw== + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@prisma/client@^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", "@prisma/client@^4.7.0": + version "4.16.2" + resolved "https://registry.npmjs.org/@prisma/client/-/client-4.16.2.tgz" + integrity sha512-qCoEyxv1ZrQ4bKy39GnylE8Zq31IRmm8bNhNbZx7bF2cU5aiCCnSa93J2imF88MBjn7J9eUQneNxUQVJdl/rPQ== + dependencies: + "@prisma/engines-version" "4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81" + +"@prisma/engines-version@4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81": + version "4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81" + resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81.tgz" + integrity sha512-q617EUWfRIDTriWADZ4YiWRZXCa/WuhNgLTVd+HqWLffjMSPzyM5uOWoauX91wvQClSKZU4pzI4JJLQ9Kl62Qg== + +"@prisma/engines@4.16.2": + version "4.16.2" + resolved "https://registry.npmjs.org/@prisma/engines/-/engines-4.16.2.tgz" + integrity sha512-vx1nxVvN4QeT/cepQce68deh/Turxy5Mr+4L4zClFuK1GlxN3+ivxfuv+ej/gvidWn1cE1uAhW7ALLNlYbRUAw== + +"@schematics/angular@~13.3.0": + version "13.3.11" + resolved "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.11.tgz" + integrity sha512-imKBnKYEse0SBVELZO/753nkpt3eEgpjrYkB+AFWF9YfO/4RGnYXDHoH8CFkzxPH9QQCgNrmsVFNiYGS+P/S1A== + dependencies: + "@angular-devkit/core" "13.3.11" + "@angular-devkit/schematics" "13.3.11" + jsonc-parser "3.0.0" + +"@selderee/plugin-htmlparser2@^0.11.0": + version "0.11.0" + resolved "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz" + integrity sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ== + dependencies: + domhandler "^5.0.3" + selderee "^0.11.0" + +"@sideway/address@^4.1.5": + version "4.1.5" + resolved "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz" + integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sinonjs/commons@^1.7.0": + version "1.8.6" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^8.0.1": + version "8.1.0" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz" + integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@tsconfig/node10@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.20.6" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + dependencies: + "@babel/types" "^7.20.7" + +"@types/body-parser@*": + version "1.19.5" + resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.38" + resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/cookiejar@^2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz" + integrity sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q== + +"@types/ejs@^3.1.5": + version "3.1.5" + resolved "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz" + integrity sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg== + +"@types/eslint-scope@^3.7.3": + version "3.7.7" + resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "9.6.0" + resolved "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz" + integrity sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.5": + version "1.0.5" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/express-serve-static-core@^4.17.33": + version "4.19.5" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz" + integrity sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.21" + resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.9" + resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + +"@types/http-errors@*": + version "2.0.4" + resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^27.0.0", "@types/jest@27.4.1": + version "27.4.1" + resolved "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz" + integrity sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw== + dependencies: + jest-matcher-utils "^27.0.0" + pretty-format "^27.0.0" + +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/jsonwebtoken@9.0.5": + version "9.0.5" + resolved "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz" + integrity sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA== + dependencies: + "@types/node" "*" + +"@types/methods@^1.1.4": + version "1.1.4" + resolved "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz" + integrity sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ== + +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== + +"@types/multer@^1.4.7": + version "1.4.11" + resolved "https://registry.npmjs.org/@types/multer/-/multer-1.4.11.tgz" + integrity sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w== + dependencies: + "@types/express" "*" + +"@types/node@*", "@types/node@^16.0.0": + version "16.18.104" + resolved "https://registry.npmjs.org/@types/node/-/node-16.18.104.tgz" + integrity sha512-OF3keVCbfPlkzxnnDBUZJn1RiCJzKeadjiW0xTEb0G1SUJ5gDVb3qnzZr2T4uIFvsbKJbXy1v2DN7e2zaEY7jQ== + +"@types/prettier@^2.1.5": + version "2.7.3" + resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + +"@types/pug@^2.0.10": + version "2.0.10" + resolved "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz" + integrity sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA== + +"@types/qs@*": + version "6.9.15" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz" + integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + +"@types/semver@^7.3.12": + version "7.5.8" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + +"@types/send@*": + version "0.17.4" + resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-static@*": + version "1.15.7" + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "*" + +"@types/stack-utils@^2.0.0": + version "2.0.3" + resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + +"@types/superagent@*": + version "8.1.7" + resolved "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.7.tgz" + integrity sha512-NmIsd0Yj4DDhftfWvvAku482PZum4DBW7U51OvS8gvOkDDY0WT1jsVyDV3hK+vplrsYw8oDwi9QxOM7U68iwww== + dependencies: + "@types/cookiejar" "^2.1.5" + "@types/methods" "^1.1.4" + "@types/node" "*" + +"@types/supertest@^2.0.11": + version "2.0.16" + resolved "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.16.tgz" + integrity sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg== + dependencies: + "@types/superagent" "*" + +"@types/validator@^13.11.8": + version "13.12.0" + resolved "https://registry.npmjs.org/@types/validator/-/validator-13.12.0.tgz" + integrity sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag== + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^16.0.0": + version "16.0.9" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz" + integrity sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^5.0.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.0.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + dependencies: + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + dependencies: + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + +"@webassemblyjs/ast@^1.12.1", "@webassemblyjs/ast@1.12.1": + version "1.12.1" + resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz" + integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== + +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== + +"@webassemblyjs/helper-buffer@1.12.1": + version "1.12.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz" + integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== + +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== + +"@webassemblyjs/helper-wasm-section@1.12.1": + version "1.12.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz" + integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.12.1" + +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.12.1": + version "1.12.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz" + integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-opt" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + "@webassemblyjs/wast-printer" "1.12.1" + +"@webassemblyjs/wasm-gen@1.12.1": + version "1.12.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz" + integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.12.1": + version "1.12.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz" + integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + +"@webassemblyjs/wasm-parser@^1.12.1", "@webassemblyjs/wasm-parser@1.12.1": + version "1.12.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz" + integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.12.1": + version "1.12.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz" + integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abab@^2.0.3, abab@^2.0.5: + version "2.0.6" + resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.8: + 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== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn-walk@^8.1.1: + version "8.3.3" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz" + integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw== + dependencies: + acorn "^8.11.0" + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.11.0, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: + version "8.12.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== + +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +agent-base@^7.0.2: + version "7.1.1" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz" + integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== + dependencies: + debug "^4.3.4" + +agent-base@6: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ajv-formats@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + 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" + +ajv@^6.12.5, ajv@^6.9.1: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + 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" + +ajv@^8.0.0, ajv@8.12.0: + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@8.9.0: + version "8.9.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz" + integrity sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +alce@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/alce/-/alce-1.2.0.tgz" + integrity sha512-XppPf2S42nO2WhvKzlwzlfcApcXHzjlod30pKmcWjRgLOtqoe5DMuqdiYoM6AgyXksc6A6pV4v1L/WW217e57w== + dependencies: + esprima "^1.2.0" + estraverse "^1.5.0" + +ansi-colors@^4.1.1, ansi-colors@4.1.3: + version "4.1.3" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: + 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== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +append-field@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz" + integrity sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw== + +"aproba@^1.0.3 || ^2.0.0": + 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== + +are-we-there-yet@^2.0.0: + 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== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-timsort@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz" + integrity sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +asap@^2.0.0, asap@~2.0.3: + version "2.0.6" + resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +assert-never@^1.2.1: + version "1.3.0" + resolved "https://registry.npmjs.org/assert-never/-/assert-never-1.3.0.tgz" + integrity sha512-9Z3vxQ+berkL/JJo0dK+EY3Lp0s3NtSnP3VCLsh5HDcZPrh0M+KQRK5sWhUeyPPH+/RCxZqOxLMR+YC6vlviEQ== + +async@^3.2.3: + version "3.2.5" + resolved "https://registry.npmjs.org/async/-/async-3.2.5.tgz" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +babel-jest@^27.5.1, "babel-jest@>=27.0.0 <28": + version "27.5.1" + resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz" + integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== + dependencies: + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz" + integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@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-top-level-await" "^7.8.3" + +babel-preset-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz" + integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== + dependencies: + babel-plugin-jest-hoist "^27.5.1" + babel-preset-current-node-syntax "^1.0.0" + +babel-walk@3.0.0-canary-5: + version "3.0.0-canary-5" + resolved "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz" + integrity sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw== + dependencies: + "@babel/types" "^7.9.6" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.0, base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base64url@3.x.x: + version "3.0.1" + resolved "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz" + integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== + +basic-auth@~2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz" + integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== + dependencies: + safe-buffer "5.1.2" + +bcrypt@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz" + integrity sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.11" + node-addon-api "^5.0.0" + +bignumber.js@^9.0.0: + version "9.1.2" + resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +body-parser@1.20.2: + version "1.20.2" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserslist@^4.21.10, browserslist@^4.23.1, "browserslist@>= 4.21.0": + version "4.23.2" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz" + integrity sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA== + dependencies: + caniuse-lite "^1.0.30001640" + electron-to-chromium "^1.4.820" + node-releases "^2.0.14" + update-browserslist-db "^1.1.0" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +busboy@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.2, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz" + integrity sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w== + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001640: + version "1.0.30001643" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz" + integrity sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg== + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2, chalk@4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^5.3.0: + version "5.3.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +character-parser@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz" + integrity sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw== + dependencies: + is-regex "^1.0.3" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +cheerio@^1.0.0-rc.12, cheerio@1.0.0-rc.12: + version "1.0.0-rc.12" + resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + +chokidar@^3.0.0, chokidar@^3.5.2, chokidar@^3.5.3, chokidar@3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + 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" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chrome-trace-event@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz" + integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== + +ci-info@^3.2.0, ci-info@^3.8.0: + version "3.9.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +cjs-module-lexer@^1.0.0: + version "1.3.1" + resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz" + integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q== + +class-transformer@*, "class-transformer@^0.4.0 || ^0.5.0", class-transformer@^0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz" + integrity sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw== + +class-validator@*, "class-validator@^0.13.0 || ^0.14.0", class-validator@^0.14.1: + version "0.14.1" + resolved "https://registry.npmjs.org/class-validator/-/class-validator-0.14.1.tgz" + integrity sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ== + dependencies: + "@types/validator" "^13.11.8" + libphonenumber-js "^1.10.53" + validator "^13.9.0" + +clean-css@^4.2.1: + version "4.2.4" + resolved "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz" + integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== + dependencies: + source-map "~0.6.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-table3@0.6.5: + version "0.6.5" + resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz" + integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +cluster-key-slot@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz" + integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-support@^1.1.2: + 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== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^2.19.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^6.1.0: + version "6.2.1" + resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + +commander@4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +comment-json@4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz" + integrity sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw== + dependencies: + array-timsort "^1.0.3" + core-util-is "^1.0.3" + esprima "^4.0.1" + has-own-prop "^2.0.0" + repeat-string "^1.6.1" + +component-emitter@^1.3.0: + version "1.3.1" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz" + integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +config-chain@^1.1.13: + version "1.1.13" + resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +consola@^2.15.0: + version "2.15.3" + resolved "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz" + integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + +console-control-strings@^1.0.0, console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +constantinople@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz" + integrity sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw== + dependencies: + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.1" + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^1.4.0, convert-source-map@^1.6.0: + 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== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== + +cookiejar@^2.1.4: + version "2.1.4" + resolved "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz" + integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== + +core-util-is@^1.0.3, core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@2.8.5: + version "2.8.5" + resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cosmiconfig@^8.2.0: + version "8.3.6" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +csv-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/csv-parser/-/csv-parser-3.2.0.tgz" + integrity sha512-fgKbp+AJbn1h2dcAHKIdKNSSjfp43BZZykXsCjzALjKy80VXQNHPFJ6T9Afwdzoj24aMkq8GwDS7KGcDPpejrA== + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@4: + version "4.3.5" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz" + integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== + dependencies: + ms "2.1.2" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +decimal.js@^10.2.1: + version "10.4.3" + resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3: + 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== + +deepmerge@^4.2.2, deepmerge@^4.3.1: + 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== + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +denque@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" + integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== + +depd@~2.0.0, depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-indent@^6.0.0: + version "6.1.0" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + +detect-libc@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + +detect-newline@^3.0.0, detect-newline@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +detect-node@^2.0.4, detect-node@2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +dezalgo@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz" + integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== + dependencies: + asap "^2.0.0" + wrappy "1" + +diff-sequences@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz" + integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +display-notification@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/display-notification/-/display-notification-2.0.0.tgz" + integrity sha512-TdmtlAcdqy1NU+j7zlkDdMnCL878zriLaBmoD9quOoq1ySSSGv03l0hXK5CvIFZlIfFI/hizqdQuW+Num7xuhw== + dependencies: + escape-string-applescript "^1.0.0" + run-applescript "^3.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +doctypes@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz" + integrity sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ== + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +domhandler@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz" + integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== + dependencies: + domelementtype "^2.0.1" + +domhandler@^4.2.0: + version "4.3.1" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^2.4.2: + version "2.8.0" + resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +domutils@^3.0.1, domutils@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dotenv-expand@10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz" + integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== + +dotenv@^16.3.1, dotenv@16.4.5: + version "16.4.5" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz" + integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ecdsa-sig-formatter@^1.0.11, ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +editorconfig@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz" + integrity sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q== + dependencies: + "@one-ini/wasm" "0.1.1" + commander "^10.0.0" + minimatch "9.0.1" + semver "^7.5.3" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +ejs@^3.1.9: + version "3.1.10" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.820: + version "1.5.0" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz" + integrity sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA== + +emittery@^0.8.1: + version "0.8.1" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz" + integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encoding-japanese@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/encoding-japanese/-/encoding-japanese-2.0.0.tgz" + integrity sha512-++P0RhebUC8MJAwJOsT93dT+5oc5oPImp1HubZpAuCZ5kTLnhuuBhKHj2jJeO/Gj93idPBWmIuQ9QWMe5rX3pQ== + +encoding-japanese@2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/encoding-japanese/-/encoding-japanese-2.1.0.tgz" + integrity sha512-58XySVxUgVlBikBTbQ8WdDxBDHIdXucB16LO5PBHR8t75D54wQrNo4cg+58+R1CtJfKnsVsvt9XlteRaR8xw1w== + +enhanced-resolve@^5.0.0, enhanced-resolve@^5.17.0, enhanced-resolve@^5.7.0: + version "5.17.1" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz" + integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-module-lexer@^1.2.1: + version "1.5.4" + resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz" + integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== + +escalade@^3.1.1, escalade@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escape-goat@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz" + integrity sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-applescript@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/escape-string-applescript/-/escape-string-applescript-1.0.0.tgz" + integrity sha512-4/hFwoYaC6TkpDn9A3pTC52zQPArFeXuIfhUtCGYdauTzXVP9H3BDr3oO/QzQehMpLDC7srvYgfwvImPFGfvBA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-prettier@^8.5.0: + version "8.10.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz" + integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== + +eslint-plugin-prettier@^4.0.0: + version "4.2.1" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-scope@^5.1.1, eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@*, "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", eslint@^8.0.1, eslint@>=7.0.0, eslint@>=7.28.0: + version "8.57.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esprima@^1.2.0: + version "1.2.5" + resolved "https://registry.npmjs.org/esprima/-/esprima-1.2.5.tgz" + integrity sha512-S9VbPDU0adFErpDai3qDkjq8+G05ONtKzcyNrPKg/ZKa+tf879nX2KexNU95b31UoTJjRLInNBHHHjFPoCd7lQ== + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.2: + version "1.6.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^1.5.0: + version "1.9.3" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz" + integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^0.10.0: + version "0.10.0" + resolved "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz" + integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== + dependencies: + cross-spawn "^6.0.0" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + 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" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz" + integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== + dependencies: + "@jest/types" "^27.5.1" + jest-get-type "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + +"express@>=4.0.0 || >=5.0.0-beta", express@4.19.2: + version "4.19.2" + resolved "https://registry.npmjs.org/express/-/express-4.19.2.tgz" + integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.2" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.6.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-object@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/extend-object/-/extend-object-1.0.0.tgz" + integrity sha512-0dHDIXC7y7LDmCh/lp1oYkmv73K25AMugQI07r8eFopkW6f7Ufn1q+ETMsJjnV9Am14SlElkqy3O92r6xEaxPw== + +extend@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3, external-editor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + 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== + +fast-diff@^1.1.2: + version "1.3.0" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-glob@^3.2.9: + version "3.3.2" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + 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" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@2.x: + 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== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-safe-stringify@^2.1.1, fast-safe-stringify@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +figures@^3.0.0, figures@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +fixpack@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/fixpack/-/fixpack-4.0.0.tgz" + integrity sha512-5SM1+H2CcuJ3gGEwTiVo/+nd/hYpNj9Ch3iMDOQ58ndY+VGQ2QdvaUTkd3otjZvYnd/8LF/HkJ5cx7PBq0orCQ== + dependencies: + alce "1.2.0" + chalk "^3.0.0" + detect-indent "^6.0.0" + detect-newline "^3.1.0" + extend-object "^1.0.0" + rc "^1.2.8" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + +foreground-child@^3.1.0: + version "3.2.1" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz" + integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +fork-ts-checker-webpack-plugin@9.0.2: + version "9.0.2" + resolved "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz" + integrity sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg== + dependencies: + "@babel/code-frame" "^7.16.7" + chalk "^4.1.2" + chokidar "^3.5.3" + cosmiconfig "^8.2.0" + deepmerge "^4.2.2" + fs-extra "^10.0.0" + memfs "^3.4.1" + minimatch "^3.0.4" + node-abort-controller "^3.0.1" + schema-utils "^3.1.1" + semver "^7.3.5" + tapable "^2.2.1" + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +formidable@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz" + integrity sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g== + dependencies: + dezalgo "^1.0.4" + hexoid "^1.0.0" + once "^1.4.0" + qs "^6.11.0" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^10.0.0, fs-extra@10.1.0: + 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== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-monkey@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz" + integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== + 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" + +gaxios@^6.0.0, gaxios@^6.1.1: + version "6.7.0" + resolved "https://registry.npmjs.org/gaxios/-/gaxios-6.7.0.tgz" + integrity sha512-DSrkyMTfAnAm4ks9Go20QGOcXEyW/NmZhvTYBU2rb4afBB393WIMQPWPEDMl/k8xqiNN9HYq2zao3oWXsdl2Tg== + dependencies: + extend "^3.0.2" + https-proxy-agent "^7.0.1" + is-stream "^2.0.0" + node-fetch "^2.6.9" + uuid "^10.0.0" + +gcp-metadata@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz" + integrity sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg== + dependencies: + gaxios "^6.0.0" + json-bigint "^1.0.0" + +gensync@^1.0.0-beta.2: + 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== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-port@5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" + integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^10.3.10, glob@^10.3.3, glob@10.3.10: + version "10.3.10" + resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + +glob@^7.1.1: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" + +glob@^7.1.2: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" + +glob@^7.1.4: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" + +glob@10.4.2: + version "10.4.2" + resolved "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz" + integrity sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +google-auth-library@^9.0.0: + version "9.11.0" + resolved "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.11.0.tgz" + integrity sha512-epX3ww/mNnhl6tL45EQ/oixsY8JLEgUFoT4A5E/5iAR4esld9Kqv6IJGk7EmGuOgDvaarwF95hU2+v7Irql9lw== + dependencies: + base64-js "^1.3.0" + ecdsa-sig-formatter "^1.0.11" + gaxios "^6.1.1" + gcp-metadata "^6.1.0" + gtoken "^7.0.0" + jws "^4.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.9: + 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== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +gtoken@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz" + integrity sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw== + dependencies: + gaxios "^6.0.0" + jws "^4.0.0" + +handlebars@^4.7.8: + version "4.7.8" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-own-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz" + integrity sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ== + +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +hasown@^2.0.0, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +he@^1.2.0, he@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +helmet@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/helmet/-/helmet-7.1.0.tgz" + integrity sha512-g+HZqgfbpXdCkme/Cd/mZkV0aV3BZZZSugecH03kl38m/Kmdx8jKjBikpDj2cr+Iynv4KpYEviojNdTJActJAg== + +hexoid@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz" + integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-minifier@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz" + integrity sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig== + dependencies: + camel-case "^3.0.0" + clean-css "^4.2.1" + commander "^2.19.0" + he "^1.2.0" + param-case "^2.1.1" + relateurl "^0.2.7" + uglify-js "^3.5.1" + +html-to-text@9.0.5: + version "9.0.5" + resolved "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz" + integrity sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg== + dependencies: + "@selderee/plugin-htmlparser2" "^0.11.0" + deepmerge "^4.3.1" + dom-serializer "^2.0.0" + htmlparser2 "^8.0.2" + selderee "^0.11.0" + +htmlparser2@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz" + integrity sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ== + dependencies: + domelementtype "^2.0.1" + domhandler "^3.3.0" + domutils "^2.4.2" + entities "^2.0.0" + +htmlparser2@^8.0.1, htmlparser2@^8.0.2: + version "8.0.2" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +htmlparser2@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz" + integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.1.0" + entities "^4.5.0" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + 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== + dependencies: + agent-base "6" + debug "4" + +https-proxy-agent@^7.0.1: + version "7.0.5" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz" + integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== + dependencies: + agent-base "^7.0.2" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.3, iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0: + version "5.3.1" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + +import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.2.0" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2, inherits@2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.4, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inquirer@8.2.6: + version "8.2.6" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz" + integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== + 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 "^6.0.1" + +inquirer@9.2.15: + version "9.2.15" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz" + integrity sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg== + dependencies: + "@ljharb/through" "^2.3.12" + ansi-escapes "^4.3.2" + chalk "^5.3.0" + cli-cursor "^3.1.0" + cli-width "^4.1.0" + external-editor "^3.1.0" + figures "^3.2.0" + lodash "^4.17.21" + mute-stream "1.0.0" + ora "^5.4.1" + run-async "^3.0.0" + rxjs "^7.8.1" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wrap-ansi "^6.2.0" + +ioredis@^5.3.2: + version "5.4.1" + resolved "https://registry.npmjs.org/ioredis/-/ioredis-5.4.1.tgz" + integrity sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA== + dependencies: + "@ioredis/commands" "^1.1.1" + cluster-key-slot "^1.1.0" + debug "^4.3.4" + denque "^2.1.0" + lodash.defaults "^4.2.0" + lodash.isarguments "^3.1.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + standard-as-callback "^2.1.0" + +ipaddr.js@1.9.1: + 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== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.13.0: + version "2.15.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz" + integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA== + dependencies: + hasown "^2.0.2" + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-expression@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz" + integrity sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A== + dependencies: + acorn "^7.1.1" + object-assign "^4.1.1" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + 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== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + 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== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-promise@^2.0.0: + version "2.2.2" + resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + +is-regex@^1.0.3: + version "1.1.4" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.1" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.7" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +iterare@1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz" + integrity sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q== + +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jake@^10.8.5: + version "10.9.2" + resolved "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz" + integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jest-changed-files@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz" + integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== + dependencies: + "@jest/types" "^27.5.1" + execa "^5.0.0" + throat "^6.0.1" + +jest-circus@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz" + integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + throat "^6.0.1" + +jest-cli@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz" + integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== + dependencies: + "@jest/core" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + prompts "^2.0.1" + yargs "^16.2.0" + +jest-config@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz" + integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== + dependencies: + "@babel/core" "^7.8.0" + "@jest/test-sequencer" "^27.5.1" + "@jest/types" "^27.5.1" + babel-jest "^27.5.1" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.9" + jest-circus "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-get-type "^27.5.1" + jest-jasmine2 "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runner "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^27.5.1" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-docblock@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz" + integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== + dependencies: + detect-newline "^3.0.0" + +jest-each@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz" + integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== + dependencies: + "@jest/types" "^27.5.1" + chalk "^4.0.0" + jest-get-type "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + +jest-environment-jsdom@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz" + integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + jsdom "^16.6.0" + +jest-environment-node@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz" + integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +jest-get-type@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz" + integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== + +jest-haste-map@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz" + integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== + dependencies: + "@jest/types" "^27.5.1" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^27.5.1" + jest-serializer "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + micromatch "^4.0.4" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" + +jest-jasmine2@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz" + integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + throat "^6.0.1" + +jest-leak-detector@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz" + integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== + dependencies: + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz" + integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== + dependencies: + chalk "^4.0.0" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-message-util@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.5.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz" + integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== + +jest-resolve-dependencies@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz" + integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== + dependencies: + "@jest/types" "^27.5.1" + jest-regex-util "^27.5.1" + jest-snapshot "^27.5.1" + +jest-resolve@*, jest-resolve@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz" + integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== + dependencies: + "@jest/types" "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-pnp-resolver "^1.2.2" + jest-util "^27.5.1" + jest-validate "^27.5.1" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz" + integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.8.1" + graceful-fs "^4.2.9" + jest-docblock "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-haste-map "^27.5.1" + jest-leak-detector "^27.5.1" + jest-message-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runtime "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + source-map-support "^0.5.6" + throat "^6.0.1" + +jest-runtime@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz" + integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/globals" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-serializer@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz" + integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.9" + +jest-snapshot@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz" + integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== + dependencies: + "@babel/core" "^7.7.2" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.0.0" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^27.5.1" + graceful-fs "^4.2.9" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + jest-haste-map "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + natural-compare "^1.4.0" + pretty-format "^27.5.1" + semver "^7.3.2" + +jest-util@^27.0.0, jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz" + integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== + dependencies: + "@jest/types" "^27.5.1" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^27.5.1" + leven "^3.1.0" + pretty-format "^27.5.1" + +jest-watcher@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz" + integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== + dependencies: + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^27.5.1" + string-length "^4.0.1" + +jest-worker@^27.4.5, jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^27.0.0, jest@^27.2.5: + version "27.5.1" + resolved "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz" + integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== + dependencies: + "@jest/core" "^27.5.1" + import-local "^3.0.2" + jest-cli "^27.5.1" + +joi@^17.9.2: + version "17.13.3" + resolved "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz" + integrity sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA== + dependencies: + "@hapi/hoek" "^9.3.0" + "@hapi/topo" "^5.1.0" + "@sideway/address" "^4.1.5" + "@sideway/formula" "^3.0.1" + "@sideway/pinpoint" "^2.0.0" + +js-beautify@^1.6.14: + version "1.15.1" + resolved "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz" + integrity sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA== + dependencies: + config-chain "^1.1.13" + editorconfig "^1.0.4" + glob "^10.3.3" + js-cookie "^3.0.5" + nopt "^7.2.0" + +js-cookie@^3.0.5: + version "3.0.5" + resolved "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz" + integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw== + +js-stringify@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz" + integrity sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0, js-yaml@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsdom@^16.6.0: + version "16.7.0" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz" + integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + dependencies: + bignumber.js "^9.0.0" + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + 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== + +json-schema-traverse@^0.4.1: + 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== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.2.2, json5@^2.2.3, json5@2.x: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-parser@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz" + integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== + +jsonc-parser@3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== + +jsonc-parser@3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz" + integrity sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonwebtoken@^9.0.0, jsonwebtoken@9.0.2: + version "9.0.2" + resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz" + integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^7.5.4" + +jstransformer@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz" + integrity sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A== + dependencies: + is-promise "^2.0.0" + promise "^7.0.1" + +juice@^10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/juice/-/juice-10.0.0.tgz" + integrity sha512-9f68xmhGrnIi6DBkiiP3rUrQN33SEuaKu1+njX6VgMP+jwZAsnT33WIzlrWICL9matkhYu3OyrqSUP55YTIdGg== + dependencies: + cheerio "^1.0.0-rc.12" + commander "^6.1.0" + mensch "^0.3.4" + slick "^1.12.2" + web-resource-inliner "^6.0.1" + +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jwa@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz" + integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +jws@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz" + integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== + dependencies: + jwa "^2.0.0" + safe-buffer "^5.0.1" + +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leac@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz" + integrity sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +libbase64@1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/libbase64/-/libbase64-1.2.1.tgz" + integrity sha512-l+nePcPbIG1fNlqMzrh68MLkX/gTxk/+vdvAb388Ssi7UuUN31MI44w4Yf33mM3Cm4xDfw48mdf3rkdHszLNew== + +libbase64@1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/libbase64/-/libbase64-1.3.0.tgz" + integrity sha512-GgOXd0Eo6phYgh0DJtjQ2tO8dc0IVINtZJeARPeiIJqge+HdsWSuaDTe8ztQ7j/cONByDZ3zeB325AHiv5O0dg== + +libmime@5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/libmime/-/libmime-5.2.0.tgz" + integrity sha512-X2U5Wx0YmK0rXFbk67ASMeqYIkZ6E5vY7pNWRKtnNzqjvdYYG8xtPDpCnuUEnPU9vlgNev+JoSrcaKSUaNvfsw== + dependencies: + encoding-japanese "2.0.0" + iconv-lite "0.6.3" + libbase64 "1.2.1" + libqp "2.0.1" + +libmime@5.3.5: + version "5.3.5" + resolved "https://registry.npmjs.org/libmime/-/libmime-5.3.5.tgz" + integrity sha512-nSlR1yRZ43L3cZCiWEw7ali3jY29Hz9CQQ96Oy+sSspYnIP5N54ucOPHqooBsXzwrX1pwn13VUE05q4WmzfaLg== + dependencies: + encoding-japanese "2.1.0" + iconv-lite "0.6.3" + libbase64 "1.3.0" + libqp "2.1.0" + +libphonenumber-js@^1.10.53: + version "1.11.4" + resolved "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.4.tgz" + integrity sha512-F/R50HQuWWYcmU/esP5jrH5LiWYaN7DpN0a/99U8+mnGGtnx8kmRE+649dQh3v+CowXXZc8vpkf5AmYkO0AQ7Q== + +libqp@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/libqp/-/libqp-2.0.1.tgz" + integrity sha512-Ka0eC5LkF3IPNQHJmYBWljJsw0UvM6j+QdKRbWyCdTmYwvIDE6a7bCm0UkTAL/K+3KXK5qXT/ClcInU01OpdLg== + +libqp@2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/libqp/-/libqp-2.1.0.tgz" + integrity sha512-O6O6/fsG5jiUVbvdgT7YX3xY3uIadR6wEZ7+vy9u7PKHAlSEB6blvC1o5pHBjgsi95Uo0aiBBdkyFecj6jtb7A== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +linkify-it@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz" + integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== + dependencies: + uc.micro "^2.0.0" + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isarguments@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +lodash@^4.17.15, lodash@^4.17.21, lodash@^4.7.0, lodash@4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz" + integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA== + +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +magic-string@0.25.7: + version "0.25.7" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +magic-string@0.30.8: + version "0.30.8" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz" + integrity sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +mailparser@^3.6.4: + version "3.7.1" + resolved "https://registry.npmjs.org/mailparser/-/mailparser-3.7.1.tgz" + integrity sha512-RCnBhy5q8XtB3mXzxcAfT1huNqN93HTYYyL6XawlIKycfxM/rXPg9tXoZ7D46+SgCS1zxKzw+BayDQSvncSTTw== + dependencies: + encoding-japanese "2.1.0" + he "1.2.0" + html-to-text "9.0.5" + iconv-lite "0.6.3" + libmime "5.3.5" + linkify-it "5.0.0" + mailsplit "5.4.0" + nodemailer "6.9.13" + punycode.js "2.3.1" + tlds "1.252.0" + +mailsplit@5.4.0: + version "5.4.0" + resolved "https://registry.npmjs.org/mailsplit/-/mailsplit-5.4.0.tgz" + integrity sha512-wnYxX5D5qymGIPYLwnp6h8n1+6P6vz/MJn5AzGjZ8pwICWssL+CCQjWBIToOVHASmATot4ktvlLo6CyLfOXWYA== + dependencies: + libbase64 "1.2.1" + libmime "5.2.0" + libqp "2.0.1" + +make-dir@^3.1.0: + 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== + dependencies: + semver "^6.0.0" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-error@^1.1.1, make-error@1.x: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^3.4.1: + version "3.5.3" + resolved "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz" + integrity sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw== + dependencies: + fs-monkey "^1.0.4" + +mensch@^0.3.4: + version "0.3.4" + resolved "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz" + integrity sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@^1.1.2, methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.0, micromatch@^4.0.4: + version "4.0.7" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz" + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@^2.4.6: + version "2.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@2.6.0: + version "2.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.1: + version "9.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.3: + version "9.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimatch@9.0.1: + version "9.0.1" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz" + integrity sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mjml-accordion@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-accordion/-/mjml-accordion-4.15.3.tgz" + integrity sha512-LPNVSj1LyUVYT9G1gWwSw3GSuDzDsQCu0tPB2uDsq4VesYNnU6v3iLCQidMiR6azmIt13OEozG700ygAUuA6Ng== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-body@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-body/-/mjml-body-4.15.3.tgz" + integrity sha512-7pfUOVPtmb0wC+oUOn4xBsAw4eT5DyD6xqaxj/kssu6RrFXOXgJaVnDPAI9AzIvXJ/5as9QrqRGYAddehwWpHQ== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-button@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-button/-/mjml-button-4.15.3.tgz" + integrity sha512-79qwn9AgdGjJR1vLnrcm2rq2AsAZkKC5JPwffTMG+Nja6zGYpTDZFZ56ekHWr/r1b5WxkukcPj2PdevUug8c+Q== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-carousel@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-carousel/-/mjml-carousel-4.15.3.tgz" + integrity sha512-3ju6I4l7uUhPRrJfN3yK9AMsfHvrYbRkcJ1GRphFHzUj37B2J6qJOQUpzA547Y4aeh69TSb7HFVf1t12ejQxVw== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-cli@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-cli/-/mjml-cli-4.15.3.tgz" + integrity sha512-+V2TDw3tXUVEptFvLSerz125C2ogYl8klIBRY1m5BHd4JvGVf3yhx8N3PngByCzA6PGcv/eydGQN+wy34SHf0Q== + dependencies: + "@babel/runtime" "^7.23.9" + chokidar "^3.0.0" + glob "^10.3.10" + html-minifier "^4.0.0" + js-beautify "^1.6.14" + lodash "^4.17.21" + minimatch "^9.0.3" + mjml-core "4.15.3" + mjml-migrate "4.15.3" + mjml-parser-xml "4.15.3" + mjml-validator "4.15.3" + yargs "^17.7.2" + +mjml-column@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-column/-/mjml-column-4.15.3.tgz" + integrity sha512-hYdEFdJGHPbZJSEysykrevEbB07yhJGSwfDZEYDSbhQQFjV2tXrEgYcFD5EneMaowjb55e3divSJxU4c5q4Qgw== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-core@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-core/-/mjml-core-4.15.3.tgz" + integrity sha512-Dmwk+2cgSD9L9GmTbEUNd8QxkTZtW9P7FN/ROZW/fGZD6Hq6/4TB0zEspg2Ow9eYjZXO2ofOJ3PaQEEShKV0kQ== + dependencies: + "@babel/runtime" "^7.23.9" + cheerio "1.0.0-rc.12" + detect-node "^2.0.4" + html-minifier "^4.0.0" + js-beautify "^1.6.14" + juice "^10.0.0" + lodash "^4.17.21" + mjml-migrate "4.15.3" + mjml-parser-xml "4.15.3" + mjml-validator "4.15.3" + +mjml-divider@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-divider/-/mjml-divider-4.15.3.tgz" + integrity sha512-vh27LQ9FG/01y0b9ntfqm+GT5AjJnDSDY9hilss2ixIUh0FemvfGRfsGVeV5UBVPBKK7Ffhvfqc7Rciob9Spzw== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-group@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-group/-/mjml-group-4.15.3.tgz" + integrity sha512-HSu/rKnGZVKFq3ciT46vi1EOy+9mkB0HewO4+P6dP/Y0UerWkN6S3UK11Cxsj0cAp0vFwkPDCdOeEzRdpFEkzA== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-head-attributes@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-head-attributes/-/mjml-head-attributes-4.15.3.tgz" + integrity sha512-2ISo0r5ZKwkrvJgDou9xVPxxtXMaETe2AsAA02L89LnbB2KC0N5myNsHV0sEysTw9+CfCmgjAb0GAI5QGpxKkQ== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-head-breakpoint@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-head-breakpoint/-/mjml-head-breakpoint-4.15.3.tgz" + integrity sha512-Eo56FA5C2v6ucmWQL/JBJ2z641pLOom4k0wP6CMZI2utfyiJ+e2Uuinj1KTrgDcEvW4EtU9HrfAqLK9UosLZlg== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-head-font@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-head-font/-/mjml-head-font-4.15.3.tgz" + integrity sha512-CzV2aDPpiNIIgGPHNcBhgyedKY4SX3BJoTwOobSwZVIlEA6TAWB4Z9WwFUmQqZOgo1AkkiTHPZQvGcEhFFXH6g== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-head-html-attributes@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-head-html-attributes/-/mjml-head-html-attributes-4.15.3.tgz" + integrity sha512-MDNDPMBOgXUZYdxhosyrA2kudiGO8aogT0/cODyi2Ed9o/1S7W+je11JUYskQbncqhWKGxNyaP4VWa+6+vUC/g== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-head-preview@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-head-preview/-/mjml-head-preview-4.15.3.tgz" + integrity sha512-J2PxCefUVeFwsAExhrKo4lwxDevc5aKj888HBl/wN4EuWOoOg06iOGCxz4Omd8dqyFsrqvbBuPqRzQ+VycGmaA== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-head-style@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-head-style/-/mjml-head-style-4.15.3.tgz" + integrity sha512-9J+JuH+mKrQU65CaJ4KZegACUgNIlYmWQYx3VOBR/tyz+8kDYX7xBhKJCjQ1I4wj2Tvga3bykd89Oc2kFZ5WOw== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-head-title@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-head-title/-/mjml-head-title-4.15.3.tgz" + integrity sha512-IM59xRtsxID4DubQ0iLmoCGXguEe+9BFG4z6y2xQDrscIa4QY3KlfqgKGT69ojW+AVbXXJPEVqrAi4/eCsLItQ== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-head@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-head/-/mjml-head-4.15.3.tgz" + integrity sha512-o3mRuuP/MB5fZycjD3KH/uXsnaPl7Oo8GtdbJTKtH1+O/3pz8GzGMkscTKa97l03DAG2EhGrzzLcU2A6eshwFw== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-hero@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-hero/-/mjml-hero-4.15.3.tgz" + integrity sha512-9cLAPuc69yiuzNrMZIN58j+HMK1UWPaq2i3/Fg2ZpimfcGFKRcPGCbEVh0v+Pb6/J0+kf8yIO0leH20opu3AyQ== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-image@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-image/-/mjml-image-4.15.3.tgz" + integrity sha512-g1OhSdofIytE9qaOGdTPmRIp7JsCtgO0zbsn1Fk6wQh2gEL55Z40j/VoghslWAWTgT2OHFdBKnMvWtN6U5+d2Q== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-migrate@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-migrate/-/mjml-migrate-4.15.3.tgz" + integrity sha512-sr/+35RdxZroNQVegjpfRHJ5hda9XCgaS4mK2FGO+Mb1IUevKfeEPII3F/cHDpNwFeYH3kAgyqQ22ClhGLWNBA== + dependencies: + "@babel/runtime" "^7.23.9" + js-beautify "^1.6.14" + lodash "^4.17.21" + mjml-core "4.15.3" + mjml-parser-xml "4.15.3" + yargs "^17.7.2" + +mjml-navbar@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-navbar/-/mjml-navbar-4.15.3.tgz" + integrity sha512-VsKH/Jdlf8Yu3y7GpzQV5n7JMdpqvZvTSpF6UQXL0PWOm7k6+LX+sCZimOfpHJ+wCaaybpxokjWZ71mxOoCWoA== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-parser-xml@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-parser-xml/-/mjml-parser-xml-4.15.3.tgz" + integrity sha512-Tz0UX8/JVYICLjT+U8J1f/TFxIYVYjzZHeh4/Oyta0pLpRLeZlxEd71f3u3kdnulCKMP4i37pFRDmyLXAlEuLw== + dependencies: + "@babel/runtime" "^7.23.9" + detect-node "2.1.0" + htmlparser2 "^9.1.0" + lodash "^4.17.15" + +mjml-preset-core@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-preset-core/-/mjml-preset-core-4.15.3.tgz" + integrity sha512-1zZS8P4O0KweWUqNS655+oNnVMPQ1Rq1GaZq5S9JfwT1Vh/m516lSmiTW9oko6gGHytt5s6Yj6oOeu5Zm8FoLw== + dependencies: + "@babel/runtime" "^7.23.9" + mjml-accordion "4.15.3" + mjml-body "4.15.3" + mjml-button "4.15.3" + mjml-carousel "4.15.3" + mjml-column "4.15.3" + mjml-divider "4.15.3" + mjml-group "4.15.3" + mjml-head "4.15.3" + mjml-head-attributes "4.15.3" + mjml-head-breakpoint "4.15.3" + mjml-head-font "4.15.3" + mjml-head-html-attributes "4.15.3" + mjml-head-preview "4.15.3" + mjml-head-style "4.15.3" + mjml-head-title "4.15.3" + mjml-hero "4.15.3" + mjml-image "4.15.3" + mjml-navbar "4.15.3" + mjml-raw "4.15.3" + mjml-section "4.15.3" + mjml-social "4.15.3" + mjml-spacer "4.15.3" + mjml-table "4.15.3" + mjml-text "4.15.3" + mjml-wrapper "4.15.3" + +mjml-raw@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-raw/-/mjml-raw-4.15.3.tgz" + integrity sha512-IGyHheOYyRchBLiAEgw3UM11kFNmBSMupu2BDdejC6ZiDhEAdG+tyERlsCwDPYtXanvFpGWULIu3XlsUPc+RZw== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-section@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-section/-/mjml-section-4.15.3.tgz" + integrity sha512-JfVPRXH++Hd933gmQfG8JXXCBCR6fIzC3DwiYycvanL/aW1cEQ2EnebUfQkt5QzlYjOkJEH+JpccAsq3ln6FZQ== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-social@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-social/-/mjml-social-4.15.3.tgz" + integrity sha512-7sD5FXrESOxpT9Z4Oh36bS6u/geuUrMP1aCg2sjyAwbPcF1aWa2k9OcatQfpRf6pJEhUZ18y6/WBBXmMVmSzXg== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-spacer@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-spacer/-/mjml-spacer-4.15.3.tgz" + integrity sha512-3B7Qj+17EgDdAtZ3NAdMyOwLTX1jfmJuY7gjyhS2HtcZAmppW+cxqHUBwCKfvSRgTQiccmEvtNxaQK+tfyrZqA== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-table@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-table/-/mjml-table-4.15.3.tgz" + integrity sha512-FLx7DcRKTdKdcOCbMyBaeudeHaHpwPveRrBm6WyQe3LXx6FfdmOh59i71/16LFQMgBOD3N4/UJkzxLzlTJzMqQ== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-text@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-text/-/mjml-text-4.15.3.tgz" + integrity sha512-+C0hxCmw9kg0XzT6vhE5mFkK6y225nC8UEQcN94K0fBCjPKkM+HqZMwGX205fzdGRi+Bxa55b/VhrIVwdv+8vw== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + +mjml-validator@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-validator/-/mjml-validator-4.15.3.tgz" + integrity sha512-Xb72KdqRwjv/qM2rJpV22syyP2N3cRQ9VVDrN6u2FSzLq02buFNxmSPJ7CKhat3PrUNdVHU75KZwOf/tz4UEhA== + dependencies: + "@babel/runtime" "^7.23.9" + +mjml-wrapper@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml-wrapper/-/mjml-wrapper-4.15.3.tgz" + integrity sha512-ditsCijeHJrmBmObtJmQ18ddLxv5oPyMTdPU8Di8APOnD2zPk7Z4UAuJSl7HXB45oFiivr3MJf4koFzMUSZ6Gg== + dependencies: + "@babel/runtime" "^7.23.9" + lodash "^4.17.21" + mjml-core "4.15.3" + mjml-section "4.15.3" + +mjml@4.15.3: + version "4.15.3" + resolved "https://registry.npmjs.org/mjml/-/mjml-4.15.3.tgz" + integrity sha512-bW2WpJxm6HS+S3Yu6tq1DUPFoTxU9sPviUSmnL7Ua+oVO3WA5ILFWqvujUlz+oeuM+HCwEyMiP5xvKNPENVjYA== + dependencies: + "@babel/runtime" "^7.23.9" + mjml-cli "4.15.3" + mjml-core "4.15.3" + mjml-migrate "4.15.3" + mjml-preset-core "4.15.3" + mjml-validator "4.15.3" + +mkdirp@^0.5.4: + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +morgan@^1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz" + integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== + dependencies: + basic-auth "~2.0.1" + debug "2.6.9" + depd "~2.0.0" + on-finished "~2.3.0" + on-headers "~1.0.2" + +ms@^2.1.1, ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multer@1.4.4-lts.1: + version "1.4.4-lts.1" + resolved "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz" + integrity sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg== + dependencies: + append-field "^1.0.0" + busboy "^1.0.0" + concat-stream "^1.5.2" + mkdirp "^0.5.4" + object-assign "^4.1.1" + type-is "^1.6.4" + xtend "^4.0.0" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mute-stream@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nestjs-prisma@^0.22.0: + version "0.22.0" + resolved "https://registry.npmjs.org/nestjs-prisma/-/nestjs-prisma-0.22.0.tgz" + integrity sha512-vseCukdWYijWxQBIdtC1XVSwMNZLZMjJen0ostsaRWaQ7yF8ny2Xruu0mA1d/t16uPOMUVUkSZro6JikOEkcuw== + dependencies: + "@angular-devkit/core" "^13.3.0" + "@angular-devkit/schematics" "^13.3.0" + "@schematics/angular" "~13.3.0" + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + +node-abort-controller@^3.0.1: + version "3.1.1" + resolved "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz" + integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== + +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + +node-emoji@1.11.0: + version "1.11.0" + resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + +node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.6.9: + version "2.7.0" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.14: + version "2.0.18" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== + +nodemailer@^6.9.2, nodemailer@>=6.4.6: + version "6.9.14" + resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.14.tgz" + integrity sha512-Dobp/ebDKBvz91sbtRKhcznLThrKxKt97GI2FAlAyy+fk19j73Uz3sBXolVtmcXjaorivqsbbbjDY+Jkt4/bQA== + +nodemailer@6.9.13: + version "6.9.13" + resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.13.tgz" + integrity sha512-7o38Yogx6krdoBf3jCAqnIN4oSQFx+fMa0I7dK1D+me9kBxx12D+/33wSb+fhOCtIxvYJ+4x4IMEhmhCKfAiOA== + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +nopt@^7.2.0: + version "7.2.1" + resolved "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz" + integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== + dependencies: + abbrev "^2.0.0" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +nwsapi@^2.2.0: + version "2.2.12" + resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz" + integrity sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w== + +oauth@0.10.x: + version "0.10.0" + resolved "https://registry.npmjs.org/oauth/-/oauth-0.10.0.tgz" + integrity sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q== + +object-assign@^4, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.1: + version "1.13.2" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz" + integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== + dependencies: + ee-first "1.1.1" + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@7: + version "7.4.2" + resolved "https://registry.npmjs.org/open/-/open-7.4.2.tgz" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +ora@^5.4.1, ora@5.4.1: + version "5.4.1" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + 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" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-event@4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz" + integrity sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ== + dependencies: + p-timeout "^3.1.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + 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== + dependencies: + p-limit "^3.0.2" + +p-timeout@^3.0.0, p-timeout@^3.1.0: + version "3.2.0" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +p-wait-for@3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/p-wait-for/-/p-wait-for-3.2.0.tgz" + integrity sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA== + dependencies: + p-timeout "^3.0.0" + +package-json-from-dist@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz" + integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== + +param-case@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz" + integrity sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w== + dependencies: + no-case "^2.2.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseley@^0.12.0: + version "0.12.1" + resolved "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz" + integrity sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw== + dependencies: + leac "^0.6.0" + peberminta "^0.9.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +passport-google-oauth20@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz" + integrity sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ== + dependencies: + passport-oauth2 "1.x.x" + +passport-headerapikey@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/passport-headerapikey/-/passport-headerapikey-1.2.2.tgz" + integrity sha512-4BvVJRrWsNJPrd3UoZfcnnl4zvUWYKEtfYkoDsaOKBsrWHYmzTApCjs7qUbncOLexE9ul0IRiYBFfBG0y9IVQA== + dependencies: + lodash "^4.17.15" + passport-strategy "^1.0.0" + +passport-jwt@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz" + integrity sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ== + dependencies: + jsonwebtoken "^9.0.0" + passport-strategy "^1.0.0" + +passport-oauth2@1.x.x: + version "1.8.0" + resolved "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.8.0.tgz" + integrity sha512-cjsQbOrXIDE4P8nNb3FQRCCmJJ/utnFKEz2NX209f7KOHPoX18gF7gBzBbLLsj2/je4KrgiwLLGjf0lm9rtTBA== + dependencies: + base64url "3.x.x" + oauth "0.10.x" + passport-strategy "1.x.x" + uid2 "0.0.x" + utils-merge "1.x.x" + +passport-strategy@^1.0.0, passport-strategy@1.x.x: + version "1.0.0" + resolved "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz" + integrity sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA== + +"passport@^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0": + version "0.7.0" + resolved "https://registry.npmjs.org/passport/-/passport-0.7.0.tgz" + integrity sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ== + dependencies: + passport-strategy "1.x.x" + pause "0.0.1" + utils-merge "^1.0.1" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.10.1, path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-to-regexp@3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz" + integrity sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pause@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz" + integrity sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg== + +peberminta@^0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz" + integrity sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ== + +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + +picomatch@^2.0.4: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^2.2.3: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz" + integrity sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg== + +pirates@^4.0.4: + version "4.0.6" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pluralize@8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.3.2, prettier@>=2.0.0: + version "2.8.8" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +pretty-format@^27.0.0, pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +preview-email@3.0.19: + version "3.0.19" + resolved "https://registry.npmjs.org/preview-email/-/preview-email-3.0.19.tgz" + integrity sha512-DBS3Nir18YtKc8loYCCOGitmiaQ0vTdahPoiXxwNweJDpmVZo+w3tppufOhoK0m8skpRxT56llYLs3VrORnmNQ== + dependencies: + ci-info "^3.8.0" + display-notification "2.0.0" + fixpack "^4.0.0" + get-port "5.1.1" + mailparser "^3.6.4" + nodemailer "^6.9.2" + open "7" + p-event "4.2.0" + p-wait-for "3.2.0" + pug "^3.0.2" + uuid "^9.0.0" + +prisma@*, "prisma@^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", prisma@^4.7.0: + version "4.16.2" + resolved "https://registry.npmjs.org/prisma/-/prisma-4.16.2.tgz" + integrity sha512-SYCsBvDf0/7XSJyf2cHTLjLeTLVXYfqp7pG5eEVafFLeT0u/hLFz/9W196nDRGUOo1JfPatAEb+uEnTQImQC1g== + dependencies: + "@prisma/engines" "4.16.2" + +process-nextick-args@~2.0.0: + 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== + +promise@^7.0.1: + version "7.3.1" + resolved "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + +proxy-addr@~2.0.7: + 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== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +pug-attrs@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz" + integrity sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA== + dependencies: + constantinople "^4.0.1" + js-stringify "^1.0.2" + pug-runtime "^3.0.0" + +pug-code-gen@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.3.tgz" + integrity sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw== + dependencies: + constantinople "^4.0.1" + doctypes "^1.1.0" + js-stringify "^1.0.2" + pug-attrs "^3.0.0" + pug-error "^2.1.0" + pug-runtime "^3.0.1" + void-elements "^3.1.0" + with "^7.0.0" + +pug-error@^2.0.0, pug-error@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz" + integrity sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg== + +pug-filters@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz" + integrity sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A== + dependencies: + constantinople "^4.0.1" + jstransformer "1.0.0" + pug-error "^2.0.0" + pug-walk "^2.0.0" + resolve "^1.15.1" + +pug-lexer@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz" + integrity sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w== + dependencies: + character-parser "^2.2.0" + is-expression "^4.0.0" + pug-error "^2.0.0" + +pug-linker@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz" + integrity sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw== + dependencies: + pug-error "^2.0.0" + pug-walk "^2.0.0" + +pug-load@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz" + integrity sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ== + dependencies: + object-assign "^4.1.1" + pug-walk "^2.0.0" + +pug-parser@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz" + integrity sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw== + dependencies: + pug-error "^2.0.0" + token-stream "1.0.0" + +pug-runtime@^3.0.0, pug-runtime@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz" + integrity sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg== + +pug-strip-comments@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz" + integrity sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ== + dependencies: + pug-error "^2.0.0" + +pug-walk@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz" + integrity sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ== + +pug@^3.0.2: + version "3.0.3" + resolved "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz" + integrity sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g== + dependencies: + pug-code-gen "^3.0.3" + pug-filters "^4.0.0" + pug-lexer "^5.0.1" + pug-linker "^4.0.0" + pug-load "^3.0.0" + pug-parser "^6.0.0" + pug-runtime "^3.0.1" + pug-strip-comments "^2.0.0" + +punycode.js@2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz" + integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== + +punycode@^2.1.0, punycode@^2.1.1: + version "2.3.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +qs@^6.11.0, qs@6.11.0: + version "6.11.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@^1.2.8: + version "1.2.8" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +readable-stream@^2.2.2: + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + 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" + +readable-stream@^3.4.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +redis-errors@^1.0.0, redis-errors@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz" + integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== + +redis-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz" + integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== + dependencies: + redis-errors "^1.0.0" + +"reflect-metadata@^0.1.12 || ^0.2.0", reflect-metadata@^0.1.13: + version "0.1.14" + resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz" + integrity sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A== + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + 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== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-cwd@^3.0.0: + 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== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz" + integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== + +resolve@^1.15.1, resolve@^1.20.0: + version "1.22.8" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-applescript@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/run-applescript/-/run-applescript-3.2.0.tgz" + integrity sha512-Ep0RsvAjnRcBX1p5vogbaBdAGu/8j/ewpvGqnQYunnLd9SM0vWcPJewPKNnWFggf0hF0pwIgwV5XK7qQ7UZ8Qg== + dependencies: + execa "^0.10.0" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-async@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz" + integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.1.0, rxjs@^7.2.0, rxjs@^7.5.5, rxjs@^7.8.1, rxjs@7.8.1: + version "7.8.1" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +rxjs@6.6.7: + version "6.6.7" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +schema-utils@^3.1.1, schema-utils@^3.2.0: + version "3.3.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +selderee@^0.11.0: + version "0.11.0" + resolved "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz" + integrity sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA== + dependencies: + parseley "^0.12.0" + +semver@^5.5.0: + version "5.7.2" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.0.0: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^6.3.0: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@7.x: + version "7.6.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +send@0.18.0: + version "0.18.0" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^6.0.1: + version "6.0.2" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +signal-exit@^3.0.0: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slick@^1.12.2: + version "1.12.2" + resolved "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz" + integrity sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A== + +source-map-support@^0.5.20, source-map-support@^0.5.6, source-map-support@~0.5.20: + 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== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3, source-map@^0.7.4, source-map@0.7.4: + version "0.7.4" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@0.7.3: + version "0.7.3" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +standard-as-callback@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz" + integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +string_decoder@^1.1.1, string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +superagent@^8.1.2: + version "8.1.2" + resolved "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz" + integrity sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA== + dependencies: + component-emitter "^1.3.0" + cookiejar "^2.1.4" + debug "^4.3.4" + fast-safe-stringify "^2.1.1" + form-data "^4.0.0" + formidable "^2.1.2" + methods "^1.1.2" + mime "2.6.0" + qs "^6.11.0" + semver "^7.3.8" + +supertest@^6.1.3: + version "6.3.4" + resolved "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz" + integrity sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw== + dependencies: + methods "^1.1.2" + superagent "^8.1.2" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + 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== + +swagger-ui-dist@>=4.11.0, swagger-ui-dist@5.17.14: + version "5.17.14" + resolved "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.17.14.tgz" + integrity sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw== + +swagger-ui-express@^4.4.0: + version "4.6.3" + resolved "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.6.3.tgz" + integrity sha512-CDje4PndhTD2HkgyKH3pab+LKspDeB/NhPN2OF1j+piYIamQqBYwAXWESOT1Yju2xFg51bRW9sUng2WxDjzArw== + dependencies: + swagger-ui-dist ">=4.11.0" + +symbol-observable@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz" + integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tar@^6.1.11: + version "6.2.1" + resolved "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + 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" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser-webpack-plugin@^5.3.10: + version "5.3.10" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.20" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.26.0" + +terser@^5.26.0: + version "5.31.3" + resolved "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz" + integrity sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +throat@^6.0.1: + version "6.0.2" + resolved "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz" + integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tlds@1.252.0: + version "1.252.0" + resolved "https://registry.npmjs.org/tlds/-/tlds-1.252.0.tgz" + integrity sha512-GA16+8HXvqtfEnw/DTcwB0UU354QE1n3+wh08oFjr6Znl7ZLAeUgYzCcK+/CCrOyE0vnHR8/pu3XXG3vDijXpQ== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + 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== + +to-regex-range@^5.0.1: + 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== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +token-stream@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz" + integrity sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg== + +tough-cookie@^4.0.0: + version "4.1.4" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tree-kill@1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +ts-jest@^27.0.3: + version "27.1.5" + resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz" + integrity sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^27.0.0" + json5 "2.x" + lodash.memoize "4.x" + make-error "1.x" + semver "7.x" + yargs-parser "20.x" + +ts-loader@^9.2.3: + version "9.5.1" + resolved "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz" + integrity sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^5.0.0" + micromatch "^4.0.0" + semver "^7.3.4" + source-map "^0.7.4" + +ts-node@^10.0.0, ts-node@>=9.0.0: + version "10.9.2" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + 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" + +tsconfig-paths-webpack-plugin@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.1.0.tgz" + integrity sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^5.7.0" + tsconfig-paths "^4.1.2" + +tsconfig-paths@^3.10.1: + version "3.15.0" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tsconfig-paths@^4.1.2: + version "4.2.0" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tsconfig-paths@4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0, tslib@2.6.3: + version "2.6.3" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + 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== + +type-is@^1.6.4, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typescript@*, "typescript@^3.4.5 || ^4.3.5", typescript@^4.3.5, typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.8 <5.0", typescript@>=4.9.5, typescript@>3.6.0: + version "4.9.5" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +typescript@>=4.8.2, typescript@5.3.3: + version "5.3.3" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + +uc.micro@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz" + integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== + +uglify-js@^3.1.4, uglify-js@^3.5.1: + version "3.19.0" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.0.tgz" + integrity sha512-wNKHUY2hYYkf6oSFfhwwiHo4WCHzHmzcXsqXYTN9ja3iApYIFbb2U6ics9hBcYLHcYGQoAlwnZlTrf3oF+BL/Q== + +uid@2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz" + integrity sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g== + dependencies: + "@lukeed/csprng" "^1.0.0" + +uid2@0.0.x: + version "0.0.4" + resolved "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz" + integrity sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA== + +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unpipe@~1.0.0, unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz" + integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== + dependencies: + escalade "^3.1.2" + picocolors "^1.0.1" + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz" + integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utils-merge@^1.0.1, utils-merge@1.0.1, utils-merge@1.x.x: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz" + integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== + +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +v8-compile-cache-lib@^3.0.1: + 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== + +v8-to-istanbul@^8.1.0: + version "8.1.1" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz" + integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +valid-data-url@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz" + integrity sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA== + +validator@^13.9.0: + version "13.12.0" + resolved "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz" + integrity sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +void-elements@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz" + integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7: + version "1.0.8" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +watchpack@^2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz" + integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +web-resource-inliner@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-6.0.1.tgz" + integrity sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A== + dependencies: + ansi-colors "^4.1.1" + escape-goat "^3.0.0" + htmlparser2 "^5.0.0" + mime "^2.4.6" + node-fetch "^2.6.0" + valid-data-url "^3.0.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +webpack-node-externals@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz" + integrity sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ== + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.0.0, webpack@^5.1.0, webpack@^5.11.0: + version "5.93.0" + resolved "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz" + integrity sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.5" + "@webassemblyjs/ast" "^1.12.1" + "@webassemblyjs/wasm-edit" "^1.12.1" + "@webassemblyjs/wasm-parser" "^1.12.1" + acorn "^8.7.1" + acorn-import-attributes "^1.9.5" + browserslist "^4.21.10" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.17.0" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.11" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.2.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.10" + watchpack "^2.4.1" + webpack-sources "^3.2.3" + +webpack@5.92.1: + version "5.92.1" + resolved "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz" + integrity sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.5" + "@webassemblyjs/ast" "^1.12.1" + "@webassemblyjs/wasm-edit" "^1.12.1" + "@webassemblyjs/wasm-parser" "^1.12.1" + acorn "^8.7.1" + acorn-import-attributes "^1.9.5" + browserslist "^4.21.10" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.17.0" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.11" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.2.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.10" + watchpack "^2.4.1" + webpack-sources "^3.2.3" + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.2: + version "1.1.5" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +with@^7.0.0: + version "7.0.2" + resolved "https://registry.npmjs.org/with/-/with-7.0.2.tgz" + integrity sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w== + dependencies: + "@babel/parser" "^7.9.6" + "@babel/types" "^7.9.6" + assert-never "^1.2.1" + babel-walk "3.0.0-canary-5" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.4.6: + version "7.5.10" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1, yargs-parser@21.1.1: + version "21.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs-parser@20.x: + version "20.2.9" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js new file mode 100644 index 0000000..016ac49 --- /dev/null +++ b/frontend/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + extends: [ + '@quasar/app-vite/eslint-config/index.js' + ] +} diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..a59e8e8 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,27 @@ +# Foxai (foxai-quasar) + +## Node 16.14 + +## Install the dependencies + +```bash +yarn +# or +npm install +``` + +### Start the app in development mode (hot-code reloading, error reporting, etc.) + +```bash +yarn run dev +``` + +### Compiles and minifies for production + +``` +yarn run build +``` + +### Customize the configuration + +See [Configuring quasar.config.js](https://v2.quasar.dev/quasar-cli-vite/quasar-config-js). diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..d0367bc --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,42 @@ + + + + + + <%= productName %> + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..a337f1d --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,8718 @@ +{ + "name": "foxai-quasar", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "foxai-quasar", + "version": "0.0.1", + "dependencies": { + "@codekraft-studio/vue-record": "^0.0.3", + "@geoapify/geocoder-autocomplete": "^2.1.0", + "@indoorequal/vue-maplibre-gl": "^7.6.0", + "@quasar/extras": "^1.16.4", + "@vueuse/core": "^10.7.0", + "axios": "^1.2.1", + "dayjs": "^1.11.10", + "jwt-decode": "^4.0.0", + "maplibre-gl": "^4.7.1", + "quasar": "^2.6.0", + "vue": "^3.0.0", + "vue-google-maps": "^0.1.21", + "vue-i18n": "^9.2.2", + "vue-router": "^4.0.0", + "vue3-google-oauth2": "^1.0.7", + "vuex": "^4.0.1" + }, + "devDependencies": { + "@intlify/vite-plugin-vue-i18n": "^3.3.1", + "@quasar/app-vite": "^1.3.0", + "@typescript-eslint/eslint-plugin": "^5.10.0", + "@typescript-eslint/parser": "^5.10.0", + "autoprefixer": "^10.4.2", + "dotenv": "^16.3.1", + "electron": "^27.0.3", + "electron-builder": "^24.3.0", + "electron-packager": "^17.1.1", + "eslint": "^8.10.0", + "eslint-config-prettier": "^8.1.0", + "eslint-plugin-vue": "^9.0.0", + "prettier": "^2.5.1", + "typescript": "^4.5.4" + }, + "engines": { + "node": "^18 || ^16 || ^14.19", + "npm": ">= 6.13.4", + "yarn": ">= 1.21.1" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@codekraft-studio/vue-record": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@codekraft-studio/vue-record/-/vue-record-0.0.3.tgz", + "integrity": "sha512-lythfIuNb9JD9aEoLkJ5YoDSKJcLEJY9JXYP28xT3ePAbf1hfo/Z5ZuJOWORp4WWtO3FifNlVMzrePrVG84XhA==", + "dependencies": { + "startaudiocontext": "^1.2.1", + "tone": "^13.8.25", + "vue": "^2.0" + } + }, + "node_modules/@codekraft-studio/vue-record/node_modules/@vue/compiler-sfc": { + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", + "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", + "dependencies": { + "@babel/parser": "^7.18.4", + "postcss": "^8.4.14", + "source-map": "^0.6.1" + } + }, + "node_modules/@codekraft-studio/vue-record/node_modules/vue": { + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz", + "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", + "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.", + "dependencies": { + "@vue/compiler-sfc": "2.7.14", + "csstype": "^3.1.0" + } + }, + "node_modules/@develar/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", + "dev": true, + "dependencies": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@electron/asar": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.2.8.tgz", + "integrity": "sha512-cmskk5M06ewHMZAplSiF4AlME3IrnnZhKnWbtwKVLRkdJkKyUVjMLhDIiPIx/+6zQWVlKX/LtmK9xDme7540Sg==", + "dev": true, + "dependencies": { + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@electron/asar/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/@electron/asar/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/@electron/get": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/@electron/get/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/@electron/get/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/@electron/get/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/@electron/get/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/@electron/notarize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.1.0.tgz", + "integrity": "sha512-Q02xem1D0sg4v437xHgmBLxI2iz/fc0D4K7fiVWHa/AnW8o7D751xyKNXgziA6HrTOme9ul1JfWN5ark8WH1xA==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.1", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/notarize/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/osx-sign": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.0.5.tgz", + "integrity": "sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==", + "dev": true, + "dependencies": { + "compare-version": "^0.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "isbinaryfile": "^4.0.8", + "minimist": "^1.2.6", + "plist": "^3.0.5" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@electron/osx-sign/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/@electron/osx-sign/node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/@electron/universal": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.4.1.tgz", + "integrity": "sha512-lE/U3UNw1YHuowNbTmKNs9UlS3En3cPgwM5MI+agIgr/B1hSze9NdOP0qn7boZaI9Lph8IDv3/24g9IxnJP7aQ==", + "dev": true, + "dependencies": { + "@electron/asar": "^3.2.1", + "@malept/cross-spawn-promise": "^1.1.0", + "debug": "^4.3.1", + "dir-compare": "^3.0.0", + "fs-extra": "^9.0.1", + "minimatch": "^3.0.4", + "plist": "^3.0.4" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@electron/universal/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/@electron/universal/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/universal/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/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/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/@eslint/eslintrc/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/@eslint/js": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", + "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@geoapify/geocoder-autocomplete": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@geoapify/geocoder-autocomplete/-/geocoder-autocomplete-2.1.0.tgz", + "integrity": "sha512-E1uX3haIp9OD13sScEr+UqT5GRTv0K2ldZzsb44sHaXrk9B5C6GVxsuH0QYdt8hjNNXfUdAXUp3YJomS9O0RAQ==" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/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/@humanwhocodes/config-array/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/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true + }, + "node_modules/@indoorequal/vue-maplibre-gl": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@indoorequal/vue-maplibre-gl/-/vue-maplibre-gl-7.6.0.tgz", + "integrity": "sha512-iF4NpuDBJGVF+yJVeQOA39WJNSGGBRDGpX3lCIpso1VSIam3B4qg8eXFwgR6cr2wfu5D6bg9I7aJ0A+QxYrsqg==", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "maplibre-gl": "^4.0.0", + "vue": "^3.4.18" + } + }, + "node_modules/@intlify/bundle-utils": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-2.2.2.tgz", + "integrity": "sha512-vngkvlIVV8ZJoyC5VqMvqJd2nvsx+qMN7pQjPiPjOrVndeiR7Dlue0k86Q8FsFUzyksW3HJZZi833ldxwbFzTA==", + "dev": true, + "dependencies": { + "@intlify/message-compiler": "^9.1.0", + "@intlify/shared": "^9.1.0", + "jsonc-eslint-parser": "^1.0.1", + "source-map": "^0.6.1", + "yaml-eslint-parser": "^0.3.2" + }, + "engines": { + "node": ">= 12" + }, + "peerDependenciesMeta": { + "petite-vue-i18n": { + "optional": true + }, + "vue-i18n": { + "optional": true + } + } + }, + "node_modules/@intlify/core-base": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.5.0.tgz", + "integrity": "sha512-y3ufM1RJbI/DSmJf3lYs9ACq3S/iRvaSsE3rPIk0MGH7fp+JxU6rdryv/EYcwfcr3Y1aHFlCBir6S391hRZ57w==", + "dependencies": { + "@intlify/message-compiler": "9.5.0", + "@intlify/shared": "9.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.5.0.tgz", + "integrity": "sha512-CAhVNfEZcOVFg0/5MNyt+OFjvs4J/ARjCj2b+54/FvFP0EDJI5lIqMTSDBE7k0atMROSP0SvWCkwu/AZ5xkK1g==", + "dependencies": { + "@intlify/shared": "9.5.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.5.0.tgz", + "integrity": "sha512-tAxV14LMXZDZbu32XzLMTsowNlgJNmLwWHYzvMUl6L8gvQeoYiZONjY7AUsqZW8TOZDX9lfvF6adPkk9FSRdDA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/vite-plugin-vue-i18n": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@intlify/vite-plugin-vue-i18n/-/vite-plugin-vue-i18n-3.4.0.tgz", + "integrity": "sha512-XXcZBgwJ+3FRu11c4ARoY9N00kElPii0/jNZ49qR045Ka7/YGCwb1Ku14BBlMSEHiHDSjLQknLwrJKSQGVZLyA==", + "dev": true, + "dependencies": { + "@intlify/bundle-utils": "^2.2.2", + "@intlify/shared": "^9.1.0", + "@rollup/pluginutils": "^4.1.0", + "debug": "^4.3.1", + "fast-glob": "^3.2.5", + "source-map": "0.6.1" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "petite-vue-i18n": "^9.1.0", + "vite": "^2.0.0", + "vue-i18n": "^9.1.0" + }, + "peerDependenciesMeta": { + "petite-vue-i18n": { + "optional": true + }, + "vue-i18n": { + "optional": true + } + } + }, + "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==" + }, + "node_modules/@malept/cross-spawn-promise": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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/geojson-rewind/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/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": "20.3.1", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.3.1.tgz", + "integrity": "sha512-5ueL4UDitzVtceQ8J4kY+Px3WK+eZTsmGwha3MBKHKqiHvKrjWWwBCIl1K8BuJSc5OFh83uI8IFNoFvQxX2uUw==", + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/unitbezier": "^0.0.1", + "json-stringify-pretty-compact": "^4.0.0", + "minimist": "^1.2.8", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "sort-object": "^3.0.3", + "tinyqueue": "^3.0.0" + }, + "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/@maplibre/maplibre-gl-style-spec/node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, + "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/@quasar/app-vite": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@quasar/app-vite/-/app-vite-1.6.2.tgz", + "integrity": "sha512-keyJ28cqVtzNLDibQESo1c/DD++6+wqf8nQO6oMRqH6WgYcPs+YO1buRsRMXF9w3ghMCV0/9/Lj8Kyb7S55j6A==", + "dev": true, + "dependencies": { + "@quasar/render-ssr-error": "^1.0.1", + "@quasar/vite-plugin": "^1.3.3", + "@rollup/pluginutils": "^4.1.2", + "@types/chrome": "^0.0.208", + "@types/compression": "^1.7.2", + "@types/cordova": "0.0.34", + "@types/express": "^4.17.13", + "@vitejs/plugin-vue": "^2.2.0", + "archiver": "^5.3.0", + "chokidar": "^3.5.3", + "ci-info": "^3.7.1", + "compression": "^1.7.4", + "cross-spawn": "^7.0.3", + "dot-prop": "6.0.1", + "elementtree": "0.1.7", + "esbuild": "0.14.51", + "express": "^4.17.3", + "fast-glob": "3.2.12", + "fs-extra": "^11.1.0", + "html-minifier": "^4.0.0", + "inquirer": "^8.2.1", + "isbinaryfile": "^5.0.0", + "kolorist": "^1.5.1", + "lodash": "^4.17.21", + "minimist": "^1.2.6", + "open": "^8.4.0", + "register-service-worker": "^1.7.2", + "rollup-plugin-visualizer": "^5.5.4", + "sass": "1.32.12", + "semver": "^7.3.5", + "serialize-javascript": "^6.0.0", + "table": "^6.8.0", + "vite": "^2.9.13", + "webpack-merge": "^5.8.0" + }, + "bin": { + "quasar": "bin/quasar" + }, + "engines": { + "node": "^24 || ^22 || ^20 || ^18 || ^16 || ^14.19", + "npm": ">= 6.14.12", + "yarn": ">= 1.17.3" + }, + "funding": { + "type": "github", + "url": "https://donate.quasar.dev" + }, + "peerDependencies": { + "electron-builder": ">= 22", + "electron-packager": ">= 15", + "eslint": "^8.11.0", + "pinia": "^2.0.0", + "quasar": "^2.8.0", + "vue": "^3.2.29", + "vue-router": "^4.0.12", + "vuex": "^4.0.0", + "workbox-build": ">= 6" + }, + "peerDependenciesMeta": { + "electron-builder": { + "optional": true + }, + "electron-packager": { + "optional": true + }, + "eslint": { + "optional": true + }, + "pinia": { + "optional": true + }, + "vuex": { + "optional": true + }, + "workbox-build": { + "optional": true + } + } + }, + "node_modules/@quasar/app-vite/node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "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/@quasar/extras": { + "version": "1.16.7", + "resolved": "https://registry.npmjs.org/@quasar/extras/-/extras-1.16.7.tgz", + "integrity": "sha512-nYF3gVE/si1YJ/D4qmAiHGwxoJIDCvTT8NI6ZmbTMPrur4J8xBKhfhfhyLoQ4k2jJZP6Rx0rUcB71FBNC2C8vQ==", + "funding": { + "type": "github", + "url": "https://donate.quasar.dev" + } + }, + "node_modules/@quasar/render-ssr-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@quasar/render-ssr-error/-/render-ssr-error-1.0.2.tgz", + "integrity": "sha512-Y0wyqYHVxc1IOBH6pRiKMSWDqO1mwQu11Zo8rw4cBdclPOQqFb7f65UuRbk5LfbqlXV2hYvklNcy0SBAOiAQnw==", + "dev": true, + "dependencies": { + "stack-trace": "^1.0.0-pre2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "github", + "url": "https://donate.quasar.dev" + } + }, + "node_modules/@quasar/vite-plugin": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@quasar/vite-plugin/-/vite-plugin-1.5.0.tgz", + "integrity": "sha512-Kd4nFeWd0eAr7e+HMY8Wtmo86RjPZhCi6/bybTAyliFmS8AhZ2/oRTOGnBD9R1C6Ub3JPzC4eWFA20IlHa5A3w==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://donate.quasar.dev" + }, + "peerDependencies": { + "@vitejs/plugin-vue": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-beta.0", + "quasar": "^2.8.0", + "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-beta.0", + "vue": "^3.0.0" + } + }, + "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/@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": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.3.tgz", + "integrity": "sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "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/chrome": { + "version": "0.0.208", + "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.208.tgz", + "integrity": "sha512-VDU/JnXkF5qaI7WBz14Azpa2VseZTgML0ia/g/B1sr9OfdOnHiH/zZ7P7qCDqxSlkqJh76/bPc8jLFcx8rHJmw==", + "dev": true, + "dependencies": { + "@types/filesystem": "*", + "@types/har-format": "*" + } + }, + "node_modules/@types/compression": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.7.3.tgz", + "integrity": "sha512-rKquEGjebqizyHNMOpaE/4FdYR5VQiWFeesqYfvJU0seSEyB4625UGhNOO/qIkH10S3wftiV7oefc8WdLZ/gCQ==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.36", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha512-rkiiTuf/z2wTd4RxFOb+clE7PF4AEJU0hsczbUdkHHBtkUmpWQpEddynNfJYKYtZFJKbq4F+brfekt1kx85IZA==", + "dev": true + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.18", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz", + "integrity": "sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==", + "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.37", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz", + "integrity": "sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/filesystem": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.33.tgz", + "integrity": "sha512-2KedRPzwu2K528vFkoXnnWdsG0MtUwPjuA7pRy4vKxlxHEe8qUDZibYHXJKZZr2Cl/ELdCWYqyb/MKwsUuzBWw==", + "dev": true, + "dependencies": { + "@types/filewriter": "*" + } + }, + "node_modules/@types/filewriter": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.30.tgz", + "integrity": "sha512-lB98tui0uxc7erbj0serZfJlHKLNJHwBltPnbmO1WRpL5T325GOHRiQfr2E29V2q+S1brDO63Fpdt6vb3bES9Q==", + "dev": true + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/geojson": { + "version": "7946.0.14", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", + "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==" + }, + "node_modules/@types/geojson-vt": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/geojson-vt/-/geojson-vt-3.2.5.tgz", + "integrity": "sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/har-format": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.13.tgz", + "integrity": "sha512-PwBsCBD3lDODn4xpje3Y1di0aDJp4Ww7aSfMRVw6ysnxD4I7Wmq2mBkSKaDtN403hqH5sp6c9xQUvFYY3+lkBg==", + "dev": true + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true + }, + "node_modules/@types/http-errors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz", + "integrity": "sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", + "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/mapbox__point-geometry": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", + "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==" + }, + "node_modules/@types/mapbox__vector-tile": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz", + "integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==", + "dependencies": { + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.3.tgz", + "integrity": "sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.8.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.3.tgz", + "integrity": "sha512-jxiZQFpb+NlH5kjW49vXxvxTjeeqlbsnTAdBTKpzEdPs9itay7MscYXz3Fo9VYFEsfQ6LJFitHad3faerLAjCw==", + "dev": true + }, + "node_modules/@types/pbf": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", + "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==" + }, + "node_modules/@types/plist": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } + }, + "node_modules/@types/qs": { + "version": "6.9.8", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", + "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.5.tgz", + "integrity": "sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==", + "dev": true + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.2.tgz", + "integrity": "sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.3.tgz", + "integrity": "sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/supercluster": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz", + "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/verror": { + "version": "1.10.10", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.10.tgz", + "integrity": "sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg==", + "dev": true, + "optional": true + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz", + "integrity": "sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==", + "dev": true, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "vite": "^2.5.10", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", + "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", + "dependencies": { + "@babel/parser": "^7.21.3", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", + "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", + "dependencies": { + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", + "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", + "dependencies": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-ssr": "3.3.4", + "@vue/reactivity-transform": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0", + "postcss": "^8.1.10", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", + "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", + "dependencies": { + "@vue/compiler-dom": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz", + "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==" + }, + "node_modules/@vue/reactivity": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", + "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", + "dependencies": { + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", + "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", + "dependencies": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", + "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", + "dependencies": { + "@vue/reactivity": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", + "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", + "dependencies": { + "@vue/runtime-core": "3.3.4", + "@vue/shared": "3.3.4", + "csstype": "^3.1.1" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", + "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", + "dependencies": { + "@vue/compiler-ssr": "3.3.4", + "@vue/shared": "3.3.4" + }, + "peerDependencies": { + "vue": "3.3.4" + } + }, + "node_modules/@vue/shared": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", + "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==" + }, + "node_modules/@vueuse/core": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.7.0.tgz", + "integrity": "sha512-4EUDESCHtwu44ZWK3Gc/hZUVhVo/ysvdtwocB5vcauSV4B7NiGY5972WnsojB3vRNdxvAt7kzJWE2h9h7C9d5w==", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.7.0", + "@vueuse/shared": "10.7.0", + "vue-demi": ">=0.14.6" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.7.0.tgz", + "integrity": "sha512-GlaH7tKP2iBCZ3bHNZ6b0cl9g0CJK8lttkBNUX156gWvNYhTKEtbweWLm9rxCPIiwzYcr/5xML6T8ZUEt+DkvA==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.7.0.tgz", + "integrity": "sha512-kc00uV6CiaTdc3i1CDC4a3lBxzaBE9AgYNtFN87B5OOscqeWElj/uza8qVDmk7/U8JbqoONLbtqiLJ5LGRuqlw==", + "dependencies": { + "vue-demi": ">=0.14.6" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/7zip-bin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", + "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", + "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/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/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": 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/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "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-escapes/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/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/app-builder-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", + "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", + "dev": true + }, + "node_modules/app-builder-lib": { + "version": "24.9.1", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.9.1.tgz", + "integrity": "sha512-Q1nYxZcio4r+W72cnIRVYofEAyjBd3mG47o+zms8HlD51zWtA/YxJb01Jei5F+jkWhge/PTQK+uldsPh6d0/4g==", + "dev": true, + "dependencies": { + "@develar/schema-utils": "~2.6.5", + "@electron/notarize": "2.1.0", + "@electron/osx-sign": "1.0.5", + "@electron/universal": "1.4.1", + "@malept/flatpak-bundler": "^0.4.0", + "@types/fs-extra": "9.0.13", + "7zip-bin": "~5.2.0", + "async-exit-hook": "^2.0.1", + "bluebird-lst": "^1.0.9", + "builder-util": "24.8.1", + "builder-util-runtime": "9.2.3", + "chromium-pickle-js": "^0.2.0", + "debug": "^4.3.4", + "ejs": "^3.1.8", + "electron-publish": "24.8.1", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "is-ci": "^3.0.0", + "isbinaryfile": "^5.0.0", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "minimatch": "^5.1.1", + "read-config-file": "6.3.2", + "sanitize-filename": "^1.6.3", + "semver": "^7.3.8", + "tar": "^6.1.12", + "temp-file": "^3.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/app-builder-lib/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/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/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/archiver-utils/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/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/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": "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/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.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/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/author-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz", + "integrity": "sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", + "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "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/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/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/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bluebird-lst": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", + "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/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/body-parser/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/body-parser/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/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "optional": true + }, + "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/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/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "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.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "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-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "dev": true, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/builder-util": { + "version": "24.8.1", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-24.8.1.tgz", + "integrity": "sha512-ibmQ4BnnqCnJTNrdmdNlnhF48kfqhNzSeqFMXHLIl+o9/yhn6QfOaVrloZ9YUu3m0k3rexvlT5wcki6LWpjTZw==", + "dev": true, + "dependencies": { + "@types/debug": "^4.1.6", + "7zip-bin": "~5.2.0", + "app-builder-bin": "4.0.0", + "bluebird-lst": "^1.0.9", + "builder-util-runtime": "9.2.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-ci": "^3.0.0", + "js-yaml": "^4.1.0", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.3.tgz", + "integrity": "sha512-FGhkqXdFFZ5dNC4C+yuQB9ak311rpGAw+/ASz8ZdxwODCv1GGMWgLDeofRkdi0F3VCHQEWy/aXcJQozx2nOPiw==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/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/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/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/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001546", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz", + "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==", + "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/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/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "optional": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "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/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/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/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-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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/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/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "dev": true, + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/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/compression/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/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/config-file-ts": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.4.tgz", + "integrity": "sha512-cKSW0BfrSaAUnxpgvpXPLaaW/umg4bqg4k3GO1JqlRfpx+d5W0GDXznCMkWotJQek5Mmz1MJVChQnz3IVaeMZQ==", + "dev": true, + "dependencies": { + "glob": "^7.1.6", + "typescript": "^4.0.2" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/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/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/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "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-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "optional": true, + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "dev": true, + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "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/cross-spawn-windows-exe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cross-spawn-windows-exe/-/cross-spawn-windows-exe-1.2.0.tgz", + "integrity": "sha512-mkLtJJcYbDCxEG7Js6eUnUNndWjyUZwJ3H7bErmmtOYU/Zb99DyUkpamuIZE0b3bhmJyZ7D90uS6f+CGxRRjOw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-cross-spawn-windows-exe?utm_medium=referral&utm_source=npm_fund" + } + ], + "dependencies": { + "@malept/cross-spawn-promise": "^1.1.0", + "is-wsl": "^2.2.0", + "which": "^2.0.2" + }, + "engines": { + "node": ">= 10" + } + }, + "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==" + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "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/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/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/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "optional": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "optional": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "optional": true + }, + "node_modules/dir-compare": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-3.3.0.tgz", + "integrity": "sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==", + "dev": true, + "dependencies": { + "buffer-equal": "^1.0.0", + "minimatch": "^3.0.4" + } + }, + "node_modules/dir-compare/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/dir-compare/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/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/dmg-builder": { + "version": "24.9.1", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.9.1.tgz", + "integrity": "sha512-huC+O6hvHd24Ubj3cy2GMiGLe2xGFKN3klqVMLAdcbB6SWMd1yPSdZvV8W1O01ICzCCRlZDHiv4VrNUgnPUfbQ==", + "dev": true, + "dependencies": { + "app-builder-lib": "24.9.1", + "builder-util": "24.8.1", + "builder-util-runtime": "9.2.3", + "fs-extra": "^10.1.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" + }, + "optionalDependencies": { + "dmg-license": "^1.0.11" + } + }, + "node_modules/dmg-builder/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/dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, + "bin": { + "dmg-license": "bin/dmg-license.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/earcut": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.0.tgz", + "integrity": "sha512-41Fs7Q/PLq1SDbqjsgcY7GA42T0jvaCNGXgGtsNdvg+Yv8eIu06bxv4/PoREkZ9nMDNwnUSG9OFB9+yv8eKhDg==" + }, + "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/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron": { + "version": "27.1.2", + "resolved": "https://registry.npmjs.org/electron/-/electron-27.1.2.tgz", + "integrity": "sha512-Dy6BUuGLiIJv+zfsXwr78TV2TNppi24rXF4PIIS+OjDblEKdkI9r1iM8JUd3/x3sbGUy5mdLMSPhvmu//IhkgA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@electron/get": "^2.0.0", + "@types/node": "^18.11.18", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 12.20.55" + } + }, + "node_modules/electron-builder": { + "version": "24.9.1", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.9.1.tgz", + "integrity": "sha512-v7BuakDuY6sKMUYM8mfQGrwyjBpZ/ObaqnenU0H+igEL10nc6ht049rsCw2HghRBdEwJxGIBuzs3jbEhNaMDmg==", + "dev": true, + "dependencies": { + "app-builder-lib": "24.9.1", + "builder-util": "24.8.1", + "builder-util-runtime": "9.2.3", + "chalk": "^4.1.2", + "dmg-builder": "24.9.1", + "fs-extra": "^10.1.0", + "is-ci": "^3.0.0", + "lazy-val": "^1.0.5", + "read-config-file": "6.3.2", + "simple-update-notifier": "2.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/electron-builder/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/electron-packager": { + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-17.1.2.tgz", + "integrity": "sha512-XofXdikjYI7MVBcnXeoOvRR+yFFFHOLs3J7PF5KYQweigtgLshcH4W660PsvHr4lYZ03JBpLyEcUB8DzHZ+BNw==", + "deprecated": "Please use @electron/packager moving forward. There is no API change, just a package name change", + "dev": true, + "dependencies": { + "@electron/asar": "^3.2.1", + "@electron/get": "^2.0.0", + "@electron/notarize": "^1.2.3", + "@electron/osx-sign": "^1.0.5", + "@electron/universal": "^1.3.2", + "cross-spawn-windows-exe": "^1.2.0", + "debug": "^4.0.1", + "extract-zip": "^2.0.0", + "filenamify": "^4.1.0", + "fs-extra": "^11.1.0", + "galactus": "^1.0.0", + "get-package-info": "^1.0.0", + "junk": "^3.1.0", + "parse-author": "^2.0.0", + "plist": "^3.0.0", + "rcedit": "^3.0.1", + "resolve": "^1.1.6", + "semver": "^7.1.3", + "yargs-parser": "^21.1.1" + }, + "bin": { + "electron-packager": "bin/electron-packager.js" + }, + "engines": { + "node": ">= 14.17.5" + }, + "funding": { + "url": "https://github.com/electron/electron-packager?sponsor=1" + } + }, + "node_modules/electron-packager/node_modules/@electron/notarize": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-1.2.4.tgz", + "integrity": "sha512-W5GQhJEosFNafewnS28d3bpQ37/s91CDWqxVchHfmv2dQSTWpOzNlUVQwYzC1ay5bChRV/A9BTL68yj0Pa+TSg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-packager/node_modules/@electron/notarize/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/electron-publish": { + "version": "24.8.1", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-24.8.1.tgz", + "integrity": "sha512-IFNXkdxMVzUdweoLJNXSupXkqnvgbrn3J4vognuOY06LaS/m0xvfFYIf+o1CM8if6DuWYWoQFKPcWZt/FUjZPw==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^9.0.11", + "builder-util": "24.8.1", + "builder-util-runtime": "9.2.3", + "chalk": "^4.1.2", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + } + }, + "node_modules/electron-publish/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/electron-to-chromium": { + "version": "1.4.544", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.544.tgz", + "integrity": "sha512-54z7squS1FyFRSUqq/knOFSptjjogLZXbKcYk3B0qkE1KZzvqASwRZnY2KzZQJqIYLVD38XZeoiMRflYSwyO4w==", + "dev": true + }, + "node_modules/electron/node_modules/@types/node": { + "version": "18.18.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.13.tgz", + "integrity": "sha512-vXYZGRrSCreZmq1rEjMRLXJhiy8MrIeVasx+PCVlP414N7CJLHnMf+juVvjdprHyH+XRy3zKZLHeNueOpJCn0g==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/elementtree": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", + "integrity": "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==", + "dev": true, + "dependencies": { + "sax": "1.1.4" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/elementtree/node_modules/sax": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", + "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==", + "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/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/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "optional": true + }, + "node_modules/esbuild": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.51.tgz", + "integrity": "sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "esbuild-android-64": "0.14.51", + "esbuild-android-arm64": "0.14.51", + "esbuild-darwin-64": "0.14.51", + "esbuild-darwin-arm64": "0.14.51", + "esbuild-freebsd-64": "0.14.51", + "esbuild-freebsd-arm64": "0.14.51", + "esbuild-linux-32": "0.14.51", + "esbuild-linux-64": "0.14.51", + "esbuild-linux-arm": "0.14.51", + "esbuild-linux-arm64": "0.14.51", + "esbuild-linux-mips64le": "0.14.51", + "esbuild-linux-ppc64le": "0.14.51", + "esbuild-linux-riscv64": "0.14.51", + "esbuild-linux-s390x": "0.14.51", + "esbuild-netbsd-64": "0.14.51", + "esbuild-openbsd-64": "0.14.51", + "esbuild-sunos-64": "0.14.51", + "esbuild-windows-32": "0.14.51", + "esbuild-windows-64": "0.14.51", + "esbuild-windows-arm64": "0.14.51" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz", + "integrity": "sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz", + "integrity": "sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz", + "integrity": "sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz", + "integrity": "sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz", + "integrity": "sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz", + "integrity": "sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz", + "integrity": "sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz", + "integrity": "sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz", + "integrity": "sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz", + "integrity": "sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz", + "integrity": "sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz", + "integrity": "sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz", + "integrity": "sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz", + "integrity": "sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz", + "integrity": "sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz", + "integrity": "sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz", + "integrity": "sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz", + "integrity": "sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz", + "integrity": "sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz", + "integrity": "sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g==", + "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": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", + "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.51.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz", + "integrity": "sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.13", + "semver": "^7.5.4", + "vue-eslint-parser": "^9.3.1", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/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/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/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/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "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-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==" + }, + "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/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/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/express/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/express/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/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/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/external-editor/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/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "optional": true + }, + "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", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": 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/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "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/figures/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/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", + "dev": true, + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/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/finalhandler/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/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/flat-cache": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/flora-colossus": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flora-colossus/-/flora-colossus-2.0.0.tgz", + "integrity": "sha512-dz4HxH6pOvbUzZpZ/yXhafjbR2I8cenK5xL0KtBFb7U2ADsR+OwXifnxZjij/pZWF775uSCMzWVd+jDik2H2IA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "fs-extra": "^10.1.0" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/flora-colossus/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/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "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/fraction.js": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz", + "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "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": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "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-minipass/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/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.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/galactus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/galactus/-/galactus-1.0.0.tgz", + "integrity": "sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "flora-colossus": "^2.0.0", + "fs-extra": "^10.1.0" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/galactus/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/geojson-vt": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-4.0.2.tgz", + "integrity": "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-info": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-package-info/-/get-package-info-1.0.0.tgz", + "integrity": "sha512-SCbprXGAPdIhKAXiG+Mk6yeoFH61JlYunqdFQFHDtLjJlDjFf6x07dsS8acO+xWt52jpdVo49AlVDnUVK1sDNw==", + "dev": true, + "dependencies": { + "bluebird": "^3.1.1", + "debug": "^2.2.0", + "lodash.get": "^4.0.0", + "read-pkg-up": "^2.0.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/get-package-info/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/get-package-info/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/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/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", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "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/glob/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/glob/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/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-prefix": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz", + "integrity": "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==", + "dependencies": { + "ini": "^4.1.3", + "kind-of": "^6.0.3", + "which": "^4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/global-prefix/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "optional": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "optional": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "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/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "optional": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-minifier": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", + "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", + "dev": true, + "dependencies": { + "camel-case": "^3.0.0", + "clean-css": "^4.2.1", + "commander": "^2.19.0", + "he": "^1.2.0", + "param-case": "^2.1.1", + "relateurl": "^0.2.7", + "uglify-js": "^3.5.1" + }, + "bin": { + "html-minifier": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/html-minifier/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "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/iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + }, + "engines": { + "node": "^8.11.2 || >=10" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.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-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "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/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "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": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "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-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "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-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "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", + "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-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-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "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==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/isbinaryfile": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.0.tgz", + "integrity": "sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==", + "dev": true, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "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/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/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/jake/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/js-marker-clusterer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/js-marker-clusterer/-/js-marker-clusterer-1.0.0.tgz", + "integrity": "sha512-NZrs6UnoRd6Qd8dXZ4rgIxIO7is2Oa22Mp3XuczmHW+eqQYo03BoHXEzDGzpDHlFH+iuxWHFz5e7zQwoESbQIw==" + }, + "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/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-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 + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-pretty-compact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz", + "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "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-eslint-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-1.4.1.tgz", + "integrity": "sha512-hXBrvsR1rdjmB2kQmUjf1rEIa+TqHBGMge8pwi++C+Si1ad7EjZrJcpgwym+QGK/pqTx+K7keFAtLlVNdLRJOg==", + "dev": true, + "dependencies": { + "acorn": "^7.4.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^1.3.0", + "espree": "^6.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/jsonc-eslint-parser/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/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/junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "engines": { + "node": ">=18" + } + }, + "node_modules/kdbush": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true + }, + "node_modules/lazy-val": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "dev": true + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/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/lazystream/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/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "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/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "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/magic-string": { + "version": "0.30.4", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.4.tgz", + "integrity": "sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/maplibre-gl": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.7.1.tgz", + "integrity": "sha512-lgL7XpIwsgICiL82ITplfS7IGwrB1OJIw/pCvprDp2dhmSSEBgmPzYRvwYYYvJGJD7fxUv1Tvpih4nZ6VrLuaA==", + "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": "^20.3.1", + "@types/geojson": "^7946.0.14", + "@types/geojson-vt": "3.2.5", + "@types/mapbox__point-geometry": "^0.1.4", + "@types/mapbox__vector-tile": "^1.3.4", + "@types/pbf": "^3.0.5", + "@types/supercluster": "^7.1.3", + "earcut": "^3.0.0", + "geojson-vt": "^4.0.2", + "gl-matrix": "^3.4.3", + "global-prefix": "^4.0.0", + "kdbush": "^4.0.2", + "murmurhash-js": "^1.0.0", + "pbf": "^3.3.0", + "potpack": "^2.0.0", + "quickselect": "^3.0.0", + "supercluster": "^8.0.1", + "tinyqueue": "^3.0.0", + "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/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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/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/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": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "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==", + "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==", + "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": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/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/minizlib/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/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/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/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/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.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "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/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "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/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "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-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/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "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-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "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/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "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/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "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/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-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-author": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz", + "integrity": "sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==", + "dev": true, + "dependencies": { + "author-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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-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/pbf": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz", + "integrity": "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==", + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + }, + "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/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "dev": true, + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/postcss": { + "version": "8.4.41", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "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.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "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/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/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "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/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/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "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", + "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-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==" + }, + "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/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.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quasar": { + "version": "2.12.7", + "resolved": "https://registry.npmjs.org/quasar/-/quasar-2.12.7.tgz", + "integrity": "sha512-JF2rb8u1RcXPpiaDh/RnO/5rFx7kABDMov0WnRI3acJ5s4TD2FyPrCmS7VgleLubDYRSsSAontJ6EijGz4BHig==", + "engines": { + "node": ">= 10.18.1", + "npm": ">= 6.13.4", + "yarn": ">= 1.21.1" + }, + "funding": { + "type": "github", + "url": "https://donate.quasar.dev" + } + }, + "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/quickselect": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz", + "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "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.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/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/rcedit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-3.1.0.tgz", + "integrity": "sha512-WRlRdY1qZbu1L11DklT07KuHfRk42l0NFFJdaExELEu4fEQ982bP5Z6OWGPj/wLLIuKRQDCxZJGAwoFsxhZhNA==", + "dev": true, + "dependencies": { + "cross-spawn-windows-exe": "^1.1.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/read-config-file": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.3.2.tgz", + "integrity": "sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==", + "dev": true, + "dependencies": { + "config-file-ts": "^0.2.4", + "dotenv": "^9.0.2", + "dotenv-expand": "^5.1.0", + "js-yaml": "^4.1.0", + "json5": "^2.2.0", + "lazy-val": "^1.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/read-config-file/node_modules/dotenv": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", + "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==", + "dev": true, + "dependencies": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==", + "dev": true, + "dependencies": { + "pify": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dev": true, + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "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/register-service-worker": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/register-service-worker/-/register-service-worker-1.7.2.tgz", + "integrity": "sha512-CiD3ZSanZqcMPRhtfct5K9f7i3OLCcBBWsJjLh1gW9RO/nS94sVzY59iS+fgYBOBqaBpf4EzfqUF3j9IG+xo8A==", + "dev": true + }, + "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/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.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": "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/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/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "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==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/rollup": { + "version": "2.77.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz", + "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-visualizer": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.2.tgz", + "integrity": "sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A==", + "dev": true, + "dependencies": { + "open": "^8.4.0", + "picomatch": "^2.3.1", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + }, + "bin": { + "rollup-plugin-visualizer": "dist/bin/cli.js" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "rollup": "2.x || 3.x" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-visualizer/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/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/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "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/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/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dev": true, + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sass": { + "version": "1.32.12", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.12.tgz", + "integrity": "sha512-zmXn03k3hN0KaiVTjohgkg98C3UowhL1/VSGdj4/VAAiMKGQOE80PFPxFP2Kyq0OUskPKcY5lImkhBKEHlypJA==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", + "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/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true, + "optional": true + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/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/send/node_modules/debug/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/send/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/send/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/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "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", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/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/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "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, + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "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", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "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/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true + }, + "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/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "optional": true + }, + "node_modules/stack-trace": { + "version": "1.0.0-pre2", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-1.0.0-pre2.tgz", + "integrity": "sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/startaudiocontext": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/startaudiocontext/-/startaudiocontext-1.2.1.tgz", + "integrity": "sha512-ooOQhOAoCwzMIRwWd9j7xF8kAMo1Wv7Zfw+q6dWDW5gxJUKx15HJXWDg89GMDqfdle9xsqPv+uioneX+bI643g==" + }, + "node_modules/stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "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-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/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-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-outer/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/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "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": "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/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/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "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/table/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/table/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "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-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/temp-file": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "dev": true, + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + } + }, + "node_modules/temp-file/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/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "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/tinyqueue": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==" + }, + "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/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/tmp-promise/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tone": { + "version": "13.8.34", + "resolved": "https://registry.npmjs.org/tone/-/tone-13.8.34.tgz", + "integrity": "sha512-sFIYee0CO5lDcnC/RwIPiPMOIZCMEk35AaxF0Q64q7SE1BL+i+efYR6vrD+peDGrswXJ+D3bTmci2wCy+omx+Q==" + }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/trim-repeated/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/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dev": true, + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "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/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/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "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": "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.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "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/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "dev": true + }, + "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/utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==", + "dev": true + }, + "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/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "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/verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/vite": { + "version": "2.9.18", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.18.tgz", + "integrity": "sha512-sAOqI5wNM9QvSEE70W3UGMdT8cyEn0+PmJMTFvTB8wB0YbYUWw3gUbY62AOyrXosGieF2htmeLATvNxpv/zNyQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.14.27", + "postcss": "^8.4.13", + "resolve": "^1.22.0", + "rollup": ">=2.59.0 <2.78.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": ">=12.2.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + } + } + }, + "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/vue": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", + "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", + "dependencies": { + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-sfc": "3.3.4", + "@vue/runtime-dom": "3.3.4", + "@vue/server-renderer": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz", + "integrity": "sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/vue-google-maps": { + "version": "0.1.21", + "resolved": "https://registry.npmjs.org/vue-google-maps/-/vue-google-maps-0.1.21.tgz", + "integrity": "sha512-8IWeCupRH7Dh4jeQtlo6jBEzWSO2n/WcB0T4vK3SkZnDXiBsJoG8msT21cjTIoDiTpqgWUhSxLxdh94XVmhTYQ==", + "dependencies": { + "js-marker-clusterer": "^1.0.0" + }, + "peerDependencies": { + "lodash": "^4.15.0", + "q": "^1.4.1", + "vue": "^1.0.0" + } + }, + "node_modules/vue-i18n": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.5.0.tgz", + "integrity": "sha512-NiI3Ph1qMstNf7uhYh8trQBOBFLxeJgcOxBq51pCcZ28Vs18Y7BDS58r8HGDKCYgXdLUYqPDXdKatIF4bvBVZg==", + "dependencies": { + "@intlify/core-base": "9.5.0", + "@intlify/shared": "9.5.0", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-router": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", + "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", + "dependencies": { + "@vue/devtools-api": "^6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue3-google-oauth2": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/vue3-google-oauth2/-/vue3-google-oauth2-1.0.7.tgz", + "integrity": "sha512-XZv5+IVRLqKrsfm6DamD75e4LPynDt3xpmEw3SQBKfnUvpaIq6YuimOCPoXMfedR6nQHJeZkw62E/ii2disppA==" + }, + "node_modules/vuex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz", + "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==", + "dependencies": { + "@vue/devtools-api": "^6.0.0-beta.11" + }, + "peerDependencies": { + "vue": "^3.2.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/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.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/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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": "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/yaml-eslint-parser": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-0.3.2.tgz", + "integrity": "sha512-32kYO6kJUuZzqte82t4M/gB6/+11WAuHiEnK7FreMo20xsCKPeFH5tDBU7iWxR7zeJpNnMXfJyXwne48D0hGrg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.3.0", + "lodash": "^4.17.20", + "yaml": "^1.10.0" + } + }, + "node_modules/yaml-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "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/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "dev": true, + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "dev": true, + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..5990ee0 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,55 @@ +{ + "name": "foxai-quasar", + "version": "0.0.1", + "description": "LACA", + "productName": "LACA", + "author": "duongdd", + "private": true, + "scripts": { + "lint": "eslint --ext .js,.ts,.vue ./", + "format": "prettier --write \"**/*.{js,ts,vue,scss,html,md,json}\" --ignore-path .gitignore", + "test": "echo \"No test specified\" && exit 0", + "dev": "quasar dev", + "build": "quasar build", + "electron": "quasar build -m electron" + }, + "dependencies": { + "@codekraft-studio/vue-record": "^0.0.3", + "@geoapify/geocoder-autocomplete": "^2.1.0", + "@indoorequal/vue-maplibre-gl": "^7.6.0", + "@quasar/extras": "^1.16.4", + "@vueuse/core": "^10.7.0", + "axios": "^1.2.1", + "dayjs": "^1.11.10", + "jwt-decode": "^4.0.0", + "maplibre-gl": "^4.7.1", + "quasar": "^2.6.0", + "vue": "^3.0.0", + "vue-google-maps": "^0.1.21", + "vue-i18n": "^9.2.2", + "vue-router": "^4.0.0", + "vue3-google-oauth2": "^1.0.7", + "vuex": "^4.0.1" + }, + "devDependencies": { + "@intlify/vite-plugin-vue-i18n": "^3.3.1", + "@quasar/app-vite": "^1.3.0", + "@typescript-eslint/eslint-plugin": "^5.10.0", + "@typescript-eslint/parser": "^5.10.0", + "autoprefixer": "^10.4.2", + "dotenv": "^16.3.1", + "electron": "^27.0.3", + "electron-builder": "^24.3.0", + "electron-packager": "^17.1.1", + "eslint": "^8.10.0", + "eslint-config-prettier": "^8.1.0", + "eslint-plugin-vue": "^9.0.0", + "prettier": "^2.5.1", + "typescript": "^4.5.4" + }, + "engines": { + "node": "^18 || ^16 || ^14.19", + "npm": ">= 6.13.4", + "yarn": ">= 1.21.1" + } +} diff --git a/frontend/postcss.config.cjs b/frontend/postcss.config.cjs new file mode 100644 index 0000000..94b7b1c --- /dev/null +++ b/frontend/postcss.config.cjs @@ -0,0 +1,27 @@ +/* eslint-disable */ +// https://github.com/michael-ciniawsky/postcss-load-config + +module.exports = { + plugins: [ + // https://github.com/postcss/autoprefixer + require('autoprefixer')({ + overrideBrowserslist: [ + 'last 4 Chrome versions', + 'last 4 Firefox versions', + 'last 4 Edge versions', + 'last 4 Safari versions', + 'last 4 Android versions', + 'last 4 ChromeAndroid versions', + 'last 4 FirefoxAndroid versions', + 'last 4 iOS versions' + ] + }) + + // https://github.com/elchininet/postcss-rtlcss + // If you want to support RTL css, then + // 1. yarn/npm install postcss-rtlcss + // 2. optionally set quasar.config.js > framework > lang to an RTL language + // 3. uncomment the following line: + // require('postcss-rtlcss') + ] +} diff --git a/frontend/public/about/Ashley_Jones.jpeg b/frontend/public/about/Ashley_Jones.jpeg new file mode 100644 index 0000000..317e206 Binary files /dev/null and b/frontend/public/about/Ashley_Jones.jpeg differ diff --git a/frontend/public/about/Bicycle.jpeg b/frontend/public/about/Bicycle.jpeg new file mode 100644 index 0000000..41c3006 Binary files /dev/null and b/frontend/public/about/Bicycle.jpeg differ diff --git a/frontend/public/about/Ford_Philanthropy_Logo.jpeg b/frontend/public/about/Ford_Philanthropy_Logo.jpeg new file mode 100644 index 0000000..d4688dd Binary files /dev/null and b/frontend/public/about/Ford_Philanthropy_Logo.jpeg differ diff --git a/frontend/public/about/GIST_logo_445_1.jpeg b/frontend/public/about/GIST_logo_445_1.jpeg new file mode 100644 index 0000000..dd4dd4a Binary files /dev/null and b/frontend/public/about/GIST_logo_445_1.jpeg differ diff --git a/frontend/public/about/Mai_Nguyen.jpeg b/frontend/public/about/Mai_Nguyen.jpeg new file mode 100644 index 0000000..fb28709 Binary files /dev/null and b/frontend/public/about/Mai_Nguyen.jpeg differ diff --git a/frontend/public/about/laca.png b/frontend/public/about/laca.png new file mode 100644 index 0000000..58ef1a3 Binary files /dev/null and b/frontend/public/about/laca.png differ diff --git a/frontend/public/about/watson.png b/frontend/public/about/watson.png new file mode 100644 index 0000000..4de30ea Binary files /dev/null and b/frontend/public/about/watson.png differ diff --git a/frontend/public/en.svg b/frontend/public/en.svg new file mode 100644 index 0000000..d7f0e69 --- /dev/null +++ b/frontend/public/en.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000..16fc161 Binary files /dev/null and b/frontend/public/favicon.ico differ diff --git a/frontend/public/icons/desk.png b/frontend/public/icons/desk.png new file mode 100644 index 0000000..ef47213 Binary files /dev/null and b/frontend/public/icons/desk.png differ diff --git a/frontend/public/icons/favicon-128x128.png b/frontend/public/icons/favicon-128x128.png new file mode 100644 index 0000000..1401176 Binary files /dev/null and b/frontend/public/icons/favicon-128x128.png differ diff --git a/frontend/public/icons/favicon-16x16.png b/frontend/public/icons/favicon-16x16.png new file mode 100644 index 0000000..679063a Binary files /dev/null and b/frontend/public/icons/favicon-16x16.png differ diff --git a/frontend/public/icons/favicon-32x32.png b/frontend/public/icons/favicon-32x32.png new file mode 100644 index 0000000..fd1fbc6 Binary files /dev/null and b/frontend/public/icons/favicon-32x32.png differ diff --git a/frontend/public/icons/favicon-96x96.png b/frontend/public/icons/favicon-96x96.png new file mode 100644 index 0000000..e93b80a Binary files /dev/null and b/frontend/public/icons/favicon-96x96.png differ diff --git a/frontend/public/icons/favicon_128x128.png b/frontend/public/icons/favicon_128x128.png new file mode 100644 index 0000000..a7a6495 Binary files /dev/null and b/frontend/public/icons/favicon_128x128.png differ diff --git a/frontend/public/icons/favicon_16x16.png b/frontend/public/icons/favicon_16x16.png new file mode 100644 index 0000000..665b139 Binary files /dev/null and b/frontend/public/icons/favicon_16x16.png differ diff --git a/frontend/public/icons/favicon_32x32.png b/frontend/public/icons/favicon_32x32.png new file mode 100644 index 0000000..9a8c63e Binary files /dev/null and b/frontend/public/icons/favicon_32x32.png differ diff --git a/frontend/public/icons/favicon_96x96.png b/frontend/public/icons/favicon_96x96.png new file mode 100644 index 0000000..3f05892 Binary files /dev/null and b/frontend/public/icons/favicon_96x96.png differ diff --git a/frontend/public/icons/home-bg-d.jpg b/frontend/public/icons/home-bg-d.jpg new file mode 100644 index 0000000..13d0ece Binary files /dev/null and b/frontend/public/icons/home-bg-d.jpg differ diff --git a/frontend/public/icons/home-bg-m.jpg b/frontend/public/icons/home-bg-m.jpg new file mode 100644 index 0000000..3cb7779 Binary files /dev/null and b/frontend/public/icons/home-bg-m.jpg differ diff --git a/frontend/public/icons/logos/LACA_transparent (2).png b/frontend/public/icons/logos/LACA_transparent (2).png new file mode 100644 index 0000000..8983bb0 Binary files /dev/null and b/frontend/public/icons/logos/LACA_transparent (2).png differ diff --git a/frontend/public/icons/logos/LACA_transparent.png b/frontend/public/icons/logos/LACA_transparent.png new file mode 100644 index 0000000..2568421 Binary files /dev/null and b/frontend/public/icons/logos/LACA_transparent.png differ diff --git a/frontend/public/icons/logos/LACA_transparent2.png b/frontend/public/icons/logos/LACA_transparent2.png new file mode 100644 index 0000000..f2e0e36 Binary files /dev/null and b/frontend/public/icons/logos/LACA_transparent2.png differ diff --git a/frontend/public/icons/pexels-brett-sayles-1756957.jpg b/frontend/public/icons/pexels-brett-sayles-1756957.jpg new file mode 100644 index 0000000..5c0abd5 Binary files /dev/null and b/frontend/public/icons/pexels-brett-sayles-1756957.jpg differ diff --git a/frontend/public/icons/pexels-yasin-kayag-333085446-14730671.jpg b/frontend/public/icons/pexels-yasin-kayag-333085446-14730671.jpg new file mode 100644 index 0000000..bb6bb28 Binary files /dev/null and b/frontend/public/icons/pexels-yasin-kayag-333085446-14730671.jpg differ diff --git a/frontend/public/icons/sound_max.png b/frontend/public/icons/sound_max.png new file mode 100644 index 0000000..c6642a8 Binary files /dev/null and b/frontend/public/icons/sound_max.png differ diff --git a/frontend/public/images/default_user_icon_4.jpg b/frontend/public/images/default_user_icon_4.jpg new file mode 100644 index 0000000..977c540 Binary files /dev/null and b/frontend/public/images/default_user_icon_4.jpg differ diff --git a/frontend/public/landing/banner_2-1.png b/frontend/public/landing/banner_2-1.png new file mode 100644 index 0000000..3b4a61a Binary files /dev/null and b/frontend/public/landing/banner_2-1.png differ diff --git a/frontend/public/landing/banner_2.jfif b/frontend/public/landing/banner_2.jfif new file mode 100644 index 0000000..78dd23e Binary files /dev/null and b/frontend/public/landing/banner_2.jfif differ diff --git a/frontend/public/landing/banner_2.pdf b/frontend/public/landing/banner_2.pdf new file mode 100644 index 0000000..766b86c Binary files /dev/null and b/frontend/public/landing/banner_2.pdf differ diff --git a/frontend/public/landing/smart_city_2.png b/frontend/public/landing/smart_city_2.png new file mode 100644 index 0000000..0ff51e8 Binary files /dev/null and b/frontend/public/landing/smart_city_2.png differ diff --git a/frontend/public/landing/smart_city_6.jpg b/frontend/public/landing/smart_city_6.jpg new file mode 100644 index 0000000..f39778b Binary files /dev/null and b/frontend/public/landing/smart_city_6.jpg differ diff --git a/frontend/public/landing/z6547001438726_7a5bd095bcf160a078e1e1bffee5073a.jpg b/frontend/public/landing/z6547001438726_7a5bd095bcf160a078e1e1bffee5073a.jpg new file mode 100644 index 0000000..590b75b Binary files /dev/null and b/frontend/public/landing/z6547001438726_7a5bd095bcf160a078e1e1bffee5073a.jpg differ diff --git a/frontend/public/logo.ico b/frontend/public/logo.ico new file mode 100644 index 0000000..4c0a81e Binary files /dev/null and b/frontend/public/logo.ico differ diff --git a/frontend/public/logo/Asset 2.png b/frontend/public/logo/Asset 2.png new file mode 100644 index 0000000..2eb5a8b Binary files /dev/null and b/frontend/public/logo/Asset 2.png differ diff --git a/frontend/public/logo/Asset 3.png b/frontend/public/logo/Asset 3.png new file mode 100644 index 0000000..ae7143a Binary files /dev/null and b/frontend/public/logo/Asset 3.png differ diff --git a/frontend/public/logo/LACA.png b/frontend/public/logo/LACA.png new file mode 100644 index 0000000..f2e0e36 Binary files /dev/null and b/frontend/public/logo/LACA.png differ diff --git a/frontend/public/vi.svg b/frontend/public/vi.svg new file mode 100644 index 0000000..1ccf949 --- /dev/null +++ b/frontend/public/vi.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/frontend/quasar.config.js b/frontend/quasar.config.js new file mode 100644 index 0000000..f5e0e95 --- /dev/null +++ b/frontend/quasar.config.js @@ -0,0 +1,229 @@ +/* eslint-env node */ + +/* + * This file runs in a Node context (it's NOT transpiled by Babel), so use only + * the ES6 features that are supported by your Node version. https://node.green/ + */ + +// Configuration for your app +// https://v2.quasar.dev/quasar-cli-vite/quasar-config-js + +const { configure } = require('quasar/wrappers'); +const path = require('path'); +require('dotenv').config(); + +module.exports = configure(function (/* ctx */) { + return { + eslint: { + // fix: true, + // include: [], + // exclude: [], + // rawOptions: {}, + warnings: false, + errors: false, + }, + + // https://v2.quasar.dev/quasar-cli-vite/prefetch-feature + // preFetch: true, + + // app boot file (/src/boot) + // --> boot files are part of "main.js" + // https://v2.quasar.dev/quasar-cli-vite/boot-files + boot: ['i18n', 'axios', 'google'], + + // https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#css + css: ['app.scss'], + + // https://github.com/quasarframework/quasar/tree/dev/extras + extras: [ + // 'ionicons-v4', + // 'mdi-v5', + // 'fontawesome-v6', + // 'eva-icons', + // 'themify', + // 'line-awesome', + // 'roboto-font-latin-ext', // this or either 'roboto-font', NEVER both! + + 'roboto-font', // optional, you are not bound to it + 'material-icons', // optional, you are not bound to it + 'fontawesome-v6', + ], + + // Full list of options: https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#build + build: { + target: { + browser: ['es2019', 'edge88', 'firefox78', 'chrome87', 'safari13.1'], + node: 'node16', + }, + + vueRouterMode: 'hash', // available values: 'hash', 'history' + // vueRouterBase, + // vueDevtools, + // vueOptionsAPI: false, + + // rebuildCache: true, // rebuilds Vite/linter/etc cache on startup + + publicPath: '/', + // analyze: true, + env: { + VUE_APP_CLIENT_ID: process.env.VUE_APP_CLIENT_ID, + VUE_APP_API: process.env.VUE_APP_API, + VUE_APP_API_SERVER: process.env.VUE_APP_API_SERVER, + VITE_APP_GEO_MAP_API_KEY: process.env.VITE_APP_GEO_MAP_API_KEY, + VUE_APP_API_KEY_STYLE_MAP: process.env.VUE_APP_API_KEY_STYLE_MAP, + }, + // rawDefine: {} + // ignorePublicFolder: true, + // minify: false, + // polyfillModulePreload: true, + // distDir + + // extendViteConf (viteConf) {}, + // viteVuePluginOptions: {}, + + vitePlugins: [ + [ + '@intlify/vite-plugin-vue-i18n', + { + // if you want to use Vue I18n Legacy API, you need to set `compositionOnly: false` + // compositionOnly: false, + + // if you want to use named tokens in your Vue I18n messages, such as 'Hello {name}', + // you need to set `runtimeOnly: false` + // runtimeOnly: false, + + // you need to set i18n resource including paths ! + include: path.resolve(__dirname, './src/i18n/**'), + }, + ], + ], + }, + + // Full list of options: https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#devServer + devServer: { + // https: true + open: true, // opens browser window automatically + port: 8080, + env: { + VUE_APP_CLIENT_ID: process.env.VUE_APP_CLIENT_ID, + VUE_APP_API: process.env.VUE_APP_API, + VUE_APP_API_SERVER: process.env.VUE_APP_API_SERVER, + VITE_APP_GEO_MAP_API_KEY: process.env.VITE_APP_GEO_MAP_API_KEY, + }, + }, + + // https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#framework + framework: { + config: {}, + iconSet: 'fontawesome-v6', + // iconSet: 'material-icons', // Quasar icon set + // lang: 'en-US', // Quasar language pack + + // For special cases outside of where the auto-import strategy can have an impact + // (like functional components as one of the examples), + // you can manually specify Quasar components/directives to be available everywhere: + // + // components: [], + // directives: [], + + // Quasar plugins + plugins: ['Notify', 'Dialog'], + }, + + // animations: 'all', // --- includes all animations + // https://v2.quasar.dev/options/animations + animations: [], + + // https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#sourcefiles + // sourceFiles: { + // rootComponent: 'src/App.vue', + // router: 'src/router/index', + // store: 'src/store/index', + // registerServiceWorker: 'src-pwa/register-service-worker', + // serviceWorker: 'src-pwa/custom-service-worker', + // pwaManifestFile: 'src-pwa/manifest.json', + // electronMain: 'src-electron/electron-main', + // electronPreload: 'src-electron/electron-preload' + // }, + + // https://v2.quasar.dev/quasar-cli-vite/developing-ssr/configuring-ssr + ssr: { + // ssrPwaHtmlFilename: 'offline.html', // do NOT use index.html as name! + // will mess up SSR + + // extendSSRWebserverConf (esbuildConf) {}, + // extendPackageJson (json) {}, + + pwa: false, + + // manualStoreHydration: true, + // manualPostHydrationTrigger: true, + + prodPort: 3000, // The default port that the production server should use + // (gets superseded if process.env.PORT is specified at runtime) + + middlewares: [ + 'render', // keep this as last one + ], + }, + + // https://v2.quasar.dev/quasar-cli-vite/developing-pwa/configuring-pwa + pwa: { + workboxMode: 'generateSW', // or 'injectManifest' + injectPwaMetaTags: true, + swFilename: 'sw.js', + manifestFilename: 'manifest.json', + useCredentialsForManifestTag: false, + // useFilenameHashes: true, + // extendGenerateSWOptions (cfg) {} + // extendInjectManifestOptions (cfg) {}, + // extendManifestJson (json) {} + // extendPWACustomSWConf (esbuildConf) {} + }, + + // Full list of options: https://v2.quasar.dev/quasar-cli-vite/developing-cordova-apps/configuring-cordova + cordova: { + // noIosLegacyBuildFlag: true, // uncomment only if you know what you are doing + }, + + // Full list of options: https://v2.quasar.dev/quasar-cli-vite/developing-capacitor-apps/configuring-capacitor + capacitor: { + hideSplashscreen: true, + }, + + // Full list of options: https://v2.quasar.dev/quasar-cli-vite/developing-electron-apps/configuring-electron + electron: { + // extendElectronMainConf (esbuildConf) + // extendElectronPreloadConf (esbuildConf) + + inspectPort: 5858, + + bundler: 'packager', // 'packager' or 'builder' + + packager: { + // https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options + // OS X / Mac App Store + // appBundleId: '', + // appCategoryType: '', + // osxSign: '', + // protocol: 'myapp://path', + // Windows only + // win32metadata: { ... } + }, + + builder: { + // https://www.electron.build/configuration/configuration + + appId: 'foxai-quasar', + }, + }, + + // Full list of options: https://v2.quasar.dev/quasar-cli-vite/developing-browser-extensions/configuring-bex + bex: { + contentScripts: ['my-content-script'], + + // extendBexScriptsConf (esbuildConf) {} + // extendBexManifestJson (json) {} + }, + }; +}); diff --git a/frontend/src/App.vue b/frontend/src/App.vue new file mode 100644 index 0000000..49c6908 --- /dev/null +++ b/frontend/src/App.vue @@ -0,0 +1,11 @@ + + + diff --git a/frontend/src/assets/fonts/Inter-VariableFont_slnt,wght.ttf b/frontend/src/assets/fonts/Inter-VariableFont_slnt,wght.ttf new file mode 100644 index 0000000..e724708 Binary files /dev/null and b/frontend/src/assets/fonts/Inter-VariableFont_slnt,wght.ttf differ diff --git a/frontend/src/assets/fonts/OFL.txt b/frontend/src/assets/fonts/OFL.txt new file mode 100644 index 0000000..ad21484 --- /dev/null +++ b/frontend/src/assets/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Inter Project Authors (https://github.com/rsms/inter) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/frontend/src/assets/fonts/README.txt b/frontend/src/assets/fonts/README.txt new file mode 100644 index 0000000..3078f19 --- /dev/null +++ b/frontend/src/assets/fonts/README.txt @@ -0,0 +1,72 @@ +Inter Variable Font +=================== + +This download contains Inter as both a variable font and static fonts. + +Inter is a variable font with these axes: + slnt + wght + +This means all the styles are contained in a single file: + Inter-VariableFont_slnt,wght.ttf + +If your app fully supports variable fonts, you can now pick intermediate styles +that aren’t available as static fonts. Not all apps support variable fonts, and +in those cases you can use the static font files for Inter: + static/Inter-Thin.ttf + static/Inter-ExtraLight.ttf + static/Inter-Light.ttf + static/Inter-Regular.ttf + static/Inter-Medium.ttf + static/Inter-SemiBold.ttf + static/Inter-Bold.ttf + static/Inter-ExtraBold.ttf + static/Inter-Black.ttf + +Get started +----------- + +1. Install the font files you want to use + +2. Use your app's font picker to view the font family and all the +available styles + +Learn more about variable fonts +------------------------------- + + https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts + https://variablefonts.typenetwork.com + https://medium.com/variable-fonts + +In desktop apps + + https://theblog.adobe.com/can-variable-fonts-illustrator-cc + https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts + +Online + + https://developers.google.com/fonts/docs/getting_started + https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide + https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts + +Installing fonts + + MacOS: https://support.apple.com/en-us/HT201749 + Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux + Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows + +Android Apps + + https://developers.google.com/fonts/docs/android + https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts + +License +------- +Please read the full license text (OFL.txt) to understand the permissions, +restrictions and requirements for usage, redistribution, and modification. + +You can use them in your products & projects – print or digital, +commercial or otherwise. + +This isn't legal advice, please consider consulting a lawyer and see the full +license for all details. diff --git a/frontend/src/assets/fonts/static/Inter-Black.ttf b/frontend/src/assets/fonts/static/Inter-Black.ttf new file mode 100644 index 0000000..b27822b Binary files /dev/null and b/frontend/src/assets/fonts/static/Inter-Black.ttf differ diff --git a/frontend/src/assets/fonts/static/Inter-Bold.ttf b/frontend/src/assets/fonts/static/Inter-Bold.ttf new file mode 100644 index 0000000..fe23eeb Binary files /dev/null and b/frontend/src/assets/fonts/static/Inter-Bold.ttf differ diff --git a/frontend/src/assets/fonts/static/Inter-ExtraBold.ttf b/frontend/src/assets/fonts/static/Inter-ExtraBold.ttf new file mode 100644 index 0000000..874b1b0 Binary files /dev/null and b/frontend/src/assets/fonts/static/Inter-ExtraBold.ttf differ diff --git a/frontend/src/assets/fonts/static/Inter-ExtraLight.ttf b/frontend/src/assets/fonts/static/Inter-ExtraLight.ttf new file mode 100644 index 0000000..c993e82 Binary files /dev/null and b/frontend/src/assets/fonts/static/Inter-ExtraLight.ttf differ diff --git a/frontend/src/assets/fonts/static/Inter-Light.ttf b/frontend/src/assets/fonts/static/Inter-Light.ttf new file mode 100644 index 0000000..71188f5 Binary files /dev/null and b/frontend/src/assets/fonts/static/Inter-Light.ttf differ diff --git a/frontend/src/assets/fonts/static/Inter-Medium.ttf b/frontend/src/assets/fonts/static/Inter-Medium.ttf new file mode 100644 index 0000000..a01f377 Binary files /dev/null and b/frontend/src/assets/fonts/static/Inter-Medium.ttf differ diff --git a/frontend/src/assets/fonts/static/Inter-Regular.ttf b/frontend/src/assets/fonts/static/Inter-Regular.ttf new file mode 100644 index 0000000..5e4851f Binary files /dev/null and b/frontend/src/assets/fonts/static/Inter-Regular.ttf differ diff --git a/frontend/src/assets/fonts/static/Inter-SemiBold.ttf b/frontend/src/assets/fonts/static/Inter-SemiBold.ttf new file mode 100644 index 0000000..ecc7041 Binary files /dev/null and b/frontend/src/assets/fonts/static/Inter-SemiBold.ttf differ diff --git a/frontend/src/assets/fonts/static/Inter-Thin.ttf b/frontend/src/assets/fonts/static/Inter-Thin.ttf new file mode 100644 index 0000000..fe77243 Binary files /dev/null and b/frontend/src/assets/fonts/static/Inter-Thin.ttf differ diff --git a/frontend/src/assets/images/bg.png b/frontend/src/assets/images/bg.png new file mode 100644 index 0000000..af2ca2b Binary files /dev/null and b/frontend/src/assets/images/bg.png differ diff --git a/frontend/src/assets/images/logo.png b/frontend/src/assets/images/logo.png new file mode 100644 index 0000000..f005f10 Binary files /dev/null and b/frontend/src/assets/images/logo.png differ diff --git a/frontend/src/assets/images/upload.png b/frontend/src/assets/images/upload.png new file mode 100644 index 0000000..c42e2f9 Binary files /dev/null and b/frontend/src/assets/images/upload.png differ diff --git a/frontend/src/assets/quasar-logo-vertical.svg b/frontend/src/assets/quasar-logo-vertical.svg new file mode 100644 index 0000000..8210831 --- /dev/null +++ b/frontend/src/assets/quasar-logo-vertical.svg @@ -0,0 +1,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/frontend/src/boot/.gitkeep b/frontend/src/boot/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/boot/axios.ts b/frontend/src/boot/axios.ts new file mode 100644 index 0000000..0ab370a --- /dev/null +++ b/frontend/src/boot/axios.ts @@ -0,0 +1,76 @@ +import { boot } from 'quasar/wrappers'; +import axios, { AxiosInstance } from 'axios'; + +declare module '@vue/runtime-core' { + interface ComponentCustomProperties { + $axios: AxiosInstance; + $api: AxiosInstance; + } +} + +// Be careful when using SSR for cross-request state pollution +// due to creating a Singleton instance here; +// If any client changes this (global) instance, it might be a +// good idea to move this instance creation inside of the +// "export default () => {}" function below (which runs individually +// for each client) +const apiServer = axios.create({ baseURL: process.env.VUE_APP_API_SERVER }); +apiServer.interceptors.request.use( + (config) => { + const token = localStorage.getItem('accesstoken'); + if (token) { + config.headers.Authorization = `Bearer ${token}`; + } + return config; + }, + + (error) => { + console.log(error); + return Promise.reject(error); + } +); +apiServer.interceptors.response.use( + (res) => { + return res; + }, + async (err) => { + const originalConfig = err.config; + const listNotRefreach = ['/auth/login-google', '/auth/login']; + if (!listNotRefreach.includes(originalConfig.url) && err.response) { + // Access Token was expired + if (err.response.status === 401 && !originalConfig._retry) { + originalConfig._retry = true; + const tryTime = Number(localStorage.getItem('try')); + localStorage.setItem('try', (tryTime + 1).toString()); + try { + if (tryTime < 2) { + const rs = await apiServer.post('auth/refresh-token', { + refresh_token: localStorage.getItem('refresh'), + }); + + localStorage.setItem('accesstoken', rs.data.data.access_token); + localStorage.setItem('refresh', rs.data.data.refresh_token); + if (rs.data.data) localStorage.setItem('try', '0'); + + return apiServer(originalConfig); + } else { + localStorage.removeItem('accesstoken'); + localStorage.removeItem('refresh'); + window.close(); + } + } catch (_error) { + return Promise.reject(_error); + } + } + } + + return Promise.reject(err); + } +); + +export default boot(({ app }) => { + app.config.globalProperties.$axios = axios; + app.config.globalProperties.$apiServer = apiServer; +}); + +export { apiServer }; diff --git a/frontend/src/boot/google.ts b/frontend/src/boot/google.ts new file mode 100644 index 0000000..91fe7c7 --- /dev/null +++ b/frontend/src/boot/google.ts @@ -0,0 +1,15 @@ +import { boot } from 'quasar/wrappers'; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import gAuthPlugin from 'vue3-google-oauth2'; + +export default boot(({ app }) => { + const gauthOption = { + clientId: process.env.VUE_APP_CLIENT_ID, + scope: 'profile email', + prompt: 'consent', + fetch_basic_profile: true, + plugin_name: 'chat' + } + app.use(gAuthPlugin, gauthOption) +}); diff --git a/frontend/src/boot/i18n.ts b/frontend/src/boot/i18n.ts new file mode 100644 index 0000000..845aa10 --- /dev/null +++ b/frontend/src/boot/i18n.ts @@ -0,0 +1,32 @@ +import { boot } from 'quasar/wrappers'; +import { createI18n } from 'vue-i18n'; + +import messages from 'src/i18n'; + +export type MessageLanguages = keyof typeof messages; +// Type-define 'en-US' as the master schema for the resource +export type MessageSchema = (typeof messages)['vn-VN']; + +// See https://vue-i18n.intlify.dev/guide/advanced/typescript.html#global-resource-schema-type-definition +/* eslint-disable @typescript-eslint/no-empty-interface */ +declare module 'vue-i18n' { + // define the locale messages schema + export interface DefineLocaleMessage extends MessageSchema {} + + // define the datetime format schema + export interface DefineDateTimeFormat {} + + // define the number format schema + export interface DefineNumberFormat {} +} +/* eslint-enable @typescript-eslint/no-empty-interface */ + +export default boot(({ app }) => { + const i18n = createI18n({ + locale: 'vn-VN', + messages, + }); + + // Set i18n instance on app + app.use(i18n); +}); diff --git a/frontend/src/components/AudioVisual/components/AVBars.vue b/frontend/src/components/AudioVisual/components/AVBars.vue new file mode 100644 index 0000000..24e4c81 --- /dev/null +++ b/frontend/src/components/AudioVisual/components/AVBars.vue @@ -0,0 +1,20 @@ + + + diff --git a/frontend/src/components/AudioVisual/components/AVCircle.vue b/frontend/src/components/AudioVisual/components/AVCircle.vue new file mode 100644 index 0000000..063f729 --- /dev/null +++ b/frontend/src/components/AudioVisual/components/AVCircle.vue @@ -0,0 +1,18 @@ + + + diff --git a/frontend/src/components/AudioVisual/components/AVLine.vue b/frontend/src/components/AudioVisual/components/AVLine.vue new file mode 100644 index 0000000..df20406 --- /dev/null +++ b/frontend/src/components/AudioVisual/components/AVLine.vue @@ -0,0 +1,18 @@ + + + diff --git a/frontend/src/components/AudioVisual/components/AVMedia.vue b/frontend/src/components/AudioVisual/components/AVMedia.vue new file mode 100644 index 0000000..8ef82a2 --- /dev/null +++ b/frontend/src/components/AudioVisual/components/AVMedia.vue @@ -0,0 +1,15 @@ + + + diff --git a/frontend/src/components/AudioVisual/components/AVWaveform.vue b/frontend/src/components/AudioVisual/components/AVWaveform.vue new file mode 100644 index 0000000..db0afc8 --- /dev/null +++ b/frontend/src/components/AudioVisual/components/AVWaveform.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/frontend/src/components/AudioVisual/composables/useAVBars.ts b/frontend/src/components/AudioVisual/composables/useAVBars.ts new file mode 100644 index 0000000..fe1079f --- /dev/null +++ b/frontend/src/components/AudioVisual/composables/useAVBars.ts @@ -0,0 +1,97 @@ +import type { Ref } from 'vue' +import { resolveUnref, useEventListener } from '@vueuse/core' +import { useAudioContext } from '../composables/useAudioContext' + +import { + useCanvasContext, + fillCanvasBackground, + fillGradient +} from '../composables/useCanvasContext' + +import { Bars, type PropsBarsType } from '../composables/useProps' + +// init with min value +const caps: number[] = Array(16).fill(0) + +export function useAVBars( + player: Ref, + canvas: Ref, + props: T +){ + const p = new Bars(props as PropsBarsType) + + caps.length = p.fftSize / 2 + caps.fill(0) + + const ctx = useCanvasContext(canvas, p) + useEventListener(player, 'loadedmetadata', () => { + if (!p.placeholder || !ctx) return + draw(new Uint8Array(p.fftSize / 2), ctx, props as PropsBarsType) + }) + + useAudioContext(player, p.fftSize, (data: Uint8Array) => { + draw(data, ctx, props as PropsBarsType) + }) +} + +export function draw( + data: Uint8Array, + canvas: Ref, + props: PropsBarsType +) { + const ctx = resolveUnref( canvas ) + if ( !ctx ) return + + const p = new Bars(props) + const step = Math.round((p.barWidth + p.barSpace) / p.frqBits * p.canvWidth) + const dataLen = data.length + + let x = 0 + + fillCanvasBackground(ctx, p.canvWidth, p.canvHeight, p.canvFillColor) + + for (let i = 0;i < dataLen;i++){ + if (i % step) continue + const bits = Math.round(data.slice(i, i + step) + .reduce((v, t) => t + v, 0) / step) + const barHeight = bits / 255 * p.canvHeight + + drawCaps(ctx, p, bits, i, x) + + ctx.fillStyle = fillGradient(ctx, p.canvWidth, p.canvHeight, p.barColor) + if (p.brickHeight > 0) { + drawBarBricks(ctx, p, barHeight, x) + } else { + ctx.fillRect(x, p.canvHeight - barHeight - p.alignSym(barHeight), p.barWidth, barHeight) + } + x += p.barWidth + p.barSpace + } +} + +function drawCaps(ctx: CanvasRenderingContext2D, p: Bars, bits: number, i: number, x: number){ + if (p.capsHeight === 0) { + return + } + + const cap = caps[i] <= bits + ? bits + : caps[i] - p.capsDropSpeed + caps[i] = cap + const y = (cap / 255.0 * p.canvHeight) + const capY = p.canvHeight - y - p.capsHeight - p.alignSym(y) + ctx.fillStyle = p.capsColor + ctx.fillRect(x, capY, p.barWidth, p.capsHeight) + + if (p.symmetric) { + ctx.fillRect(x, p.canvHeight - capY - p.capsHeight, p.barWidth, p.capsHeight) + } +} + +function drawBarBricks(ctx:CanvasRenderingContext2D, p: Bars, barHeight: number, x:number){ + for (let b = 0; b < barHeight; b += p.brickHeight + p.brickSpace) { + ctx.fillRect( + x, p.canvHeight - barHeight + b - p.alignSym(barHeight), + p.barWidth, p.brickHeight + ) + } +} diff --git a/frontend/src/components/AudioVisual/composables/useAVCircle.ts b/frontend/src/components/AudioVisual/composables/useAVCircle.ts new file mode 100644 index 0000000..1aa5b39 --- /dev/null +++ b/frontend/src/components/AudioVisual/composables/useAVCircle.ts @@ -0,0 +1,136 @@ +import type { Ref } from 'vue' +import { resolveUnref, useEventListener } from '@vueuse/core' +import { useAudioContext } from '../composables/useAudioContext' + +import { useCanvasContext, fillCanvasBackground } from '../composables/useCanvasContext' +import { Circle, type PropsCircleType } from '../composables/useProps' + +export function useAVCircle( + player: Ref, + canvas: Ref, + props: T +){ + const p = new Circle(props as PropsCircleType) + + const ctx = useCanvasContext(canvas, p) + useEventListener(player, 'loadedmetadata', () => { + drawPlaceholder(ctx, p) + }) + + useAudioContext(player, p.fftSize, (data: Uint8Array) => { + draw(data, ctx, player, new Circle(props as PropsCircleType)) + }) +} + +export function draw( + data: Uint8Array, + canvas: Ref, + player: Ref, + p: Circle +) { + const ctx = resolveUnref( canvas ) + if ( !ctx ) return + const audio = resolveUnref( player ) + if ( !audio ) return + + const dataLen = data.length + const step = ((p.lineWidth + p.lineSpace) / dataLen) * (2 * Math.PI) + + fillCanvasBackground(ctx, p.canvWidth, p.canvHeight, p.canvFillColor) + + drawOutline(ctx, p) + + drawProgress(ctx, audio, p) + + drawPlaytime(ctx, audio, p) + + ctx.lineWidth = p.barWidth + ctx.strokeStyle = setBarColor(ctx, p) + + let angle = p.angle + for (let i = 0; i < dataLen; i++) { + angle += step + if (i % p.arcStep) { + continue + } + + const bits = Math.round(data.slice(i, i + p.arcStep) + .reduce((v, t) => t + v, 0) / p.arcStep) + + const blen = p.r + (bits / 255.0 * p.barLen) + + ctx.beginPath() + ctx.moveTo(p.r * Math.cos(angle) + p.cx, p.r * Math.sin(angle) + p.cy) + ctx.lineTo(blen * Math.cos(angle) + p.cx, blen * Math.sin(angle) + p.cy) + ctx.stroke() + } +} + +function drawPlaceholder( canvas: Ref, p: Circle) { + const ctx = resolveUnref( canvas ) + if ( !ctx ) return + drawOutline(ctx, p) + drawText(ctx, '0:00', p) +} + +function drawOutline(ctx: CanvasRenderingContext2D, p: Circle) { + if (p.outlineWidth === 0) { + return + } + + ctx.beginPath() + ctx.strokeStyle = p.outlineColor + ctx.lineWidth = p.outlineWidth + ctx.arc(p.cx, p.cy, p.r, 0, 2 * Math.PI) + ctx.stroke() +} + +function drawProgress(ctx: CanvasRenderingContext2D, audio: HTMLAudioElement, p: Circle){ + if (!p.progress) { + return + } + const { currentTime, duration } = audio + const elapsed = currentTime / duration * 2 * Math.PI + const angleEnd = Math.PI * 1.5 + elapsed + + if (!elapsed) return + + ctx.lineWidth = p.progressWidth + ctx.strokeStyle = p.progressColor + + ctx.beginPath() + ctx.arc(p.cx, p.cy, p.r - p.outlineWidth - p.outlineMeterSpace, + 1.5 * Math.PI, angleEnd, p.progressClockwise) + ctx.stroke() +} + +function drawPlaytime(ctx: CanvasRenderingContext2D, audio: HTMLAudioElement, p: Circle){ + const { currentTime } = audio + + const m = Math.floor(currentTime / 60) + const sec = Math.floor(currentTime) % 60 + const s = sec < 10 ? `0${sec}` : `${sec}` + const text = `${m}:${s}` + drawText(ctx, text, p) +} + +function drawText(ctx: CanvasRenderingContext2D, text: string, p: Circle) { + ctx.font = p.playtimeFont + ctx.fillStyle = p.playtimeColor + ctx.textAlign = 'center' + ctx.fillText(text, p.cx, p.cy + parseInt(p.playtimeFont) * 0.25) +} + +function setBarColor(ctx: CanvasRenderingContext2D, p: Circle){ + if (!Array.isArray(p.barColor)) { + return p.barColor + } + const gradient = ctx.createRadialGradient(p.cx, p.cy, p.canvWidth / 2, p.cx, p.cy, 0) + let offset = 0 + + p.barColor.forEach(color => { + gradient.addColorStop(offset, color) + offset += (1 / p.barColor.length) + }) + return gradient +} diff --git a/frontend/src/components/AudioVisual/composables/useAVLine.ts b/frontend/src/components/AudioVisual/composables/useAVLine.ts new file mode 100644 index 0000000..63613b5 --- /dev/null +++ b/frontend/src/components/AudioVisual/composables/useAVLine.ts @@ -0,0 +1,76 @@ +import { watch, type Ref } from 'vue' +import { resolveUnref } from '@vueuse/core' +import { useAudioContext } from '../composables/useAudioContext' + +import { + useCanvasContext, + fillCanvasBackground, + fillGradient +} from '../composables/useCanvasContext' + +import { Line, type PropsLineType } from '../composables/useProps' + +export function useAVLine( + player: Ref, + canvas: Ref, + props: T +) { + const p = new Line(props as PropsLineType) + const ctx = useCanvasContext(canvas, p) + + watch(ctx, () => { + if (!p.placeholder) return + const canv = resolveUnref( ctx ) + if (!canv) return + draw(new Uint8Array(p.fftSize), ctx, p) + }) + + useAudioContext(player, p.fftSize, (data: Uint8Array) => { + draw(data, ctx, new Line(props as PropsLineType)) + }) +} + +export function draw( + data: Uint8Array, + canvas: Ref, + props: Line +) { + const ctx = resolveUnref( canvas ) + if ( !ctx ) return + + const w = props.canvWidth + const h = props.canvHeight + const lw = props.lineWidth + + const dataLen = data.length + const step = ~~w / 2.0 / dataLen + let x = 0 + + const drawLine = (): number => { + let y = 0 + for ( let i = 0; i < dataLen; i++ ) { + // (h / 2) - v / 255 * (h / 2) + const v = data[i] + y = ( h * ( 255 - v )) / 510 + if ( i % 2 ) y = h - y + ctx.lineTo( x, y ) + x += step + } + return x + } + + fillCanvasBackground(ctx, w, h, props.canvFillColor) + + ctx.lineWidth = lw + ctx.strokeStyle = fillGradient(ctx, w, h, props.lineColor) + ctx.beginPath() + + data.reverse() + ctx.moveTo( x, h / 2 ) + x = drawLine() + + data.reverse() + drawLine() + ctx.lineTo( w, h / 2 ) + ctx.stroke() +} diff --git a/frontend/src/components/AudioVisual/composables/useAVMedia.ts b/frontend/src/components/AudioVisual/composables/useAVMedia.ts new file mode 100644 index 0000000..334b8e3 --- /dev/null +++ b/frontend/src/components/AudioVisual/composables/useAVMedia.ts @@ -0,0 +1,153 @@ +import { resolveUnref, useRafFn } from '@vueuse/core' +import { watchEffect, type Ref } from 'vue' +import { useCanvasContext } from './useCanvasContext' +import { type PropsMediaType, Media } from './useProps' + +export function useAVMedia( + canvas: Ref, + props: T +) { + const p = props as PropsMediaType + let analyser: AnalyserNode + + const ctx = useCanvasContext(canvas, new Media(p)) + + const { pause, resume } = useRafFn(() => { + if (!analyser) return + draw(analyser, ctx, new Media(p)) + }, { immediate: false }) + + watchEffect(() => { + const stream = resolveUnref(p.media) + if (stream) { + analyser = setAnalyser(stream as unknown as MediaStream, new Media(p)) + resume() + } else { + pause() + } + }) +} + +function setAnalyser(stream: MediaStream, p: Media): AnalyserNode { + const ctx = new AudioContext() + const analyser = ctx.createAnalyser() + const src = ctx.createMediaStreamSource(stream) + + src.connect(analyser) + analyser.fftSize = p.fftSize + + if (p.connectDestination) { + analyser.connect(ctx.destination) + } + + return analyser +} + +export function draw(analyser: AnalyserNode, canv: Ref, p: Media) { + const ctx = resolveUnref(canv) + if (!ctx) return + const data = new Uint8Array(analyser.fftSize) + if (p.canvFillColor) ctx.fillStyle = p.canvFillColor + ctx.clearRect(0, 0, p.canvWidth, p.canvHeight) + ctx.beginPath() + ctx.strokeStyle = p.lineColor + + switch (p.type) { + case 'frequ': + analyser.getByteFrequencyData(data) + drawFrequ(data, ctx, p) + break + case 'circle': + analyser.getByteFrequencyData(data) + drawCircle(data, ctx, p) + break + case 'vbar': + analyser.getByteFrequencyData(data) + drawVBar(data, ctx, p) + break + default: // wform + analyser.getByteTimeDomainData(data) + drawWForm(data, ctx, p) + break + } +} + +function drawFrequ(data: Uint8Array, ctx: CanvasRenderingContext2D, p: Media) { + const middleOut = p.frequDirection === 'mo' + const start = middleOut ? p.canvWidth / 2 : 0 + const c = middleOut ? p.frequLnum / 2 : p.frequLnum + const step = middleOut ? p.canvWidth / c / 2 : p.canvWidth / c + const h = p.canvHeight + const lw = p.lineWidth || 2 + for (let i = 0; i < c; i++) { + const x = middleOut ? i * step : i * step + lw + const v = data.slice(x, x + step).reduce((sum, v) => sum + (v / 255.0 * h), 0) / step + const space = (h - v) / 2 + 2 // + 2 is space for caps + ctx.lineWidth = lw + ctx.lineCap = p.frequLineCap ? 'round' : 'butt' + ctx.moveTo(start + x, space) + ctx.lineTo(start + x, h - space) + ctx.stroke() + + if (middleOut && i > 0) { + ctx.moveTo(start - x, space) + ctx.lineTo(start - x, h - space) + ctx.stroke() + } + } +} + +function drawVBar(data: Uint8Array, ctx: CanvasRenderingContext2D, p: Media) { + const barWidth = p.vbarWidth + const barSpace = p.vbarSpace + const capSpace = barWidth < 5 ? 5 : barWidth / 2 + let max = 0 + for (let i = 0; i < data.length; i++) { + max = max < data[i] ? data[i] : max + } + const vbarLen = max / 255 * p.canvWidth + ctx.lineWidth = p.vbarWidth + ctx.lineCap = p.vbarCaps ? 'round' : 'butt' + ctx.fillStyle = p.vbarBgColor + ctx.fillRect(0, 0, p.canvWidth, p.canvHeight) + for (let x = barWidth / 2; x + barWidth + barSpace <= p.canvWidth; x = x + barWidth + barSpace) { + ctx.strokeStyle = x > vbarLen ? p.vbarRightColor : p.vbarFillColor + ctx.beginPath() + ctx.moveTo(x, capSpace) + ctx.lineTo(x, p.canvHeight - capSpace) + ctx.stroke() + } +} + +function drawCircle(data: Uint8Array, ctx: CanvasRenderingContext2D, p: Media) { + const cx = p.canvWidth / 2 // center X + const cy = p.canvHeight / 2 // center Y + const outr = cx < cy ? cx : cy + + const max = Math.max(...data) + const r = max / 255 * outr + + const gradient = ctx.createRadialGradient(cx, cy, 0, cx, cy, r) + + for (const [offset, color] of p.circleGradient) { + gradient.addColorStop(offset, color) + } + + ctx.fillStyle = gradient + ctx.arc(cx, cy, r, 0, 2 * Math.PI) + ctx.fill('evenodd') +} + +function drawWForm(data: Uint8Array, ctx: CanvasRenderingContext2D, p: Media) { + const h = p.canvHeight + const step = p.canvWidth / p.fftSize + let x = 0 + ctx.lineWidth = p.lineWidth || 0.5 + for (let i = 0; i < data.length; i++){ + const v = data[i] + const y = (v / 255.0) * h + ctx.lineTo(x, y) + x += step + } + ctx.stroke() +} diff --git a/frontend/src/components/AudioVisual/composables/useAVWaveform.ts b/frontend/src/components/AudioVisual/composables/useAVWaveform.ts new file mode 100644 index 0000000..17d67f4 --- /dev/null +++ b/frontend/src/components/AudioVisual/composables/useAVWaveform.ts @@ -0,0 +1,145 @@ +import { watchEffect, type Ref } from 'vue' +import { useCanvasContext } from '../composables/useCanvasContext' +import { Waveform, type PropsWaveformType } from '../composables/useProps' +import { createFetch, resolveUnref, useEventListener, useRafFn, type CreateFetchOptions } from '@vueuse/core' + +export function useAVWaveform( + player: Ref, + canvas: Ref, + props: T, + fetchOpts: CreateFetchOptions = {} +) { + const p = new Waveform(props as PropsWaveformType) + + const ctx = useCanvasContext(canvas, p) + + fetchData(ctx, p, fetchOpts) + + const { pause, resume } = useRafFn(() => { + p.currentTime = player?.value?.currentTime ?? 0 + draw(ctx, p) + }, { immediate: false }) + + useEventListener(player, 'play', resume) + useEventListener(player, 'pause', pause) + useEventListener(player, 'ended', () => { + // this is a patch for weba file formats. + // weba files when buffered with fetchData function return + // wrong data duration which is longer then real duration. + // So, when file is finished to play waveform still have empty + // space in the end. This will try to fix it. + const audio = resolveUnref(player) + if (!audio || audio.duration === p.duration) return + p.duration = audio.duration + draw(ctx, p) + }) + useEventListener(player, 'timeupdate', () => { + const audio = resolveUnref(player) + if (!audio) return + p.currentTime = audio.currentTime + draw(ctx, p) + }) + useEventListener(canvas, 'click', (e: Event) => { + if (!p.playtimeClickable) return + const audio = resolveUnref(player) + if (!audio) return + audio.currentTime = (e as PointerEvent).offsetX / p.canvWidth * p.duration + p.currentTime = audio.currentTime + draw(ctx, p) + }) +} + +export function draw(canvas: Ref, p: Waveform) { + const ctx = resolveUnref(canvas) + if (!ctx) return + let x = 0 + + ctx.clearRect(0, 0, p.canvWidth, p.canvHeight) + + const waveform = (x: number, to: number, lw: number, color: string): number => { + ctx.lineWidth = lw + ctx.strokeStyle = color + to = to > p.peaks.length ? p.peaks.length : to + ctx.beginPath() + for (; x < to; x++) { + ctx.moveTo(x, p.peaks[x][0]) + ctx.lineTo(x, p.peaks[x][1]) + } + ctx.stroke() + return x + } + + x = waveform(x, p.playX, p.playedLineWidth, p.playedLineColor) + waveform(x, p.peaks.length, p.noplayedLineWidth, p.noplayedLineColor) + + drawSlider(ctx, p) + + if (p.playtime) { + drawTime(ctx, p) + } +} + +function drawSlider(ctx: CanvasRenderingContext2D, p: Waveform) { + ctx.lineWidth = p.playtimeSliderWidth + ctx.strokeStyle = p.playtimeSliderColor + ctx.beginPath() + ctx.moveTo(p.playX, 0) + ctx.lineTo(p.playX, p.canvHeight) + ctx.stroke() +} + +function drawTime(ctx: CanvasRenderingContext2D, p: Waveform) { + const time = p.timePlayed + const offset = 3 // pixels + const textWidth = ~~ctx.measureText(time).width + const textX = p.playX > (p.canvWidth - textWidth - offset) + ? p.playX - textWidth - offset + : p.playX + offset + const textY = p.playtimeTextBottom + ? p.canvHeight - p.playtimeFontSize + offset + : p.playtimeFontSize + offset + ctx.fillStyle = p.playtimeFontColor + ctx.font = `${p.playtimeFontSize}px ${p.playtimeFontFamily}` + ctx.fillText(time, textX, textY) +} + +function fetchData(canv: Ref, p: Waveform, fetchOpts: CreateFetchOptions) { + if (!p.src) return + const localFetch = createFetch(fetchOpts) + localFetch(p.src).arrayBuffer().then((res) => { + const {error, data} = res + const err = resolveUnref(error) + if (err !== null) { + console.error(`Failed get url '${p.src}': ${err}`) + return + } + + if (data.value === null) { + console.error('invalid arrayBuffer data received') + return + } + const ctx = new AudioContext() + ctx.decodeAudioData(data.value).then(buff => { + p.duration = buff.duration + p.setPeaks(buff) + draw(canv, p) + }).catch(err => { + console.error('Failed to decode audio array buffer:', err) + }) + }) + + watchEffect(() => { + const ctx = resolveUnref(canv) + if (!ctx) return + ctx.lineWidth = p.noplayedLineWidth + ctx.strokeStyle = p.noplayedLineColor + ctx.beginPath() + ctx.moveTo(0, p.canvHeight / 2) + ctx.lineTo(p.canvWidth, p.canvHeight / 2) + ctx.stroke() + drawSlider(ctx, p) + if (p.playtime) { + drawTime(ctx, p) + } + }) +} diff --git a/frontend/src/components/AudioVisual/composables/useAudioContext.ts b/frontend/src/components/AudioVisual/composables/useAudioContext.ts new file mode 100644 index 0000000..6e4385a --- /dev/null +++ b/frontend/src/components/AudioVisual/composables/useAudioContext.ts @@ -0,0 +1,43 @@ +import { resolveUnref, useEventListener, useRafFn } from '@vueuse/core' +import type { Ref } from 'vue' + +export function useAudioContext( + player: Ref, + fft: number, + cbFun: (data: Uint8Array) => void +) { + let ctx: AudioContext | null = null + let analyser: AnalyserNode | null = null + let src: MediaElementAudioSourceNode | null = null + const fftSize = fft || 1024 + const data = new Uint8Array(fftSize / 2) + + const { pause, resume } = useRafFn(() => { + if (!analyser) return + analyser.getByteFrequencyData(data) + cbFun(data) + }, { immediate: false }) + + useEventListener(player, 'play', async () => { + const audio = resolveUnref(player) + if (!audio) return + audio.crossOrigin = 'anonymous'; + resume() + if (!ctx) { + ctx = new AudioContext() + src = await ctx.createMediaElementSource(audio) + } + analyser = ctx.createAnalyser() + analyser.fftSize = fftSize + src?.connect(analyser) + analyser.connect(ctx.destination) + ctx.resume() + }) + + useEventListener(player, 'pause', () => { + ctx?.suspend() + src?.disconnect() + analyser?.disconnect() + pause() + }) +} diff --git a/frontend/src/components/AudioVisual/composables/useCanvasContext.ts b/frontend/src/components/AudioVisual/composables/useCanvasContext.ts new file mode 100644 index 0000000..548866c --- /dev/null +++ b/frontend/src/components/AudioVisual/composables/useCanvasContext.ts @@ -0,0 +1,43 @@ +import { resolveUnref } from '@vueuse/core' +import { watchEffect, ref, type Ref } from 'vue' +import type { Props } from '../composables/useProps' + +export function useCanvasContext( + canvas: Ref, + props: Props +): Ref { + const ctx = ref(null) + watchEffect(() => { + const canv = resolveUnref(canvas) + if (!canv) return + + ctx.value = canv.getContext('2d') + canv.width = props.canvWidth + canv.height = props.canvHeight + }) + return ctx +} + +type CanvColor = string[] | string | null | undefined + +export function fillCanvasBackground(ctx: CanvasRenderingContext2D, w: number, h: number, colors: CanvColor): void { + ctx.clearRect(0, 0, w, h) + if (!colors) { + return + } + ctx.fillStyle = fillGradient(ctx, w, h, colors) + ctx.fillRect(0, 0, w, h) +} + +export function fillGradient(ctx: CanvasRenderingContext2D, w: number, h: number, colors: CanvColor): CanvasGradient | string { + if (!Array.isArray(colors)) { + return colors || '' + } + const gradient = ctx.createLinearGradient(w / 2, 0, w / 2, h) + let offset = 0 + colors.forEach((color: string) => { + gradient.addColorStop(offset, color) + offset += 1 / colors.length + }) + return gradient +} diff --git a/frontend/src/components/AudioVisual/composables/useProps/Bars.ts b/frontend/src/components/AudioVisual/composables/useProps/Bars.ts new file mode 100644 index 0000000..2e58745 --- /dev/null +++ b/frontend/src/components/AudioVisual/composables/useProps/Bars.ts @@ -0,0 +1,139 @@ +import { resolvePropNum, resolvePropColor, resolvePropString, resolvePropBool } from './utils' +import { commonProps } from './common' +/** + * props for AVBars component + */ +const barsProps = { + /** + * prop: 'bar-width' + * Width of the bar in pixels. + * Default: 5 + */ + barWidth: { + type: Number, + default: 5 + }, + /** + * prop: 'bar-space' + * Space between bars. + * Default: 1 + */ + barSpace: { + type: Number, + default: 1 + }, + /** + * prop: 'bar-color' + * Bar fill color. Can be string RGB color or canvas gradients array. + */ + barColor: { + type: [String, Array], + default: '#0A0AFF' + }, + /** + * prop: 'caps-height' + * Create caps on bars with given height in pixels. + * If zero caps then skip creating bars. + * Default: 0 + */ + capsHeight: { + type: Number, + default: 0 + }, + /** + * prop: 'caps-drop-speed' + * Caps drop down animation speed. + * Default: 0.9 + */ + capsDropSpeed: { + type: Number, + default: 0.9 + }, + /** + * prop: 'caps-color' + * Caps rectangles RGB color. + */ + capsColor: { + type: String, + default: '#A0A0FF' + }, + /** + * prop: 'brick-height' + * Draw bar as bricks with set height. + */ + brickHeight: { + type: Number, + default: 0 + }, + /** + * prop: 'brick-space' + * Space between bricks. + */ + brickSpace: { + type: Number, + default: 1 + }, + /** + * prop: 'symmetric' + * Draw bars symmetric to canvas vertical center + * Default: false + */ + symmetric: { + type: Boolean, + default: false + }, + /** + * prop: 'fft-size' + * Represents the window size in samples that is used when performing + * a Fast Fourier Transform (FFT) to get frequency domain data. + * Must be power of 2 between 2^5 and 2^15 + * Default: 1024 + */ + fftSize: { + type: Number, + default: 1024 + } +} + +export const PropsBars = { ...commonProps, ...barsProps } +export type PropsBarsType = typeof PropsBars +export function makeBarsProps(): PropsBarsType { return PropsBars } + +export class Bars { + barColor: string | string[] + barSpace: number + barWidth: number + brickHeight: number + brickSpace: number + canvFillColor: string | string[] + canvHeight: number + canvWidth: number + capsColor: string + capsDropSpeed: number + capsHeight: number + fftSize: number + frqBits: number + placeholder: boolean + symmetric: boolean + constructor(p: PropsBarsType) { + this.barColor = resolvePropColor(p.barColor, PropsBars.barColor.default) + this.barSpace = resolvePropNum(p.barSpace, PropsBars.barSpace.default) + this.brickHeight = resolvePropNum(p.brickHeight, PropsBars.brickHeight.default) + this.brickSpace = resolvePropNum(p.brickSpace, PropsBars.brickSpace.default) + this.canvFillColor = resolvePropColor(p.canvFillColor, PropsBars.canvFillColor.default) + this.canvHeight = resolvePropNum(p.canvHeight, PropsBars.canvHeight.default) + this.canvWidth = resolvePropNum(p.canvWidth, PropsBars.canvWidth.default) + this.capsColor = resolvePropString(p.capsColor, PropsBars.capsColor.default) + this.capsDropSpeed = resolvePropNum(p.capsDropSpeed, PropsBars.capsDropSpeed.default) + this.capsHeight = resolvePropNum(p.capsHeight, PropsBars.capsHeight.default) + this.fftSize = resolvePropNum(p.fftSize, PropsBars.fftSize.default) + this.frqBits = this.fftSize >> 1 // same as div 2 in this case + this.placeholder = resolvePropBool(p.placeholder, PropsBars.placeholder.default) + this.symmetric = resolvePropBool(p.symmetric, PropsBars.symmetric.default) + const bw = resolvePropNum(p.barWidth, PropsBars.barWidth.default) + this.barWidth = bw > this.canvWidth ? this.canvWidth : bw + } + alignSym(barHeight: number):number { + return this.symmetric ? ((this.canvHeight - barHeight) / 2) : 0 + } +} diff --git a/frontend/src/components/AudioVisual/composables/useProps/Circle.ts b/frontend/src/components/AudioVisual/composables/useProps/Circle.ts new file mode 100644 index 0000000..ff53cd6 --- /dev/null +++ b/frontend/src/components/AudioVisual/composables/useProps/Circle.ts @@ -0,0 +1,281 @@ +import { commonProps } from './common' +import { resolvePropNum, resolvePropColor, resolvePropString, resolvePropBool } from './utils' + +/** + * props for AVCircle component + */ +const circleProps = { + /** + * prop: 'fft-size' + * Represents the window size in samples that is used when performing + * a Fast Fourier Transform (FFT) to get frequency domain data. + * Must be power of 2 between 2^5 and 2^15 + * Default: 1024 + */ + fftSize: { + type: Number, + default: 1024 + }, + /** + * prop: 'canv-width' + * Canvas element width. Default 100 + */ + canvWidth: { + type: Number, + default: 100 + }, + /** + * prop: 'canv-height' + * Canvas element height. Default 100 + */ + canvHeight: { + type: Number, + default: 100 + }, + /** + * prop: 'radius' + * Set circle radius. If zero will be calculated from canvas + * width: (canv-width / 2) * 0.7 + * Default: 0 + */ + radius: { + type: Number, + default: 0 + }, + /** + * prop: 'line-width' + * Frequency bit line width to draw. + */ + lineWidth: { + type: Number, + default: 1 + }, + /** + * prop: 'line-space' + * Space between lines to draw. + */ + lineSpace: { + type: Number, + default: 1 + }, + /** + * prop: 'outline-color' + * Outline (contour) style RGB color. + * Default: #00f + */ + outlineColor: { + type: String, + default: '#0000FF' + }, + /** + * prop: 'outline-width' + * Outline (contour) line width. Float value. + * Default: 0.3 + */ + outlineWidth: { + type: Number, + default: 0.3 + }, + /** + * prop: 'bar-width' + * Frequency graph bar width. + */ + barWidth: { + type: Number, + default: 1 + }, + /** + * prop: 'bar-length' + * Frequency graph bar length. + * Default is a difference between radius and canvas width. + */ + barLength: { + type: Number, + default: 0 + }, + /** + * prop: 'bar-color' + * Bar style RGB color or radient gradient when array. + * Default: [ #FFFFFF, #0000FF ] + */ + barColor: { + type: [String, Array], + default: ['#FFFFFF', '#0000FF'] + }, + /** + * prop: 'progress' + * Draw play progress meter. + * Default: false + */ + progress: { + type: Boolean, + default: true + }, + /** + * prop: 'progress-width' + * Progress meter width. + * Default: 1 + */ + progressWidth: { + type: Number, + default: 1 + }, + /** + * prop: 'progress-color' + * Progress meter color. + * Default: 1 + */ + progressColor: { + type: String, + default: '#0000FF' + }, + /** + * prop: 'progress-clockwise' + * Progress meter arc draw direction. Default clockwise + * Default: true + */ + progressClockwise: { + type: Boolean, + default: true + }, + /** + * prop: 'outline-meter-space' + * Space between outline and progress meter. + * Default: 2 + */ + outlineMeterSpace: { + type: Number, + default: 3 + }, + /** + * prop: 'playtime' + * Draw playtime text in the center of the circle. + * Default: false + */ + playtime: { + type: Boolean, + default: false + }, + /** + * prop: 'playtime-font' + * Played time print font. + * Default: '14px Monaco' + */ + playtimeFont: { + type: String, + default: '14px Monaco' + }, + /** + * prop: 'playtime-color' + * Played time font color. + * Default: '#00f' + */ + playtimeColor: { + type: String, + default: '#00f' + }, + /** + * prop: 'rotate-graph' + * Rotate graph clockwise enable. + * Default: false + */ + rotateGraph: { + type: Boolean, + default: false + }, + /** + * prop: 'rotate-speed' + * Rotate graph speed. + * Default: 0.001 + */ + rotateSpeed: { + type: Number, + default: 0.001 + } +} + +export const PropsCircle = { ...commonProps, ...circleProps } +export type PropsCircleType = typeof PropsCircle +export function makeCircleProps(): PropsCircleType { return PropsCircle } + +let rotate = 1.5 + +export class Circle { + barColor: string | string[] + barLength: number + barWidth: number + canvFillColor: string | string[] + canvHeight: number + canvWidth: number + fftSize: number + lineSpace: number + lineWidth: number + outlineColor: string + outlineMeterSpace: number + outlineWidth: number + placeholder: boolean + playtime: boolean + playtimeColor: string + playtimeFont: string + progress: boolean + progressClockwise: boolean + progressColor: string + progressWidth: number + radius: number + rotateGraph: boolean + rotateSpeed: number + constructor(p: PropsCircleType){ + const c = PropsCircle + this.barColor = resolvePropColor(p.barColor, c.barColor.default) + this.barLength = resolvePropNum(p.barLength, c.barLength.default) + this.barWidth = resolvePropNum(p.barWidth, c.barWidth.default) + this.canvFillColor = resolvePropColor(p.canvFillColor, c.canvFillColor.default) + this.canvHeight = resolvePropNum(p.canvHeight, c.canvHeight.default) + this.canvWidth = resolvePropNum(p.canvWidth, c.canvWidth.default) + this.fftSize = resolvePropNum(p.fftSize, c.fftSize.default) + this.lineSpace = resolvePropNum(p.lineSpace, c.lineSpace.default) + this.lineWidth = resolvePropNum(p.lineWidth, c.lineWidth.default) + this.outlineColor = resolvePropString(p.outlineColor, c.outlineColor.default) + this.outlineMeterSpace = resolvePropNum(p.outlineMeterSpace, c.outlineMeterSpace.default) + this.outlineWidth = resolvePropNum(p.outlineWidth, c.outlineWidth.default) + this.lineWidth = resolvePropNum(p.lineWidth, c.lineWidth.default) + this.placeholder = resolvePropBool(p.placeholder, c.placeholder.default) + this.playtime = resolvePropBool(p.playtime, c.playtime.default) + this.playtimeColor = resolvePropString(p.playtimeColor, c.playtimeColor.default) + this.playtimeFont = resolvePropString(p.playtimeFont, c.playtimeFont.default) + this.progress = resolvePropBool(p.progress, c.progress.default) + this.progressClockwise = resolvePropBool(p.progressClockwise, c.progressClockwise.default) + this.progressColor = resolvePropString(p.progressColor, c.progressColor.default) + this.progressWidth = resolvePropNum(p.progressWidth, c.progressWidth.default) + this.radius = resolvePropNum(p.radius, c.radius.default) + this.rotateGraph = resolvePropBool(p.rotateGraph, c.rotateGraph.default) + this.rotateSpeed = resolvePropNum(p.rotateSpeed, c.rotateSpeed.default) + } + get cx() { return this.canvWidth / 2 } + get cy() { return this.canvHeight / 2 } + get r() { + return this.radius > 0 + ? this.radius + : Math.round(this.canvWidth / 2 * 0.7) + } + get arcStep() { return Math.ceil(this.lineWidth + this.lineSpace) } + get barLen() { + return this.barLength > 0 + ? this.barLength + : (this.canvWidth / 2) - this.r + } + + get angle() { + const rot = (): number => { + return rotate === 3.5 + ? 1.5 + : rotate + this.rotateSpeed + } + + rotate = this.rotateGraph + ? rot() + : 1.5 + + return Math.PI * rotate + } +} diff --git a/frontend/src/components/AudioVisual/composables/useProps/Line.ts b/frontend/src/components/AudioVisual/composables/useProps/Line.ts new file mode 100644 index 0000000..065dd55 --- /dev/null +++ b/frontend/src/components/AudioVisual/composables/useProps/Line.ts @@ -0,0 +1,59 @@ +import { resolvePropNum, resolvePropColor, resolvePropBool } from './utils' +import { commonProps } from './common' + +/** + * props for AVLine component + */ +const lineProps = { + /** + * prop: 'line-width' + * Draw line width in px + */ + lineWidth: { + type: Number, + default: 2 + }, + /** + * prop: 'line-color' + * Draw line color or gradient array + */ + lineColor: { + type: [String, Array], + default: '#9F9' + }, + /** + * prop: 'fft-size' + * Represents the window size in samples that is used when performing + * a Fast Fourier Transform (FFT) to get frequency domain data. + * Must be power of 2 between 2^5 and 2^15 + * Default: 128 + */ + fftSize: { + type: Number, + default: 128 + } +} + +export const PropsLine = { ...commonProps, ...lineProps } +export type PropsLineType = typeof PropsLine +export function makeLineProps(): PropsLineType { return PropsLine } + +export class Line{ + canvWidth: number + canvHeight: number + canvFillColor: string | string[] + lineWidth: number + lineColor: string | string[] + fftSize: number + placeholder: boolean + constructor (p: PropsLineType) { + const l = PropsLine + this.canvWidth = resolvePropNum(p.canvWidth, l.canvWidth.default) + this.canvHeight = resolvePropNum(p.canvHeight, l.canvHeight.default) + this.canvFillColor = resolvePropColor(p.canvFillColor, l.canvFillColor.default) + this.lineWidth = resolvePropNum(p.lineWidth, l.lineWidth.default) + this.lineColor = resolvePropColor(p.lineColor, l.lineColor.default) + this.fftSize = resolvePropNum(p.fftSize, l.fftSize.default) + this.placeholder = resolvePropBool(p.placeholder, l.placeholder.default) + } +} diff --git a/frontend/src/components/AudioVisual/composables/useProps/Media.ts b/frontend/src/components/AudioVisual/composables/useProps/Media.ts new file mode 100644 index 0000000..fc8dc42 --- /dev/null +++ b/frontend/src/components/AudioVisual/composables/useProps/Media.ts @@ -0,0 +1,306 @@ +import { resolvePropNum, isUndef, resolvePropString, resolvePropBool } from './utils' + +/** + * props for AVMedia component + */ +const mediaProps = { + /** + * prop: 'media' + * MediaStream object for visualisation. Can be delivered by + * Web Audio API functions like getUserMedia or RTCPeerConnection + */ + media: { + type: Object, + required: false, + default: null + }, + + /** + * prop: 'canv-width' + * Canvas element width. Default depends on type + * vbar: 50, frequ: 300, wform: 200, circle: 80 + */ + canvWidth: { + type: Number, + default: 0 + }, + + /** + * prop: 'canv-class' + * Canvas element css class name. + */ + canvClass: { + type: String, + default: '' + }, + + /** + * prop: 'canv-height' + * Canvas element height. Default value depends on type. + * vbar: 20, frequ: 80, wform: 40, circle: 80 + */ + canvHeight: { + type: Number, + default: 0 + }, + + /** + * prop: 'canv-fill-color' + * Canvas fill background RGB color. + * Default is transparent. + */ + canvFillColor: { + type: String, + default: '' + }, + + /** + * prop: 'circle-gradient' + * Gradient array for circle type + * Default: [[0, 'palegreen'], [0.3, 'lime'], [0.7, 'limegreen'], [1, 'green']] + */ + circleGradient: { + type: Array, // <[number, string]>, + default: [[0, 'palegreen'], [0.3, 'lime'], [0.7, 'limegreen'], [1, 'green']] + }, + + /** + * prop: 'fft-size' + * Represents the window size in samples that is used when performing + * a Fast Fourier Transform (FFT) to get frequency domain data. + * Must be power of 2 between 2^5 and 2^15 + * Default: 8192 for 'wform' 1024 for 'freq' + */ + fftSize: { + type: Number + }, + + /** + * prop: 'type' + * Type of visualisation. + * circle - circle form + * frequ - using byte frequency data + * wform - using byte time domaine data + * vbar - vertical bar + * wform when not recognized. + * Default: wform + */ + type: { + type: String, + default: 'wform' + }, + + /** + * prop: 'frequ-lnum' + * Vertical lines number for frequ type. + * Default: 60 + */ + frequLnum: { + type: Number, + default: 60 + }, + + /** + * prop: 'frequ-line-cap' + * Draw line with rounded end caps. + * Default: false + */ + frequLineCap: { + type: Boolean, + default: false + }, + + /** + * prop: 'frequ-direction' + * Direction for frequency visualization. + * lr - from left to right + * mo - from middle out + * lr when not recognized. + * Default: lr + */ + frequDirection: { + type: String, + default: 'lr' + }, + + /** + * prop: 'line-color' + * Line color. + * Default: lime + */ + lineColor: { + type: String, + default: 'lime' + }, + + /** + * prop: 'line-width' + * Line width. + * Default: 0.5 for wform and 3 for frequ + */ + lineWidth: { + type: Number + }, + + /** + * prop: 'radius' + * Circle radius. + * Default: 4 for circle + */ + radius: { + type: Number, + default: 4 + }, + + /** + * prop: 'connect-destination' + * Analyser to connect to audio context's destination + * Default: false + */ + connectDestination: { + type: Boolean, + default: false + }, + + /** + * 'prop': 'vbar-bg-color' + * Background canvas color for 'vbar' type + * Default: '#e1e1e1' + */ + vbarBgColor: { + type: String, + default: '#e1e1e1' + }, + + /** + * 'prop': 'vbar-caps' + * Rounded bars for 'vbar' types + * Default: true + */ + vbarCaps: { + type: Boolean, + default: true + }, + + /** + * 'prop': 'vbar-space' + * Space between bars in 'vbar' type + * Default: 1 + */ + vbarSpace: { + type: Number, + default: 1 + }, + + /** + * 'prop': 'vbar-width' + * Width of bars in 'vbar' type + * Default: 4 + */ + vbarWidth: { + type: Number, + default: 4 + }, + + /** + * 'prop': 'vbar-fill-color' + * Color of bars in 'vbar' type + * Default: 'lime' + */ + vbarFillColor: { + type: String, + default: 'lime' + }, + + /** + * 'prop': 'vbar-right-color' + * Color of bars on right side in 'vbar' type + * Default: '#c0c0c0' + */ + vbarRightColor: { + type: String, + default: '#c0c0c0' + + } +} + +export const PropsMedia = { ...mediaProps } +export type PropsMediaType = typeof PropsMedia +export function makeMediaProps(): PropsMediaType { return PropsMedia } + +type GradientType = Array<[number, string]> +export class Media { + canvWidth: number + canvHeight: number + canvFillColor: string + canvClass: string + circleGradient: GradientType + fftSize: number + type: string + frequLnum: number + frequLineCap: boolean + frequDirection: string + lineColor: string + lineWidth: number + radius: number + connectDestination: boolean + vbarBgColor: string + vbarCaps: boolean + vbarFillColor: string + vbarRightColor: string + vbarSpace: number + vbarWidth: number + + constructor(p: PropsMediaType){ + const m = PropsMedia + + this.canvFillColor = resolvePropString(p.canvFillColor, m.canvFillColor.default) + this.canvClass = resolvePropString(p.canvClass, m.canvClass.default) + this.circleGradient = isUndef(p.circleGradient) + ? m.circleGradient.default as GradientType + : p.circleGradient as unknown as GradientType + this.type = resolvePropString(p.type, m.type.default) + this.fftSize = isUndef(p.fftSize) + ? this.type === 'frequ' ? 1024 : 8192 + : Number(p.fftSize) + this.frequLnum = resolvePropNum(p.frequLnum, m.frequLnum.default) + this.frequLineCap = resolvePropBool(p.frequLineCap, m.frequLineCap.default) + this.frequDirection = resolvePropString(p.frequDirection, m.frequDirection.default) + this.lineColor = resolvePropString(p.lineColor, m.lineColor.default) + this.lineWidth = isUndef(p.lineWidth) + ? this.type === 'frequ' ? 3 : 0.5 + : Number(p.lineWidth) + this.radius = resolvePropNum(p.radius, m.radius.default) + this.connectDestination = resolvePropBool(p.connectDestination, m.connectDestination.default) + this.vbarBgColor = resolvePropString(p.vbarBgColor, m.vbarBgColor.default) + this.vbarCaps = resolvePropBool(p.vbarCaps, m.vbarCaps.default) + this.vbarFillColor = resolvePropString(p.vbarFillColor, m.vbarFillColor.default) + this.vbarRightColor = resolvePropString(p.vbarRightColor, m.vbarRightColor.default) + this.vbarSpace = resolvePropNum(p.vbarSpace, m.vbarSpace.default) + this.vbarWidth = resolvePropNum(p.vbarWidth, m.vbarWidth.default) + + this.canvWidth = isUndef(p.canvWidth) || Number(p.canvWidth) === 0 + ? this.defaultWidth + : Number(p.canvWidth) + this.canvHeight = isUndef(p.canvHeight) || Number(p.canvHeight) === 0 + ? this.defaultHeight + : Number(p.canvHeight) + } + // vbar w: 50, h: 20; frequ w: 300, h: 80; wform w: 200, h: 40; circle w: 80, h: 80 + get defaultWidth(): number { + switch (this.type) { + case 'vbar': return 50 + case 'frequ': return 300 + case 'circle': return 80 + default: return 200 // wform is default + } + } + get defaultHeight(): number { + switch (this.type) { + case 'vbar': return 20 + case 'frequ': return 80 + case 'circle': return 80 + default: return 40 // wform is default + } + } +} diff --git a/frontend/src/components/AudioVisual/composables/useProps/Waveform.ts b/frontend/src/components/AudioVisual/composables/useProps/Waveform.ts new file mode 100644 index 0000000..99f849d --- /dev/null +++ b/frontend/src/components/AudioVisual/composables/useProps/Waveform.ts @@ -0,0 +1,270 @@ +import { commonProps } from './common' +import { resolvePropNum, resolvePropColor, isUndef, resolvePropString, resolvePropBool } from './utils' + +/** + * props for AVWaveform component + */ +const waveformProps = { + /** + * prop: 'canv-width' + * Canvas element width. Default 500 + */ + canvWidth: { + type: Number, + default: 500 + }, + /** + * prop: 'canv-height' + * Canvas element height. Default 80 + */ + canvHeight: { + type: Number, + default: 80 + }, + /** + * prop: 'played-line-width' + * Waveform line width for played segment of audio + * Default: 0.5 + */ + playedLineWidth: { + type: Number, + default: 3 + }, + /** + * prop: 'played-line-color' + * Waveform line color for played segment of audio + * Default: navy + */ + playedLineColor: { + type: String, + default: 'navy' + }, + /** + * prop: 'noplayed-line-width' + * Waveform line width for not yet played segment of audio + * Default: 0.5 + */ + noplayedLineWidth: { + type: Number, + default: 3 + }, + /** + * prop: 'noplayed-line-color' + * Waveform line color for not yet played segment of audio + * Default: lime + */ + noplayedLineColor: { + type: String, + default: 'lime' + }, + /** + * prop: 'playtime' + * Display played time next to progress slider. + * Default: true + */ + playtime: { + type: Boolean, + default: true + }, + /** + * prop: 'playtime-with-ms' + * Display milliseconds in played when true. + * For example: 02:55.054 + * Default: true + */ + playtimeWithMs: { + type: Boolean, + default: true + }, + /** + * prop: 'playtime-font-size' + * Played time print font size in pixels. + * Default: 12 + */ + playtimeFontSize: { + type: Number, + default: 12 + }, + /** + * prop: 'playtime-font-family' + * Played time print font family. + * Default: monospace + */ + playtimeFontFamily: { + type: String, + default: 'monospace' + }, + /** + * prop: 'playtime-font-color' + * Played time print font RGB color string. + * Default: grey + */ + playtimeFontColor: { + type: String, + default: 'grey' + }, + /** + * prop: 'playtime-text-bottom' + * Position playtime text bottom. + * Default on top. + * Default: false + */ + playtimeTextBottom: { + type: Boolean, + default: false + }, + /** + * prop: 'playtime-slider' + * Draw played slider + * Default: true + */ + playtimeSlider: { + type: Boolean, + default: true + }, + /** + * prop: 'playtime-slider-color' + * Played slider color + * Default: red + */ + playtimeSliderColor: { + type: String, + default: 'red' + }, + /** + * prop: 'playtime-slider-width' + * Played slider width + * Default: 1 + */ + playtimeSliderWidth: { + type: Number, + default: 3 + }, + /** + * prop: 'playtime-clickable' + * Allow click on waveform to change playtime. + * Default: true + */ + playtimeClickable: { + type: Boolean, + default: true + }, + /** + * prop: 'requester' + * Allow set a custom requester (axios/fetch) to be used. + * Default: new fetch instance + */ + requester: { + type: Function, + default: fetch + } +} + +export const PropsWaveform = { ...commonProps, ...waveformProps } +export type PropsWaveformType = typeof PropsWaveform +export function makeWavefromProps(): PropsWaveformType { return PropsWaveform } + +export class Waveform { + src: string | null + canvWidth: number + canvHeight: number + canvFillColor: string | string[] + currentTime: number + duration: number + playedLineWidth: number + playedLineColor: string + noplayedLineWidth: number + noplayedLineColor: string + playtime: boolean + playtimeWithMs: boolean + playtimeFontSize: number + playtimeFontFamily: string + playtimeFontColor: string + playtimeTextBottom: boolean + playtimeSlider: boolean + playtimeSliderColor: string + playtimeSliderWidth: number + playtimeClickable: boolean + peaks: [number, number][] = [] + constructor(p: PropsWaveformType) { + const w = PropsWaveform + this.canvWidth = resolvePropNum(p.canvWidth, w.canvWidth.default) + this.canvHeight = resolvePropNum(p.canvHeight, w.canvHeight.default) + this.canvFillColor = resolvePropColor(p.canvFillColor, w.canvFillColor.default) + this.playedLineWidth = resolvePropNum(p.playedLineWidth, w.playedLineWidth.default) + this.playedLineColor = resolvePropString(p.playedLineColor, w.playedLineColor.default) + this.noplayedLineWidth = resolvePropNum(p.noplayedLineWidth, w.noplayedLineWidth.default) + this.noplayedLineColor = resolvePropString(p.noplayedLineColor, w.noplayedLineColor.default) + this.playtime = resolvePropBool(p.playtime, w.playtime.default) + this.playtimeWithMs = resolvePropBool(p.playtimeWithMs, w.playtimeWithMs.default) + this.playtimeFontSize = resolvePropNum(p.playtimeFontSize, w.playtimeFontSize.default) + this.playtimeFontFamily = resolvePropString(p.playtimeFontFamily, w.playtimeFontFamily.default) + this.playtimeFontColor = resolvePropString(p.playtimeFontColor, w.playtimeFontColor.default) + this.playtimeTextBottom = resolvePropBool(p.playtimeTextBottom, w.playtimeTextBottom.default) + this.playtimeSlider = resolvePropBool(p.playtimeSlider, w.playtimeSlider.default) + this.playtimeSliderColor = resolvePropString(p.playtimeSliderColor, w.playtimeSliderColor.default) + this.playtimeSliderWidth = resolvePropNum(p.playtimeSliderWidth, w.playtimeSliderWidth.default) + this.playtimeClickable = resolvePropBool(p.playtimeClickable, w.playtimeClickable.default) + this.src = isUndef(p.src) ? null : String(p.src) + this.currentTime = 0 + this.duration = 0 + } + get playX(): number { + if (!this.duration) return 0 + const x = ~~(this.currentTime / this.duration * this.canvWidth) + return x > this.canvWidth ? this.canvWidth : x + } + get timePlayed(): string { + const time = [ + this.currentTime / 3600, + this.currentTime / 60 % 60, + this.currentTime % 60 + ]. + map(v => String(~~v).padStart(2, '0')). + join(':') + + if (!this.playtimeWithMs) + return time + const ms = ~~(this.currentTime % 1 * 1000) + return [time, String(ms).padStart(3, '0')].join('.') + } + + setPeaks(buffer: AudioBuffer) { + this.peaks.slice(0) + let min = 0 + let max = 0 + let top = 0 + let bottom = 0 + const segSize = Math.ceil(buffer.length / this.canvWidth) + const width = this.canvWidth + const height = this.canvHeight + + for (let c = 0; c < buffer.numberOfChannels; c++) { + const data = buffer.getChannelData(c) + for (let s = 0; s < width; s++) { + const start = ~~(s * segSize) + const end = ~~(start + segSize) + min = 0 + max = 0 + for (let i = start; i < end; i++) { + min = data[i] < min ? data[i] : min + max = data[i] > max ? data[i] : max + } + // merge multi channel data + if (this.peaks[s]) { + this.peaks[s][0] = this.peaks[s][0] < max ? max : this.peaks[s][0] + this.peaks[s][1] = this.peaks[s][1] > min ? min : this.peaks[s][1] + } + this.peaks[s] = [max, min] + } + } + // set peaks relativelly to canvas dimensions + for (let i = 0; i < this.peaks.length; i++) { + max = this.peaks[i][0] + min = this.peaks[i][1] + top = ((height / 2) - (max * height / 2)) + bottom = ((height / 2) - (min * height / 2)) + this.peaks[i] = [top, bottom === top ? top + 1 : bottom] + } + } +} diff --git a/frontend/src/components/AudioVisual/composables/useProps/common.ts b/frontend/src/components/AudioVisual/composables/useProps/common.ts new file mode 100644 index 0000000..67de46a --- /dev/null +++ b/frontend/src/components/AudioVisual/composables/useProps/common.ts @@ -0,0 +1,66 @@ +/** + * Common properties for all components + */ +export const commonProps = { + /** + * prop: 'src' + * Audio element src attribute. When provided creates audio element + */ + src: { + type: String, + default: null + }, + /** + * prop: 'audio-controls' + * Audio element controls attribute. When provided should + * display audio element with controls + */ + audioControls: { + type: Boolean, + default: true + }, + /** + * prop: 'cors-anonym' + * CORS requests for this element will not have the credentials flag set. + * Set crossOrigin property of audio element to 'anonymous'. + * Default: null + */ + corsAnonym: { + type: Boolean, + default: false + }, + /** + * prop: 'canv-width' + * Canvas element width. Default 300 + */ + canvWidth: { + type: Number, + default: 300 + }, + /** + * prop: 'canv-height' + * Canvas element height. Default 80 + */ + canvHeight: { + type: Number, + default: 80 + }, + /** + * prop: 'canv-fill-color' + * Canvas fill background color. Can be string RGB color or canvas gradients array. + * Default is transparent. + */ + canvFillColor: { + type: [String, Array], + default: '' + }, + /** + * prop: 'placeholder' + * Draw initial state of visualization. Like line in the middle for line plugin. + * Default is true + */ + placeholder: { + type: Boolean, + default: true + } +} diff --git a/frontend/src/components/AudioVisual/composables/useProps/index.ts b/frontend/src/components/AudioVisual/composables/useProps/index.ts new file mode 100644 index 0000000..9f818f2 --- /dev/null +++ b/frontend/src/components/AudioVisual/composables/useProps/index.ts @@ -0,0 +1,11 @@ +export * from './utils' +export * from './Bars' +export * from './Line' +export * from './Circle' +export * from './Waveform' +export * from './Media' + +export interface Props { + canvWidth: number + canvHeight: number +} diff --git a/frontend/src/components/AudioVisual/composables/useProps/utils.ts b/frontend/src/components/AudioVisual/composables/useProps/utils.ts new file mode 100644 index 0000000..4a115c6 --- /dev/null +++ b/frontend/src/components/AudioVisual/composables/useProps/utils.ts @@ -0,0 +1,39 @@ +import { resolveUnref, type MaybeRef } from '@vueuse/core' + +export const isUndef = (v: string | string[] | number | boolean | object | undefined): boolean => v === undefined + +export function resolvePropNum( + val: MaybeRef<{type: NumberConstructor; default: number}>, + defVal: number +): number { + const realVal = resolveUnref(val) + return isUndef(realVal) ? defVal : Number(realVal) +} + +export function resolvePropColor( + val: MaybeRef<{type: (StringConstructor | ArrayConstructor)[]}>, + def: string | string[] +): string | string[] { + const color = resolveUnref(val) + if (Array.isArray(color)) { + return color + } + + return color ? String(color) : def +} + +export function resolvePropString( + val: MaybeRef<{type: StringConstructor}>, + def: string +): string { + const v = resolveUnref(val) + return isUndef(v) ? def : String(v) +} + +export function resolvePropBool( + val: MaybeRef<{type: BooleanConstructor}>, + def: boolean +): boolean { + const v = resolveUnref(val) + return isUndef(v) ? def : Boolean(v) +} diff --git a/frontend/src/components/ElementMixin.js b/frontend/src/components/ElementMixin.js new file mode 100644 index 0000000..362e9fb --- /dev/null +++ b/frontend/src/components/ElementMixin.js @@ -0,0 +1,38 @@ +import RecorderMixin from './RecorderMixin' +import SafariRecorderMixin from './SafariRecorderMixin' + +const mixins = [RecorderMixin]; + +if (!window.MediaRecorder) { + console.warn('Using Safari polyfill'); + mixins.push(SafariRecorderMixin) +} + +/** + * The element mixin defines the mode behaviour and creates two + * functions to start and stop the recording execution + */ +export default { + mixins: mixins, + props: { + mode: { + type: String, + default: 'hold', + validator: v => ['hold', 'press'].includes(v) + } + }, + methods: { + stopRecording () { + if (this.mode === 'press') { + return + } + return this.stop() + }, + startRecording () { + if (this.isRecording && this.mode === 'press') { + return this.stop() + } + return this.start() + } + } +} diff --git a/frontend/src/components/Lang/LanguageList.vue b/frontend/src/components/Lang/LanguageList.vue new file mode 100644 index 0000000..54a4506 --- /dev/null +++ b/frontend/src/components/Lang/LanguageList.vue @@ -0,0 +1,75 @@ + + + diff --git a/frontend/src/components/Lang/LanguageSelect.vue b/frontend/src/components/Lang/LanguageSelect.vue new file mode 100644 index 0000000..12d8c6f --- /dev/null +++ b/frontend/src/components/Lang/LanguageSelect.vue @@ -0,0 +1,51 @@ + + + diff --git a/frontend/src/components/Lang/LanguageSelectMixin.vue b/frontend/src/components/Lang/LanguageSelectMixin.vue new file mode 100644 index 0000000..0e289ad --- /dev/null +++ b/frontend/src/components/Lang/LanguageSelectMixin.vue @@ -0,0 +1,105 @@ + diff --git a/frontend/src/components/RecorderMixin.js b/frontend/src/components/RecorderMixin.js new file mode 100644 index 0000000..bcc4ac5 --- /dev/null +++ b/frontend/src/components/RecorderMixin.js @@ -0,0 +1,129 @@ +export default { + data () { + return { + isSupported: false, + hasPermission: false, + isRecording: false, + isPaused: false, + chunks: [] + } + }, + async created(){ + this.$_stream = await this.getStream() + this.$_stream.getTracks().forEach(t => t.stop()) + }, + methods: { + async start () { + if (this.isRecording) { + return + } + + try { + this.$_stream = await this.getStream() + this.prepareRecorder() + this.$_mediaRecorder.start() + } catch (e) { + this.$emit('error', e) + // eslint-disable-next-line + console.error(e); + } + }, + stop () { + if (!this.isRecording) return + this.$_mediaRecorder.stop() + this.$_stream.getTracks().forEach(t => t.stop()) + this.$_stream = null + }, + pause () { + if (!this.isRecording) return + this.$_mediaRecorder.pause() + }, + resume () { + if (!this.isPaused) return + this.$_mediaRecorder.resume() + }, + + /** + * Get the input stream based on constraints and emit the stream event + * to the parent component so he can use it for processing or show a preview + */ + async getStream () { + const stream = await navigator.mediaDevices.getUserMedia(this.constraints) + this.$_stream = stream + this.$emit('stream', stream) + return stream + }, + + /** + * Create a new media recorder with the user media stream + * and set some event listeners to update component data + * and emit events to the parent component + */ + prepareRecorder () { + if (!this.$_stream) { + return + } + + this.$_mediaRecorder = new MediaRecorder(this.$_stream, { + mimeType: this.mimeType + }) + + this.$_mediaRecorder.ignoreMutedMedia = true + + this.$_mediaRecorder.addEventListener('start', () => { + this.isRecording = true + this.isPaused = false + this.$emit('start') + }) + + this.$_mediaRecorder.addEventListener('resume', () => { + this.isRecording = true + this.isPaused = false + this.$emit('resume') + }) + + this.$_mediaRecorder.addEventListener('pause', () => { + this.isPaused = true + this.$emit('pause') + }) + + // Collect the available data into chunks + this.$_mediaRecorder.addEventListener('dataavailable', (e) => { + if (e.data && e.data.size > 0) { + this.chunks.push(e.data) + } + }, true) + + // On recording stop get the data and emit the result + // than clear all the recording chunks + this.$_mediaRecorder.addEventListener('stop', () => { + this.$emit('stop') + + const blobData = new Blob(this.chunks) + if (blobData.size > 0) { + this.$emit('result', blobData) + } + this.chunks = [] + this.isPaused = false + this.isRecording = false + }, true) + } + }, + mounted () { + if (!navigator.mediaDevices && !navigator.mediaDevices.getUserMedia) { + // eslint-disable-next-line + console.warn('Media Devices are not supported from your browser.') + return + } + + // video recorder on Safari is not currently supported + // TODO: we could use https://github.com/CameraKit/webm-media-recorder + if (!window.MediaRecorder && this.constraints.video) { + // eslint-disable-next-line + console.warn('MediaRecorder for video is not supported from your browser.') + return + } + + this.isSupported = true + } +} diff --git a/frontend/src/components/SafariRecorderMixin.js b/frontend/src/components/SafariRecorderMixin.js new file mode 100644 index 0000000..7e71963 --- /dev/null +++ b/frontend/src/components/SafariRecorderMixin.js @@ -0,0 +1,204 @@ +import { loadScripts } from './loadScripts'; + +import StartAudioContext from 'startaudiocontext'; +import Tone from 'tone'; + +// https://github.com/Tonejs/Tone.js/issues/341 +// https://github.com/tambien/StartAudioContext +StartAudioContext(Tone.context); + +export default { + methods: { + async start() { + if (this.isRecording) { + return; + } + + try { + this.$_stream = await this.getStream(); + await this.prepareRecorder(); + + this.$_mediaRecorder.start(); + Tone.Transport.start(); + } catch (e) { + this.$emit('error', e); + // eslint-disable-next-line + console.error(e); + } + }, + + stop() { + if (!this.isRecording) return; + + this.$_mediaRecorder.stop(); + this.$_stream.getTracks().forEach(t => t.stop()); + this.$_mic.close(); + + Tone.Transport.stop(); + }, + + /** + * Get the input stream based on constraints and emit the stream event + * to the parent component so he can use it for processing or show a preview + */ + async getStream() { + // const stream = await navigator.mediaDevices.getUserMedia(this.constraints) + // this.$_stream = stream + + // you probably DONT want to connect the microphone + // directly to the master output because of feedback. + this.$_mic = new Tone.UserMedia(); + this.debug && console.log('tonejs microphone instance', this.$_mic); + + await this.$_mic.open(); + this.debug && console.log('mic is open', this.$_mic); + + const dest = Tone.context.createMediaStreamDestination(); + this.debug && console.log('context.createMediaStreamDestination', dest); + + this.$_mic.connect(dest); + this.debug && console.log('mic connected'); + + this.$_stream = dest.stream; + this.$emit('stream', this.$_stream); + + return this.$_stream; + }, + + /** + * Create a new media recorder with the user media stream + * and set some event listeners to update component data + * and emit events to the parent component + */ + async prepareRecorder() { + if (!this.$_stream) { + return; + } + + /* + + + + + + + + + */ + + await loadScripts([ + // load OpusMediaRecorder.umd.js. OpusMediaRecorder will be loaded. + 'https://cdn.jsdelivr.net/npm/opus-media-recorder@latest/OpusMediaRecorder.umd.js', + // load encoderWorker.umd.js. This should be after OpusMediaRecorder. + // This script tag will create OpusMediaRecorder.encoderWorker. + 'https://cdn.jsdelivr.net/npm/opus-media-recorder@latest/encoderWorker.umd.js', + 'https://webrtchacks.github.io/adapter/adapter-latest.js' + // I've included NPM ones + // '/js/audio-service/StartAudioContext.js', + // '/js/audio-service/Tone.js', + ]); + + let CustomMediaRecorder = window.MediaRecorder; + + // Check if MediaRecorder available. + if (!CustomMediaRecorder) { + if (!window.OpusMediaRecorder) { + console.error('OpusMediaRecorder is not defined'); + } + + // eslint-disable-next-line no-undef + CustomMediaRecorder = OpusMediaRecorder; + } + // Check if a target format (e.g. audio/ogg) is supported. + else if (!CustomMediaRecorder.isTypeSupported('audio/ogg;codecs=opus')) { + if (!window.OpusMediaRecorder) { + console.error('OpusMediaRecorder is not defined'); + } + + // eslint-disable-next-line no-undef + CustomMediaRecorder = OpusMediaRecorder; + } + + // If you already load encoderWorker.js using + + diff --git a/frontend/src/components/VueRecordVideo.vue b/frontend/src/components/VueRecordVideo.vue new file mode 100644 index 0000000..2749017 --- /dev/null +++ b/frontend/src/components/VueRecordVideo.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/frontend/src/components/index.js b/frontend/src/components/index.js new file mode 100644 index 0000000..9fa0670 --- /dev/null +++ b/frontend/src/components/index.js @@ -0,0 +1,12 @@ +import VueRecordAudio from './VueRecordAudio' +import VueRecordVideo from './VueRecordVideo' + +export { + VueRecordAudio, + VueRecordVideo +} + +export default function install(Vue) { + Vue.component('VueRecordAudio', VueRecordAudio) + Vue.component('VueRecordVideo', VueRecordVideo) +} diff --git a/frontend/src/components/loadScripts.js b/frontend/src/components/loadScripts.js new file mode 100644 index 0000000..b05ffe6 --- /dev/null +++ b/frontend/src/components/loadScripts.js @@ -0,0 +1,134 @@ +/** + * Dinamically load script into DOM + * @see https://gist.github.com/lidio601/81974ecf4564dbf257f80a969dcbdd5c + * + * Example usage: + * {code} + + require('./loadScript'); + + console.log('starting'); + loadScripts([ + "https://cdn.jsdelivr.net/npm/opus-media-recorder@latest/OpusMediaRecorder.umd.js", + "https://cdn.jsdelivr.net/npm/opus-media-recorder@latest/encoderWorker.umd.js" + ], { debug: true }) + .then(() => console.log("finished")) + .catch(console.error); + {/code} + */ + +/** + * @see https://stackoverflow.com/questions/16839698/jquery-getscript-alternative-in-native-javascript + */ +export const loadScript = ( + source, + { + beforeEl = false, + afterEl = false, + async = true, + defer = true, + debug = false + } = {} +) => { + return new Promise((resolve, reject) => { + let script = document.createElement('script'); + const shouldInjectBefore = !afterEl; // defaults to before + const scripts = document.getElementsByTagName('script'); + + // check whenever this script is not already included! + const existingOne = Array.prototype.slice + .call(scripts) + .filter(elem => elem.src === source); + + if (existingOne.length) { + debug && console.warn("loadScript :: skipped because it's already loaded", { + source + }); + + return resolve(existingOne); + } + + const prior = beforeEl || (scripts.length > 0 ? scripts[0] : null); + const after = afterEl || (scripts.length > 0 ? [scripts.length - 1] : null); + + script.async = async; + script.defer = defer; + + function onloadHander(_, isAbort) { + if ( + isAbort || + !script.readyState || + /loaded|complete/.test(script.readyState) + ) { + script.onload = null; + script.onreadystatechange = null; + script = undefined; + + if (isAbort) { + reject( + new Error(`loadScript :: error while loading script from ${script}`) + ); + } else { + resolve(script); + } + } + } + + script.onload = onloadHander; + script.onreadystatechange = onloadHander; + + script.src = source; + + if (shouldInjectBefore && beforeEl) { + prior.parentNode.insertBefore(script, prior); + } else if (!shouldInjectBefore && afterEl) { + // Note: There is no insertAfter() method. + // It can be emulated by combining the insertBefore method with Node.nextSibling. + prior.parentNode.insertBefore(script, after.nextSibling); + } else { + document.head.appendChild(script); + } + }); +}; + +export const loadScripts = async ( + sources, + { + beforeEl = false, + afterEl = false, + async = true, + defer = true, + debug = false + } = {} +) => { + // defaults to [] + sources = sources || []; + // ensure that is an array + sources = typeof sources.forEach === 'function' ? sources : [sources]; + // if it's empty + if (sources.length === 0) { + debug && console.log('loadScripts :: ended'); + return; + } + + // include scripts in order + const firstScript = sources.shift(); + debug && console.log('loadScripts :: loading', firstScript); + + return ( + loadScript(firstScript, { beforeEl, afterEl, async, defer }) + // recursion here! + .then(elem => { + debug && console.log('loadScripts :: loaded', firstScript); + + return loadScripts(sources, { + // continue injecting the other scripts + // after this one + afterEl: elem, + async, + defer, + debug + }); + }) + ); +}; diff --git a/frontend/src/css/app.scss b/frontend/src/css/app.scss new file mode 100644 index 0000000..1ecf1a6 --- /dev/null +++ b/frontend/src/css/app.scss @@ -0,0 +1,39 @@ +// app global css in SCSS form +@font-face { + font-family: 'Inter-Regular'; + src: url(../assets/fonts/static/Inter-Regular.ttf); +} + +body { + background-repeat: no-repeat; + background-size: 100% 100%; + background-position: center; + font-family: 'Inter-Regular'; + + + .img-width { + width: 100%; + } +} + +.container { + width: calc(100% - 20px); + max-width: 100vh; + margin-left: auto; + margin-right: auto; +} + +input { + background-clip: text !important; + -webkit-background-clip: text !important; +} + +.required::after { + content: " *"; + color: red; +} + +.footer { + background-color: #f5f5f5; + margin-top: 40px; +} \ No newline at end of file diff --git a/frontend/src/css/quasar.variables.scss b/frontend/src/css/quasar.variables.scss new file mode 100644 index 0000000..3996ce1 --- /dev/null +++ b/frontend/src/css/quasar.variables.scss @@ -0,0 +1,25 @@ +// Quasar SCSS (& Sass) Variables +// -------------------------------------------------- +// To customize the look and feel of this app, you can override +// the Sass/SCSS variables found in Quasar's source Sass/SCSS files. + +// Check documentation for full list of Quasar variables + +// Your own variables (that are declared here) and Quasar's own +// ones will be available out of the box in your .vue/.scss/.sass files + +// It's highly recommended to change the default colors +// to match your app's branding. +// Tip: Use the "Theme Builder" on Quasar's documentation website. + +$primary : #1976D2; +$secondary : #26A69A; +$accent : #9C27B0; + +$dark : #1D1D1D; +$dark-page : #121212; + +$positive : #21BA45; +$negative : #C10015; +$info : #31CCEC; +$warning : #F2C037; diff --git a/frontend/src/env.d.ts b/frontend/src/env.d.ts new file mode 100644 index 0000000..cdaf95a --- /dev/null +++ b/frontend/src/env.d.ts @@ -0,0 +1,13 @@ +/* eslint-disable */ + +declare namespace NodeJS { + interface ProcessEnv { + NODE_ENV: string; + VUE_ROUTER_MODE: 'hash' | 'history' | 'abstract' | undefined; + VUE_ROUTER_BASE: string | undefined; + VUE_APP_CLIENT_ID: string | undefined; + VUE_APP_API: string | undefined; + VUE_APP_API_SERVER: string | undefined; + VITE_APP_GEO_MAP_API_KEY: string | undefined; + } +} diff --git a/frontend/src/i18n/en-US/index.ts b/frontend/src/i18n/en-US/index.ts new file mode 100644 index 0000000..37c4c50 --- /dev/null +++ b/frontend/src/i18n/en-US/index.ts @@ -0,0 +1,73 @@ +export default { + name: 'LACA', + dialog: { + bookingInfo: 'Booking Information', + ownerName: 'Owner Name', + licensePlates: 'License Plates', + carType: 'Car Type', + contact: 'Contact', + reserveData: { + start: 'Check-in Time', + end: 'Check-out Time', + }, + cancel: 'Cancel', + reservation: 'Reserve', + changePassword: 'Change Password', + oldPassword: 'Old Password', + newPassword: 'New Password', + confirmPassword: 'Confirm Password', + changePasswordSuccess: 'Password changed successfully.', + changePasswordError: 'Failed to change password. Please try again.', + ruleLenght: 'Password must be between 8 and 32 characters.', + ruleConfirmPass: 'Passwords do not match.', + confirm: 'Confirm', + cancelUpdate: 'Cancel', + }, + header: { + title: 'LACA', + searchBook: 'Keywords: street, district, ...', + subtitle: 'Smart traffic management and operation system', + login: 'Login', + logout: 'Logout', + map: 'Map', + myparking: 'My Parking Lots', + parking: 'Parking Lots', + aboutUs: 'About Us', + contactUs: 'Contact Us', + event: 'Events', + bookingInfo: 'Booking Information', + bookingHistory: 'Booking History', + menu: { + addNewParking: 'Add New Parking Lot', + changePassword: 'Change Password', + myProfile: 'My Profile', + }, + }, + login: { + title: 'Login to the system', + username: 'Username', + password: 'Password', + rememberMe: 'Remember Me', + loginButton: 'Login', + loginError: 'Incorrect username or password. Please try again.', + forgotPassword: 'Forgot password?', + resetPassword: 'Reset Password', + resetPasswordSuccess: 'Password reset successfully. Please log in again.', + resetPasswordError: 'Failed to reset password. Please try again.', + accountLocked: + 'Your account has been locked due to too many failed login attempts. Please contact the administrator for support.', + accountDisabled: + 'Your account has been disabled. Please contact the administrator for support.', + passwordStrength: { + weak: 'Weak password', + medium: 'Medium password', + strong: 'Strong password', + }, + passwordPolicy: + 'Password must be at least 8 characters long and include uppercase letters, lowercase letters, numbers, and special characters.', + }, + packingMap: { + have: 'Found', + result: 'result(s)', + }, +}; diff --git a/frontend/src/i18n/index.ts b/frontend/src/i18n/index.ts new file mode 100644 index 0000000..634af55 --- /dev/null +++ b/frontend/src/i18n/index.ts @@ -0,0 +1,7 @@ +import enUS from './en-US'; +import vnVN from './vn-VN'; +export type LangType = 'en-US' | 'vn-VN'; +export default { + 'en-US': enUS, + 'vn-VN': vnVN, +}; diff --git a/frontend/src/i18n/vn-VN/index.ts b/frontend/src/i18n/vn-VN/index.ts new file mode 100644 index 0000000..ca1a9c0 --- /dev/null +++ b/frontend/src/i18n/vn-VN/index.ts @@ -0,0 +1,91 @@ +import { bo } from 'app/dist/spa/assets/index.59c81d64'; + +export default { + name: 'LACA', + dialog: { + bookingInfo: 'Thông tin đặt chỗ', + ownerName: 'Tên chủ xe', + licensePlates: 'Biển số xe', + carType: 'Loại xe', + contact: 'Liên hệ', + reserveData: { + start: 'Thời gian đến', + end: 'Thời gian đi', + }, + cancel: 'Hủy', + reservation: 'Đặt chỗ', + changePassword: 'Đổi mật khẩu', + oldPassword: 'Mật khẩu cũ', + newPassword: 'Mật khẩu mới', + confirmPassword: 'Xác nhận mật khẩu', + changePasswordSuccess: 'Đổi mật khẩu thành công.', + changePasswordError: 'Đổi mật khẩu không thành công. Vui lòng thử lại.', + ruleLenght: 'Mật khẩu phải từ 8 - 32 kí tự.', + ruleConfirmPass: 'Mật khẩu nhập lại không khớp.', + confirm: 'Xác nhận', + cancelUpdate: 'Hủy bỏ', + }, + header: { + title: 'LACA', + findNear: 'Tìm kiếm xung quanh', + searchBook: 'Từ khóa đường, quận, ...', + subtitle: 'Hệ thống quản lý và điều hành giao thông thông minh', + login: 'Đăng nhập', + logout: 'Đăng xuất', + map: 'Bản đồ', + myparking: 'Bãi Xe Của Tôi', + parking: 'Bãi Đỗ Xe', + aboutUs: 'Về Chúng Tôi', + contactUs: 'Liên Hệ', + event: 'Sự Kiện', + bookingInfo: 'Thông Tin Đặt Chỗ', + bookingHistory: 'Lịch Sử Đặt Chỗ', + menu: { + addNewParking: 'Thêm Bãi Đỗ Mới', + changePassword: 'Đổi Mật Khẩu', + myProfile: 'Thông Tin Cá Nhân', + }, + }, + login: { + title: 'Đăng nhập vào hệ thống', + username: 'Tên đăng nhập', + password: 'Mật khẩu', + rememberMe: 'Ghi nhớ đăng nhập', + loginButton: 'Đăng nhập', + loginError: 'Tên đăng nhập hoặc mật khẩu không đúng. Vui lòng thử lại.', + forgotPassword: 'Quên mật khẩu?', + resetPassword: 'Đặt lại mật khẩu', + resetPasswordSuccess: + 'Mật khẩu đã được đặt lại thành công. Vui lòng đăng nhập lại.', + resetPasswordError: 'Đặt lại mật khẩu không thành công. Vui lòng thử lại.', + accountLocked: + 'Tài khoản của bạn đã bị khóa do quá nhiều lần đăng nhập không thành công. Vui lòng liên hệ quản trị viên để được hỗ trợ.', + accountDisabled: + 'Tài khoản của bạn đã bị vô hiệu hóa. Vui lòng liên hệ quản trị viên để được hỗ trợ.', + passwordStrength: { + weak: 'Mật khẩu yếu', + medium: 'Mật khẩu trung bình', + strong: 'Mật khẩu mạnh', + }, + passwordPolicy: + 'Mật khẩu phải có ít nhất 8 ký tự, bao gồm chữ hoa, chữ thường, số và ký tự đặc biệt.', + }, + packingMap: { + have: 'Có', + result: 'kết quả', + }, + breadcrumbs: { + historyBooking: 'Lịch sử đặt chỗ', + parking: 'Chỗ đỗ xe', + }, + table: { + order: 'STT', + licensePlates: 'Biển số xe', + ownerName: 'Tên chủ xe', + status: 'Trạng thái ', + estimatedPrice: 'Giá dự kiến', + startTime: 'Thời gian bắt đầu', + endTime: 'Thời gian kết thúc', + options: 'Lựa chọn', + }, +}; diff --git a/frontend/src/layouts/AppLayout.vue b/frontend/src/layouts/AppLayout.vue new file mode 100644 index 0000000..55fd52f --- /dev/null +++ b/frontend/src/layouts/AppLayout.vue @@ -0,0 +1,739 @@ + + + + + diff --git a/frontend/src/layouts/MainLayout.vue b/frontend/src/layouts/MainLayout.vue new file mode 100644 index 0000000..acfe73b --- /dev/null +++ b/frontend/src/layouts/MainLayout.vue @@ -0,0 +1,199 @@ + + + + + diff --git a/frontend/src/pages/AboutUs.vue b/frontend/src/pages/AboutUs.vue new file mode 100644 index 0000000..0736ca8 --- /dev/null +++ b/frontend/src/pages/AboutUs.vue @@ -0,0 +1,329 @@ + + + + + diff --git a/frontend/src/pages/BusinessInformation.vue b/frontend/src/pages/BusinessInformation.vue new file mode 100644 index 0000000..107198c --- /dev/null +++ b/frontend/src/pages/BusinessInformation.vue @@ -0,0 +1,567 @@ + + + + + diff --git a/frontend/src/pages/ContactMe.vue b/frontend/src/pages/ContactMe.vue new file mode 100644 index 0000000..8758f0d --- /dev/null +++ b/frontend/src/pages/ContactMe.vue @@ -0,0 +1,207 @@ + + + + + diff --git a/frontend/src/pages/DashBoard.vue b/frontend/src/pages/DashBoard.vue new file mode 100644 index 0000000..c08faf9 --- /dev/null +++ b/frontend/src/pages/DashBoard.vue @@ -0,0 +1,640 @@ + + + + + diff --git a/frontend/src/pages/DetailParking.vue b/frontend/src/pages/DetailParking.vue new file mode 100644 index 0000000..653ed51 --- /dev/null +++ b/frontend/src/pages/DetailParking.vue @@ -0,0 +1,718 @@ + + + + + + diff --git a/frontend/src/pages/ErrorNotFound.vue b/frontend/src/pages/ErrorNotFound.vue new file mode 100644 index 0000000..6c9eb60 --- /dev/null +++ b/frontend/src/pages/ErrorNotFound.vue @@ -0,0 +1,34 @@ + + + diff --git a/frontend/src/pages/HistoryBooking.vue b/frontend/src/pages/HistoryBooking.vue new file mode 100644 index 0000000..b56f7ff --- /dev/null +++ b/frontend/src/pages/HistoryBooking.vue @@ -0,0 +1,291 @@ + + + + diff --git a/frontend/src/pages/ListParking.vue b/frontend/src/pages/ListParking.vue new file mode 100644 index 0000000..f0a7924 --- /dev/null +++ b/frontend/src/pages/ListParking.vue @@ -0,0 +1,168 @@ + + + + diff --git a/frontend/src/pages/MyPacking.vue b/frontend/src/pages/MyPacking.vue new file mode 100644 index 0000000..94efbf1 --- /dev/null +++ b/frontend/src/pages/MyPacking.vue @@ -0,0 +1,303 @@ + + + + diff --git a/frontend/src/pages/ParkingMap.vue b/frontend/src/pages/ParkingMap.vue new file mode 100644 index 0000000..e2c5ab9 --- /dev/null +++ b/frontend/src/pages/ParkingMap.vue @@ -0,0 +1,626 @@ + + + + + diff --git a/frontend/src/pages/RegisterParking.vue b/frontend/src/pages/RegisterParking.vue new file mode 100644 index 0000000..35db742 --- /dev/null +++ b/frontend/src/pages/RegisterParking.vue @@ -0,0 +1,587 @@ + + + + + diff --git a/frontend/src/pages/auth/LoginPage.vue b/frontend/src/pages/auth/LoginPage.vue new file mode 100644 index 0000000..c5c2338 --- /dev/null +++ b/frontend/src/pages/auth/LoginPage.vue @@ -0,0 +1,299 @@ + + + + + diff --git a/frontend/src/pages/auth/SignUpPage.vue b/frontend/src/pages/auth/SignUpPage.vue new file mode 100644 index 0000000..0e98f1a --- /dev/null +++ b/frontend/src/pages/auth/SignUpPage.vue @@ -0,0 +1,508 @@ + + + + + diff --git a/frontend/src/pages/auth/logoData.ts b/frontend/src/pages/auth/logoData.ts new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/quasar.d.ts b/frontend/src/quasar.d.ts new file mode 100644 index 0000000..5937f7a --- /dev/null +++ b/frontend/src/quasar.d.ts @@ -0,0 +1,9 @@ +/* eslint-disable */ + +// Forces TS to apply `@quasar/app-vite` augmentations of `quasar` package +// Removing this would break `quasar/wrappers` imports as those typings are declared +// into `@quasar/app-vite` +// As a side effect, since `@quasar/app-vite` reference `quasar` to augment it, +// this declaration also apply `quasar` own +// augmentations (eg. adds `$q` into Vue component context) +/// diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts new file mode 100644 index 0000000..2a364c0 --- /dev/null +++ b/frontend/src/router/index.ts @@ -0,0 +1,38 @@ +import { is } from 'quasar'; +import { route } from 'quasar/wrappers'; +import { createRouter, createWebHistory } from 'vue-router'; +import { StateInterface } from '../store'; + +import routes from './routes'; + +/* + * If not building with SSR mode, you can + * directly export the Router instantiation; + * + * The function below can be async too; either use + * async/await or return a Promise which resolves + * with the Router instance. + */ + +export default route(function ({ store }) { + const createHistory = createWebHistory; + const Router = createRouter({ + scrollBehavior: () => ({ left: 0, top: 0 }), + routes, + history: createHistory(process.env.VUE_ROUTER_BASE), + }); + Router.beforeEach((to, from, next) => { + // const isLogin = store.getters['userModule/getUser'] + // const isLogin = true; + // const isRouterLogin = to.fullPath.includes('login'); + // if (isRouterLogin && isLogin) { + // next({ name: 'dashboard' }); + // } else if (!isLogin) { + // isRouterLogin ? next() : next({ name: 'login' }); + // } else { + // next(); + // } + next(); + }); + return Router; +}); diff --git a/frontend/src/router/routes.ts b/frontend/src/router/routes.ts new file mode 100644 index 0000000..8dcb034 --- /dev/null +++ b/frontend/src/router/routes.ts @@ -0,0 +1,80 @@ +import { RouteRecordRaw } from 'vue-router'; + +const routes: RouteRecordRaw[] = [ + { + path: '/login', + component: () => import('pages/auth/LoginPage.vue'), + name: 'login', + }, + { + path: '/sign-up', + component: () => import('pages/auth/SignUpPage.vue'), + name: 'sign-up', + }, + { + path: '/', + component: () => import('layouts/AppLayout.vue'), + children: [ + { + path: '/', + component: () => import('src/pages/ParkingMap.vue'), + name: 'dashboard', + }, + { + path: '/test', + component: () => import('src/pages/BusinessInformation.vue'), + name: 'test', + }, + { + path: '/event', + component: () => import('src/pages/DashBoard.vue'), + name: 'event', + }, + { + path: '/parking', + component: () => import('src/pages/ListParking.vue'), + name: 'parking', + }, + { + path: '/parking/:id', + component: () => import('src/pages/DetailParking.vue'), + name: 'parking_detail', + }, + { + path: '/map', + component: () => import('src/pages/ParkingMap.vue'), + name: 'map', + }, + { + path: '/history', + component: () => import('src/pages/HistoryBooking.vue'), + name: 'history', + }, + { + path: '/register-parking', + component: () => import('src/pages/RegisterParking.vue'), + name: 'register-parking', + }, + { + path: '/my-parking', + component: () => import('src/pages/MyPacking.vue'), + name: 'my-parking', + }, + { + path: '/about', + component: () => import('src/pages/AboutUs.vue'), + name: 'about', + }, + { + path: '/contact', + component: () => import('src/pages/ContactMe.vue'), + name: 'contact', + }, + ], + }, + // { + // path: '/:catchAll(.*)*', + // component: () => import('pages/ErrorNotFound.vue'), + // }, +]; +export default routes; diff --git a/frontend/src/shims-vue.d.ts b/frontend/src/shims-vue.d.ts new file mode 100644 index 0000000..4b8df1b --- /dev/null +++ b/frontend/src/shims-vue.d.ts @@ -0,0 +1,10 @@ +/* eslint-disable */ + +/// + +// Mocks all files ending in `.vue` showing them as plain Vue instances +declare module '*.vue' { + import type { DefineComponent } from 'vue'; + const component: DefineComponent; + export default component; +} diff --git a/frontend/src/store/comment.ts b/frontend/src/store/comment.ts new file mode 100644 index 0000000..6b212e6 --- /dev/null +++ b/frontend/src/store/comment.ts @@ -0,0 +1,28 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { apiServer } from 'boot/axios'; + +const actions = { + async getListComment({ }, params: any) { + const res = await apiServer.get(`/comment/by-slot/${params.id}`, { + params: params.pagination, + }); + return res.data; + }, + async addComment({ }, params: any) { + const res = await apiServer.post('/comment', params); + return res.data; + }, + async reactComment({ }, payload: any) { + const res = await apiServer.post(`/comment/react/${payload.id}`, { + params: payload.params + }); + return res.data; + }, +}; + +const commentModule = { + namespaced: true, + actions, +}; + +export default commentModule; diff --git a/frontend/src/store/index.ts b/frontend/src/store/index.ts new file mode 100644 index 0000000..841bf8f --- /dev/null +++ b/frontend/src/store/index.ts @@ -0,0 +1,72 @@ +import { store } from 'quasar/wrappers'; +import { InjectionKey } from 'vue'; +import { Router } from 'vue-router'; +import { + createStore, + Store as VuexStore, + useStore as vuexUseStore, +} from 'vuex'; +import userModule from './user'; +import voiceModule from './voice'; +import slotModule from './slot'; +import commentModule from './comment'; + +// import example from './module-example' +// import { ExampleStateInterface } from './module-example/state'; + +/* + * If not building with SSR mode, you can + * directly export the Store instantiation; + * + * The function below can be async too; either use + * async/await or return a Promise which resolves + * with the Store instance. + */ + +export interface StateInterface { + // Define your own store structure, using submodules if needed + // example: ExampleStateInterface; + // Declared as unknown to avoid linting issue. Best to strongly type as per the line above. + example: unknown; +} + +// provide typings for `this.$store` +declare module '@vue/runtime-core' { + interface ComponentCustomProperties { + $store: VuexStore; + } +} + +// provide typings for `useStore` helper +export const storeKey: InjectionKey> = + Symbol('vuex-key'); + +// Provide typings for `this.$router` inside Vuex stores +declare module 'vuex' { + export interface Store { + readonly $router: Router; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + readonly $gAuth: any; + } +} + +export default store(function (/* { ssrContext } */) { + const Store = createStore({ + modules: { + userModule, + voiceModule, + slotModule, + commentModule, + }, + + // enable strict mode (adds overhead!) + // for dev mode and --debug builds only + strict: !!process.env.DEBUGGING, + }); + + return Store; +}); + +export function useStore() { + return vuexUseStore(storeKey); +} diff --git a/frontend/src/store/slot.ts b/frontend/src/store/slot.ts new file mode 100644 index 0000000..fe948af --- /dev/null +++ b/frontend/src/store/slot.ts @@ -0,0 +1,101 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { StateInterface } from './index'; +import { ActionTree, MutationTree, GetterTree, Module } from 'vuex'; +import { apiServer } from 'boot/axios'; +export interface SlotStateInterface { + reserveDialog: boolean; + currentId: number; +} + +const slotState: SlotStateInterface = { + reserveDialog: false, + currentId: 1, +}; +const actions: ActionTree = { + async getListSlot({ }, params: any) { + const res = await apiServer.get('/slot', { params: params }); + return res.data; + }, + async getListSlotByCursor({ }, params: any) { + const res = await apiServer.get('/slot/cursor', { params: params }); + return res.data; + }, + async getListSlotNear({ }, params: any) { + const res = await apiServer.get('/slot/near', { + params: { ...params, ...{ radius: 1 } }, + }); + return res.data; + }, + async detailSlot({ }, params: any) { + const res = await apiServer.get(`/slot/${params.id}`); + return res.data; + }, + async bookingSlot({ }, params: any) { + const res = await apiServer.post('/booking-slot', params); + return res.data; + }, + async addSlot({ }, params: any) { + const res = await apiServer.post('/slot', params); + return res.data; + }, + async updateSlot({ }, params: any) { + const res = await apiServer.patch(`/slot/${params.id}`, params); + return res.data; + }, + async historyBookingSlot({ }, params: any) { + const res = await apiServer.get('booking-slot/history', { + params: { ...params }, + }); + return res.data; + }, + async submitBookingSlot({ }, params: any) { + const res = await apiServer.get(`booking-slot/submit/${params.id}`); + return res.data; + }, + async outBookingSlot({ }, params: any) { + const res = await apiServer.get(`booking-slot/out/${params.id}`); + return res.data; + }, + async myPacking({ }, params: any) { + const res = await apiServer.get('/slot/user', params); + return res.data; + }, + async rateSlot({ }, params: any) { + const data = params.data; + const res = await apiServer.post(`/slot/vote/${params.id}`, data); + return res; + }, + async getRateSlot({ }, params: any) { + const res = await apiServer.get(`/slot/vote/${params}`); + return res.data; + }, + changeReserveDialog({ commit, state }) { + commit('SET_RESERVEDIALOG', !state.reserveDialog); + }, + changeCurrentId({ commit }, value) { + commit('SET_ID', value); + }, +}; + +const getters: GetterTree = { + getReserveDialog: (state) => state.reserveDialog, + getCurrentId: (state) => state.currentId, +}; + +const mutations: MutationTree = { + SET_RESERVEDIALOG(state, reserveDialog) { + state.reserveDialog = reserveDialog; + }, + SET_ID(state, value) { + state.currentId = value; + }, +}; +const slotModule: Module = { + namespaced: true, + actions, + getters, + mutations, + state: slotState, +}; + +export default slotModule; diff --git a/frontend/src/store/store-flag.d.ts b/frontend/src/store/store-flag.d.ts new file mode 100644 index 0000000..7677175 --- /dev/null +++ b/frontend/src/store/store-flag.d.ts @@ -0,0 +1,10 @@ +/* eslint-disable */ +// THIS FEATURE-FLAG FILE IS AUTOGENERATED, +// REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING +import "quasar/dist/types/feature-flag"; + +declare module "quasar/dist/types/feature-flag" { + interface QuasarFeatureFlags { + store: true; + } +} diff --git a/frontend/src/store/user.ts b/frontend/src/store/user.ts new file mode 100644 index 0000000..4a43dc0 --- /dev/null +++ b/frontend/src/store/user.ts @@ -0,0 +1,118 @@ +import { StateInterface } from './index'; +import { ActionTree, MutationTree, GetterTree, Module } from 'vuex'; +import { apiServer } from 'boot/axios'; +import { jwtDecode } from 'jwt-decode'; +import { LangType } from 'src/i18n'; +export interface ExampleStateInterface { + userInfo: object | null | string; + loading: boolean; + lang: LangType | string; +} + +const userState = { + userInfo: localStorage.getItem('accesstoken') + ? jwtDecode(`${localStorage.getItem('accesstoken')}`) + : null, + loading: false, + lang: localStorage.getItem('lang') || 'vn-VN', +}; + +const actions: ActionTree = { + async setUser({ commit }, params) { + try { + const res = await apiServer.post('/auth/login-google', params); + commit('SET_USER', jwtDecode(res.data.data.access_token)); + localStorage.setItem('accesstoken', res.data.data.access_token); + localStorage.setItem('refresh', res.data.data.refresh_token); + localStorage.setItem('try', '0'); + return res.data.data; + } catch (e) { + console.log(e); + } + }, + logout({ commit }, params: any) { + commit('SET_USER', null); + }, + async login({ commit }, params) { + const res = await apiServer.post('/auth/login', params); + commit('SET_USER', jwtDecode(res.data.data.access_token)); + localStorage.setItem('accesstoken', res.data.data.access_token); + localStorage.setItem('refresh', res.data.data.refresh_token); + localStorage.setItem('try', '0'); + return res.data.data; + }, + async refreshToken({ commit }, params) { + try { + const rs = await apiServer.post('auth/refresh-token', { + refresh_token: localStorage.getItem('refresh'), + }); + localStorage.setItem('accesstoken', rs.data.data.access_token); + localStorage.setItem('refresh', rs.data.data.refresh_token); + return rs.data.data; + } catch (e) { + console.log(e); + + localStorage.removeItem('accesstoken'); + localStorage.removeItem('refresh'); + commit('SET_USER', null); + console.log(e); + } + }, + async signUp({ commit }, params) { + const data = { ...params }; + // if (!/\S+@\S+\.\S+/.test(params.username)) { + // data['email'] = params.username + // } + try { + const res = await apiServer.post('/auth/sign-up', data); + return res.data; + } catch (e) { + console.log(e); + throw e; + } + }, + addLoading({ commit }, params) { + commit('SET_LOADING', params.loading); + }, + async changePassword({ commit }, params) { + try { + const res = await apiServer.post('/auth/change-password', params); + return res.data; + } catch (e) { + console.log(e); + throw e; + } + }, +}; + +const getters: GetterTree = { + getUser: (state) => { + console.log(state.userInfo); + return state.userInfo; + }, + getLoading: (state) => state.loading, + getLang: (state) => state.lang, +}; + +const mutations: MutationTree = { + SET_USER(state, userInfo) { + state.userInfo = userInfo; + }, + SET_LOADING(state, loading) { + state.loading = loading; + }, + SET_LANG(state, lang: LangType) { + localStorage.setItem('lang', lang); + state.lang = lang; + }, +}; + +const userModule: Module = { + namespaced: true, + actions, + getters, + mutations, + state: userState, +}; + +export default userModule; diff --git a/frontend/src/store/voice.ts b/frontend/src/store/voice.ts new file mode 100644 index 0000000..91a9c74 --- /dev/null +++ b/frontend/src/store/voice.ts @@ -0,0 +1,137 @@ +import { StateInterface } from './index'; +import { ActionTree, MutationTree, GetterTree, Module } from 'vuex'; +import { apiServer } from 'boot/axios' + +export interface ExampleStateInterface { + voiceInfo: object | null; +} + +const voiceState = { + voiceInfo: null +} + +const actions: ActionTree = { + async getRecords({ commit }) { + const res = await apiServer.get('/file') + return res.data + }, + async uploadTextSum({commit}, params) { + const res = await apiServer.post('/nlp/textsum/', params) + return res.data + }, + async transText({commit}, params) { + const res = await apiServer.post('/nlp/translate/', params) + return res.data + }, + async listVoice({commit}, params) { + const res = await apiServer.get('/criminal', {params}) + return res.data + }, + async detailVoice({commit}, params) { + const res = await apiServer.get(`/criminal/${params.id}`) + return res.data + }, + async createVoice({commit}, params) { + const res = await apiServer.post('/criminal', params) + return res.data + }, + async uploadSplit({commit}, params) { + const res = await apiServer.post('/nlp/separate', params) + return res.data + }, + async deleteVoice({commit}, params) { + const res = await apiServer.delete(`/criminal/${params.id}`) + return res.data + }, + async deleteFileVoice({commit}, params) { + const res = await apiServer.delete(`/criminal/${params.id}/${params.file_id}`) + return res.data + }, + async updateVoiceInfo({commit}, params) { + const res = await apiServer.patch(`/criminal/${params.id}`, params.data) + return res.data + }, + //Conversation + async uploadConversation({commit}, params) { + const res = await apiServer.post('/nlp/conversation', params) + return res.data + }, + async channelVoiceList({commit}, params) { + const res = await apiServer.get('/conversation', {params}) + return res.data + }, + async deleteChannelVoiceList({commit}, params) { + const res = await apiServer.delete(`/conversation/${params.id}`) + return res.data + }, + async channelVoiceDetail({commit}, params) { + const res = await apiServer.get(`/conversation/${params.id}`) + return res.data + }, + async restartChannelVoice({ commit }, params) { + const res = await apiServer.get(`/nlp/conversation/${params.id}`) + return res.data + }, + //DETECH + async detechVoiceList({commit}, params) { + const res = await apiServer.get('/identification', {params}) + return res.data + }, + async detechVoiceDetail({commit}, params) { + const res = await apiServer.get(`/identification/${params.id}`) + return res.data + }, + async detechVoice({commit}, params) { + const res = await apiServer.post('/nlp/identification', params) + return res.data + }, + async deleteDetechVoice({commit}, params) { + const res = await apiServer.delete(`/identification/${params.id}`) + return res.data + }, + //SPLIT_VOICE + async getListSplit({ commit }, params) { + const res = await apiServer.get('/separate', {params}) + return res.data + }, + async deleteListSplit({ commit }, params) { + const res = await apiServer.delete(`/separate/${params.id}`) + return res.data + }, + async detailListSplit({ commit }, params) { + const res = await apiServer.get(`/separate/${params.id}`) + return res.data + }, + async restartListSplit({ commit }, params) { + const res = await apiServer.get(`/nlp/separate/${params.id}`) + return res.data + }, + async updateVoiceSplit({ commit }, params) { + const res = await apiServer.put(`/criminal/${params.id}`, params.data) + return res.data + }, + async addCriminalToVoiceSplit({ commit }, params) { + const res = await apiServer.put(`/separate/${params.id}/${params.criminal_id}?slot=${params.slot}`) + return res.data + }, +}; + +const getters: GetterTree = { + getVoice: (state) => state.voiceInfo +}; + +const mutations: MutationTree = { + SET_VOICE(state, voiceInfo) { + state.voiceInfo = voiceInfo + } +}; + +const voiceModule: Module = { + namespaced: true, + actions, + getters, + mutations, + state: voiceState +}; + +export default voiceModule; diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..ee0d9cf --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "@quasar/app-vite/tsconfig-preset", + "compilerOptions": { + "baseUrl": "." + } +} \ No newline at end of file diff --git a/frontend/yarn.lock b/frontend/yarn.lock new file mode 100644 index 0000000..3bc6e54 --- /dev/null +++ b/frontend/yarn.lock @@ -0,0 +1,4962 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@babel/parser@^7.18.4", "@babel/parser@^7.20.15", "@babel/parser@^7.21.3": + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz" + integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== + +"@codekraft-studio/vue-record@^0.0.3": + version "0.0.3" + resolved "https://registry.npmjs.org/@codekraft-studio/vue-record/-/vue-record-0.0.3.tgz" + integrity sha512-lythfIuNb9JD9aEoLkJ5YoDSKJcLEJY9JXYP28xT3ePAbf1hfo/Z5ZuJOWORp4WWtO3FifNlVMzrePrVG84XhA== + dependencies: + startaudiocontext "^1.2.1" + tone "^13.8.25" + vue "^2.0" + +"@develar/schema-utils@~2.6.5": + version "2.6.5" + resolved "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz" + integrity sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig== + dependencies: + ajv "^6.12.0" + ajv-keywords "^3.4.1" + +"@electron/asar@^3.2.1": + version "3.2.8" + resolved "https://registry.npmjs.org/@electron/asar/-/asar-3.2.8.tgz" + integrity sha512-cmskk5M06ewHMZAplSiF4AlME3IrnnZhKnWbtwKVLRkdJkKyUVjMLhDIiPIx/+6zQWVlKX/LtmK9xDme7540Sg== + dependencies: + commander "^5.0.0" + glob "^7.1.6" + minimatch "^3.0.4" + +"@electron/get@^2.0.0": + version "2.0.3" + resolved "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz" + integrity sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ== + dependencies: + debug "^4.1.1" + env-paths "^2.2.0" + fs-extra "^8.1.0" + got "^11.8.5" + progress "^2.0.3" + semver "^6.2.0" + sumchecker "^3.0.1" + optionalDependencies: + global-agent "^3.0.0" + +"@electron/notarize@^1.2.3": + version "1.2.4" + resolved "https://registry.npmjs.org/@electron/notarize/-/notarize-1.2.4.tgz" + integrity sha512-W5GQhJEosFNafewnS28d3bpQ37/s91CDWqxVchHfmv2dQSTWpOzNlUVQwYzC1ay5bChRV/A9BTL68yj0Pa+TSg== + dependencies: + debug "^4.1.1" + fs-extra "^9.0.1" + +"@electron/notarize@2.1.0": + version "2.1.0" + resolved "https://registry.npmjs.org/@electron/notarize/-/notarize-2.1.0.tgz" + integrity sha512-Q02xem1D0sg4v437xHgmBLxI2iz/fc0D4K7fiVWHa/AnW8o7D751xyKNXgziA6HrTOme9ul1JfWN5ark8WH1xA== + dependencies: + debug "^4.1.1" + fs-extra "^9.0.1" + promise-retry "^2.0.1" + +"@electron/osx-sign@^1.0.5", "@electron/osx-sign@1.0.5": + version "1.0.5" + resolved "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.0.5.tgz" + integrity sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww== + dependencies: + compare-version "^0.1.2" + debug "^4.3.4" + fs-extra "^10.0.0" + isbinaryfile "^4.0.8" + minimist "^1.2.6" + plist "^3.0.5" + +"@electron/universal@^1.3.2", "@electron/universal@1.4.1": + version "1.4.1" + resolved "https://registry.npmjs.org/@electron/universal/-/universal-1.4.1.tgz" + integrity sha512-lE/U3UNw1YHuowNbTmKNs9UlS3En3cPgwM5MI+agIgr/B1hSze9NdOP0qn7boZaI9Lph8IDv3/24g9IxnJP7aQ== + dependencies: + "@electron/asar" "^3.2.1" + "@malept/cross-spawn-promise" "^1.1.0" + debug "^4.3.1" + dir-compare "^3.0.0" + fs-extra "^9.0.1" + minimatch "^3.0.4" + plist "^3.0.4" + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": + version "4.9.1" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz" + integrity sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA== + +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.51.0": + version "8.51.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz" + integrity sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg== + +"@geoapify/geocoder-autocomplete@^2.1.0": + version "2.1.0" + resolved "https://registry.npmjs.org/@geoapify/geocoder-autocomplete/-/geocoder-autocomplete-2.1.0.tgz" + integrity sha512-E1uX3haIp9OD13sScEr+UqT5GRTv0K2ldZzsb44sHaXrk9B5C6GVxsuH0QYdt8hjNNXfUdAXUp3YJomS9O0RAQ== + +"@humanwhocodes/config-array@^0.11.11": + version "0.11.11" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz" + integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@indoorequal/vue-maplibre-gl@^7.6.0": + version "7.6.0" + resolved "https://registry.npmjs.org/@indoorequal/vue-maplibre-gl/-/vue-maplibre-gl-7.6.0.tgz" + integrity sha512-iF4NpuDBJGVF+yJVeQOA39WJNSGGBRDGpX3lCIpso1VSIam3B4qg8eXFwgR6cr2wfu5D6bg9I7aJ0A+QxYrsqg== + +"@intlify/bundle-utils@^2.2.2": + version "2.2.2" + resolved "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-2.2.2.tgz" + integrity sha512-vngkvlIVV8ZJoyC5VqMvqJd2nvsx+qMN7pQjPiPjOrVndeiR7Dlue0k86Q8FsFUzyksW3HJZZi833ldxwbFzTA== + dependencies: + "@intlify/message-compiler" "^9.1.0" + "@intlify/shared" "^9.1.0" + jsonc-eslint-parser "^1.0.1" + source-map "^0.6.1" + yaml-eslint-parser "^0.3.2" + +"@intlify/core-base@9.5.0": + version "9.5.0" + resolved "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.5.0.tgz" + integrity sha512-y3ufM1RJbI/DSmJf3lYs9ACq3S/iRvaSsE3rPIk0MGH7fp+JxU6rdryv/EYcwfcr3Y1aHFlCBir6S391hRZ57w== + dependencies: + "@intlify/message-compiler" "9.5.0" + "@intlify/shared" "9.5.0" + +"@intlify/message-compiler@^9.1.0", "@intlify/message-compiler@9.5.0": + version "9.5.0" + resolved "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.5.0.tgz" + integrity sha512-CAhVNfEZcOVFg0/5MNyt+OFjvs4J/ARjCj2b+54/FvFP0EDJI5lIqMTSDBE7k0atMROSP0SvWCkwu/AZ5xkK1g== + dependencies: + "@intlify/shared" "9.5.0" + source-map-js "^1.0.2" + +"@intlify/shared@^9.1.0", "@intlify/shared@9.5.0": + version "9.5.0" + resolved "https://registry.npmjs.org/@intlify/shared/-/shared-9.5.0.tgz" + integrity sha512-tAxV14LMXZDZbu32XzLMTsowNlgJNmLwWHYzvMUl6L8gvQeoYiZONjY7AUsqZW8TOZDX9lfvF6adPkk9FSRdDA== + +"@intlify/vite-plugin-vue-i18n@^3.3.1": + version "3.4.0" + resolved "https://registry.npmjs.org/@intlify/vite-plugin-vue-i18n/-/vite-plugin-vue-i18n-3.4.0.tgz" + integrity sha512-XXcZBgwJ+3FRu11c4ARoY9N00kElPii0/jNZ49qR045Ka7/YGCwb1Ku14BBlMSEHiHDSjLQknLwrJKSQGVZLyA== + dependencies: + "@intlify/bundle-utils" "^2.2.2" + "@intlify/shared" "^9.1.0" + "@rollup/pluginutils" "^4.1.0" + debug "^4.3.1" + fast-glob "^3.2.5" + source-map "0.6.1" + +"@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@malept/cross-spawn-promise@^1.1.0": + version "1.1.1" + resolved "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz" + integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ== + dependencies: + cross-spawn "^7.0.1" + +"@malept/flatpak-bundler@^0.4.0": + version "0.4.0" + resolved "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz" + integrity sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q== + dependencies: + debug "^4.1.1" + fs-extra "^9.0.0" + lodash "^4.17.15" + tmp-promise "^3.0.2" + +"@mapbox/geojson-rewind@^0.5.2": + 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" + +"@mapbox/jsonlint-lines-primitives@^2.0.2", "@mapbox/jsonlint-lines-primitives@~2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz" + integrity sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ== + +"@mapbox/point-geometry@^0.1.0", "@mapbox/point-geometry@~0.1.0", "@mapbox/point-geometry@0.1.0": + version "0.1.0" + resolved "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz" + integrity sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ== + +"@mapbox/tiny-sdf@^2.0.6": + 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== + +"@mapbox/unitbezier@^0.0.1": + version "0.0.1" + resolved "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz" + integrity sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw== + +"@mapbox/vector-tile@^1.3.1": + 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" + +"@mapbox/whoots-js@^3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz" + integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q== + +"@maplibre/maplibre-gl-style-spec@^20.3.1": + version "20.3.1" + resolved "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.3.1.tgz" + integrity sha512-5ueL4UDitzVtceQ8J4kY+Px3WK+eZTsmGwha3MBKHKqiHvKrjWWwBCIl1K8BuJSc5OFh83uI8IFNoFvQxX2uUw== + dependencies: + "@mapbox/jsonlint-lines-primitives" "~2.0.2" + "@mapbox/unitbezier" "^0.0.1" + json-stringify-pretty-compact "^4.0.0" + minimist "^1.2.8" + quickselect "^2.0.0" + rw "^1.3.3" + sort-object "^3.0.3" + tinyqueue "^3.0.0" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@quasar/app-vite@^1.3.0": + version "1.6.2" + resolved "https://registry.npmjs.org/@quasar/app-vite/-/app-vite-1.6.2.tgz" + integrity sha512-keyJ28cqVtzNLDibQESo1c/DD++6+wqf8nQO6oMRqH6WgYcPs+YO1buRsRMXF9w3ghMCV0/9/Lj8Kyb7S55j6A== + dependencies: + "@quasar/render-ssr-error" "^1.0.1" + "@quasar/vite-plugin" "^1.3.3" + "@rollup/pluginutils" "^4.1.2" + "@types/chrome" "^0.0.208" + "@types/compression" "^1.7.2" + "@types/cordova" "0.0.34" + "@types/express" "^4.17.13" + "@vitejs/plugin-vue" "^2.2.0" + archiver "^5.3.0" + chokidar "^3.5.3" + ci-info "^3.7.1" + compression "^1.7.4" + cross-spawn "^7.0.3" + dot-prop "6.0.1" + elementtree "0.1.7" + esbuild "0.14.51" + express "^4.17.3" + fast-glob "3.2.12" + fs-extra "^11.1.0" + html-minifier "^4.0.0" + inquirer "^8.2.1" + isbinaryfile "^5.0.0" + kolorist "^1.5.1" + lodash "^4.17.21" + minimist "^1.2.6" + open "^8.4.0" + register-service-worker "^1.7.2" + rollup-plugin-visualizer "^5.5.4" + sass "1.32.12" + semver "^7.3.5" + serialize-javascript "^6.0.0" + table "^6.8.0" + vite "^2.9.13" + webpack-merge "^5.8.0" + +"@quasar/extras@^1.16.4": + version "1.16.7" + resolved "https://registry.npmjs.org/@quasar/extras/-/extras-1.16.7.tgz" + integrity sha512-nYF3gVE/si1YJ/D4qmAiHGwxoJIDCvTT8NI6ZmbTMPrur4J8xBKhfhfhyLoQ4k2jJZP6Rx0rUcB71FBNC2C8vQ== + +"@quasar/render-ssr-error@^1.0.1": + version "1.0.2" + resolved "https://registry.npmjs.org/@quasar/render-ssr-error/-/render-ssr-error-1.0.2.tgz" + integrity sha512-Y0wyqYHVxc1IOBH6pRiKMSWDqO1mwQu11Zo8rw4cBdclPOQqFb7f65UuRbk5LfbqlXV2hYvklNcy0SBAOiAQnw== + dependencies: + stack-trace "^1.0.0-pre2" + +"@quasar/vite-plugin@^1.3.3": + version "1.5.0" + resolved "https://registry.npmjs.org/@quasar/vite-plugin/-/vite-plugin-1.5.0.tgz" + integrity sha512-Kd4nFeWd0eAr7e+HMY8Wtmo86RjPZhCi6/bybTAyliFmS8AhZ2/oRTOGnBD9R1C6Ub3JPzC4eWFA20IlHa5A3w== + +"@rollup/pluginutils@^4.1.0", "@rollup/pluginutils@^4.1.2": + version "4.2.1" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz" + integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@types/body-parser@*": + version "1.19.3" + resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.3.tgz" + integrity sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/chrome@^0.0.208": + version "0.0.208" + resolved "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.208.tgz" + integrity sha512-VDU/JnXkF5qaI7WBz14Azpa2VseZTgML0ia/g/B1sr9OfdOnHiH/zZ7P7qCDqxSlkqJh76/bPc8jLFcx8rHJmw== + dependencies: + "@types/filesystem" "*" + "@types/har-format" "*" + +"@types/compression@^1.7.2": + version "1.7.3" + resolved "https://registry.npmjs.org/@types/compression/-/compression-1.7.3.tgz" + integrity sha512-rKquEGjebqizyHNMOpaE/4FdYR5VQiWFeesqYfvJU0seSEyB4625UGhNOO/qIkH10S3wftiV7oefc8WdLZ/gCQ== + dependencies: + "@types/express" "*" + +"@types/connect@*": + version "3.4.36" + resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz" + integrity sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w== + dependencies: + "@types/node" "*" + +"@types/cordova@0.0.34": + version "0.0.34" + resolved "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz" + integrity sha512-rkiiTuf/z2wTd4RxFOb+clE7PF4AEJU0hsczbUdkHHBtkUmpWQpEddynNfJYKYtZFJKbq4F+brfekt1kx85IZA== + +"@types/debug@^4.1.6": + version "4.1.12" + resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/express-serve-static-core@^4.17.33": + version "4.17.37" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz" + integrity sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.18" + resolved "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz" + integrity sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/filesystem@*": + version "0.0.33" + resolved "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.33.tgz" + integrity sha512-2KedRPzwu2K528vFkoXnnWdsG0MtUwPjuA7pRy4vKxlxHEe8qUDZibYHXJKZZr2Cl/ELdCWYqyb/MKwsUuzBWw== + dependencies: + "@types/filewriter" "*" + +"@types/filewriter@*": + version "0.0.30" + resolved "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.30.tgz" + integrity sha512-lB98tui0uxc7erbj0serZfJlHKLNJHwBltPnbmO1WRpL5T325GOHRiQfr2E29V2q+S1brDO63Fpdt6vb3bES9Q== + +"@types/fs-extra@^9.0.11", "@types/fs-extra@9.0.13": + version "9.0.13" + resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz" + integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== + dependencies: + "@types/node" "*" + +"@types/geojson-vt@3.2.5": + version "3.2.5" + resolved "https://registry.npmjs.org/@types/geojson-vt/-/geojson-vt-3.2.5.tgz" + integrity sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g== + dependencies: + "@types/geojson" "*" + +"@types/geojson@*", "@types/geojson@^7946.0.14": + version "7946.0.14" + resolved "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz" + integrity sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg== + +"@types/har-format@*": + version "1.2.13" + resolved "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.13.tgz" + integrity sha512-PwBsCBD3lDODn4xpje3Y1di0aDJp4Ww7aSfMRVw6ysnxD4I7Wmq2mBkSKaDtN403hqH5sp6c9xQUvFYY3+lkBg== + +"@types/http-cache-semantics@*": + version "4.0.4" + resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + +"@types/http-errors@*": + version "2.0.2" + resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz" + integrity sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg== + +"@types/json-schema@^7.0.9": + version "7.0.13" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz" + integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/mapbox__point-geometry@*", "@types/mapbox__point-geometry@^0.1.4": + version "0.1.4" + resolved "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz" + integrity sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA== + +"@types/mapbox__vector-tile@^1.3.4": + version "1.3.4" + resolved "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz" + integrity sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg== + dependencies: + "@types/geojson" "*" + "@types/mapbox__point-geometry" "*" + "@types/pbf" "*" + +"@types/mime@*", "@types/mime@^1": + version "1.3.3" + resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.3.tgz" + integrity sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg== + +"@types/ms@*": + version "0.7.34" + resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + +"@types/node@*": + version "20.8.3" + resolved "https://registry.npmjs.org/@types/node/-/node-20.8.3.tgz" + integrity sha512-jxiZQFpb+NlH5kjW49vXxvxTjeeqlbsnTAdBTKpzEdPs9itay7MscYXz3Fo9VYFEsfQ6LJFitHad3faerLAjCw== + +"@types/node@^18.11.18": + version "18.18.13" + resolved "https://registry.npmjs.org/@types/node/-/node-18.18.13.tgz" + integrity sha512-vXYZGRrSCreZmq1rEjMRLXJhiy8MrIeVasx+PCVlP414N7CJLHnMf+juVvjdprHyH+XRy3zKZLHeNueOpJCn0g== + dependencies: + undici-types "~5.26.4" + +"@types/pbf@*", "@types/pbf@^3.0.5": + version "3.0.5" + resolved "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz" + integrity sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA== + +"@types/plist@^3.0.1": + version "3.0.5" + resolved "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz" + integrity sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA== + dependencies: + "@types/node" "*" + xmlbuilder ">=11.0.1" + +"@types/qs@*": + version "6.9.8" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz" + integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== + +"@types/range-parser@*": + version "1.2.5" + resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.5.tgz" + integrity sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA== + +"@types/responselike@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== + dependencies: + "@types/node" "*" + +"@types/semver@^7.3.12": + version "7.5.3" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz" + integrity sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw== + +"@types/send@*": + version "0.17.2" + resolved "https://registry.npmjs.org/@types/send/-/send-0.17.2.tgz" + integrity sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-static@*": + version "1.15.3" + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.3.tgz" + integrity sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg== + dependencies: + "@types/http-errors" "*" + "@types/mime" "*" + "@types/node" "*" + +"@types/supercluster@^7.1.3": + version "7.1.3" + resolved "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz" + integrity sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA== + dependencies: + "@types/geojson" "*" + +"@types/verror@^1.10.3": + version "1.10.10" + resolved "https://registry.npmjs.org/@types/verror/-/verror-1.10.10.tgz" + integrity sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg== + +"@types/web-bluetooth@^0.0.20": + version "0.0.20" + resolved "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz" + integrity sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow== + +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + +"@typescript-eslint/eslint-plugin@^5.10.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.10.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + dependencies: + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + dependencies: + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@vitejs/plugin-vue@^2.2.0": + version "2.3.4" + resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz" + integrity sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg== + +"@vue/compiler-core@3.3.4": + version "3.3.4" + resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz" + integrity sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g== + dependencies: + "@babel/parser" "^7.21.3" + "@vue/shared" "3.3.4" + estree-walker "^2.0.2" + source-map-js "^1.0.2" + +"@vue/compiler-dom@3.3.4": + version "3.3.4" + resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz" + integrity sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w== + dependencies: + "@vue/compiler-core" "3.3.4" + "@vue/shared" "3.3.4" + +"@vue/compiler-sfc@2.7.14": + version "2.7.14" + resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz" + integrity sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA== + dependencies: + "@babel/parser" "^7.18.4" + postcss "^8.4.14" + source-map "^0.6.1" + +"@vue/compiler-sfc@3.3.4": + version "3.3.4" + resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz" + integrity sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ== + dependencies: + "@babel/parser" "^7.20.15" + "@vue/compiler-core" "3.3.4" + "@vue/compiler-dom" "3.3.4" + "@vue/compiler-ssr" "3.3.4" + "@vue/reactivity-transform" "3.3.4" + "@vue/shared" "3.3.4" + estree-walker "^2.0.2" + magic-string "^0.30.0" + postcss "^8.1.10" + source-map-js "^1.0.2" + +"@vue/compiler-ssr@3.3.4": + version "3.3.4" + resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz" + integrity sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ== + dependencies: + "@vue/compiler-dom" "3.3.4" + "@vue/shared" "3.3.4" + +"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.5.0": + version "6.5.0" + resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz" + integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q== + +"@vue/reactivity-transform@3.3.4": + version "3.3.4" + resolved "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz" + integrity sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw== + dependencies: + "@babel/parser" "^7.20.15" + "@vue/compiler-core" "3.3.4" + "@vue/shared" "3.3.4" + estree-walker "^2.0.2" + magic-string "^0.30.0" + +"@vue/reactivity@3.3.4": + version "3.3.4" + resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz" + integrity sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ== + dependencies: + "@vue/shared" "3.3.4" + +"@vue/runtime-core@3.3.4": + version "3.3.4" + resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz" + integrity sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA== + dependencies: + "@vue/reactivity" "3.3.4" + "@vue/shared" "3.3.4" + +"@vue/runtime-dom@3.3.4": + version "3.3.4" + resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz" + integrity sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ== + dependencies: + "@vue/runtime-core" "3.3.4" + "@vue/shared" "3.3.4" + csstype "^3.1.1" + +"@vue/server-renderer@3.3.4": + version "3.3.4" + resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz" + integrity sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ== + dependencies: + "@vue/compiler-ssr" "3.3.4" + "@vue/shared" "3.3.4" + +"@vue/shared@3.3.4": + version "3.3.4" + resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz" + integrity sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ== + +"@vueuse/core@^10.7.0": + version "10.7.0" + resolved "https://registry.npmjs.org/@vueuse/core/-/core-10.7.0.tgz" + integrity sha512-4EUDESCHtwu44ZWK3Gc/hZUVhVo/ysvdtwocB5vcauSV4B7NiGY5972WnsojB3vRNdxvAt7kzJWE2h9h7C9d5w== + dependencies: + "@types/web-bluetooth" "^0.0.20" + "@vueuse/metadata" "10.7.0" + "@vueuse/shared" "10.7.0" + vue-demi ">=0.14.6" + +"@vueuse/metadata@10.7.0": + version "10.7.0" + resolved "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.7.0.tgz" + integrity sha512-GlaH7tKP2iBCZ3bHNZ6b0cl9g0CJK8lttkBNUX156gWvNYhTKEtbweWLm9rxCPIiwzYcr/5xML6T8ZUEt+DkvA== + +"@vueuse/shared@10.7.0": + version "10.7.0" + resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-10.7.0.tgz" + integrity sha512-kc00uV6CiaTdc3i1CDC4a3lBxzaBE9AgYNtFN87B5OOscqeWElj/uza8qVDmk7/U8JbqoONLbtqiLJ5LGRuqlw== + dependencies: + vue-demi ">=0.14.6" + +"@xmldom/xmldom@^0.8.8": + version "0.8.10" + resolved "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz" + integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== + +"7zip-bin@~5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz" + integrity sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A== + +accepts@~1.3.5, accepts@~1.3.8: + 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== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.2.0, acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^7.1.1, acorn@^7.4.1: + version "7.4.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.9.0: + version "8.10.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + +agent-base@6: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ajv-keywords@^3.4.1: + version "3.5.2" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + 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" + +ajv@^8.0.1: + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +app-builder-bin@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz" + integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA== + +app-builder-lib@24.9.1: + version "24.9.1" + resolved "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.9.1.tgz" + integrity sha512-Q1nYxZcio4r+W72cnIRVYofEAyjBd3mG47o+zms8HlD51zWtA/YxJb01Jei5F+jkWhge/PTQK+uldsPh6d0/4g== + dependencies: + "@develar/schema-utils" "~2.6.5" + "@electron/notarize" "2.1.0" + "@electron/osx-sign" "1.0.5" + "@electron/universal" "1.4.1" + "@malept/flatpak-bundler" "^0.4.0" + "@types/fs-extra" "9.0.13" + "7zip-bin" "~5.2.0" + async-exit-hook "^2.0.1" + bluebird-lst "^1.0.9" + builder-util "24.8.1" + builder-util-runtime "9.2.3" + chromium-pickle-js "^0.2.0" + debug "^4.3.4" + ejs "^3.1.8" + electron-publish "24.8.1" + form-data "^4.0.0" + fs-extra "^10.1.0" + hosted-git-info "^4.1.0" + is-ci "^3.0.0" + isbinaryfile "^5.0.0" + js-yaml "^4.1.0" + lazy-val "^1.0.5" + minimatch "^5.1.1" + read-config-file "6.3.2" + sanitize-filename "^1.6.3" + semver "^7.3.8" + tar "^6.1.12" + temp-file "^3.4.0" + +archiver-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz" + integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== + dependencies: + glob "^7.1.4" + graceful-fs "^4.2.0" + lazystream "^1.0.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^2.0.0" + +archiver-utils@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz" + integrity sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw== + dependencies: + glob "^7.2.3" + graceful-fs "^4.2.0" + lazystream "^1.0.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^3.6.0" + +archiver@^5.3.0: + version "5.3.2" + resolved "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz" + integrity sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw== + dependencies: + archiver-utils "^2.1.0" + async "^3.2.4" + buffer-crc32 "^0.2.1" + readable-stream "^3.6.0" + readdir-glob "^1.1.2" + tar-stream "^2.2.0" + zip-stream "^4.1.0" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-exit-hook@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz" + integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== + +async@^3.2.3, async@^3.2.4: + version "3.2.4" + resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +author-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz" + integrity sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g== + +autoprefixer@^10.4.2: + version "10.4.16" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz" + integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ== + dependencies: + browserslist "^4.21.10" + caniuse-lite "^1.0.30001538" + fraction.js "^4.3.6" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +axios@^1.2.1: + version "1.5.1" + resolved "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz" + integrity sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1, base64-js@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.0.3, bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bluebird-lst@^1.0.9: + version "1.0.9" + resolved "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz" + integrity sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw== + dependencies: + bluebird "^3.5.5" + +bluebird@^3.1.1, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +boolean@^3.0.1: + version "3.2.0" + resolved "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz" + integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.21.10: + version "4.22.1" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz" + integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== + dependencies: + caniuse-lite "^1.0.30001541" + electron-to-chromium "^1.4.535" + node-releases "^2.0.13" + update-browserslist-db "^1.0.13" + +buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer-equal@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz" + integrity sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.1.0, buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builder-util-runtime@9.2.3: + version "9.2.3" + resolved "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.3.tgz" + integrity sha512-FGhkqXdFFZ5dNC4C+yuQB9ak311rpGAw+/ASz8ZdxwODCv1GGMWgLDeofRkdi0F3VCHQEWy/aXcJQozx2nOPiw== + dependencies: + debug "^4.3.4" + sax "^1.2.4" + +builder-util@24.8.1: + version "24.8.1" + resolved "https://registry.npmjs.org/builder-util/-/builder-util-24.8.1.tgz" + integrity sha512-ibmQ4BnnqCnJTNrdmdNlnhF48kfqhNzSeqFMXHLIl+o9/yhn6QfOaVrloZ9YUu3m0k3rexvlT5wcki6LWpjTZw== + dependencies: + "@types/debug" "^4.1.6" + "7zip-bin" "~5.2.0" + app-builder-bin "4.0.0" + bluebird-lst "^1.0.9" + builder-util-runtime "9.2.3" + chalk "^4.1.2" + cross-spawn "^7.0.3" + debug "^4.3.4" + fs-extra "^10.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-ci "^3.0.0" + js-yaml "^4.1.0" + source-map-support "^0.5.19" + stat-mode "^1.0.0" + temp-file "^3.4.0" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +bytewise-core@^1.2.2: + 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" + +bytewise@^1.1.0: + 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" + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + 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" + +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz" + integrity sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w== + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541: + version "1.0.30001546" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz" + integrity sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw== + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0": + version "3.5.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + 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" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chromium-pickle-js@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz" + integrity sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw== + +ci-info@^3.2.0, ci-info@^3.7.1: + version "3.9.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +clean-css@^4.2.1: + version "4.2.4" + resolved "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz" + integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== + dependencies: + source-map "~0.6.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.9.1" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz" + integrity sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ== + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.19.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +compare-version@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz" + integrity sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A== + +compress-commons@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz" + integrity sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^4.0.2" + normalize-path "^3.0.0" + readable-stream "^3.6.0" + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +config-file-ts@^0.2.4: + version "0.2.4" + resolved "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.4.tgz" + integrity sha512-cKSW0BfrSaAUnxpgvpXPLaaW/umg4bqg4k3GO1JqlRfpx+d5W0GDXznCMkWotJQek5Mmz1MJVChQnz3IVaeMZQ== + dependencies: + glob "^7.1.6" + typescript "^4.0.2" + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +core-util-is@~1.0.0, core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +crc@^3.8.0: + version "3.8.0" + resolved "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + +crc32-stream@^4.0.2: + version "4.0.3" + resolved "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz" + integrity sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw== + dependencies: + crc-32 "^1.2.0" + readable-stream "^3.4.0" + +cross-spawn-windows-exe@^1.1.0, cross-spawn-windows-exe@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/cross-spawn-windows-exe/-/cross-spawn-windows-exe-1.2.0.tgz" + integrity sha512-mkLtJJcYbDCxEG7Js6eUnUNndWjyUZwJ3H7bErmmtOYU/Zb99DyUkpamuIZE0b3bhmJyZ7D90uS6f+CGxRRjOw== + dependencies: + "@malept/cross-spawn-promise" "^1.1.0" + is-wsl "^2.2.0" + which "^2.0.2" + +cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +csstype@^3.1.0, csstype@^3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + +dayjs@^1.11.10: + version "1.11.10" + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz" + integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== + +debug@^2.2.0: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-is@^0.1.3: + 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== + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +define-data-property@^1.0.1: + version "1.1.1" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3: + version "1.2.1" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +dir-compare@^3.0.0: + version "3.3.0" + resolved "https://registry.npmjs.org/dir-compare/-/dir-compare-3.3.0.tgz" + integrity sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg== + dependencies: + buffer-equal "^1.0.0" + minimatch "^3.0.4" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dmg-builder@24.9.1: + version "24.9.1" + resolved "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.9.1.tgz" + integrity sha512-huC+O6hvHd24Ubj3cy2GMiGLe2xGFKN3klqVMLAdcbB6SWMd1yPSdZvV8W1O01ICzCCRlZDHiv4VrNUgnPUfbQ== + dependencies: + app-builder-lib "24.9.1" + builder-util "24.8.1" + builder-util-runtime "9.2.3" + fs-extra "^10.1.0" + iconv-lite "^0.6.2" + js-yaml "^4.1.0" + optionalDependencies: + dmg-license "^1.0.11" + +dmg-license@^1.0.11: + version "1.0.11" + resolved "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz" + integrity sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q== + dependencies: + "@types/plist" "^3.0.1" + "@types/verror" "^1.10.3" + ajv "^6.10.0" + crc "^3.8.0" + iconv-corefoundation "^1.1.7" + plist "^3.0.4" + smart-buffer "^4.0.2" + verror "^1.10.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dot-prop@6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz" + integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== + dependencies: + is-obj "^2.0.0" + +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@^16.3.1: + version "16.3.1" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz" + integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== + +dotenv@^9.0.2: + version "9.0.2" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz" + integrity sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg== + +earcut@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/earcut/-/earcut-3.0.0.tgz" + integrity sha512-41Fs7Q/PLq1SDbqjsgcY7GA42T0jvaCNGXgGtsNdvg+Yv8eIu06bxv4/PoREkZ9nMDNwnUSG9OFB9+yv8eKhDg== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +ejs@^3.1.8: + version "3.1.9" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + dependencies: + jake "^10.8.5" + +electron-builder@^24.3.0: + version "24.9.1" + resolved "https://registry.npmjs.org/electron-builder/-/electron-builder-24.9.1.tgz" + integrity sha512-v7BuakDuY6sKMUYM8mfQGrwyjBpZ/ObaqnenU0H+igEL10nc6ht049rsCw2HghRBdEwJxGIBuzs3jbEhNaMDmg== + dependencies: + app-builder-lib "24.9.1" + builder-util "24.8.1" + builder-util-runtime "9.2.3" + chalk "^4.1.2" + dmg-builder "24.9.1" + fs-extra "^10.1.0" + is-ci "^3.0.0" + lazy-val "^1.0.5" + read-config-file "6.3.2" + simple-update-notifier "2.0.0" + yargs "^17.6.2" + +electron-packager@^17.1.1: + version "17.1.2" + resolved "https://registry.npmjs.org/electron-packager/-/electron-packager-17.1.2.tgz" + integrity sha512-XofXdikjYI7MVBcnXeoOvRR+yFFFHOLs3J7PF5KYQweigtgLshcH4W660PsvHr4lYZ03JBpLyEcUB8DzHZ+BNw== + dependencies: + "@electron/asar" "^3.2.1" + "@electron/get" "^2.0.0" + "@electron/notarize" "^1.2.3" + "@electron/osx-sign" "^1.0.5" + "@electron/universal" "^1.3.2" + cross-spawn-windows-exe "^1.2.0" + debug "^4.0.1" + extract-zip "^2.0.0" + filenamify "^4.1.0" + fs-extra "^11.1.0" + galactus "^1.0.0" + get-package-info "^1.0.0" + junk "^3.1.0" + parse-author "^2.0.0" + plist "^3.0.0" + rcedit "^3.0.1" + resolve "^1.1.6" + semver "^7.1.3" + yargs-parser "^21.1.1" + +electron-publish@24.8.1: + version "24.8.1" + resolved "https://registry.npmjs.org/electron-publish/-/electron-publish-24.8.1.tgz" + integrity sha512-IFNXkdxMVzUdweoLJNXSupXkqnvgbrn3J4vognuOY06LaS/m0xvfFYIf+o1CM8if6DuWYWoQFKPcWZt/FUjZPw== + dependencies: + "@types/fs-extra" "^9.0.11" + builder-util "24.8.1" + builder-util-runtime "9.2.3" + chalk "^4.1.2" + fs-extra "^10.1.0" + lazy-val "^1.0.5" + mime "^2.5.2" + +electron-to-chromium@^1.4.535: + version "1.4.544" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.544.tgz" + integrity sha512-54z7squS1FyFRSUqq/knOFSptjjogLZXbKcYk3B0qkE1KZzvqASwRZnY2KzZQJqIYLVD38XZeoiMRflYSwyO4w== + +electron@^27.0.3: + version "27.1.2" + resolved "https://registry.npmjs.org/electron/-/electron-27.1.2.tgz" + integrity sha512-Dy6BUuGLiIJv+zfsXwr78TV2TNppi24rXF4PIIS+OjDblEKdkI9r1iM8JUd3/x3sbGUy5mdLMSPhvmu//IhkgA== + dependencies: + "@electron/get" "^2.0.0" + "@types/node" "^18.11.18" + extract-zip "^2.0.1" + +elementtree@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz" + integrity sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg== + dependencies: + sax "1.1.4" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + 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== + dependencies: + once "^1.4.0" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es6-error@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +esbuild-android-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz" + integrity sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ== + +esbuild-android-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz" + integrity sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A== + +esbuild-darwin-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz" + integrity sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA== + +esbuild-darwin-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz" + integrity sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow== + +esbuild-freebsd-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz" + integrity sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g== + +esbuild-freebsd-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz" + integrity sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg== + +esbuild-linux-32@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz" + integrity sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w== + +esbuild-linux-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz" + integrity sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA== + +esbuild-linux-arm@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz" + integrity sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg== + +esbuild-linux-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz" + integrity sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw== + +esbuild-linux-mips64le@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz" + integrity sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A== + +esbuild-linux-ppc64le@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz" + integrity sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ== + +esbuild-linux-riscv64@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz" + integrity sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA== + +esbuild-linux-s390x@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz" + integrity sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw== + +esbuild-netbsd-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz" + integrity sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A== + +esbuild-openbsd-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz" + integrity sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA== + +esbuild-sunos-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz" + integrity sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA== + +esbuild-windows-32@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz" + integrity sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg== + +esbuild-windows-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz" + integrity sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA== + +esbuild-windows-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz" + integrity sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g== + +esbuild@^0.14.27, esbuild@0.14.51: + version "0.14.51" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.51.tgz" + integrity sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw== + optionalDependencies: + esbuild-android-64 "0.14.51" + esbuild-android-arm64 "0.14.51" + esbuild-darwin-64 "0.14.51" + esbuild-darwin-arm64 "0.14.51" + esbuild-freebsd-64 "0.14.51" + esbuild-freebsd-arm64 "0.14.51" + esbuild-linux-32 "0.14.51" + esbuild-linux-64 "0.14.51" + esbuild-linux-arm "0.14.51" + esbuild-linux-arm64 "0.14.51" + esbuild-linux-mips64le "0.14.51" + esbuild-linux-ppc64le "0.14.51" + esbuild-linux-riscv64 "0.14.51" + esbuild-linux-s390x "0.14.51" + esbuild-netbsd-64 "0.14.51" + esbuild-openbsd-64 "0.14.51" + esbuild-sunos-64 "0.14.51" + esbuild-windows-32 "0.14.51" + esbuild-windows-64 "0.14.51" + esbuild-windows-arm64 "0.14.51" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^8.1.0: + version "8.10.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz" + integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== + +eslint-plugin-vue@^9.0.0: + version "9.17.0" + resolved "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz" + integrity sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + natural-compare "^1.4.0" + nth-check "^2.1.1" + postcss-selector-parser "^6.0.13" + semver "^7.5.4" + vue-eslint-parser "^9.3.1" + xml-name-validator "^4.0.0" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.1.1: + version "7.2.2" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.10.0: + version "8.51.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz" + integrity sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.51.0" + "@humanwhocodes/config-array" "^0.11.11" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^6.0.0: + version "6.2.1" + resolved "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz" + integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== + dependencies: + acorn "^7.1.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.1.0" + +espree@^9.3.1, espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.0, esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^2.0.1, estree-walker@^2.0.2: + 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== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +express@^4.17.3: + version "4.18.2" + resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + 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" + +extend-shallow@^3.0.0: + 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" + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extract-zip@^2.0.0, extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + 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== + +fast-glob@^3.2.5, fast-glob@^3.2.9: + version "3.3.1" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + 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" + +fast-glob@3.2.12: + version "3.2.12" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + 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" + +fast-json-stable-stringify@^2.0.0: + 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== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz" + integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== + +filenamify@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz" + integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== + dependencies: + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.1" + trim-repeated "^1.0.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.1.1" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz" + integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flatted@^3.2.9: + version "3.2.9" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + +flora-colossus@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/flora-colossus/-/flora-colossus-2.0.0.tgz" + integrity sha512-dz4HxH6pOvbUzZpZ/yXhafjbR2I8cenK5xL0KtBFb7U2ADsR+OwXifnxZjij/pZWF775uSCMzWVd+jDik2H2IA== + dependencies: + debug "^4.3.4" + fs-extra "^10.1.0" + +follow-redirects@^1.15.0: + version "1.15.3" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz" + integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.3.6: + version "4.3.6" + resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz" + integrity sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-constants@^1.0.0: + 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== + +fs-extra@^10.0.0: + 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== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^10.1.0: + 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== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^11.1.0: + version "11.1.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz" + integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.0: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.1, function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +galactus@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/galactus/-/galactus-1.0.0.tgz" + integrity sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ== + dependencies: + debug "^4.3.4" + flora-colossus "^2.0.0" + fs-extra "^10.1.0" + +geojson-vt@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/geojson-vt/-/geojson-vt-4.0.2.tgz" + integrity sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-package-info@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/get-package-info/-/get-package-info-1.0.0.tgz" + integrity sha512-SCbprXGAPdIhKAXiG+Mk6yeoFH61JlYunqdFQFHDtLjJlDjFf6x07dsS8acO+xWt52jpdVo49AlVDnUVK1sDNw== + dependencies: + bluebird "^3.1.1" + debug "^2.2.0" + lodash.get "^4.0.0" + read-pkg-up "^2.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-value@^2.0.2, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== + +gl-matrix@^3.4.3: + version "3.4.3" + resolved "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz" + integrity sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" + +global-agent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz" + integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q== + dependencies: + boolean "^3.0.1" + es6-error "^4.1.1" + matcher "^3.0.0" + roarr "^2.15.3" + semver "^7.3.2" + serialize-error "^7.0.1" + +global-prefix@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz" + integrity sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA== + dependencies: + ini "^4.1.3" + kind-of "^6.0.3" + which "^4.0.0" + +globals@^13.19.0: + version "13.23.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz" + integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@^11.8.5: + version "11.8.6" + resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + 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" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + 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== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/has/-/has-1.0.4.tgz" + integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== + +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +html-minifier@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz" + integrity sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig== + dependencies: + camel-case "^3.0.0" + clean-css "^4.2.1" + commander "^2.19.0" + he "^1.2.0" + param-case "^2.1.1" + relateurl "^0.2.7" + uglify-js "^3.5.1" + +http-cache-semantics@^4.0.0: + 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== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +https-proxy-agent@^5.0.1: + 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== + dependencies: + agent-base "6" + debug "4" + +iconv-corefoundation@^1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz" + integrity sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ== + dependencies: + cli-truncate "^2.1.0" + node-addon-api "^1.6.3" + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.12, ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2, inherits@2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^4.1.3: + version "4.1.3" + resolved "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz" + integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg== + +inquirer@^8.2.1: + version "8.2.6" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz" + integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== + 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 "^6.0.1" + +ipaddr.js@1.9.1: + 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== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-ci@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== + dependencies: + ci-info "^3.2.0" + +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + dependencies: + has "^1.0.3" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extendable@^1.0.1: + 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" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + 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== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + 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== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + 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== + dependencies: + isobject "^3.0.1" + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isbinaryfile@^4.0.8: + version "4.0.10" + resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz" + integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== + +isbinaryfile@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.0.tgz" + integrity sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isexe@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz" + integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +js-marker-clusterer@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/js-marker-clusterer/-/js-marker-clusterer-1.0.0.tgz" + integrity sha512-NZrs6UnoRd6Qd8dXZ4rgIxIO7is2Oa22Mp3XuczmHW+eqQYo03BoHXEzDGzpDHlFH+iuxWHFz5e7zQwoESbQIw== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-schema-traverse@^0.4.1: + 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== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stringify-pretty-compact@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz" + integrity sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^2.2.0: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-eslint-parser@^1.0.1: + version "1.4.1" + resolved "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-1.4.1.tgz" + integrity sha512-hXBrvsR1rdjmB2kQmUjf1rEIa+TqHBGMge8pwi++C+Si1ad7EjZrJcpgwym+QGK/pqTx+K7keFAtLlVNdLRJOg== + dependencies: + acorn "^7.4.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^1.3.0" + espree "^6.0.0" + semver "^6.3.0" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +junk@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz" + integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ== + +jwt-decode@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz" + integrity sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA== + +kdbush@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz" + integrity sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA== + +keyv@^4.0.0, keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kolorist@^1.5.1: + version "1.8.0" + resolved "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz" + integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== + +lazy-val@^1.0.4, lazy-val@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz" + integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q== + +lazystream@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz" + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== + dependencies: + readable-stream "^2.0.5" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz" + integrity sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ== + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz" + integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz" + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== + +lodash.get@^4.0.0: + version "4.4.2" + resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz" + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz" + integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== + +lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz" + integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@^0.30.0: + version "0.30.4" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.4.tgz" + integrity sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +maplibre-gl@^4.7.1: + version "4.7.1" + resolved "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.7.1.tgz" + integrity sha512-lgL7XpIwsgICiL82ITplfS7IGwrB1OJIw/pCvprDp2dhmSSEBgmPzYRvwYYYvJGJD7fxUv1Tvpih4nZ6VrLuaA== + 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" "^20.3.1" + "@types/geojson" "^7946.0.14" + "@types/geojson-vt" "3.2.5" + "@types/mapbox__point-geometry" "^0.1.4" + "@types/mapbox__vector-tile" "^1.3.4" + "@types/pbf" "^3.0.5" + "@types/supercluster" "^7.1.3" + earcut "^3.0.0" + geojson-vt "^4.0.2" + gl-matrix "^3.4.3" + global-prefix "^4.0.0" + kdbush "^4.0.2" + murmurhash-js "^1.0.0" + pbf "^3.3.0" + potpack "^2.0.0" + quickselect "^3.0.0" + supercluster "^8.0.1" + tinyqueue "^3.0.0" + vt-pbf "^3.1.3" + +matcher@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz" + integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== + dependencies: + escape-string-regexp "^4.0.0" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@^2.5.2: + version "2.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + 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== + +minimatch@^3.0.4: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.0.5: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1, minimatch@^5.1.0, minimatch@^5.1.1: + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.6, minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +murmurhash-js@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz" + integrity sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + +node-addon-api@^1.6.3: + version "1.7.2" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz" + integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== + +node-releases@^2.0.13: + 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== + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +nth-check@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.4.0: + version "8.4.2" + resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + 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" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^5.0.0: + 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== + dependencies: + p-limit "^3.0.2" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +param-case@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz" + integrity sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w== + dependencies: + no-case "^2.2.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-author@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz" + integrity sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw== + dependencies: + author-regex "^1.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" + integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== + dependencies: + error-ex "^1.2.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz" + integrity sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ== + dependencies: + pify "^2.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbf@^3.2.1, pbf@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz" + integrity sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q== + dependencies: + ieee754 "^1.1.12" + resolve-protobuf-schema "^2.1.0" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +plist@^3.0.0, plist@^3.0.4, plist@^3.0.5: + version "3.1.0" + resolved "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz" + integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ== + dependencies: + "@xmldom/xmldom" "^0.8.8" + base64-js "^1.5.1" + xmlbuilder "^15.1.1" + +postcss-selector-parser@^6.0.13: + 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== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.1.10, postcss@^8.4.13, postcss@^8.4.14: + version "8.4.41" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz" + integrity sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.1" + source-map-js "^1.2.0" + +potpack@^2.0.0: + 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== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier@^2.5.1: + version "2.8.8" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +process-nextick-args@~2.0.0: + 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== + +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +protocol-buffers-schema@^3.3.1: + 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== + +proxy-addr@~2.0.7: + 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== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +quasar@^2.6.0: + version "2.12.7" + resolved "https://registry.npmjs.org/quasar/-/quasar-2.12.7.tgz" + integrity sha512-JF2rb8u1RcXPpiaDh/RnO/5rFx7kABDMov0WnRI3acJ5s4TD2FyPrCmS7VgleLubDYRSsSAontJ6EijGz4BHig== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +quickselect@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz" + integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw== + +quickselect@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz" + integrity sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rcedit@^3.0.1: + version "3.1.0" + resolved "https://registry.npmjs.org/rcedit/-/rcedit-3.1.0.tgz" + integrity sha512-WRlRdY1qZbu1L11DklT07KuHfRk42l0NFFJdaExELEu4fEQ982bP5Z6OWGPj/wLLIuKRQDCxZJGAwoFsxhZhNA== + dependencies: + cross-spawn-windows-exe "^1.1.0" + +read-config-file@6.3.2: + version "6.3.2" + resolved "https://registry.npmjs.org/read-config-file/-/read-config-file-6.3.2.tgz" + integrity sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q== + dependencies: + config-file-ts "^0.2.4" + dotenv "^9.0.2" + dotenv-expand "^5.1.0" + js-yaml "^4.1.0" + json5 "^2.2.0" + lazy-val "^1.0.4" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz" + integrity sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w== + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz" + integrity sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA== + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readable-stream@^2.0.0: + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + 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" + +readable-stream@^2.0.5: + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + 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" + +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdir-glob@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz" + integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== + dependencies: + minimatch "^5.1.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +register-service-worker@^1.7.2: + version "1.7.2" + resolved "https://registry.npmjs.org/register-service-worker/-/register-service-worker-1.7.2.tgz" + integrity sha512-CiD3ZSanZqcMPRhtfct5K9f7i3OLCcBBWsJjLh1gW9RO/nS94sVzY59iS+fgYBOBqaBpf4EzfqUF3j9IG+xo8A== + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + 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== + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-protobuf-schema@^2.1.0: + 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" + +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.22.0: + version "1.22.8" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +roarr@^2.15.3: + version "2.15.4" + resolved "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz" + integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== + dependencies: + boolean "^3.0.1" + detect-node "^2.0.4" + globalthis "^1.0.1" + json-stringify-safe "^5.0.1" + semver-compare "^1.0.0" + sprintf-js "^1.1.2" + +rollup-plugin-visualizer@^5.5.4: + version "5.9.2" + resolved "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.2.tgz" + integrity sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A== + dependencies: + open "^8.4.0" + picomatch "^2.3.1" + source-map "^0.7.4" + yargs "^17.5.1" + +"rollup@>=2.59.0 <2.78.0": + version "2.77.3" + resolved "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz" + integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g== + optionalDependencies: + fsevents "~2.3.2" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rw@^1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz" + integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== + +rxjs@^7.5.5: + version "7.8.1" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +safe-buffer@^5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sanitize-filename@^1.6.3: + version "1.6.3" + resolved "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" + integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== + dependencies: + truncate-utf8-bytes "^1.0.0" + +sass@1.32.12: + version "1.32.12" + resolved "https://registry.npmjs.org/sass/-/sass-1.32.12.tgz" + integrity sha512-zmXn03k3hN0KaiVTjohgkg98C3UowhL1/VSGdj4/VAAiMKGQOE80PFPxFP2Kyq0OUskPKcY5lImkhBKEHlypJA== + dependencies: + chokidar ">=3.0.0 <4.0.0" + +sax@^1.2.4: + version "1.3.0" + resolved "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz" + integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== + +sax@1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz" + integrity sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg== + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz" + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== + +semver@^6.2.0: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^6.3.0: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.1.3, semver@^7.3.2, semver@^7.3.5, semver@^7.3.6, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: + version "7.5.4" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +"semver@2 || 3 || 4 || 5": + version "5.7.2" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +send@0.18.0: + version "0.18.0" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-error@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz" + integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== + dependencies: + type-fest "^0.13.1" + +serialize-javascript@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-value@^2.0.1: + 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" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-update-notifier@2.0.0: + 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== + dependencies: + semver "^7.5.3" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +smart-buffer@^4.0.2: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +sort-asc@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz" + integrity sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA== + +sort-desc@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz" + integrity sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w== + +sort-object@^3.0.3: + 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" + +source-map-js@^1.0.2, source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + +source-map-support@^0.5.19: + 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== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.4: + version "0.7.4" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.16" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz" + integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + +split-string@^3.0.1: + 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" + +sprintf-js@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + +stack-trace@^1.0.0-pre2: + version "1.0.0-pre2" + resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-1.0.0-pre2.tgz" + integrity sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A== + +startaudiocontext@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/startaudiocontext/-/startaudiocontext-1.2.1.tgz" + integrity sha512-ooOQhOAoCwzMIRwWd9j7xF8kAMo1Wv7Zfw+q6dWDW5gxJUKx15HJXWDg89GMDqfdle9xsqPv+uioneX+bI643g== + +stat-mode@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz" + integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +string_decoder@^1.1.1: + 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== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-outer@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== + dependencies: + escape-string-regexp "^1.0.2" + +sumchecker@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz" + integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== + dependencies: + debug "^4.1.0" + +supercluster@^8.0.1: + 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" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + 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== + +table@^6.8.0: + version "6.8.1" + resolved "https://registry.npmjs.org/table/-/table-6.8.1.tgz" + integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tar-stream@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + 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" + +tar@^6.1.12: + version "6.2.0" + resolved "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== + 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" + +temp-file@^3.4.0: + version "3.4.0" + resolved "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz" + integrity sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg== + dependencies: + async-exit-hook "^2.0.1" + fs-extra "^10.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tinyqueue@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz" + integrity sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g== + +tmp-promise@^3.0.2: + version "3.0.3" + resolved "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz" + integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== + dependencies: + tmp "^0.2.0" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@^0.2.0: + version "0.2.1" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +to-regex-range@^5.0.1: + 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== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tone@^13.8.25: + version "13.8.34" + resolved "https://registry.npmjs.org/tone/-/tone-13.8.34.tgz" + integrity sha512-sFIYee0CO5lDcnC/RwIPiPMOIZCMEk35AaxF0Q64q7SE1BL+i+efYR6vrD+peDGrswXJ+D3bTmci2wCy+omx+Q== + +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz" + integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== + dependencies: + escape-string-regexp "^1.0.2" + +truncate-utf8-bytes@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" + integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== + dependencies: + utf8-byte-length "^1.0.1" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0: + version "2.6.2" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + 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== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typescript@^4.0.2, typescript@^4.5.4: + version "4.9.5" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +typewise-core@^1.2, typewise-core@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz" + integrity sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg== + +typewise@^1.0.3: + 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" + +uglify-js@^3.5.1: + version "3.17.4" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +union-value@^1.0.1: + 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" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@~1.0.0, unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz" + integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +utf8-byte-length@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" + integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +verror@^1.10.0: + version "1.10.1" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz" + integrity sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vite@^2.9.13: + version "2.9.18" + resolved "https://registry.npmjs.org/vite/-/vite-2.9.18.tgz" + integrity sha512-sAOqI5wNM9QvSEE70W3UGMdT8cyEn0+PmJMTFvTB8wB0YbYUWw3gUbY62AOyrXosGieF2htmeLATvNxpv/zNyQ== + dependencies: + esbuild "^0.14.27" + postcss "^8.4.13" + resolve "^1.22.0" + rollup ">=2.59.0 <2.78.0" + optionalDependencies: + fsevents "~2.3.2" + +vt-pbf@^3.1.3: + 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" + +vue-demi@>=0.14.6: + version "0.14.6" + resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz" + integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w== + +vue-eslint-parser@^9.3.1: + version "9.3.2" + resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz" + integrity sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg== + dependencies: + debug "^4.3.4" + eslint-scope "^7.1.1" + eslint-visitor-keys "^3.3.0" + espree "^9.3.1" + esquery "^1.4.0" + lodash "^4.17.21" + semver "^7.3.6" + +vue-google-maps@^0.1.21: + version "0.1.21" + resolved "https://registry.npmjs.org/vue-google-maps/-/vue-google-maps-0.1.21.tgz" + integrity sha512-8IWeCupRH7Dh4jeQtlo6jBEzWSO2n/WcB0T4vK3SkZnDXiBsJoG8msT21cjTIoDiTpqgWUhSxLxdh94XVmhTYQ== + dependencies: + js-marker-clusterer "^1.0.0" + +vue-i18n@^9.2.2: + version "9.5.0" + resolved "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.5.0.tgz" + integrity sha512-NiI3Ph1qMstNf7uhYh8trQBOBFLxeJgcOxBq51pCcZ28Vs18Y7BDS58r8HGDKCYgXdLUYqPDXdKatIF4bvBVZg== + dependencies: + "@intlify/core-base" "9.5.0" + "@intlify/shared" "9.5.0" + "@vue/devtools-api" "^6.5.0" + +vue-router@^4.0.0: + version "4.2.5" + resolved "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz" + integrity sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw== + dependencies: + "@vue/devtools-api" "^6.5.0" + +vue@^2.0: + version "2.7.14" + resolved "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz" + integrity sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ== + dependencies: + "@vue/compiler-sfc" "2.7.14" + csstype "^3.1.0" + +vue@^3.0.0: + version "3.3.4" + resolved "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz" + integrity sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw== + dependencies: + "@vue/compiler-dom" "3.3.4" + "@vue/compiler-sfc" "3.3.4" + "@vue/runtime-dom" "3.3.4" + "@vue/server-renderer" "3.3.4" + "@vue/shared" "3.3.4" + +vue3-google-oauth2@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/vue3-google-oauth2/-/vue3-google-oauth2-1.0.7.tgz" + integrity sha512-XZv5+IVRLqKrsfm6DamD75e4LPynDt3xpmEw3SQBKfnUvpaIq6YuimOCPoXMfedR6nQHJeZkw62E/ii2disppA== + +vuex@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz" + integrity sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ== + dependencies: + "@vue/devtools-api" "^6.0.0-beta.11" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +webpack-merge@^5.8.0: + version "5.9.0" + resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz" + integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/which/-/which-4.0.0.tgz" + integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== + dependencies: + isexe "^3.1.1" + +wildcard@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + +wrap-ansi@^6.0.1: + version "6.2.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + +xmlbuilder@^15.1.1, xmlbuilder@>=11.0.1: + version "15.1.1" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz" + integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml-eslint-parser@^0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-0.3.2.tgz" + integrity sha512-32kYO6kJUuZzqte82t4M/gB6/+11WAuHiEnK7FreMo20xsCKPeFH5tDBU7iWxR7zeJpNnMXfJyXwne48D0hGrg== + dependencies: + eslint-visitor-keys "^1.3.0" + lodash "^4.17.20" + yaml "^1.10.0" + +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.5.1, yargs@^17.6.2: + version "17.7.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zip-stream@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz" + integrity sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ== + dependencies: + archiver-utils "^3.0.4" + compress-commons "^4.1.2" + readable-stream "^3.6.0"