diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..e77d8b4 Binary files /dev/null and b/.DS_Store differ diff --git a/README.md b/README.md deleted file mode 100644 index 40210a4..0000000 --- a/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# 제로웨이스트샵 안내 지도 (가제) -- 최종 서비스 한 줄 소개 - - -## 프로젝트 구성 안내 ---- - -## 1. 프로젝트 소개 - -**사용하려는 데이터** - - 사용하려는 데이터(제안된 데이터 중 하나 또는 선택한 다른 데이터 세트)를 명시, 이에 대한 설명 - -**기술 스택** - - 백엔드 : TypeScript, Node.js, SQL - - 프론트엔드 : TypeScript, JavaScript, React - - 데이터분석 : Python - -**사용 라이브러리** - - 사용된 라이브러리 (numpy, matplotlib, wordcloud 등) - -**웹서비스 개요** - - 웹서비스에 대한 자세한 개요 - -## 2. 프로젝트 목표 - -**데이터 분석 결과로 도출되는 인사이트와 웹서비스의 해결과제에 대한 논의 (50자 이상)** - - 프로젝트 아이디어 동기 - - 문제를 해결하기 위한 특정 질문 명시 - - 데이터를 통해 탐색하려는 문제를 구체적으로 작성 - - -## 3. 프로젝트 기능 설명 - -**웹서비스의 유용성, 편의성 및 시각화의 실용성에 대한 설명** - - 주요 기능 (주된 활용성) 및 서브 기능 - - 프로젝트만의 차별점, 기대 효과 - -## 4. 프로젝트 구성도 - - 와이어프레임/스토리보드 추가 - -## 5. 프로젝트 팀원 역할 분담 -| 이름 | 담당 업무 | -| ------ | ------ | -| 김병용 | 백엔드 개발 | -| 박은정 | 백엔드 개발 | -| 안수진 | 백엔드 개발 | -| 이다솜 | 프론트엔드 개발 | -| 최규진 | 프론트엔드 개발 | -| 최영현 | 프론트엔드 개발 / 팀장 | - -**멤버별 responsibility** - -1. 팀장 - -- 기획 단계: 구체적인 설계와 지표에 따른 프로젝트 제안서 작성 -- 개발 단계: 팀원간의 일정 등 조율 + 프론트 or 백엔드 개발 -- 수정 단계: 기획, 스크럼 진행, 코치님 피드백 반영해서 수정, 발표 준비 - -2. 프론트엔드 - -- 기획 단계: 큰 주제에서 문제 해결 아이디어 도출, 데이터 수집, 와이어프레임 작성 -- 개발 단계: 와이어프레임을 기반으로 구현, 데이터 처리 및 시각화 담당, UI 디자인 완성 -- 수정 단계: 피드백 반영해서 프론트 디자인 수정 - - 3. 백엔드 & 데이터 담당 - -- 기획 단계: 기획 데이터 분석을 통해 해결하고자 하는 문제를 정의 -- 개발 단계: 웹 서버 사용자가 직접 백엔드에 저장할수 있는 기능 구현, 데이터 베이스 구축 및 API 활용, 데이터 분석 개념 총동원하기 -- 수정 단계: 코치님 피드백 반영해서 분석/ 시각화 방식 수정 - -## 6. 버전 - - 프로젝트의 버전 기입 - -## 7. FAQ - - 자주 받는 질문 정리 diff --git a/back/.DS_Store b/back/.DS_Store new file mode 100644 index 0000000..6efc0c4 Binary files /dev/null and b/back/.DS_Store differ diff --git a/back/.gitignore b/back/.gitignore new file mode 100644 index 0000000..1dcef2d --- /dev/null +++ b/back/.gitignore @@ -0,0 +1,2 @@ +node_modules +.env \ No newline at end of file diff --git a/back/index.js b/back/index.js new file mode 100644 index 0000000..20be955 --- /dev/null +++ b/back/index.js @@ -0,0 +1,14 @@ +// reference: +// https://nodejs.org/en/docs/guides/getting-started-guide/ +const app = require("./src/app"); +require("dotenv").config(); + +const PORT = process.env.SERVER_PORT || 5000; + +app + .listen(PORT, () => { + console.log(` 🚀Server started on port ${PORT}!`); + }) + .on("error", (err) => console.log(err)); +//---------------// +// const connection = require("./src/db/database.js"); diff --git a/back/package-lock.json b/back/package-lock.json new file mode 100644 index 0000000..2746aef --- /dev/null +++ b/back/package-lock.json @@ -0,0 +1,9458 @@ +{ + "name": "back", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "back", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@babel/plugin-transform-runtime": "^7.19.1", + "@glennsl/bs-json": "^5.0.4", + "@sindresorhus/is": "^5.3.0", + "axios": "^1.1.2", + "bcrypt": "^5.1.0", + "bluebird": "^3.7.2", + "bs-mysql2": "^10.0.2", + "cors": "^2.8.5", + "dotenv": "^16.0.3", + "express": "^4.18.2", + "express-async-handler": "^1.2.0", + "fs": "^0.0.1-security", + "jsonwebtoken": "^8.5.1", + "moment": "^2.29.4", + "moment-timezone": "^0.5.37", + "multer": "^1.4.5-lts.1", + "mysql": "^2.18.1", + "mysql2": "^2.3.3", + "mysql2-promise": "^0.1.4", + "negotiator": "^0.6.3", + "path": "^0.12.7", + "request": "^2.88.2" + }, + "devDependencies": { + "@babel/core": "^7.19.3", + "@babel/node": "^7.19.1", + "@babel/preset-env": "^7.19.3", + "nodemon": "^2.0.20" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", + "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.3", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.3", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.3", + "@babel/types": "^7.19.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.19.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.5.tgz", + "integrity": "sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==", + "dependencies": { + "@babel/types": "^7.19.4", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "dependencies": { + "@babel/compat-data": "^7.19.3", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", + "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", + "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "dependencies": { + "@babel/types": "^7.19.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/node": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.19.1.tgz", + "integrity": "sha512-gfxJNrawPso6kx7SwKfAdX1rEzVc09speJLFKrdxuZXGlve92pjbB3nJVmuwrxNN4+jvytj2zvliNXuW6uaSOw==", + "dev": true, + "dependencies": { + "@babel/register": "^7.18.9", + "commander": "^4.0.1", + "core-js": "^3.25.1", + "node-environment-flags": "^1.0.5", + "regenerator-runtime": "^0.13.4", + "v8flags": "^3.1.1" + }, + "bin": { + "babel-node": "bin/babel-node.js" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.4.tgz", + "integrity": "sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", + "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz", + "integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "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-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz", + "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", + "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz", + "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", + "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", + "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz", + "integrity": "sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz", + "integrity": "sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA==", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz", + "integrity": "sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.19.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.19.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.19.4", + "@babel/plugin-transform-classes": "^7.19.0", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.19.4", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.0", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.19.4", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", + "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz", + "integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.4.tgz", + "integrity": "sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.4", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.4", + "@babel/types": "^7.19.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@glennsl/bs-json": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@glennsl/bs-json/-/bs-json-5.0.4.tgz", + "integrity": "sha512-Th9DetZjRlMZrb74kgGJ44oWcoFyOTE884WlSuXft0Cd+J09vHRxiB7eVyK7Gthb4cSevsBBJDHYAbGGL25wPw==" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", + "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/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/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@sindresorhus/is": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", + "integrity": "sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "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/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": "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "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": "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansicolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz", + "integrity": "sha512-tOIuy1/SK/dr94ZA0ckDohKXNeBNqZ4us6PjMVLs5h1w2GBB6uPtOknp2+VF4F/zcy9LI70W+Z+pE2Soajky1w==" + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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==", + "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.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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.prototype.reduce": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", + "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "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==", + "engines": { + "node": ">=0.8" + } + }, + "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/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "node_modules/axios": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz", + "integrity": "sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.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/bcrypt": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.0.tgz", + "integrity": "sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.10", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bignumber.js": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/bn.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-2.0.0.tgz", + "integrity": "sha512-NmOLApC80+n+P28y06yHgwGlOCkq/X4jRh5s590959FZXSrM+I/61h0xxuIaYsg0mD44mEAZYG/rnclWuRoz+A==" + }, + "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==", + "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/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/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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.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.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-mysql2": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/bs-mysql2/-/bs-mysql2-10.0.2.tgz", + "integrity": "sha512-KExEeQx+qfiDCxVHzC9noeLsPqlzJDSj7FUSvmIWMJ+rkiXDo9wp6LVbEZ5TGc9MAR9jWNrhlhjpHS3MnIytNA==", + "dependencies": { + "mysql2": "^1.6.5" + } + }, + "node_modules/bs-mysql2/node_modules/denque": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/bs-mysql2/node_modules/iconv-lite": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", + "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bs-mysql2/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==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/bs-mysql2/node_modules/mysql2": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-1.7.0.tgz", + "integrity": "sha512-xTWWQPjP5rcrceZQ7CSTKR/4XIDeH/cRkNH/uzvVGQ7W5c7EJ0dXeJUusk7OKhIoHj7uFKUxDVSCfLIl+jluog==", + "dependencies": { + "denque": "^1.4.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.5.0", + "long": "^4.0.0", + "lru-cache": "^5.1.1", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.1" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/bs-mysql2/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "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.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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001422", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001422.tgz", + "integrity": "sha512-hSesn02u1QacQHhaxl/kNMZwqVG35Sz/8DgvmgedxSH8z9UUpcDYSPYgsj3x5dQNRcNp6BwpSfQfVzYUTm+fog==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/cardinal": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-0.4.4.tgz", + "integrity": "sha512-3MxV0o9wOpQcobrcSrRpaSxlYkohCcZu0ytOjJUww/Yo/223q4Ecloo7odT+M0SI5kPgb1JhvSaF4EEuVXOLAQ==", + "dependencies": { + "ansicolors": "~0.2.1", + "redeyed": "~0.4.0" + }, + "bin": { + "cdl": "bin/cdl.js" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "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==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "engines": { + "node": ">=10" + } + }, + "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/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==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "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==" + }, + "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==", + "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/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/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/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/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.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "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==" + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "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/core-js": { + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.5.tgz", + "integrity": "sha512-nbm6eZSjm+ZuBQxCUPQKQCoUEfFOXjUZ8dTTyikyKaWrTYmAVbykQfwsKE5dBK88u3QCkCrzsx/PPlKfhsvgpw==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", + "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", + "dependencies": { + "browserslist": "^4.21.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "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/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "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" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "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/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-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/double-ended-queue": { + "version": "2.0.0-0", + "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.0.0-0.tgz", + "integrity": "sha512-t5ouWOpItmHrm0J0+bX/cFrIjBFWnJkk5LbIJq6bbU/M4aLX2c3LrM4QYsBptwvlPe3WzdpQefQ0v1pe/A5wjg==" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "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/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/electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + }, + "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/es-abstract": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "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==" + }, + "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==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.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/express": { + "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" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-async-handler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/express-async-handler/-/express-async-handler-1.2.0.tgz", + "integrity": "sha512-rCSVtPXRmQSW8rmik/AIb2P0op6l7r1fMW538yyvTMltCO4xQEWMmobfrIxN2V1/mVrgxB8Az3reYF6yUZw37w==" + }, + "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/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.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-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/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==", + "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-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "engines": { + "node": "*" + } + }, + "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==", + "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": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, + "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.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.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "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==", + "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/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dependencies": { + "is-property": "^1.0.2" + } + }, + "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==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "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.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "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/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.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-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "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/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/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/inflight": { + "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" + } + }, + "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/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "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-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "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-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" + }, + "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==", + "dev": true, + "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-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, + "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==" + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "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==" + }, + "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==" + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "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": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "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/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/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "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.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.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "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/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/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/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/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.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "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/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.38", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.38.tgz", + "integrity": "sha512-nMIrzGah4+oYZPflDvLZUgoVUO4fvAqHstvG3xAUnMolWncuAiLDWNnJZj6EwJGMGfb1ZcuTFE6GI3hNOVWI/Q==", + "dependencies": { + "moment": ">= 2.9.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multer": { + "version": "1.4.5-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", + "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", + "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/mysql": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", + "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==", + "dependencies": { + "bignumber.js": "9.0.0", + "readable-stream": "2.3.7", + "safe-buffer": "5.1.2", + "sqlstring": "2.3.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mysql/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/mysql2": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", + "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", + "dependencies": { + "denque": "^2.0.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^4.0.0", + "lru-cache": "^6.0.0", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/mysql2-promise": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/mysql2-promise/-/mysql2-promise-0.1.4.tgz", + "integrity": "sha512-/h8ubU/36aIPpbfB6CENw9ZdbzIhZMZOIbstJUHVKp4J9JBRSLScrYImVx+3yZilgag732UhpQMMK5+ktdhLCw==", + "dependencies": { + "mysql2": "^0.15.7", + "q": "^1.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mysql2-promise/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "node_modules/mysql2-promise/node_modules/lru-cache": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz", + "integrity": "sha512-dVmQmXPBlTgFw77hm60ud//l2bCuDKkqC2on1EBoM7s9Urm9IQDrnujwZ93NFnAq0dVZ0HBXTS7PwEG+YE7+EQ==" + }, + "node_modules/mysql2-promise/node_modules/mysql2": { + "version": "0.15.8", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-0.15.8.tgz", + "integrity": "sha512-3x5o6C20bfwJYPSoT74MOoad7/chJoq4qXHDL5VAuRBBrIyErovLoj04Dz/5EY9X2kTxWSGNiTegtxpROTd2YQ==", + "dependencies": { + "bn.js": "2.0.0", + "cardinal": "0.4.4", + "double-ended-queue": "2.0.0-0", + "named-placeholders": "0.1.3", + "readable-stream": "1.0.33" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/mysql2-promise/node_modules/named-placeholders": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-0.1.3.tgz", + "integrity": "sha512-Mt79RtxZ6MYTIEemPGv/YDKpbuavcAyGHb0r37xB2mnE5jej3uBzc4+nzOeoZ4nZiii1M32URKt9IjkSTZAmTA==", + "dependencies": { + "lru-cache": "2.5.0" + } + }, + "node_modules/mysql2-promise/node_modules/readable-stream": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz", + "integrity": "sha512-72KxhcKi8bAvHP/cyyWSP+ODS5ef0DIRs0OzrhGXw31q41f19aoELCbvd42FjhpyEDxQMRiiC5rq9rfE5PzTqg==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/mysql2-promise/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + }, + "node_modules/mysql2/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/mysql2/node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", + "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", + "dependencies": { + "lru-cache": "^4.1.3" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/named-placeholders/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/named-placeholders/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, + "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/node-addon-api": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", + "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==" + }, + "node_modules/node-environment-flags": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node_modules/node-environment-flags/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "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-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "node_modules/nodemon": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", + "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npmlog": { + "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" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "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.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "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, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", + "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", + "dev": true, + "dependencies": { + "array.prototype.reduce": "^1.0.4", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.1" + }, + "engines": { + "node": ">= 0.8" + }, + "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/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/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/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "dev": true, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "dependencies": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "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/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-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-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/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "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": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "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/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/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/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "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/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.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" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/redeyed": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-0.4.4.tgz", + "integrity": "sha512-pnk1vsaNLu1UAAClKsImKz9HjBvg9i8cbRqTRzJbiCjGF0fZSMqpdcA5W3juO3c4etFvTrabECkq9wjC45ZyxA==", + "dependencies": { + "esprima": "~1.0.4" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", + "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", + "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.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/rimraf": { + "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" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "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/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + }, + "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/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "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/side-channel": { + "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" + }, + "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==" + }, + "node_modules/simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "dev": true, + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "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/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/sqlstring": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", + "integrity": "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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-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.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/supports-color": { + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "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/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==", + "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==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/touch/node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "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/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dependencies": { + "inherits": "2.0.3" + } + }, + "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/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "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": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "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/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/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==" + }, + "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/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/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/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/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/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==" + }, + "@babel/core": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", + "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.3", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.3", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.3", + "@babel/types": "^7.19.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.19.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.5.tgz", + "integrity": "sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==", + "requires": { + "@babel/types": "^7.19.4", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "requires": { + "@babel/compat-data": "^7.19.3", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", + "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "dev": true, + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", + "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "requires": { + "@babel/types": "^7.19.4" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "dev": true, + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + }, + "@babel/helper-wrap-function": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + } + }, + "@babel/helpers": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", + "requires": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/node": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.19.1.tgz", + "integrity": "sha512-gfxJNrawPso6kx7SwKfAdX1rEzVc09speJLFKrdxuZXGlve92pjbB3nJVmuwrxNN4+jvytj2zvliNXuW6uaSOw==", + "dev": true, + "requires": { + "@babel/register": "^7.18.9", + "commander": "^4.0.1", + "core-js": "^3.25.1", + "node-environment-flags": "^1.0.5", + "regenerator-runtime": "^0.13.4", + "v8flags": "^3.1.1" + } + }, + "@babel/parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.4.tgz", + "integrity": "sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", + "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz", + "integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@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-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-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@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-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@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-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz", + "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", + "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz", + "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", + "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", + "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz", + "integrity": "sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz", + "integrity": "sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA==", + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/preset-env": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz", + "integrity": "sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.19.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.19.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.19.4", + "@babel/plugin-transform-classes": "^7.19.0", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.19.4", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.0", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.19.4", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/register": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", + "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + } + }, + "@babel/runtime": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz", + "integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.4.tgz", + "integrity": "sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.4", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.4", + "@babel/types": "^7.19.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@glennsl/bs-json": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@glennsl/bs-json/-/bs-json-5.0.4.tgz", + "integrity": "sha512-Th9DetZjRlMZrb74kgGJ44oWcoFyOTE884WlSuXft0Cd+J09vHRxiB7eVyK7Gthb4cSevsBBJDHYAbGGL25wPw==" + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@mapbox/node-pre-gyp": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", + "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", + "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" + }, + "dependencies": { + "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.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@sindresorhus/is": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", + "integrity": "sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==" + }, + "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" + } + }, + "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": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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" + } + }, + "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": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansicolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz", + "integrity": "sha512-tOIuy1/SK/dr94ZA0ckDohKXNeBNqZ4us6PjMVLs5h1w2GBB6uPtOknp2+VF4F/zcy9LI70W+Z+pE2Soajky1w==" + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "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.prototype.reduce": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", + "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + } + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "axios": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz", + "integrity": "sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "bcrypt": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.0.tgz", + "integrity": "sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q==", + "requires": { + "@mapbox/node-pre-gyp": "^1.0.10", + "node-addon-api": "^5.0.0" + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bignumber.js": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" + }, + "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 + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "bn.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-2.0.0.tgz", + "integrity": "sha512-NmOLApC80+n+P28y06yHgwGlOCkq/X4jRh5s590959FZXSrM+I/61h0xxuIaYsg0mD44mEAZYG/rnclWuRoz+A==" + }, + "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==", + "requires": { + "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" + }, + "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==" + } + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "bs-mysql2": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/bs-mysql2/-/bs-mysql2-10.0.2.tgz", + "integrity": "sha512-KExEeQx+qfiDCxVHzC9noeLsPqlzJDSj7FUSvmIWMJ+rkiXDo9wp6LVbEZ5TGc9MAR9jWNrhlhjpHS3MnIytNA==", + "requires": { + "mysql2": "^1.6.5" + }, + "dependencies": { + "denque": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==" + }, + "iconv-lite": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", + "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "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==", + "requires": { + "yallist": "^3.0.2" + } + }, + "mysql2": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-1.7.0.tgz", + "integrity": "sha512-xTWWQPjP5rcrceZQ7CSTKR/4XIDeH/cRkNH/uzvVGQ7W5c7EJ0dXeJUusk7OKhIoHj7uFKUxDVSCfLIl+jluog==", + "requires": { + "denque": "^1.4.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.5.0", + "long": "^4.0.0", + "lru-cache": "^5.1.1", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.1" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caniuse-lite": { + "version": "1.0.30001422", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001422.tgz", + "integrity": "sha512-hSesn02u1QacQHhaxl/kNMZwqVG35Sz/8DgvmgedxSH8z9UUpcDYSPYgsj3x5dQNRcNp6BwpSfQfVzYUTm+fog==" + }, + "cardinal": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-0.4.4.tgz", + "integrity": "sha512-3MxV0o9wOpQcobrcSrRpaSxlYkohCcZu0ytOjJUww/Yo/223q4Ecloo7odT+M0SI5kPgb1JhvSaF4EEuVXOLAQ==", + "requires": { + "ansicolors": "~0.2.1", + "redeyed": "~0.4.0" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "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==" + }, + "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, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.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==", + "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==" + }, + "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==", + "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 + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "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" + } + }, + "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==" + }, + "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.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "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==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "core-js": { + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.5.tgz", + "integrity": "sha512-nbm6eZSjm+ZuBQxCUPQKQCoUEfFOXjUZ8dTTyikyKaWrTYmAVbykQfwsKE5dBK88u3QCkCrzsx/PPlKfhsvgpw==", + "dev": true + }, + "core-js-compat": { + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", + "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", + "requires": { + "browserslist": "^4.21.4" + } + }, + "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" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "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-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + }, + "dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" + }, + "double-ended-queue": { + "version": "2.0.0-0", + "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.0.0-0.tgz", + "integrity": "sha512-t5ouWOpItmHrm0J0+bX/cFrIjBFWnJkk5LbIJq6bbU/M4aLX2c3LrM4QYsBptwvlPe3WzdpQefQ0v1pe/A5wjg==" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "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" + } + }, + "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==" + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + }, + "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==" + }, + "es-abstract": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "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-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==" + }, + "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==" + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "requires": { + "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" + }, + "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==" + } + } + }, + "express-async-handler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/express-async-handler/-/express-async-handler-1.2.0.tgz", + "integrity": "sha512-rCSVtPXRmQSW8rmik/AIb2P0op6l7r1fMW538yyvTMltCO4xQEWMmobfrIxN2V1/mVrgxB8Az3reYF6yUZw37w==" + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + }, + "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-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==" + }, + "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, + "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-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" + }, + "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==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "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": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, + "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" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "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" + } + }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "requires": { + "is-property": "^1.0.2" + } + }, + "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==" + }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "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" + } + }, + "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, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "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==" + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.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-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "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" + } + }, + "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" + } + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "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==" + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "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-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "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, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "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-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "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 + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "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==" + }, + "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==" + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "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": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "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" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "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.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "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==", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "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==" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "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" + } + }, + "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.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + }, + "minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "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" + } + }, + "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" + } + }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, + "moment-timezone": { + "version": "0.5.38", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.38.tgz", + "integrity": "sha512-nMIrzGah4+oYZPflDvLZUgoVUO4fvAqHstvG3xAUnMolWncuAiLDWNnJZj6EwJGMGfb1ZcuTFE6GI3hNOVWI/Q==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "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.5-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", + "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", + "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" + } + }, + "mysql": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", + "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==", + "requires": { + "bignumber.js": "9.0.0", + "readable-stream": "2.3.7", + "safe-buffer": "5.1.2", + "sqlstring": "2.3.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==" + } + } + }, + "mysql2": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", + "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", + "requires": { + "denque": "^2.0.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^4.0.0", + "lru-cache": "^6.0.0", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "dependencies": { + "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" + } + }, + "sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==" + } + } + }, + "mysql2-promise": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/mysql2-promise/-/mysql2-promise-0.1.4.tgz", + "integrity": "sha512-/h8ubU/36aIPpbfB6CENw9ZdbzIhZMZOIbstJUHVKp4J9JBRSLScrYImVx+3yZilgag732UhpQMMK5+ktdhLCw==", + "requires": { + "mysql2": "^0.15.7", + "q": "^1.3.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "lru-cache": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz", + "integrity": "sha512-dVmQmXPBlTgFw77hm60ud//l2bCuDKkqC2on1EBoM7s9Urm9IQDrnujwZ93NFnAq0dVZ0HBXTS7PwEG+YE7+EQ==" + }, + "mysql2": { + "version": "0.15.8", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-0.15.8.tgz", + "integrity": "sha512-3x5o6C20bfwJYPSoT74MOoad7/chJoq4qXHDL5VAuRBBrIyErovLoj04Dz/5EY9X2kTxWSGNiTegtxpROTd2YQ==", + "requires": { + "bn.js": "2.0.0", + "cardinal": "0.4.4", + "double-ended-queue": "2.0.0-0", + "named-placeholders": "0.1.3", + "readable-stream": "1.0.33" + } + }, + "named-placeholders": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-0.1.3.tgz", + "integrity": "sha512-Mt79RtxZ6MYTIEemPGv/YDKpbuavcAyGHb0r37xB2mnE5jej3uBzc4+nzOeoZ4nZiii1M32URKt9IjkSTZAmTA==", + "requires": { + "lru-cache": "2.5.0" + } + }, + "readable-stream": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz", + "integrity": "sha512-72KxhcKi8bAvHP/cyyWSP+ODS5ef0DIRs0OzrhGXw31q41f19aoELCbvd42FjhpyEDxQMRiiC5rq9rfE5PzTqg==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + } + } + }, + "named-placeholders": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", + "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", + "requires": { + "lru-cache": "^4.1.3" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + } + } + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "node-addon-api": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", + "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==" + }, + "node-environment-flags": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "nodemon": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", + "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "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==", + "dev": true + }, + "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" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "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.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "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 + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", + "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", + "dev": true, + "requires": { + "array.prototype.reduce": "^1.0.4", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.1" + } + }, + "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" + } + }, + "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" + } + }, + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.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 + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "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 + }, + "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-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-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==" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, + "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==" + }, + "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" + } + }, + "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==" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + }, + "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" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "redeyed": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-0.4.4.tgz", + "integrity": "sha512-pnk1vsaNLu1UAAClKsImKz9HjBvg9i8cbRqTRzJbiCjGF0fZSMqpdcA5W3juO3c4etFvTrabECkq9wjC45ZyxA==", + "requires": { + "esprima": "~1.0.4" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", + "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpu-core": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", + "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", + "dev": true + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" + } + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "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" + } + }, + "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==" + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "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==" + } + } + }, + "seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + }, + "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==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "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, + "requires": { + "kind-of": "^6.0.2" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "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==" + }, + "simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "dev": true, + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "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 + }, + "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" + } + }, + "sqlstring": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", + "integrity": "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==" + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "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-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.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "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" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.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==" + }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "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==", + "dev": true, + "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==" + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + }, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "requires": { + "abbrev": "1" + } + } + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "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==" + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "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.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "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" + } + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + } + } + }, + "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": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "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==" + } + } + }, + "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" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "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" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/back/package.json b/back/package.json new file mode 100644 index 0000000..7a0fa0b --- /dev/null +++ b/back/package.json @@ -0,0 +1,43 @@ +{ + "name": "back", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "nodemon index.js --exec babel-node", + "test": "echo \"Error: no test specified\" && exit 1", + "pm2": "pm2 start index.js --interpreter babel-node" + }, + "author": "", + "license": "ISC", + "dependencies": { + "@babel/plugin-transform-runtime": "^7.19.1", + "@glennsl/bs-json": "^5.0.4", + "@sindresorhus/is": "^5.3.0", + "axios": "^1.1.2", + "bcrypt": "^5.1.0", + "bluebird": "^3.7.2", + "bs-mysql2": "^10.0.2", + "cors": "^2.8.5", + "dotenv": "^16.0.3", + "express": "^4.18.2", + "express-async-handler": "^1.2.0", + "fs": "^0.0.1-security", + "jsonwebtoken": "^8.5.1", + "moment": "^2.29.4", + "moment-timezone": "^0.5.37", + "multer": "^1.4.5-lts.1", + "mysql": "^2.18.1", + "mysql2": "^2.3.3", + "mysql2-promise": "^0.1.4", + "negotiator": "^0.6.3", + "path": "^0.12.7", + "request": "^2.88.2" + }, + "devDependencies": { + "@babel/core": "^7.19.3", + "@babel/node": "^7.19.1", + "@babel/preset-env": "^7.19.3", + "nodemon": "^2.0.20" + } +} diff --git a/back/src/app.js b/back/src/app.js new file mode 100644 index 0000000..7393918 --- /dev/null +++ b/back/src/app.js @@ -0,0 +1,51 @@ +// reference: +// https://nodejs.org/en/docs/guides/getting-started-guide/ + +// const { connection } = require("./src/db/database.js"); + +const express = require("express"); +const cors = require("cors"); +// const { errorMiddleware } = require("./middlewares/errorMiddleware"); +const userAuthRouter = require("./routers/userRouter"); +// router를 만들면 추가하기 +const storesRouter = require("./routers/storesRouter"); +const reviewRouter = require("./routers/reviewRouter"); +const myPageRouter = require("./routers/myPageRouter"); +const introRouter = require("./routers/introRouter"); +const socialLoginRouter = require("./routers/socialLoginRouter"); + +const app = express(); +// CORS 에러 방지 +app.use(cors()); + +// express 기본 제공 middleware +// express.json(): POST 등의 요청과 함께 오는 json형태의 데이터를 인식하고 핸들링할 수 있게 함. +// express.urlencoded: 주로 Form submit 에 의해 만들어지는 URL-Encoded 형태의 데이터를 인식하고 핸들링할 수 있게 함. +app.use(express.json()); +app.use(express.urlencoded({ extended: false })); + +// 기본 페이지 +app.get("/", (req, res) => { + res.send("안녕하세요, 7팀의 팀프로젝트 API 입니다."); +}); + +// router, service 구현 (userAuthRouter는 맨 위에 있어야 함.) +app.use(userAuthRouter); +app.use(reviewRouter); +app.use(introRouter); +app.use(socialLoginRouter); + +// app.use(connection); +// app.use(userList); +app.use(myPageRouter); +app.use(storesRouter); + +// 정적파일 경로 +app.use(express.static("uploads")); + +// 순서 중요 (router 에서 next() 시 아래의 에러 핸들링 middleware로 전달됨) +// app.use(errorMiddleware); + +// import error와 같이 export도 error발생 +// export { app }; +module.exports = app; diff --git a/back/src/data/1996to2020_trashData_tonPerDay.csv b/back/src/data/1996to2020_trashData_tonPerDay.csv new file mode 100644 index 0000000..d46df54 --- /dev/null +++ b/back/src/data/1996to2020_trashData_tonPerDay.csv @@ -0,0 +1,26 @@ +year,total +1996,180573 +1997,195275 +1998,190254 +1999,219217 +2000,234283 +2001,261032 +2002,277533 +2003,303029 +2004,311666 +2005,304357 +2006,328954 +2007,346669 +2008,368890 +2009,366921 +2010,374642 +2011,383333 +2012,394496 +2013,393116 +2014,401658 +2015,418214 +2016,429128 +2017,429531 +2018,446102 +2019,497238 +2020,534055 \ No newline at end of file diff --git "a/back/src/data/\352\265\255\353\257\274\355\231\230\352\262\275\354\235\230\354\213\235\354\241\260\354\202\254\354\233\220\354\236\220\353\243\214.csv" "b/back/src/data/\352\265\255\353\257\274\355\231\230\352\262\275\354\235\230\354\213\235\354\241\260\354\202\254\354\233\220\354\236\220\353\243\214.csv" new file mode 100644 index 0000000..a0b1f94 --- /dev/null +++ "b/back/src/data/\352\265\255\353\257\274\355\231\230\352\262\275\354\235\230\354\213\235\354\241\260\354\202\254\354\233\220\354\236\220\353\243\214.csv" @@ -0,0 +1,6 @@ +연령대,환경관심정도 +19-29세,67.682776 +30-39세,67.907489 +40-49세,69.837189 +50-59세,75.131467 +60-69세,78.786653 \ No newline at end of file diff --git "a/back/src/data/\354\271\234\355\231\230\352\262\275\354\240\201\354\212\265\352\264\200\354\213\244\354\262\234\354\226\264\353\240\244\354\233\200.csv" "b/back/src/data/\354\271\234\355\231\230\352\262\275\354\240\201\354\212\265\352\264\200\354\213\244\354\262\234\354\226\264\353\240\244\354\233\200.csv" new file mode 100644 index 0000000..12f8f71 --- /dev/null +++ "b/back/src/data/\354\271\234\355\231\230\352\262\275\354\240\201\354\212\265\352\264\200\354\213\244\354\262\234\354\226\264\353\240\244\354\233\200.csv" @@ -0,0 +1,10 @@ +원인,비율(%) +기타, 1.8 +주변 사람들이 친환경적으로 행동하는 것을 비웃거나 무시한다", 11.2 +친환경적 행동을 해도 환경문제가 개선되지 않을 것이라 실천의 필요를 못 느낀다", 17.9 +친환경 행동을 실천하고 싶지만 방법을 잘 모른다", 23.6 +친환경적인 행동이 나의 건강에는 오히려 해가 될 수 있다(예: 미세먼지 많은 날 걸어서 이동)", 33.6 +환경에 나쁜 영향을 주는 행동들이 이미 습관이 되어 바꾸기 어렵다", 36.3 +친환경적인 행동은 비용이 많이 든다", 41 +친환경적인 행동(예: 대중교통 이용)은 시간이 많이 소비된다", 43.7 +제품을 구매하거나 행동할 때 친환경적인 대안이 없거나 품질이 떨어진다", 44.1 \ No newline at end of file diff --git a/back/src/db/SGIS_adm_code.csv b/back/src/db/SGIS_adm_code.csv new file mode 100644 index 0000000..f7880fd --- /dev/null +++ b/back/src/db/SGIS_adm_code.csv @@ -0,0 +1,3501 @@ +1,11,서울특별시,010,종로구,53,사직동 +2,11,서울특별시,010,종로구,54,삼청동 +3,11,서울특별시,010,종로구,55,부암동 +4,11,서울특별시,010,종로구,56,평창동 +5,11,서울특별시,010,종로구,57,무악동 +6,11,서울특별시,010,종로구,58,교남동 +7,11,서울특별시,010,종로구,60,가회동 +8,11,서울특별시,010,종로구,61,종로1·2·3·4가동 +9,11,서울특별시,010,종로구,63,종로5·6가동 +10,11,서울특별시,010,종로구,64,이화동 +11,11,서울특별시,010,종로구,67,창신1동 +12,11,서울특별시,010,종로구,68,창신2동 +13,11,서울특별시,010,종로구,69,창신3동 +14,11,서울특별시,010,종로구,70,숭인1동 +15,11,서울특별시,010,종로구,71,숭인2동 +16,11,서울특별시,010,종로구,72,청운효자동 +17,11,서울특별시,010,종로구,73,혜화동 +18,11,서울특별시,020,중구,52,소공동 +19,11,서울특별시,020,중구,54,회현동 +20,11,서울특별시,020,중구,55,명동 +21,11,서울특별시,020,중구,57,필동 +22,11,서울특별시,020,중구,58,장충동 +23,11,서울특별시,020,중구,59,광희동 +24,11,서울특별시,020,중구,60,을지로동 +25,11,서울특별시,020,중구,65,신당5동 +26,11,서울특별시,020,중구,67,황학동 +27,11,서울특별시,020,중구,68,중림동 +28,11,서울특별시,020,중구,69,신당동 +29,11,서울특별시,020,중구,70,다산동 +30,11,서울특별시,020,중구,71,약수동 +31,11,서울특별시,020,중구,72,청구동 +32,11,서울특별시,020,중구,73,동화동 +33,11,서울특별시,030,용산구,51,후암동 +34,11,서울특별시,030,용산구,52,용산2가동 +35,11,서울특별시,030,용산구,53,남영동 +36,11,서울특별시,030,용산구,57,원효로2동 +37,11,서울특별시,030,용산구,58,효창동 +38,11,서울특별시,030,용산구,59,용문동 +39,11,서울특별시,030,용산구,63,이촌1동 +40,11,서울특별시,030,용산구,64,이촌2동 +41,11,서울특별시,030,용산구,65,이태원1동 +42,11,서울특별시,030,용산구,66,이태원2동 +43,11,서울특별시,030,용산구,69,서빙고동 +44,11,서울특별시,030,용산구,70,보광동 +45,11,서울특별시,030,용산구,71,청파동 +46,11,서울특별시,030,용산구,72,원효로1동 +47,11,서울특별시,030,용산구,73,한강로동 +48,11,서울특별시,030,용산구,74,한남동 +49,11,서울특별시,040,성동구,52,왕십리2동 +50,11,서울특별시,040,성동구,54,마장동 +51,11,서울특별시,040,성동구,55,사근동 +52,11,서울특별시,040,성동구,56,행당1동 +53,11,서울특별시,040,성동구,57,행당2동 +54,11,서울특별시,040,성동구,58,응봉동 +55,11,서울특별시,040,성동구,59,금호1가동 +56,11,서울특별시,040,성동구,62,금호4가동 +57,11,서울특별시,040,성동구,65,성수1가1동 +58,11,서울특별시,040,성동구,66,성수1가2동 +59,11,서울특별시,040,성동구,67,성수2가1동 +60,11,서울특별시,040,성동구,68,성수2가3동 +61,11,서울특별시,040,성동구,69,송정동 +62,11,서울특별시,040,성동구,70,용답동 +63,11,서울특별시,040,성동구,71,왕십리도선동 +64,11,서울특별시,040,성동구,72,금호2·3가동 +65,11,서울특별시,040,성동구,73,옥수동 +66,11,서울특별시,050,광진구,53,화양동 +67,11,서울특별시,050,광진구,54,군자동 +68,11,서울특별시,050,광진구,55,중곡1동 +69,11,서울특별시,050,광진구,56,중곡2동 +70,11,서울특별시,050,광진구,57,중곡3동 +71,11,서울특별시,050,광진구,58,중곡4동 +72,11,서울특별시,050,광진구,59,능동 +73,11,서울특별시,050,광진구,60,구의1동 +74,11,서울특별시,050,광진구,61,구의2동 +75,11,서울특별시,050,광진구,62,구의3동 +76,11,서울특별시,050,광진구,63,광장동 +77,11,서울특별시,050,광진구,64,자양1동 +78,11,서울특별시,050,광진구,65,자양2동 +79,11,서울특별시,050,광진구,66,자양3동 +80,11,서울특별시,050,광진구,67,자양4동 +81,11,서울특별시,060,동대문구,71,회기동 +82,11,서울특별시,060,동대문구,72,휘경1동 +83,11,서울특별시,060,동대문구,73,휘경2동 +84,11,서울특별시,060,동대문구,80,청량리동 +85,11,서울특별시,060,동대문구,81,용신동 +86,11,서울특별시,060,동대문구,82,제기동 +87,11,서울특별시,060,동대문구,83,전농1동 +88,11,서울특별시,060,동대문구,84,전농2동 +89,11,서울특별시,060,동대문구,86,답십리2동 +90,11,서울특별시,060,동대문구,87,장안1동 +91,11,서울특별시,060,동대문구,88,장안2동 +92,11,서울특별시,060,동대문구,89,이문1동 +93,11,서울특별시,060,동대문구,90,이문2동 +94,11,서울특별시,060,동대문구,91,답십리1동 +95,11,서울특별시,070,중랑구,52,면목2동 +96,11,서울특별시,070,중랑구,54,면목4동 +97,11,서울특별시,070,중랑구,55,면목5동 +98,11,서울특별시,070,중랑구,57,면목7동 +99,11,서울특별시,070,중랑구,59,상봉1동 +100,11,서울특별시,070,중랑구,60,상봉2동 +101,11,서울특별시,070,중랑구,61,중화1동 +102,11,서울특별시,070,중랑구,62,중화2동 +103,11,서울특별시,070,중랑구,64,묵1동 +104,11,서울특별시,070,중랑구,65,묵2동 +105,11,서울특별시,070,중랑구,68,망우3동 +106,11,서울특별시,070,중랑구,69,신내1동 +107,11,서울특별시,070,중랑구,70,신내2동 +108,11,서울특별시,070,중랑구,71,면목본동 +109,11,서울특별시,070,중랑구,72,면목3·8동 +110,11,서울특별시,070,중랑구,73,망우본동 +111,11,서울특별시,080,성북구,58,돈암1동 +112,11,서울특별시,080,성북구,59,돈암2동 +113,11,서울특별시,080,성북구,60,안암동 +114,11,서울특별시,080,성북구,61,보문동 +115,11,서울특별시,080,성북구,62,정릉1동 +116,11,서울특별시,080,성북구,63,정릉2동 +117,11,서울특별시,080,성북구,64,정릉3동 +118,11,서울특별시,080,성북구,65,정릉4동 +119,11,서울특별시,080,성북구,66,길음1동 +120,11,서울특별시,080,성북구,68,길음2동 +121,11,서울특별시,080,성북구,71,월곡1동 +122,11,서울특별시,080,성북구,72,월곡2동 +123,11,서울특별시,080,성북구,76,장위1동 +124,11,서울특별시,080,성북구,77,장위2동 +125,11,서울특별시,080,성북구,78,장위3동 +126,11,서울특별시,080,성북구,81,성북동 +127,11,서울특별시,080,성북구,82,삼선동 +128,11,서울특별시,080,성북구,83,동선동 +129,11,서울특별시,080,성북구,84,종암동 +130,11,서울특별시,080,성북구,85,석관동 +131,11,서울특별시,090,강북구,60,번1동 +132,11,서울특별시,090,강북구,61,번2동 +133,11,서울특별시,090,강북구,62,번3동 +134,11,서울특별시,090,강북구,63,수유1동 +135,11,서울특별시,090,강북구,64,수유2동 +136,11,서울특별시,090,강북구,65,수유3동 +137,11,서울특별시,090,강북구,69,삼양동 +138,11,서울특별시,090,강북구,70,미아동 +139,11,서울특별시,090,강북구,71,송중동 +140,11,서울특별시,090,강북구,72,송천동 +141,11,서울특별시,090,강북구,73,삼각산동 +142,11,서울특별시,090,강북구,74,우이동 +143,11,서울특별시,090,강북구,75,인수동 +144,11,서울특별시,100,도봉구,51,쌍문1동 +145,11,서울특별시,100,도봉구,52,쌍문2동 +146,11,서울특별시,100,도봉구,53,쌍문3동 +147,11,서울특별시,100,도봉구,54,쌍문4동 +148,11,서울특별시,100,도봉구,55,방학1동 +149,11,서울특별시,100,도봉구,56,방학2동 +150,11,서울특별시,100,도봉구,57,방학3동 +151,11,서울특별시,100,도봉구,59,창1동 +152,11,서울특별시,100,도봉구,60,창2동 +153,11,서울특별시,100,도봉구,61,창3동 +154,11,서울특별시,100,도봉구,62,창4동 +155,11,서울특별시,100,도봉구,63,창5동 +156,11,서울특별시,100,도봉구,64,도봉1동 +157,11,서울특별시,100,도봉구,65,도봉2동 +158,11,서울특별시,110,노원구,51,월계1동 +159,11,서울특별시,110,노원구,52,월계2동 +160,11,서울특별시,110,노원구,53,월계3동 +161,11,서울특별시,110,노원구,56,공릉2동 +162,11,서울특별시,110,노원구,58,하계1동 +163,11,서울특별시,110,노원구,59,하계2동 +164,11,서울특별시,110,노원구,60,중계본동 +165,11,서울특별시,110,노원구,61,중계1동 +166,11,서울특별시,110,노원구,64,중계4동 +167,11,서울특별시,110,노원구,65,상계1동 +168,11,서울특별시,110,노원구,66,상계2동 +169,11,서울특별시,110,노원구,69,상계5동 +170,11,서울특별시,110,노원구,72,상계8동 +171,11,서울특별시,110,노원구,73,상계9동 +172,11,서울특별시,110,노원구,74,상계10동 +173,11,서울특별시,110,노원구,76,상계3·4동 +174,11,서울특별시,110,노원구,77,상계6·7동 +175,11,서울특별시,110,노원구,78,중계2·3동 +176,11,서울특별시,110,노원구,79,공릉1동 +177,11,서울특별시,120,은평구,51,녹번동 +178,11,서울특별시,120,은평구,52,불광1동 +179,11,서울특별시,120,은평구,55,갈현1동 +180,11,서울특별시,120,은평구,56,갈현2동 +181,11,서울특별시,120,은평구,57,구산동 +182,11,서울특별시,120,은평구,58,대조동 +183,11,서울특별시,120,은평구,59,응암1동 +184,11,서울특별시,120,은평구,60,응암2동 +185,11,서울특별시,120,은평구,65,신사1동 +186,11,서울특별시,120,은평구,66,신사2동 +187,11,서울특별시,120,은평구,67,증산동 +188,11,서울특별시,120,은평구,68,수색동 +189,11,서울특별시,120,은평구,71,진관동 +190,11,서울특별시,120,은평구,72,불광2동 +191,11,서울특별시,120,은평구,73,응암3동 +192,11,서울특별시,120,은평구,74,역촌동 +193,11,서울특별시,130,서대문구,52,천연동 +194,11,서울특별시,130,서대문구,62,홍제1동 +195,11,서울특별시,130,서대문구,64,홍제3동 +196,11,서울특별시,130,서대문구,65,홍제2동 +197,11,서울특별시,130,서대문구,66,홍은1동 +198,11,서울특별시,130,서대문구,68,홍은2동 +199,11,서울특별시,130,서대문구,69,남가좌1동 +200,11,서울특별시,130,서대문구,70,남가좌2동 +201,11,서울특별시,130,서대문구,71,북가좌1동 +202,11,서울특별시,130,서대문구,72,북가좌2동 +203,11,서울특별시,130,서대문구,73,충현동 +204,11,서울특별시,130,서대문구,74,북아현동 +205,11,서울특별시,130,서대문구,75,신촌동 +206,11,서울특별시,130,서대문구,76,연희동 +207,11,서울특별시,140,마포구,59,용강동 +208,11,서울특별시,140,마포구,60,대흥동 +209,11,서울특별시,140,마포구,61,염리동 +210,11,서울특별시,140,마포구,63,신수동 +211,11,서울특별시,140,마포구,66,서교동 +212,11,서울특별시,140,마포구,68,합정동 +213,11,서울특별시,140,마포구,69,망원1동 +214,11,서울특별시,140,마포구,70,망원2동 +215,11,서울특별시,140,마포구,71,연남동 +216,11,서울특별시,140,마포구,72,성산1동 +217,11,서울특별시,140,마포구,73,성산2동 +218,11,서울특별시,140,마포구,74,상암동 +219,11,서울특별시,140,마포구,75,도화동 +220,11,서울특별시,140,마포구,76,서강동 +221,11,서울특별시,140,마포구,77,공덕동 +222,11,서울특별시,140,마포구,78,아현동 +223,11,서울특별시,150,양천구,51,목1동 +224,11,서울특별시,150,양천구,52,목2동 +225,11,서울특별시,150,양천구,53,목3동 +226,11,서울특별시,150,양천구,54,목4동 +227,11,서울특별시,150,양천구,57,신월1동 +228,11,서울특별시,150,양천구,58,신월2동 +229,11,서울특별시,150,양천구,59,신월3동 +230,11,서울특별시,150,양천구,60,신월4동 +231,11,서울특별시,150,양천구,61,신월5동 +232,11,서울특별시,150,양천구,62,신월6동 +233,11,서울특별시,150,양천구,63,신월7동 +234,11,서울특별시,150,양천구,64,신정1동 +235,11,서울특별시,150,양천구,65,신정2동 +236,11,서울특별시,150,양천구,66,신정3동 +237,11,서울특별시,150,양천구,69,신정6동 +238,11,서울특별시,150,양천구,70,신정7동 +239,11,서울특별시,150,양천구,71,목5동 +240,11,서울특별시,150,양천구,72,신정4동 +241,11,서울특별시,160,강서구,51,염창동 +242,11,서울특별시,160,강서구,52,등촌1동 +243,11,서울특별시,160,강서구,53,등촌2동 +244,11,서울특별시,160,강서구,54,등촌3동 +245,11,서울특별시,160,강서구,55,화곡본동 +246,11,서울특별시,160,강서구,57,화곡2동 +247,11,서울특별시,160,강서구,58,화곡3동 +248,11,서울특별시,160,강서구,59,화곡4동 +249,11,서울특별시,160,강서구,61,화곡6동 +250,11,서울특별시,160,강서구,63,화곡8동 +251,11,서울특별시,160,강서구,64,가양1동 +252,11,서울특별시,160,강서구,65,가양2동 +253,11,서울특별시,160,강서구,66,가양3동 +254,11,서울특별시,160,강서구,67,발산1동 +255,11,서울특별시,160,강서구,69,공항동 +256,11,서울특별시,160,강서구,70,방화1동 +257,11,서울특별시,160,강서구,71,방화2동 +258,11,서울특별시,160,강서구,72,방화3동 +259,11,서울특별시,160,강서구,73,화곡1동 +260,11,서울특별시,160,강서구,74,우장산동 +261,11,서울특별시,170,구로구,51,신도림동 +262,11,서울특별시,170,구로구,52,구로1동 +263,11,서울특별시,170,구로구,54,구로3동 +264,11,서울특별시,170,구로구,55,구로4동 +265,11,서울특별시,170,구로구,56,구로5동 +266,11,서울특별시,170,구로구,61,고척1동 +267,11,서울특별시,170,구로구,62,고척2동 +268,11,서울특별시,170,구로구,64,개봉2동 +269,11,서울특별시,170,구로구,65,개봉3동 +270,11,서울특별시,170,구로구,67,오류1동 +271,11,서울특별시,170,구로구,69,수궁동 +272,11,서울특별시,170,구로구,70,가리봉동 +273,11,서울특별시,170,구로구,71,구로2동 +274,11,서울특별시,170,구로구,72,개봉1동 +275,11,서울특별시,170,구로구,73,오류2동 +276,11,서울특별시,170,구로구,74,항동 +277,11,서울특별시,180,금천구,51,가산동 +278,11,서울특별시,180,금천구,52,독산1동 +279,11,서울특별시,180,금천구,53,독산2동 +280,11,서울특별시,180,금천구,54,독산3동 +281,11,서울특별시,180,금천구,55,독산4동 +282,11,서울특별시,180,금천구,57,시흥1동 +283,11,서울특별시,180,금천구,58,시흥2동 +284,11,서울특별시,180,금천구,59,시흥3동 +285,11,서울특별시,180,금천구,60,시흥4동 +286,11,서울특별시,180,금천구,61,시흥5동 +287,11,서울특별시,190,영등포구,54,여의동 +288,11,서울특별시,190,영등포구,55,당산1동 +289,11,서울특별시,190,영등포구,56,당산2동 +290,11,서울특별시,190,영등포구,61,양평1동 +291,11,서울특별시,190,영등포구,62,양평2동 +292,11,서울특별시,190,영등포구,63,신길1동 +293,11,서울특별시,190,영등포구,65,신길3동 +294,11,서울특별시,190,영등포구,66,신길4동 +295,11,서울특별시,190,영등포구,67,신길5동 +296,11,서울특별시,190,영등포구,68,신길6동 +297,11,서울특별시,190,영등포구,69,신길7동 +298,11,서울특별시,190,영등포구,70,대림1동 +299,11,서울특별시,190,영등포구,71,대림2동 +300,11,서울특별시,190,영등포구,72,대림3동 +301,11,서울특별시,190,영등포구,73,영등포본동 +302,11,서울특별시,190,영등포구,74,영등포동 +303,11,서울특별시,190,영등포구,75,도림동 +304,11,서울특별시,190,영등포구,76,문래동 +305,11,서울특별시,200,동작구,52,노량진2동 +306,11,서울특별시,200,동작구,53,상도1동 +307,11,서울특별시,200,동작구,54,상도2동 +308,11,서울특별시,200,동작구,55,상도3동 +309,11,서울특별시,200,동작구,56,상도4동 +310,11,서울특별시,200,동작구,63,사당1동 +311,11,서울특별시,200,동작구,65,사당3동 +312,11,서울특별시,200,동작구,66,사당4동 +313,11,서울특별시,200,동작구,67,사당5동 +314,11,서울특별시,200,동작구,68,대방동 +315,11,서울특별시,200,동작구,69,신대방1동 +316,11,서울특별시,200,동작구,70,신대방2동 +317,11,서울특별시,200,동작구,71,흑석동 +318,11,서울특별시,200,동작구,72,노량진1동 +319,11,서울특별시,200,동작구,73,사당2동 +320,11,서울특별시,210,관악구,52,보라매동 +321,11,서울특별시,210,관악구,54,청림동 +322,11,서울특별시,210,관악구,57,행운동 +323,11,서울특별시,210,관악구,58,낙성대동 +324,11,서울특별시,210,관악구,61,중앙동 +325,11,서울특별시,210,관악구,62,인헌동 +326,11,서울특별시,210,관악구,63,남현동 +327,11,서울특별시,210,관악구,64,서원동 +328,11,서울특별시,210,관악구,65,신원동 +329,11,서울특별시,210,관악구,66,서림동 +330,11,서울특별시,210,관악구,68,신사동 +331,11,서울특별시,210,관악구,69,신림동 +332,11,서울특별시,210,관악구,71,난향동 +333,11,서울특별시,210,관악구,72,조원동 +334,11,서울특별시,210,관악구,73,대학동 +335,11,서울특별시,210,관악구,78,은천동 +336,11,서울특별시,210,관악구,79,성현동 +337,11,서울특별시,210,관악구,80,청룡동 +338,11,서울특별시,210,관악구,81,난곡동 +339,11,서울특별시,210,관악구,82,삼성동 +340,11,서울특별시,210,관악구,83,미성동 +341,11,서울특별시,220,서초구,51,서초1동 +342,11,서울특별시,220,서초구,52,서초2동 +343,11,서울특별시,220,서초구,53,서초3동 +344,11,서울특별시,220,서초구,54,서초4동 +345,11,서울특별시,220,서초구,55,잠원동 +346,11,서울특별시,220,서초구,56,반포본동 +347,11,서울특별시,220,서초구,57,반포1동 +348,11,서울특별시,220,서초구,58,반포2동 +349,11,서울특별시,220,서초구,59,반포3동 +350,11,서울특별시,220,서초구,60,반포4동 +351,11,서울특별시,220,서초구,61,방배본동 +352,11,서울특별시,220,서초구,62,방배1동 +353,11,서울특별시,220,서초구,63,방배2동 +354,11,서울특별시,220,서초구,64,방배3동 +355,11,서울특별시,220,서초구,65,방배4동 +356,11,서울특별시,220,서초구,66,양재1동 +357,11,서울특별시,220,서초구,67,양재2동 +358,11,서울특별시,220,서초구,68,내곡동 +359,11,서울특별시,230,강남구,51,신사동 +360,11,서울특별시,230,강남구,52,논현1동 +361,11,서울특별시,230,강남구,53,논현2동 +362,11,서울특별시,230,강남구,58,삼성1동 +363,11,서울특별시,230,강남구,59,삼성2동 +364,11,서울특별시,230,강남구,60,대치1동 +365,11,서울특별시,230,강남구,63,대치4동 +366,11,서울특별시,230,강남구,64,역삼1동 +367,11,서울특별시,230,강남구,65,역삼2동 +368,11,서울특별시,230,강남구,66,도곡1동 +369,11,서울특별시,230,강남구,67,도곡2동 +370,11,서울특별시,230,강남구,68,개포1동 +371,11,서울특별시,230,강남구,71,개포4동 +372,11,서울특별시,230,강남구,72,일원본동 +373,11,서울특별시,230,강남구,73,일원1동 +374,11,서울특별시,230,강남구,74,일원2동 +375,11,서울특별시,230,강남구,75,수서동 +376,11,서울특별시,230,강남구,76,세곡동 +377,11,서울특별시,230,강남구,77,압구정동 +378,11,서울특별시,230,강남구,78,청담동 +379,11,서울특별시,230,강남구,79,대치2동 +380,11,서울특별시,230,강남구,80,개포2동 +381,11,서울특별시,240,송파구,51,풍납1동 +382,11,서울특별시,240,송파구,52,풍납2동 +383,11,서울특별시,240,송파구,53,거여1동 +384,11,서울특별시,240,송파구,54,거여2동 +385,11,서울특별시,240,송파구,55,마천1동 +386,11,서울특별시,240,송파구,56,마천2동 +387,11,서울특별시,240,송파구,57,방이1동 +388,11,서울특별시,240,송파구,58,방이2동 +389,11,서울특별시,240,송파구,59,오륜동 +390,11,서울특별시,240,송파구,60,오금동 +391,11,서울특별시,240,송파구,61,송파1동 +392,11,서울특별시,240,송파구,62,송파2동 +393,11,서울특별시,240,송파구,63,석촌동 +394,11,서울특별시,240,송파구,64,삼전동 +395,11,서울특별시,240,송파구,65,가락본동 +396,11,서울특별시,240,송파구,66,가락1동 +397,11,서울특별시,240,송파구,67,가락2동 +398,11,서울특별시,240,송파구,68,문정1동 +399,11,서울특별시,240,송파구,69,문정2동 +400,11,서울특별시,240,송파구,71,잠실본동 +401,11,서울특별시,240,송파구,75,잠실4동 +402,11,서울특별시,240,송파구,77,잠실6동 +403,11,서울특별시,240,송파구,78,잠실7동 +404,11,서울특별시,240,송파구,79,잠실2동 +405,11,서울특별시,240,송파구,80,잠실3동 +406,11,서울특별시,240,송파구,81,장지동 +407,11,서울특별시,240,송파구,82,위례동 +408,11,서울특별시,250,강동구,51,강일동 +409,11,서울특별시,250,강동구,52,상일동 +410,11,서울특별시,250,강동구,53,명일1동 +411,11,서울특별시,250,강동구,54,명일2동 +412,11,서울특별시,250,강동구,55,고덕1동 +413,11,서울특별시,250,강동구,56,고덕2동 +414,11,서울특별시,250,강동구,58,암사2동 +415,11,서울특별시,250,강동구,59,암사3동 +416,11,서울특별시,250,강동구,61,천호1동 +417,11,서울특별시,250,강동구,63,천호3동 +418,11,서울특별시,250,강동구,65,성내1동 +419,11,서울특별시,250,강동구,66,성내2동 +420,11,서울특별시,250,강동구,67,성내3동 +421,11,서울특별시,250,강동구,70,둔촌1동 +422,11,서울특별시,250,강동구,71,둔촌2동 +423,11,서울특별시,250,강동구,72,암사1동 +424,11,서울특별시,250,강동구,73,천호2동 +425,11,서울특별시,250,강동구,74,길동 +426,21,부산광역시,010,중구,51,중앙동 +427,21,부산광역시,010,중구,52,동광동 +428,21,부산광역시,010,중구,53,대청동 +429,21,부산광역시,010,중구,54,보수동 +430,21,부산광역시,010,중구,56,부평동 +431,21,부산광역시,010,중구,57,광복동 +432,21,부산광역시,010,중구,58,남포동 +433,21,부산광역시,010,중구,59,영주1동 +434,21,부산광역시,010,중구,60,영주2동 +435,21,부산광역시,020,서구,51,동대신1동 +436,21,부산광역시,020,서구,52,동대신2동 +437,21,부산광역시,020,서구,53,동대신3동 +438,21,부산광역시,020,서구,54,서대신1동 +439,21,부산광역시,020,서구,56,서대신3동 +440,21,부산광역시,020,서구,57,서대신4동 +441,21,부산광역시,020,서구,59,부민동 +442,21,부산광역시,020,서구,61,아미동 +443,21,부산광역시,020,서구,63,초장동 +444,21,부산광역시,020,서구,64,충무동 +445,21,부산광역시,020,서구,65,남부민1동 +446,21,부산광역시,020,서구,68,암남동 +447,21,부산광역시,020,서구,69,남부민2동 +448,21,부산광역시,030,동구,51,초량1동 +449,21,부산광역시,030,동구,52,초량2동 +450,21,부산광역시,030,동구,53,초량3동 +451,21,부산광역시,030,동구,55,초량6동 +452,21,부산광역시,030,동구,56,수정1동 +453,21,부산광역시,030,동구,57,수정2동 +454,21,부산광역시,030,동구,59,수정4동 +455,21,부산광역시,030,동구,60,수정5동 +456,21,부산광역시,030,동구,66,범일2동 +457,21,부산광역시,030,동구,68,범일5동 +458,21,부산광역시,030,동구,70,좌천동 +459,21,부산광역시,030,동구,71,범일1동 +460,21,부산광역시,040,영도구,53,남항동 +461,21,부산광역시,040,영도구,54,영선1동 +462,21,부산광역시,040,영도구,55,영선2동 +463,21,부산광역시,040,영도구,59,봉래1동 +464,21,부산광역시,040,영도구,63,청학1동 +465,21,부산광역시,040,영도구,64,청학2동 +466,21,부산광역시,040,영도구,65,동삼1동 +467,21,부산광역시,040,영도구,66,동삼2동 +468,21,부산광역시,040,영도구,67,동삼3동 +469,21,부산광역시,040,영도구,68,신선동 +470,21,부산광역시,040,영도구,69,봉래2동 +471,21,부산광역시,050,부산진구,52,부전2동 +472,21,부산광역시,050,부산진구,54,연지동 +473,21,부산광역시,050,부산진구,55,초읍동 +474,21,부산광역시,050,부산진구,56,양정1동 +475,21,부산광역시,050,부산진구,57,양정2동 +476,21,부산광역시,050,부산진구,61,전포2동 +477,21,부산광역시,050,부산진구,64,부암1동 +478,21,부산광역시,050,부산진구,66,부암3동 +479,21,부산광역시,050,부산진구,68,당감2동 +480,21,부산광역시,050,부산진구,70,당감4동 +481,21,부산광역시,050,부산진구,72,가야2동 +482,21,부산광역시,050,부산진구,74,개금1동 +483,21,부산광역시,050,부산진구,75,개금2동 +484,21,부산광역시,050,부산진구,76,개금3동 +485,21,부산광역시,050,부산진구,77,범천1동 +486,21,부산광역시,050,부산진구,80,당감1동 +487,21,부산광역시,050,부산진구,81,가야1동 +488,21,부산광역시,050,부산진구,82,부전1동 +489,21,부산광역시,050,부산진구,83,전포1동 +490,21,부산광역시,050,부산진구,84,범천2동 +491,21,부산광역시,060,동래구,51,수민동 +492,21,부산광역시,060,동래구,52,복산동 +493,21,부산광역시,060,동래구,55,온천1동 +494,21,부산광역시,060,동래구,56,온천2동 +495,21,부산광역시,060,동래구,57,온천3동 +496,21,부산광역시,060,동래구,58,사직1동 +497,21,부산광역시,060,동래구,59,사직2동 +498,21,부산광역시,060,동래구,60,사직3동 +499,21,부산광역시,060,동래구,61,안락1동 +500,21,부산광역시,060,동래구,62,안락2동 +501,21,부산광역시,060,동래구,63,명장1동 +502,21,부산광역시,060,동래구,64,명장2동 +503,21,부산광역시,060,동래구,65,명륜동 +504,21,부산광역시,070,남구,53,대연3동 +505,21,부산광역시,070,남구,54,대연4동 +506,21,부산광역시,070,남구,55,대연5동 +507,21,부산광역시,070,남구,56,대연6동 +508,21,부산광역시,070,남구,57,용호1동 +509,21,부산광역시,070,남구,58,용호2동 +510,21,부산광역시,070,남구,59,용호3동 +511,21,부산광역시,070,남구,60,용호4동 +512,21,부산광역시,070,남구,61,용당동 +513,21,부산광역시,070,남구,62,감만1동 +514,21,부산광역시,070,남구,63,감만2동 +515,21,부산광역시,070,남구,66,문현1동 +516,21,부산광역시,070,남구,67,문현2동 +517,21,부산광역시,070,남구,68,문현3동 +518,21,부산광역시,070,남구,69,문현4동 +519,21,부산광역시,070,남구,70,대연1동 +520,21,부산광역시,070,남구,71,우암동 +521,21,부산광역시,080,북구,51,구포1동 +522,21,부산광역시,080,북구,52,구포2동 +523,21,부산광역시,080,북구,53,구포3동 +524,21,부산광역시,080,북구,54,금곡동 +525,21,부산광역시,080,북구,55,화명1동 +526,21,부산광역시,080,북구,56,덕천1동 +527,21,부산광역시,080,북구,57,덕천2동 +528,21,부산광역시,080,북구,58,덕천3동 +529,21,부산광역시,080,북구,59,만덕1동 +530,21,부산광역시,080,북구,60,만덕2동 +531,21,부산광역시,080,북구,61,만덕3동 +532,21,부산광역시,080,북구,62,화명2동 +533,21,부산광역시,080,북구,63,화명3동 +534,21,부산광역시,090,해운대구,53,중1동 +535,21,부산광역시,090,해운대구,54,중2동 +536,21,부산광역시,090,해운대구,56,송정동 +537,21,부산광역시,090,해운대구,58,반여2동 +538,21,부산광역시,090,해운대구,59,반여3동 +539,21,부산광역시,090,해운대구,62,반송2동 +540,21,부산광역시,090,해운대구,64,재송1동 +541,21,부산광역시,090,해운대구,65,재송2동 +542,21,부산광역시,090,해운대구,66,좌1동 +543,21,부산광역시,090,해운대구,67,좌2동 +544,21,부산광역시,090,해운대구,68,좌3동 +545,21,부산광역시,090,해운대구,69,좌4동 +546,21,부산광역시,090,해운대구,70,반여1동 +547,21,부산광역시,090,해운대구,71,반여4동 +548,21,부산광역시,090,해운대구,72,반송1동 +549,21,부산광역시,090,해운대구,73,우1동 +550,21,부산광역시,090,해운대구,74,우2동 +551,21,부산광역시,090,해운대구,75,우3동 +552,21,부산광역시,100,사하구,51,괴정1동 +553,21,부산광역시,100,사하구,52,괴정2동 +554,21,부산광역시,100,사하구,53,괴정3동 +555,21,부산광역시,100,사하구,54,괴정4동 +556,21,부산광역시,100,사하구,55,당리동 +557,21,부산광역시,100,사하구,56,하단1동 +558,21,부산광역시,100,사하구,57,하단2동 +559,21,부산광역시,100,사하구,58,신평1동 +560,21,부산광역시,100,사하구,59,신평2동 +561,21,부산광역시,100,사하구,60,장림1동 +562,21,부산광역시,100,사하구,61,장림2동 +563,21,부산광역시,100,사하구,62,다대1동 +564,21,부산광역시,100,사하구,63,다대2동 +565,21,부산광역시,100,사하구,64,구평동 +566,21,부산광역시,100,사하구,65,감천1동 +567,21,부산광역시,100,사하구,66,감천2동 +568,21,부산광역시,110,금정구,51,서1동 +569,21,부산광역시,110,금정구,52,서2동 +570,21,부산광역시,110,금정구,57,부곡1동 +571,21,부산광역시,110,금정구,58,부곡2동 +572,21,부산광역시,110,금정구,59,부곡3동 +573,21,부산광역시,110,금정구,60,부곡4동 +574,21,부산광역시,110,금정구,61,장전1동 +575,21,부산광역시,110,금정구,64,선두구동 +576,21,부산광역시,110,금정구,67,청룡노포동 +577,21,부산광역시,110,금정구,68,남산동 +578,21,부산광역시,110,금정구,69,구서1동 +579,21,부산광역시,110,금정구,70,구서2동 +580,21,부산광역시,110,금정구,71,금성동 +581,21,부산광역시,110,금정구,72,서3동 +582,21,부산광역시,110,금정구,73,금사회동동 +583,21,부산광역시,110,금정구,74,장전2동 +584,21,부산광역시,120,강서구,51,대저1동 +585,21,부산광역시,120,강서구,52,대저2동 +586,21,부산광역시,120,강서구,53,강동동 +587,21,부산광역시,120,강서구,55,가락동 +588,21,부산광역시,120,강서구,56,녹산동 +589,21,부산광역시,120,강서구,58,가덕도동 +590,21,부산광역시,120,강서구,59,명지1동 +591,21,부산광역시,120,강서구,60,명지2동 +592,21,부산광역시,130,연제구,51,거제1동 +593,21,부산광역시,130,연제구,52,거제2동 +594,21,부산광역시,130,연제구,53,거제3동 +595,21,부산광역시,130,연제구,54,거제4동 +596,21,부산광역시,130,연제구,55,연산1동 +597,21,부산광역시,130,연제구,56,연산2동 +598,21,부산광역시,130,연제구,57,연산3동 +599,21,부산광역시,130,연제구,58,연산4동 +600,21,부산광역시,130,연제구,59,연산5동 +601,21,부산광역시,130,연제구,60,연산6동 +602,21,부산광역시,130,연제구,62,연산8동 +603,21,부산광역시,130,연제구,63,연산9동 +604,21,부산광역시,140,수영구,51,남천1동 +605,21,부산광역시,140,수영구,52,남천2동 +606,21,부산광역시,140,수영구,53,수영동 +607,21,부산광역시,140,수영구,54,망미1동 +608,21,부산광역시,140,수영구,55,망미2동 +609,21,부산광역시,140,수영구,56,광안1동 +610,21,부산광역시,140,수영구,57,광안2동 +611,21,부산광역시,140,수영구,58,광안3동 +612,21,부산광역시,140,수영구,59,광안4동 +613,21,부산광역시,140,수영구,60,민락동 +614,21,부산광역시,150,사상구,51,삼락동 +615,21,부산광역시,150,사상구,52,모라1동 +616,21,부산광역시,150,사상구,54,모라3동 +617,21,부산광역시,150,사상구,55,덕포1동 +618,21,부산광역시,150,사상구,56,덕포2동 +619,21,부산광역시,150,사상구,57,괘법동 +620,21,부산광역시,150,사상구,60,주례1동 +621,21,부산광역시,150,사상구,61,주례2동 +622,21,부산광역시,150,사상구,62,주례3동 +623,21,부산광역시,150,사상구,63,학장동 +624,21,부산광역시,150,사상구,64,엄궁동 +625,21,부산광역시,150,사상구,65,감전동 +626,21,부산광역시,310,기장군,11,기장읍 +627,21,부산광역시,310,기장군,12,장안읍 +628,21,부산광역시,310,기장군,13,정관읍 +629,21,부산광역시,310,기장군,31,일광면 +630,21,부산광역시,310,기장군,33,철마면 +631,22,대구광역시,010,중구,54,삼덕동 +632,22,대구광역시,010,중구,56,성내1동 +633,22,대구광역시,010,중구,59,성내2동 +634,22,대구광역시,010,중구,61,성내3동 +635,22,대구광역시,010,중구,62,대신동 +636,22,대구광역시,010,중구,64,남산1동 +637,22,대구광역시,010,중구,65,남산2동 +638,22,대구광역시,010,중구,66,남산3동 +639,22,대구광역시,010,중구,67,남산4동 +640,22,대구광역시,010,중구,68,대봉1동 +641,22,대구광역시,010,중구,69,대봉2동 +642,22,대구광역시,010,중구,70,동인동 +643,22,대구광역시,020,동구,51,신암1동 +644,22,대구광역시,020,동구,52,신암2동 +645,22,대구광역시,020,동구,53,신암3동 +646,22,대구광역시,020,동구,54,신암4동 +647,22,대구광역시,020,동구,55,신암5동 +648,22,대구광역시,020,동구,56,신천1·2동 +649,22,대구광역시,020,동구,58,신천3동 +650,22,대구광역시,020,동구,59,신천4동 +651,22,대구광역시,020,동구,60,효목1동 +652,22,대구광역시,020,동구,61,효목2동 +653,22,대구광역시,020,동구,62,도평동 +654,22,대구광역시,020,동구,63,불로·봉무동 +655,22,대구광역시,020,동구,65,지저동 +656,22,대구광역시,020,동구,66,동촌동 +657,22,대구광역시,020,동구,68,방촌동 +658,22,대구광역시,020,동구,69,해안동 +659,22,대구광역시,020,동구,71,공산동 +660,22,대구광역시,020,동구,73,안심1동 +661,22,대구광역시,020,동구,74,안심2동 +662,22,대구광역시,020,동구,76,안심3동 +663,22,대구광역시,020,동구,77,안심4동 +664,22,대구광역시,020,동구,78,혁신동 +665,22,대구광역시,030,서구,51,내당1동 +666,22,대구광역시,030,서구,52,내당2·3동 +667,22,대구광역시,030,서구,53,내당4동 +668,22,대구광역시,030,서구,54,비산1동 +669,22,대구광역시,030,서구,55,비산2·3동 +670,22,대구광역시,030,서구,56,비산4동 +671,22,대구광역시,030,서구,57,비산5동 +672,22,대구광역시,030,서구,58,비산6동 +673,22,대구광역시,030,서구,59,비산7동 +674,22,대구광역시,030,서구,60,평리1동 +675,22,대구광역시,030,서구,61,평리2동 +676,22,대구광역시,030,서구,62,평리3동 +677,22,대구광역시,030,서구,63,평리4동 +678,22,대구광역시,030,서구,64,평리5동 +679,22,대구광역시,030,서구,65,평리6동 +680,22,대구광역시,030,서구,66,상중이동 +681,22,대구광역시,030,서구,68,원대동 +682,22,대구광역시,040,남구,51,이천동 +683,22,대구광역시,040,남구,53,봉덕1동 +684,22,대구광역시,040,남구,54,봉덕2동 +685,22,대구광역시,040,남구,55,봉덕3동 +686,22,대구광역시,040,남구,56,대명1동 +687,22,대구광역시,040,남구,57,대명2동 +688,22,대구광역시,040,남구,58,대명3동 +689,22,대구광역시,040,남구,59,대명4동 +690,22,대구광역시,040,남구,60,대명5동 +691,22,대구광역시,040,남구,61,대명6동 +692,22,대구광역시,040,남구,64,대명9동 +693,22,대구광역시,040,남구,65,대명10동 +694,22,대구광역시,040,남구,66,대명11동 +695,22,대구광역시,050,북구,51,고성동 +696,22,대구광역시,050,북구,52,칠성동 +697,22,대구광역시,050,북구,55,침산1동 +698,22,대구광역시,050,북구,56,침산2동 +699,22,대구광역시,050,북구,57,침산3동 +700,22,대구광역시,050,북구,61,산격1동 +701,22,대구광역시,050,북구,62,산격2동 +702,22,대구광역시,050,북구,63,산격3동 +703,22,대구광역시,050,북구,64,산격4동 +704,22,대구광역시,050,북구,65,복현1동 +705,22,대구광역시,050,북구,66,복현2동 +706,22,대구광역시,050,북구,70,검단동 +707,22,대구광역시,050,북구,71,무태조야동 +708,22,대구광역시,050,북구,74,태전2동 +709,22,대구광역시,050,북구,75,관문동 +710,22,대구광역시,050,북구,76,읍내동 +711,22,대구광역시,050,북구,77,관음동 +712,22,대구광역시,050,북구,78,태전1동 +713,22,대구광역시,050,북구,79,구암동 +714,22,대구광역시,050,북구,81,노원동 +715,22,대구광역시,050,북구,82,동천동 +716,22,대구광역시,050,북구,83,국우동 +717,22,대구광역시,050,북구,84,대현동 +718,22,대구광역시,060,수성구,51,범어1동 +719,22,대구광역시,060,수성구,52,범어2동 +720,22,대구광역시,060,수성구,53,범어3동 +721,22,대구광역시,060,수성구,54,범어4동 +722,22,대구광역시,060,수성구,55,만촌1동 +723,22,대구광역시,060,수성구,56,만촌2동 +724,22,대구광역시,060,수성구,57,만촌3동 +725,22,대구광역시,060,수성구,58,수성1가동 +726,22,대구광역시,060,수성구,59,수성2·3가동 +727,22,대구광역시,060,수성구,60,수성4가동 +728,22,대구광역시,060,수성구,61,황금1동 +729,22,대구광역시,060,수성구,62,황금2동 +730,22,대구광역시,060,수성구,63,중동 +731,22,대구광역시,060,수성구,64,상동 +732,22,대구광역시,060,수성구,65,파동 +733,22,대구광역시,060,수성구,66,두산동 +734,22,대구광역시,060,수성구,67,지산1동 +735,22,대구광역시,060,수성구,68,지산2동 +736,22,대구광역시,060,수성구,69,범물1동 +737,22,대구광역시,060,수성구,70,범물2동 +738,22,대구광역시,060,수성구,71,고산1동 +739,22,대구광역시,060,수성구,72,고산2동 +740,22,대구광역시,060,수성구,73,고산3동 +741,22,대구광역시,070,달서구,55,두류3동 +742,22,대구광역시,070,달서구,56,본리동 +743,22,대구광역시,070,달서구,57,감삼동 +744,22,대구광역시,070,달서구,58,죽전동 +745,22,대구광역시,070,달서구,59,장기동 +746,22,대구광역시,070,달서구,60,이곡1동 +747,22,대구광역시,070,달서구,61,신당동 +748,22,대구광역시,070,달서구,62,월성1동 +749,22,대구광역시,070,달서구,63,월성2동 +750,22,대구광역시,070,달서구,64,진천동 +751,22,대구광역시,070,달서구,65,상인1동 +752,22,대구광역시,070,달서구,66,상인2동 +753,22,대구광역시,070,달서구,67,상인3동 +754,22,대구광역시,070,달서구,68,도원동 +755,22,대구광역시,070,달서구,69,송현1동 +756,22,대구광역시,070,달서구,70,송현2동 +757,22,대구광역시,070,달서구,71,본동 +758,22,대구광역시,070,달서구,72,용산1동 +759,22,대구광역시,070,달서구,73,용산2동 +760,22,대구광역시,070,달서구,74,이곡2동 +761,22,대구광역시,070,달서구,75,성당동 +762,22,대구광역시,070,달서구,76,두류1·2동 +763,22,대구광역시,310,달성군,11,화원읍 +764,22,대구광역시,310,달성군,12,논공읍 +765,22,대구광역시,310,달성군,13,다사읍 +766,22,대구광역시,310,달성군,14,유가읍 +767,22,대구광역시,310,달성군,15,옥포읍 +768,22,대구광역시,310,달성군,16,현풍읍 +769,22,대구광역시,310,달성군,31,가창면 +770,22,대구광역시,310,달성군,32,하빈면 +771,22,대구광역시,310,달성군,36,구지면 +772,23,인천광역시,010,중구,52,연안동 +773,23,인천광역시,010,중구,53,신포동 +774,23,인천광역시,010,중구,54,신흥동 +775,23,인천광역시,010,중구,56,도원동 +776,23,인천광역시,010,중구,57,율목동 +777,23,인천광역시,010,중구,58,동인천동 +778,23,인천광역시,010,중구,60,북성동 +779,23,인천광역시,010,중구,61,송월동 +780,23,인천광역시,010,중구,63,용유동 +781,23,인천광역시,010,중구,64,운서동 +782,23,인천광역시,010,중구,65,영종동 +783,23,인천광역시,010,중구,66,영종1동 +784,23,인천광역시,020,동구,51,만석동 +785,23,인천광역시,020,동구,52,화수1·화평동 +786,23,인천광역시,020,동구,53,화수2동 +787,23,인천광역시,020,동구,55,송현1·2동 +788,23,인천광역시,020,동구,57,송현3동 +789,23,인천광역시,020,동구,58,송림1동 +790,23,인천광역시,020,동구,59,송림2동 +791,23,인천광역시,020,동구,60,송림3·5동 +792,23,인천광역시,020,동구,61,송림4동 +793,23,인천광역시,020,동구,63,송림6동 +794,23,인천광역시,020,동구,64,금창동 +795,23,인천광역시,040,연수구,51,옥련1동 +796,23,인천광역시,040,연수구,52,선학동 +797,23,인천광역시,040,연수구,53,연수1동 +798,23,인천광역시,040,연수구,54,연수2동 +799,23,인천광역시,040,연수구,55,연수3동 +800,23,인천광역시,040,연수구,56,청학동 +801,23,인천광역시,040,연수구,57,동춘1동 +802,23,인천광역시,040,연수구,58,동춘2동 +803,23,인천광역시,040,연수구,59,동춘3동 +804,23,인천광역시,040,연수구,60,옥련2동 +805,23,인천광역시,040,연수구,64,송도1동 +806,23,인천광역시,040,연수구,65,송도3동 +807,23,인천광역시,040,연수구,66,송도2동 +808,23,인천광역시,040,연수구,68,송도4동 +809,23,인천광역시,040,연수구,69,송도5동 +810,23,인천광역시,050,남동구,51,구월1동 +811,23,인천광역시,050,남동구,52,구월2동 +812,23,인천광역시,050,남동구,53,구월3동 +813,23,인천광역시,050,남동구,54,구월4동 +814,23,인천광역시,050,남동구,55,간석1동 +815,23,인천광역시,050,남동구,56,간석2동 +816,23,인천광역시,050,남동구,57,간석3동 +817,23,인천광역시,050,남동구,58,간석4동 +818,23,인천광역시,050,남동구,59,만수1동 +819,23,인천광역시,050,남동구,60,만수2동 +820,23,인천광역시,050,남동구,61,만수3동 +821,23,인천광역시,050,남동구,62,만수4동 +822,23,인천광역시,050,남동구,63,만수5동 +823,23,인천광역시,050,남동구,64,만수6동 +824,23,인천광역시,050,남동구,67,남촌도림동 +825,23,인천광역시,050,남동구,72,논현1동 +826,23,인천광역시,050,남동구,73,논현2동 +827,23,인천광역시,050,남동구,74,논현고잔동 +828,23,인천광역시,050,남동구,75,장수서창동 +829,23,인천광역시,050,남동구,76,서창2동 +830,23,인천광역시,060,부평구,51,부평1동 +831,23,인천광역시,060,부평구,52,부평2동 +832,23,인천광역시,060,부평구,53,부평3동 +833,23,인천광역시,060,부평구,54,부평4동 +834,23,인천광역시,060,부평구,55,부평5동 +835,23,인천광역시,060,부평구,56,부평6동 +836,23,인천광역시,060,부평구,57,산곡1동 +837,23,인천광역시,060,부평구,58,산곡2동 +838,23,인천광역시,060,부평구,59,산곡3동 +839,23,인천광역시,060,부평구,60,산곡4동 +840,23,인천광역시,060,부평구,61,청천1동 +841,23,인천광역시,060,부평구,62,청천2동 +842,23,인천광역시,060,부평구,63,갈산1동 +843,23,인천광역시,060,부평구,64,갈산2동 +844,23,인천광역시,060,부평구,65,삼산1동 +845,23,인천광역시,060,부평구,66,부개1동 +846,23,인천광역시,060,부평구,67,부개2동 +847,23,인천광역시,060,부평구,68,부개3동 +848,23,인천광역시,060,부평구,69,일신동 +849,23,인천광역시,060,부평구,70,십정1동 +850,23,인천광역시,060,부평구,71,십정2동 +851,23,인천광역시,060,부평구,72,삼산2동 +852,23,인천광역시,070,계양구,51,효성1동 +853,23,인천광역시,070,계양구,52,효성2동 +854,23,인천광역시,070,계양구,53,계산1동 +855,23,인천광역시,070,계양구,54,계산2동 +856,23,인천광역시,070,계양구,55,계산3동 +857,23,인천광역시,070,계양구,56,작전1동 +858,23,인천광역시,070,계양구,57,작전2동 +859,23,인천광역시,070,계양구,58,작전서운동 +860,23,인천광역시,070,계양구,61,계양2동 +861,23,인천광역시,070,계양구,62,계산4동 +862,23,인천광역시,070,계양구,63,계양1동 +863,23,인천광역시,070,계양구,64,계양3동 +864,23,인천광역시,080,서구,51,검암경서동 +865,23,인천광역시,080,서구,53,연희동 +866,23,인천광역시,080,서구,54,가정1동 +867,23,인천광역시,080,서구,55,가정2동 +868,23,인천광역시,080,서구,56,가정3동 +869,23,인천광역시,080,서구,58,석남1동 +870,23,인천광역시,080,서구,59,석남2동 +871,23,인천광역시,080,서구,60,석남3동 +872,23,인천광역시,080,서구,62,가좌1동 +873,23,인천광역시,080,서구,63,가좌2동 +874,23,인천광역시,080,서구,64,가좌3동 +875,23,인천광역시,080,서구,65,가좌4동 +876,23,인천광역시,080,서구,73,신현원창동 +877,23,인천광역시,080,서구,74,청라1동 +878,23,인천광역시,080,서구,78,청라2동 +879,23,인천광역시,080,서구,79,청라3동 +880,23,인천광역시,080,서구,80,검단동 +881,23,인천광역시,080,서구,81,불로대곡동 +882,23,인천광역시,080,서구,84,오류왕길동 +883,23,인천광역시,080,서구,85,당하동 +884,23,인천광역시,080,서구,86,마전동 +885,23,인천광역시,080,서구,87,원당동 +886,23,인천광역시,080,서구,88,아라동 +887,23,인천광역시,090,미추홀구,52,숭의2동 +888,23,인천광역시,090,미추홀구,54,숭의4동 +889,23,인천광역시,090,미추홀구,56,용현2동 +890,23,인천광역시,090,미추홀구,57,용현3동 +891,23,인천광역시,090,미추홀구,59,용현5동 +892,23,인천광역시,090,미추홀구,60,학익1동 +893,23,인천광역시,090,미추홀구,61,학익2동 +894,23,인천광역시,090,미추홀구,62,도화1동 +895,23,인천광역시,090,미추홀구,65,주안1동 +896,23,인천광역시,090,미추홀구,66,주안2동 +897,23,인천광역시,090,미추홀구,67,주안3동 +898,23,인천광역시,090,미추홀구,68,주안4동 +899,23,인천광역시,090,미추홀구,69,주안5동 +900,23,인천광역시,090,미추홀구,70,주안6동 +901,23,인천광역시,090,미추홀구,71,주안7동 +902,23,인천광역시,090,미추홀구,72,주안8동 +903,23,인천광역시,090,미추홀구,73,관교동 +904,23,인천광역시,090,미추홀구,74,문학동 +905,23,인천광역시,090,미추홀구,75,숭의1·3동 +906,23,인천광역시,090,미추홀구,76,용현1·4동 +907,23,인천광역시,090,미추홀구,77,도화2·3동 +908,23,인천광역시,310,강화군,11,강화읍 +909,23,인천광역시,310,강화군,31,선원면 +910,23,인천광역시,310,강화군,32,불은면 +911,23,인천광역시,310,강화군,33,길상면 +912,23,인천광역시,310,강화군,34,화도면 +913,23,인천광역시,310,강화군,35,양도면 +914,23,인천광역시,310,강화군,36,내가면 +915,23,인천광역시,310,강화군,37,하점면 +916,23,인천광역시,310,강화군,38,양사면 +917,23,인천광역시,310,강화군,39,송해면 +918,23,인천광역시,310,강화군,40,교동면 +919,23,인천광역시,310,강화군,41,삼산면 +920,23,인천광역시,310,강화군,42,서도면 +921,23,인천광역시,320,옹진군,31,북도면 +922,23,인천광역시,320,옹진군,32,연평면 +923,23,인천광역시,320,옹진군,33,백령면 +924,23,인천광역시,320,옹진군,34,대청면 +925,23,인천광역시,320,옹진군,35,덕적면 +926,23,인천광역시,320,옹진군,36,자월면 +927,23,인천광역시,320,옹진군,37,영흥면 +928,24,광주광역시,010,동구,51,충장동 +929,24,광주광역시,010,동구,54,동명동 +930,24,광주광역시,010,동구,56,계림1동 +931,24,광주광역시,010,동구,58,계림2동 +932,24,광주광역시,010,동구,59,산수1동 +933,24,광주광역시,010,동구,61,산수2동 +934,24,광주광역시,010,동구,62,지산1동 +935,24,광주광역시,010,동구,63,지산2동 +936,24,광주광역시,010,동구,64,서남동 +937,24,광주광역시,010,동구,68,학동 +938,24,광주광역시,010,동구,71,학운동 +939,24,광주광역시,010,동구,72,지원1동 +940,24,광주광역시,010,동구,73,지원2동 +941,24,광주광역시,020,서구,51,양동 +942,24,광주광역시,020,서구,53,양3동 +943,24,광주광역시,020,서구,54,농성1동 +944,24,광주광역시,020,서구,55,농성2동 +945,24,광주광역시,020,서구,56,광천동 +946,24,광주광역시,020,서구,57,유덕동 +947,24,광주광역시,020,서구,58,상무1동 +948,24,광주광역시,020,서구,59,상무2동 +949,24,광주광역시,020,서구,60,화정1동 +950,24,광주광역시,020,서구,61,화정2동 +951,24,광주광역시,020,서구,62,화정3동 +952,24,광주광역시,020,서구,63,화정4동 +953,24,광주광역시,020,서구,64,서창동 +954,24,광주광역시,020,서구,66,치평동 +955,24,광주광역시,020,서구,67,풍암동 +956,24,광주광역시,020,서구,68,금호1동 +957,24,광주광역시,020,서구,69,금호2동 +958,24,광주광역시,020,서구,70,동천동 +959,24,광주광역시,030,남구,51,양림동 +960,24,광주광역시,030,남구,52,방림1동 +961,24,광주광역시,030,남구,53,방림2동 +962,24,광주광역시,030,남구,54,사직동 +963,24,광주광역시,030,남구,57,월산동 +964,24,광주광역시,030,남구,60,월산4동 +965,24,광주광역시,030,남구,61,월산5동 +966,24,광주광역시,030,남구,62,백운1동 +967,24,광주광역시,030,남구,63,백운2동 +968,24,광주광역시,030,남구,64,주월1동 +969,24,광주광역시,030,남구,65,주월2동 +970,24,광주광역시,030,남구,66,효덕동 +971,24,광주광역시,030,남구,67,송암동 +972,24,광주광역시,030,남구,68,봉선1동 +973,24,광주광역시,030,남구,69,봉선2동 +974,24,광주광역시,030,남구,70,대촌동 +975,24,광주광역시,040,북구,51,중흥1동 +976,24,광주광역시,040,북구,52,중흥2동 +977,24,광주광역시,040,북구,53,중흥3동 +978,24,광주광역시,040,북구,54,중앙동 +979,24,광주광역시,040,북구,55,임동 +980,24,광주광역시,040,북구,56,신안동 +981,24,광주광역시,040,북구,57,용봉동 +982,24,광주광역시,040,북구,58,운암1동 +983,24,광주광역시,040,북구,59,운암2동 +984,24,광주광역시,040,북구,60,운암3동 +985,24,광주광역시,040,북구,61,동림동 +986,24,광주광역시,040,북구,62,우산동 +987,24,광주광역시,040,북구,63,풍향동 +988,24,광주광역시,040,북구,64,문화동 +989,24,광주광역시,040,북구,65,문흥1동 +990,24,광주광역시,040,북구,66,문흥2동 +991,24,광주광역시,040,북구,67,두암1동 +992,24,광주광역시,040,북구,68,두암2동 +993,24,광주광역시,040,북구,69,두암3동 +994,24,광주광역시,040,북구,70,삼각동 +995,24,광주광역시,040,북구,71,매곡동 +996,24,광주광역시,040,북구,72,오치1동 +997,24,광주광역시,040,북구,73,오치2동 +998,24,광주광역시,040,북구,74,석곡동 +999,24,광주광역시,040,북구,78,일곡동 +1000,24,광주광역시,040,북구,80,양산동 +1001,24,광주광역시,040,북구,81,건국동 +1002,24,광주광역시,040,북구,82,신용동 +1003,24,광주광역시,050,광산구,51,송정1동 +1004,24,광주광역시,050,광산구,52,송정2동 +1005,24,광주광역시,050,광산구,54,도산동 +1006,24,광주광역시,050,광산구,55,신흥동 +1007,24,광주광역시,050,광산구,56,어룡동 +1008,24,광주광역시,050,광산구,58,우산동 +1009,24,광주광역시,050,광산구,59,월곡1동 +1010,24,광주광역시,050,광산구,60,월곡2동 +1011,24,광주광역시,050,광산구,61,비아동 +1012,24,광주광역시,050,광산구,63,하남동 +1013,24,광주광역시,050,광산구,64,임곡동 +1014,24,광주광역시,050,광산구,65,동곡동 +1015,24,광주광역시,050,광산구,66,평동 +1016,24,광주광역시,050,광산구,67,삼도동 +1017,24,광주광역시,050,광산구,68,본량동 +1018,24,광주광역시,050,광산구,69,첨단1동 +1019,24,광주광역시,050,광산구,70,첨단2동 +1020,24,광주광역시,050,광산구,71,운남동 +1021,24,광주광역시,050,광산구,73,신창동 +1022,24,광주광역시,050,광산구,74,신가동 +1023,24,광주광역시,050,광산구,75,수완동 +1024,25,대전광역시,010,동구,53,효동 +1025,25,대전광역시,010,동구,55,판암1동 +1026,25,대전광역시,010,동구,56,판암2동 +1027,25,대전광역시,010,동구,57,용운동 +1028,25,대전광역시,010,동구,60,자양동 +1029,25,대전광역시,010,동구,63,가양1동 +1030,25,대전광역시,010,동구,64,가양2동 +1031,25,대전광역시,010,동구,65,용전동 +1032,25,대전광역시,010,동구,68,홍도동 +1033,25,대전광역시,010,동구,73,대청동 +1034,25,대전광역시,010,동구,75,산내동 +1035,25,대전광역시,010,동구,76,중앙동 +1036,25,대전광역시,010,동구,77,신인동 +1037,25,대전광역시,010,동구,78,대동 +1038,25,대전광역시,010,동구,79,성남동 +1039,25,대전광역시,010,동구,80,삼성동 +1040,25,대전광역시,020,중구,51,은행선화동 +1041,25,대전광역시,020,중구,53,목동 +1042,25,대전광역시,020,중구,54,중촌동 +1043,25,대전광역시,020,중구,55,대흥동 +1044,25,대전광역시,020,중구,56,문창동 +1045,25,대전광역시,020,중구,57,석교동 +1046,25,대전광역시,020,중구,58,대사동 +1047,25,대전광역시,020,중구,59,부사동 +1048,25,대전광역시,020,중구,60,용두동 +1049,25,대전광역시,020,중구,62,오류동 +1050,25,대전광역시,020,중구,63,태평1동 +1051,25,대전광역시,020,중구,64,태평2동 +1052,25,대전광역시,020,중구,65,유천1동 +1053,25,대전광역시,020,중구,66,유천2동 +1054,25,대전광역시,020,중구,67,문화1동 +1055,25,대전광역시,020,중구,68,문화2동 +1056,25,대전광역시,020,중구,69,산성동 +1057,25,대전광역시,030,서구,51,복수동 +1058,25,대전광역시,030,서구,52,도마1동 +1059,25,대전광역시,030,서구,53,도마2동 +1060,25,대전광역시,030,서구,54,정림동 +1061,25,대전광역시,030,서구,55,변동 +1062,25,대전광역시,030,서구,56,용문동 +1063,25,대전광역시,030,서구,57,탄방동 +1064,25,대전광역시,030,서구,59,둔산1동 +1065,25,대전광역시,030,서구,60,둔산2동 +1066,25,대전광역시,030,서구,61,괴정동 +1067,25,대전광역시,030,서구,62,가장동 +1068,25,대전광역시,030,서구,63,내동 +1069,25,대전광역시,030,서구,64,갈마1동 +1070,25,대전광역시,030,서구,65,갈마2동 +1071,25,대전광역시,030,서구,66,월평1동 +1072,25,대전광역시,030,서구,67,월평2동 +1073,25,대전광역시,030,서구,68,월평3동 +1074,25,대전광역시,030,서구,69,만년동 +1075,25,대전광역시,030,서구,70,가수원동 +1076,25,대전광역시,030,서구,71,기성동 +1077,25,대전광역시,030,서구,72,관저1동 +1078,25,대전광역시,030,서구,73,관저2동 +1079,25,대전광역시,030,서구,74,둔산3동 +1080,25,대전광역시,040,유성구,51,진잠동 +1081,25,대전광역시,040,유성구,54,온천2동 +1082,25,대전광역시,040,유성구,55,신성동 +1083,25,대전광역시,040,유성구,57,전민동 +1084,25,대전광역시,040,유성구,59,노은1동 +1085,25,대전광역시,040,유성구,61,구즉동 +1086,25,대전광역시,040,유성구,63,관평동 +1087,25,대전광역시,040,유성구,64,온천1동 +1088,25,대전광역시,040,유성구,65,원신흥동 +1089,25,대전광역시,040,유성구,66,노은2동 +1090,25,대전광역시,040,유성구,67,노은3동 +1091,25,대전광역시,050,대덕구,51,오정동 +1092,25,대전광역시,050,대덕구,52,대화동 +1093,25,대전광역시,050,대덕구,53,회덕동 +1094,25,대전광역시,050,대덕구,54,비래동 +1095,25,대전광역시,050,대덕구,55,중리동 +1096,25,대전광역시,050,대덕구,56,법1동 +1097,25,대전광역시,050,대덕구,57,법2동 +1098,25,대전광역시,050,대덕구,58,신탄진동 +1099,25,대전광역시,050,대덕구,59,석봉동 +1100,25,대전광역시,050,대덕구,60,덕암동 +1101,25,대전광역시,050,대덕구,61,목상동 +1102,25,대전광역시,050,대덕구,62,송촌동 +1103,26,울산광역시,010,중구,51,학성동 +1104,26,울산광역시,010,중구,52,반구1동 +1105,26,울산광역시,010,중구,53,반구2동 +1106,26,울산광역시,010,중구,54,복산1동 +1107,26,울산광역시,010,중구,55,복산2동 +1108,26,울산광역시,010,중구,59,우정동 +1109,26,울산광역시,010,중구,60,태화동 +1110,26,울산광역시,010,중구,61,다운동 +1111,26,울산광역시,010,중구,62,병영1동 +1112,26,울산광역시,010,중구,63,병영2동 +1113,26,울산광역시,010,중구,64,약사동 +1114,26,울산광역시,010,중구,66,성안동 +1115,26,울산광역시,010,중구,67,중앙동 +1116,26,울산광역시,020,남구,51,신정1동 +1117,26,울산광역시,020,남구,52,신정2동 +1118,26,울산광역시,020,남구,53,신정3동 +1119,26,울산광역시,020,남구,54,신정4동 +1120,26,울산광역시,020,남구,55,신정5동 +1121,26,울산광역시,020,남구,56,달동 +1122,26,울산광역시,020,남구,57,삼산동 +1123,26,울산광역시,020,남구,58,삼호동 +1124,26,울산광역시,020,남구,59,무거동 +1125,26,울산광역시,020,남구,60,옥동 +1126,26,울산광역시,020,남구,61,야음장생포동 +1127,26,울산광역시,020,남구,62,대현동 +1128,26,울산광역시,020,남구,63,수암동 +1129,26,울산광역시,020,남구,64,선암동 +1130,26,울산광역시,030,동구,51,방어동 +1131,26,울산광역시,030,동구,52,일산동 +1132,26,울산광역시,030,동구,53,화정동 +1133,26,울산광역시,030,동구,54,대송동 +1134,26,울산광역시,030,동구,55,전하1동 +1135,26,울산광역시,030,동구,58,남목1동 +1136,26,울산광역시,030,동구,59,남목2동 +1137,26,울산광역시,030,동구,60,남목3동 +1138,26,울산광역시,030,동구,61,전하2동 +1139,26,울산광역시,040,북구,51,농소1동 +1140,26,울산광역시,040,북구,52,농소2동 +1141,26,울산광역시,040,북구,53,농소3동 +1142,26,울산광역시,040,북구,54,강동동 +1143,26,울산광역시,040,북구,56,효문동 +1144,26,울산광역시,040,북구,57,송정동 +1145,26,울산광역시,040,북구,58,양정동 +1146,26,울산광역시,040,북구,59,염포동 +1147,26,울산광역시,310,울주군,11,온산읍 +1148,26,울산광역시,310,울주군,12,언양읍 +1149,26,울산광역시,310,울주군,13,온양읍 +1150,26,울산광역시,310,울주군,14,범서읍 +1151,26,울산광역시,310,울주군,15,청량읍 +1152,26,울산광역시,310,울주군,16,삼남읍 +1153,26,울산광역시,310,울주군,31,서생면 +1154,26,울산광역시,310,울주군,34,웅촌면 +1155,26,울산광역시,310,울주군,36,두동면 +1156,26,울산광역시,310,울주군,37,두서면 +1157,26,울산광역시,310,울주군,38,상북면 +1158,26,울산광역시,310,울주군,40,삼동면 +1159,29,세종특별자치시,010,세종시,11,조치원읍 +1160,29,세종특별자치시,010,세종시,31,연기면 +1161,29,세종특별자치시,010,세종시,32,연동면 +1162,29,세종특별자치시,010,세종시,33,부강면 +1163,29,세종특별자치시,010,세종시,34,금남면 +1164,29,세종특별자치시,010,세종시,35,장군면 +1165,29,세종특별자치시,010,세종시,36,연서면 +1166,29,세종특별자치시,010,세종시,37,전의면 +1167,29,세종특별자치시,010,세종시,38,전동면 +1168,29,세종특별자치시,010,세종시,39,소정면 +1169,29,세종특별자치시,010,세종시,53,도담동 +1170,29,세종특별자치시,010,세종시,56,종촌동 +1171,29,세종특별자치시,010,세종시,59,아름동 +1172,29,세종특별자치시,010,세종시,60,고운동 +1173,29,세종특별자치시,010,세종시,61,한솔동 +1174,29,세종특별자치시,010,세종시,64,대평동 +1175,29,세종특별자치시,010,세종시,65,소담동 +1176,29,세종특별자치시,010,세종시,66,보람동 +1177,29,세종특별자치시,010,세종시,67,새롬동 +1178,29,세종특별자치시,010,세종시,68,다정동 +1179,31,경기도,011,수원시 장안구,54,파장동 +1180,31,경기도,011,수원시 장안구,55,율천동 +1181,31,경기도,011,수원시 장안구,56,정자1동 +1182,31,경기도,011,수원시 장안구,57,정자2동 +1183,31,경기도,011,수원시 장안구,58,영화동 +1184,31,경기도,011,수원시 장안구,59,송죽동 +1185,31,경기도,011,수원시 장안구,60,조원1동 +1186,31,경기도,011,수원시 장안구,61,연무동 +1187,31,경기도,011,수원시 장안구,62,정자3동 +1188,31,경기도,011,수원시 장안구,63,조원2동 +1189,31,경기도,012,수원시 권선구,52,세류1동 +1190,31,경기도,012,수원시 권선구,53,세류2동 +1191,31,경기도,012,수원시 권선구,54,세류3동 +1192,31,경기도,012,수원시 권선구,55,평동 +1193,31,경기도,012,수원시 권선구,56,서둔동 +1194,31,경기도,012,수원시 권선구,57,구운동 +1195,31,경기도,012,수원시 권선구,60,권선1동 +1196,31,경기도,012,수원시 권선구,61,곡선동 +1197,31,경기도,012,수원시 권선구,62,입북동 +1198,31,경기도,012,수원시 권선구,64,권선2동 +1199,31,경기도,012,수원시 권선구,65,금곡동 +1200,31,경기도,012,수원시 권선구,66,호매실동 +1201,31,경기도,013,수원시 팔달구,53,지동 +1202,31,경기도,013,수원시 팔달구,54,우만1동 +1203,31,경기도,013,수원시 팔달구,55,우만2동 +1204,31,경기도,013,수원시 팔달구,56,인계동 +1205,31,경기도,013,수원시 팔달구,67,매교동 +1206,31,경기도,013,수원시 팔달구,68,매산동 +1207,31,경기도,013,수원시 팔달구,69,고등동 +1208,31,경기도,013,수원시 팔달구,70,화서1동 +1209,31,경기도,013,수원시 팔달구,71,화서2동 +1210,31,경기도,013,수원시 팔달구,72,행궁동 +1211,31,경기도,014,수원시 영통구,51,매탄1동 +1212,31,경기도,014,수원시 영통구,52,매탄2동 +1213,31,경기도,014,수원시 영통구,53,매탄3동 +1214,31,경기도,014,수원시 영통구,54,매탄4동 +1215,31,경기도,014,수원시 영통구,60,원천동 +1216,31,경기도,014,수원시 영통구,62,광교1동 +1217,31,경기도,014,수원시 영통구,63,광교2동 +1218,31,경기도,014,수원시 영통구,64,영통1동 +1219,31,경기도,014,수원시 영통구,65,영통2동 +1220,31,경기도,014,수원시 영통구,66,영통3동 +1221,31,경기도,014,수원시 영통구,67,망포1동 +1222,31,경기도,014,수원시 영통구,68,망포2동 +1223,31,경기도,021,성남시 수정구,51,신흥1동 +1224,31,경기도,021,성남시 수정구,52,신흥2동 +1225,31,경기도,021,성남시 수정구,53,신흥3동 +1226,31,경기도,021,성남시 수정구,54,태평1동 +1227,31,경기도,021,성남시 수정구,55,태평2동 +1228,31,경기도,021,성남시 수정구,56,태평3동 +1229,31,경기도,021,성남시 수정구,57,태평4동 +1230,31,경기도,021,성남시 수정구,58,수진1동 +1231,31,경기도,021,성남시 수정구,59,수진2동 +1232,31,경기도,021,성남시 수정구,60,단대동 +1233,31,경기도,021,성남시 수정구,61,산성동 +1234,31,경기도,021,성남시 수정구,62,양지동 +1235,31,경기도,021,성남시 수정구,64,신촌동 +1236,31,경기도,021,성남시 수정구,65,고등동 +1237,31,경기도,021,성남시 수정구,66,시흥동 +1238,31,경기도,021,성남시 수정구,67,복정동 +1239,31,경기도,021,성남시 수정구,68,위례동 +1240,31,경기도,022,성남시 중원구,51,성남동 +1241,31,경기도,022,성남시 중원구,53,금광1동 +1242,31,경기도,022,성남시 중원구,54,금광2동 +1243,31,경기도,022,성남시 중원구,55,은행1동 +1244,31,경기도,022,성남시 중원구,56,은행2동 +1245,31,경기도,022,성남시 중원구,57,상대원1동 +1246,31,경기도,022,성남시 중원구,58,상대원2동 +1247,31,경기도,022,성남시 중원구,59,상대원3동 +1248,31,경기도,022,성남시 중원구,60,하대원동 +1249,31,경기도,022,성남시 중원구,61,도촌동 +1250,31,경기도,022,성남시 중원구,62,중앙동 +1251,31,경기도,023,성남시 분당구,51,분당동 +1252,31,경기도,023,성남시 분당구,52,수내3동 +1253,31,경기도,023,성남시 분당구,53,수내1동 +1254,31,경기도,023,성남시 분당구,54,수내2동 +1255,31,경기도,023,성남시 분당구,55,정자2동 +1256,31,경기도,023,성남시 분당구,56,정자3동 +1257,31,경기도,023,성남시 분당구,58,서현1동 +1258,31,경기도,023,성남시 분당구,59,서현2동 +1259,31,경기도,023,성남시 분당구,60,이매1동 +1260,31,경기도,023,성남시 분당구,61,이매2동 +1261,31,경기도,023,성남시 분당구,62,야탑1동 +1262,31,경기도,023,성남시 분당구,63,야탑3동 +1263,31,경기도,023,성남시 분당구,64,야탑2동 +1264,31,경기도,023,성남시 분당구,67,구미동 +1265,31,경기도,023,성남시 분당구,68,운중동 +1266,31,경기도,023,성남시 분당구,71,금곡동 +1267,31,경기도,023,성남시 분당구,72,구미1동 +1268,31,경기도,023,성남시 분당구,74,삼평동 +1269,31,경기도,023,성남시 분당구,75,판교동 +1270,31,경기도,023,성남시 분당구,76,백현동 +1271,31,경기도,023,성남시 분당구,77,정자1동 +1272,31,경기도,023,성남시 분당구,78,정자동 +1273,31,경기도,030,의정부시,52,의정부2동 +1274,31,경기도,030,의정부시,55,호원1동 +1275,31,경기도,030,의정부시,56,장암동 +1276,31,경기도,030,의정부시,57,신곡1동 +1277,31,경기도,030,의정부시,58,신곡2동 +1278,31,경기도,030,의정부시,59,송산1동 +1279,31,경기도,030,의정부시,60,자금동 +1280,31,경기도,030,의정부시,64,녹양동 +1281,31,경기도,030,의정부시,65,호원2동 +1282,31,경기도,030,의정부시,67,흥선동 +1283,31,경기도,030,의정부시,68,가능동 +1284,31,경기도,030,의정부시,69,의정부1동 +1285,31,경기도,030,의정부시,70,송산2동 +1286,31,경기도,030,의정부시,71,송산3동 +1287,31,경기도,041,안양시 만안구,51,안양1동 +1288,31,경기도,041,안양시 만안구,52,안양2동 +1289,31,경기도,041,안양시 만안구,53,안양3동 +1290,31,경기도,041,안양시 만안구,54,안양4동 +1291,31,경기도,041,안양시 만안구,55,안양5동 +1292,31,경기도,041,안양시 만안구,56,안양6동 +1293,31,경기도,041,안양시 만안구,57,안양7동 +1294,31,경기도,041,안양시 만안구,58,안양8동 +1295,31,경기도,041,안양시 만안구,59,안양9동 +1296,31,경기도,041,안양시 만안구,60,석수1동 +1297,31,경기도,041,안양시 만안구,61,석수2동 +1298,31,경기도,041,안양시 만안구,62,석수3동 +1299,31,경기도,041,안양시 만안구,63,박달1동 +1300,31,경기도,041,안양시 만안구,64,박달2동 +1301,31,경기도,042,안양시 동안구,51,비산1동 +1302,31,경기도,042,안양시 동안구,52,비산2동 +1303,31,경기도,042,안양시 동안구,53,비산3동 +1304,31,경기도,042,안양시 동안구,54,부흥동 +1305,31,경기도,042,안양시 동안구,55,달안동 +1306,31,경기도,042,안양시 동안구,56,관양1동 +1307,31,경기도,042,안양시 동안구,57,관양2동 +1308,31,경기도,042,안양시 동안구,58,부림동 +1309,31,경기도,042,안양시 동안구,59,평촌동 +1310,31,경기도,042,안양시 동안구,60,평안동 +1311,31,경기도,042,안양시 동안구,61,귀인동 +1312,31,경기도,042,안양시 동안구,62,호계1동 +1313,31,경기도,042,안양시 동안구,63,호계2동 +1314,31,경기도,042,안양시 동안구,64,호계3동 +1315,31,경기도,042,안양시 동안구,65,범계동 +1316,31,경기도,042,안양시 동안구,66,신촌동 +1317,31,경기도,042,안양시 동안구,67,갈산동 +1318,31,경기도,050,부천시,87,심곡동 +1319,31,경기도,050,부천시,88,부천동 +1320,31,경기도,050,부천시,89,중동 +1321,31,경기도,050,부천시,90,신중동 +1322,31,경기도,050,부천시,91,상동 +1323,31,경기도,050,부천시,92,대산동 +1324,31,경기도,050,부천시,93,소사본동 +1325,31,경기도,050,부천시,94,범안동 +1326,31,경기도,050,부천시,95,성곡동 +1327,31,경기도,050,부천시,96,오정동 +1328,31,경기도,060,광명시,51,광명1동 +1329,31,경기도,060,광명시,52,광명2동 +1330,31,경기도,060,광명시,53,광명3동 +1331,31,경기도,060,광명시,54,광명4동 +1332,31,경기도,060,광명시,55,광명5동 +1333,31,경기도,060,광명시,56,광명6동 +1334,31,경기도,060,광명시,57,광명7동 +1335,31,경기도,060,광명시,58,철산1동 +1336,31,경기도,060,광명시,59,철산2동 +1337,31,경기도,060,광명시,60,철산3동 +1338,31,경기도,060,광명시,61,철산4동 +1339,31,경기도,060,광명시,62,하안1동 +1340,31,경기도,060,광명시,63,하안2동 +1341,31,경기도,060,광명시,64,하안3동 +1342,31,경기도,060,광명시,65,하안4동 +1343,31,경기도,060,광명시,66,소하1동 +1344,31,경기도,060,광명시,67,소하2동 +1345,31,경기도,060,광명시,68,학온동 +1346,31,경기도,070,평택시,11,팽성읍 +1347,31,경기도,070,평택시,12,안중읍 +1348,31,경기도,070,평택시,13,포승읍 +1349,31,경기도,070,평택시,14,청북읍 +1350,31,경기도,070,평택시,31,진위면 +1351,31,경기도,070,평택시,32,서탄면 +1352,31,경기도,070,평택시,33,고덕면 +1353,31,경기도,070,평택시,34,오성면 +1354,31,경기도,070,평택시,37,현덕면 +1355,31,경기도,070,평택시,51,중앙동 +1356,31,경기도,070,평택시,52,서정동 +1357,31,경기도,070,평택시,53,송탄동 +1358,31,경기도,070,평택시,55,지산동 +1359,31,경기도,070,평택시,56,송북동 +1360,31,경기도,070,평택시,57,신장1동 +1361,31,경기도,070,평택시,58,신장2동 +1362,31,경기도,070,평택시,59,신평동 +1363,31,경기도,070,평택시,60,원평동 +1364,31,경기도,070,평택시,61,통복동 +1365,31,경기도,070,평택시,62,비전1동 +1366,31,경기도,070,평택시,64,세교동 +1367,31,경기도,070,평택시,65,비전2동 +1368,31,경기도,070,평택시,66,용이동 +1369,31,경기도,080,동두천시,51,생연1동 +1370,31,경기도,080,동두천시,52,생연2동 +1371,31,경기도,080,동두천시,53,중앙동 +1372,31,경기도,080,동두천시,55,보산동 +1373,31,경기도,080,동두천시,56,불현동 +1374,31,경기도,080,동두천시,58,소요동 +1375,31,경기도,080,동두천시,60,상패동 +1376,31,경기도,080,동두천시,61,송내동 +1377,31,경기도,091,안산시 상록구,51,일동 +1378,31,경기도,091,안산시 상록구,54,본오1동 +1379,31,경기도,091,안산시 상록구,55,본오2동 +1380,31,경기도,091,안산시 상록구,56,본오3동 +1381,31,경기도,091,안산시 상록구,57,부곡동 +1382,31,경기도,091,안산시 상록구,58,월피동 +1383,31,경기도,091,안산시 상록구,62,성포동 +1384,31,경기도,091,안산시 상록구,71,반월동 +1385,31,경기도,091,안산시 상록구,73,안산동 +1386,31,경기도,091,안산시 상록구,74,이동 +1387,31,경기도,091,안산시 상록구,76,사동 +1388,31,경기도,091,안산시 상록구,77,사이동 +1389,31,경기도,091,안산시 상록구,78,해양동 +1390,31,경기도,092,안산시 단원구,59,와동 +1391,31,경기도,092,안산시 단원구,66,초지동 +1392,31,경기도,092,안산시 단원구,68,선부1동 +1393,31,경기도,092,안산시 단원구,69,선부2동 +1394,31,경기도,092,안산시 단원구,70,선부3동 +1395,31,경기도,092,안산시 단원구,72,대부동 +1396,31,경기도,092,안산시 단원구,73,호수동 +1397,31,경기도,092,안산시 단원구,74,고잔동 +1398,31,경기도,092,안산시 단원구,75,중앙동 +1399,31,경기도,092,안산시 단원구,76,원곡동 +1400,31,경기도,092,안산시 단원구,77,신길동 +1401,31,경기도,092,안산시 단원구,78,백운동 +1402,31,경기도,101,고양시 덕양구,51,주교동 +1403,31,경기도,101,고양시 덕양구,52,원신동 +1404,31,경기도,101,고양시 덕양구,53,흥도동 +1405,31,경기도,101,고양시 덕양구,54,성사1동 +1406,31,경기도,101,고양시 덕양구,55,성사2동 +1407,31,경기도,101,고양시 덕양구,56,효자동 +1408,31,경기도,101,고양시 덕양구,58,창릉동 +1409,31,경기도,101,고양시 덕양구,59,고양동 +1410,31,경기도,101,고양시 덕양구,60,관산동 +1411,31,경기도,101,고양시 덕양구,61,능곡동 +1412,31,경기도,101,고양시 덕양구,62,화정1동 +1413,31,경기도,101,고양시 덕양구,63,화정2동 +1414,31,경기도,101,고양시 덕양구,64,행주동 +1415,31,경기도,101,고양시 덕양구,65,행신1동 +1416,31,경기도,101,고양시 덕양구,66,행신2동 +1417,31,경기도,101,고양시 덕양구,67,화전동 +1418,31,경기도,101,고양시 덕양구,68,대덕동 +1419,31,경기도,101,고양시 덕양구,69,행신3동 +1420,31,경기도,101,고양시 덕양구,70,삼송동 +1421,31,경기도,103,고양시 일산동구,51,식사동 +1422,31,경기도,103,고양시 일산동구,52,중산동 +1423,31,경기도,103,고양시 일산동구,53,정발산동 +1424,31,경기도,103,고양시 일산동구,54,풍산동 +1425,31,경기도,103,고양시 일산동구,55,백석1동 +1426,31,경기도,103,고양시 일산동구,56,마두1동 +1427,31,경기도,103,고양시 일산동구,57,마두2동 +1428,31,경기도,103,고양시 일산동구,58,장항1동 +1429,31,경기도,103,고양시 일산동구,59,장항2동 +1430,31,경기도,103,고양시 일산동구,60,고봉동 +1431,31,경기도,103,고양시 일산동구,61,백석2동 +1432,31,경기도,104,고양시 일산서구,51,일산1동 +1433,31,경기도,104,고양시 일산서구,52,일산2동 +1434,31,경기도,104,고양시 일산서구,53,일산3동 +1435,31,경기도,104,고양시 일산서구,54,탄현동 +1436,31,경기도,104,고양시 일산서구,55,주엽1동 +1437,31,경기도,104,고양시 일산서구,56,주엽2동 +1438,31,경기도,104,고양시 일산서구,57,대화동 +1439,31,경기도,104,고양시 일산서구,58,송포동 +1440,31,경기도,104,고양시 일산서구,59,송산동 +1441,31,경기도,110,과천시,51,중앙동 +1442,31,경기도,110,과천시,52,갈현동 +1443,31,경기도,110,과천시,53,별양동 +1444,31,경기도,110,과천시,54,부림동 +1445,31,경기도,110,과천시,55,과천동 +1446,31,경기도,110,과천시,56,문원동 +1447,31,경기도,120,구리시,51,갈매동 +1448,31,경기도,120,구리시,52,동구동 +1449,31,경기도,120,구리시,53,인창동 +1450,31,경기도,120,구리시,54,교문1동 +1451,31,경기도,120,구리시,55,교문2동 +1452,31,경기도,120,구리시,56,수택1동 +1453,31,경기도,120,구리시,57,수택2동 +1454,31,경기도,120,구리시,58,수택3동 +1455,31,경기도,130,남양주시,11,와부읍 +1456,31,경기도,130,남양주시,12,진접읍 +1457,31,경기도,130,남양주시,13,화도읍 +1458,31,경기도,130,남양주시,14,진건읍 +1459,31,경기도,130,남양주시,15,오남읍 +1460,31,경기도,130,남양주시,16,퇴계원읍 +1461,31,경기도,130,남양주시,31,별내면 +1462,31,경기도,130,남양주시,34,수동면 +1463,31,경기도,130,남양주시,35,조안면 +1464,31,경기도,130,남양주시,51,호평동 +1465,31,경기도,130,남양주시,52,평내동 +1466,31,경기도,130,남양주시,53,금곡동 +1467,31,경기도,130,남양주시,54,양정동 +1468,31,경기도,130,남양주시,57,별내동 +1469,31,경기도,130,남양주시,58,다산1동 +1470,31,경기도,130,남양주시,59,다산2동 +1471,31,경기도,140,오산시,51,중앙동 +1472,31,경기도,140,오산시,52,대원동 +1473,31,경기도,140,오산시,53,남촌동 +1474,31,경기도,140,오산시,54,신장동 +1475,31,경기도,140,오산시,55,세마동 +1476,31,경기도,140,오산시,56,초평동 +1477,31,경기도,150,시흥시,51,대야동 +1478,31,경기도,150,시흥시,52,신천동 +1479,31,경기도,150,시흥시,53,신현동 +1480,31,경기도,150,시흥시,54,은행동 +1481,31,경기도,150,시흥시,55,매화동 +1482,31,경기도,150,시흥시,56,목감동 +1483,31,경기도,150,시흥시,59,과림동 +1484,31,경기도,150,시흥시,61,정왕2동 +1485,31,경기도,150,시흥시,62,정왕3동 +1486,31,경기도,150,시흥시,64,정왕본동 +1487,31,경기도,150,시흥시,65,정왕1동 +1488,31,경기도,150,시흥시,67,능곡동 +1489,31,경기도,150,시흥시,68,군자동 +1490,31,경기도,150,시흥시,69,월곶동 +1491,31,경기도,150,시흥시,70,연성동 +1492,31,경기도,150,시흥시,71,장곡동 +1493,31,경기도,150,시흥시,72,정왕4동 +1494,31,경기도,150,시흥시,73,배곧동 +1495,31,경기도,160,군포시,51,군포1동 +1496,31,경기도,160,군포시,52,군포2동 +1497,31,경기도,160,군포시,54,산본1동 +1498,31,경기도,160,군포시,55,산본2동 +1499,31,경기도,160,군포시,56,금정동 +1500,31,경기도,160,군포시,57,재궁동 +1501,31,경기도,160,군포시,58,오금동 +1502,31,경기도,160,군포시,59,수리동 +1503,31,경기도,160,군포시,60,궁내동 +1504,31,경기도,160,군포시,61,광정동 +1505,31,경기도,160,군포시,62,대야동 +1506,31,경기도,170,의왕시,51,고천동 +1507,31,경기도,170,의왕시,52,부곡동 +1508,31,경기도,170,의왕시,53,오전동 +1509,31,경기도,170,의왕시,54,내손1동 +1510,31,경기도,170,의왕시,55,내손2동 +1511,31,경기도,170,의왕시,56,청계동 +1512,31,경기도,180,하남시,51,천현동 +1513,31,경기도,180,하남시,52,신장1동 +1514,31,경기도,180,하남시,53,신장2동 +1515,31,경기도,180,하남시,54,덕풍1동 +1516,31,경기도,180,하남시,55,덕풍2동 +1517,31,경기도,180,하남시,56,덕풍3동 +1518,31,경기도,180,하남시,59,춘궁동 +1519,31,경기도,180,하남시,60,초이동 +1520,31,경기도,180,하남시,61,풍산동 +1521,31,경기도,180,하남시,62,미사1동 +1522,31,경기도,180,하남시,63,미사2동 +1523,31,경기도,180,하남시,65,위례동 +1524,31,경기도,180,하남시,66,감북동 +1525,31,경기도,180,하남시,67,감일동 +1526,31,경기도,191,용인시 처인구,11,포곡읍 +1527,31,경기도,191,용인시 처인구,12,모현읍 +1528,31,경기도,191,용인시 처인구,13,이동읍 +1529,31,경기도,191,용인시 처인구,14,남사읍 +1530,31,경기도,191,용인시 처인구,34,원삼면 +1531,31,경기도,191,용인시 처인구,35,백암면 +1532,31,경기도,191,용인시 처인구,36,양지면 +1533,31,경기도,191,용인시 처인구,51,중앙동 +1534,31,경기도,191,용인시 처인구,52,역삼동 +1535,31,경기도,191,용인시 처인구,53,유림동 +1536,31,경기도,191,용인시 처인구,54,동부동 +1537,31,경기도,192,용인시 기흥구,52,구갈동 +1538,31,경기도,192,용인시 기흥구,54,기흥동 +1539,31,경기도,192,용인시 기흥구,55,서농동 +1540,31,경기도,192,용인시 기흥구,56,구성동 +1541,31,경기도,192,용인시 기흥구,57,마북동 +1542,31,경기도,192,용인시 기흥구,59,보정동 +1543,31,경기도,192,용인시 기흥구,60,상하동 +1544,31,경기도,192,용인시 기흥구,61,신갈동 +1545,31,경기도,192,용인시 기흥구,63,영덕1동 +1546,31,경기도,192,용인시 기흥구,64,영덕2동 +1547,31,경기도,192,용인시 기흥구,65,상갈동 +1548,31,경기도,192,용인시 기흥구,66,보라동 +1549,31,경기도,192,용인시 기흥구,67,동백1동 +1550,31,경기도,192,용인시 기흥구,68,동백2동 +1551,31,경기도,192,용인시 기흥구,69,동백3동 +1552,31,경기도,193,용인시 수지구,51,풍덕천1동 +1553,31,경기도,193,용인시 수지구,52,풍덕천2동 +1554,31,경기도,193,용인시 수지구,53,신봉동 +1555,31,경기도,193,용인시 수지구,54,죽전1동 +1556,31,경기도,193,용인시 수지구,55,죽전2동 +1557,31,경기도,193,용인시 수지구,56,동천동 +1558,31,경기도,193,용인시 수지구,57,상현1동 +1559,31,경기도,193,용인시 수지구,58,상현2동 +1560,31,경기도,193,용인시 수지구,59,성복동 +1561,31,경기도,200,파주시,11,문산읍 +1562,31,경기도,200,파주시,12,파주읍 +1563,31,경기도,200,파주시,13,법원읍 +1564,31,경기도,200,파주시,15,조리읍 +1565,31,경기도,200,파주시,21,진동면 +1566,31,경기도,200,파주시,26,장단면 +1567,31,경기도,200,파주시,27,진서면 +1568,31,경기도,200,파주시,31,월롱면 +1569,31,경기도,200,파주시,32,탄현면 +1570,31,경기도,200,파주시,35,광탄면 +1571,31,경기도,200,파주시,36,파평면 +1572,31,경기도,200,파주시,37,적성면 +1573,31,경기도,200,파주시,38,군내면 +1574,31,경기도,200,파주시,52,금촌2동 +1575,31,경기도,200,파주시,53,금촌1동 +1576,31,경기도,200,파주시,54,금촌3동 +1577,31,경기도,200,파주시,55,교하동 +1578,31,경기도,200,파주시,56,운정1동 +1579,31,경기도,200,파주시,57,운정2동 +1580,31,경기도,200,파주시,58,운정3동 +1581,31,경기도,210,이천시,11,장호원읍 +1582,31,경기도,210,이천시,12,부발읍 +1583,31,경기도,210,이천시,31,신둔면 +1584,31,경기도,210,이천시,32,백사면 +1585,31,경기도,210,이천시,33,호법면 +1586,31,경기도,210,이천시,34,마장면 +1587,31,경기도,210,이천시,35,대월면 +1588,31,경기도,210,이천시,36,모가면 +1589,31,경기도,210,이천시,37,설성면 +1590,31,경기도,210,이천시,38,율면 +1591,31,경기도,210,이천시,51,창전동 +1592,31,경기도,210,이천시,52,중리동 +1593,31,경기도,210,이천시,53,관고동 +1594,31,경기도,210,이천시,54,증포동 +1595,31,경기도,220,안성시,11,공도읍 +1596,31,경기도,220,안성시,31,보개면 +1597,31,경기도,220,안성시,32,금광면 +1598,31,경기도,220,안성시,33,서운면 +1599,31,경기도,220,안성시,34,미양면 +1600,31,경기도,220,안성시,35,대덕면 +1601,31,경기도,220,안성시,36,양성면 +1602,31,경기도,220,안성시,38,원곡면 +1603,31,경기도,220,안성시,39,일죽면 +1604,31,경기도,220,안성시,40,죽산면 +1605,31,경기도,220,안성시,41,삼죽면 +1606,31,경기도,220,안성시,42,고삼면 +1607,31,경기도,220,안성시,51,안성1동 +1608,31,경기도,220,안성시,52,안성2동 +1609,31,경기도,220,안성시,53,안성3동 +1610,31,경기도,230,김포시,11,통진읍 +1611,31,경기도,230,김포시,12,고촌읍 +1612,31,경기도,230,김포시,13,양촌읍 +1613,31,경기도,230,김포시,34,대곶면 +1614,31,경기도,230,김포시,35,월곶면 +1615,31,경기도,230,김포시,36,하성면 +1616,31,경기도,230,김포시,53,사우동 +1617,31,경기도,230,김포시,54,풍무동 +1618,31,경기도,230,김포시,56,장기동 +1619,31,경기도,230,김포시,60,운양동 +1620,31,경기도,230,김포시,61,김포본동 +1621,31,경기도,230,김포시,62,장기본동 +1622,31,경기도,230,김포시,63,구래동 +1623,31,경기도,230,김포시,64,마산동 +1624,31,경기도,240,화성시,12,봉담읍 +1625,31,경기도,240,화성시,13,우정읍 +1626,31,경기도,240,화성시,14,향남읍 +1627,31,경기도,240,화성시,15,남양읍 +1628,31,경기도,240,화성시,31,매송면 +1629,31,경기도,240,화성시,33,비봉면 +1630,31,경기도,240,화성시,35,마도면 +1631,31,경기도,240,화성시,36,송산면 +1632,31,경기도,240,화성시,37,서신면 +1633,31,경기도,240,화성시,38,팔탄면 +1634,31,경기도,240,화성시,39,장안면 +1635,31,경기도,240,화성시,42,양감면 +1636,31,경기도,240,화성시,43,정남면 +1637,31,경기도,240,화성시,52,진안동 +1638,31,경기도,240,화성시,53,병점1동 +1639,31,경기도,240,화성시,54,병점2동 +1640,31,경기도,240,화성시,55,반월동 +1641,31,경기도,240,화성시,56,기배동 +1642,31,경기도,240,화성시,57,화산동 +1643,31,경기도,240,화성시,60,동탄2동 +1644,31,경기도,240,화성시,61,동탄1동 +1645,31,경기도,240,화성시,62,동탄3동 +1646,31,경기도,240,화성시,64,동탄4동 +1647,31,경기도,240,화성시,65,동탄5동 +1648,31,경기도,240,화성시,67,새솔동 +1649,31,경기도,240,화성시,69,동탄7동 +1650,31,경기도,240,화성시,70,동탄6동 +1651,31,경기도,240,화성시,71,동탄8동 +1652,31,경기도,250,광주시,11,오포읍 +1653,31,경기도,250,광주시,12,초월읍 +1654,31,경기도,250,광주시,14,곤지암읍 +1655,31,경기도,250,광주시,34,도척면 +1656,31,경기도,250,광주시,35,퇴촌면 +1657,31,경기도,250,광주시,36,남종면 +1658,31,경기도,250,광주시,38,남한산성면 +1659,31,경기도,250,광주시,54,경안동 +1660,31,경기도,250,광주시,55,송정동 +1661,31,경기도,250,광주시,56,쌍령동 +1662,31,경기도,250,광주시,57,탄벌동 +1663,31,경기도,250,광주시,58,광남1동 +1664,31,경기도,250,광주시,59,광남2동 +1665,31,경기도,260,양주시,11,백석읍 +1666,31,경기도,260,양주시,31,은현면 +1667,31,경기도,260,양주시,32,남면 +1668,31,경기도,260,양주시,33,광적면 +1669,31,경기도,260,양주시,34,장흥면 +1670,31,경기도,260,양주시,51,양주1동 +1671,31,경기도,260,양주시,52,양주2동 +1672,31,경기도,260,양주시,53,회천1동 +1673,31,경기도,260,양주시,54,회천2동 +1674,31,경기도,260,양주시,55,회천3동 +1675,31,경기도,260,양주시,56,회천4동 +1676,31,경기도,270,포천시,11,소흘읍 +1677,31,경기도,270,포천시,31,군내면 +1678,31,경기도,270,포천시,32,내촌면 +1679,31,경기도,270,포천시,33,가산면 +1680,31,경기도,270,포천시,34,신북면 +1681,31,경기도,270,포천시,35,창수면 +1682,31,경기도,270,포천시,36,영중면 +1683,31,경기도,270,포천시,37,일동면 +1684,31,경기도,270,포천시,38,이동면 +1685,31,경기도,270,포천시,39,영북면 +1686,31,경기도,270,포천시,40,관인면 +1687,31,경기도,270,포천시,41,화현면 +1688,31,경기도,270,포천시,51,포천동 +1689,31,경기도,270,포천시,52,선단동 +1690,31,경기도,280,여주시,11,가남읍 +1691,31,경기도,280,여주시,31,점동면 +1692,31,경기도,280,여주시,32,능서면 +1693,31,경기도,280,여주시,33,흥천면 +1694,31,경기도,280,여주시,34,금사면 +1695,31,경기도,280,여주시,35,산북면 +1696,31,경기도,280,여주시,36,대신면 +1697,31,경기도,280,여주시,37,북내면 +1698,31,경기도,280,여주시,38,강천면 +1699,31,경기도,280,여주시,51,여흥동 +1700,31,경기도,280,여주시,52,중앙동 +1701,31,경기도,280,여주시,53,오학동 +1702,31,경기도,350,연천군,11,연천읍 +1703,31,경기도,350,연천군,12,전곡읍 +1704,31,경기도,350,연천군,31,군남면 +1705,31,경기도,350,연천군,32,청산면 +1706,31,경기도,350,연천군,33,백학면 +1707,31,경기도,350,연천군,34,미산면 +1708,31,경기도,350,연천군,35,왕징면 +1709,31,경기도,350,연천군,36,신서면 +1710,31,경기도,350,연천군,37,중면 +1711,31,경기도,350,연천군,38,장남면 +1712,31,경기도,370,가평군,11,가평읍 +1713,31,경기도,370,가평군,31,설악면 +1714,31,경기도,370,가평군,32,청평면 +1715,31,경기도,370,가평군,33,상면 +1716,31,경기도,370,가평군,35,북면 +1717,31,경기도,370,가평군,36,조종면 +1718,31,경기도,380,양평군,11,양평읍 +1719,31,경기도,380,양평군,31,강상면 +1720,31,경기도,380,양평군,32,강하면 +1721,31,경기도,380,양평군,33,양서면 +1722,31,경기도,380,양평군,34,옥천면 +1723,31,경기도,380,양평군,35,서종면 +1724,31,경기도,380,양평군,36,단월면 +1725,31,경기도,380,양평군,37,청운면 +1726,31,경기도,380,양평군,38,양동면 +1727,31,경기도,380,양평군,39,지평면 +1728,31,경기도,380,양평군,40,용문면 +1729,31,경기도,380,양평군,41,개군면 +1730,32,강원도,010,춘천시,11,신북읍 +1731,32,강원도,010,춘천시,31,동면 +1732,32,강원도,010,춘천시,32,동산면 +1733,32,강원도,010,춘천시,33,신동면 +1734,32,강원도,010,춘천시,34,동내면 +1735,32,강원도,010,춘천시,35,남면 +1736,32,강원도,010,춘천시,36,남산면 +1737,32,강원도,010,춘천시,37,서면 +1738,32,강원도,010,춘천시,38,사북면 +1739,32,강원도,010,춘천시,39,북산면 +1740,32,강원도,010,춘천시,52,교동 +1741,32,강원도,010,춘천시,53,조운동 +1742,32,강원도,010,춘천시,54,약사명동 +1743,32,강원도,010,춘천시,57,근화동 +1744,32,강원도,010,춘천시,58,소양동 +1745,32,강원도,010,춘천시,60,후평1동 +1746,32,강원도,010,춘천시,61,후평2동 +1747,32,강원도,010,춘천시,62,후평3동 +1748,32,강원도,010,춘천시,63,효자1동 +1749,32,강원도,010,춘천시,64,효자2동 +1750,32,강원도,010,춘천시,65,효자3동 +1751,32,강원도,010,춘천시,66,석사동 +1752,32,강원도,010,춘천시,67,퇴계동 +1753,32,강원도,010,춘천시,68,강남동 +1754,32,강원도,010,춘천시,71,신사우동 +1755,32,강원도,020,원주시,11,문막읍 +1756,32,강원도,020,원주시,31,소초면 +1757,32,강원도,020,원주시,32,호저면 +1758,32,강원도,020,원주시,33,지정면 +1759,32,강원도,020,원주시,34,부론면 +1760,32,강원도,020,원주시,35,귀래면 +1761,32,강원도,020,원주시,36,흥업면 +1762,32,강원도,020,원주시,37,판부면 +1763,32,강원도,020,원주시,38,신림면 +1764,32,강원도,020,원주시,51,중앙동 +1765,32,강원도,020,원주시,52,원인동 +1766,32,강원도,020,원주시,53,개운동 +1767,32,강원도,020,원주시,54,명륜1동 +1768,32,강원도,020,원주시,55,명륜2동 +1769,32,강원도,020,원주시,56,단구동 +1770,32,강원도,020,원주시,57,일산동 +1771,32,강원도,020,원주시,58,학성동 +1772,32,강원도,020,원주시,60,단계동 +1773,32,강원도,020,원주시,61,우산동 +1774,32,강원도,020,원주시,62,태장1동 +1775,32,강원도,020,원주시,63,태장2동 +1776,32,강원도,020,원주시,64,봉산동 +1777,32,강원도,020,원주시,66,행구동 +1778,32,강원도,020,원주시,67,무실동 +1779,32,강원도,020,원주시,68,반곡관설동 +1780,32,강원도,030,강릉시,11,주문진읍 +1781,32,강원도,030,강릉시,31,성산면 +1782,32,강원도,030,강릉시,32,왕산면 +1783,32,강원도,030,강릉시,33,구정면 +1784,32,강원도,030,강릉시,34,강동면 +1785,32,강원도,030,강릉시,35,옥계면 +1786,32,강원도,030,강릉시,36,사천면 +1787,32,강원도,030,강릉시,37,연곡면 +1788,32,강원도,030,강릉시,51,홍제동 +1789,32,강원도,030,강릉시,52,중앙동 +1790,32,강원도,030,강릉시,54,옥천동 +1791,32,강원도,030,강릉시,55,교1동 +1792,32,강원도,030,강릉시,56,교2동 +1793,32,강원도,030,강릉시,57,포남1동 +1794,32,강원도,030,강릉시,58,포남2동 +1795,32,강원도,030,강릉시,59,초당동 +1796,32,강원도,030,강릉시,60,송정동 +1797,32,강원도,030,강릉시,61,내곡동 +1798,32,강원도,030,강릉시,62,강남동 +1799,32,강원도,030,강릉시,65,성덕동 +1800,32,강원도,030,강릉시,67,경포동 +1801,32,강원도,040,동해시,51,천곡동 +1802,32,강원도,040,동해시,52,송정동 +1803,32,강원도,040,동해시,53,북삼동 +1804,32,강원도,040,동해시,54,부곡동 +1805,32,강원도,040,동해시,55,동호동 +1806,32,강원도,040,동해시,57,발한동 +1807,32,강원도,040,동해시,59,묵호동 +1808,32,강원도,040,동해시,60,북평동 +1809,32,강원도,040,동해시,63,망상동 +1810,32,강원도,040,동해시,65,삼화동 +1811,32,강원도,050,태백시,51,황지동 +1812,32,강원도,050,태백시,52,황연동 +1813,32,강원도,050,태백시,53,삼수동 +1814,32,강원도,050,태백시,54,상장동 +1815,32,강원도,050,태백시,55,구문소동 +1816,32,강원도,050,태백시,56,장성동 +1817,32,강원도,050,태백시,58,철암동 +1818,32,강원도,050,태백시,62,문곡소도동 +1819,32,강원도,060,속초시,51,영랑동 +1820,32,강원도,060,속초시,52,동명동 +1821,32,강원도,060,속초시,54,금호동 +1822,32,강원도,060,속초시,56,교동 +1823,32,강원도,060,속초시,57,노학동 +1824,32,강원도,060,속초시,58,조양동 +1825,32,강원도,060,속초시,59,청호동 +1826,32,강원도,060,속초시,60,대포동 +1827,32,강원도,070,삼척시,11,도계읍 +1828,32,강원도,070,삼척시,12,원덕읍 +1829,32,강원도,070,삼척시,31,근덕면 +1830,32,강원도,070,삼척시,32,하장면 +1831,32,강원도,070,삼척시,33,노곡면 +1832,32,강원도,070,삼척시,34,미로면 +1833,32,강원도,070,삼척시,35,가곡면 +1834,32,강원도,070,삼척시,36,신기면 +1835,32,강원도,070,삼척시,51,남양동 +1836,32,강원도,070,삼척시,52,성내동 +1837,32,강원도,070,삼척시,53,교동 +1838,32,강원도,070,삼척시,54,정라동 +1839,32,강원도,310,홍천군,11,홍천읍 +1840,32,강원도,310,홍천군,31,화촌면 +1841,32,강원도,310,홍천군,32,두촌면 +1842,32,강원도,310,홍천군,33,내촌면 +1843,32,강원도,310,홍천군,34,서석면 +1844,32,강원도,310,홍천군,36,남면 +1845,32,강원도,310,홍천군,37,서면 +1846,32,강원도,310,홍천군,38,북방면 +1847,32,강원도,310,홍천군,39,내면 +1848,32,강원도,310,홍천군,40,영귀미면 +1849,32,강원도,320,횡성군,11,횡성읍 +1850,32,강원도,320,횡성군,31,우천면 +1851,32,강원도,320,횡성군,32,안흥면 +1852,32,강원도,320,횡성군,33,둔내면 +1853,32,강원도,320,횡성군,34,갑천면 +1854,32,강원도,320,횡성군,35,청일면 +1855,32,강원도,320,횡성군,36,공근면 +1856,32,강원도,320,횡성군,37,서원면 +1857,32,강원도,320,횡성군,38,강림면 +1858,32,강원도,330,영월군,11,영월읍 +1859,32,강원도,330,영월군,12,상동읍 +1860,32,강원도,330,영월군,31,중동면 +1861,32,강원도,330,영월군,33,북면 +1862,32,강원도,330,영월군,34,남면 +1863,32,강원도,330,영월군,36,주천면 +1864,32,강원도,330,영월군,38,김삿갓면 +1865,32,강원도,330,영월군,39,한반도면 +1866,32,강원도,330,영월군,40,무릉도원면 +1867,32,강원도,340,평창군,11,평창읍 +1868,32,강원도,340,평창군,31,미탄면 +1869,32,강원도,340,평창군,32,방림면 +1870,32,강원도,340,평창군,33,대화면 +1871,32,강원도,340,평창군,34,봉평면 +1872,32,강원도,340,평창군,35,용평면 +1873,32,강원도,340,평창군,36,진부면 +1874,32,강원도,340,평창군,37,대관령면 +1875,32,강원도,350,정선군,11,정선읍 +1876,32,강원도,350,정선군,12,고한읍 +1877,32,강원도,350,정선군,13,사북읍 +1878,32,강원도,350,정선군,14,신동읍 +1879,32,강원도,350,정선군,32,남면 +1880,32,강원도,350,정선군,34,북평면 +1881,32,강원도,350,정선군,35,임계면 +1882,32,강원도,350,정선군,36,화암면 +1883,32,강원도,350,정선군,37,여량면 +1884,32,강원도,360,철원군,11,철원읍 +1885,32,강원도,360,철원군,12,김화읍 +1886,32,강원도,360,철원군,13,갈말읍 +1887,32,강원도,360,철원군,14,동송읍 +1888,32,강원도,360,철원군,21,근북면 +1889,32,강원도,360,철원군,26,근동면 +1890,32,강원도,360,철원군,27,원동면 +1891,32,강원도,360,철원군,28,원남면 +1892,32,강원도,360,철원군,29,임남면 +1893,32,강원도,360,철원군,31,서면 +1894,32,강원도,360,철원군,32,근남면 +1895,32,강원도,370,화천군,11,화천읍 +1896,32,강원도,370,화천군,31,간동면 +1897,32,강원도,370,화천군,32,하남면 +1898,32,강원도,370,화천군,33,상서면 +1899,32,강원도,370,화천군,34,사내면 +1900,32,강원도,380,양구군,11,양구읍 +1901,32,강원도,380,양구군,32,동면 +1902,32,강원도,380,양구군,33,방산면 +1903,32,강원도,380,양구군,34,해안면 +1904,32,강원도,380,양구군,35,국토정중앙면 +1905,32,강원도,390,인제군,11,인제읍 +1906,32,강원도,390,인제군,31,남면 +1907,32,강원도,390,인제군,32,북면 +1908,32,강원도,390,인제군,33,기린면 +1909,32,강원도,390,인제군,34,서화면 +1910,32,강원도,390,인제군,35,상남면 +1911,32,강원도,400,고성군,11,간성읍 +1912,32,강원도,400,고성군,12,거진읍 +1913,32,강원도,400,고성군,26,수동면 +1914,32,강원도,400,고성군,31,현내면 +1915,32,강원도,400,고성군,32,죽왕면 +1916,32,강원도,400,고성군,33,토성면 +1917,32,강원도,410,양양군,11,양양읍 +1918,32,강원도,410,양양군,31,서면 +1919,32,강원도,410,양양군,32,손양면 +1920,32,강원도,410,양양군,33,현북면 +1921,32,강원도,410,양양군,34,현남면 +1922,32,강원도,410,양양군,35,강현면 +1923,33,충청북도,020,충주시,11,주덕읍 +1924,33,충청북도,020,충주시,31,살미면 +1925,33,충청북도,020,충주시,32,수안보면 +1926,33,충청북도,020,충주시,34,신니면 +1927,33,충청북도,020,충주시,35,노은면 +1928,33,충청북도,020,충주시,36,앙성면 +1929,33,충청북도,020,충주시,38,금가면 +1930,33,충청북도,020,충주시,39,동량면 +1931,33,충청북도,020,충주시,40,산척면 +1932,33,충청북도,020,충주시,41,엄정면 +1933,33,충청북도,020,충주시,42,소태면 +1934,33,충청북도,020,충주시,43,대소원면 +1935,33,충청북도,020,충주시,44,중앙탑면 +1936,33,충청북도,020,충주시,51,성내·충인동 +1937,33,충청북도,020,충주시,53,교현·안림동 +1938,33,충청북도,020,충주시,54,교현2동 +1939,33,충청북도,020,충주시,55,용산동 +1940,33,충청북도,020,충주시,56,지현동 +1941,33,충청북도,020,충주시,57,문화동 +1942,33,충청북도,020,충주시,58,호암·직동 +1943,33,충청북도,020,충주시,60,달천동 +1944,33,충청북도,020,충주시,61,봉방동 +1945,33,충청북도,020,충주시,62,칠금·금릉동 +1946,33,충청북도,020,충주시,63,연수동 +1947,33,충청북도,020,충주시,64,목행·용탄동 +1948,33,충청북도,030,제천시,11,봉양읍 +1949,33,충청북도,030,제천시,31,금성면 +1950,33,충청북도,030,제천시,32,청풍면 +1951,33,충청북도,030,제천시,33,수산면 +1952,33,충청북도,030,제천시,34,덕산면 +1953,33,충청북도,030,제천시,35,한수면 +1954,33,충청북도,030,제천시,36,백운면 +1955,33,충청북도,030,제천시,37,송학면 +1956,33,충청북도,030,제천시,51,교동 +1957,33,충청북도,030,제천시,56,용두동 +1958,33,충청북도,030,제천시,59,청전동 +1959,33,충청북도,030,제천시,60,화산동 +1960,33,충청북도,030,제천시,70,남현동 +1961,33,충청북도,030,제천시,71,영서동 +1962,33,충청북도,030,제천시,72,신백동 +1963,33,충청북도,030,제천시,73,의림지동 +1964,33,충청북도,030,제천시,74,중앙동 +1965,33,충청북도,041,청주시 상당구,31,낭성면 +1966,33,충청북도,041,청주시 상당구,32,미원면 +1967,33,충청북도,041,청주시 상당구,33,가덕면 +1968,33,충청북도,041,청주시 상당구,34,남일면 +1969,33,충청북도,041,청주시 상당구,35,문의면 +1970,33,충청북도,041,청주시 상당구,51,중앙동 +1971,33,충청북도,041,청주시 상당구,52,성안동 +1972,33,충청북도,041,청주시 상당구,53,탑·대성동 +1973,33,충청북도,041,청주시 상당구,54,영운동 +1974,33,충청북도,041,청주시 상당구,55,금천동 +1975,33,충청북도,041,청주시 상당구,56,용담·명암·산성동 +1976,33,충청북도,041,청주시 상당구,57,용암1동 +1977,33,충청북도,041,청주시 상당구,58,용암2동 +1978,33,충청북도,042,청주시 서원구,31,남이면 +1979,33,충청북도,042,청주시 서원구,32,현도면 +1980,33,충청북도,042,청주시 서원구,51,사직1동 +1981,33,충청북도,042,청주시 서원구,52,사직2동 +1982,33,충청북도,042,청주시 서원구,53,사창동 +1983,33,충청북도,042,청주시 서원구,54,모충동 +1984,33,충청북도,042,청주시 서원구,55,산남동 +1985,33,충청북도,042,청주시 서원구,56,분평동 +1986,33,충청북도,042,청주시 서원구,57,수곡1동 +1987,33,충청북도,042,청주시 서원구,58,수곡2동 +1988,33,충청북도,042,청주시 서원구,59,성화·개신·죽림동 +1989,33,충청북도,043,청주시 흥덕구,11,오송읍 +1990,33,충청북도,043,청주시 흥덕구,31,강내면 +1991,33,충청북도,043,청주시 흥덕구,32,옥산면 +1992,33,충청북도,043,청주시 흥덕구,51,운천·신봉동 +1993,33,충청북도,043,청주시 흥덕구,52,복대1동 +1994,33,충청북도,043,청주시 흥덕구,53,복대2동 +1995,33,충청북도,043,청주시 흥덕구,54,가경동 +1996,33,충청북도,043,청주시 흥덕구,55,봉명1동 +1997,33,충청북도,043,청주시 흥덕구,56,봉명2·송정동 +1998,33,충청북도,043,청주시 흥덕구,57,강서1동 +1999,33,충청북도,043,청주시 흥덕구,58,강서2동 +2000,33,충청북도,044,청주시 청원구,11,내수읍 +2001,33,충청북도,044,청주시 청원구,12,오창읍 +2002,33,충청북도,044,청주시 청원구,31,북이면 +2003,33,충청북도,044,청주시 청원구,51,오근장동 +2004,33,충청북도,044,청주시 청원구,52,우암동 +2005,33,충청북도,044,청주시 청원구,53,내덕1동 +2006,33,충청북도,044,청주시 청원구,54,내덕2동 +2007,33,충청북도,044,청주시 청원구,55,율량·사천동 +2008,33,충청북도,320,보은군,11,보은읍 +2009,33,충청북도,320,보은군,31,속리산면 +2010,33,충청북도,320,보은군,32,장안면 +2011,33,충청북도,320,보은군,33,마로면 +2012,33,충청북도,320,보은군,34,탄부면 +2013,33,충청북도,320,보은군,35,삼승면 +2014,33,충청북도,320,보은군,36,수한면 +2015,33,충청북도,320,보은군,37,회남면 +2016,33,충청북도,320,보은군,38,회인면 +2017,33,충청북도,320,보은군,39,내북면 +2018,33,충청북도,320,보은군,40,산외면 +2019,33,충청북도,330,옥천군,11,옥천읍 +2020,33,충청북도,330,옥천군,31,동이면 +2021,33,충청북도,330,옥천군,32,안남면 +2022,33,충청북도,330,옥천군,33,안내면 +2023,33,충청북도,330,옥천군,34,청성면 +2024,33,충청북도,330,옥천군,35,청산면 +2025,33,충청북도,330,옥천군,36,이원면 +2026,33,충청북도,330,옥천군,37,군서면 +2027,33,충청북도,330,옥천군,38,군북면 +2028,33,충청북도,340,영동군,11,영동읍 +2029,33,충청북도,340,영동군,31,용산면 +2030,33,충청북도,340,영동군,32,황간면 +2031,33,충청북도,340,영동군,33,추풍령면 +2032,33,충청북도,340,영동군,34,매곡면 +2033,33,충청북도,340,영동군,35,상촌면 +2034,33,충청북도,340,영동군,36,양강면 +2035,33,충청북도,340,영동군,37,용화면 +2036,33,충청북도,340,영동군,38,학산면 +2037,33,충청북도,340,영동군,39,양산면 +2038,33,충청북도,340,영동군,40,심천면 +2039,33,충청북도,350,진천군,11,진천읍 +2040,33,충청북도,350,진천군,12,덕산읍 +2041,33,충청북도,350,진천군,32,초평면 +2042,33,충청북도,350,진천군,33,문백면 +2043,33,충청북도,350,진천군,34,백곡면 +2044,33,충청북도,350,진천군,35,이월면 +2045,33,충청북도,350,진천군,36,광혜원면 +2046,33,충청북도,360,괴산군,11,괴산읍 +2047,33,충청북도,360,괴산군,31,감물면 +2048,33,충청북도,360,괴산군,32,장연면 +2049,33,충청북도,360,괴산군,33,연풍면 +2050,33,충청북도,360,괴산군,34,칠성면 +2051,33,충청북도,360,괴산군,35,문광면 +2052,33,충청북도,360,괴산군,36,청천면 +2053,33,충청북도,360,괴산군,37,청안면 +2054,33,충청북도,360,괴산군,38,사리면 +2055,33,충청북도,360,괴산군,39,소수면 +2056,33,충청북도,360,괴산군,40,불정면 +2057,33,충청북도,370,음성군,11,음성읍 +2058,33,충청북도,370,음성군,12,금왕읍 +2059,33,충청북도,370,음성군,31,소이면 +2060,33,충청북도,370,음성군,32,원남면 +2061,33,충청북도,370,음성군,33,맹동면 +2062,33,충청북도,370,음성군,34,대소면 +2063,33,충청북도,370,음성군,35,삼성면 +2064,33,충청북도,370,음성군,36,생극면 +2065,33,충청북도,370,음성군,37,감곡면 +2066,33,충청북도,380,단양군,11,단양읍 +2067,33,충청북도,380,단양군,12,매포읍 +2068,33,충청북도,380,단양군,31,단성면 +2069,33,충청북도,380,단양군,32,대강면 +2070,33,충청북도,380,단양군,33,가곡면 +2071,33,충청북도,380,단양군,34,영춘면 +2072,33,충청북도,380,단양군,35,어상천면 +2073,33,충청북도,380,단양군,36,적성면 +2074,33,충청북도,390,증평군,14,증평읍 +2075,33,충청북도,390,증평군,31,도안면 +2076,34,충청남도,011,천안시 동남구,11,목천읍 +2077,34,충청남도,011,천안시 동남구,31,풍세면 +2078,34,충청남도,011,천안시 동남구,32,광덕면 +2079,34,충청남도,011,천안시 동남구,33,북면 +2080,34,충청남도,011,천안시 동남구,34,성남면 +2081,34,충청남도,011,천안시 동남구,35,수신면 +2082,34,충청남도,011,천안시 동남구,36,병천면 +2083,34,충청남도,011,천안시 동남구,37,동면 +2084,34,충청남도,011,천안시 동남구,51,중앙동 +2085,34,충청남도,011,천안시 동남구,52,문성동 +2086,34,충청남도,011,천안시 동남구,53,원성1동 +2087,34,충청남도,011,천안시 동남구,54,원성2동 +2088,34,충청남도,011,천안시 동남구,55,봉명동 +2089,34,충청남도,011,천안시 동남구,56,일봉동 +2090,34,충청남도,011,천안시 동남구,57,신방동 +2091,34,충청남도,011,천안시 동남구,58,청룡동 +2092,34,충청남도,011,천안시 동남구,59,신안동 +2093,34,충청남도,012,천안시 서북구,11,성환읍 +2094,34,충청남도,012,천안시 서북구,12,성거읍 +2095,34,충청남도,012,천안시 서북구,13,직산읍 +2096,34,충청남도,012,천안시 서북구,31,입장면 +2097,34,충청남도,012,천안시 서북구,51,성정1동 +2098,34,충청남도,012,천안시 서북구,52,성정2동 +2099,34,충청남도,012,천안시 서북구,53,쌍용1동 +2100,34,충청남도,012,천안시 서북구,54,쌍용2동 +2101,34,충청남도,012,천안시 서북구,55,쌍용3동 +2102,34,충청남도,012,천안시 서북구,58,백석동 +2103,34,충청남도,012,천안시 서북구,59,불당동 +2104,34,충청남도,012,천안시 서북구,60,부성1동 +2105,34,충청남도,012,천안시 서북구,61,부성2동 +2106,34,충청남도,020,공주시,11,유구읍 +2107,34,충청남도,020,공주시,31,이인면 +2108,34,충청남도,020,공주시,32,탄천면 +2109,34,충청남도,020,공주시,33,계룡면 +2110,34,충청남도,020,공주시,34,반포면 +2111,34,충청남도,020,공주시,36,의당면 +2112,34,충청남도,020,공주시,37,정안면 +2113,34,충청남도,020,공주시,38,우성면 +2114,34,충청남도,020,공주시,39,사곡면 +2115,34,충청남도,020,공주시,40,신풍면 +2116,34,충청남도,020,공주시,51,중학동 +2117,34,충청남도,020,공주시,55,금학동 +2118,34,충청남도,020,공주시,56,옥룡동 +2119,34,충청남도,020,공주시,57,신관동 +2120,34,충청남도,020,공주시,58,웅진동 +2121,34,충청남도,020,공주시,59,월송동 +2122,34,충청남도,030,보령시,11,웅천읍 +2123,34,충청남도,030,보령시,31,주포면 +2124,34,충청남도,030,보령시,32,주교면 +2125,34,충청남도,030,보령시,33,오천면 +2126,34,충청남도,030,보령시,34,천북면 +2127,34,충청남도,030,보령시,35,청소면 +2128,34,충청남도,030,보령시,36,청라면 +2129,34,충청남도,030,보령시,37,남포면 +2130,34,충청남도,030,보령시,38,주산면 +2131,34,충청남도,030,보령시,39,미산면 +2132,34,충청남도,030,보령시,40,성주면 +2133,34,충청남도,030,보령시,51,대천1동 +2134,34,충청남도,030,보령시,52,대천2동 +2135,34,충청남도,030,보령시,53,대천3동 +2136,34,충청남도,030,보령시,54,대천4동 +2137,34,충청남도,030,보령시,56,대천5동 +2138,34,충청남도,040,아산시,11,염치읍 +2139,34,충청남도,040,아산시,12,배방읍 +2140,34,충청남도,040,아산시,31,송악면 +2141,34,충청남도,040,아산시,33,탕정면 +2142,34,충청남도,040,아산시,34,음봉면 +2143,34,충청남도,040,아산시,35,둔포면 +2144,34,충청남도,040,아산시,36,영인면 +2145,34,충청남도,040,아산시,37,인주면 +2146,34,충청남도,040,아산시,38,선장면 +2147,34,충청남도,040,아산시,39,도고면 +2148,34,충청남도,040,아산시,40,신창면 +2149,34,충청남도,040,아산시,51,온양1동 +2150,34,충청남도,040,아산시,52,온양2동 +2151,34,충청남도,040,아산시,53,온양3동 +2152,34,충청남도,040,아산시,54,온양4동 +2153,34,충청남도,040,아산시,55,온양5동 +2154,34,충청남도,040,아산시,56,온양6동 +2155,34,충청남도,050,서산시,11,대산읍 +2156,34,충청남도,050,서산시,31,인지면 +2157,34,충청남도,050,서산시,32,부석면 +2158,34,충청남도,050,서산시,33,팔봉면 +2159,34,충청남도,050,서산시,34,지곡면 +2160,34,충청남도,050,서산시,35,성연면 +2161,34,충청남도,050,서산시,36,음암면 +2162,34,충청남도,050,서산시,37,운산면 +2163,34,충청남도,050,서산시,38,해미면 +2164,34,충청남도,050,서산시,39,고북면 +2165,34,충청남도,050,서산시,51,부춘동 +2166,34,충청남도,050,서산시,52,동문1동 +2167,34,충청남도,050,서산시,53,동문2동 +2168,34,충청남도,050,서산시,54,수석동 +2169,34,충청남도,050,서산시,55,석남동 +2170,34,충청남도,060,논산시,11,강경읍 +2171,34,충청남도,060,논산시,12,연무읍 +2172,34,충청남도,060,논산시,31,성동면 +2173,34,충청남도,060,논산시,32,광석면 +2174,34,충청남도,060,논산시,33,노성면 +2175,34,충청남도,060,논산시,34,상월면 +2176,34,충청남도,060,논산시,35,부적면 +2177,34,충청남도,060,논산시,36,연산면 +2178,34,충청남도,060,논산시,37,벌곡면 +2179,34,충청남도,060,논산시,38,양촌면 +2180,34,충청남도,060,논산시,39,가야곡면 +2181,34,충청남도,060,논산시,40,은진면 +2182,34,충청남도,060,논산시,41,채운면 +2183,34,충청남도,060,논산시,51,취암동 +2184,34,충청남도,060,논산시,52,부창동 +2185,34,충청남도,070,계룡시,31,두마면 +2186,34,충청남도,070,계룡시,33,엄사면 +2187,34,충청남도,070,계룡시,34,신도안면 +2188,34,충청남도,070,계룡시,51,금암동 +2189,34,충청남도,080,당진시,11,합덕읍 +2190,34,충청남도,080,당진시,12,송악읍 +2191,34,충청남도,080,당진시,31,고대면 +2192,34,충청남도,080,당진시,32,석문면 +2193,34,충청남도,080,당진시,33,대호지면 +2194,34,충청남도,080,당진시,34,정미면 +2195,34,충청남도,080,당진시,35,면천면 +2196,34,충청남도,080,당진시,36,순성면 +2197,34,충청남도,080,당진시,37,우강면 +2198,34,충청남도,080,당진시,38,신평면 +2199,34,충청남도,080,당진시,39,송산면 +2200,34,충청남도,080,당진시,51,당진1동 +2201,34,충청남도,080,당진시,52,당진2동 +2202,34,충청남도,080,당진시,53,당진3동 +2203,34,충청남도,310,금산군,11,금산읍 +2204,34,충청남도,310,금산군,31,금성면 +2205,34,충청남도,310,금산군,32,제원면 +2206,34,충청남도,310,금산군,33,부리면 +2207,34,충청남도,310,금산군,34,군북면 +2208,34,충청남도,310,금산군,35,남일면 +2209,34,충청남도,310,금산군,36,남이면 +2210,34,충청남도,310,금산군,37,진산면 +2211,34,충청남도,310,금산군,38,복수면 +2212,34,충청남도,310,금산군,39,추부면 +2213,34,충청남도,330,부여군,11,부여읍 +2214,34,충청남도,330,부여군,31,규암면 +2215,34,충청남도,330,부여군,32,은산면 +2216,34,충청남도,330,부여군,33,외산면 +2217,34,충청남도,330,부여군,34,내산면 +2218,34,충청남도,330,부여군,35,구룡면 +2219,34,충청남도,330,부여군,36,홍산면 +2220,34,충청남도,330,부여군,37,옥산면 +2221,34,충청남도,330,부여군,38,남면 +2222,34,충청남도,330,부여군,39,충화면 +2223,34,충청남도,330,부여군,40,양화면 +2224,34,충청남도,330,부여군,41,임천면 +2225,34,충청남도,330,부여군,42,장암면 +2226,34,충청남도,330,부여군,43,세도면 +2227,34,충청남도,330,부여군,44,석성면 +2228,34,충청남도,330,부여군,45,초촌면 +2229,34,충청남도,340,서천군,11,장항읍 +2230,34,충청남도,340,서천군,12,서천읍 +2231,34,충청남도,340,서천군,31,마서면 +2232,34,충청남도,340,서천군,32,화양면 +2233,34,충청남도,340,서천군,33,기산면 +2234,34,충청남도,340,서천군,34,한산면 +2235,34,충청남도,340,서천군,35,마산면 +2236,34,충청남도,340,서천군,36,시초면 +2237,34,충청남도,340,서천군,37,문산면 +2238,34,충청남도,340,서천군,38,판교면 +2239,34,충청남도,340,서천군,39,종천면 +2240,34,충청남도,340,서천군,40,비인면 +2241,34,충청남도,340,서천군,41,서면 +2242,34,충청남도,350,청양군,11,청양읍 +2243,34,충청남도,350,청양군,31,운곡면 +2244,34,충청남도,350,청양군,32,대치면 +2245,34,충청남도,350,청양군,33,정산면 +2246,34,충청남도,350,청양군,34,목면 +2247,34,충청남도,350,청양군,35,청남면 +2248,34,충청남도,350,청양군,36,장평면 +2249,34,충청남도,350,청양군,37,남양면 +2250,34,충청남도,350,청양군,38,화성면 +2251,34,충청남도,350,청양군,39,비봉면 +2252,34,충청남도,360,홍성군,11,홍성읍 +2253,34,충청남도,360,홍성군,12,광천읍 +2254,34,충청남도,360,홍성군,13,홍북읍 +2255,34,충청남도,360,홍성군,32,금마면 +2256,34,충청남도,360,홍성군,33,홍동면 +2257,34,충청남도,360,홍성군,34,장곡면 +2258,34,충청남도,360,홍성군,35,은하면 +2259,34,충청남도,360,홍성군,36,결성면 +2260,34,충청남도,360,홍성군,37,서부면 +2261,34,충청남도,360,홍성군,38,갈산면 +2262,34,충청남도,360,홍성군,39,구항면 +2263,34,충청남도,370,예산군,11,예산읍 +2264,34,충청남도,370,예산군,12,삽교읍 +2265,34,충청남도,370,예산군,31,대술면 +2266,34,충청남도,370,예산군,32,신양면 +2267,34,충청남도,370,예산군,33,광시면 +2268,34,충청남도,370,예산군,34,대흥면 +2269,34,충청남도,370,예산군,35,응봉면 +2270,34,충청남도,370,예산군,36,덕산면 +2271,34,충청남도,370,예산군,37,봉산면 +2272,34,충청남도,370,예산군,38,고덕면 +2273,34,충청남도,370,예산군,39,신암면 +2274,34,충청남도,370,예산군,40,오가면 +2275,34,충청남도,380,태안군,11,태안읍 +2276,34,충청남도,380,태안군,12,안면읍 +2277,34,충청남도,380,태안군,31,고남면 +2278,34,충청남도,380,태안군,32,남면 +2279,34,충청남도,380,태안군,33,근흥면 +2280,34,충청남도,380,태안군,34,소원면 +2281,34,충청남도,380,태안군,35,원북면 +2282,34,충청남도,380,태안군,36,이원면 +2283,35,전라북도,011,전주시 완산구,60,동서학동 +2284,35,전라북도,011,전주시 완산구,61,서서학동 +2285,35,전라북도,011,전주시 완산구,62,중화산1동 +2286,35,전라북도,011,전주시 완산구,63,중화산2동 +2287,35,전라북도,011,전주시 완산구,64,평화1동 +2288,35,전라북도,011,전주시 완산구,65,평화2동 +2289,35,전라북도,011,전주시 완산구,66,서신동 +2290,35,전라북도,011,전주시 완산구,67,삼천1동 +2291,35,전라북도,011,전주시 완산구,68,삼천2동 +2292,35,전라북도,011,전주시 완산구,69,삼천3동 +2293,35,전라북도,011,전주시 완산구,70,효자1동 +2294,35,전라북도,011,전주시 완산구,71,효자2동 +2295,35,전라북도,011,전주시 완산구,72,효자3동 +2296,35,전라북도,011,전주시 완산구,74,중앙동 +2297,35,전라북도,011,전주시 완산구,75,풍남동 +2298,35,전라북도,011,전주시 완산구,76,노송동 +2299,35,전라북도,011,전주시 완산구,77,완산동 +2300,35,전라북도,011,전주시 완산구,78,효자4동 +2301,35,전라북도,011,전주시 완산구,79,효자5동 +2302,35,전라북도,012,전주시 덕진구,54,인후1동 +2303,35,전라북도,012,전주시 덕진구,55,인후2동 +2304,35,전라북도,012,전주시 덕진구,56,인후3동 +2305,35,전라북도,012,전주시 덕진구,57,덕진동 +2306,35,전라북도,012,전주시 덕진구,58,금암1동 +2307,35,전라북도,012,전주시 덕진구,59,금암2동 +2308,35,전라북도,012,전주시 덕진구,60,팔복동 +2309,35,전라북도,012,전주시 덕진구,61,우아1동 +2310,35,전라북도,012,전주시 덕진구,62,우아2동 +2311,35,전라북도,012,전주시 덕진구,63,호성동 +2312,35,전라북도,012,전주시 덕진구,65,송천1동 +2313,35,전라북도,012,전주시 덕진구,66,송천2동 +2314,35,전라북도,012,전주시 덕진구,67,조촌동 +2315,35,전라북도,012,전주시 덕진구,69,진북동 +2316,35,전라북도,012,전주시 덕진구,70,혁신동 +2317,35,전라북도,012,전주시 덕진구,71,여의동 +2318,35,전라북도,020,군산시,11,옥구읍 +2319,35,전라북도,020,군산시,31,옥산면 +2320,35,전라북도,020,군산시,32,회현면 +2321,35,전라북도,020,군산시,33,임피면 +2322,35,전라북도,020,군산시,34,서수면 +2323,35,전라북도,020,군산시,35,대야면 +2324,35,전라북도,020,군산시,36,개정면 +2325,35,전라북도,020,군산시,37,성산면 +2326,35,전라북도,020,군산시,38,나포면 +2327,35,전라북도,020,군산시,39,옥도면 +2328,35,전라북도,020,군산시,40,옥서면 +2329,35,전라북도,020,군산시,51,해신동 +2330,35,전라북도,020,군산시,53,월명동 +2331,35,전라북도,020,군산시,55,신풍동 +2332,35,전라북도,020,군산시,56,삼학동 +2333,35,전라북도,020,군산시,60,중앙동 +2334,35,전라북도,020,군산시,64,흥남동 +2335,35,전라북도,020,군산시,65,조촌동 +2336,35,전라북도,020,군산시,66,경암동 +2337,35,전라북도,020,군산시,67,구암동 +2338,35,전라북도,020,군산시,68,개정동 +2339,35,전라북도,020,군산시,69,수송동 +2340,35,전라북도,020,군산시,70,나운1동 +2341,35,전라북도,020,군산시,71,나운2동 +2342,35,전라북도,020,군산시,72,소룡동 +2343,35,전라북도,020,군산시,73,미성동 +2344,35,전라북도,020,군산시,74,나운3동 +2345,35,전라북도,030,익산시,11,함열읍 +2346,35,전라북도,030,익산시,31,오산면 +2347,35,전라북도,030,익산시,32,황등면 +2348,35,전라북도,030,익산시,33,함라면 +2349,35,전라북도,030,익산시,34,웅포면 +2350,35,전라북도,030,익산시,35,성당면 +2351,35,전라북도,030,익산시,36,용안면 +2352,35,전라북도,030,익산시,37,낭산면 +2353,35,전라북도,030,익산시,38,망성면 +2354,35,전라북도,030,익산시,39,여산면 +2355,35,전라북도,030,익산시,40,금마면 +2356,35,전라북도,030,익산시,41,왕궁면 +2357,35,전라북도,030,익산시,42,춘포면 +2358,35,전라북도,030,익산시,43,삼기면 +2359,35,전라북도,030,익산시,44,용동면 +2360,35,전라북도,030,익산시,51,중앙동 +2361,35,전라북도,030,익산시,53,평화동 +2362,35,전라북도,030,익산시,55,인화동 +2363,35,전라북도,030,익산시,57,동산동 +2364,35,전라북도,030,익산시,58,마동 +2365,35,전라북도,030,익산시,59,남중동 +2366,35,전라북도,030,익산시,61,모현동 +2367,35,전라북도,030,익산시,62,송학동 +2368,35,전라북도,030,익산시,65,신동 +2369,35,전라북도,030,익산시,66,영등1동 +2370,35,전라북도,030,익산시,69,팔봉동 +2371,35,전라북도,030,익산시,70,삼성동 +2372,35,전라북도,030,익산시,71,영등2동 +2373,35,전라북도,030,익산시,72,어양동 +2374,35,전라북도,040,정읍시,11,신태인읍 +2375,35,전라북도,040,정읍시,31,북면 +2376,35,전라북도,040,정읍시,32,입암면 +2377,35,전라북도,040,정읍시,33,소성면 +2378,35,전라북도,040,정읍시,34,고부면 +2379,35,전라북도,040,정읍시,35,영원면 +2380,35,전라북도,040,정읍시,36,덕천면 +2381,35,전라북도,040,정읍시,37,이평면 +2382,35,전라북도,040,정읍시,38,정우면 +2383,35,전라북도,040,정읍시,39,태인면 +2384,35,전라북도,040,정읍시,40,감곡면 +2385,35,전라북도,040,정읍시,41,옹동면 +2386,35,전라북도,040,정읍시,42,칠보면 +2387,35,전라북도,040,정읍시,43,산내면 +2388,35,전라북도,040,정읍시,44,산외면 +2389,35,전라북도,040,정읍시,51,수성동 +2390,35,전라북도,040,정읍시,52,장명동 +2391,35,전라북도,040,정읍시,53,내장상동 +2392,35,전라북도,040,정읍시,54,시기동 +2393,35,전라북도,040,정읍시,57,연지동 +2394,35,전라북도,040,정읍시,58,농소동 +2395,35,전라북도,040,정읍시,59,상교동 +2396,35,전라북도,040,정읍시,60,초산동 +2397,35,전라북도,050,남원시,11,운봉읍 +2398,35,전라북도,050,남원시,31,주천면 +2399,35,전라북도,050,남원시,32,수지면 +2400,35,전라북도,050,남원시,33,송동면 +2401,35,전라북도,050,남원시,34,주생면 +2402,35,전라북도,050,남원시,35,금지면 +2403,35,전라북도,050,남원시,36,대강면 +2404,35,전라북도,050,남원시,37,대산면 +2405,35,전라북도,050,남원시,38,사매면 +2406,35,전라북도,050,남원시,39,덕과면 +2407,35,전라북도,050,남원시,40,보절면 +2408,35,전라북도,050,남원시,41,산동면 +2409,35,전라북도,050,남원시,42,이백면 +2410,35,전라북도,050,남원시,43,인월면 +2411,35,전라북도,050,남원시,44,아영면 +2412,35,전라북도,050,남원시,45,산내면 +2413,35,전라북도,050,남원시,51,동충동 +2414,35,전라북도,050,남원시,52,죽항동 +2415,35,전라북도,050,남원시,54,노암동 +2416,35,전라북도,050,남원시,55,금동 +2417,35,전라북도,050,남원시,56,왕정동 +2418,35,전라북도,050,남원시,57,향교동 +2419,35,전라북도,050,남원시,59,도통동 +2420,35,전라북도,060,김제시,11,만경읍 +2421,35,전라북도,060,김제시,31,죽산면 +2422,35,전라북도,060,김제시,32,백산면 +2423,35,전라북도,060,김제시,33,용지면 +2424,35,전라북도,060,김제시,34,백구면 +2425,35,전라북도,060,김제시,35,부량면 +2426,35,전라북도,060,김제시,36,공덕면 +2427,35,전라북도,060,김제시,37,청하면 +2428,35,전라북도,060,김제시,38,성덕면 +2429,35,전라북도,060,김제시,39,진봉면 +2430,35,전라북도,060,김제시,40,금구면 +2431,35,전라북도,060,김제시,41,봉남면 +2432,35,전라북도,060,김제시,42,황산면 +2433,35,전라북도,060,김제시,43,금산면 +2434,35,전라북도,060,김제시,44,광활면 +2435,35,전라북도,060,김제시,51,요촌동 +2436,35,전라북도,060,김제시,52,신풍동 +2437,35,전라북도,060,김제시,54,검산동 +2438,35,전라북도,060,김제시,58,교월동 +2439,35,전라북도,310,완주군,11,삼례읍 +2440,35,전라북도,310,완주군,12,봉동읍 +2441,35,전라북도,310,완주군,13,용진읍 +2442,35,전라북도,310,완주군,32,상관면 +2443,35,전라북도,310,완주군,33,이서면 +2444,35,전라북도,310,완주군,34,소양면 +2445,35,전라북도,310,완주군,35,구이면 +2446,35,전라북도,310,완주군,36,고산면 +2447,35,전라북도,310,완주군,37,비봉면 +2448,35,전라북도,310,완주군,38,운주면 +2449,35,전라북도,310,완주군,39,화산면 +2450,35,전라북도,310,완주군,40,동상면 +2451,35,전라북도,310,완주군,41,경천면 +2452,35,전라북도,320,진안군,11,진안읍 +2453,35,전라북도,320,진안군,31,용담면 +2454,35,전라북도,320,진안군,32,안천면 +2455,35,전라북도,320,진안군,33,동향면 +2456,35,전라북도,320,진안군,34,상전면 +2457,35,전라북도,320,진안군,35,백운면 +2458,35,전라북도,320,진안군,36,성수면 +2459,35,전라북도,320,진안군,37,마령면 +2460,35,전라북도,320,진안군,38,부귀면 +2461,35,전라북도,320,진안군,39,정천면 +2462,35,전라북도,320,진안군,40,주천면 +2463,35,전라북도,330,무주군,11,무주읍 +2464,35,전라북도,330,무주군,31,무풍면 +2465,35,전라북도,330,무주군,32,설천면 +2466,35,전라북도,330,무주군,33,적상면 +2467,35,전라북도,330,무주군,34,안성면 +2468,35,전라북도,330,무주군,35,부남면 +2469,35,전라북도,340,장수군,11,장수읍 +2470,35,전라북도,340,장수군,31,산서면 +2471,35,전라북도,340,장수군,32,번암면 +2472,35,전라북도,340,장수군,33,장계면 +2473,35,전라북도,340,장수군,34,천천면 +2474,35,전라북도,340,장수군,35,계남면 +2475,35,전라북도,340,장수군,36,계북면 +2476,35,전라북도,350,임실군,11,임실읍 +2477,35,전라북도,350,임실군,31,청웅면 +2478,35,전라북도,350,임실군,32,운암면 +2479,35,전라북도,350,임실군,33,신평면 +2480,35,전라북도,350,임실군,34,성수면 +2481,35,전라북도,350,임실군,35,오수면 +2482,35,전라북도,350,임실군,36,신덕면 +2483,35,전라북도,350,임실군,37,삼계면 +2484,35,전라북도,350,임실군,38,관촌면 +2485,35,전라북도,350,임실군,39,강진면 +2486,35,전라북도,350,임실군,40,덕치면 +2487,35,전라북도,350,임실군,41,지사면 +2488,35,전라북도,360,순창군,11,순창읍 +2489,35,전라북도,360,순창군,31,인계면 +2490,35,전라북도,360,순창군,32,동계면 +2491,35,전라북도,360,순창군,33,적성면 +2492,35,전라북도,360,순창군,34,유등면 +2493,35,전라북도,360,순창군,35,풍산면 +2494,35,전라북도,360,순창군,36,금과면 +2495,35,전라북도,360,순창군,37,팔덕면 +2496,35,전라북도,360,순창군,38,복흥면 +2497,35,전라북도,360,순창군,39,쌍치면 +2498,35,전라북도,360,순창군,40,구림면 +2499,35,전라북도,370,고창군,11,고창읍 +2500,35,전라북도,370,고창군,31,고수면 +2501,35,전라북도,370,고창군,32,아산면 +2502,35,전라북도,370,고창군,33,무장면 +2503,35,전라북도,370,고창군,34,공음면 +2504,35,전라북도,370,고창군,35,상하면 +2505,35,전라북도,370,고창군,36,해리면 +2506,35,전라북도,370,고창군,37,성송면 +2507,35,전라북도,370,고창군,38,대산면 +2508,35,전라북도,370,고창군,39,심원면 +2509,35,전라북도,370,고창군,40,흥덕면 +2510,35,전라북도,370,고창군,41,성내면 +2511,35,전라북도,370,고창군,42,신림면 +2512,35,전라북도,370,고창군,43,부안면 +2513,35,전라북도,380,부안군,11,부안읍 +2514,35,전라북도,380,부안군,31,주산면 +2515,35,전라북도,380,부안군,32,동진면 +2516,35,전라북도,380,부안군,33,행안면 +2517,35,전라북도,380,부안군,34,계화면 +2518,35,전라북도,380,부안군,35,보안면 +2519,35,전라북도,380,부안군,36,변산면 +2520,35,전라북도,380,부안군,37,진서면 +2521,35,전라북도,380,부안군,38,백산면 +2522,35,전라북도,380,부안군,39,상서면 +2523,35,전라북도,380,부안군,40,하서면 +2524,35,전라북도,380,부안군,41,줄포면 +2525,35,전라북도,380,부안군,42,위도면 +2526,36,전라남도,010,목포시,51,용당1동 +2527,36,전라남도,010,목포시,52,용당2동 +2528,36,전라남도,010,목포시,53,연동 +2529,36,전라남도,010,목포시,55,산정동 +2530,36,전라남도,010,목포시,56,연산동 +2531,36,전라남도,010,목포시,57,원산동 +2532,36,전라남도,010,목포시,58,대성동 +2533,36,전라남도,010,목포시,60,목원동 +2534,36,전라남도,010,목포시,62,동명동 +2535,36,전라남도,010,목포시,63,삼학동 +2536,36,전라남도,010,목포시,64,만호동 +2537,36,전라남도,010,목포시,65,유달동 +2538,36,전라남도,010,목포시,67,죽교동 +2539,36,전라남도,010,목포시,68,북항동 +2540,36,전라남도,010,목포시,69,용해동 +2541,36,전라남도,010,목포시,70,이로동 +2542,36,전라남도,010,목포시,71,상동 +2543,36,전라남도,010,목포시,72,하당동 +2544,36,전라남도,010,목포시,73,신흥동 +2545,36,전라남도,010,목포시,74,삼향동 +2546,36,전라남도,010,목포시,75,옥암동 +2547,36,전라남도,010,목포시,76,부흥동 +2548,36,전라남도,010,목포시,77,부주동 +2549,36,전라남도,020,여수시,11,돌산읍 +2550,36,전라남도,020,여수시,31,소라면 +2551,36,전라남도,020,여수시,32,율촌면 +2552,36,전라남도,020,여수시,33,화양면 +2553,36,전라남도,020,여수시,34,남면 +2554,36,전라남도,020,여수시,35,화정면 +2555,36,전라남도,020,여수시,36,삼산면 +2556,36,전라남도,020,여수시,51,동문동 +2557,36,전라남도,020,여수시,52,한려동 +2558,36,전라남도,020,여수시,53,중앙동 +2559,36,전라남도,020,여수시,54,충무동 +2560,36,전라남도,020,여수시,55,광림동 +2561,36,전라남도,020,여수시,56,서강동 +2562,36,전라남도,020,여수시,57,대교동 +2563,36,전라남도,020,여수시,58,국동 +2564,36,전라남도,020,여수시,59,월호동 +2565,36,전라남도,020,여수시,60,여서동 +2566,36,전라남도,020,여수시,61,문수동 +2567,36,전라남도,020,여수시,62,미평동 +2568,36,전라남도,020,여수시,63,둔덕동 +2569,36,전라남도,020,여수시,64,만덕동 +2570,36,전라남도,020,여수시,65,쌍봉동 +2571,36,전라남도,020,여수시,66,시전동 +2572,36,전라남도,020,여수시,67,여천동 +2573,36,전라남도,020,여수시,68,주삼동 +2574,36,전라남도,020,여수시,69,삼일동 +2575,36,전라남도,020,여수시,70,묘도동 +2576,36,전라남도,030,순천시,11,승주읍 +2577,36,전라남도,030,순천시,31,주암면 +2578,36,전라남도,030,순천시,32,송광면 +2579,36,전라남도,030,순천시,33,외서면 +2580,36,전라남도,030,순천시,34,낙안면 +2581,36,전라남도,030,순천시,35,별량면 +2582,36,전라남도,030,순천시,36,상사면 +2583,36,전라남도,030,순천시,37,해룡면 +2584,36,전라남도,030,순천시,38,서면 +2585,36,전라남도,030,순천시,39,황전면 +2586,36,전라남도,030,순천시,40,월등면 +2587,36,전라남도,030,순천시,51,향동 +2588,36,전라남도,030,순천시,54,매곡동 +2589,36,전라남도,030,순천시,55,삼산동 +2590,36,전라남도,030,순천시,56,조곡동 +2591,36,전라남도,030,순천시,57,덕연동 +2592,36,전라남도,030,순천시,58,풍덕동 +2593,36,전라남도,030,순천시,59,남제동 +2594,36,전라남도,030,순천시,60,저전동 +2595,36,전라남도,030,순천시,61,장천동 +2596,36,전라남도,030,순천시,62,중앙동 +2597,36,전라남도,030,순천시,63,도사동 +2598,36,전라남도,030,순천시,66,왕조1동 +2599,36,전라남도,030,순천시,67,왕조2동 +2600,36,전라남도,040,나주시,11,남평읍 +2601,36,전라남도,040,나주시,31,세지면 +2602,36,전라남도,040,나주시,32,왕곡면 +2603,36,전라남도,040,나주시,33,반남면 +2604,36,전라남도,040,나주시,34,공산면 +2605,36,전라남도,040,나주시,35,동강면 +2606,36,전라남도,040,나주시,36,다시면 +2607,36,전라남도,040,나주시,37,문평면 +2608,36,전라남도,040,나주시,38,노안면 +2609,36,전라남도,040,나주시,39,금천면 +2610,36,전라남도,040,나주시,40,산포면 +2611,36,전라남도,040,나주시,41,다도면 +2612,36,전라남도,040,나주시,42,봉황면 +2613,36,전라남도,040,나주시,51,송월동 +2614,36,전라남도,040,나주시,52,영강동 +2615,36,전라남도,040,나주시,54,금남동 +2616,36,전라남도,040,나주시,55,성북동 +2617,36,전라남도,040,나주시,58,영산동 +2618,36,전라남도,040,나주시,60,이창동 +2619,36,전라남도,040,나주시,61,빛가람동 +2620,36,전라남도,060,광양시,11,광양읍 +2621,36,전라남도,060,광양시,31,봉강면 +2622,36,전라남도,060,광양시,32,옥룡면 +2623,36,전라남도,060,광양시,33,옥곡면 +2624,36,전라남도,060,광양시,34,진상면 +2625,36,전라남도,060,광양시,35,진월면 +2626,36,전라남도,060,광양시,36,다압면 +2627,36,전라남도,060,광양시,51,골약동 +2628,36,전라남도,060,광양시,53,중마동 +2629,36,전라남도,060,광양시,54,광영동 +2630,36,전라남도,060,광양시,55,태인동 +2631,36,전라남도,060,광양시,56,금호동 +2632,36,전라남도,310,담양군,11,담양읍 +2633,36,전라남도,310,담양군,31,봉산면 +2634,36,전라남도,310,담양군,32,고서면 +2635,36,전라남도,310,담양군,34,창평면 +2636,36,전라남도,310,담양군,35,대덕면 +2637,36,전라남도,310,담양군,36,무정면 +2638,36,전라남도,310,담양군,37,금성면 +2639,36,전라남도,310,담양군,38,용면 +2640,36,전라남도,310,담양군,39,월산면 +2641,36,전라남도,310,담양군,40,수북면 +2642,36,전라남도,310,담양군,41,대전면 +2643,36,전라남도,310,담양군,42,가사문학면 +2644,36,전라남도,320,곡성군,11,곡성읍 +2645,36,전라남도,320,곡성군,31,오곡면 +2646,36,전라남도,320,곡성군,32,삼기면 +2647,36,전라남도,320,곡성군,33,석곡면 +2648,36,전라남도,320,곡성군,34,목사동면 +2649,36,전라남도,320,곡성군,35,죽곡면 +2650,36,전라남도,320,곡성군,36,고달면 +2651,36,전라남도,320,곡성군,37,옥과면 +2652,36,전라남도,320,곡성군,38,입면 +2653,36,전라남도,320,곡성군,39,겸면 +2654,36,전라남도,320,곡성군,40,오산면 +2655,36,전라남도,330,구례군,11,구례읍 +2656,36,전라남도,330,구례군,31,문척면 +2657,36,전라남도,330,구례군,32,간전면 +2658,36,전라남도,330,구례군,33,토지면 +2659,36,전라남도,330,구례군,34,마산면 +2660,36,전라남도,330,구례군,35,광의면 +2661,36,전라남도,330,구례군,36,용방면 +2662,36,전라남도,330,구례군,37,산동면 +2663,36,전라남도,350,고흥군,11,고흥읍 +2664,36,전라남도,350,고흥군,12,도양읍 +2665,36,전라남도,350,고흥군,31,풍양면 +2666,36,전라남도,350,고흥군,32,도덕면 +2667,36,전라남도,350,고흥군,33,금산면 +2668,36,전라남도,350,고흥군,34,도화면 +2669,36,전라남도,350,고흥군,35,포두면 +2670,36,전라남도,350,고흥군,36,봉래면 +2671,36,전라남도,350,고흥군,37,동일면 +2672,36,전라남도,350,고흥군,38,점암면 +2673,36,전라남도,350,고흥군,39,영남면 +2674,36,전라남도,350,고흥군,40,과역면 +2675,36,전라남도,350,고흥군,41,남양면 +2676,36,전라남도,350,고흥군,42,동강면 +2677,36,전라남도,350,고흥군,43,대서면 +2678,36,전라남도,350,고흥군,44,두원면 +2679,36,전라남도,360,보성군,11,보성읍 +2680,36,전라남도,360,보성군,12,벌교읍 +2681,36,전라남도,360,보성군,31,노동면 +2682,36,전라남도,360,보성군,32,미력면 +2683,36,전라남도,360,보성군,33,겸백면 +2684,36,전라남도,360,보성군,34,율어면 +2685,36,전라남도,360,보성군,35,복내면 +2686,36,전라남도,360,보성군,36,문덕면 +2687,36,전라남도,360,보성군,37,조성면 +2688,36,전라남도,360,보성군,38,득량면 +2689,36,전라남도,360,보성군,39,회천면 +2690,36,전라남도,360,보성군,40,웅치면 +2691,36,전라남도,370,화순군,11,화순읍 +2692,36,전라남도,370,화순군,31,한천면 +2693,36,전라남도,370,화순군,32,춘양면 +2694,36,전라남도,370,화순군,33,청풍면 +2695,36,전라남도,370,화순군,34,이양면 +2696,36,전라남도,370,화순군,35,능주면 +2697,36,전라남도,370,화순군,36,도곡면 +2698,36,전라남도,370,화순군,37,도암면 +2699,36,전라남도,370,화순군,38,이서면 +2700,36,전라남도,370,화순군,40,동복면 +2701,36,전라남도,370,화순군,42,동면 +2702,36,전라남도,370,화순군,43,백아면 +2703,36,전라남도,370,화순군,44,사평면 +2704,36,전라남도,380,장흥군,11,장흥읍 +2705,36,전라남도,380,장흥군,12,관산읍 +2706,36,전라남도,380,장흥군,13,대덕읍 +2707,36,전라남도,380,장흥군,31,용산면 +2708,36,전라남도,380,장흥군,32,안양면 +2709,36,전라남도,380,장흥군,33,장동면 +2710,36,전라남도,380,장흥군,34,장평면 +2711,36,전라남도,380,장흥군,35,유치면 +2712,36,전라남도,380,장흥군,36,부산면 +2713,36,전라남도,380,장흥군,37,회진면 +2714,36,전라남도,390,강진군,11,강진읍 +2715,36,전라남도,390,강진군,31,군동면 +2716,36,전라남도,390,강진군,32,칠량면 +2717,36,전라남도,390,강진군,33,대구면 +2718,36,전라남도,390,강진군,34,마량면 +2719,36,전라남도,390,강진군,35,도암면 +2720,36,전라남도,390,강진군,36,신전면 +2721,36,전라남도,390,강진군,37,성전면 +2722,36,전라남도,390,강진군,38,작천면 +2723,36,전라남도,390,강진군,39,병영면 +2724,36,전라남도,390,강진군,40,옴천면 +2725,36,전라남도,400,해남군,11,해남읍 +2726,36,전라남도,400,해남군,31,삼산면 +2727,36,전라남도,400,해남군,32,화산면 +2728,36,전라남도,400,해남군,33,현산면 +2729,36,전라남도,400,해남군,34,송지면 +2730,36,전라남도,400,해남군,35,북평면 +2731,36,전라남도,400,해남군,36,북일면 +2732,36,전라남도,400,해남군,37,옥천면 +2733,36,전라남도,400,해남군,38,계곡면 +2734,36,전라남도,400,해남군,39,마산면 +2735,36,전라남도,400,해남군,40,황산면 +2736,36,전라남도,400,해남군,41,산이면 +2737,36,전라남도,400,해남군,42,문내면 +2738,36,전라남도,400,해남군,43,화원면 +2739,36,전라남도,410,영암군,11,영암읍 +2740,36,전라남도,410,영암군,12,삼호읍 +2741,36,전라남도,410,영암군,31,덕진면 +2742,36,전라남도,410,영암군,32,금정면 +2743,36,전라남도,410,영암군,33,신북면 +2744,36,전라남도,410,영암군,34,시종면 +2745,36,전라남도,410,영암군,35,도포면 +2746,36,전라남도,410,영암군,36,군서면 +2747,36,전라남도,410,영암군,37,서호면 +2748,36,전라남도,410,영암군,38,학산면 +2749,36,전라남도,410,영암군,39,미암면 +2750,36,전라남도,420,무안군,11,무안읍 +2751,36,전라남도,420,무안군,12,일로읍 +2752,36,전라남도,420,무안군,13,삼향읍 +2753,36,전라남도,420,무안군,32,몽탄면 +2754,36,전라남도,420,무안군,33,청계면 +2755,36,전라남도,420,무안군,34,현경면 +2756,36,전라남도,420,무안군,35,망운면 +2757,36,전라남도,420,무안군,36,해제면 +2758,36,전라남도,420,무안군,37,운남면 +2759,36,전라남도,430,함평군,11,함평읍 +2760,36,전라남도,430,함평군,31,손불면 +2761,36,전라남도,430,함평군,32,신광면 +2762,36,전라남도,430,함평군,33,학교면 +2763,36,전라남도,430,함평군,34,엄다면 +2764,36,전라남도,430,함평군,35,대동면 +2765,36,전라남도,430,함평군,36,나산면 +2766,36,전라남도,430,함평군,37,해보면 +2767,36,전라남도,430,함평군,38,월야면 +2768,36,전라남도,440,영광군,11,영광읍 +2769,36,전라남도,440,영광군,12,백수읍 +2770,36,전라남도,440,영광군,13,홍농읍 +2771,36,전라남도,440,영광군,31,대마면 +2772,36,전라남도,440,영광군,32,묘량면 +2773,36,전라남도,440,영광군,33,불갑면 +2774,36,전라남도,440,영광군,34,군서면 +2775,36,전라남도,440,영광군,35,군남면 +2776,36,전라남도,440,영광군,36,염산면 +2777,36,전라남도,440,영광군,37,법성면 +2778,36,전라남도,440,영광군,38,낙월면 +2779,36,전라남도,450,장성군,11,장성읍 +2780,36,전라남도,450,장성군,31,진원면 +2781,36,전라남도,450,장성군,32,남면 +2782,36,전라남도,450,장성군,33,동화면 +2783,36,전라남도,450,장성군,34,삼서면 +2784,36,전라남도,450,장성군,35,삼계면 +2785,36,전라남도,450,장성군,36,황룡면 +2786,36,전라남도,450,장성군,37,서삼면 +2787,36,전라남도,450,장성군,38,북일면 +2788,36,전라남도,450,장성군,39,북이면 +2789,36,전라남도,450,장성군,40,북하면 +2790,36,전라남도,460,완도군,11,완도읍 +2791,36,전라남도,460,완도군,12,금일읍 +2792,36,전라남도,460,완도군,13,노화읍 +2793,36,전라남도,460,완도군,31,군외면 +2794,36,전라남도,460,완도군,32,신지면 +2795,36,전라남도,460,완도군,33,고금면 +2796,36,전라남도,460,완도군,34,약산면 +2797,36,전라남도,460,완도군,35,청산면 +2798,36,전라남도,460,완도군,36,소안면 +2799,36,전라남도,460,완도군,37,금당면 +2800,36,전라남도,460,완도군,38,보길면 +2801,36,전라남도,460,완도군,39,생일면 +2802,36,전라남도,470,진도군,11,진도읍 +2803,36,전라남도,470,진도군,31,군내면 +2804,36,전라남도,470,진도군,32,고군면 +2805,36,전라남도,470,진도군,33,의신면 +2806,36,전라남도,470,진도군,34,임회면 +2807,36,전라남도,470,진도군,35,지산면 +2808,36,전라남도,470,진도군,36,조도면 +2809,36,전라남도,480,신안군,11,지도읍 +2810,36,전라남도,480,신안군,12,압해읍 +2811,36,전라남도,480,신안군,31,증도면 +2812,36,전라남도,480,신안군,32,임자면 +2813,36,전라남도,480,신안군,33,자은면 +2814,36,전라남도,480,신안군,34,비금면 +2815,36,전라남도,480,신안군,35,도초면 +2816,36,전라남도,480,신안군,36,흑산면 +2817,36,전라남도,480,신안군,37,하의면 +2818,36,전라남도,480,신안군,38,신의면 +2819,36,전라남도,480,신안군,39,장산면 +2820,36,전라남도,480,신안군,40,안좌면 +2821,36,전라남도,480,신안군,41,팔금면 +2822,36,전라남도,480,신안군,42,암태면 +2823,37,경상북도,011,포항시 남구,11,구룡포읍 +2824,37,경상북도,011,포항시 남구,12,연일읍 +2825,37,경상북도,011,포항시 남구,13,오천읍 +2826,37,경상북도,011,포항시 남구,31,대송면 +2827,37,경상북도,011,포항시 남구,32,동해면 +2828,37,경상북도,011,포항시 남구,33,장기면 +2829,37,경상북도,011,포항시 남구,35,호미곶면 +2830,37,경상북도,011,포항시 남구,55,송도동 +2831,37,경상북도,011,포항시 남구,56,청림동 +2832,37,경상북도,011,포항시 남구,57,제철동 +2833,37,경상북도,011,포항시 남구,58,효곡동 +2834,37,경상북도,011,포항시 남구,59,대이동 +2835,37,경상북도,011,포항시 남구,60,상대동 +2836,37,경상북도,011,포항시 남구,61,해도동 +2837,37,경상북도,012,포항시 북구,11,흥해읍 +2838,37,경상북도,012,포항시 북구,31,신광면 +2839,37,경상북도,012,포항시 북구,32,청하면 +2840,37,경상북도,012,포항시 북구,33,송라면 +2841,37,경상북도,012,포항시 북구,34,기계면 +2842,37,경상북도,012,포항시 북구,35,죽장면 +2843,37,경상북도,012,포항시 북구,36,기북면 +2844,37,경상북도,012,포항시 북구,58,양학동 +2845,37,경상북도,012,포항시 북구,61,용흥동 +2846,37,경상북도,012,포항시 북구,63,우창동 +2847,37,경상북도,012,포항시 북구,64,두호동 +2848,37,경상북도,012,포항시 북구,65,장량동 +2849,37,경상북도,012,포항시 북구,66,환여동 +2850,37,경상북도,012,포항시 북구,67,중앙동 +2851,37,경상북도,012,포항시 북구,68,죽도동 +2852,37,경상북도,020,경주시,11,감포읍 +2853,37,경상북도,020,경주시,12,안강읍 +2854,37,경상북도,020,경주시,13,건천읍 +2855,37,경상북도,020,경주시,14,외동읍 +2856,37,경상북도,020,경주시,32,양남면 +2857,37,경상북도,020,경주시,33,내남면 +2858,37,경상북도,020,경주시,34,산내면 +2859,37,경상북도,020,경주시,35,서면 +2860,37,경상북도,020,경주시,36,현곡면 +2861,37,경상북도,020,경주시,37,강동면 +2862,37,경상북도,020,경주시,38,천북면 +2863,37,경상북도,020,경주시,39,문무대왕면 +2864,37,경상북도,020,경주시,51,중부동 +2865,37,경상북도,020,경주시,55,성건동 +2866,37,경상북도,020,경주시,58,월성동 +2867,37,경상북도,020,경주시,59,선도동 +2868,37,경상북도,020,경주시,62,용강동 +2869,37,경상북도,020,경주시,63,황성동 +2870,37,경상북도,020,경주시,64,동천동 +2871,37,경상북도,020,경주시,66,불국동 +2872,37,경상북도,020,경주시,67,보덕동 +2873,37,경상북도,020,경주시,68,황오동 +2874,37,경상북도,020,경주시,69,황남동 +2875,37,경상북도,030,김천시,11,아포읍 +2876,37,경상북도,030,김천시,31,농소면 +2877,37,경상북도,030,김천시,32,남면 +2878,37,경상북도,030,김천시,33,개령면 +2879,37,경상북도,030,김천시,34,감문면 +2880,37,경상북도,030,김천시,35,어모면 +2881,37,경상북도,030,김천시,36,봉산면 +2882,37,경상북도,030,김천시,37,대항면 +2883,37,경상북도,030,김천시,38,감천면 +2884,37,경상북도,030,김천시,39,조마면 +2885,37,경상북도,030,김천시,40,구성면 +2886,37,경상북도,030,김천시,41,지례면 +2887,37,경상북도,030,김천시,42,부항면 +2888,37,경상북도,030,김천시,43,대덕면 +2889,37,경상북도,030,김천시,44,증산면 +2890,37,경상북도,030,김천시,55,양금동 +2891,37,경상북도,030,김천시,56,대신동 +2892,37,경상북도,030,김천시,58,대곡동 +2893,37,경상북도,030,김천시,59,지좌동 +2894,37,경상북도,030,김천시,60,자산동 +2895,37,경상북도,030,김천시,61,평화남산동 +2896,37,경상북도,030,김천시,62,율곡동 +2897,37,경상북도,040,안동시,11,풍산읍 +2898,37,경상북도,040,안동시,31,와룡면 +2899,37,경상북도,040,안동시,32,북후면 +2900,37,경상북도,040,안동시,33,서후면 +2901,37,경상북도,040,안동시,34,풍천면 +2902,37,경상북도,040,안동시,35,일직면 +2903,37,경상북도,040,안동시,36,남후면 +2904,37,경상북도,040,안동시,37,남선면 +2905,37,경상북도,040,안동시,38,임하면 +2906,37,경상북도,040,안동시,39,길안면 +2907,37,경상북도,040,안동시,40,임동면 +2908,37,경상북도,040,안동시,41,예안면 +2909,37,경상북도,040,안동시,42,도산면 +2910,37,경상북도,040,안동시,43,녹전면 +2911,37,경상북도,040,안동시,51,중구동 +2912,37,경상북도,040,안동시,52,명륜동 +2913,37,경상북도,040,안동시,54,용상동 +2914,37,경상북도,040,안동시,56,태화동 +2915,37,경상북도,040,안동시,58,평화동 +2916,37,경상북도,040,안동시,59,안기동 +2917,37,경상북도,040,안동시,60,옥동 +2918,37,경상북도,040,안동시,61,송하동 +2919,37,경상북도,040,안동시,62,서구동 +2920,37,경상북도,040,안동시,63,강남동 +2921,37,경상북도,050,구미시,11,선산읍 +2922,37,경상북도,050,구미시,12,고아읍 +2923,37,경상북도,050,구미시,13,산동읍 +2924,37,경상북도,050,구미시,31,무을면 +2925,37,경상북도,050,구미시,32,옥성면 +2926,37,경상북도,050,구미시,33,도개면 +2927,37,경상북도,050,구미시,34,해평면 +2928,37,경상북도,050,구미시,36,장천면 +2929,37,경상북도,050,구미시,51,송정동 +2930,37,경상북도,050,구미시,52,원평1동 +2931,37,경상북도,050,구미시,53,원평2동 +2932,37,경상북도,050,구미시,55,도량동 +2933,37,경상북도,050,구미시,56,지산동 +2934,37,경상북도,050,구미시,57,선주원남동 +2935,37,경상북도,050,구미시,59,형곡1동 +2936,37,경상북도,050,구미시,60,형곡2동 +2937,37,경상북도,050,구미시,61,신평1동 +2938,37,경상북도,050,구미시,62,신평2동 +2939,37,경상북도,050,구미시,66,광평동 +2940,37,경상북도,050,구미시,67,상모사곡동 +2941,37,경상북도,050,구미시,69,임오동 +2942,37,경상북도,050,구미시,70,인동동 +2943,37,경상북도,050,구미시,71,진미동 +2944,37,경상북도,050,구미시,72,양포동 +2945,37,경상북도,050,구미시,73,비산동 +2946,37,경상북도,050,구미시,74,공단동 +2947,37,경상북도,060,영주시,11,풍기읍 +2948,37,경상북도,060,영주시,31,이산면 +2949,37,경상북도,060,영주시,32,평은면 +2950,37,경상북도,060,영주시,33,문수면 +2951,37,경상북도,060,영주시,34,장수면 +2952,37,경상북도,060,영주시,35,안정면 +2953,37,경상북도,060,영주시,36,봉현면 +2954,37,경상북도,060,영주시,37,순흥면 +2955,37,경상북도,060,영주시,38,단산면 +2956,37,경상북도,060,영주시,39,부석면 +2957,37,경상북도,060,영주시,51,상망동 +2958,37,경상북도,060,영주시,53,하망동 +2959,37,경상북도,060,영주시,55,영주1동 +2960,37,경상북도,060,영주시,58,영주2동 +2961,37,경상북도,060,영주시,59,휴천1동 +2962,37,경상북도,060,영주시,60,휴천2동 +2963,37,경상북도,060,영주시,61,휴천3동 +2964,37,경상북도,060,영주시,62,가흥1동 +2965,37,경상북도,060,영주시,63,가흥2동 +2966,37,경상북도,070,영천시,11,금호읍 +2967,37,경상북도,070,영천시,31,청통면 +2968,37,경상북도,070,영천시,32,신녕면 +2969,37,경상북도,070,영천시,33,화산면 +2970,37,경상북도,070,영천시,34,화북면 +2971,37,경상북도,070,영천시,35,화남면 +2972,37,경상북도,070,영천시,36,자양면 +2973,37,경상북도,070,영천시,37,임고면 +2974,37,경상북도,070,영천시,38,고경면 +2975,37,경상북도,070,영천시,39,북안면 +2976,37,경상북도,070,영천시,40,대창면 +2977,37,경상북도,070,영천시,51,동부동 +2978,37,경상북도,070,영천시,52,중앙동 +2979,37,경상북도,070,영천시,53,서부동 +2980,37,경상북도,070,영천시,54,완산동 +2981,37,경상북도,070,영천시,55,남부동 +2982,37,경상북도,080,상주시,11,함창읍 +2983,37,경상북도,080,상주시,32,중동면 +2984,37,경상북도,080,상주시,33,낙동면 +2985,37,경상북도,080,상주시,34,청리면 +2986,37,경상북도,080,상주시,35,공성면 +2987,37,경상북도,080,상주시,36,외남면 +2988,37,경상북도,080,상주시,37,내서면 +2989,37,경상북도,080,상주시,38,모동면 +2990,37,경상북도,080,상주시,39,모서면 +2991,37,경상북도,080,상주시,40,화동면 +2992,37,경상북도,080,상주시,41,화서면 +2993,37,경상북도,080,상주시,42,화북면 +2994,37,경상북도,080,상주시,43,외서면 +2995,37,경상북도,080,상주시,44,은척면 +2996,37,경상북도,080,상주시,45,공검면 +2997,37,경상북도,080,상주시,46,이안면 +2998,37,경상북도,080,상주시,47,화남면 +2999,37,경상북도,080,상주시,48,사벌국면 +3000,37,경상북도,080,상주시,52,남원동 +3001,37,경상북도,080,상주시,53,북문동 +3002,37,경상북도,080,상주시,54,계림동 +3003,37,경상북도,080,상주시,55,동문동 +3004,37,경상북도,080,상주시,56,동성동 +3005,37,경상북도,080,상주시,57,신흥동 +3006,37,경상북도,090,문경시,11,문경읍 +3007,37,경상북도,090,문경시,12,가은읍 +3008,37,경상북도,090,문경시,31,영순면 +3009,37,경상북도,090,문경시,32,산양면 +3010,37,경상북도,090,문경시,33,호계면 +3011,37,경상북도,090,문경시,34,산북면 +3012,37,경상북도,090,문경시,35,동로면 +3013,37,경상북도,090,문경시,36,마성면 +3014,37,경상북도,090,문경시,37,농암면 +3015,37,경상북도,090,문경시,57,점촌1동 +3016,37,경상북도,090,문경시,58,점촌2동 +3017,37,경상북도,090,문경시,59,점촌3동 +3018,37,경상북도,090,문경시,60,점촌4동 +3019,37,경상북도,090,문경시,61,점촌5동 +3020,37,경상북도,100,경산시,11,하양읍 +3021,37,경상북도,100,경산시,12,진량읍 +3022,37,경상북도,100,경산시,13,압량읍 +3023,37,경상북도,100,경산시,31,와촌면 +3024,37,경상북도,100,경산시,32,자인면 +3025,37,경상북도,100,경산시,33,용성면 +3026,37,경상북도,100,경산시,34,남산면 +3027,37,경상북도,100,경산시,36,남천면 +3028,37,경상북도,100,경산시,51,중앙동 +3029,37,경상북도,100,경산시,52,동부동 +3030,37,경상북도,100,경산시,53,서부1동 +3031,37,경상북도,100,경산시,54,남부동 +3032,37,경상북도,100,경산시,55,북부동 +3033,37,경상북도,100,경산시,56,중방동 +3034,37,경상북도,100,경산시,57,서부2동 +3035,37,경상북도,310,군위군,11,군위읍 +3036,37,경상북도,310,군위군,31,소보면 +3037,37,경상북도,310,군위군,32,효령면 +3038,37,경상북도,310,군위군,33,부계면 +3039,37,경상북도,310,군위군,34,우보면 +3040,37,경상북도,310,군위군,35,의흥면 +3041,37,경상북도,310,군위군,36,산성면 +3042,37,경상북도,310,군위군,38,삼국유사면 +3043,37,경상북도,320,의성군,11,의성읍 +3044,37,경상북도,320,의성군,31,단촌면 +3045,37,경상북도,320,의성군,32,점곡면 +3046,37,경상북도,320,의성군,33,옥산면 +3047,37,경상북도,320,의성군,34,사곡면 +3048,37,경상북도,320,의성군,35,춘산면 +3049,37,경상북도,320,의성군,36,가음면 +3050,37,경상북도,320,의성군,37,금성면 +3051,37,경상북도,320,의성군,38,봉양면 +3052,37,경상북도,320,의성군,39,비안면 +3053,37,경상북도,320,의성군,40,구천면 +3054,37,경상북도,320,의성군,41,단밀면 +3055,37,경상북도,320,의성군,42,단북면 +3056,37,경상북도,320,의성군,43,안계면 +3057,37,경상북도,320,의성군,44,다인면 +3058,37,경상북도,320,의성군,45,신평면 +3059,37,경상북도,320,의성군,46,안평면 +3060,37,경상북도,320,의성군,47,안사면 +3061,37,경상북도,330,청송군,11,청송읍 +3062,37,경상북도,330,청송군,32,부남면 +3063,37,경상북도,330,청송군,33,현동면 +3064,37,경상북도,330,청송군,34,현서면 +3065,37,경상북도,330,청송군,35,안덕면 +3066,37,경상북도,330,청송군,36,파천면 +3067,37,경상북도,330,청송군,37,진보면 +3068,37,경상북도,330,청송군,38,주왕산면 +3069,37,경상북도,340,영양군,11,영양읍 +3070,37,경상북도,340,영양군,31,입암면 +3071,37,경상북도,340,영양군,32,청기면 +3072,37,경상북도,340,영양군,33,일월면 +3073,37,경상북도,340,영양군,34,수비면 +3074,37,경상북도,340,영양군,35,석보면 +3075,37,경상북도,350,영덕군,11,영덕읍 +3076,37,경상북도,350,영덕군,31,강구면 +3077,37,경상북도,350,영덕군,32,남정면 +3078,37,경상북도,350,영덕군,33,달산면 +3079,37,경상북도,350,영덕군,34,지품면 +3080,37,경상북도,350,영덕군,35,축산면 +3081,37,경상북도,350,영덕군,36,영해면 +3082,37,경상북도,350,영덕군,37,병곡면 +3083,37,경상북도,350,영덕군,38,창수면 +3084,37,경상북도,360,청도군,11,화양읍 +3085,37,경상북도,360,청도군,12,청도읍 +3086,37,경상북도,360,청도군,31,각남면 +3087,37,경상북도,360,청도군,32,풍각면 +3088,37,경상북도,360,청도군,33,각북면 +3089,37,경상북도,360,청도군,34,이서면 +3090,37,경상북도,360,청도군,35,운문면 +3091,37,경상북도,360,청도군,36,금천면 +3092,37,경상북도,360,청도군,37,매전면 +3093,37,경상북도,370,고령군,12,대가야읍 +3094,37,경상북도,370,고령군,31,덕곡면 +3095,37,경상북도,370,고령군,32,운수면 +3096,37,경상북도,370,고령군,33,성산면 +3097,37,경상북도,370,고령군,34,다산면 +3098,37,경상북도,370,고령군,35,개진면 +3099,37,경상북도,370,고령군,36,우곡면 +3100,37,경상북도,370,고령군,37,쌍림면 +3101,37,경상북도,380,성주군,11,성주읍 +3102,37,경상북도,380,성주군,31,선남면 +3103,37,경상북도,380,성주군,32,용암면 +3104,37,경상북도,380,성주군,33,수륜면 +3105,37,경상북도,380,성주군,34,가천면 +3106,37,경상북도,380,성주군,35,금수면 +3107,37,경상북도,380,성주군,36,대가면 +3108,37,경상북도,380,성주군,37,벽진면 +3109,37,경상북도,380,성주군,38,초전면 +3110,37,경상북도,380,성주군,39,월항면 +3111,37,경상북도,390,칠곡군,11,왜관읍 +3112,37,경상북도,390,칠곡군,12,북삼읍 +3113,37,경상북도,390,칠곡군,13,석적읍 +3114,37,경상북도,390,칠곡군,31,지천면 +3115,37,경상북도,390,칠곡군,32,동명면 +3116,37,경상북도,390,칠곡군,33,가산면 +3117,37,경상북도,390,칠곡군,36,약목면 +3118,37,경상북도,390,칠곡군,37,기산면 +3119,37,경상북도,400,예천군,11,예천읍 +3120,37,경상북도,400,예천군,31,용문면 +3121,37,경상북도,400,예천군,34,감천면 +3122,37,경상북도,400,예천군,35,보문면 +3123,37,경상북도,400,예천군,36,호명면 +3124,37,경상북도,400,예천군,37,유천면 +3125,37,경상북도,400,예천군,38,용궁면 +3126,37,경상북도,400,예천군,39,개포면 +3127,37,경상북도,400,예천군,40,지보면 +3128,37,경상북도,400,예천군,41,풍양면 +3129,37,경상북도,400,예천군,42,효자면 +3130,37,경상북도,400,예천군,43,은풍면 +3131,37,경상북도,410,봉화군,11,봉화읍 +3132,37,경상북도,410,봉화군,31,물야면 +3133,37,경상북도,410,봉화군,32,봉성면 +3134,37,경상북도,410,봉화군,33,법전면 +3135,37,경상북도,410,봉화군,34,춘양면 +3136,37,경상북도,410,봉화군,35,소천면 +3137,37,경상북도,410,봉화군,36,석포면 +3138,37,경상북도,410,봉화군,37,재산면 +3139,37,경상북도,410,봉화군,38,명호면 +3140,37,경상북도,410,봉화군,39,상운면 +3141,37,경상북도,420,울진군,11,울진읍 +3142,37,경상북도,420,울진군,12,평해읍 +3143,37,경상북도,420,울진군,31,북면 +3144,37,경상북도,420,울진군,33,근남면 +3145,37,경상북도,420,울진군,35,기성면 +3146,37,경상북도,420,울진군,36,온정면 +3147,37,경상북도,420,울진군,37,죽변면 +3148,37,경상북도,420,울진군,38,후포면 +3149,37,경상북도,420,울진군,39,금강송면 +3150,37,경상북도,420,울진군,40,매화면 +3151,37,경상북도,430,울릉군,11,울릉읍 +3152,37,경상북도,430,울릉군,31,서면 +3153,37,경상북도,430,울릉군,32,북면 +3154,38,경상남도,030,진주시,11,문산읍 +3155,38,경상남도,030,진주시,31,내동면 +3156,38,경상남도,030,진주시,32,정촌면 +3157,38,경상남도,030,진주시,33,금곡면 +3158,38,경상남도,030,진주시,34,진성면 +3159,38,경상남도,030,진주시,35,일반성면 +3160,38,경상남도,030,진주시,36,이반성면 +3161,38,경상남도,030,진주시,37,사봉면 +3162,38,경상남도,030,진주시,38,지수면 +3163,38,경상남도,030,진주시,39,대곡면 +3164,38,경상남도,030,진주시,40,금산면 +3165,38,경상남도,030,진주시,41,집현면 +3166,38,경상남도,030,진주시,42,미천면 +3167,38,경상남도,030,진주시,43,명석면 +3168,38,경상남도,030,진주시,44,대평면 +3169,38,경상남도,030,진주시,45,수곡면 +3170,38,경상남도,030,진주시,65,상평동 +3171,38,경상남도,030,진주시,66,초장동 +3172,38,경상남도,030,진주시,67,평거동 +3173,38,경상남도,030,진주시,68,신안동 +3174,38,경상남도,030,진주시,69,이현동 +3175,38,경상남도,030,진주시,70,판문동 +3176,38,경상남도,030,진주시,71,가호동 +3177,38,경상남도,030,진주시,72,천전동 +3178,38,경상남도,030,진주시,73,성북동 +3179,38,경상남도,030,진주시,74,중앙동 +3180,38,경상남도,030,진주시,75,상봉동 +3181,38,경상남도,030,진주시,76,충무공동 +3182,38,경상남도,030,진주시,77,상대동 +3183,38,경상남도,030,진주시,78,하대동 +3184,38,경상남도,050,통영시,11,산양읍 +3185,38,경상남도,050,통영시,31,용남면 +3186,38,경상남도,050,통영시,32,도산면 +3187,38,경상남도,050,통영시,33,광도면 +3188,38,경상남도,050,통영시,34,욕지면 +3189,38,경상남도,050,통영시,35,한산면 +3190,38,경상남도,050,통영시,36,사량면 +3191,38,경상남도,050,통영시,52,명정동 +3192,38,경상남도,050,통영시,53,중앙동 +3193,38,경상남도,050,통영시,54,정량동 +3194,38,경상남도,050,통영시,55,북신동 +3195,38,경상남도,050,통영시,56,무전동 +3196,38,경상남도,050,통영시,62,도천동 +3197,38,경상남도,050,통영시,63,미수동 +3198,38,경상남도,050,통영시,64,봉평동 +3199,38,경상남도,060,사천시,11,사천읍 +3200,38,경상남도,060,사천시,31,정동면 +3201,38,경상남도,060,사천시,32,사남면 +3202,38,경상남도,060,사천시,33,용현면 +3203,38,경상남도,060,사천시,34,축동면 +3204,38,경상남도,060,사천시,35,곤양면 +3205,38,경상남도,060,사천시,36,곤명면 +3206,38,경상남도,060,사천시,37,서포면 +3207,38,경상남도,060,사천시,51,동서동 +3208,38,경상남도,060,사천시,52,선구동 +3209,38,경상남도,060,사천시,53,동서금동 +3210,38,경상남도,060,사천시,55,벌용동 +3211,38,경상남도,060,사천시,57,향촌동 +3212,38,경상남도,060,사천시,59,남양동 +3213,38,경상남도,070,김해시,11,진영읍 +3214,38,경상남도,070,김해시,32,주촌면 +3215,38,경상남도,070,김해시,33,진례면 +3216,38,경상남도,070,김해시,34,한림면 +3217,38,경상남도,070,김해시,35,생림면 +3218,38,경상남도,070,김해시,36,상동면 +3219,38,경상남도,070,김해시,37,대동면 +3220,38,경상남도,070,김해시,51,동상동 +3221,38,경상남도,070,김해시,52,회현동 +3222,38,경상남도,070,김해시,53,부원동 +3223,38,경상남도,070,김해시,54,내외동 +3224,38,경상남도,070,김해시,55,북부동 +3225,38,경상남도,070,김해시,56,칠산서부동 +3226,38,경상남도,070,김해시,58,활천동 +3227,38,경상남도,070,김해시,59,삼안동 +3228,38,경상남도,070,김해시,60,불암동 +3229,38,경상남도,070,김해시,61,장유1동 +3230,38,경상남도,070,김해시,62,장유2동 +3231,38,경상남도,070,김해시,63,장유3동 +3232,38,경상남도,080,밀양시,11,삼랑진읍 +3233,38,경상남도,080,밀양시,12,하남읍 +3234,38,경상남도,080,밀양시,31,부북면 +3235,38,경상남도,080,밀양시,32,상동면 +3236,38,경상남도,080,밀양시,33,산외면 +3237,38,경상남도,080,밀양시,34,산내면 +3238,38,경상남도,080,밀양시,35,단장면 +3239,38,경상남도,080,밀양시,36,상남면 +3240,38,경상남도,080,밀양시,37,초동면 +3241,38,경상남도,080,밀양시,38,무안면 +3242,38,경상남도,080,밀양시,39,청도면 +3243,38,경상남도,080,밀양시,51,내일동 +3244,38,경상남도,080,밀양시,52,내이동 +3245,38,경상남도,080,밀양시,53,교동 +3246,38,경상남도,080,밀양시,54,삼문동 +3247,38,경상남도,080,밀양시,55,가곡동 +3248,38,경상남도,090,거제시,31,일운면 +3249,38,경상남도,090,거제시,32,동부면 +3250,38,경상남도,090,거제시,33,남부면 +3251,38,경상남도,090,거제시,34,거제면 +3252,38,경상남도,090,거제시,35,둔덕면 +3253,38,경상남도,090,거제시,36,사등면 +3254,38,경상남도,090,거제시,37,연초면 +3255,38,경상남도,090,거제시,38,하청면 +3256,38,경상남도,090,거제시,39,장목면 +3257,38,경상남도,090,거제시,53,능포동 +3258,38,경상남도,090,거제시,54,아주동 +3259,38,경상남도,090,거제시,55,옥포1동 +3260,38,경상남도,090,거제시,56,옥포2동 +3261,38,경상남도,090,거제시,57,장평동 +3262,38,경상남도,090,거제시,58,고현동 +3263,38,경상남도,090,거제시,59,상문동 +3264,38,경상남도,090,거제시,60,수양동 +3265,38,경상남도,090,거제시,61,장승포동 +3266,38,경상남도,100,양산시,12,물금읍 +3267,38,경상남도,100,양산시,31,동면 +3268,38,경상남도,100,양산시,32,원동면 +3269,38,경상남도,100,양산시,33,상북면 +3270,38,경상남도,100,양산시,34,하북면 +3271,38,경상남도,100,양산시,52,삼성동 +3272,38,경상남도,100,양산시,53,강서동 +3273,38,경상남도,100,양산시,54,서창동 +3274,38,경상남도,100,양산시,55,소주동 +3275,38,경상남도,100,양산시,56,평산동 +3276,38,경상남도,100,양산시,57,덕계동 +3277,38,경상남도,100,양산시,58,중앙동 +3278,38,경상남도,100,양산시,59,양주동 +3279,38,경상남도,111,창원시 의창구,11,동읍 +3280,38,경상남도,111,창원시 의창구,31,북면 +3281,38,경상남도,111,창원시 의창구,32,대산면 +3282,38,경상남도,111,창원시 의창구,51,의창동 +3283,38,경상남도,111,창원시 의창구,52,팔룡동 +3284,38,경상남도,111,창원시 의창구,53,명곡동 +3285,38,경상남도,111,창원시 의창구,54,봉림동 +3286,38,경상남도,111,창원시 의창구,55,용지동 +3287,38,경상남도,112,창원시 성산구,51,반송동 +3288,38,경상남도,112,창원시 성산구,52,중앙동 +3289,38,경상남도,112,창원시 성산구,53,상남동 +3290,38,경상남도,112,창원시 성산구,54,사파동 +3291,38,경상남도,112,창원시 성산구,55,가음정동 +3292,38,경상남도,112,창원시 성산구,56,성주동 +3293,38,경상남도,112,창원시 성산구,57,웅남동 +3294,38,경상남도,113,창원시 마산합포구,31,구산면 +3295,38,경상남도,113,창원시 마산합포구,32,진동면 +3296,38,경상남도,113,창원시 마산합포구,33,진북면 +3297,38,경상남도,113,창원시 마산합포구,34,진전면 +3298,38,경상남도,113,창원시 마산합포구,51,현동 +3299,38,경상남도,113,창원시 마산합포구,52,가포동 +3300,38,경상남도,113,창원시 마산합포구,53,월영동 +3301,38,경상남도,113,창원시 마산합포구,54,문화동 +3302,38,경상남도,113,창원시 마산합포구,57,완월동 +3303,38,경상남도,113,창원시 마산합포구,58,자산동 +3304,38,경상남도,113,창원시 마산합포구,64,합포동 +3305,38,경상남도,113,창원시 마산합포구,65,산호동 +3306,38,경상남도,113,창원시 마산합포구,66,반월중앙동 +3307,38,경상남도,113,창원시 마산합포구,67,오동동 +3308,38,경상남도,113,창원시 마산합포구,68,교방동 +3309,38,경상남도,114,창원시 마산회원구,11,내서읍 +3310,38,경상남도,114,창원시 마산회원구,51,회원1동 +3311,38,경상남도,114,창원시 마산회원구,52,회원2동 +3312,38,경상남도,114,창원시 마산회원구,55,회성동 +3313,38,경상남도,114,창원시 마산회원구,56,양덕1동 +3314,38,경상남도,114,창원시 마산회원구,57,양덕2동 +3315,38,경상남도,114,창원시 마산회원구,58,합성1동 +3316,38,경상남도,114,창원시 마산회원구,59,합성2동 +3317,38,경상남도,114,창원시 마산회원구,60,구암1동 +3318,38,경상남도,114,창원시 마산회원구,61,구암2동 +3319,38,경상남도,114,창원시 마산회원구,62,봉암동 +3320,38,경상남도,114,창원시 마산회원구,63,석전동 +3321,38,경상남도,115,창원시 진해구,54,여좌동 +3322,38,경상남도,115,창원시 진해구,55,태백동 +3323,38,경상남도,115,창원시 진해구,56,경화동 +3324,38,경상남도,115,창원시 진해구,57,병암동 +3325,38,경상남도,115,창원시 진해구,58,석동 +3326,38,경상남도,115,창원시 진해구,59,이동 +3327,38,경상남도,115,창원시 진해구,60,자은동 +3328,38,경상남도,115,창원시 진해구,61,덕산동 +3329,38,경상남도,115,창원시 진해구,62,풍호동 +3330,38,경상남도,115,창원시 진해구,63,웅천동 +3331,38,경상남도,115,창원시 진해구,64,웅동1동 +3332,38,경상남도,115,창원시 진해구,65,웅동2동 +3333,38,경상남도,115,창원시 진해구,66,충무동 +3334,38,경상남도,310,의령군,11,의령읍 +3335,38,경상남도,310,의령군,31,가례면 +3336,38,경상남도,310,의령군,32,칠곡면 +3337,38,경상남도,310,의령군,33,대의면 +3338,38,경상남도,310,의령군,34,화정면 +3339,38,경상남도,310,의령군,35,용덕면 +3340,38,경상남도,310,의령군,36,정곡면 +3341,38,경상남도,310,의령군,37,지정면 +3342,38,경상남도,310,의령군,38,낙서면 +3343,38,경상남도,310,의령군,39,부림면 +3344,38,경상남도,310,의령군,40,봉수면 +3345,38,경상남도,310,의령군,41,궁류면 +3346,38,경상남도,310,의령군,42,유곡면 +3347,38,경상남도,320,함안군,11,가야읍 +3348,38,경상남도,320,함안군,12,칠원읍 +3349,38,경상남도,320,함안군,31,함안면 +3350,38,경상남도,320,함안군,32,군북면 +3351,38,경상남도,320,함안군,33,법수면 +3352,38,경상남도,320,함안군,34,대산면 +3353,38,경상남도,320,함안군,35,칠서면 +3354,38,경상남도,320,함안군,36,칠북면 +3355,38,경상남도,320,함안군,38,산인면 +3356,38,경상남도,320,함안군,39,여항면 +3357,38,경상남도,330,창녕군,11,창녕읍 +3358,38,경상남도,330,창녕군,12,남지읍 +3359,38,경상남도,330,창녕군,31,고암면 +3360,38,경상남도,330,창녕군,32,성산면 +3361,38,경상남도,330,창녕군,33,대합면 +3362,38,경상남도,330,창녕군,34,이방면 +3363,38,경상남도,330,창녕군,35,유어면 +3364,38,경상남도,330,창녕군,36,대지면 +3365,38,경상남도,330,창녕군,37,계성면 +3366,38,경상남도,330,창녕군,38,영산면 +3367,38,경상남도,330,창녕군,39,장마면 +3368,38,경상남도,330,창녕군,40,도천면 +3369,38,경상남도,330,창녕군,41,길곡면 +3370,38,경상남도,330,창녕군,42,부곡면 +3371,38,경상남도,340,고성군,11,고성읍 +3372,38,경상남도,340,고성군,31,삼산면 +3373,38,경상남도,340,고성군,32,하일면 +3374,38,경상남도,340,고성군,33,하이면 +3375,38,경상남도,340,고성군,34,상리면 +3376,38,경상남도,340,고성군,35,대가면 +3377,38,경상남도,340,고성군,36,영현면 +3378,38,경상남도,340,고성군,37,영오면 +3379,38,경상남도,340,고성군,38,개천면 +3380,38,경상남도,340,고성군,39,구만면 +3381,38,경상남도,340,고성군,40,회화면 +3382,38,경상남도,340,고성군,41,마암면 +3383,38,경상남도,340,고성군,42,동해면 +3384,38,경상남도,340,고성군,43,거류면 +3385,38,경상남도,350,남해군,11,남해읍 +3386,38,경상남도,350,남해군,31,이동면 +3387,38,경상남도,350,남해군,32,상주면 +3388,38,경상남도,350,남해군,33,삼동면 +3389,38,경상남도,350,남해군,34,미조면 +3390,38,경상남도,350,남해군,35,남면 +3391,38,경상남도,350,남해군,36,서면 +3392,38,경상남도,350,남해군,37,고현면 +3393,38,경상남도,350,남해군,38,설천면 +3394,38,경상남도,350,남해군,39,창선면 +3395,38,경상남도,360,하동군,11,하동읍 +3396,38,경상남도,360,하동군,31,화개면 +3397,38,경상남도,360,하동군,32,악양면 +3398,38,경상남도,360,하동군,33,적량면 +3399,38,경상남도,360,하동군,34,횡천면 +3400,38,경상남도,360,하동군,35,고전면 +3401,38,경상남도,360,하동군,36,금남면 +3402,38,경상남도,360,하동군,37,금성면 +3403,38,경상남도,360,하동군,38,진교면 +3404,38,경상남도,360,하동군,39,양보면 +3405,38,경상남도,360,하동군,40,북천면 +3406,38,경상남도,360,하동군,41,청암면 +3407,38,경상남도,360,하동군,42,옥종면 +3408,38,경상남도,370,산청군,11,산청읍 +3409,38,경상남도,370,산청군,31,차황면 +3410,38,경상남도,370,산청군,32,오부면 +3411,38,경상남도,370,산청군,33,생초면 +3412,38,경상남도,370,산청군,34,금서면 +3413,38,경상남도,370,산청군,35,삼장면 +3414,38,경상남도,370,산청군,36,시천면 +3415,38,경상남도,370,산청군,37,단성면 +3416,38,경상남도,370,산청군,38,신안면 +3417,38,경상남도,370,산청군,39,생비량면 +3418,38,경상남도,370,산청군,40,신등면 +3419,38,경상남도,380,함양군,11,함양읍 +3420,38,경상남도,380,함양군,31,마천면 +3421,38,경상남도,380,함양군,32,휴천면 +3422,38,경상남도,380,함양군,33,유림면 +3423,38,경상남도,380,함양군,34,수동면 +3424,38,경상남도,380,함양군,35,지곡면 +3425,38,경상남도,380,함양군,36,안의면 +3426,38,경상남도,380,함양군,37,서하면 +3427,38,경상남도,380,함양군,38,서상면 +3428,38,경상남도,380,함양군,39,백전면 +3429,38,경상남도,380,함양군,40,병곡면 +3430,38,경상남도,390,거창군,11,거창읍 +3431,38,경상남도,390,거창군,31,주상면 +3432,38,경상남도,390,거창군,32,웅양면 +3433,38,경상남도,390,거창군,33,고제면 +3434,38,경상남도,390,거창군,34,북상면 +3435,38,경상남도,390,거창군,35,위천면 +3436,38,경상남도,390,거창군,36,마리면 +3437,38,경상남도,390,거창군,37,남상면 +3438,38,경상남도,390,거창군,38,남하면 +3439,38,경상남도,390,거창군,39,신원면 +3440,38,경상남도,390,거창군,40,가조면 +3441,38,경상남도,390,거창군,41,가북면 +3442,38,경상남도,400,합천군,11,합천읍 +3443,38,경상남도,400,합천군,31,봉산면 +3444,38,경상남도,400,합천군,32,묘산면 +3445,38,경상남도,400,합천군,33,가야면 +3446,38,경상남도,400,합천군,34,야로면 +3447,38,경상남도,400,합천군,35,율곡면 +3448,38,경상남도,400,합천군,36,초계면 +3449,38,경상남도,400,합천군,37,쌍책면 +3450,38,경상남도,400,합천군,38,덕곡면 +3451,38,경상남도,400,합천군,39,청덕면 +3452,38,경상남도,400,합천군,40,적중면 +3453,38,경상남도,400,합천군,41,대양면 +3454,38,경상남도,400,합천군,42,쌍백면 +3455,38,경상남도,400,합천군,43,삼가면 +3456,38,경상남도,400,합천군,44,가회면 +3457,38,경상남도,400,합천군,45,대병면 +3458,38,경상남도,400,합천군,46,용주면 +3459,39,제주특별자치도,010,제주시,11,한림읍 +3460,39,제주특별자치도,010,제주시,12,애월읍 +3461,39,제주특별자치도,010,제주시,13,구좌읍 +3462,39,제주특별자치도,010,제주시,14,조천읍 +3463,39,제주특별자치도,010,제주시,31,한경면 +3464,39,제주특별자치도,010,제주시,32,추자면 +3465,39,제주특별자치도,010,제주시,33,우도면 +3466,39,제주특별자치도,010,제주시,51,일도1동 +3467,39,제주특별자치도,010,제주시,52,일도2동 +3468,39,제주특별자치도,010,제주시,53,이도1동 +3469,39,제주특별자치도,010,제주시,54,이도2동 +3470,39,제주특별자치도,010,제주시,55,삼도1동 +3471,39,제주특별자치도,010,제주시,56,삼도2동 +3472,39,제주특별자치도,010,제주시,57,용담1동 +3473,39,제주특별자치도,010,제주시,58,용담2동 +3474,39,제주특별자치도,010,제주시,59,건입동 +3475,39,제주특별자치도,010,제주시,60,화북동 +3476,39,제주특별자치도,010,제주시,61,삼양동 +3477,39,제주특별자치도,010,제주시,62,봉개동 +3478,39,제주특별자치도,010,제주시,63,아라동 +3479,39,제주특별자치도,010,제주시,64,오라동 +3480,39,제주특별자치도,010,제주시,65,연동 +3481,39,제주특별자치도,010,제주시,66,노형동 +3482,39,제주특별자치도,010,제주시,67,외도동 +3483,39,제주특별자치도,010,제주시,68,이호동 +3484,39,제주특별자치도,010,제주시,69,도두동 +3485,39,제주특별자치도,020,서귀포시,11,대정읍 +3486,39,제주특별자치도,020,서귀포시,12,남원읍 +3487,39,제주특별자치도,020,서귀포시,13,성산읍 +3488,39,제주특별자치도,020,서귀포시,31,안덕면 +3489,39,제주특별자치도,020,서귀포시,32,표선면 +3490,39,제주특별자치도,020,서귀포시,51,송산동 +3491,39,제주특별자치도,020,서귀포시,52,정방동 +3492,39,제주특별자치도,020,서귀포시,53,중앙동 +3493,39,제주특별자치도,020,서귀포시,54,천지동 +3494,39,제주특별자치도,020,서귀포시,55,효돈동 +3495,39,제주특별자치도,020,서귀포시,56,영천동 +3496,39,제주특별자치도,020,서귀포시,57,동홍동 +3497,39,제주특별자치도,020,서귀포시,58,서홍동 +3498,39,제주특별자치도,020,서귀포시,59,대륜동 +3499,39,제주특별자치도,020,서귀포시,60,대천동 +3500,39,제주특별자치도,020,서귀포시,61,중문동 +3501,39,제주특별자치도,020,서귀포시,62,예래동 \ No newline at end of file diff --git a/back/src/db/database.js b/back/src/db/database.js new file mode 100644 index 0000000..5db2a16 --- /dev/null +++ b/back/src/db/database.js @@ -0,0 +1,78 @@ +// references: +// https://github.com/sidorares/node-mysql2 +// const mysql = require("mysql2"); +// // const app = require("../app"); +// const User = require("./models/User"); +// // require("dotenv").config({ path: "../../.env" }); +// require("dotenv").config(); + +//----------정상작동-start---------// +// Error: Can't add new command when connection is in closed state +// const connection = mysql.createConnection({ +// host: process.env.DB_HOST, +// user: process.env.DB_USER, +// password: process.env.DB_PASSWORD, +// database: process.env.DB_DATABASE, +// }); + +// connection.connect(); + +// connection.query( +// "SELECT 10 + 1 AS solution", +// function (error, results, fields) { +// if (error) throw error; +// console.log( +// "정상적으로 MySQL 서버에 연결되었습니다. '1' + '1'은?: ", +// results[0].solution +// ); +// } +// ); + +// connection.query("SELECT * FROM users", function (error, results, fields) { +// if (error) throw error; +// console.log(results); +// }); + +// connection.end(); + +// // module.exports = { connection }; +// module.exports = { connection, User }; + +//----------정상작동-end---------// + +// -----------start---------// +// https://github.com/sidorares/node-mysql2/issues/939 +// const mysql = require("mysql2"); +const mysql = require("mysql2/promise"); +const app = require("../app"); +const User = require("./models/User"); +// require("dotenv").config({ path: "../../.env" }); +// const bluebird = require("bluebird"); +require("dotenv").config(); + +// Error: Can't add new command when connection is in closed state +const dbConfig = { + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_DATABASE, + connectionLimit: 10, + queueLimit: 0, // unlimited + // Promise: bluebird, +}; +// exporting MySQL connection pool object +const pool = mysql.createPool(dbConfig); +const connection = mysql.createConnection(dbConfig); +// connection.connect(); +// connection.query( +// "SELECT 10 + 1 AS solution", +// function (error, results, fields) { +// if (error) throw error; +// console.log( +// "정상적으로 MySQL 서버에 연결되었습니다.(connection) '1' + '1'은?: ", +// results[0].solution +// ); +// } +// ); +// connection.end(); +module.exports = { pool, connection, User }; diff --git a/back/src/db/dbDiagram.sql b/back/src/db/dbDiagram.sql new file mode 100644 index 0000000..8c711da --- /dev/null +++ b/back/src/db/dbDiagram.sql @@ -0,0 +1,61 @@ +CREATE TABLE `users` ( + `user_id` int PRIMARY KEY AUTO_INCREMENT, + `email` varchar(255) NOT NULL UNIQUE, + `password` varchar(255) NOT NULL, + `nickname` varchar(255) NOT NULL DEFAULT (U.email) UNIQUE, + `profile_photo` varchar(255) DEFAULT (./default.jpg), + `created_time` timestamp DEFAULT current_timestamp, + `updated_time` timestamp DEFAULT current_timestamp ON UPDATE current_timestamp, + `current_latitude` varchar(255) NOT NULL, + `current_longitude` varchar(255) NOT NULL +); + +CREATE TABLE `stores` ( + `store_id` int PRIMARY KEY AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `description` varchar(255) NOT NULL, + `tag` ENUM ('zero_waste', 'refill') NOT NULL, + `phone` int, + `latitude` varchar(255) NOT NULL, + `longitude` varchar(255) NOT NULL, + `address_detail` varchar(255) NOT NULL +); + +CREATE TABLE `like_store` ( + `like_store_id` int PRIMARY KEY AUTO_INCREMENT, + `time` timestamp NOT NULL DEFAULT current_timestamp ON UPDATE current_timestamp, + `user_id` int NOT NULL, + `store_id` int NOT NULL +); + +CREATE TABLE `reviews` ( + `review_id` int PRIMARY KEY AUTO_INCREMENT, + `star` int, + `description` varchar(500), + `photo` varchar(255), + `photo2` varchar(255), + `created_time` timestamp DEFAULT current_timestamp, + `updated_time` timestamp DEFAULT current_timestamp ON UPDATE current_timestamp, + `user_id` int NOT NULL, + `store_id` int NOT NULL +); + +CREATE TABLE `like_reviews` ( + `like_review_id` int PRIMARY KEY AUTO_INCREMENT, + `created_time` timestamp DEFAULT current_timestamp ON UPDATE current_timestamp, + `tag` ENUM ('like', 'dislike') NOT NULL, + `user_id` int NOT NULL, + `review_id` int NOT NULL +); + +ALTER TABLE `like_store` ADD FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`); + +ALTER TABLE `like_store` ADD FOREIGN KEY (`store_id`) REFERENCES `stores` (`store_id`); + +ALTER TABLE `reviews` ADD FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`); + +ALTER TABLE `reviews` ADD FOREIGN KEY (`store_id`) REFERENCES `stores` (`store_id`); + +ALTER TABLE `like_reviews` ADD FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`); + +ALTER TABLE `like_reviews` ADD FOREIGN KEY (`review_id`) REFERENCES `reviews` (`review_id`); diff --git a/back/src/db/models/Review.js b/back/src/db/models/Review.js new file mode 100644 index 0000000..6d54d28 --- /dev/null +++ b/back/src/db/models/Review.js @@ -0,0 +1,17 @@ +const { pool } = require("../database"); + +class Review { + static async findAll() { + const [results, fields, error] = await pool.query( + { + sql: "SELECT * FROM reviews" + }, + function (error, results, fields) { + if (error) throw error; + console.log(results); + } + ); + return JSON.stringify(results); + } + } + module.exports = { Review }; \ No newline at end of file diff --git a/back/src/db/models/User.js b/back/src/db/models/User.js new file mode 100644 index 0000000..c0eb5da --- /dev/null +++ b/back/src/db/models/User.js @@ -0,0 +1,31 @@ +// const mysql = require("mysql2"); +const { pool } = require("../database"); +// const express = require("express"); +class User { + static async findAll() { + const [results, fields, error] = await pool.query( + { + sql: "SELECT * FROM users", + timeout: 4000, // 40s + }, + function (error, results, fields) { + if (error) throw error; + console.log(results); + } + ); + return JSON.stringify(results); + } +} +module.exports = { User }; + +// // userRouter.js +// // option 3. 코드 파일 분리 +// // User.js -> userService.js에서 타입문제 발생 +// userAuthRouter.get("/userlist", async (req, res, next) => { +// try { +// const [results, fields, error] = await userAuthService.getUsers(); +// res.status(200).send(results); +// } catch (err) { +// next(err); +// } +// }); diff --git a/back/src/db/seoulCityInfo.csv b/back/src/db/seoulCityInfo.csv new file mode 100644 index 0000000..21ce5cc --- /dev/null +++ b/back/src/db/seoulCityInfo.csv @@ -0,0 +1,424 @@ +dong,gu,si_do +천호2동,강동구,서울시 +암사1동,강동구,서울시 +둔촌2동,강동구,서울시 +둔촌1동,강동구,서울시 +성내3동,강동구,서울시 +성내2동,강동구,서울시 +성내1동,강동구,서울시 +천호3동,강동구,서울시 +천호1동,강동구,서울시 +암사3동,강동구,서울시 +암사2동,강동구,서울시 +고덕2동,강동구,서울시 +고덕1동,강동구,서울시 +명일2동,강동구,서울시 +명일1동,강동구,서울시 +상일동,강동구,서울시 +강일동,강동구,서울시 +위례동,송파구,서울시 +장지동,송파구,서울시 +잠실3동,송파구,서울시 +잠실2동,송파구,서울시 +잠실7동,송파구,서울시 +잠실6동,송파구,서울시 +잠실4동,송파구,서울시 +잠실본동,송파구,서울시 +문정2동,송파구,서울시 +문정1동,송파구,서울시 +가락2동,송파구,서울시 +가락1동,송파구,서울시 +가락본동,송파구,서울시 +삼전동,송파구,서울시 +석촌동,송파구,서울시 +송파2동,송파구,서울시 +송파1동,송파구,서울시 +오금동,송파구,서울시 +오륜동,송파구,서울시 +방이2동,송파구,서울시 +방이1동,송파구,서울시 +마천2동,송파구,서울시 +마천1동,송파구,서울시 +거여2동,송파구,서울시 +거여1동,송파구,서울시 +풍납2동,송파구,서울시 +풍납1동,송파구,서울시 +개포2동,강남구,서울시 +대치2동,강남구,서울시 +청담동,강남구,서울시 +압구정동,강남구,서울시 +세곡동,강남구,서울시 +수서동,강남구,서울시 +일원2동,강남구,서울시 +일원1동,강남구,서울시 +일원본동,강남구,서울시 +개포4동,강남구,서울시 +개포1동,강남구,서울시 +도곡2동,강남구,서울시 +도곡1동,강남구,서울시 +역삼2동,강남구,서울시 +역삼1동,강남구,서울시 +대치4동,강남구,서울시 +대치1동,강남구,서울시 +삼성2동,강남구,서울시 +삼성1동,강남구,서울시 +논현2동,강남구,서울시 +논현1동,강남구,서울시 +신사동,강남구,서울시 +내곡동,서초구,서울시 +양재2동,서초구,서울시 +양재1동,서초구,서울시 +방배4동,서초구,서울시 +방배3동,서초구,서울시 +방배2동,서초구,서울시 +방배1동,서초구,서울시 +방배본동,서초구,서울시 +반포4동,서초구,서울시 +반포3동,서초구,서울시 +반포2동,서초구,서울시 +반포1동,서초구,서울시 +반포본동,서초구,서울시 +잠원동,서초구,서울시 +서초4동,서초구,서울시 +서초3동,서초구,서울시 +서초2동,서초구,서울시 +서초1동,서초구,서울시 +미성동,관악구,서울시 +삼성동,관악구,서울시 +난곡동,관악구,서울시 +청룡동,관악구,서울시 +성현동,관악구,서울시 +은천동,관악구,서울시 +대학동,관악구,서울시 +조원동,관악구,서울시 +난향동,관악구,서울시 +신림동,관악구,서울시 +신사동,관악구,서울시 +서림동,관악구,서울시 +신원동,관악구,서울시 +서원동,관악구,서울시 +남현동,관악구,서울시 +인헌동,관악구,서울시 +중앙동,관악구,서울시 +낙성대동,관악구,서울시 +행운동,관악구,서울시 +청림동,관악구,서울시 +보라매동,관악구,서울시 +사당2동,동작구,서울시 +노량진1동,동작구,서울시 +흑석동,동작구,서울시 +신대방2동,동작구,서울시 +신대방1동,동작구,서울시 +대방동,동작구,서울시 +사당5동,동작구,서울시 +사당4동,동작구,서울시 +사당3동,동작구,서울시 +사당1동,동작구,서울시 +상도4동,동작구,서울시 +상도3동,동작구,서울시 +상도2동,동작구,서울시 +상도1동,동작구,서울시 +노량진2동,동작구,서울시 +문래동,영등포구,서울시 +도림동,영등포구,서울시 +영등포동,영등포구,서울시 +영등포본동,영등포구,서울시 +대림3동,영등포구,서울시 +대림2동,영등포구,서울시 +대림1동,영등포구,서울시 +신길7동,영등포구,서울시 +신길6동,영등포구,서울시 +신길5동,영등포구,서울시 +신길4동,영등포구,서울시 +신길3동,영등포구,서울시 +신길1동,영등포구,서울시 +양평2동,영등포구,서울시 +양평1동,영등포구,서울시 +당산2동,영등포구,서울시 +당산1동,영등포구,서울시 +여의동,영등포구,서울시 +시흥5동,금천구,서울시 +시흥4동,금천구,서울시 +시흥3동,금천구,서울시 +시흥2동,금천구,서울시 +시흥1동,금천구,서울시 +독산4동,금천구,서울시 +독산3동,금천구,서울시 +독산2동,금천구,서울시 +독산1동,금천구,서울시 +가산동,금천구,서울시 +개봉1동,구로구,서울시 +구로2동,구로구,서울시 +가리봉동,구로구,서울시 +수궁동,구로구,서울시 +오류2동,구로구,서울시 +오류1동,구로구,서울시 +개봉3동,구로구,서울시 +개봉2동,구로구,서울시 +고척2동,구로구,서울시 +고척1동,구로구,서울시 +구로5동,구로구,서울시 +구로4동,구로구,서울시 +구로3동,구로구,서울시 +구로1동,구로구,서울시 +신도림동,구로구,서울시 +우장산동,강서구,서울시 +화곡1동,강서구,서울시 +방화3동,강서구,서울시 +방화2동,강서구,서울시 +방화1동,강서구,서울시 +공항동,강서구,서울시 +발산1동,강서구,서울시 +가양3동,강서구,서울시 +가양2동,강서구,서울시 +가양1동,강서구,서울시 +화곡8동,강서구,서울시 +화곡6동,강서구,서울시 +화곡4동,강서구,서울시 +화곡3동,강서구,서울시 +화곡2동,강서구,서울시 +화곡본동,강서구,서울시 +등촌3동,강서구,서울시 +등촌2동,강서구,서울시 +등촌1동,강서구,서울시 +염창동,강서구,서울시 +신정4동,양천구,서울시 +목5동,양천구,서울시 +신정7동,양천구,서울시 +신정6동,양천구,서울시 +신정3동,양천구,서울시 +신정2동,양천구,서울시 +신정1동,양천구,서울시 +신월7동,양천구,서울시 +신월6동,양천구,서울시 +신월5동,양천구,서울시 +신월4동,양천구,서울시 +신월3동,양천구,서울시 +신월2동,양천구,서울시 +신월1동,양천구,서울시 +목4동,양천구,서울시 +목3동,양천구,서울시 +목2동,양천구,서울시 +목1동,양천구,서울시 +아현동,마포구,서울시 +공덕동,마포구,서울시 +서강동,마포구,서울시 +도화동,마포구,서울시 +상암동,마포구,서울시 +성산2동,마포구,서울시 +성산1동,마포구,서울시 +연남동,마포구,서울시 +망원2동,마포구,서울시 +망원1동,마포구,서울시 +합정동,마포구,서울시 +서교동,마포구,서울시 +신수동,마포구,서울시 +염리동,마포구,서울시 +대흥동,마포구,서울시 +용강동,마포구,서울시 +연희동,서대문구,서울시 +신촌동,서대문구,서울시 +북아현동,서대문구,서울시 +충현동,서대문구,서울시 +북가좌2동,서대문구,서울시 +북가좌1동,서대문구,서울시 +남가좌2동,서대문구,서울시 +남가좌1동,서대문구,서울시 +홍은2동,서대문구,서울시 +홍은1동,서대문구,서울시 +홍제2동,서대문구,서울시 +홍제3동,서대문구,서울시 +홍제1동,서대문구,서울시 +천연동,서대문구,서울시 +역촌동,은평구,서울시 +응암3동,은평구,서울시 +불광2동,은평구,서울시 +진관동,은평구,서울시 +수색동,은평구,서울시 +증산동,은평구,서울시 +신사2동,은평구,서울시 +신사1동,은평구,서울시 +응암2동,은평구,서울시 +응암1동,은평구,서울시 +대조동,은평구,서울시 +구산동,은평구,서울시 +갈현2동,은평구,서울시 +갈현1동,은평구,서울시 +불광1동,은평구,서울시 +녹번동,은평구,서울시 +릉1동,노원구,서울시 +계23동,노원구,서울시 +계67동,노원구,서울시 +계34동,노원구,서울시 +계10동,노원구,서울시 +계9동,노원구,서울시 +계8동,노원구,서울시 +계5동,노원구,서울시 +계2동,노원구,서울시 +계1동,노원구,서울시 +계4동,노원구,서울시 +계1동,노원구,서울시 +계본동,노원구,서울시 +계2동,노원구,서울시 +계1동,노원구,서울시 +릉2동,노원구,서울시 +계3동,노원구,서울시 +계2동,노원구,서울시 +계1동,노원구,서울시 +도봉2동,도봉구,서울시 +도봉1동,도봉구,서울시 +창5동,도봉구,서울시 +창4동,도봉구,서울시 +창3동,도봉구,서울시 +창2동,도봉구,서울시 +창1동,도봉구,서울시 +방학3동,도봉구,서울시 +방학2동,도봉구,서울시 +방학1동,도봉구,서울시 +쌍문4동,도봉구,서울시 +쌍문3동,도봉구,서울시 +쌍문2동,도봉구,서울시 +쌍문1동,도봉구,서울시 +인수동,강북구,서울시 +우이동,강북구,서울시 +삼각산동,강북구,서울시 +송천동,강북구,서울시 +송중동,강북구,서울시 +미아동,강북구,서울시 +삼양동,강북구,서울시 +수유3동,강북구,서울시 +수유2동,강북구,서울시 +수유1동,강북구,서울시 +번3동,강북구,서울시 +번2동,강북구,서울시 +번1동,강북구,서울시 +석관동,성북구,서울시 +종암동,성북구,서울시 +동선동,성북구,서울시 +삼선동,성북구,서울시 +성북동,성북구,서울시 +장위3동,성북구,서울시 +장위2동,성북구,서울시 +장위1동,성북구,서울시 +월곡2동,성북구,서울시 +월곡1동,성북구,서울시 +길음2동,성북구,서울시 +길음1동,성북구,서울시 +정릉4동,성북구,서울시 +정릉3동,성북구,서울시 +정릉2동,성북구,서울시 +정릉1동,성북구,서울시 +보문동,성북구,서울시 +안암동,성북구,서울시 +돈암2동,성북구,서울시 +돈암1동,성북구,서울시 +망우본동,중랑구,서울시 +면목38동,중랑구,서울시 +면목본동,중랑구,서울시 +신내2동,중랑구,서울시 +신내1동,중랑구,서울시 +망우3동,중랑구,서울시 +묵2동,중랑구,서울시 +묵1동,중랑구,서울시 +중화2동,중랑구,서울시 +중화1동,중랑구,서울시 +상봉2동,중랑구,서울시 +상봉1동,중랑구,서울시 +면목7동,중랑구,서울시 +면목5동,중랑구,서울시 +면목4동,중랑구,서울시 +면목2동,중랑구,서울시 +답십리1동,동대문구,서울시 +이문2동,동대문구,서울시 +이문1동,동대문구,서울시 +장안2동,동대문구,서울시 +장안1동,동대문구,서울시 +답십리2동,동대문구,서울시 +전농2동,동대문구,서울시 +전농1동,동대문구,서울시 +제기동,동대문구,서울시 +용신동,동대문구,서울시 +청량리동,동대문구,서울시 +휘경2동,동대문구,서울시 +휘경1동,동대문구,서울시 +회기동,동대문구,서울시 +자양4동,광진구,서울시 +자양3동,광진구,서울시 +자양2동,광진구,서울시 +자양1동,광진구,서울시 +광장동,광진구,서울시 +구의3동,광진구,서울시 +구의2동,광진구,서울시 +구의1동,광진구,서울시 +능동,광진구,서울시 +중곡4동,광진구,서울시 +중곡3동,광진구,서울시 +중곡2동,광진구,서울시 +중곡1동,광진구,서울시 +군자동,광진구,서울시 +화양동,광진구,서울시 +옥수동,성동구,서울시 +금호23가동,성동구,서울시 +왕십리도선동,성동구,서울시 +용답동,성동구,서울시 +송정동,성동구,서울시 +성수2가3동,성동구,서울시 +성수2가1동,성동구,서울시 +성수1가2동,성동구,서울시 +성수1가1동,성동구,서울시 +금호4가동,성동구,서울시 +금호1가동,성동구,서울시 +응봉동,성동구,서울시 +행당2동,성동구,서울시 +행당1동,성동구,서울시 +사근동,성동구,서울시 +마장동,성동구,서울시 +왕십리2동,성동구,서울시 +한남동,용산구,서울시 +한강로동,용산구,서울시 +원효로1동,용산구,서울시 +청파동,용산구,서울시 +보광동,용산구,서울시 +서빙고동,용산구,서울시 +이태원2동,용산구,서울시 +이태원1동,용산구,서울시 +이촌2동,용산구,서울시 +이촌1동,용산구,서울시 +용문동,용산구,서울시 +효창동,용산구,서울시 +원효로2동,용산구,서울시 +남영동,용산구,서울시 +용산2가동,용산구,서울시 +후암동,용산구,서울시 +동화동,중구,서울시 +청구동,중구,서울시 +약수동,중구,서울시 +다산동,중구,서울시 +신당동,중구,서울시 +중림동,중구,서울시 +황학동,중구,서울시 +신당5동,중구,서울시 +을지로동,중구,서울시 +광희동,중구,서울시 +장충동,중구,서울시 +필동,중구,서울시 +명동,중구,서울시 +회현동,중구,서울시 +소공동,중구,서울시 +혜화동,종로구,서울시 +청운효자동,종로구,서울시 +숭인2동,종로구,서울시 +숭인1동,종로구,서울시 +창신3동,종로구,서울시 +창신2동,종로구,서울시 +창신1동,종로구,서울시 +이화동,종로구,서울시 +종로56가동,종로구,서울시 +종로1234가동,종로구,서울시 +가회동,종로구,서울시 +교남동,종로구,서울시 +무악동,종로구,서울시 +평창동,종로구,서울시 +부암동,종로구,서울시 +삼청동,종로구,서울시 +사직동,종로구,서울시 diff --git a/back/src/db/seoulCityInfo.json b/back/src/db/seoulCityInfo.json new file mode 100644 index 0000000..81c4187 --- /dev/null +++ b/back/src/db/seoulCityInfo.json @@ -0,0 +1,2554 @@ +{ + "DESCRIPTION": { + "si_do": "서울시", + "gu": "자치구", + "dong": "행정동", + "ADMDONG_ID": "행정동_ID" + }, + "DATA": [ + { + "si_do": "서울시", + "gu": "강동구", + "dong": "길동", + "admdong_id": "1125074" + }, + { + "si_do": "서울시", + "gu": "강동구", + "dong": "천호2동", + "admdong_id": "1125073" + }, + { + "si_do": "서울시", + "gu": "강동구", + "dong": "암사1동", + "admdong_id": "1125072" + }, + { + "si_do": "서울시", + "gu": "강동구", + "dong": "둔촌2동", + "admdong_id": "1125071" + }, + { + "si_do": "서울시", + "gu": "강동구", + "dong": "둔촌1동", + "admdong_id": "1125070" + }, + { + "si_do": "서울시", + "gu": "강동구", + "dong": "성내3동", + "admdong_id": "1125067" + }, + { + "si_do": "서울시", + "gu": "강동구", + "dong": "성내2동", + "admdong_id": "1125066" + }, + { + "si_do": "서울시", + "gu": "강동구", + "dong": "성내1동", + "admdong_id": "1125065" + }, + { + "si_do": "서울시", + "gu": "강동구", + "dong": "천호3동", + "admdong_id": "1125063" + }, + { + "si_do": "서울시", + "gu": "강동구", + "dong": "천호1동", + "admdong_id": "1125061" + }, + { + "si_do": "서울시", + "gu": "강동구", + "dong": "암사3동", + "admdong_id": "1125059" + }, + { + "si_do": "서울시", + "gu": "강동구", + "dong": "암사2동", + "admdong_id": "1125058" + }, + { + "si_do": "서울시", + "gu": "강동구", + "dong": "고덕2동", + "admdong_id": "1125056" + }, + { + "si_do": "서울시", + "gu": "강동구", + "dong": "고덕1동", + "admdong_id": "1125055" + }, + { + "si_do": "서울시", + "gu": "강동구", + "dong": "명일2동", + "admdong_id": "1125054" + }, + { + "si_do": "서울시", + "gu": "강동구", + "dong": "명일1동", + "admdong_id": "1125053" + }, + { + "si_do": "서울시", + "gu": "강동구", + "dong": "상일동", + "admdong_id": "1125052" + }, + { + "si_do": "서울시", + "gu": "강동구", + "dong": "강일동", + "admdong_id": "1125051" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "위례동", + "admdong_id": "1124082" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "장지동", + "admdong_id": "1124081" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "잠실3동", + "admdong_id": "1124080" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "잠실2동", + "admdong_id": "1124079" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "잠실7동", + "admdong_id": "1124078" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "잠실6동", + "admdong_id": "1124077" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "잠실4동", + "admdong_id": "1124075" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "잠실본동", + "admdong_id": "1124071" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "문정2동", + "admdong_id": "1124069" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "문정1동", + "admdong_id": "1124068" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "가락2동", + "admdong_id": "1124067" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "가락1동", + "admdong_id": "1124066" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "가락본동", + "admdong_id": "1124065" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "삼전동", + "admdong_id": "1124064" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "석촌동", + "admdong_id": "1124063" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "송파2동", + "admdong_id": "1124062" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "송파1동", + "admdong_id": "1124061" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "오금동", + "admdong_id": "1124060" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "오륜동", + "admdong_id": "1124059" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "방이2동", + "admdong_id": "1124058" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "방이1동", + "admdong_id": "1124057" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "마천2동", + "admdong_id": "1124056" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "마천1동", + "admdong_id": "1124055" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "거여2동", + "admdong_id": "1124054" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "거여1동", + "admdong_id": "1124053" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "풍납2동", + "admdong_id": "1124052" + }, + { + "si_do": "서울시", + "gu": "송파구", + "dong": "풍납1동", + "admdong_id": "1124051" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "개포2동", + "admdong_id": "1123080" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "대치2동", + "admdong_id": "1123079" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "청담동", + "admdong_id": "1123078" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "압구정동", + "admdong_id": "1123077" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "세곡동", + "admdong_id": "1123076" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "수서동", + "admdong_id": "1123075" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "일원2동", + "admdong_id": "1123074" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "일원1동", + "admdong_id": "1123073" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "일원본동", + "admdong_id": "1123072" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "개포4동", + "admdong_id": "1123071" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "개포1동", + "admdong_id": "1123068" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "도곡2동", + "admdong_id": "1123067" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "도곡1동", + "admdong_id": "1123066" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "역삼2동", + "admdong_id": "1123065" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "역삼1동", + "admdong_id": "1123064" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "대치4동", + "admdong_id": "1123063" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "대치1동", + "admdong_id": "1123060" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "삼성2동", + "admdong_id": "1123059" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "삼성1동", + "admdong_id": "1123058" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "논현2동", + "admdong_id": "1123053" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "논현1동", + "admdong_id": "1123052" + }, + { + "si_do": "서울시", + "gu": "강남구", + "dong": "신사동", + "admdong_id": "1123051" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "내곡동", + "admdong_id": "1122068" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "양재2동", + "admdong_id": "1122067" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "양재1동", + "admdong_id": "1122066" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "방배4동", + "admdong_id": "1122065" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "방배3동", + "admdong_id": "1122064" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "방배2동", + "admdong_id": "1122063" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "방배1동", + "admdong_id": "1122062" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "방배본동", + "admdong_id": "1122061" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "반포4동", + "admdong_id": "1122060" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "반포3동", + "admdong_id": "1122059" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "반포2동", + "admdong_id": "1122058" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "반포1동", + "admdong_id": "1122057" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "반포본동", + "admdong_id": "1122056" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "잠원동", + "admdong_id": "1122055" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "서초4동", + "admdong_id": "1122054" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "서초3동", + "admdong_id": "1122053" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "서초2동", + "admdong_id": "1122052" + }, + { + "si_do": "서울시", + "gu": "서초구", + "dong": "서초1동", + "admdong_id": "1122051" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "미성동", + "admdong_id": "1121083" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "삼성동", + "admdong_id": "1121082" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "난곡동", + "admdong_id": "1121081" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "청룡동", + "admdong_id": "1121080" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "성현동", + "admdong_id": "1121079" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "은천동", + "admdong_id": "1121078" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "대학동", + "admdong_id": "1121073" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "조원동", + "admdong_id": "1121072" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "난향동", + "admdong_id": "1121071" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "신림동", + "admdong_id": "1121069" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "신사동", + "admdong_id": "1121068" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "서림동", + "admdong_id": "1121066" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "신원동", + "admdong_id": "1121065" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "서원동", + "admdong_id": "1121064" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "남현동", + "admdong_id": "1121063" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "인헌동", + "admdong_id": "1121062" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "중앙동", + "admdong_id": "1121061" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "낙성대동", + "admdong_id": "1121058" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "행운동", + "admdong_id": "1121057" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "청림동", + "admdong_id": "1121054" + }, + { + "si_do": "서울시", + "gu": "관악구", + "dong": "보라매동", + "admdong_id": "1121052" + }, + { + "si_do": "서울시", + "gu": "동작구", + "dong": "사당2동", + "admdong_id": "1120073" + }, + { + "si_do": "서울시", + "gu": "동작구", + "dong": "노량진1동", + "admdong_id": "1120072" + }, + { + "si_do": "서울시", + "gu": "동작구", + "dong": "흑석동", + "admdong_id": "1120071" + }, + { + "si_do": "서울시", + "gu": "동작구", + "dong": "신대방2동", + "admdong_id": "1120070" + }, + { + "si_do": "서울시", + "gu": "동작구", + "dong": "신대방1동", + "admdong_id": "1120069" + }, + { + "si_do": "서울시", + "gu": "동작구", + "dong": "대방동", + "admdong_id": "1120068" + }, + { + "si_do": "서울시", + "gu": "동작구", + "dong": "사당5동", + "admdong_id": "1120067" + }, + { + "si_do": "서울시", + "gu": "동작구", + "dong": "사당4동", + "admdong_id": "1120066" + }, + { + "si_do": "서울시", + "gu": "동작구", + "dong": "사당3동", + "admdong_id": "1120065" + }, + { + "si_do": "서울시", + "gu": "동작구", + "dong": "사당1동", + "admdong_id": "1120063" + }, + { + "si_do": "서울시", + "gu": "동작구", + "dong": "상도4동", + "admdong_id": "1120056" + }, + { + "si_do": "서울시", + "gu": "동작구", + "dong": "상도3동", + "admdong_id": "1120055" + }, + { + "si_do": "서울시", + "gu": "동작구", + "dong": "상도2동", + "admdong_id": "1120054" + }, + { + "si_do": "서울시", + "gu": "동작구", + "dong": "상도1동", + "admdong_id": "1120053" + }, + { + "si_do": "서울시", + "gu": "동작구", + "dong": "노량진2동", + "admdong_id": "1120052" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "문래동", + "admdong_id": "1119076" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "도림동", + "admdong_id": "1119075" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "영등포동", + "admdong_id": "1119074" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "영등포본동", + "admdong_id": "1119073" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "대림3동", + "admdong_id": "1119072" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "대림2동", + "admdong_id": "1119071" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "대림1동", + "admdong_id": "1119070" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "신길7동", + "admdong_id": "1119069" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "신길6동", + "admdong_id": "1119068" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "신길5동", + "admdong_id": "1119067" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "신길4동", + "admdong_id": "1119066" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "신길3동", + "admdong_id": "1119065" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "신길1동", + "admdong_id": "1119063" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "양평2동", + "admdong_id": "1119062" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "양평1동", + "admdong_id": "1119061" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "당산2동", + "admdong_id": "1119056" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "당산1동", + "admdong_id": "1119055" + }, + { + "si_do": "서울시", + "gu": "영등포구", + "dong": "여의동", + "admdong_id": "1119054" + }, + { + "si_do": "서울시", + "gu": "금천구", + "dong": "시흥5동", + "admdong_id": "1118061" + }, + { + "si_do": "서울시", + "gu": "금천구", + "dong": "시흥4동", + "admdong_id": "1118060" + }, + { + "si_do": "서울시", + "gu": "금천구", + "dong": "시흥3동", + "admdong_id": "1118059" + }, + { + "si_do": "서울시", + "gu": "금천구", + "dong": "시흥2동", + "admdong_id": "1118058" + }, + { + "si_do": "서울시", + "gu": "금천구", + "dong": "시흥1동", + "admdong_id": "1118057" + }, + { + "si_do": "서울시", + "gu": "금천구", + "dong": "독산4동", + "admdong_id": "1118055" + }, + { + "si_do": "서울시", + "gu": "금천구", + "dong": "독산3동", + "admdong_id": "1118054" + }, + { + "si_do": "서울시", + "gu": "금천구", + "dong": "독산2동", + "admdong_id": "1118053" + }, + { + "si_do": "서울시", + "gu": "금천구", + "dong": "독산1동", + "admdong_id": "1118052" + }, + { + "si_do": "서울시", + "gu": "금천구", + "dong": "가산동", + "admdong_id": "1118051" + }, + { + "si_do": "서울시", + "gu": "구로구", + "dong": "개봉1동", + "admdong_id": "1117072" + }, + { + "si_do": "서울시", + "gu": "구로구", + "dong": "구로2동", + "admdong_id": "1117071" + }, + { + "si_do": "서울시", + "gu": "구로구", + "dong": "가리봉동", + "admdong_id": "1117070" + }, + { + "si_do": "서울시", + "gu": "구로구", + "dong": "수궁동", + "admdong_id": "1117069" + }, + { + "si_do": "서울시", + "gu": "구로구", + "dong": "오류2동", + "admdong_id": "1117068" + }, + { + "si_do": "서울시", + "gu": "구로구", + "dong": "오류1동", + "admdong_id": "1117067" + }, + { + "si_do": "서울시", + "gu": "구로구", + "dong": "개봉3동", + "admdong_id": "1117065" + }, + { + "si_do": "서울시", + "gu": "구로구", + "dong": "개봉2동", + "admdong_id": "1117064" + }, + { + "si_do": "서울시", + "gu": "구로구", + "dong": "고척2동", + "admdong_id": "1117062" + }, + { + "si_do": "서울시", + "gu": "구로구", + "dong": "고척1동", + "admdong_id": "1117061" + }, + { + "si_do": "서울시", + "gu": "구로구", + "dong": "구로5동", + "admdong_id": "1117056" + }, + { + "si_do": "서울시", + "gu": "구로구", + "dong": "구로4동", + "admdong_id": "1117055" + }, + { + "si_do": "서울시", + "gu": "구로구", + "dong": "구로3동", + "admdong_id": "1117054" + }, + { + "si_do": "서울시", + "gu": "구로구", + "dong": "구로1동", + "admdong_id": "1117052" + }, + { + "si_do": "서울시", + "gu": "구로구", + "dong": "신도림동", + "admdong_id": "1117051" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "우장산동", + "admdong_id": "1116074" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "화곡1동", + "admdong_id": "1116073" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "방화3동", + "admdong_id": "1116072" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "방화2동", + "admdong_id": "1116071" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "방화1동", + "admdong_id": "1116070" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "공항동", + "admdong_id": "1116069" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "발산1동", + "admdong_id": "1116067" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "가양3동", + "admdong_id": "1116066" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "가양2동", + "admdong_id": "1116065" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "가양1동", + "admdong_id": "1116064" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "화곡8동", + "admdong_id": "1116063" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "화곡6동", + "admdong_id": "1116061" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "화곡4동", + "admdong_id": "1116059" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "화곡3동", + "admdong_id": "1116058" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "화곡2동", + "admdong_id": "1116057" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "화곡본동", + "admdong_id": "1116055" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "등촌3동", + "admdong_id": "1116054" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "등촌2동", + "admdong_id": "1116053" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "등촌1동", + "admdong_id": "1116052" + }, + { + "si_do": "서울시", + "gu": "강서구", + "dong": "염창동", + "admdong_id": "1116051" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "신정4동", + "admdong_id": "1115072" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "목5동", + "admdong_id": "1115071" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "신정7동", + "admdong_id": "1115070" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "신정6동", + "admdong_id": "1115069" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "신정3동", + "admdong_id": "1115066" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "신정2동", + "admdong_id": "1115065" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "신정1동", + "admdong_id": "1115064" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "신월7동", + "admdong_id": "1115063" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "신월6동", + "admdong_id": "1115062" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "신월5동", + "admdong_id": "1115061" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "신월4동", + "admdong_id": "1115060" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "신월3동", + "admdong_id": "1115059" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "신월2동", + "admdong_id": "1115058" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "신월1동", + "admdong_id": "1115057" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "목4동", + "admdong_id": "1115054" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "목3동", + "admdong_id": "1115053" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "목2동", + "admdong_id": "1115052" + }, + { + "si_do": "서울시", + "gu": "양천구", + "dong": "목1동", + "admdong_id": "1115051" + }, + { + "si_do": "서울시", + "gu": "마포구", + "dong": "아현동", + "admdong_id": "1114078" + }, + { + "si_do": "서울시", + "gu": "마포구", + "dong": "공덕동", + "admdong_id": "1114077" + }, + { + "si_do": "서울시", + "gu": "마포구", + "dong": "서강동", + "admdong_id": "1114076" + }, + { + "si_do": "서울시", + "gu": "마포구", + "dong": "도화동", + "admdong_id": "1114075" + }, + { + "si_do": "서울시", + "gu": "마포구", + "dong": "상암동", + "admdong_id": "1114074" + }, + { + "si_do": "서울시", + "gu": "마포구", + "dong": "성산2동", + "admdong_id": "1114073" + }, + { + "si_do": "서울시", + "gu": "마포구", + "dong": "성산1동", + "admdong_id": "1114072" + }, + { + "si_do": "서울시", + "gu": "마포구", + "dong": "연남동", + "admdong_id": "1114071" + }, + { + "si_do": "서울시", + "gu": "마포구", + "dong": "망원2동", + "admdong_id": "1114070" + }, + { + "si_do": "서울시", + "gu": "마포구", + "dong": "망원1동", + "admdong_id": "1114069" + }, + { + "si_do": "서울시", + "gu": "마포구", + "dong": "합정동", + "admdong_id": "1114068" + }, + { + "si_do": "서울시", + "gu": "마포구", + "dong": "서교동", + "admdong_id": "1114066" + }, + { + "si_do": "서울시", + "gu": "마포구", + "dong": "신수동", + "admdong_id": "1114063" + }, + { + "si_do": "서울시", + "gu": "마포구", + "dong": "염리동", + "admdong_id": "1114061" + }, + { + "si_do": "서울시", + "gu": "마포구", + "dong": "대흥동", + "admdong_id": "1114060" + }, + { + "si_do": "서울시", + "gu": "마포구", + "dong": "용강동", + "admdong_id": "1114059" + }, + { + "si_do": "서울시", + "gu": "서대문구", + "dong": "연희동", + "admdong_id": "1113076" + }, + { + "si_do": "서울시", + "gu": "서대문구", + "dong": "신촌동", + "admdong_id": "1113075" + }, + { + "si_do": "서울시", + "gu": "서대문구", + "dong": "북아현동", + "admdong_id": "1113074" + }, + { + "si_do": "서울시", + "gu": "서대문구", + "dong": "충현동", + "admdong_id": "1113073" + }, + { + "si_do": "서울시", + "gu": "서대문구", + "dong": "북가좌2동", + "admdong_id": "1113072" + }, + { + "si_do": "서울시", + "gu": "서대문구", + "dong": "북가좌1동", + "admdong_id": "1113071" + }, + { + "si_do": "서울시", + "gu": "서대문구", + "dong": "남가좌2동", + "admdong_id": "1113070" + }, + { + "si_do": "서울시", + "gu": "서대문구", + "dong": "남가좌1동", + "admdong_id": "1113069" + }, + { + "si_do": "서울시", + "gu": "서대문구", + "dong": "홍은2동", + "admdong_id": "1113068" + }, + { + "si_do": "서울시", + "gu": "서대문구", + "dong": "홍은1동", + "admdong_id": "1113066" + }, + { + "si_do": "서울시", + "gu": "서대문구", + "dong": "홍제2동", + "admdong_id": "1113065" + }, + { + "si_do": "서울시", + "gu": "서대문구", + "dong": "홍제3동", + "admdong_id": "1113064" + }, + { + "si_do": "서울시", + "gu": "서대문구", + "dong": "홍제1동", + "admdong_id": "1113062" + }, + { + "si_do": "서울시", + "gu": "서대문구", + "dong": "천연동", + "admdong_id": "1113052" + }, + { + "si_do": "서울시", + "gu": "은평구", + "dong": "역촌동", + "admdong_id": "1112074" + }, + { + "si_do": "서울시", + "gu": "은평구", + "dong": "응암3동", + "admdong_id": "1112073" + }, + { + "si_do": "서울시", + "gu": "은평구", + "dong": "불광2동", + "admdong_id": "1112072" + }, + { + "si_do": "서울시", + "gu": "은평구", + "dong": "진관동", + "admdong_id": "1112071" + }, + { + "si_do": "서울시", + "gu": "은평구", + "dong": "수색동", + "admdong_id": "1112068" + }, + { + "si_do": "서울시", + "gu": "은평구", + "dong": "증산동", + "admdong_id": "1112067" + }, + { + "si_do": "서울시", + "gu": "은평구", + "dong": "신사2동", + "admdong_id": "1112066" + }, + { + "si_do": "서울시", + "gu": "은평구", + "dong": "신사1동", + "admdong_id": "1112065" + }, + { + "si_do": "서울시", + "gu": "은평구", + "dong": "응암2동", + "admdong_id": "1112060" + }, + { + "si_do": "서울시", + "gu": "은평구", + "dong": "응암1동", + "admdong_id": "1112059" + }, + { + "si_do": "서울시", + "gu": "은평구", + "dong": "대조동", + "admdong_id": "1112058" + }, + { + "si_do": "서울시", + "gu": "은평구", + "dong": "구산동", + "admdong_id": "1112057" + }, + { + "si_do": "서울시", + "gu": "은평구", + "dong": "갈현2동", + "admdong_id": "1112056" + }, + { + "si_do": "서울시", + "gu": "은평구", + "dong": "갈현1동", + "admdong_id": "1112055" + }, + { + "si_do": "서울시", + "gu": "은평구", + "dong": "불광1동", + "admdong_id": "1112052" + }, + { + "si_do": "서울시", + "gu": "은평구", + "dong": "녹번동", + "admdong_id": "1112051" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "공릉1동", + "admdong_id": "1111079" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "중계2,3동", + "admdong_id": "1111078" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "상계6,7동", + "admdong_id": "1111077" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "상계3,4동", + "admdong_id": "1111076" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "상계10동", + "admdong_id": "1111074" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "상계9동", + "admdong_id": "1111073" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "상계8동", + "admdong_id": "1111072" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "상계5동", + "admdong_id": "1111069" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "상계2동", + "admdong_id": "1111066" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "상계1동", + "admdong_id": "1111065" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "중계4동", + "admdong_id": "1111064" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "중계1동", + "admdong_id": "1111061" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "중계본동", + "admdong_id": "1111060" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "하계2동", + "admdong_id": "1111059" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "하계1동", + "admdong_id": "1111058" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "공릉2동", + "admdong_id": "1111056" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "월계3동", + "admdong_id": "1111053" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "월계2동", + "admdong_id": "1111052" + }, + { + "si_do": "서울시", + "gu": "노원구", + "dong": "월계1동", + "admdong_id": "1111051" + }, + { + "si_do": "서울시", + "gu": "도봉구", + "dong": "도봉2동", + "admdong_id": "1110065" + }, + { + "si_do": "서울시", + "gu": "도봉구", + "dong": "도봉1동", + "admdong_id": "1110064" + }, + { + "si_do": "서울시", + "gu": "도봉구", + "dong": "창5동", + "admdong_id": "1110063" + }, + { + "si_do": "서울시", + "gu": "도봉구", + "dong": "창4동", + "admdong_id": "1110062" + }, + { + "si_do": "서울시", + "gu": "도봉구", + "dong": "창3동", + "admdong_id": "1110061" + }, + { + "si_do": "서울시", + "gu": "도봉구", + "dong": "창2동", + "admdong_id": "1110060" + }, + { + "si_do": "서울시", + "gu": "도봉구", + "dong": "창1동", + "admdong_id": "1110059" + }, + { + "si_do": "서울시", + "gu": "도봉구", + "dong": "방학3동", + "admdong_id": "1110057" + }, + { + "si_do": "서울시", + "gu": "도봉구", + "dong": "방학2동", + "admdong_id": "1110056" + }, + { + "si_do": "서울시", + "gu": "도봉구", + "dong": "방학1동", + "admdong_id": "1110055" + }, + { + "si_do": "서울시", + "gu": "도봉구", + "dong": "쌍문4동", + "admdong_id": "1110054" + }, + { + "si_do": "서울시", + "gu": "도봉구", + "dong": "쌍문3동", + "admdong_id": "1110053" + }, + { + "si_do": "서울시", + "gu": "도봉구", + "dong": "쌍문2동", + "admdong_id": "1110052" + }, + { + "si_do": "서울시", + "gu": "도봉구", + "dong": "쌍문1동", + "admdong_id": "1110051" + }, + { + "si_do": "서울시", + "gu": "강북구", + "dong": "인수동", + "admdong_id": "1109075" + }, + { + "si_do": "서울시", + "gu": "강북구", + "dong": "우이동", + "admdong_id": "1109074" + }, + { + "si_do": "서울시", + "gu": "강북구", + "dong": "삼각산동", + "admdong_id": "1109073" + }, + { + "si_do": "서울시", + "gu": "강북구", + "dong": "송천동", + "admdong_id": "1109072" + }, + { + "si_do": "서울시", + "gu": "강북구", + "dong": "송중동", + "admdong_id": "1109071" + }, + { + "si_do": "서울시", + "gu": "강북구", + "dong": "미아동", + "admdong_id": "1109070" + }, + { + "si_do": "서울시", + "gu": "강북구", + "dong": "삼양동", + "admdong_id": "1109069" + }, + { + "si_do": "서울시", + "gu": "강북구", + "dong": "수유3동", + "admdong_id": "1109065" + }, + { + "si_do": "서울시", + "gu": "강북구", + "dong": "수유2동", + "admdong_id": "1109064" + }, + { + "si_do": "서울시", + "gu": "강북구", + "dong": "수유1동", + "admdong_id": "1109063" + }, + { + "si_do": "서울시", + "gu": "강북구", + "dong": "번3동", + "admdong_id": "1109062" + }, + { + "si_do": "서울시", + "gu": "강북구", + "dong": "번2동", + "admdong_id": "1109061" + }, + { + "si_do": "서울시", + "gu": "강북구", + "dong": "번1동", + "admdong_id": "1109060" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "석관동", + "admdong_id": "1108085" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "종암동", + "admdong_id": "1108084" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "동선동", + "admdong_id": "1108083" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "삼선동", + "admdong_id": "1108082" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "성북동", + "admdong_id": "1108081" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "장위3동", + "admdong_id": "1108078" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "장위2동", + "admdong_id": "1108077" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "장위1동", + "admdong_id": "1108076" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "월곡2동", + "admdong_id": "1108072" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "월곡1동", + "admdong_id": "1108071" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "길음2동", + "admdong_id": "1108068" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "길음1동", + "admdong_id": "1108066" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "정릉4동", + "admdong_id": "1108065" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "정릉3동", + "admdong_id": "1108064" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "정릉2동", + "admdong_id": "1108063" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "정릉1동", + "admdong_id": "1108062" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "보문동", + "admdong_id": "1108061" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "안암동", + "admdong_id": "1108060" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "돈암2동", + "admdong_id": "1108059" + }, + { + "si_do": "서울시", + "gu": "성북구", + "dong": "돈암1동", + "admdong_id": "1108058" + }, + { + "si_do": "서울시", + "gu": "중랑구", + "dong": "망우본동", + "admdong_id": "1107073" + }, + { + "si_do": "서울시", + "gu": "중랑구", + "dong": "면목3,8동", + "admdong_id": "1107072" + }, + { + "si_do": "서울시", + "gu": "중랑구", + "dong": "면목본동", + "admdong_id": "1107071" + }, + { + "si_do": "서울시", + "gu": "중랑구", + "dong": "신내2동", + "admdong_id": "1107070" + }, + { + "si_do": "서울시", + "gu": "중랑구", + "dong": "신내1동", + "admdong_id": "1107069" + }, + { + "si_do": "서울시", + "gu": "중랑구", + "dong": "망우3동", + "admdong_id": "1107068" + }, + { + "si_do": "서울시", + "gu": "중랑구", + "dong": "묵2동", + "admdong_id": "1107065" + }, + { + "si_do": "서울시", + "gu": "중랑구", + "dong": "묵1동", + "admdong_id": "1107064" + }, + { + "si_do": "서울시", + "gu": "중랑구", + "dong": "중화2동", + "admdong_id": "1107062" + }, + { + "si_do": "서울시", + "gu": "중랑구", + "dong": "중화1동", + "admdong_id": "1107061" + }, + { + "si_do": "서울시", + "gu": "중랑구", + "dong": "상봉2동", + "admdong_id": "1107060" + }, + { + "si_do": "서울시", + "gu": "중랑구", + "dong": "상봉1동", + "admdong_id": "1107059" + }, + { + "si_do": "서울시", + "gu": "중랑구", + "dong": "면목7동", + "admdong_id": "1107057" + }, + { + "si_do": "서울시", + "gu": "중랑구", + "dong": "면목5동", + "admdong_id": "1107055" + }, + { + "si_do": "서울시", + "gu": "중랑구", + "dong": "면목4동", + "admdong_id": "1107054" + }, + { + "si_do": "서울시", + "gu": "중랑구", + "dong": "면목2동", + "admdong_id": "1107052" + }, + { + "si_do": "서울시", + "gu": "동대문구", + "dong": "답십리1동", + "admdong_id": "1106091" + }, + { + "si_do": "서울시", + "gu": "동대문구", + "dong": "이문2동", + "admdong_id": "1106090" + }, + { + "si_do": "서울시", + "gu": "동대문구", + "dong": "이문1동", + "admdong_id": "1106089" + }, + { + "si_do": "서울시", + "gu": "동대문구", + "dong": "장안2동", + "admdong_id": "1106088" + }, + { + "si_do": "서울시", + "gu": "동대문구", + "dong": "장안1동", + "admdong_id": "1106087" + }, + { + "si_do": "서울시", + "gu": "동대문구", + "dong": "답십리2동", + "admdong_id": "1106086" + }, + { + "si_do": "서울시", + "gu": "동대문구", + "dong": "전농2동", + "admdong_id": "1106084" + }, + { + "si_do": "서울시", + "gu": "동대문구", + "dong": "전농1동", + "admdong_id": "1106083" + }, + { + "si_do": "서울시", + "gu": "동대문구", + "dong": "제기동", + "admdong_id": "1106082" + }, + { + "si_do": "서울시", + "gu": "동대문구", + "dong": "용신동", + "admdong_id": "1106081" + }, + { + "si_do": "서울시", + "gu": "동대문구", + "dong": "청량리동", + "admdong_id": "1106080" + }, + { + "si_do": "서울시", + "gu": "동대문구", + "dong": "휘경2동", + "admdong_id": "1106073" + }, + { + "si_do": "서울시", + "gu": "동대문구", + "dong": "휘경1동", + "admdong_id": "1106072" + }, + { + "si_do": "서울시", + "gu": "동대문구", + "dong": "회기동", + "admdong_id": "1106071" + }, + { + "si_do": "서울시", + "gu": "광진구", + "dong": "자양4동", + "admdong_id": "1105067" + }, + { + "si_do": "서울시", + "gu": "광진구", + "dong": "자양3동", + "admdong_id": "1105066" + }, + { + "si_do": "서울시", + "gu": "광진구", + "dong": "자양2동", + "admdong_id": "1105065" + }, + { + "si_do": "서울시", + "gu": "광진구", + "dong": "자양1동", + "admdong_id": "1105064" + }, + { + "si_do": "서울시", + "gu": "광진구", + "dong": "광장동", + "admdong_id": "1105063" + }, + { + "si_do": "서울시", + "gu": "광진구", + "dong": "구의3동", + "admdong_id": "1105062" + }, + { + "si_do": "서울시", + "gu": "광진구", + "dong": "구의2동", + "admdong_id": "1105061" + }, + { + "si_do": "서울시", + "gu": "광진구", + "dong": "구의1동", + "admdong_id": "1105060" + }, + { + "si_do": "서울시", + "gu": "광진구", + "dong": "능동", + "admdong_id": "1105059" + }, + { + "si_do": "서울시", + "gu": "광진구", + "dong": "중곡4동", + "admdong_id": "1105058" + }, + { + "si_do": "서울시", + "gu": "광진구", + "dong": "중곡3동", + "admdong_id": "1105057" + }, + { + "si_do": "서울시", + "gu": "광진구", + "dong": "중곡2동", + "admdong_id": "1105056" + }, + { + "si_do": "서울시", + "gu": "광진구", + "dong": "중곡1동", + "admdong_id": "1105055" + }, + { + "si_do": "서울시", + "gu": "광진구", + "dong": "군자동", + "admdong_id": "1105054" + }, + { + "si_do": "서울시", + "gu": "광진구", + "dong": "화양동", + "admdong_id": "1105053" + }, + { + "si_do": "서울시", + "gu": "성동구", + "dong": "옥수동", + "admdong_id": "1104073" + }, + { + "si_do": "서울시", + "gu": "성동구", + "dong": "금호2,3가동", + "admdong_id": "1104072" + }, + { + "si_do": "서울시", + "gu": "성동구", + "dong": "왕십리도선동", + "admdong_id": "1104071" + }, + { + "si_do": "서울시", + "gu": "성동구", + "dong": "용답동", + "admdong_id": "1104070" + }, + { + "si_do": "서울시", + "gu": "성동구", + "dong": "송정동", + "admdong_id": "1104069" + }, + { + "si_do": "서울시", + "gu": "성동구", + "dong": "성수2가3동", + "admdong_id": "1104068" + }, + { + "si_do": "서울시", + "gu": "성동구", + "dong": "성수2가1동", + "admdong_id": "1104067" + }, + { + "si_do": "서울시", + "gu": "성동구", + "dong": "성수1가2동", + "admdong_id": "1104066" + }, + { + "si_do": "서울시", + "gu": "성동구", + "dong": "성수1가1동", + "admdong_id": "1104065" + }, + { + "si_do": "서울시", + "gu": "성동구", + "dong": "금호4가동", + "admdong_id": "1104062" + }, + { + "si_do": "서울시", + "gu": "성동구", + "dong": "금호1가동", + "admdong_id": "1104059" + }, + { + "si_do": "서울시", + "gu": "성동구", + "dong": "응봉동", + "admdong_id": "1104058" + }, + { + "si_do": "서울시", + "gu": "성동구", + "dong": "행당2동", + "admdong_id": "1104057" + }, + { + "si_do": "서울시", + "gu": "성동구", + "dong": "행당1동", + "admdong_id": "1104056" + }, + { + "si_do": "서울시", + "gu": "성동구", + "dong": "사근동", + "admdong_id": "1104055" + }, + { + "si_do": "서울시", + "gu": "성동구", + "dong": "마장동", + "admdong_id": "1104054" + }, + { + "si_do": "서울시", + "gu": "성동구", + "dong": "왕십리2동", + "admdong_id": "1104052" + }, + { + "si_do": "서울시", + "gu": "용산구", + "dong": "한남동", + "admdong_id": "1103074" + }, + { + "si_do": "서울시", + "gu": "용산구", + "dong": "한강로동", + "admdong_id": "1103073" + }, + { + "si_do": "서울시", + "gu": "용산구", + "dong": "원효로1동", + "admdong_id": "1103072" + }, + { + "si_do": "서울시", + "gu": "용산구", + "dong": "청파동", + "admdong_id": "1103071" + }, + { + "si_do": "서울시", + "gu": "용산구", + "dong": "보광동", + "admdong_id": "1103070" + }, + { + "si_do": "서울시", + "gu": "용산구", + "dong": "서빙고동", + "admdong_id": "1103069" + }, + { + "si_do": "서울시", + "gu": "용산구", + "dong": "이태원2동", + "admdong_id": "1103066" + }, + { + "si_do": "서울시", + "gu": "용산구", + "dong": "이태원1동", + "admdong_id": "1103065" + }, + { + "si_do": "서울시", + "gu": "용산구", + "dong": "이촌2동", + "admdong_id": "1103064" + }, + { + "si_do": "서울시", + "gu": "용산구", + "dong": "이촌1동", + "admdong_id": "1103063" + }, + { + "si_do": "서울시", + "gu": "용산구", + "dong": "용문동", + "admdong_id": "1103059" + }, + { + "si_do": "서울시", + "gu": "용산구", + "dong": "효창동", + "admdong_id": "1103058" + }, + { + "si_do": "서울시", + "gu": "용산구", + "dong": "원효로2동", + "admdong_id": "1103057" + }, + { + "si_do": "서울시", + "gu": "용산구", + "dong": "남영동", + "admdong_id": "1103053" + }, + { + "si_do": "서울시", + "gu": "용산구", + "dong": "용산2가동", + "admdong_id": "1103052" + }, + { + "si_do": "서울시", + "gu": "용산구", + "dong": "후암동", + "admdong_id": "1103051" + }, + { + "si_do": "서울시", + "gu": "중구", + "dong": "동화동", + "admdong_id": "1102073" + }, + { + "si_do": "서울시", + "gu": "중구", + "dong": "청구동", + "admdong_id": "1102072" + }, + { + "si_do": "서울시", + "gu": "중구", + "dong": "약수동", + "admdong_id": "1102071" + }, + { + "si_do": "서울시", + "gu": "중구", + "dong": "다산동", + "admdong_id": "1102070" + }, + { + "si_do": "서울시", + "gu": "중구", + "dong": "신당동", + "admdong_id": "1102069" + }, + { + "si_do": "서울시", + "gu": "중구", + "dong": "중림동", + "admdong_id": "1102068" + }, + { + "si_do": "서울시", + "gu": "중구", + "dong": "황학동", + "admdong_id": "1102067" + }, + { + "si_do": "서울시", + "gu": "중구", + "dong": "신당5동", + "admdong_id": "1102065" + }, + { + "si_do": "서울시", + "gu": "중구", + "dong": "을지로동", + "admdong_id": "1102060" + }, + { + "si_do": "서울시", + "gu": "중구", + "dong": "광희동", + "admdong_id": "1102059" + }, + { + "si_do": "서울시", + "gu": "중구", + "dong": "장충동", + "admdong_id": "1102058" + }, + { + "si_do": "서울시", + "gu": "중구", + "dong": "필동", + "admdong_id": "1102057" + }, + { + "si_do": "서울시", + "gu": "중구", + "dong": "명동", + "admdong_id": "1102055" + }, + { + "si_do": "서울시", + "gu": "중구", + "dong": "회현동", + "admdong_id": "1102054" + }, + { + "si_do": "서울시", + "gu": "중구", + "dong": "소공동", + "admdong_id": "1102052" + }, + { + "si_do": "서울시", + "gu": "종로구", + "dong": "혜화동", + "admdong_id": "1101073" + }, + { + "si_do": "서울시", + "gu": "종로구", + "dong": "청운효자동", + "admdong_id": "1101072" + }, + { + "si_do": "서울시", + "gu": "종로구", + "dong": "숭인2동", + "admdong_id": "1101071" + }, + { + "si_do": "서울시", + "gu": "종로구", + "dong": "숭인1동", + "admdong_id": "1101070" + }, + { + "si_do": "서울시", + "gu": "종로구", + "dong": "창신3동", + "admdong_id": "1101069" + }, + { + "si_do": "서울시", + "gu": "종로구", + "dong": "창신2동", + "admdong_id": "1101068" + }, + { + "si_do": "서울시", + "gu": "종로구", + "dong": "창신1동", + "admdong_id": "1101067" + }, + { + "si_do": "서울시", + "gu": "종로구", + "dong": "이화동", + "admdong_id": "1101064" + }, + { + "si_do": "서울시", + "gu": "종로구", + "dong": "종로5,6가동", + "admdong_id": "1101063" + }, + { + "si_do": "서울시", + "gu": "종로구", + "dong": "종로1,2,3,4가동", + "admdong_id": "1101061" + }, + { + "si_do": "서울시", + "gu": "종로구", + "dong": "가회동", + "admdong_id": "1101060" + }, + { + "si_do": "서울시", + "gu": "종로구", + "dong": "교남동", + "admdong_id": "1101058" + }, + { + "si_do": "서울시", + "gu": "종로구", + "dong": "무악동", + "admdong_id": "1101057" + }, + { + "si_do": "서울시", + "gu": "종로구", + "dong": "평창동", + "admdong_id": "1101056" + }, + { + "si_do": "서울시", + "gu": "종로구", + "dong": "부암동", + "admdong_id": "1101055" + }, + { + "si_do": "서울시", + "gu": "종로구", + "dong": "삼청동", + "admdong_id": "1101054" + }, + { + "si_do": "서울시", + "gu": "종로구", + "dong": "사직동", + "admdong_id": "1101053" + } + ] +} diff --git a/back/src/middlewares/errorMiddleware.js b/back/src/middlewares/errorMiddleware.js new file mode 100644 index 0000000..f110d32 --- /dev/null +++ b/back/src/middlewares/errorMiddleware.js @@ -0,0 +1,9 @@ +// reference: +// 1차 프로젝트 파일 +function errorMiddleware(error, req, res, next) { + console.log("\x1b[33m%s\x1b[0m", error); // 정규식은 한번 해석해봐야함 + res.status(400).send(error.message); +} + +// export { errorMiddleware }; +module.exports = errorMiddleware; diff --git a/back/src/middlewares/image_upload.js b/back/src/middlewares/image_upload.js new file mode 100644 index 0000000..ad5959e --- /dev/null +++ b/back/src/middlewares/image_upload.js @@ -0,0 +1,36 @@ +const multer = require("multer"); +// const path = require("path"); + +// const upload = multer({ +// storage: multer.diskStorage({ +// //파일이 저장될 경로 +// destination(req, file, callback) { +// callback(null, "uploads/"); +// }, +// //같은 이름의 이미지 중복 업로드시 오류 발생을 피하기 위하여, 파일명을 유일하게 만들어 줌 + +// filename(req, file, callback) { +// const ext = path.extname(file.originalname); + +// const timestamp = new Date().getTime().valueOf(); +// const filename = path.basename(file.originalname, ext) + timestamp + ext; +// callback(null, filename); +// }, +// }), +// }); + +const storage = multer.diskStorage({ + destination: function (req, file, cb) { + cb(null, "uploads/"); + }, + filename: function (req, file, cb) { + const originalname = file.originalname.split("."); + const ext = originalname[originalname.length - 1]; + const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9); + cb(null, file.fieldname + "-" + uniqueSuffix + "." + ext); + }, +}); + +const upload = multer({ storage: storage }); + +module.exports = upload; diff --git a/back/src/middlewares/login_required.js b/back/src/middlewares/login_required.js new file mode 100644 index 0000000..85bbfd5 --- /dev/null +++ b/back/src/middlewares/login_required.js @@ -0,0 +1,34 @@ +const jwt = require("jsonwebtoken"); + +const login_required = async function (req, res, next) { + // request 헤더로부터 authorization bearer 토큰을 받음. + const userToken = req.headers["authorization"]?.split(" ")[1] ?? "null"; + // 이 토큰은 jwt 토큰 문자열이거나, 혹은 "null" 문자열임. + // 토큰이 "null" 일 경우, login_required 가 필요한 서비스 사용을 제한함. + if (userToken === "null") { + console.log("서비스 사용 요청이 있습니다.하지만, Authorization 토큰: 없음"); + res.status(400).json({ + result: false, + errorMessage: "로그인한 유저만 사용할 수 있는 서비스입니다.", + errorCause: "token", + }); + return; + } + + // 해당 token 이 정상적인 token인지 확인 -> 토큰에 담긴 user_id 정보 추출 + try { + const secretKey = process.env.JWT_SECRET_KEY || "secret-key"; + const jwtDecoded = jwt.verify(userToken, secretKey); + const user_id = jwtDecoded.user_id; + req.user_id = user_id; + next(); + } catch (error) { + res.status(400).json({ + result: false, + errorMessage: "정상적인 토큰이 아닙니다. 다시 한 번 확인해 주세요.", + errorCause: "token", + }); + } +}; + +module.exports = login_required; diff --git a/back/src/routers/introRouter.js b/back/src/routers/introRouter.js new file mode 100644 index 0000000..91b38f4 --- /dev/null +++ b/back/src/routers/introRouter.js @@ -0,0 +1,44 @@ +const express = require("express"); +const { readFileSync } = require("fs"); +const path = require("path"); +const asyncHandler = require("express-async-handler"); +const introRouter = express.Router(); + +// GET: 소개 페이지의 쓰레기 배출량 증가 데이터, 연령대별 환경관심정도 데이터, 친환경적 태도 및 생활 습관 실천의 어려움 데이터 +file_name = ["1996to2020_trashData_tonPerDay.csv", "국민환경의식조사원자료.csv", "친환경적습관실천어려움.csv"] +// GET: +const introData = async (req, res, next) => { + try { + const intro = req.params.intro -1; + const file = file_name[intro]; + const csvPath = path.join(__dirname, "..", "data", file); + const csv = readFileSync(csvPath, "utf-8"); + // 문자열을 줄바꿈으로 구분 => 배열에 저장 + const rows = csv.split("\r\n"); + // 빈 배열 생성: CSV의 각 행을 담을 JSON 객체임 + const jsonArray = []; + // 제목 행 추출 후, 콤마로 구분 => 배열에 저장 + const header = rows[0].split(","); + // 내용 행 전체를 객체로 만들어, jsonArray에 담기 + for (let i = 1; i < rows.length; i++) { + // 빈 객체 생성: 각 내용 행을 객체로 만들어 담아둘 객체임 + let obj = {}; + // 각 내용 행을 콤마로 구분 + let row = rows[i].split(","); + // 각 내용행을 {제목1:내용1, 제목2:내용2, ...} 형태의 객체로 생성 + for (let j = 0; j < header.length; j++) { + obj[header[j]] = row[j]; + } + // 각 내용 행의 객체를 jsonArray배열에 담기 + jsonArray.push(obj); + } + res.status(200).json(jsonArray); + } catch (err) { + next(err); + } +}; + +introRouter.get("/intro/:intro", asyncHandler(introData)); + + +module.exports = introRouter; diff --git a/back/src/routers/mapRouter.js b/back/src/routers/mapRouter.js new file mode 100644 index 0000000..3bf5631 --- /dev/null +++ b/back/src/routers/mapRouter.js @@ -0,0 +1,253 @@ +const express = require("express"); +const { pool } = require("../db/database"); +const asyncHandler = require("express-async-handler"); + +const mapRouter = express.Router(); +///////////////////////////////////// +// y| A (x1, y1) B (x2, y1') +// | *------------------------* +// | | | +// | | | +// | | | +// | | | +// | | | +// | | D (x1', y2) | C (x2', y2') +// | *------------------------* +// |______________________________ +// x +// 가정 1. 위도(y축), 경도(x축)가 지도프레임의 축과 일치하지 않는다. +// 해결책 1. kakao map api 기능중 표시영역(모서리 4곳) 정보를 위도경도로 알려주는 '영역 변경 이벤트 등록하기'를 활용하여 sql 쿼리문을 작성한다. +// kakao maps api: https://apis.map.kakao.com/web/sample/addMapBoundsChangedEvent/ +// 해결책 1. 수도코드 +// 알고리즘 => 상점의 좌표 S를 각 선과 비교하여 사각형 안에 있는지 확인한다. +function checkStore(A, B, C, D, S, res) { + // 2차 커널: 1차는 러프한 필터링이었다면, 2차는 정밀 + const A = req.body.A위도경도json; // 위도 = y, 경도 = x + const B = req.body.B위도경도json; + const C = req.body.C위도경도json; + const D = req.body.D위도경도json; + const S = req.body.S위도경도json; + ///// if (x축 기준, A좌표가 D좌표와 같을 때) //// . ! == no need to compare + // 1) S(x) ! LineAB(x), S(y) < LineAB + // 2) S(x) > LineAD(x), S(y) ! LineAD + // 3) S(x) < LineBC(x), S(y) ! LineBC + // 4) S(x) ! LineCD(x), S(y) > LineCD + // 계산식 (기울기 = y의 증가량/x의 증가량) + if (A.경도 == D.경도) { + try { + A.경도 <= S.경도 <= B.경도; // x + C.위도 <= S.위도 <= A.위도; // y + res.json({ + result: true, + resultMessage: "상점이 지도에 표시됩니다.", + }); + } catch (err) { + res.json({ + result: false, + resultMessage: "상점이 지도 프레임 밖에 위해하여 표시되지 않습니다.", + }); + } + ///// else if (x축 기준, A좌표가 D좌표보다 작을 때) //// (일 때도 동일) + // 1) S(x) > LineAB(x), S(y) < LineAB + // 2) S(x) > LineAD(x), S(y) > LineAD + // 3) S(x) < LineBC(x), S(y) < LineBC + // 4) S(x) < LineCD(x), S(y) > LineCD + // 계산식 (기울기 = y의 증가량/x의 증가량) + } else { + try { + const lineAB = function () { + // 1) + const a = (B.위도 - A.위도) / (B.경도 - A.경도); // 기울기 + const x = S.경도 >= S.위도 / a; // x + const y = S.위도 <= S.경도 * a; // y + if (x == true && y == true) { + return true; + } else { + return false; + } + }; + const lineAD = function () { + // 1) + const a = (D.위도 - A.위도) / (D.경도 - A.경도); // 기울기 + const x = S.경도 >= S.위도 / a; // x + const y = S.위도 >= S.경도 * a; // y + if (x == true && y == true) { + return true; + } else { + return false; + } + }; + const lineBC = function () { + // 1) + const a = (C.위도 - B.위도) / (C.경도 - B.경도); // 기울기 + const x = S.경도 <= S.위도 / a; // x + const y = S.위도 <= S.경도 * a; // y + if (x == true && y == true) { + return true; + } else { + return false; + } + }; + const lineCD = function () { + // 1) + const a = (C.위도 - D.위도) / (C.경도 - D.경도); // 기울기 + const x = S.경도 <= S.위도 / a; // x + const y = S.위도 >= S.경도 * a; // y + if (x == true && y == true) { + return true; + } else { + return false; + } + }; + // promis all 적용이 효율적 + Promise.all([lineAB, lineAD, lineBC, lineCD]).then((value) => { + if ( + value[0] == true && + value[1] == true && + value[2] == true && + value[3] == true + ) { + res.json({ + result: true, + resultMessage: "상점이 지도에 표시됩니다.", + }); + } else { + res.json({ + result: false, + resultMessage: + "상점이 지도 프레임 밖에 위해하여 표시되지 않습니다.", + }); + } + }); + } catch (err) { + res.json({ + result: false, + resultMessage: "상점이 지도 프레임 밖에 위해하여 표시되지 않습니다.", + }); + } + + // ///// else (x축 기준, A좌표가 D좌표보다 클 때) ///// (작을 때도 동일) + // // 1) S(x) < LineAB(x), S(y) < LineAB + // // 2) S(x) > LineAD(x), S(y) < LineAD + // // 3) S(x) < LineBC(x), S(y) > LineB클 + // // 4) S(x) > LineCD(x), S(y) > LineCD + // // 계산식 (기울기 = y의 증가량/x의 증가량) + // } else if (A.경도 > D.경도) { + // try { + // const lineAB = function () { + // // 1) + // const a = (B.위도 - A.위도) / (B.경도 - A.경도); // 기울기 + // const x = S.경도 <= S.위도 / a; // x + // const y = S.위도 <= S.경도 * a; // y + // if (x == true && y == true) { + // return true; + // } else { + // return false; + // } + // }; + // const lineAD = function () { + // // 1) + // const a = (A.위도 - D.위도) / (A.경도 - D.경도); // 기울기 + // const x = S.경도 >= S.위도 / a; // x + // const y = S.위도 <= S.경도 * a; // y + // if (x == true && y == true) { + // return true; + // } else { + // return false; + // } + // }; + // const lineBC = function () { + // // 1) + // const a = (B.위도 - C.위도) / (B.경도 - C.경도); // 기울기 + // const x = S.경도 <= S.위도 / a; // x + // const y = S.위도 >= S.경도 * a; // y + // if (x == true && y == true) { + // return true; + // } else { + // return false; + // } + // }; + // const lineCD = function () { + // // 1) + // const a = (C.위도 - D.위도) / (C.경도 - D.경도); // 기울기 + // const x = S.경도 >= S.위도 / a; // x + // const y = S.위도 >= S.경도 * a; // y + // if (x == true && y == true) { + // return true; + // } else { + // return false; + // } + // }; + // // promis all 적용이 효율적 + // Promise.all([lineAB, lineAD, lineBC, lineCD]).then((value) => { + // if ( + // value[0] == true && + // value[1] == true && + // value[2] == true && + // value[3] == true + // ) { + // res.json({ + // result: true, + // resultMessage: "상점이 지도에 표시됩니다.", + // }); + // } else { + // res.json({ + // result: false, + // resultMessage: + // "상점이 지도 프레임 밖에 위해하여 표시되지 않습니다.", + // }); + // } + // }); + // } catch (err) { + // res.json({ + // result: false, + // resultMessage: err, + // }); + // } + // } else { + // res.json({ + // result: false, + // resultMessage: err, + // }); + } +} + +const showInMap = async (req, res, err) => { + const A = req.body.A위도경도json; // 위도 = y, 경도 = x + const B = req.body.B위도경도json; + const C = req.body.C위도경도json; + const D = req.body.D위도경도json; + const maxX = Math.ma도(A.경도, B.경도, C.경도, D.경도); // 잘나오는지 확인 필요 + const minX = Math.min(A.경도, B.경도, C.경도, D.경도); + const maxY = Math.max(A.위도, B.위도, C.위도, D.위도); + const minY = Math.max(A.위도, B.위도, C.위도, D.위도); + + try { + // 1차 커널: 요도경도 최대 최소값으로 1차 필터링 + const [results, fields, error] = await pool.query({ + sql: "SELECT * FROM stores WHERE 경도 BETWEEN ? AND ? AND 위도 BETWEEN ? AND ?", + values: [minX, maxX, minY, maxY], + }); + if (error) throw error; + // console.log(results.length); + let j = 0; + let resultJson = {}; + for (let i = 0; i < results.length; i++) { + let S = { 위도: results[i].위도, 경도: results[i].경도 }; + const { res } = checkStore(A, B, C, D, S); + if (res.result == true) { + resultJson[j] = results[i]; + j = j + 1; + } + } + res.status(200).json({ + result: true, + resultMessage: "지도에 표시되는 상점 리스트입니다.", + }); + } catch (err) { + next(err); + } +}; + +mapRouter.post("/map/showInMap", asyncHandler(showInMap)); +module.exports = mapRouter; diff --git a/back/src/routers/myPageRouter.js b/back/src/routers/myPageRouter.js new file mode 100644 index 0000000..f4a17b5 --- /dev/null +++ b/back/src/routers/myPageRouter.js @@ -0,0 +1,147 @@ +const express = require("express"); +const { pool } = require("../db/database"); +const login_required = require("../middlewares/login_required"); +// const asyncHandler = require("../util/asyncHandler"); +const asyncHandler = require("express-async-handler"); +const myPageRouter = express.Router(); + +//해당 유저 전체 댓글 불러오기 +myPageRouter.get("/mypage/reviews", login_required, async (req, res, next) => { + try { + const user_id = req.user_id; + // const user_id = 1 + + let [results, fields, error] = await pool.query( + `SELECT R.review_id, R.star, R.description, R.photo, R.photo2, R.created_time, R.updated_time, S.name as store_name + FROM reviews R + INNER JOIN stores S + ON R.store_id = S.store_id + WHERE R.user_id = ${user_id}` + ); + + for (var i = 0; i < results.length; i++) { + let k = results[i].review_id; + //그 리뷰를 좋아하는 사람 목록 + let [reviewLikeList] = await pool.query( + `SELECT LR.like_review_id, LR.created_time, U.nickname + FROM like_reviews LR + INNER JOIN users U + ON LR.user_id = U.user_id + WHERE LR.review_id = ${k} and tag="like"`) + //그 리뷰를 싫어하는 사람 목록 + let [reviewDislikeList] = await pool.query( + `SELECT LR.like_review_id, LR.created_time, U.nickname + FROM like_reviews LR INNER + JOIN users U + ON LR.user_id = U.user_id + WHERE LR.review_id = ${k} and tag="dislike"`) + results[i].like_reviews = reviewLikeList + results[i].dike_reviews = reviewDislikeList + + } + console.log(results); + + if (error) throw error; + + res.status(201).json(results); + } catch (err) { + next(err); + } +}); + +// GET: 현재 로그인된 유저의 마이페이지 info 정보 +const mypageInfo = async function (req, res, next) { + try { + // jwt토큰에서 추출된 사용자 id를 가지고 db에서 사용자 정보를 찾음. + const user_id = req.user_id; + const [res_currentUser, fld_currentUser, err_currentUser] = + await pool.query({ + sql: "SELECT * FROM users WHERE `user_id` = ? ", + values: [user_id], + }); + if (err_currentUser) throw err_currentUser; + // 관심상점 수 + const [res_favStore, fld_favStore, err_favStore] = await pool.query({ + sql: "SELECT count(store_id) AS myFavStores FROM like_store WHERE `user_id` = ? ", + values: [user_id], + }); + if (err_favStore) throw err_favStore; + // 리뷰 수 + const [res_myReview, fld_myReview, err_myReview] = await pool.query({ + sql: "SELECT count(review_id) AS myReviews FROM reviews WHERE `user_id` = ? ", + values: [user_id], + }); + if (err_myReview) throw err_myReview; + // 리워드 수 + const cntReviews = res_myReview[0].myReviews; + const myReward = Math.floor(cntReviews / 5); + + const mypageInfo_result = Object.assign( + res_currentUser[0], + res_favStore[0], + res_myReview[0], + { myReward: myReward } + ); + delete mypageInfo_result.user_id; + delete mypageInfo_result.password; + const resultWMessage = Object.assign( + { + result: true, + resultMessage: "로그인이 성공적으로 이뤄졌습니다.", + }, + mypageInfo_result + ); + res.status(200).json(resultWMessage); + } catch (error) { + next(error); + } +}; + +//좋아요 상점 목록 불러오기 +myPageRouter.get("/mypage/stores", login_required, async (req, res, next) => { + try { + const user_id = req.user_id; + + let [results, fields, error] = await pool.query( + `select LS.like_store_id, S.* from like_store LS + inner join stores S + on S.store_id = LS.store_id + where user_id = ${user_id}` + ); + + for (var i = 0; i < results.length; i++) { + let k = results[i].store_id; + const [avg_star] = await pool.query( + `select avg(star) as avg_star from reviews where store_id = ${k}` + ) + + if (avg_star[0].avg_star == null){ + results[i].avg_star = 0 + }else{ + results[i].avg_star = avg_star[0].avg_star + } + } + + console.log(results); + + if (error) throw error; + + res.status(201).json(results); +} catch (err) { + next(err); +} +}); + +// myPageRouter.get( +// "/user/reviewList", +// asyncHandler(login_required), +// asyncHandler(mypageReviewList) +// ); +myPageRouter.get( + "/mypage/info", + asyncHandler(login_required), + asyncHandler(mypageInfo) +); + +module.exports = myPageRouter; + diff --git a/back/src/routers/reviewRouter.js b/back/src/routers/reviewRouter.js new file mode 100644 index 0000000..8a34241 --- /dev/null +++ b/back/src/routers/reviewRouter.js @@ -0,0 +1,272 @@ +const express = require("express"); +const { pool } = require("../db/database"); +// const { reviewService } = require("../services/reviewService"); +const login_required = require("../middlewares/login_required") +const upload = require("../middlewares/image_upload"); +const fs = require("fs"); +const reviewRouter = express.Router(); + + +//스토어 리뷰 달기 +reviewRouter.post("/stores/:store_id/review", login_required, upload.array("photo"), async (req, res, next) => { + try { + //로그인된 유저를 토큰 값으로 확인한후 user_id를 받아오기 + const user_id = req.user_id; + + // const user_id = 3; + const { star, description } = req.body; + const store_id = req.params.store_id; + + let photo1; + let photo2; + //사진 저장. 사진이름 뽑기. + if (req.files) { + photo1 = req.files[0]||"" + photo2 = req.files[1]||"" + if (req.files[0] != undefined){ + photo1 = req.files[0].filename} + if (req.files[1] != undefined){ + photo2 = req.files[0].filename} + } else { + photo1 = ""; + photo2= ""; + }; + + // db에 저장 + const [results, fields, error] = await pool.query({ + sql: "INSERT INTO reviews (user_id, star, description, photo, photo2, store_id) VALUES (?, ?, ?, ?, ?, ?)", + values: [user_id, star, description, photo1, photo2, store_id], + }); + if (error) throw error; + + const review_id = results.insertId; + const saveData = { review_id, star, description, photo1, photo2 }; + res.status(201).send(saveData); + } catch (err) { + next(err); + } +}); + +//해당 스토어 전체 댓글 불러오기 +reviewRouter.get("/stores/:store_id/reviews", async (req, res, next) => { + try { + const store_id = req.params.store_id; + + const [results, fields, error] = await pool.query( + `SELECT R.review_id, R.star, R.description, R.photo, R.photo2, R.created_time, R.updated_time, U.nickname + FROM reviews R + INNER JOIN users U + ON R.user_id = U.user_id + WHERE store_id = ${store_id}` + ); + + if (error) throw error; + + for (var i = 0; i < results.length; i++) { + let k = results[i].review_id + //그 리뷰를 좋아하는 사람 목록 + let [reviewLikeList] = await pool.query( + `SELECT LR.like_review_id, LR.created_time, U.nickname + FROM like_reviews LR + INNER JOIN users U + ON LR.user_id = U.user_id + WHERE LR.review_id = ${k} and tag="like"`) + //그 리뷰를 싫어하는 사람 목록 + let [reviewDislikeList] = await pool.query( + `SELECT LR.like_review_id, LR.created_time, U.nickname + FROM like_reviews LR INNER + JOIN users U + ON LR.user_id = U.user_id + WHERE LR.review_id = ${k} and tag="dislike"`) + results[i].like_reviews = reviewLikeList + results[i].disLike_reviews = reviewDislikeList + } + + console.log(results); + + res.status(201).json(results); + } catch (err) { + next(err); + } +}); + +//리뷰 수정하기 +reviewRouter.put("/review/:review_id", login_required, upload.array("photo"), async (req, res, next) => { + try { + const review_id = req.params.review_id; + const { star, description} = req.body; + + const [reviewPhoto, filed, err] = await pool.query( + `SELECT photo, photo2 FROM reviews WHERE review_id=${review_id};` + ); + if (err) throw err; + + //사진 삭제하기. + let file_name = [reviewPhoto[0].photo, reviewPhoto[0].photo2] + + for (let i=0; i<=2; i++) { + if (fs.existsSync("uploads/" + file_name[i])) { + try { + fs.unlinkSync("uploads/" + file_name[i]); + console.log("image delete"); + } catch (deleteError) { + console.log(deleteError); + } + } + } + + //사진 저장. 사진이름 뽑기. + if (req.files) { + photo1 = req.files[0]||"" + photo2 = req.files[1]||"" + if (req.files[0] != undefined){ + photo1 = req.files[0].filename} + if (req.files[1] != undefined){ + photo2 = req.files[0].filename} + } else { + photo1 = ""; + photo2= ""; + }; + + const [results, fields, error] = await pool.query( + `UPDATE reviews SET star=${star}, description="${description}", photo="${photo1}", photo2 ="${photo2}" WHERE review_id = ${review_id}` + ); + const putData = { review_id, star, description, photo1, photo2}; + + if (error) throw error; + res.status(201).send(putData); + } catch (err) { + next(err); + } +}); + +//리뷰 지우기 +reviewRouter.delete("/stores/:store_id/:review_id", login_required, async (req, res, next) => { + try { + const review_id = req.params.review_id; + + const [reviewPhoto, filed, error] = await pool.query( + `SELECT photo, photo2 FROM reviews WHERE review_id=${review_id};` + ); + if (error) throw error; + + const [results, fields, err] = await pool.query( + `DELETE FROM reviews WHERE review_id=${review_id};` + ); + if (err) throw err; + + //사진 삭제하기. + let file_name = [reviewPhoto[0].photo, reviewPhoto[0].photo2] + + for (let i=0; i<=2; i++) { + if (fs.existsSync("uploads/" + file_name[i])) { + try { + fs.unlinkSync("uploads/" + file_name[i]); + console.log("image delete"); + } catch (deleteError) { + console.log(deleteError); + } + } + } + + res.status(201).json({ + message: "리뷰가 삭제되었습니다.", + }); + } catch (err) { + next(err); + } +}); + +//리뷰 좋아요 +reviewRouter.post( + "/stores/:store_id/:review_id/like", + login_required, + async (req, res, next) => { + try { + //로그인된 유저를 토큰 값으로 확인한후 user_id를 받아오기 + const user_id = req.user_id; + const review_id = req.params.review_id; + const tag = 1; + + //db에 존재하는 것 삭제 + const [deleteReviewLike, error] = await pool.query( + // `select count(user_id) from like_reviews group by review_id, having count(review_id)>1` + `DELETE FROM like_reviews WHERE review_id=${review_id} and user_id=${user_id}` + ); + if (error) throw error; + + // db에 저장 + const [saveReviewLike, err] = await pool.query( + `INSERT INTO like_reviews(user_id, review_id, tag) VALUES (${user_id}, ${review_id}, ${tag})` + ); + if (err) throw err; + + //저장된 데이터 + const [saveData, , getDataErr] = await pool.query( + `SELECT like_review_id, created_time, tag FROM like_reviews WHERE review_id=${review_id} and user_id=${user_id}` + ) + if (getDataErr) throw getDataErr + + console.log(saveData); + + res.status(201).json(saveData); + } catch (err) { + next(err); + } + } +); + +//리뷰 싫어요 +reviewRouter.post( + "/stores/:store_id/:review_id/dislike", + login_required, + async (req, res, next) => { + try { + //로그인된 유저를 토큰 값으로 확인한후 user_id를 받아오기 + const user_id = req.user_id; + const review_id = req.params.review_id; + const tag = 2; + + //db에 존재하는 것 삭제 + const [deleteReviewLike, error] = await pool.query( + // `select count(user_id) from like_reviews group by review_id, having count(review_id)>1` + `DELETE FROM like_reviews WHERE review_id=${review_id} and user_id=${user_id}` + ); + if (error) throw error; + + // db에 저장 + const [saveReviewLike, err] = await pool.query( + `INSERT INTO like_reviews(user_id, review_id, tag) VALUES (${user_id}, ${review_id}, ${tag})` + ); + if (err) throw err; + + //저장된 데이터 //field없으면 object로 나오는ㄷ.. 뭔지잘모르겠음 + const [saveData, field , getDataErr] = await pool.query( + `SELECT like_review_id, created_time, tag FROM like_reviews WHERE review_id=${review_id} and user_id=${user_id}` + ) + if (getDataErr) throw getDataErr + + console.log(saveData); + + res.status(201).json(saveData); + } catch (err) { + next(err); + } + } +); + +module.exports = reviewRouter; + +//api index +// reviewRouter.post("/stores/:store_id/review", addReview); +// reviewRouter.get("/stores/:store_id/reviews", storeReviews); +// reviewRouter.get("/user/reviewList", userReviews); +// reviewRouter.put("/review/:review_id", putReview); +// reviewRouter.delete("/stores/:store_id/:review_id", deleteReview) ; + +// const newReview = await reviewService.addReview({ +// user_id, +// star, +// description, +// photo, +// }); \ No newline at end of file diff --git a/back/src/routers/socialLoginRouter.js b/back/src/routers/socialLoginRouter.js new file mode 100644 index 0000000..75b64ba --- /dev/null +++ b/back/src/routers/socialLoginRouter.js @@ -0,0 +1,297 @@ +const express = require("express"); +const axios = require("axios"); +const jwt = require("jsonwebtoken"); +const moment = require("moment-timezone"); +moment.tz.setDefault("Asia/Seoul"); +const asyncHandler = require("../util/asyncHandler"); +const { pool } = require("../db/database"); + +const socialLoginRouter = express.Router(); +axios.interceptors.response.use( + (res) => { + return res.data; + }, + (err) => { + console.log(err); + throw new Error("(!) axios error"); + } +); +const makeFormData = (params) => { + const searchParams = new URLSearchParams(); + Object.keys(params).forEach((key) => { + searchParams.append(key, params[key]); + }); + return searchParams; +}; + +//////////////////////////////////////// +///////////// 네 이 버 /////////////// +// FE에서 code를 얻는 곳: https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=JRa7NrbtcesvuNyjkj6I&redirect_uri=http%3A%2F%2F127.0.0.1%3A5173%2Flogin%2Foauth2%2Fcode%2Fnaver&state=green +//////////////////////////////////////// +const naverOauth = async (req, res, next) => { + const code = req.body.code; + const state = "green"; + const client_id = "JRa7NrbtcesvuNyjkj6I"; + const client_secret = "wKlBmjAspw"; + const redirectURI = "http://127.0.0.1:5173/login/oauth2/code/naver"; + const encoded = encodeURIComponent(redirectURI); + // const FE_url = `https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=${client_id}&redirect_uri=${encoded}&state=${state}`; + // console.log("FE_url: ", FE_url); + const url = `https://nid.naver.com/oauth2.0/token?grant_type=authorization_code&client_id=${client_id}&client_secret=${client_secret}&redirect_uri=${encoded}&code=${code}&state=${state}`; + + try { + let naverToken = ""; + await axios({ + method: "GET", + url: url, + }) + .then((res) => { + naverToken = res; + }) + .catch((err) => { + console.log("오류메시지: ", err); + }); + + ///////정보 받아오기/////// + let naverUser = ""; + const access_token = JSON.stringify(naverToken.access_token); + await axios({ + method: "GET", + headers: { + Authorization: `bearer ${access_token}`, + }, + url: "https://openapi.naver.com/v1/nid/me", + }) + .then((res) => { + naverUser = res; + }) + .catch((err) => { + console.log(err); + }); + + // 이메일 중복 확인 + const naverUserRes = naverUser.response; + const naverUserEmail = naverUserRes.email; + const [res_checkID, fld_checkID, err_checkID] = await pool.query({ + sql: "SELECT * FROM users WHERE `email` = ? ", + values: [naverUserEmail], + }); + if (err_checkID) throw err_checkID; + else if (JSON.stringify(res_checkID) === "[]") { + // db에 저장 + const nickname = "naver_" + naverUserEmail; + const created_time = moment().format("YYYY-MM-DD HH:mm:ss"); + const updated_time = moment().format("YYYY-MM-DD HH:mm:ss"); + const [res_save, fld_save, err_save] = await pool.query({ + sql: "INSERT INTO users (email, password, nickname, provider, created_time, updated_time) VALUES (?, ?, ?, ?, ?, ?)", + values: [ + naverUserEmail, + access_token, + nickname, + "naver", + created_time, + updated_time, + ], + }); + if (err_save) throw err_save; + + // JWT 웹 토큰 생성 + const [res_logID, fld_logID, err_logID] = await pool.query({ + sql: "SELECT * FROM users WHERE `email` = ? ", + values: [naverUserEmail], + }); + if (err_logID) throw err_logID; + const res_logID_arrayId = JSON.stringify(res_logID, ["user_id"]); + const res_logID_Id = res_logID_arrayId.replace(/[^0-9]/g, ""); + const secretKey = process.env.JWT_SECRET_KEY || "jwt-secret-key"; + const token = jwt.sign({ user_id: res_logID_Id }, secretKey); + const [res_logID_tk, fld_logID_tk, err_logID_tk] = await pool.query({ + sql: "SELECT * FROM users WHERE `email` = ? ", + values: [naverUserEmail], + }); + if (err_logID_tk) throw err_logID_tk; + const userWToken = Object.assign( + { + result: true, + resultMessage: + "naver api를 이용한 회원가입이 성공적으로 이뤄졌습니다.", + provider: "naver", + token: token, + }, + res_logID_tk[0] + ); + delete userWToken.user_id; + delete userWToken.password; + res.status(200).json(userWToken); + } else if (JSON.stringify(res_checkID) !== "[]") { + // JWT 웹 토큰 생성 + const [res_logID, fld_logID, err_logID] = await pool.query({ + sql: "SELECT * FROM users WHERE `email` = ? ", + values: [naverUserEmail], + }); + if (err_logID) throw err_logID; + const res_logID_arrayId = JSON.stringify(res_logID, ["user_id"]); + const res_logID_Id = res_logID_arrayId.replace(/[^0-9]/g, ""); + const secretKey = process.env.JWT_SECRET_KEY || "jwt-secret-key"; + const token = jwt.sign({ user_id: res_logID_Id }, secretKey); + const [res_logID_tk, fld_logID_tk, err_logID_tk] = await pool.query({ + sql: "SELECT * FROM users WHERE `email` = ? ", + values: [naverUserEmail], + }); + if (err_logID_tk) throw err_logID_tk; + const userWToken = Object.assign( + { + result: true, + resultMessage: "naver api를 이용한 로그인이 성공적으로 이뤄졌습니다.", + provider: "naver", + token: token, + }, + res_logID_tk[0] + ); + delete userWToken.user_id; + delete userWToken.password; + res.status(200).json(userWToken); + } + } catch (error) { + next(error); + } +}; + +//////////////////////////////////////// +///////////// 카 카 오 /////////////// +// FE_URL: kauth.kakao.com/oauth/authorize?client_id=9fd6d9d615c25ff01b60a3a988e942bc&redirect_uri=http://127.0.0.1:5173/login/oauth2/code/kakao&response_type=code +//////////////////////////////////////// +// POST: kakao api 회원가입 +const kakaoOauth = async (req, res, next) => { + const code = req.body.code; + const REST_API_KEY = "9fd6d9d615c25ff01b60a3a988e942bc"; + const REDIRECT_URI = "http://127.0.0.1:5173/login/oauth2/code/kakao"; + try { + let kakaoToken = ""; + await axios({ + method: "POST", + headers: { + "content-type": "application/x-www-form-urlencoded;charset=utf-8", + }, + url: "https://kauth.kakao.com/oauth/token", + data: makeFormData({ + grant_type: "authorization_code", + client_id: REST_API_KEY, + redirect_uri: REDIRECT_URI, + code: code, + }), + }) + .then((res) => { + kakaoToken = res; + }) + .catch((err) => { + console.log(err); + }); + + ///////정보 받아오기/////// + let kakaoUser = ""; + const access_token = JSON.stringify(kakaoToken.access_token); + await axios({ + method: "GET", + headers: { + Authorization: `bearer ${access_token}`, + }, + url: "https://kapi.kakao.com/v1/oidc/userinfo", + }) + .then((res) => { + kakaoUser = res; + }) + .catch((err) => { + console.log(err); + }); + + // 이메일 중복 확인 + const kakaoUserEmail = kakaoUser.email; + const [res_checkID, fld_checkID, err_checkID] = await pool.query({ + sql: "SELECT * FROM users WHERE `email` = ? ", + values: [kakaoUserEmail], + }); + if (err_checkID) throw err_checkID; + else if (JSON.stringify(res_checkID) === "[]") { + // db에 저장 + const nickname = "kakao_" + kakaoUserEmail; + const created_time = moment().format("YYYY-MM-DD HH:mm:ss"); + const updated_time = moment().format("YYYY-MM-DD HH:mm:ss"); + const [res_save, fld_save, err_save] = await pool.query({ + sql: "INSERT INTO users (email, password, nickname, provider, created_time, updated_time) VALUES (?, ?, ?, ?, ?, ?)", + values: [ + kakaoUserEmail, + access_token, + nickname, + "kakao", + created_time, + updated_time, + ], + }); + if (err_save) throw err_save; + + // JWT 웹 토큰 생성 + const [res_logID, fld_logID, err_logID] = await pool.query({ + sql: "SELECT * FROM users WHERE `email` = ? ", + values: [kakaoUserEmail], + }); + if (err_logID) throw err_logID; + const res_logID_arrayId = JSON.stringify(res_logID, ["user_id"]); + const res_logID_Id = res_logID_arrayId.replace(/[^0-9]/g, ""); + const secretKey = process.env.JWT_SECRET_KEY || "jwt-secret-key"; + const token = jwt.sign({ user_id: res_logID_Id }, secretKey); + const [res_logID_tk, fld_logID_tk, err_logID_tk] = await pool.query({ + sql: "SELECT * FROM users WHERE `email` = ? ", + values: [kakaoUserEmail], + }); + if (err_logID_tk) throw err_logID_tk; + const userWToken = Object.assign( + { + result: true, + resultMessage: + "kakao api를 이용한 회원가입이 성공적으로 이뤄졌습니다.", + provider: "kakao", + token: token, + }, + res_logID_tk[0] + ); + delete userWToken.user_id; + delete userWToken.password; + res.status(200).json(userWToken); + } else if (JSON.stringify(res_checkID) !== "[]") { + // JWT 웹 토큰 생성 + const [res_logID, fld_logID, err_logID] = await pool.query({ + sql: "SELECT * FROM users WHERE `email` = ? ", + values: [kakaoUserEmail], + }); + if (err_logID) throw err_logID; + const res_logID_arrayId = JSON.stringify(res_logID, ["user_id"]); + const res_logID_Id = res_logID_arrayId.replace(/[^0-9]/g, ""); + const secretKey = process.env.JWT_SECRET_KEY || "jwt-secret-key"; + const token = jwt.sign({ user_id: res_logID_Id }, secretKey); + const [res_logID_tk, fld_logID_tk, err_logID_tk] = await pool.query({ + sql: "SELECT * FROM users WHERE `email` = ? ", + values: [kakaoUserEmail], + }); + if (err_logID_tk) throw err_logID_tk; + const userWToken = Object.assign( + { + result: true, + resultMessage: "kakao api를 이용한 로그인이 성공적으로 이뤄졌습니다.", + provider: "kakao", + token: token, + }, + res_logID_tk[0] + ); + delete userWToken.user_id; + delete userWToken.password; + res.status(200).json(userWToken); + } + } catch (error) { + next(error); + } +}; + +socialLoginRouter.post("/naverOauth", asyncHandler(naverOauth)); +socialLoginRouter.post("/kakaoOauth", asyncHandler(kakaoOauth)); +module.exports = socialLoginRouter; diff --git a/back/src/routers/storesRouter.js b/back/src/routers/storesRouter.js new file mode 100644 index 0000000..d48d714 --- /dev/null +++ b/back/src/routers/storesRouter.js @@ -0,0 +1,224 @@ +const express = require("express"); +const { pool, connection } = require("../db/database"); +const login_required = require("../middlewares/login_required"); +const storesRouter = express.Router(); +const moment = require("moment-timezone"); +moment.tz.setDefault("Asia/Seoul"); + +//get요청 /store/:storeId (storeId는 1부터 순차적으로 자동 부여됨) 입력시 요청한 한개의 가게를 보여줌 +storesRouter.get("/store/:storeId", async (req, res, next) => { + try { + const storeId = req.params.storeId; + const [results, fields, error] = await pool.query( + `select * from stores S where store_id=${storeId};` + ); + if (error) throw error; + + const [avg_star] = await pool.query( + `select avg(star) as avg_star from reviews where store_id = ${storeId}` + ) + if (avg_star[0].avg_star == null){ + results[0].avg_star = 0 + }else{ + results[0].avg_star = avg_star[0].avg_star + } + console.log(results) + + res.status(200).json(results); + } catch (err) { + next(err); + } +}); + +//get요청 /store 전체 가게 리스트를 보여줌 +storesRouter.get("/store", async (req, res, next) => { + try { + const [results, fields, error] = await pool.query( + `select * from stores where store_id ;` + ); + if (error) throw error; + + for (var i = 0; i < results.length; i++) { + let k = results[i].store_id; + const [avg_star] = await pool.query( + `select avg(star) as avg_star from reviews where store_id = ${k}` + ) + if (avg_star[0].avg_star == null){ + results[i].avg_star = 0 + }else{ + results[i].avg_star = avg_star[0].avg_star + } + } + + res.status(200).json(results); + } catch (err) { + next(err); + } +}); + +// 새로운 가게 정보 등록 post +storesRouter.post("/stores/add", async (req, res, next) => { + try { + const { + name, + description, + tag, + url, + phone, + open_time, + close_time, + latitude, + longitude, + address_detail, + } = req.body; + + // 위 데이터를 유저 db에 추가하기 + const [res_save, fld_save, err_save] = await pool.query({ + sql: "INSERT INTO stores (name, description, tag, url, phone, open_time, close_time, latitude, longitude, address_detail) VALUES (?,?,?,?,?,?,?,?,?,?)", + values: [ + name, + description, + tag, + url, + phone, + open_time, + close_time, + latitude, + longitude, + address_detail, + ], + }); + // function (error, results, fields) { + if (err_save) throw err_save; + const newUser = JSON.stringify(res_save, ["insertId"]); + console.log(newUser); + // } + + res.status(200).send(newUser); + } catch (err) { + next(err); + } +}); + +//가게정보 수정 put +storesRouter.put("/store/:storeId", async (req, res, next) => { + try { + const storeId = req.params.storeId; + const { + name, + description, + tag, + url, + phone, + open_time, + close_time, + latitude, + longitude, + address_detail, + } = req.body; + + const [results, fields, error] = await pool.query({ + sql: `update stores SET name="${name}", description="${description}", tag="${tag}", url="${url}", phone="${phone}", + open_time="${open_time}", close_time="${close_time}", latitude="${latitude}", longitude="${longitude}", + address_detail="${address_detail}" WHERE store_id="${storeId}"`, + }); + + if (error) throw error; + res.status(200).json(results); + } catch (err) { + next(err); + } +}); + +//가게정보 삭제 +storesRouter.delete("/store/:storeId", async (req, res, next) => { + try { + const storeId = req.params.storeId; + const [results, fields, error] = await pool.query( + `delete from stores where store_id=${storeId};` + ); + if (error) throw error; + res.status(200).json(results); + } catch (err) { + next(err); + } +}); + +//get요청 서울시 ㅇㅇ구 ㅇㅇ동에 있는 가게정보 가져오기 +storesRouter.get("/store/address/:addressId", async (req, res, next) => { + try { + const addressId = req.params.addressId; + const [results, fields, error] = await pool.query( + `select * from stores inner join address on stores.address_id = address.address_id where address.address_id =${addressId};` + ); + if (error) throw error; + res.status(200).json(results); + } catch (err) { + next(err); + } +}); + +//스토어 찜하기 +storesRouter.post( + "/stores/:store_id/like", + login_required, + async (req, res, next) => { + try { + // jwt토큰에서 추출된 사용자 id를 가지고 db에서 사용자 정보를 찾음. + const user_id = req.user_id; + const store_id = req.params.store_id; + + // // 위 데이터를 유저 db에 추가하기 + // const [res_save, fld_save, error] = await pool.query( + // `DELETE FROM like_store(user_id,store_id) WHERE review_id=${user_id} and user_id=${store_id} ` + // ); + // if (error) throw error; + + const [results, fields, error] = await pool.query( + `delete from like_store where store_id="${store_id}" and user_id="${user_id}" ;` + ); + + // db에 저장 + const [saveStoreLike, err] = await pool.query( + `INSERT INTO like_store(user_id, store_id) VALUES ("${user_id}", '${store_id}');` + ); + if (err) throw err; + + //저장된 데이터 + const [saveData, , getDataErr] = await pool.query( + `SELECT store_id, like_store_id, time FROM like_store WHERE user_id="${user_id}" and store_id="${store_id}"` + ); + if (getDataErr) throw getDataErr; + + console.log(saveData); + res.status(201).json(saveData); + } catch (err) { + next(err); + } + } +); + +//가게찜 삭제 +storesRouter.delete( + "/store/:store_id/like", + login_required, + async (req, res, next) => { + try { + const user_id = req.user_id; + // const store_id = req.params.store_id; + // const user_id = 2; + const store_id = req.params.store_id; + const [results, fields, error] = await pool.query( + `delete from like_store where store_id="${store_id}" and user_id="${user_id}" ;` + ); + if (error) throw error; + res.status(200).json(results); + } catch (err) { + next(err); + } + } +); + +module.exports = storesRouter; + +//https://data.seoul.go.kr/dataList/OA-21234/S/1/datasetView.do 데이터정보 diff --git a/back/src/routers/userRouter.js b/back/src/routers/userRouter.js new file mode 100644 index 0000000..8bbb496 --- /dev/null +++ b/back/src/routers/userRouter.js @@ -0,0 +1,447 @@ +const express = require("express"); +const { pool, connection } = require("../db/database"); +const bcrypt = require("bcrypt"); +const jwt = require("jsonwebtoken"); +// const asyncHandler = require("../util/asyncHandler"); +const asyncHandler = require("express-async-handler"); +const login_required = require("../middlewares/login_required"); +// const moment1 = require("moment"); +const moment = require("moment-timezone"); +moment.tz.setDefault("Asia/Seoul"); +const upload = require("../middlewares/image_upload"); + +const userAuthRouter = express.Router(); + +// GET: 유저리스트 확인 기능 +const userList = async (req, res, next) => { + try { + const [results, fields, error] = await pool.query("SELECT * FROM users"); + if (error) throw error; + // console.log(results.length); + for (let i = 0; i < results.length; i++) { + delete results[i].password; + } + res.status(200).json(results); + } catch (err) { + next(err); + } +}; + +// GET: 회원가입 - Email 중복 확인 기능 +const userRegisterEmail = async (req, res, next) => { + try { + const email = req.body.email; + + // 이메일 중복 확인 + const [res_checkID, fld_checkID, err_checkID] = await pool.query({ + sql: "SELECT * FROM users WHERE `email` = ? ", + values: [email], + }); + if (err_checkID) throw err_checkID; + else if (JSON.stringify(res_checkID) !== "[]") { + res.status(200).json({ + result: false, + errorMessage: + "입력하신 email로 가입된 내역이 있습니다. 다시 한 번 확인해 주세요.", + errorCause: "email", + }); + } else { + res.status(200).json({ + result: true, + resultMessage: + "입력하신 email로 가입된 내역이 없습니다. 사용하실 수 있습니다.", + }); + } + } catch (err) { + next(err); + } +}; + +// GET: 회원가입 - nickname 중복 확인 기능 +const userRegisterNickname = async (req, res, next) => { + try { + const nickname = req.body.nickname; + + // 닉네임 중복 확인 + const [res_checkNickname, fld_checkNickname, err_checkNickname] = + await pool.query({ + sql: "SELECT * FROM users WHERE `nickname` = ? ", + values: [nickname], + }); + if (err_checkNickname) throw err_checkNickname; + else if (JSON.stringify(res_checkNickname) !== "[]") { + res.status(200).json({ + result: false, + errorMessage: + "입력하신 닉네임으로 가입된 내역이 있습니다. 다시 한 번 확인해 주세요.", + errorCause: "nickname", + }); + } else { + res.status(200).json({ + result: true, + resultMessage: + "입력하신 nickname으로 가입된 내역이 없습니다. 사용하실 수 있습니다.", + }); + } + } catch (err) { + next(err); + } +}; + +// POST: 회원가입 기능 +const userRegister = async (req, res, next) => { + try { + const email = req.body.email; + const password = req.body.password; + const nickname = req.body.nickname; + + // 이메일 중복 확인 + const [res_checkID, fld_checkID, err_checkID] = await pool.query({ + sql: "SELECT * FROM users WHERE `email` = ? ", + values: [email], + }); + if (err_checkID) throw err_checkID; + else if (JSON.stringify(res_checkID) !== "[]") { + res.status(200).json({ + result: false, + errorMessage: + "입력하신 email로 가입된 내역이 있습니다. 다시 한 번 확인해 주세요.", + errorCause: "email", + }); + } + + // 닉네임 중복 확인 + const [res_checkNickname, fld_checkNickname, err_checkNickname] = + await pool.query({ + sql: "SELECT * FROM users WHERE `nickname` = ? ", + values: [nickname], + }); + if (err_checkNickname) throw err_checkNickname; + else if (JSON.stringify(res_checkNickname) !== "[]") { + res.status(200).json({ + result: false, + errorMessage: + "입력하신 닉네임으로 가입된 내역이 있습니다. 다시 한 번 확인해 주세요.", + errorCause: "nickname", + }); + } + if ( + JSON.stringify(res_checkID) === "[]" && + JSON.stringify(res_checkNickname) === "[]" + ) { + // 비밀번호 해쉬화 + const hashedPassword = await bcrypt.hash(password, 10); + // db에 저장 + const [res_save, fld_save, err_save] = await pool.query({ + sql: "INSERT INTO users (email, password, nickname) VALUES (?, ?, ?)", + values: [email, hashedPassword, nickname], + }); + if (err_save) throw err_save; + res.status(200).json({ + result: true, + resultMessage: "회원가입이 성공적으로 이뤄졌습니다.", + }); + } + } catch (err) { + next(err); + } +}; + +// POST: 로그인 기능 +const userLogin = async function (req, res, next) { + try { + const email = req.body.email; + const password = req.body.password; + + const [res_logID, fld_logID, err_logID] = await pool.query({ + sql: "SELECT * FROM users WHERE `email` = ? ", + values: [email], + }); + if (err_logID) throw err_logID; + else if (JSON.stringify(res_logID) === "[]") { + res.status(200).json({ + result: false, + errorMessage: "일치하는 email이 없습니다. 다시 한 번 확인해 주세요.", + errorCause: "email", + }); + } + + // 비밀번호 일치 여부 확인 + const res_logID_array = JSON.stringify(res_logID, ["password"]); + const res_logID_pw = res_logID_array.split(`"`); + const correctPasswordHash = res_logID_pw[3]; + const isPasswordCorrect = await bcrypt.compare( + password, + correctPasswordHash + ); + if (!isPasswordCorrect) { + res.status(200).json({ + result: false, + errorMessage: "비밀번호가 일치하지 않습니다. 다시 한 번 확인해 주세요.", + errorCause: "password", + }); + } + if (isPasswordCorrect && JSON.stringify(res_logID) !== "[]") { + // 로그인 성공 -> JWT 웹 토큰 생성 + const res_logID_arrayId = JSON.stringify(res_logID, ["user_id"]); + const res_logID_Id = res_logID_arrayId.replace(/[^0-9]/g, ""); + + const secretKey = process.env.JWT_SECRET_KEY || "jwt-secret-key"; + const token = jwt.sign({ user_id: res_logID_Id }, secretKey); + const [res_logID_tk, fld_logID_tk, err_logID_tk] = await pool.query({ + sql: "SELECT * FROM users WHERE `email` = ? ", + values: [email], + }); + if (err_logID_tk) throw err_logID_tk; + + const userWToken = Object.assign( + { + result: true, + resultMessage: "로그인이 성공적으로 이뤄졌습니다.", + }, + { token: token }, + res_logID_tk[0] + ); + delete userWToken.user_id; + delete userWToken.password; + res.status(200).json(userWToken); + } + } catch (error) { + next(error); + } +}; + +// GET: 현재 로그인된 유저 정보 +const userCurrent = async function (req, res, next) { + try { + // jwt토큰에서 추출된 사용자 id를 가지고 db에서 사용자 정보를 찾음. + const user_id = req.user_id; + const [res_currentUser, fld_currentUser, err_currentUser] = + await pool.query({ + sql: "SELECT * FROM users WHERE `user_id` = ? ", + values: [user_id], + }); + if (err_currentUser) throw err_currentUser; + if (res_currentUser && res_currentUser.length) { + // false, 검색된 결과가 없을 때 + delete res_currentUser[0].password; + delete res_currentUser[0].user_id; + const resultWMessage = Object.assign( + { + result: true, + resultMessage: "로그인이 성공적으로 이뤄졌습니다.", + }, + res_currentUser[0] + ); + res.status(200).json(resultWMessage); + } else { + res.status(200).json({ + result: false, + resultMessage: "로그인이 실패했습니다.", + }); + } + } catch (error) { + next(error); + } +}; + +// PUT: 유저 정보 업데이트(pw) +const userUpdatePW = async function (req, res, next) { + try { + const email = req.body.email; + const current_password = req.body.current_password; + const new_password = req.body.new_password; + const updated_time = moment().format("YYYY-MM-DD HH:mm:ss"); + const [res_checkID, fld_checkID, err_checkID] = await pool.query({ + sql: "SELECT * FROM users WHERE `email` = ? ", + values: [email], + }); + if (err_checkID) throw err_checkID; + + // 비밀번호 일치 여부 확인 + const res_logID_array = JSON.stringify(res_checkID, ["password"]); + const res_logID_pw = res_logID_array.split(`"`); + const correctPasswordHash = res_logID_pw[3]; + const isPasswordCorrect = await bcrypt.compare( + current_password, + correctPasswordHash + ); + if (!isPasswordCorrect) { + res.status(200).json({ + result: false, + errorMessage: "비밀번호가 일치하지 않습니다. 다시 한 번 확인해 주세요.", + errorCause: "password", + }); + } + + // 비밀번호 해쉬화 + const hashedPassword = await bcrypt.hash(new_password, 10); + + // jwt토큰에서 추출된 사용자 id를 가지고 db에서 사용자 정보를 찾음. + const [res_userUpdate, fld_userUpdate, err_userUpdate] = await pool.query({ + sql: "UPDATE users SET `password`=?, `updated_time`=? WHERE `email` = ? ", + values: [hashedPassword, updated_time, email], + }); + if (err_userUpdate) throw err_userUpdate; + res.status(200).json({ + result: true, + resultMessage: "비밀번호 업데이트가 성공적으로 이뤄졌습니다.", + }); + } catch (error) { + next(error); + } +}; +// PUT: 유저 정보 업데이트(Info) +const userUpdateInfo = async function (req, res, next) { + try { + const email = req.body.email; + const nickname = req.body.nickname; + const description = req.body.description; + const updated_time = moment().format("YYYY-MM-DD HH:mm:ss"); + const [res_checkID, fld_checkID, err_checkID] = await pool.query({ + sql: "SELECT * FROM users WHERE `email` = ? ", + values: [email], + }); + if (err_checkID) throw err_checkID; + + // jwt토큰에서 추출된 사용자 id를 가지고 db에서 사용자 정보를 찾음. + const [res_userUpdate, fld_userUpdate, err_userUpdate] = await pool.query({ + sql: "UPDATE users SET `nickname`=?, `description`=?, `updated_time`=? WHERE `email` = ? ", + values: [nickname, description, updated_time, email], + }); + if (err_userUpdate) throw err_userUpdate; + res.status(200).json({ + result: true, + resultMessage: "유저정보 업데이트가 성공적으로 이뤄졌습니다.", + }); + } catch (error) { + next(error); + } +}; + +// POST: 프로필사진 업로드 +const profileUpload = async function (req, res, next) { + try { + const email = req.body.email; + const new_filename = req.file.filename; + const updated_time = moment().format("YYYY-MM-DD HH:mm:ss"); + const [res_profileUpload, fld_profileUpload, err_profileUpload] = + await pool.query({ + sql: "UPDATE users SET `profile_photo`=?, `updated_time`=? WHERE `email` = ? ", + values: [new_filename, updated_time, email], + }); + if (err_profileUpload) throw err_profileUpload; + res.status(200).json({ + result: true, + resultMessage: "프로필사진이 성공적으로 업로드 되었습니다.", + }); + } catch (e) { + next(e); + } +}; + +// DELETE: 유저 삭제 +const userDelete = async function (req, res, next) { + try { + const email = req.body.email; + const password = req.body.password; + + const [res_userDelete_check, fld_userDelete_check, err_userDelete_check] = + await pool.query({ + sql: "SELECT * FROM users WHERE `email` = ? ", + values: [email], + }); + if (err_userDelete_check) throw err_userDelete_check; + + // 비밀번호 일치 여부 확인 + const res_logID_array = JSON.stringify(res_userDelete_check, ["password"]); + const res_logID_pw = res_logID_array.split(`"`); + const correctPasswordHash = res_logID_pw[3]; + console.log(password, correctPasswordHash) + const isPasswordCorrect = await bcrypt.compare( + password, + correctPasswordHash + ); + if (!isPasswordCorrect) { + res.status(200).json({ + result: false, + errorMessage: "비밀번호가 일치하지 않습니다. 다시 한 번 확인해 주세요.", + errorCause: "password", + }); + } else { + // DB에서 유저 정보 삭제 + const [res_userDelete, fld_userDelete, err_userDelete] = await pool.query( + { + sql: "DELETE FROM users WHERE `email` = ? ", + values: [email], + } + ); + if (err_userDelete) throw err_userDelete; + res.status(200).json({ + result: true, + resultMessage: "유저 정보가 성공적으로 삭제 되었습니다.", + }); + } + } catch (e) { + next(e); + } +}; + +//한 유저가 좋아요 누른 가게 모아보기 +const userlikestore = async (req, res, next) => { + try { + const user_id = req.user_id; + const [results, fields, error] = await pool.query( + `select * from like_store where user_id="${user_id}";` + ); + if (error) throw error; + res.status(200).json(results); + } catch (err) { + next(err); + } +}; + +// api index +userAuthRouter.get("/userlist", asyncHandler(userList)); +userAuthRouter.post("/user/register/email", asyncHandler(userRegisterEmail)); +userAuthRouter.post( + "/user/register/nickname", + asyncHandler(userRegisterNickname) +); +userAuthRouter.post("/user/register", asyncHandler(userRegister)); +userAuthRouter.post("/user/login", asyncHandler(userLogin)); +userAuthRouter.get( + "/user", + asyncHandler(login_required), + asyncHandler(userCurrent) +); + +userAuthRouter.put( + "/user/updatePW", + asyncHandler(login_required), + asyncHandler(userUpdatePW) +); +userAuthRouter.put( + "/user/updateInfo", + asyncHandler(login_required), + asyncHandler(userUpdateInfo) +); +userAuthRouter.post( + "/user/update", + // asyncHandler(login_required), + asyncHandler(upload.single("file")), + asyncHandler(profileUpload) +); +userAuthRouter.post( + "/user/delete", + asyncHandler(login_required), + asyncHandler(userDelete) +); + +userAuthRouter.get( + "/user/like-store", + asyncHandler(login_required), + asyncHandler(userlikestore) +); + +module.exports = userAuthRouter; diff --git a/back/src/services/userService.js b/back/src/services/userService.js new file mode 100644 index 0000000..6383757 --- /dev/null +++ b/back/src/services/userService.js @@ -0,0 +1,43 @@ +const { pool } = require("../db/database"); +// import bcrypt from "bcrypt"; +// import { v4 as uuidv4 } from "uuid"; +// import jwt from "jsonwebtoken"; + +// User.js 포함 코드 +class userAuthService { + static async getUsers() { + const [results, fields, error] = await pool.query( + { + sql: "SELECT * FROM users", + timeout: 4000, // 40s + }, + function (error, results, fields) { + if (error) throw error; + // console.log(JSON.stringify(results)); + } + ); + return json(results); + } +} + +// // 파일 분리 +// class userAuthService { +// static async getUsers() { +// const users = await User.findAll(); // User.findAll() 타입문제 +// return users; +// } +// } + +module.exports = { userAuthService }; + +// // userRouter.js +// // option 3. 코드 파일 분리 +// // User.js -> userService.js에서 타입문제 발생 +// userAuthRouter.get("/userlist", async (req, res, next) => { +// try { +// const [results, fields, error] = await userAuthService.getUsers(); +// res.status(200).send(results); +// } catch (err) { +// next(err); +// } +// }); diff --git a/back/src/util/asyncHandler.js b/back/src/util/asyncHandler.js new file mode 100644 index 0000000..15b4c04 --- /dev/null +++ b/back/src/util/asyncHandler.js @@ -0,0 +1,12 @@ +const asyncHandler = (fn) => { + return async (req, res, next) => { + try { + await fn(req, res, next); + // next(err); + } catch (err) { + next(err); + } + }; +}; + +module.exports = asyncHandler; diff --git a/back/yarn.lock b/back/yarn.lock new file mode 100644 index 0000000..c464be4 --- /dev/null +++ b/back/yarn.lock @@ -0,0 +1,3269 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.19.3": + version "7.19.3" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz" + integrity sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw== + +"@babel/core@^7.19.3": + version "7.19.3" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz" + integrity sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.3" + "@babel/helper-compilation-targets" "^7.19.3" + "@babel/helper-module-transforms" "^7.19.0" + "@babel/helpers" "^7.19.0" + "@babel/parser" "^7.19.3" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.3" + "@babel/types" "^7.19.3" + "convert-source-map" "^1.7.0" + "debug" "^4.1.0" + "gensync" "^1.0.0-beta.2" + "json5" "^2.2.1" + "semver" "^6.3.0" + +"@babel/generator@^7.19.3": + version "7.19.3" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz" + integrity sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ== + dependencies: + "@babel/types" "^7.19.3" + "@jridgewell/gen-mapping" "^0.3.2" + "jsesc" "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz" + integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0", "@babel/helper-compilation-targets@^7.19.3": + version "7.19.3" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz" + integrity sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg== + dependencies: + "@babel/compat-data" "^7.19.3" + "@babel/helper-validator-option" "^7.18.6" + "browserslist" "^4.21.3" + "semver" "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.18.6": + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz" + integrity sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.19.0": + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz" + integrity sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "regexpu-core" "^5.1.0" + +"@babel/helper-define-polyfill-provider@^0.3.3": + version "0.3.3" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz" + integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + "debug" "^4.1.1" + "lodash.debounce" "^4.0.8" + "resolve" "^1.14.2" + "semver" "^6.1.2" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== + dependencies: + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-member-expression-to-functions@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz" + integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== + dependencies: + "@babel/types" "^7.18.9" + +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.0": + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz" + integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" + +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + +"@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.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz" + integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== + +"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": + version "7.19.1" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz" + integrity sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.19.1" + "@babel/types" "^7.19.0" + +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz" + integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== + dependencies: + "@babel/types" "^7.18.9" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helper-wrap-function@^7.18.9": + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz" + integrity sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg== + dependencies: + "@babel/helper-function-name" "^7.19.0" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" + +"@babel/helpers@^7.19.0": + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz" + integrity sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg== + dependencies: + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + "chalk" "^2.0.0" + "js-tokens" "^4.0.0" + +"@babel/node@^7.19.1": + version "7.19.1" + resolved "https://registry.npmjs.org/@babel/node/-/node-7.19.1.tgz" + integrity sha512-gfxJNrawPso6kx7SwKfAdX1rEzVc09speJLFKrdxuZXGlve92pjbB3nJVmuwrxNN4+jvytj2zvliNXuW6uaSOw== + dependencies: + "@babel/register" "^7.18.9" + "commander" "^4.0.1" + "core-js" "^3.25.1" + "node-environment-flags" "^1.0.5" + "regenerator-runtime" "^0.13.4" + "v8flags" "^3.1.1" + +"@babel/parser@^7.18.10", "@babel/parser@^7.19.3": + version "7.19.3" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz" + integrity sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz" + integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + +"@babel/plugin-proposal-async-generator-functions@^7.19.1": + version "7.19.1" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz" + integrity sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-class-static-block@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz" + integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz" + integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz" + integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.18.8" + +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz" + integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz" + integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@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-class-properties@^7.12.13": + 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-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz" + integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@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.10.4": + 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.10.4": + 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-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + 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-transform-arrow-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz" + integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-async-to-generator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz" + integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" + +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-block-scoping@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz" + integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-classes@^7.19.0": + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz" + integrity sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-compilation-targets" "^7.19.0" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + "globals" "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz" + integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-destructuring@^7.18.13": + version "7.18.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz" + integrity sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-for-of@^7.18.8": + version "7.18.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz" + integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== + dependencies: + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-modules-amd@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz" + integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "babel-plugin-dynamic-import-node" "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz" + integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "babel-plugin-dynamic-import-node" "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.19.0": + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz" + integrity sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A== + dependencies: + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.19.0" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-validator-identifier" "^7.18.6" + "babel-plugin-dynamic-import-node" "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": + version "7.19.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz" + integrity sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.19.0" + "@babel/helper-plugin-utils" "^7.19.0" + +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + +"@babel/plugin-transform-parameters@^7.18.8": + version "7.18.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz" + integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-regenerator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz" + integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "regenerator-transform" "^0.15.0" + +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-runtime@^7.19.1": + version "7.19.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz" + integrity sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + "babel-plugin-polyfill-corejs2" "^0.3.3" + "babel-plugin-polyfill-corejs3" "^0.6.0" + "babel-plugin-polyfill-regenerator" "^0.4.1" + "semver" "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-spread@^7.19.0": + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz" + integrity sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-unicode-escapes@^7.18.10": + version "7.18.10" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz" + integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/preset-env@^7.19.3": + version "7.19.3" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.3.tgz" + integrity sha512-ziye1OTc9dGFOAXSWKUqQblYHNlBOaDl8wzqf2iKXJAltYiR3hKHUKmkt+S9PppW7RQpq4fFCrwwpIDj/f5P4w== + dependencies: + "@babel/compat-data" "^7.19.3" + "@babel/helper-compilation-targets" "^7.19.3" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.19.1" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.18.9" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.18.9" + "@babel/plugin-transform-classes" "^7.19.0" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.18.13" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.18.6" + "@babel/plugin-transform-modules-commonjs" "^7.18.6" + "@babel/plugin-transform-modules-systemjs" "^7.19.0" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.18.8" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.19.0" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.19.3" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + core-js-compat "^3.25.1" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + "esutils" "^2.0.2" + +"@babel/register@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz" + integrity sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw== + dependencies: + "clone-deep" "^4.0.1" + "find-cache-dir" "^2.0.0" + "make-dir" "^2.1.0" + "pirates" "^4.0.5" + "source-map-support" "^0.5.16" + +"@babel/runtime@^7.8.4": + version "7.19.0" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz" + integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== + dependencies: + "regenerator-runtime" "^0.13.4" + +"@babel/template@^7.18.10": + version "7.18.10" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.19.3": + version "7.19.3" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz" + integrity sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.3" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.19.3" + "@babel/types" "^7.19.3" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.19.3", "@babel/types@^7.4.4": + version "7.19.3" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz" + integrity sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw== + dependencies: + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.19.1" + "to-fast-properties" "^2.0.0" + +"@glennsl/bs-json@^5.0.4": + version "5.0.4" + resolved "https://registry.npmjs.org/@glennsl/bs-json/-/bs-json-5.0.4.tgz" + integrity sha512-Th9DetZjRlMZrb74kgGJ44oWcoFyOTE884WlSuXft0Cd+J09vHRxiB7eVyK7Gthb4cSevsBBJDHYAbGGL25wPw== + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.16" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.16.tgz" + integrity sha512-LCQ+NeThyJ4k1W2d+vIKdxuSt9R3pQSZ4P92m7EakaYuXcVWbHuT5bjNcqLd4Rdgi6xYWYDvBJZJLZSLanjDcA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@mapbox/node-pre-gyp@^1.0.10": + version "1.0.10" + resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz" + integrity sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA== + 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" + +"@sindresorhus/is@^5.3.0": + version "5.3.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz" + integrity sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw== + +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: + "debug" "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: + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" + +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@^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" + +ansicolors@~0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz" + integrity sha512-tOIuy1/SK/dr94ZA0ckDohKXNeBNqZ4us6PjMVLs5h1w2GBB6uPtOknp2+VF4F/zcy9LI70W+Z+pE2Soajky1w== + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + 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" + +"array-flatten@1.1.1": + "integrity" "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + "version" "1.1.1" + +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.prototype.reduce@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz" + integrity sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw== + dependencies: + "safer-buffer" "~2.1.0" + +"assert-plus@^1.0.0", "assert-plus@1.0.0": + "integrity" "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "version" "1.0.0" + +"asynckit@^0.4.0": + "integrity" "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + "version" "0.4.0" + +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== + +axios@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/axios/-/axios-1.1.2.tgz" + integrity sha512-bznQyETwElsXl2RK7HLLwb5GPpOLlycxHCtrpDR/4RqqBzjARaOTo3jz4IgtntWUYee7Ne4S8UHd92VCuzPaWA== + dependencies: + "follow-redirects" "^1.15.0" + "form-data" "^4.0.0" + "proxy-from-env" "^1.1.0" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + "object.assign" "^4.1.0" + +babel-plugin-polyfill-corejs2@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" + integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.3" + "semver" "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz" + integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + "core-js-compat" "^3.25.1" + +babel-plugin-polyfill-regenerator@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz" + integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + +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== + +bcrypt@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.0.tgz" + integrity sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.10" + "node-addon-api" "^5.0.0" + +bignumber.js@9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz" + integrity sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A== + +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== + +bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-2.0.0.tgz" + integrity sha512-NmOLApC80+n+P28y06yHgwGlOCkq/X4jRh5s590959FZXSrM+I/61h0xxuIaYsg0mD44mEAZYG/rnclWuRoz+A== + +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" + +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" + +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.3, browserslist@^4.21.4: + version "4.21.4" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz" + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== + dependencies: + "caniuse-lite" "^1.0.30001400" + "electron-to-chromium" "^1.4.251" + "node-releases" "^2.0.6" + "update-browserslist-db" "^1.0.9" + +bs-mysql2@^10.0.2: + version "10.0.2" + resolved "https://registry.npmjs.org/bs-mysql2/-/bs-mysql2-10.0.2.tgz" + integrity sha512-KExEeQx+qfiDCxVHzC9noeLsPqlzJDSj7FUSvmIWMJ+rkiXDo9wp6LVbEZ5TGc9MAR9jWNrhlhjpHS3MnIytNA== + dependencies: + "mysql2" "^1.6.5" + +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== + +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.0, call-bind@^1.0.2: + 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" + +caniuse-lite@^1.0.30001400: + version "1.0.30001418" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz" + integrity sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg== + +cardinal@0.4.4: + version "0.4.4" + resolved "https://registry.npmjs.org/cardinal/-/cardinal-0.4.4.tgz" + integrity sha512-3MxV0o9wOpQcobrcSrRpaSxlYkohCcZu0ytOjJUww/Yo/223q4Ecloo7odT+M0SI5kPgb1JhvSaF4EEuVXOLAQ== + dependencies: + "ansicolors" "~0.2.1" + "redeyed" "~0.4.0" + +chalk@^2.0.0: + 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" + +chokidar@^3.5.2: + 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== + +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" + +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-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@^4.0.1: + version "4.1.1" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +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" + +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== + +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.4" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +"convert-source-map@^1.7.0": + "integrity" "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" + "version" "1.9.0" + +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-js-compat@^3.25.1: + version "3.25.5" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz" + integrity sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA== + dependencies: + browserslist "^4.21.4" + +core-js@^3.25.1: + version "3.25.5" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.25.5.tgz" + integrity sha512-nbm6eZSjm+ZuBQxCUPQKQCoUEfFOXjUZ8dTTyikyKaWrTYmAVbykQfwsKE5dBK88u3QCkCrzsx/PPlKfhsvgpw== + +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: + "assert-plus" "^1.0.0" + +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.1.1" + +debug@4, debug@^4.1.0, debug@^4.1.1: + 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@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + "ms" "2.0.0" + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + "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== + +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@^1.4.1: + version "1.5.1" + resolved "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz" + integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== + +denque@^2.0.1: + 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: + 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-libc@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + +dotenv@^16.0.3: + version "16.0.3" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz" + integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== + +double-ended-queue@2.0.0-0: + version "2.0.0-0" + resolved "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.0.0-0.tgz" + integrity sha512-t5ouWOpItmHrm0J0+bX/cFrIjBFWnJkk5LbIJq6bbU/M4aLX2c3LrM4QYsBptwvlPe3WzdpQefQ0v1pe/A5wjg== + +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" + +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== + +"ecdsa-sig-formatter@1.0.11": + "integrity" "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==" + "resolved" "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" + "version" "1.0.11" + dependencies: + "safe-buffer" "^5.0.1" + +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== + +es-abstract@^1.19.0, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.1: + version "1.20.4" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz" + integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + dependencies: + "call-bind" "^1.0.2" + "es-to-primitive" "^1.2.1" + "function-bind" "^1.1.1" + "function.prototype.name" "^1.1.5" + "get-intrinsic" "^1.1.3" + "get-symbol-description" "^1.0.0" + "has" "^1.0.3" + "has-property-descriptors" "^1.0.0" + "has-symbols" "^1.0.3" + "internal-slot" "^1.0.3" + "is-callable" "^1.2.7" + "is-negative-zero" "^2.0.2" + "is-regex" "^1.1.4" + "is-shared-array-buffer" "^1.0.2" + "is-string" "^1.0.7" + "is-weakref" "^1.0.2" + "object-inspect" "^1.12.2" + "object-keys" "^1.1.1" + "object.assign" "^4.1.4" + "regexp.prototype.flags" "^1.4.3" + "safe-regex-test" "^1.0.0" + "string.prototype.trimend" "^1.0.5" + "string.prototype.trimstart" "^1.0.5" + "unbox-primitive" "^1.0.2" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + "is-callable" "^1.1.4" + "is-date-object" "^1.0.1" + "is-symbol" "^1.0.2" + +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.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +esprima@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz" + integrity sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA== + +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-async-handler@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/express-async-handler/-/express-async-handler-1.2.0.tgz" + integrity sha512-rCSVtPXRmQSW8rmik/AIb2P0op6l7r1fMW538yyvTMltCO4xQEWMmobfrIxN2V1/mVrgxB8Az3reYF6yUZw37w== + +express@^4.18.2: + 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@~3.0.2": + "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + "version" "3.0.2" + +"extsprintf@^1.2.0", "extsprintf@1.3.0": + "integrity" "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + "version" "1.3.0" + +"fast-deep-equal@^3.1.1": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" + +"fast-json-stable-stringify@^2.0.0": + "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + "version" "2.1.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-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + "commondir" "^1.0.1" + "make-dir" "^2.0.0" + "pkg-dir" "^3.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + "locate-path" "^3.0.0" + +"follow-redirects@^1.15.0": + "integrity" "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" + "version" "1.15.2" + +"forever-agent@~0.6.1": + "integrity" "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" + "resolved" "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" + "version" "0.6.1" + +follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +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.6" + "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== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +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== + +"fs.realpath@^1.0.0": + "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "es-abstract" "^1.19.0" + "functions-have-names" "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +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" + +generate-function@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz" + integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== + dependencies: + "is-property" "^1.0.2" + +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-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + "function-bind" "^1.1.1" + "has" "^1.0.3" + "has-symbols" "^1.0.3" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + "call-bind" "^1.0.2" + "get-intrinsic" "^1.1.1" + +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: + "assert-plus" "^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: + "is-glob" "^4.0.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== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +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-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + "ajv" "^6.12.3" + "har-schema" "^2.0.0" + +has-symbols@^1.0.2, 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.0" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + "get-intrinsic" "^1.1.1" + +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== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + "has-symbols" "^1.0.2" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + "function-bind" "^1.1.1" + +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: + "parse-passwd" "^1.0.0" + +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: + "depd" "2.0.0" + "inherits" "2.0.4" + "setprototypeof" "1.2.0" + "statuses" "2.0.1" + "toidentifier" "1.0.1" + +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: + "assert-plus" "^1.0.0" + "jsprim" "^1.2.2" + "sshpk" "^1.7.0" + +iconv-lite@^0.5.0: + version "0.5.2" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz" + integrity sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag== + dependencies: + "agent-base" "6" + "debug" "4" + +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" + +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" + integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== + +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: + "safer-buffer" ">= 2.1.2 < 3" + +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +"inflight@^1.0.4": + "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + "get-intrinsic" "^1.1.0" + "has" "^1.0.3" + "side-channel" "^1.0.4" + +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-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + "has-bigints" "^1.0.1" + +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-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + "call-bind" "^1.0.2" + "has-tostringtag" "^1.0.0" + +is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.9.0: + version "2.10.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== + dependencies: + "has" "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + "has-tostringtag" "^1.0.0" + +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.1, 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-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + "has-tostringtag" "^1.0.0" + +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-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-property@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" + integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== + +is-regex@^1.1.4: + 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-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + "call-bind" "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + "has-tostringtag" "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + "has-symbols" "^1.0.2" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + "call-bind" "^1.0.2" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +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== + +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== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json5@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +jsonwebtoken@^8.5.1: + version "8.5.1" + resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz" + integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== + 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" "^5.6.0" + +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: + "assert-plus" "1.0.0" + "extsprintf" "1.3.0" + "json-schema" "0.4.0" + "verror" "1.10.0" + +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: + "buffer-equal-constant-time" "1.0.1" + "ecdsa-sig-formatter" "1.0.11" + "safe-buffer" "^5.0.1" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + "p-locate" "^3.0.0" + "path-exists" "^3.0.0" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +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.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.once@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +long@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/long/-/long-4.0.0.tgz" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + +lru-cache@2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz" + integrity sha512-dVmQmXPBlTgFw77hm60ud//l2bCuDKkqC2on1EBoM7s9Urm9IQDrnujwZ93NFnAq0dVZ0HBXTS7PwEG+YE7+EQ== + +lru-cache@^4.1.3: + version "4.1.5" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + "pseudomap" "^1.0.2" + "yallist" "^2.1.2" + +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" + +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" + +"lru-cache@2.5.0": + "integrity" "sha512-dVmQmXPBlTgFw77hm60ud//l2bCuDKkqC2on1EBoM7s9Urm9IQDrnujwZ93NFnAq0dVZ0HBXTS7PwEG+YE7+EQ==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz" + "version" "2.5.0" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + "pify" "^4.0.1" + "semver" "^5.6.0" + +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" + +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== + +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== + +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@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +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" + +minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +minipass@^3.0.0: + version "3.3.4" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + dependencies: + "yallist" "^4.0.0" + +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@^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== + +moment-timezone@^0.5.37: + version "0.5.37" + resolved "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.37.tgz" + integrity sha512-uEDzDNFhfaywRl+vwXxffjjq1q0Vzr+fcQpQ1bU0kbzorfS7zVtZnCnGc8mhWmF39d4g4YriF6kwA75mJKE/Zg== + dependencies: + "moment" ">= 2.9.0" + +"moment@>= 2.9.0", moment@^2.29.4: + version "2.29.4" + resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + +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, ms@^2.1.1: + 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.5-lts.1: + version "1.4.5-lts.1" + resolved "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz" + integrity sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ== + 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" + +mysql2-promise@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/mysql2-promise/-/mysql2-promise-0.1.4.tgz" + integrity sha512-/h8ubU/36aIPpbfB6CENw9ZdbzIhZMZOIbstJUHVKp4J9JBRSLScrYImVx+3yZilgag732UhpQMMK5+ktdhLCw== + dependencies: + "bignumber.js" "9.0.0" + "readable-stream" "2.3.7" + "safe-buffer" "5.1.2" + "sqlstring" "2.3.1" + +mysql2@^0.15.7: + version "0.15.8" + resolved "https://registry.npmjs.org/mysql2/-/mysql2-0.15.8.tgz" + integrity sha512-3x5o6C20bfwJYPSoT74MOoad7/chJoq4qXHDL5VAuRBBrIyErovLoj04Dz/5EY9X2kTxWSGNiTegtxpROTd2YQ== + dependencies: + "mysql2" "^0.15.7" + "q" "^1.3.0" + +mysql2@^1.6.5: + version "1.7.0" + resolved "https://registry.npmjs.org/mysql2/-/mysql2-1.7.0.tgz" + integrity sha512-xTWWQPjP5rcrceZQ7CSTKR/4XIDeH/cRkNH/uzvVGQ7W5c7EJ0dXeJUusk7OKhIoHj7uFKUxDVSCfLIl+jluog== + dependencies: + "bn.js" "2.0.0" + "cardinal" "0.4.4" + "double-ended-queue" "2.0.0-0" + "named-placeholders" "0.1.3" + "readable-stream" "1.0.33" + +mysql2@^2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz" + integrity sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA== + dependencies: + "denque" "^1.4.1" + "generate-function" "^2.3.1" + "iconv-lite" "^0.5.0" + "long" "^4.0.0" + "lru-cache" "^5.1.1" + "named-placeholders" "^1.1.2" + "seq-queue" "^0.0.5" + "sqlstring" "^2.3.1" + +mysql@^2.18.1: + version "2.18.1" + resolved "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz" + integrity sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig== + dependencies: + "denque" "^2.0.1" + "generate-function" "^2.3.1" + "iconv-lite" "^0.6.3" + "long" "^4.0.0" + "lru-cache" "^6.0.0" + "named-placeholders" "^1.1.2" + "seq-queue" "^0.0.5" + "sqlstring" "^2.3.2" + +named-placeholders@0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/named-placeholders/-/named-placeholders-0.1.3.tgz" + integrity sha512-Mt79RtxZ6MYTIEemPGv/YDKpbuavcAyGHb0r37xB2mnE5jej3uBzc4+nzOeoZ4nZiii1M32URKt9IjkSTZAmTA== + dependencies: + "lru-cache" "^4.1.3" + +named-placeholders@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz" + integrity sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA== + dependencies: + "lru-cache" "2.5.0" + +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== + +node-addon-api@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz" + integrity sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA== + +node-environment-flags@^1.0.5: + version "1.0.6" + resolved "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz" + integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== + dependencies: + "object.getownpropertydescriptors" "^2.0.3" + "semver" "^5.7.0" + +node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + "whatwg-url" "^5.0.0" + +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + +nodemon@^2.0.20: + version "2.0.20" + resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz" + integrity sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw== + dependencies: + "chokidar" "^3.5.2" + "debug" "^3.2.7" + "ignore-by-default" "^1.0.1" + "minimatch" "^3.1.2" + "pstree.remy" "^1.1.8" + "semver" "^5.7.1" + "simple-update-notifier" "^1.0.7" + "supports-color" "^5.5.0" + "touch" "^3.1.0" + "undefsafe" "^2.0.5" + +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@~1.0.10: + version "1.0.10" + resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" + integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== + dependencies: + "abbrev" "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== + +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" + +"oauth-sign@~0.9.0": + "integrity" "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "resolved" "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" + "version" "0.9.0" + +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.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +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== + +object.assign@^4.1.0, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "has-symbols" "^1.0.3" + "object-keys" "^1.1.1" + +object.getownpropertydescriptors@^2.0.3: + version "2.1.4" + resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz" + integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ== + dependencies: + "array.prototype.reduce" "^1.0.4" + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "es-abstract" "^1.20.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" + +once@^1.3.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" + +p-limit@^2.0.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-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + "p-limit" "^2.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== + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" + integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== + +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-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-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@^0.12.7": + "integrity" "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==" + "resolved" "https://registry.npmjs.org/path/-/path-0.12.7.tgz" + "version" "0.12.7" + dependencies: + "process" "^0.11.1" + "util" "^0.10.3" + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pirates@^4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + "find-up" "^3.0.0" + +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== + +"process@^0.11.1": + "integrity" "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + "resolved" "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + "version" "0.11.10" + +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== + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + +pstree.remy@^1.1.8: + version "1.1.8" + resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + +q@^1.3.0: + version "1.5.1" + resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +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" + +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" + +readable-stream@1.0.33: + version "1.0.33" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz" + integrity sha512-72KxhcKi8bAvHP/cyyWSP+ODS5ef0DIRs0OzrhGXw31q41f19aoELCbvd42FjhpyEDxQMRiiC5rq9rfE5PzTqg== + 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.3.7, readable-stream@^2.2.2: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.1" + "isarray" "0.0.1" + "string_decoder" "~0.10.x" + +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" + +redeyed@~0.4.0: + version "0.4.4" + resolved "https://registry.npmjs.org/redeyed/-/redeyed-0.4.4.tgz" + integrity sha512-pnk1vsaNLu1UAAClKsImKz9HjBvg9i8cbRqTRzJbiCjGF0fZSMqpdcA5W3juO3c4etFvTrabECkq9wjC45ZyxA== + dependencies: + "esprima" "~1.0.4" + +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + dependencies: + "regenerate" "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +"regenerator-runtime@^0.13.4": + "integrity" "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==" + "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz" + "version" "0.13.10" + +regenerator-transform@^0.15.0: + version "0.15.0" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz" + integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "functions-have-names" "^1.2.2" + +regexpu-core@^5.1.0: + version "5.2.1" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz" + integrity sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ== + dependencies: + "regenerate" "^1.4.2" + "regenerate-unicode-properties" "^10.1.0" + "regjsgen" "^0.7.1" + "regjsparser" "^0.9.1" + "unicode-match-property-ecmascript" "^2.0.0" + "unicode-match-property-value-ecmascript" "^2.0.0" + +regjsgen@^0.7.1: + version "0.7.1" + resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz" + integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA== + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + "jsesc" "~0.5.0" + +resolve@^1.14.2: + version "1.22.1" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + "aws-sign2" "~0.7.0" + "aws4" "^1.8.0" + "caseless" "~0.12.0" + "combined-stream" "~1.0.6" + "extend" "~3.0.2" + "forever-agent" "~0.6.1" + "form-data" "~2.3.2" + "har-validator" "~5.1.3" + "http-signature" "~1.2.0" + "is-typedarray" "~1.0.0" + "isstream" "~0.1.2" + "json-stringify-safe" "~5.0.1" + "mime-types" "~2.1.19" + "oauth-sign" "~0.9.0" + "performance-now" "^2.1.0" + "qs" "~6.5.2" + "safe-buffer" "^5.1.2" + "tough-cookie" "~2.5.0" + "tunnel-agent" "^0.6.0" + "uuid" "^3.3.2" + +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: + "is-core-module" "^2.9.0" + "path-parse" "^1.0.7" + "supports-preserve-symlinks-flag" "^1.0.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, 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.2.1, safe-buffer@^5.0.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-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + "call-bind" "^1.0.2" + "get-intrinsic" "^1.1.3" + "is-regex" "^1.1.4" + +"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== + +semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.5: + version "7.3.8" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + "lru-cache" "^6.0.0" + +semver@~7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +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" + +seq-queue@^0.0.5: + version "0.0.5" + resolved "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz" + integrity sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q== + +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== + +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" + +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.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== + +simple-update-notifier@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz" + integrity sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew== + dependencies: + "semver" "~7.0.0" + +source-map-support@^0.5.16: + 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": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +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== + +"sqlstring@^2.3.2": + "integrity" "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==" + "resolved" "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz" + "version" "2.3.3" + +sqlstring@^2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz" + integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg== + +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-width@^1.0.2 || 2 || 3 || 4", 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.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "es-abstract" "^1.19.5" + +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.4" + "es-abstract" "^1.19.5" + +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: + "has-flag" "^3.0.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +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: + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "minipass" "^3.0.0" + "minizlib" "^2.1.1" + "mkdirp" "^1.0.3" + "yallist" "^4.0.0" + +"to-fast-properties@^2.0.0": + "integrity" "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + "version" "2.0.0" + +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + "is-number" "^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== + +tar@^6.1.11: + version "6.1.11" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +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: + "psl" "^1.1.28" + "punycode" "^2.1.1" + +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== + +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + "safe-buffer" "^5.0.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +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@^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== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + "call-bind" "^1.0.2" + "has-bigints" "^1.0.2" + "has-symbols" "^1.0.3" + "which-boxed-primitive" "^1.0.2" + +undefsafe@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" + integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + "unicode-canonical-property-names-ecmascript" "^2.0.0" + "unicode-property-aliases-ecmascript" "^2.0.0" + +"unicode-match-property-value-ecmascript@^2.0.0": + "integrity" "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" + "resolved" "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz" + "version" "2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +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.9: + version "1.0.10" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + dependencies: + "punycode" "^2.1.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== + +"util@^0.10.3": + "integrity" "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==" + "resolved" "https://registry.npmjs.org/util/-/util-0.10.4.tgz" + "version" "0.10.4" + dependencies: + "inherits" "2.0.3" + +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== + +v8flags@^3.1.1: + version "3.2.0" + resolved "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz" + integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== + dependencies: + "homedir-polyfill" "^1.0.1" + +"vary@^1", "vary@~1.1.2": + "integrity" "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + "resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + "version" "1.1.2" + +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== + +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== + +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" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + "is-bigint" "^1.0.1" + "is-boolean-object" "^1.1.0" + "is-number-object" "^1.0.4" + "is-string" "^1.0.5" + "is-symbol" "^1.0.3" + +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" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +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== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== + +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== diff --git a/frontend/.env b/frontend/.env new file mode 100644 index 0000000..de40d5f --- /dev/null +++ b/frontend/.env @@ -0,0 +1,11 @@ +VITE_KAKAOMAP_API_KEY = f8f47f5bfde4690e5a2d6f935c00cf65 + +VITE_KAKAO_REST_API_KEY = 9fd6d9d615c25ff01b60a3a988e942bc + +VITE_NAVER_CLIENT_ID = JRa7NrbtcesvuNyjkj6I + +VITE_NAVER_CALLBACK_URL = "http://127.0.0.1:5173/" + +VITE_KAKAO_REDIRECT_URL = "http://127.0.0.1:5173/login/oauth2/code/kakao" + +VITE_BACK_PORT_NUM = 5001 \ No newline at end of file diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..f79f7fd --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,23 @@ + + + + + + + + + + ZeroLand + + +
+ + + diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..01afe57 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,42 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@nivo/bar": "^0.80.0", + "@nivo/core": "^0.80.0", + "@reduxjs/toolkit": "^1.8.6", + "axios": "^1.1.2", + "bootstrap": "^5.2.2", + "chart.js": "^3.9.1", + "dotenv": "^16.0.3", + "font-awesome": "^4.7.0", + "react": "^18.2.0", + "react-bootstrap": "^2.5.0", + "react-chartjs-2": "^4.3.1", + "react-dom": "^18.2.0", + "react-error-boundary": "^3.1.4", + "react-icons": "^4.4.0", + "react-redux": "^8.0.4", + "react-router-dom": "^6.4.2", + "react-theme-toggle-button": "^1.1.0", + "recoil": "^0.7.6", + "redux-persist": "^6.0.0", + "styled-components": "^5.3.6", + "styled-reset": "^4.4.2", + "sweetalert": "^2.1.2", + "swiper": "^8.4.4" + }, + "devDependencies": { + "@types/react": "^18.0.17", + "@types/react-dom": "^18.0.6", + "@vitejs/plugin-react": "^2.1.0", + "vite": "^3.1.0" + } +} diff --git a/frontend/public/img/background.jpg b/frontend/public/img/background.jpg new file mode 100644 index 0000000..df4f2ea Binary files /dev/null and b/frontend/public/img/background.jpg differ diff --git "a/frontend/public/img/btnW_\354\231\204\354\204\261\355\230\225.png" "b/frontend/public/img/btnW_\354\231\204\354\204\261\355\230\225.png" new file mode 100644 index 0000000..b0c1306 Binary files /dev/null and "b/frontend/public/img/btnW_\354\231\204\354\204\261\355\230\225.png" differ diff --git a/frontend/public/img/graph2.png b/frontend/public/img/graph2.png new file mode 100644 index 0000000..bdb8657 Binary files /dev/null and b/frontend/public/img/graph2.png differ diff --git a/frontend/public/img/graph3.png b/frontend/public/img/graph3.png new file mode 100644 index 0000000..332d15c Binary files /dev/null and b/frontend/public/img/graph3.png differ diff --git a/frontend/public/img/introduction_zeromap.png b/frontend/public/img/introduction_zeromap.png new file mode 100644 index 0000000..6807ca8 Binary files /dev/null and b/frontend/public/img/introduction_zeromap.png differ diff --git a/frontend/public/img/kakao_login_large_narrow.png b/frontend/public/img/kakao_login_large_narrow.png new file mode 100644 index 0000000..894c223 Binary files /dev/null and b/frontend/public/img/kakao_login_large_narrow.png differ diff --git a/frontend/public/img/kakao_login_medium_narrow.png b/frontend/public/img/kakao_login_medium_narrow.png new file mode 100644 index 0000000..09bb358 Binary files /dev/null and b/frontend/public/img/kakao_login_medium_narrow.png differ diff --git a/frontend/public/img/kakao_login_medium_wide.png b/frontend/public/img/kakao_login_medium_wide.png new file mode 100644 index 0000000..c882acc Binary files /dev/null and b/frontend/public/img/kakao_login_medium_wide.png differ diff --git a/frontend/public/img/logo.png b/frontend/public/img/logo.png new file mode 100644 index 0000000..ae72828 Binary files /dev/null and b/frontend/public/img/logo.png differ diff --git a/frontend/public/img/pic05.jpg b/frontend/public/img/pic05.jpg new file mode 100644 index 0000000..f2fc227 Binary files /dev/null and b/frontend/public/img/pic05.jpg differ diff --git a/frontend/public/img/zeroland_logo.png b/frontend/public/img/zeroland_logo.png new file mode 100644 index 0000000..c2aa107 Binary files /dev/null and b/frontend/public/img/zeroland_logo.png differ diff --git a/frontend/public/img/zerowaste.jpeg b/frontend/public/img/zerowaste.jpeg new file mode 100644 index 0000000..933a248 Binary files /dev/null and b/frontend/public/img/zerowaste.jpeg differ diff --git a/frontend/public/vite.svg b/frontend/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/frontend/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/App.css b/frontend/src/App.css new file mode 100644 index 0000000..5f7dbaa --- /dev/null +++ b/frontend/src/App.css @@ -0,0 +1,54 @@ +.app-layout-wrapper { + width: 100%; + height: 100vh; + min-width: 550px; + background-image: url("/img/background.jpg"); + background-repeat: no-repeat; + background-size: cover; + background-position: top center; + background-attachment: fixed; + margin: 0 auto; + animation: fadein 5s ease 3s; + -webkit-animation: fadein 3s; +} +@keyframes fadein { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@-webkit-keyframes fadein { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +.welcome { + color: #fff; + position: relative; + text-decoration: none; +} + +.main { + position: absolute; + top: 8rem; + left: 15rem; + animation: transY 2s ease-in-out; + font-size: 40px; +} +@keyframes transY { + 0% { + transform: translateY(300px); + opacity: 0; + } + 100% { + transform: translateY(0px); + opacity: 1; + } +} \ No newline at end of file diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx new file mode 100644 index 0000000..1b0222c --- /dev/null +++ b/frontend/src/App.jsx @@ -0,0 +1,107 @@ + +import React, { lazy, Suspense, useEffect, useReducer, useState, createContext } from "react"; +import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; + +const Introduction = lazy(() => import("./components/Pages/Introduction")); +const Login = lazy(() => import("./components/Pages/Login")); +const Landing = lazy(() => import("./components/Pages/Landing")); +const Map = lazy(() => import("./components/Pages/Map")); +const Register = lazy(() => import("./components/Pages/Register")); +const Mypage = lazy(() => import("./components/Pages/Mypage")); + +import StorePage from "./components/Map/StorePage"; +import "./App.css"; +import { ErrorBoundary } from "react-error-boundary"; +import UiErrorFallback from "./components/Common/UiErrorFallback"; + +import LayOut from "./components/Common/LayOut"; +import * as Api from "./utils/Api"; +import { loginReducer } from "./utils/reducer"; +import KakaoAuth from "./components/User/KakaoAuth"; + +export const UserStateContext = createContext(null); +export const DispatchContext = createContext(null); + +const mapPathToComponent = { + introduction: () => , + login: () => , + "/": () => , + map: () => , + mypage: () => , + register: () => , + storepage: () => , +}; + +const setRoute = () => { + return Object.keys(mapPathToComponent).map((path) => ( + + )); +}; + +function App() { + + //useReducer(첫 번째 파라미터에는 리듀서 함수, 두 번째 파라미터에는 리듀서의 기본 값을 넣는다.) + //useReducer를 사용하면 state값과 dispatch 함수를 받아온다. 여기서 state는 현재 가리키고 있는 상태 / dispatch는 액션을 '발생시키는' 함수. + //dispatch(action: 어떤 값도 가능)과 같은 형태로 함수 안에 파라미터로 액션 값을 넣어주면 리듀서 함수가 호출. + + const [userState, dispatch] = useReducer(loginReducer, { + user: null, + }); + const [isFetchCompleted, setIsFetchCompleted] = useState(false); + + useEffect(() => { + console.log(userState); + }, [userState]) + + const fetchCurrentUser = async() => { + try { + const res = await Api.get("user"); + const currentUser = res.data; + console.log(currentUser); + + dispatch({ + type: "LOGIN", + payload: currentUser, + }); + } + catch (err) { + console.log(err.message); + } + // fetch 과정이 끝났으므로 + setIsFetchCompleted(true); + } + + // 이 다음에!!! useEffect 사용!!! + useEffect(() => { + fetchCurrentUser(); + }, []); + + if (!isFetchCompleted) { + return "loading..." + } + + return ( + <> + + + + Loading...} + > + + + + { setRoute() } + } /> + + + + + + + + + ); +} + +export default App; \ No newline at end of file diff --git a/frontend/src/assets/main.css b/frontend/src/assets/main.css new file mode 100644 index 0000000..196efa4 --- /dev/null +++ b/frontend/src/assets/main.css @@ -0,0 +1,8 @@ +ul.actions.special { + -moz-justify-content: center; + -webkit-justify-content: center; + -ms-justify-content: center; + justify-content: center; + width: 100%; + margin-left: 0; +} \ No newline at end of file diff --git a/frontend/src/assets/react.svg b/frontend/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/frontend/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/components/Common/LayOut.jsx b/frontend/src/components/Common/LayOut.jsx new file mode 100644 index 0000000..b90c193 --- /dev/null +++ b/frontend/src/components/Common/LayOut.jsx @@ -0,0 +1,16 @@ +import React from "react"; +import Header from "./Navbar"; +//* children == Page Component; +const pageBaseStyle = {}; +const LayOut = ({ children }) => { + return ( +
+
+ {children} +
+ ); +}; +export default LayOut; \ No newline at end of file diff --git a/frontend/src/components/Common/Navbar.jsx b/frontend/src/components/Common/Navbar.jsx new file mode 100644 index 0000000..b9e7a13 --- /dev/null +++ b/frontend/src/components/Common/Navbar.jsx @@ -0,0 +1,64 @@ +import React, { useContext } from "react"; +import { Nav, Navbar, Container, NavDropdown } from "react-bootstrap"; +import { useLocation, useNavigate } from "react-router-dom"; +import { DispatchContext, UserStateContext } from "../../App"; + + +function Header () { + const navigate = useNavigate(); + + //useLocation <- 현재 url 정보를 가져오는 함수 + const location = useLocation(); + // console.log(location); + + const userState = useContext(UserStateContext); + const dispatch = useContext(DispatchContext); + console.log(userState) + + const isLogin = !!userState.user; + + // 로그아웃은 type을 바꿔 주면 됨 + const isLogout = () => { + sessionStorage.removeItem("userToken"); + dispatch({ type: "LOGOUT" }); + navigate("/"); + } + + + return ( + + + + + Introduction + + + Map + +
+ + + + +
+
+
+ ); +} + +export default Header; \ No newline at end of file diff --git a/frontend/src/components/Common/ReviewCard.jsx b/frontend/src/components/Common/ReviewCard.jsx new file mode 100644 index 0000000..252f995 --- /dev/null +++ b/frontend/src/components/Common/ReviewCard.jsx @@ -0,0 +1,42 @@ +import React from "react" +import StarRate from "./StarRate.jsx" + +function ReviewCard({...props}) { + const {review}= props // + console.log(review.star) + return( +
+
+
+ {/* ... */} + {"photo" in review ? review.photo : "사진"} +
+
+
+ +
+

매장 + {"store_name" in review ? review.store_name : "매장이름"} +

+
+ +
+

+ {"created_time" in review ? review.created_time : ""}

+
+
+

내용 + {"description" in review ? review.description : ""} +

+
🧡x + {/* {"like_reviews" in review ? review.like_reviews : 0} */} +
+
+
+
+
+
+ ) +} + +export default ReviewCard; diff --git a/frontend/src/components/Common/StarRate.jsx b/frontend/src/components/Common/StarRate.jsx new file mode 100644 index 0000000..64bf392 --- /dev/null +++ b/frontend/src/components/Common/StarRate.jsx @@ -0,0 +1,60 @@ +import styled from "styled-components"; +import { useState, useEffect } from "react"; + +function StarRate({star}) { + const AVR_RATE = star*20; + const STAR_IDX_ARR = ['first', 'second', 'third', 'fourth', 'last']; + const [ratesResArr, setRatesResArr] = useState([0, 0, 0, 0, 0]); + const calcStarRates = () => { + let tempStarRatesArr = [0, 0, 0, 0, 0]; + let starVerScore = (AVR_RATE * 70) / 100; + let idx = 0; + while (starVerScore > 14) { + tempStarRatesArr[idx] = 14; + idx += 1; + starVerScore -= 14; + } + tempStarRatesArr[idx] = starVerScore; + console.log(tempStarRatesArr) + return tempStarRatesArr; + }; + useEffect(() => { + setRatesResArr(calcStarRates) + }, []) + return ( + + {star} + {STAR_IDX_ARR.map((item, idx) => { + return + + + + + + + + + }) + } + + ) +} + +export default StarRate; + +const StarRateWrap = styled.div` + display: flex; + align-items: center; + width: 100%; + margin: 0 0 0 15px; + .star_icon { + display: inline-flex; + margin-right: 5px; + } + +` \ No newline at end of file diff --git a/frontend/src/components/Common/StoreCard.jsx b/frontend/src/components/Common/StoreCard.jsx new file mode 100644 index 0000000..ec0dfb5 --- /dev/null +++ b/frontend/src/components/Common/StoreCard.jsx @@ -0,0 +1,40 @@ +import React from "react" +import StarRate from "./StarRate.jsx" +import * as StoreInfoCard from "../StyledComponents/StoreCardStyled"; + +function StoreCard({...props}) { + const {favStore}= props + console.log(favStore.avg_star) + + return( +
+
+
+
+ +
+
+ {/*

{favStore.name}

+
{favStore.address_detail}
+
*/} +

+ {/* {"store_name" in favStore ? favStore.store_name : "매장 명"} */} + {"name" in favStore ? favStore.name : "매장 명"} +

+
+ {"address_detail" in favStore ? favStore.address_detail : "상세 주소"} +
+
+
+

+ {"description" in favStore ? favStore.description : "설명"} +

+
+
+
+
+
+ ) +} + +export default StoreCard; diff --git a/frontend/src/components/Common/UiErrorFallback.jsx b/frontend/src/components/Common/UiErrorFallback.jsx new file mode 100644 index 0000000..894778f --- /dev/null +++ b/frontend/src/components/Common/UiErrorFallback.jsx @@ -0,0 +1,20 @@ +import React from "react"; + +const UiErrorFallback = ({ error }) => { + console.log({ error }); + return ( +
+ {error.error} +
+ This is UI Error + +
+ ); +}; +export default UiErrorFallback; \ No newline at end of file diff --git a/frontend/src/components/Introduction/AddBarChart.jsx b/frontend/src/components/Introduction/AddBarChart.jsx new file mode 100644 index 0000000..563c6f2 --- /dev/null +++ b/frontend/src/components/Introduction/AddBarChart.jsx @@ -0,0 +1,23 @@ +import { useState, useRef } from "react"; +import { Bar } from "react-chartjs-2"; +import "chart.js/auto"; + +export const BarChart = () => { + const ref = useRef(); + + const data = { + labels: ["제품을 구매할 때 친환경적인 대안이 없거나 품질이 떨어진다", "친환경적인 행동은 시간이 많이 소비된다", "친환경적인 행동은 비용이 많이 든다", "환경에 영향을 주는 행동이 습관이 되어 바꾸기 어렵다", "친환경적인 행동이 건강에는 오히려 해가 될 수 있다", "친환경적인 행동 실천 방법을 모른다", "친환경적인 행동을 해도 문제는 개선되지 않을 것이다", "주변의 친환경적인 행동을 비웃거나 무시한다", "기타"], + datasets: [ + { + label: "확률(%)", + data: [44.1, 43.7, 41, 36.3, 33.6, 23.6, 17.9, 11.2, 1.8], + fill: true, + backgroundColor: "rgba(75,192,192,0.4)", + borderColor: "rgba(75,192,192,1)", + }, + ], + }; + + return ; +}; +export default BarChart; \ No newline at end of file diff --git a/frontend/src/components/Introduction/Chart2.jsx b/frontend/src/components/Introduction/Chart2.jsx new file mode 100644 index 0000000..cb6679f --- /dev/null +++ b/frontend/src/components/Introduction/Chart2.jsx @@ -0,0 +1,31 @@ +import { useState, useRef } from "react"; +import { Bar } from "react-chartjs-2"; +import "chart.js/auto"; // ADD THIS + +export const Chart2 = () => { + const ref = useRef(); + + const data = { + labels: [ + //x 축 + "기타", "주변 사람들이 친환경적으로 행동하는 것을 비웃거나 무시한다", "친환경적 행동을 해도 환경문제가 개선되지 않을 것이라 실천의 필요를 못 느낀다", "친환경 행동을 실천하고 싶지만 방법을 잘 모른다", "친환경적인 행동이 나의 건강에는 오히려 해가 될 수 있다(예: 미세먼지 많은 날 걸어서 이동)", "환경에 나쁜 영향을 주는 행동들이 이미 습관이 되어 바꾸기 어렵다", "친환경적인 행동은 비용이 많이 든다", "친환경적인 행동(예: 대중교통 이용)은 시간이 많이 소비된다", "제품을 구매하거나 행동할 때 친환경적인 대안이 없거나 품질이 떨어진다" + ], + datasets: [ + { + label: "", + data: [ + 1.8, 11.2, 17.9, 23.6, 33.6, 36.3, 41, 43.7, 44.1 + ], + fill: true, + borderWidth: 1, //경계선 굵기 + }, + ] + }; + + const options = { + options: {indexAxis: 'y'}, + }; + + return ; +}; +export default Chart2; \ No newline at end of file diff --git a/frontend/src/components/Introduction/ChartLine.jsx b/frontend/src/components/Introduction/ChartLine.jsx new file mode 100644 index 0000000..e7c6a44 --- /dev/null +++ b/frontend/src/components/Introduction/ChartLine.jsx @@ -0,0 +1,83 @@ +import { useState, useRef } from "react"; +import { Bar } from "react-chartjs-2"; +import "chart.js/auto"; // ADD THIS + +export const ChartLine = () => { + const ref = useRef(); + + const data = { + labels: [ + //x 축 + 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 + ], + datasets: [ + { + label: "단위: ton", + data: [ + 180573, 195275, 190254, 219217, 234283, 261032, 277533, 303029, 311666, 304357, 328954, 346669, 368890, 366921, 374642, 383333, 394496, 393136, 401658, 418214, 429128, 429531, 446102, 497238, 534055 //x축 label에 대응되는 데이터 값 + ], + fill: true, + backgroundColor: [ + //색상 + 'rgba(255, 99, 132, 0.2)', + 'rgba(54, 162, 235, 0.2)', + 'rgba(255, 206, 86, 0.2)', + 'rgba(75, 192, 192, 0.2)', + 'rgba(153, 102, 255, 0.2)', + 'rgba(255, 159, 64, 0.2)', + 'rgba(120, 159, 64, 0.2)', + 'rgba(220, 159, 64, 0.2)', + 'rgba(120, 80, 64, 0.2)', + 'rgba(120, 200, 64, 0.2)', + 'rgba(40, 100, 94, 0.2)', + 'rgba(180, 159, 64, 0.2)', + 'rgba(54, 162, 175, 0.2)', + 'rgba(255, 119, 132, 0.2)', + 'rgba(155, 206, 86, 0.2)', + 'rgba(93, 102, 255, 0.2)', + 'rgba(75, 100, 52, 0.2)', + 'rgba(230, 206, 86, 0.2)', + 'rgba(73, 102, 255, 0.2)', + 'rgba(155, 159, 64, 0.2)', + 'rgba(235, 159, 64, 0.2)', + 'rgba(255, 99, 72, 0.2)', + 'rgba(54, 192, 235, 0.2)', + 'rgba(255, 236, 86, 0.2)', + 'rgba(75, 202, 192, 0.2)', + ], + borderColor: [ + //경계선 색상 + 'rgba(255, 99, 132, 1)', + 'rgba(54, 162, 235, 1)', + 'rgba(255, 206, 86, 1)', + 'rgba(75, 192, 192, 1)', + 'rgba(153, 102, 255, 1)', + 'rgba(255, 159, 64, 1)', + 'rgba(120, 159, 64, 1)', + 'rgba(220, 159, 64, 1)', + 'rgba(120, 80, 64, 1)', + 'rgba(120, 200, 64, 1)', + 'rgba(40, 100, 94, 1)', + 'rgba(180, 159, 64, 1)', + 'rgba(54, 162, 175, 1)', + 'rgba(255, 119, 132, 1)', + 'rgba(155, 206, 86, 1)', + 'rgba(93, 102, 255, 1)', + 'rgba(75, 100, 52, 1)', + 'rgba(230, 206, 86, 1)', + 'rgba(73, 102, 255, 1)', + 'rgba(155, 159, 64, 1)', + 'rgba(235, 159, 64, 1)', + 'rgba(255, 99, 72, 1)', + 'rgba(54, 192, 235, 1)', + 'rgba(255, 236, 86, 1)', + 'rgba(75, 202, 192, 1)', + ], + borderWidth: 1 //경계선 굵기 + }, + ], + }; + + return ; +}; +export default ChartLine; \ No newline at end of file diff --git a/frontend/src/components/Map/ClickedStoreCard.jsx b/frontend/src/components/Map/ClickedStoreCard.jsx new file mode 100644 index 0000000..dcb3596 --- /dev/null +++ b/frontend/src/components/Map/ClickedStoreCard.jsx @@ -0,0 +1,38 @@ +import React, { useState, useEffect } from "react" +import StarRate from "../Common/StarRate"; +import * as Api from "../../utils/Api"; +import StoreLike from "./StoreLike"; + +function ClickedStoreCard({ + clickedStoreId +}) { + const [thisStore, setThisStore] = useState([]); + + const getThisStore = async () => { + const resultThisStore = await Api.get(`store/${clickedStoreId}`); + setThisStore(resultThisStore.data); + }; + useEffect(() => { + getThisStore(); + }, []); // 클릭한 가게 정보만 불러오기 + + return( +
+
+
+
+
+

{thisStore[0]?.name}

+
{thisStore[0]?.address_detail}
+
🌟: {thisStore[0]?.avg_star}
+ +
+

{thisStore[0]?.description}

+
+
+
+
+ ) +} + +export default ClickedStoreCard; diff --git a/frontend/src/components/Map/Location.jsx b/frontend/src/components/Map/Location.jsx new file mode 100644 index 0000000..7d806df --- /dev/null +++ b/frontend/src/components/Map/Location.jsx @@ -0,0 +1,95 @@ +/*global kakao*/ +import React, { useState, useEffect } from "react"; + +import useGeolocation from "../../hooks/useGeolocation"; + +function Location({ + stores, counts, +}) { + const geo = useGeolocation(); + + const loadKakaoMap = () => { + if ("kakao" in window) { + window.kakao.maps.load(() => { + const kakaoMap = document.getElementById("kakao-map"); + const mapOption = { + center: new window.kakao.maps.LatLng(geo.lat, geo.lon), + level: 3, + }; + + var map = new window.kakao.maps.Map(kakaoMap, mapOption); + + let positions = [] + for (i=0; i${stores[i].name}`, + latlng: new kakao.maps.LatLng(stores[i].latitude, stores[i].longitude), + } + }; + + var imageSrc = "https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/markerStar.png"; + + for (var i = 0; i < counts; i ++) { + + var imageSize = new kakao.maps.Size(24, 35); + var markerImage = new kakao.maps.MarkerImage(imageSrc, imageSize); + + var marker = new kakao.maps.Marker({ + map: map, // 마커를 표시할 지도 + position: positions[i].latlng, // 마커를 표시할 위치 + image : markerImage // 마커 이미지 + }); + + // 마커에 표시할 인포윈도우 생성 + var infowindow = new kakao.maps.InfoWindow({ + content: positions[i].content // 인포윈도우에 표시할 내용 + }); + + // 마커에 mouseover 이벤트와 mouseout 이벤트 등록 + // 이벤트 리스너로는 클로저를 만들어 등록합니다 + // for문에서 클로저를 만들어 주지 않으면 마지막 마커에만 이벤트가 등록됨 + kakao.maps.event.addListener(marker, 'mouseover', makeOverListener(map, marker, infowindow)); + kakao.maps.event.addListener(marker, 'mouseout', makeOutListener(infowindow)); + } + + // 인포윈도우 표시 클로저 함수 + function makeOverListener(map, marker, infowindow) { + return function() { + infowindow.open(map, marker); + }; + } + // 인포윈도우 닫는 클로저 함수 + function makeOutListener(infowindow) { + return function() { + infowindow.close(); + }; + } + }); + return; + } + return loadKakaoMap(); + }; + + useEffect(() => { + const kakaoMapScript = document.createElement("script"); + kakaoMapScript.src = `//dapi.kakao.com/v2/maps/sdk.js?appkey=${ + import.meta.env.VITE_KAKAOMAP_API_KEY + }&autoload=false`; + kakaoMapScript.defer = true; + kakaoMapScript.async = true; + document.head.appendChild(kakaoMapScript); + kakaoMapScript.addEventListener("load", loadKakaoMap); + + return () => { + kakaoMapScript.removeEventListener("load", loadKakaoMap); + }; + }, [geo]); + + return ( +
+
+
+ ); + } + +export default Location; \ No newline at end of file diff --git a/frontend/src/components/Map/MapStoreCard.jsx b/frontend/src/components/Map/MapStoreCard.jsx new file mode 100644 index 0000000..e7e7154 --- /dev/null +++ b/frontend/src/components/Map/MapStoreCard.jsx @@ -0,0 +1,33 @@ +import React from "react" +import StarRate from "../Common/StarRate"; +import { Link } from "react-router-dom"; +import StoreLike from "./StoreLike"; + +function MapStoreCard({ + store_id, + name, + address_detail, + description, + star, +}) { + + return( +
+
+
+
+
+ {name} +
{address_detail}
+
🌟: {star}
+ +
+

{description}

+
+
+
+
+ ) +} + +export default MapStoreCard; diff --git a/frontend/src/components/Map/Rating.jsx b/frontend/src/components/Map/Rating.jsx new file mode 100644 index 0000000..9b19c94 --- /dev/null +++ b/frontend/src/components/Map/Rating.jsx @@ -0,0 +1,73 @@ +import React, { useState, useEffect } from 'react'; +import { FaStar } from 'react-icons/fa'; +import styled from 'styled-components'; + +const ARRAY = [0, 1, 2, 3, 4]; + +function Rating({ onChangeScore }) { + const [clicked, setClicked] = useState([false, false, false, false, false]); + + const handleStarClick = index => { + let clickStates = [...clicked]; + for (let i = 0; i < 5; i++) { + clickStates[i] = i <= index ? true : false; + } + const score = clickStates.filter((val) => val).length; + onChangeScore(score); + setClicked(clickStates); + }; + + return ( + + 별점 + + {ARRAY.map((e, idx) => { + return ( + handleStarClick(e)} + className={clicked[e] && 'yellowStar'} + /> + ); + })} + + + ); +} + +export default Rating; + +const Wrap = styled.div` + display: flex; + flex-direction: column; + padding-top: 15px; +`; + +const RatingText = styled.div` + color: #787878; + font-size: 12px; + font-weight: 400; +`; + +const Stars = styled.div` + display: flex; + padding-top: 5px; + + & svg { + color: gray; + cursor: pointer; + } + + :hover svg { + color: #fcc419; + } + + & svg:hover ~ svg { + color: gray; + } + + .yellowStar { + color: #fcc419; + } +`; diff --git a/frontend/src/components/Map/ReviewLike.jsx b/frontend/src/components/Map/ReviewLike.jsx new file mode 100644 index 0000000..e0f2aa0 --- /dev/null +++ b/frontend/src/components/Map/ReviewLike.jsx @@ -0,0 +1,44 @@ +import React, { useState } from "react"; +import { Col } from "react-bootstrap"; +import * as Api from "../../utils/Api"; + +function ReviewLike ({ + clickedStoreId, + reviewId, +}) { + const [reviewLike, setReviewLike] = useState(false); + const [reviewDislike, setReviewDislike] = useState(false); + + const handleReviewLike = async (e) => { + e.preventDefault(); + e.stopPropagation(); + + await Api.post(`stores/${clickedStoreId}/${reviewId}/like`); + setReviewLike(true); + }; + + const handleReviewDislike = async (e) => { + e.preventDefault(); + e.stopPropagation(); + + await Api.post(`stores/${clickedStoreId}/${reviewId}/like`); + setReviewDislike(true); + }; + + return ( + + + + + ); +} + +export default ReviewLike; \ No newline at end of file diff --git a/frontend/src/components/Map/StoreLike.jsx b/frontend/src/components/Map/StoreLike.jsx new file mode 100644 index 0000000..31ede61 --- /dev/null +++ b/frontend/src/components/Map/StoreLike.jsx @@ -0,0 +1,41 @@ +import React, { useState } from "react"; +import { Col } from "react-bootstrap"; +import * as Api from "../../utils/Api"; + +function StoreLike ({ store_id }) { + const [like, setLike] = useState(false); + const [dislike, setDislike] = useState(false); + + const handleLike = async (e) => { + e.preventDefault(); + e.stopPropagation(); + + await Api.post(`stores/${store_id}/like`); + setLike(true); + }; + + const handleDislike = async (e) => { + e.preventDefault(); + e.stopPropagation(); + + await Api.delete(`store/${store_id}/like`); + setDislike(true); + }; + + return ( + + + + + ); +} + +export default StoreLike; \ No newline at end of file diff --git a/frontend/src/components/Map/StoreList.jsx b/frontend/src/components/Map/StoreList.jsx new file mode 100644 index 0000000..0923c3b --- /dev/null +++ b/frontend/src/components/Map/StoreList.jsx @@ -0,0 +1,26 @@ +import React from "react"; + +import MapStoreCard from "./MapStoreCard"; + +function StoreList({ + store_id, + name, + address_detail, + description, + star, +}) { + + return ( +
+ +
+ ); +} + +export default StoreList; \ No newline at end of file diff --git a/frontend/src/components/Map/StorePage.jsx b/frontend/src/components/Map/StorePage.jsx new file mode 100644 index 0000000..d2fc722 --- /dev/null +++ b/frontend/src/components/Map/StorePage.jsx @@ -0,0 +1,80 @@ +import React, { useState, useEffect } from "react"; +import { Card, Row, Col } from "react-bootstrap"; +import * as Api from "../../utils/Api"; + +import ClickedStoreCard from './ClickedStoreCard'; +import StoreReviews from "./StoreReviews"; +import StoreReviewAddForm from "./StoreReviewAddForm"; +import { useLocation } from "react-router-dom"; + + +function StorePage ({ +}) { + const [currentUser, setCurrentUser] = useState(""); // 리뷰 수정 여부 체크 위한 현재 로그인 중인 유저 닉네임 + const [reviews, setReviews] = useState([]); // 해당 가게 전체 리뷰 + const [isAddable, setIsAddable] = useState(false); // 로그인 상태에서만 작성 가능해야 함 + const [isAdding, setIsAdding] = useState(false); + + const clickedStore = useLocation(); + const clickedStoreId = clickedStore.state.data.store_id; // 선택한 가게 store_id + + const getNickname = async () => { + const resultNickname = await Api.get('user'); + setCurrentUser(resultNickname.data.nickname); + }; + useEffect(() => { + getNickname(); + }, []); // 현재 로그인 중인 유저 닉네임 받아오기 + + function checkLogin () { + if (currentUser != "") + setIsAddable(true); + }; + useEffect(() => { + checkLogin(); + }, [currentUser]); // 로그인한 상태인지 아닌지 체크 + + const getReviews = async () => { + const resultReviews = await Api.get(`stores/${clickedStoreId}/reviews`); + setReviews(resultReviews.data); + }; + useEffect(() => { + getReviews(); + }, []) // 해당 가게 전체 리뷰 불러오기 + console.log(currentUser); + + return ( + + + 가게 정보 + + + {isAddable && ( + + + + + + )} + {isAdding && ( + + )} + + + ); +} + +export default StorePage; \ No newline at end of file diff --git a/frontend/src/components/Map/StoreReviewAddForm.jsx b/frontend/src/components/Map/StoreReviewAddForm.jsx new file mode 100644 index 0000000..f8965a9 --- /dev/null +++ b/frontend/src/components/Map/StoreReviewAddForm.jsx @@ -0,0 +1,83 @@ +// 리뷰 작성 창 +import React, { useState } from "react"; +import { Form } from "react-bootstrap"; +import styled from 'styled-components'; + +import Rating from "./Rating"; + +import * as Api from "../../utils/Api"; + +function StoreReviewAddForm({ + clickedStoreId, + setReviews, + setIsAdding, +}) { + const [star, setStar] = useState(""); + const [description, setDescription] = useState(""); + const [photo, setPhoto] = useState([]); + + const handleSubmit = async (e) => { + e.preventDefault(); + e.stopPropagation(); + + // 리뷰 등록 + await Api.post(`stores/${clickedStoreId}/review`, { + star, + description, + photo, + }); + + // 등록한 리뷰 포함 해당 스토어 전체 리뷰 가져오기 + const res = await Api.get(`stores/${clickedStoreId}/reviews`); + const UpdateReviews = res.data; + setReviews(UpdateReviews); + setIsAdding(false); + }; + + const handleChangeScore = (score) => { + setStar(score); + }; + + return ( + <> + 리뷰 작성하기 +
+ + + setDescription(e.target.value)} + /> + + + + + + + + + ); +} + +export default StoreReviewAddForm; + +const AddformTitle = styled.div` + display: flex; + flex-direction: column; + padding-top: 15px; + color: black; +`; \ No newline at end of file diff --git a/frontend/src/components/Map/StoreReviewCard.jsx b/frontend/src/components/Map/StoreReviewCard.jsx new file mode 100644 index 0000000..24ae20a --- /dev/null +++ b/frontend/src/components/Map/StoreReviewCard.jsx @@ -0,0 +1,81 @@ +// 지도 페이지 - 스토어 리뷰 카드 +import React from "react"; +import { Card, Row, Col } from "react-bootstrap"; +import StarRate from "../Common/StarRate"; +import * as Api from "../../utils/Api"; +import ReviewLike from "./ReviewLike"; + +import swal from "sweetalert"; + +function StoreReviewCard({ + currentReview, + clickedStoreId, + currentUser, + isEditable, + setIsEditing, + setReviews, + onClickEditButton, +}) { + + const handleDelete = async (e) => { // 삭제함수 + e.preventDefault(); + e.stopPropagation(); + + try { + swal({ + title: "리뷰를 삭제하시겠습니까?", + text: "한 번 삭제된 리뷰는 복구할 수 없습니다.", + icon: "warning", + buttons: true, + dangerMode: true, + }).then(async (willDelete) => { + if (willDelete) { + await Api.delete(`stores/${clickedStoreId}/${currentReview.review_id}`); + const res = await Api.get(`stores/${clickedStoreId}/reviews`); + setReviews(res.data); + swal("삭제 완료", "리뷰가 삭제되었습니다.", "success"); + } else { + swal("삭제 취소", "리뷰가 삭제되지 않았습니다.", "info"); + } + }); + } catch (err) { + alert("오류가 발생했습니다.", err); + } + }; + + return ( + + + + {currentReview.nickname} +
+ +
+ {currentReview.description} +
+ + + + + {isEditable && ( + <> + + + + + + + + )} +
+ ); +} + +export default StoreReviewCard; diff --git a/frontend/src/components/Map/StoreReviewEditForm.jsx b/frontend/src/components/Map/StoreReviewEditForm.jsx new file mode 100644 index 0000000..de03d8a --- /dev/null +++ b/frontend/src/components/Map/StoreReviewEditForm.jsx @@ -0,0 +1,83 @@ +// 리뷰 수정 창 +import React, { useState } from "react"; +import { Form } from "react-bootstrap"; +import styled from 'styled-components'; + +import Rating from "./Rating"; + +import * as Api from "../../utils/Api"; + +function StoreReviewEditForm({ + setIsEditing, + reviewId, + clickedStoreId, + setReviews, + currentUser, +}) { + const [star, setStar] = useState(""); + const [description, setDescription] = useState(""); + const [photo, setPhoto] = useState([]); + + const handleSubmit = async (e) => { + e.preventDefault(); + e.stopPropagation(); + + await Api.put(`review/${reviewId}`, { + star, + description, + photo, + }); + + const res = await Api.get(`stores/${clickedStoreId}/reviews`); + const UpdateReview = res.data; + setReviews(UpdateReview); + setIsEditing(false); + }; + + const handleChangeScore = (score) => { + setStar(score); + }; + + return ( + <> + 리뷰 수정하기 +
+ + + setDescription(e.target.value)} + /> + + + + + + + + + ); +} + +export default StoreReviewEditForm; + +const EditformTitle = styled.div` + display: flex; + flex-direction: column; + padding-top: 15px; + color: black; +`; \ No newline at end of file diff --git a/frontend/src/components/Map/StoreReviews.jsx b/frontend/src/components/Map/StoreReviews.jsx new file mode 100644 index 0000000..5c609c6 --- /dev/null +++ b/frontend/src/components/Map/StoreReviews.jsx @@ -0,0 +1,56 @@ +// 특정 스토어 전체 리뷰 +import React, { useState, useEffect } from 'react'; +import { Card, Button, Row, Col } from "react-bootstrap"; +import * as Api from "../../utils/Api"; +import StoreReviewCard from './StoreReviewCard'; +import StoreReviewEditForm from './StoreReviewEditForm'; + +function StoreReviews ({ + clickedStoreId, + currentUser, + reviews, + setReviews, +}) { + const [isEditing, setIsEditing] = useState(false); // 리뷰 편집 중인지 아닌지 체크 + const [editReviewId, setEditReviewId] = useState(-1); + + const handleClickEditButton = (reviewId) => { + setIsEditing(true); + setEditReviewId(reviewId); + } + + return ( + <> + {isEditing ? ( + + ) : ( + + + 리뷰 목록 + {reviews.map((reviews) => ( + + ))} + + + )} + + ); + +} + +export default StoreReviews; diff --git a/frontend/src/components/MyPage/ChangeInfo.jsx b/frontend/src/components/MyPage/ChangeInfo.jsx new file mode 100644 index 0000000..46a6025 --- /dev/null +++ b/frontend/src/components/MyPage/ChangeInfo.jsx @@ -0,0 +1,114 @@ +import React, { useContext, useState } from "react"; +import { MyPageContext } from "../Pages/Mypage.jsx"; +import Info from "./Info.jsx"; +import * as Api from "../../utils/Api"; +import { UserStateContext } from "../../App.jsx"; + +// { name, nickname, introduction, changeMenu } +function ChangeInfo() { + + const {changeMenu} = useContext(MyPageContext); + const [changeName, setChangeName] = useState(); + const [changeNickName, setChangeNickName] = useState(); + const [changeIntroduction, setChangeIntroduction] = useState(); + const {user}=useContext(UserStateContext) + // console.log(user) + const [errMsg, setErrMsg] = useState(""); + + const handleSubmit = async (e) => { + e.preventDefault(); + e.stopPropagation(); + + if (!changeNickName) { + setErrMsg("사용자 이름을 입력해 주세요."); + return; + } + + + setErrMsg(""); + try { + await Api.put(`user/updateInfo`, { + email: user.email, + nickname: changeNickName, + description: changeIntroduction + }); + + // console.log("데이터", res.data) + console.log({nickname: changeNickName, + description: changeIntroduction}) + + //info화면으로 이동. + changeMenu("info"); + + } catch (err) { + console.log(err); + } + }; + + return ( +
+
+ {/* */} +

+ 프로필 편집 +

+
+ {/*
+

이름

+ setChangeName(e.target.value)} + /> +
*/} +
+

사용자 이름

+ setChangeNickName(e.target.value)} + /> +
+
+

소개

+ setChangeIntroduction(e.target.value)} + /> +
+
+
+ {errMsg} +
+
+
+
+ + +
+
+
); +} + +export default ChangeInfo; diff --git a/frontend/src/components/MyPage/ChangePassword.jsx b/frontend/src/components/MyPage/ChangePassword.jsx new file mode 100644 index 0000000..05b49f2 --- /dev/null +++ b/frontend/src/components/MyPage/ChangePassword.jsx @@ -0,0 +1,158 @@ +import React, { useContext, useState, useCallback } from "react"; +import { useNavigate } from "react-router-dom"; +import * as ResisterStyled from "../StyledComponents/SignStyled"; +import Info from "./Info.jsx"; +import { MyPageContext } from "../Pages/Mypage.jsx"; +import { UserStateContext } from "../../App.jsx"; +import * as Api from "../../utils/Api"; + +function ChangePassword() { + + const {changeMenu} = useContext(MyPageContext); + // 비밀번호 변경 성공하면 메인페이지로 이동? + const navigate = useNavigate(); + const [currentPwd, setCurrentPwd] = useState(""); + const [newPwd, setNewPwd] = useState("") + const [confirmPwd, setConfirmPwd] = useState(""); + + const [isAccepted, setIsAccpted] = useState(false); + + const [pwdMsg, setPwdMsg] = useState(""); + const [confirmPwdMsg, setConfirmPwdMsg] = useState(""); + const {user}=useContext(UserStateContext) + + // pw, pw확인 유효성 검사 + const validatePwd = (newPwd) => { + return newPwd + .toLowerCase() + .match(/^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{10,25}$/); + }; + const isPwdValid = validatePwd(newPwd); + const isConfirmPwd = newPwd === confirmPwd; + const isAllValid = isPwdValid && isConfirmPwd; + + // New 비밀번호 유효성 검사 + const onChangePwd = useCallback((e) => { + const currNewPwd = e.target.value; + setNewPwd(currNewPwd); + + if (!validatePwd(currNewPwd)) { + setPwdMsg("영문, 숫자, 특수기호 조합으로 10자리 이상 입력해주세요."); + } else { + setPwdMsg("안전한 비밀번호입니다."); + } + }, []); + + // confirm 비밀번호 확인 + const onChangeConfirmPwd = useCallback( + (e) => { + const currConfirmPwd = e.target.value; + setConfirmPwd(currConfirmPwd); + + if (currConfirmPwd !== newPwd) { + setConfirmPwdMsg("비밀번호가 일치하지 않습니다."); + } else { + setConfirmPwdMsg("올바른 비밀번호입니다."); + } + }, + [newPwd] //이거 뭐지 + ); + + // 여기까지 유효성 검사 + + // 여기서 부터 put + + const handleSubmit = async (e) => { + e.preventDefault(); + e.stopPropagation(); + + try { + await Api.put(`user/updatePW`, { + email: user.email, + current_password: currentPwd , + new_password: newPwd, + }); + console.log("성공?") + // console.log({currentPwd, newPwd}) + + changeMenu("info"); + } catch (err) { + console.log(err); + } + }; + + return ( +
+
+
+

이전 비밀번호

+ +
+
+
+
+

새 비밀번호

+ +

+ {pwdMsg} +

+
+
+
+
+

새 비밀번호 확인

+ +

+ {confirmPwdMsg} +

+
+
+
+
+ {/* */} + + +
+
+
+ ); +} + +export default ChangePassword; diff --git a/frontend/src/components/MyPage/ConfirmWithdrawal.jsx b/frontend/src/components/MyPage/ConfirmWithdrawal.jsx new file mode 100644 index 0000000..65cce33 --- /dev/null +++ b/frontend/src/components/MyPage/ConfirmWithdrawal.jsx @@ -0,0 +1,39 @@ +import React, {useState} from "react" +import * as ModalStyled from "../StyledComponents/ModalStyled"; + +function Withdrawal({isAccepted, setIsAccpted, onCheckAccept}){ + + const [openModal, setOpenModal] = useState(false); + + const showModal = () => { + setOpenModal(true); + } + const closeModal = () => { + setOpenModal(false); + setIsAccpted(false); + } + + const onSubmitAccept = () => { + closeModal(); + onCheckAccept(); + } + + return( + <> + + 약관 확인 * + + {openModal ? +

회원 탈퇴 약관 확인

+

1. 탈퇴 시 회원 정보는 보류 처리되어 14일간 보관됩니다. 이 기간 동안 동일한 메일 주소로 회원가입을 할 시 가입이 제한되며, 탈퇴 취소를 원하시는 경우 취소 처리도 가능합니다.

+

+ 2. 탈퇴하더라도 작성하신 리뷰는 계속 남아 있게 됩니다. 작성한 리뷰를 제외한 모든 회원 정보는 삭제되며 남아 있는 리뷰의 작성자명은 '(익명)'으로 처리됩니다.

+

약관을 확인하셨습니까?

+ + +
: null} + + ) +} + +export default Withdrawal \ No newline at end of file diff --git a/frontend/src/components/MyPage/Info.jsx b/frontend/src/components/MyPage/Info.jsx new file mode 100644 index 0000000..4df052b --- /dev/null +++ b/frontend/src/components/MyPage/Info.jsx @@ -0,0 +1,157 @@ +import React, { useEffect, useContext, useState } from "react"; +import ChangePassword from "./ChangePassword.jsx"; +import { MyPageContext } from "../Pages/Mypage.jsx"; +import * as Api from "../../utils/Api"; +import Withdrawal from "./Withdrawal.jsx" + + +// const userInfo = { + // nickname: "닉네임", + // email: "rabbilt@elice.com", + // phone: "010-1010-2020", + // introduction: "소개부분", + // myFavStores: 4, + // myReviews: 5, + // myReward: 8 +// }; + +function Info() { + const { changeMenu, setInfo, info } = useContext(MyPageContext); + console.log(info) + + const fetchData = async () =>{ + const response = await Api.get('mypage/info'); + console.log(response.data) + setInfo(response.data); + }; + + return( + <> +
+ Placeholder140x140 + + Placeholder + + + 140x140 + + + +
+

{info.nickname}

+ +

{"nickname" in info ? info.nickname : "닉네임"}

+ +
+ +

{info.email}

+

{info.name}

+

{info.introduction}

+ +

{"email" in info ? info.email : "이메일"}

+

{"name" in info ? info.name : "이름"}

+

{"description" in info ? info.description : "소개"}

+
+
+ {/* -------------------------------------------------- */} +
+
+
+ + + myFavNum + + + { + changeMenu("myfav"); + }}> + {/* {userInfo.myFavStores} */} + {"myFavStores" in info ? info.myFavStores : 0} + + +

관심 상점

+
+
+ + + myReviewNum + + + { + changeMenu("myreview"); + }}> + {/* {userInfo.myReviews} */} + {"myReviews" in info ? info.myReviews : 0} + +
+

게시글

+
+ +
+
+
+ + + ); +} + +export default Info; diff --git a/frontend/src/components/MyPage/MyFav.jsx b/frontend/src/components/MyPage/MyFav.jsx new file mode 100644 index 0000000..e6464bf --- /dev/null +++ b/frontend/src/components/MyPage/MyFav.jsx @@ -0,0 +1,61 @@ +import React, {useState, useContext, useEffect} from "react" +import StoreCard from "../Common/StoreCard.jsx" +import * as Api from "../../utils/Api"; +import { MyPageContext } from "../Pages/Mypage.jsx"; +import Pagination from "./Pagination.jsx" + +function MyFav( ) { + + const {favStores, setFavStores} = useContext(MyPageContext); + // 페이지네이션 코드 + const limit= 4; + const [page, setPage] = useState(1); + const offset = (page - 1) * limit; + + + const fetchData = async () =>{ + const response = await Api.get('mypage/stores'); + setFavStores(response.data); + }; + + useEffect(()=>{ + fetchData(); + }, []); + + return( + <> +

My Review

+
+ {favStores?.slice(offset, offset + limit).map((favStore, index) =>( + + ))} +
+ +
+ + )} + +export default MyFav; + + + +// {favStore?.map((store) =>( // map 할 값이 없을 때 에러를 피하기 위해 .map 앞에 '?'를 추가 +// +// ))} \ No newline at end of file diff --git a/frontend/src/components/MyPage/MyReview.jsx b/frontend/src/components/MyPage/MyReview.jsx new file mode 100644 index 0000000..3287357 --- /dev/null +++ b/frontend/src/components/MyPage/MyReview.jsx @@ -0,0 +1,62 @@ +import React, { useEffect, useState, useContext } from "react"; +import ReviewCard from "../Common/ReviewCard.jsx"; +import * as Api from "../../utils/Api"; +import { MyPageContext } from "../Pages/Mypage.jsx"; +import Pagination from "./Pagination.jsx" + + +function MyReview( ) { + + // 이거 뭐지... + // const { setReviews, reviews } = useContext(MyPageContext); + // const { reviews, setReviews } = useContext(MyPageContext); + const [reviews, setReviews] = useState([]) + // 페이지네이션 코드 + const limit= 4; + const [page, setPage] = useState(1); + const offset = (page - 1) * limit; + // const [reviews,setReviews] = useState([{ + // review_id: 0, + // star: 0, + // description: "", + // // photo: null, + // created_time:"", + // updated_time:"", + // user_id: "", + // store_id: "", + // like_reviews: 0 + // }]); + + const fetchData = async () =>{ + const response = await Api.get('mypage/reviews'); + console.log(response) + setReviews(response.data); + }; // GET 요청 함수화 + + useEffect(()=>{ //무한루프 실행을 피하기 위해 useEffect를 이용. server의 값을 받아옴. + fetchData(); // <- 위에서 작성한 fetchData 사용 + }, []); + + return( + <> +

My Review

+
+ {reviews?.slice(offset, offset + limit).map((review, index) =>( // map 할 값이 없을 때 에러를 피하기 위해 .map 앞에 '?'를 추가 + + ))} +
+ +
+ + )} + +export default MyReview; \ No newline at end of file diff --git a/frontend/src/components/MyPage/Pagination.jsx b/frontend/src/components/MyPage/Pagination.jsx new file mode 100644 index 0000000..c18d152 --- /dev/null +++ b/frontend/src/components/MyPage/Pagination.jsx @@ -0,0 +1,68 @@ +import styled from "styled-components"; + +function Pagination({ total, limit, page, setPage }) { + const numPages = Math.ceil(total / limit); + + return ( + <> + + + ); +} + +const Nav = styled.nav` + display: flex; + justify-content: center; + align-items: center; + gap: 4px; + margin: 16px; +`; + +const Button = styled.button` + border: none; + border-radius: 8px; + padding: 8px; + margin: 0; + background: black; + color: white; + font-size: 1rem; + + &:hover { + background: tomato; + cursor: pointer; + transform: translateY(-2px); + } + + &[disabled] { + background: grey; + cursor: revert; + transform: revert; + } + + &[aria-current] { + background: deeppink; + font-weight: bold; + cursor: revert; + transform: revert; + } +`; + +export default Pagination; \ No newline at end of file diff --git a/frontend/src/components/MyPage/Withdrawal.jsx b/frontend/src/components/MyPage/Withdrawal.jsx new file mode 100644 index 0000000..555ca14 --- /dev/null +++ b/frontend/src/components/MyPage/Withdrawal.jsx @@ -0,0 +1,104 @@ +import React, {useCallback, useState, useContext} from "react" +import * as ModalStyled from "../StyledComponents/ModalStyled"; +import ConfirmWithdrawal from "./ConfirmWithdrawal" +import { MyPageContext } from "../Pages/Mypage.jsx"; +import { UserStateContext } from "../../App.jsx"; +import * as Api from "../../utils/Api"; + +function Withdrawal(){ + + const {changeMenu} = useContext(MyPageContext); + const [checkPassword, setCheckPassword] = useState("") + const {user}=useContext(UserStateContext) + + // 모달 컨펌용 + const [isAccepted, setIsAccpted] = useState(false); + + + // ???? + const onChangeAccount = (e) => { + setCheckPassword(e.target.value) + }; + + // 회원 탈퇴 delete + // const handleCheckAccept = useCallback(() => { + // setIsAccpted(true); + // }, []); + + + const handleSubmit = async (e) => { + e.preventDefault(); + e.stopPropagation(); + + // if (!checkPassword) { + // setErrMsg("패스워드를 입력해 주세요."); + // return; + // } + + // if (!) { + // setErrMsg("약관을 확인해 주세요."); + // return; + // } + + try { + + console.log({email: user.email, + password: checkPassword}) + + await Api.post(`user/delete`, { + email: user.email, + password: checkPassword + }); + + + changeMenu("info"); + //로그 아웃된 초기 화면으로 이동 해야함.(나중에 변경) + } catch (err) { + console.log(err); + } + }; + + // 모달 컨펌용 + const handleCheckAccept = useCallback(() => { + setIsAccpted(true); + }, []); + + return ( +
+
+
+

비밀번호

+ +
+
+ +
+
+
+ + +
+
+ + ); + +} + +export default Withdrawal \ No newline at end of file diff --git a/frontend/src/components/Pages/Introduction.jsx b/frontend/src/components/Pages/Introduction.jsx new file mode 100644 index 0000000..1153afe --- /dev/null +++ b/frontend/src/components/Pages/Introduction.jsx @@ -0,0 +1,97 @@ +import React from "react"; +import { Swiper, SwiperSlide } from 'swiper/react'; +import { Pagination } from "swiper"; + +import 'swiper/css'; +import "swiper/css/pagination"; +import ChartLine from "../Introduction/ChartLine"; +import Chart2 from "../Introduction/Chart2"; + +const slideContentList = [ + // 1번 +
+

코로나 이후 쓰레기 배출량 증가

+
+ 코로나19로 인해 사람들은 외부 활동을 꺼리게 되었습니다.
+
+ 자주 사용하는 생필품들을 마트에 가서 사기보다는 택배로 주문하게 됐고,
+ 가볍게 나가서 즐기고 왔을 외식은 사람을 마주치지 않고도 받을 수 있는 배달 주문으로 대체되었습니다.
+
+ 이렇게 늘어난 비대면 서비스의 규모만큼 사용되는 일회용품 역시 늘어났습니다.
+ 코로나19 발생 이후 버려지는 쓰레기의 양은 전년 대비 7.4% 증가하였습니다. + +
+
+
, + // 2번 +
+

제로 웨이스트란?

+
+ 제로 웨이스트 소개 이미지 + 제로 웨이스트(Zero Waste)는 모든 제품이 재사용될 수 있도록 장려하며 폐기물을 방지하는데 초점을 맞춘 원칙입니다.
+
+ 제로 웨이스트는 제품의 흐름을 크게 바꾸어 낭비가 없는 사회를 목표로 합니다.
+ 재활용과 재사용을 통해 폐기물을 없애는 것 이상의 것을 포함하는데, 폐기물을 줄이기 위한 생산-유통 시스템의 재구축에 힘을 쏟고 있습니다.
+
+ ZeroLand는 물건을 사고 파는 과정에서 버려지는 쓰레기를 줄이기 위해 사용자의 주변에 있는 제로 웨이스트 샵의 위치 정보를 제공하는 서비스입니다. +
+
, + // 3번 +
+

왜 2030 소비자인가?

+
+ ZeroLand는 20대, 30대 소비자의 환경관심정도가 다른 연령대의 소비자들보다 낮다는 점에 주목했습니다.
+
+ 근소한 차이라고도 볼 수 있지만, 친환경에 대한 관심을 촉구하는 것은 계속해서 환경을 사용해야 하는 젊은 세대에게 무엇보다 중요합니다.
+ 또한 친환경적 생활 습관의 실천이 어려운 이유 중 제품을 구매할 때 친환경적인 대안이 없다는 점이 가장 높은 원인임을 주목하였습니다.
+
+ 따라서 웹 서비스에 대한 접근성이 높은 20대와 30대를 서비스 타겟으로 선정해 제로웨이스트 샵에 대한 정보를 제공하고, 사용자들의 경험을 공유할 수 있는 공간을 제공하기로 했습니다. + +
+
+
, + // 4번 +
+

왜 서울 지역의 소비자인가?

+
+ + 현재 국내에 있는 제로 웨이스트 샵의 대부분은 서울과 수도권에 위치하고 있습니다.
+
+ 또한 앞서 타겟으로 삼은 20대, 30대 청년 인구가 서울 지역에 가장 많이 살고 있다는 점 역시 고려하여 ZeroLand의 첫 번째 서비스 타겟을 서울 지역의 20대, 30대 소비자로 선정하였습니다.
+
+ 친환경적인 소비에 대한 국내 소비자들의 관심이 계속해서 증대하고 있는 만큼, 차후 서비스 범위를 전국 범위로 확대할 예정입니다.
+
+
, +]; + +const setSwiperSlides = () => { + return slideContentList.map((content, index) => ( + {content} + )); +}; + +function Introduction() { + return ( +
+
+
+ + {setSwiperSlides()} + +
+
+
+ ); +} + +export default Introduction; \ No newline at end of file diff --git a/frontend/src/components/Pages/Landing.jsx b/frontend/src/components/Pages/Landing.jsx new file mode 100644 index 0000000..3605603 --- /dev/null +++ b/frontend/src/components/Pages/Landing.jsx @@ -0,0 +1,14 @@ +import React from "react" + +function Landing() { + return ( +
+
+

아무것도 남지 않는 당신의 공간을 찾아드립니다.

+

ZeroLand

+
+
+ ); +} + +export default Landing; diff --git a/frontend/src/components/Pages/Login.jsx b/frontend/src/components/Pages/Login.jsx new file mode 100644 index 0000000..322ccf8 --- /dev/null +++ b/frontend/src/components/Pages/Login.jsx @@ -0,0 +1,16 @@ +import React from "react"; +import LoginForm from "../User/LoginForm"; + +function Login() { + return ( +
+ +
+ ); +} + +export default Login; \ No newline at end of file diff --git a/frontend/src/components/Pages/Map.jsx b/frontend/src/components/Pages/Map.jsx new file mode 100644 index 0000000..e739310 --- /dev/null +++ b/frontend/src/components/Pages/Map.jsx @@ -0,0 +1,46 @@ +import React, { useState, useEffect } from "react"; +import * as Api from "../../utils/Api"; + +import Location from "../Map/Location"; +import StoreList from "../Map/StoreList"; + +function Map() { + const [stores, setStores] = useState([]); + + const getStores = async () => { + const resultStores = await Api.get('store'); + setStores(resultStores.data); + }; + + useEffect(() => { + getStores(); + }, []); // 전체 가게 리스트 불러오기 + const countstore = stores.length + + return ( +
+
+
+
+

내 주변의 제로웨이스트샵

+ + {stores.map((stores) => ( + + ))} +
+
+
+
+ ); +} + +export default Map; \ No newline at end of file diff --git a/frontend/src/components/Pages/Mypage.jsx b/frontend/src/components/Pages/Mypage.jsx new file mode 100644 index 0000000..2dee5be --- /dev/null +++ b/frontend/src/components/Pages/Mypage.jsx @@ -0,0 +1,181 @@ +import React, { useEffect, useState } from "react"; +import Info from "../MyPage/Info.jsx"; + +import MyFav from "../MyPage/MyFav.jsx"; +import MyReview from "../MyPage/MyReview.jsx"; +import ChangeInfo from "../MyPage/ChangeInfo.jsx"; +import ChangePassword from "../MyPage/ChangePassword.jsx"; +import Withdrawal from "../MyPage/Withdrawal.jsx" +import * as Api from "../../utils/Api"; +import * as MyPageBox from "../StyledComponents/MyPageStyled"; + +const navMenuList = [ + { label: "Info", path: "info" }, + + { label: "MyFav", path: "myfav" }, + { label: "MyReview", path: "myreview" }, +]; + +const mapPathToComp = { + info: () => , + + myfav: () => , + myreview: () => , + changeinfo: () => , + changepassword: () => , + withdrawal: () => + // withdrawal: () => +}; + +export const MyPageContext = React.createContext({ + changeMenu: () => {}, + setInfo: () => {}, + // info: { + // name: "이름", + // nickname: "사용자 이름", + // email: "rabbilt@elice.com", + // phone: "010-1010-2020", + // introduction: "소개", + // close_time: "오후 10시", + // reviews: "리뷰", + // star_avg: 4.8, + // }, + // setReviews: () =>{}, + // reviews: [{ + // review_id: 0, + // star: 0, + // description: "", + // // photo: null, + // created_time:"", + // updated_time:"", + // user_id: "", + // store_id: "", + // like_reviews: 0 + // }], +}); + +function Mypage() { + const [menu, setMenu] = useState("info"); + + // info 부분 + const [info, setInfo] = useState({ + name: "이름", + nickname: "사용자 이름", + email: "rabbilt@elice.com", + phone: "010-1010-2020", + introduction: "소개", + close_time: "오후 10시", + reviews: "리뷰", + star_avg: 4.8,}); + + // myReview 부분 + const [reviews,setReviews] = useState([{ + review_id: 0, + star: 0, + description: "", + // photo: null, + created_time:"", + updated_time:"", + user_id: "", + store_id: "", + like_reviews: 0 + }]); + + // myFav부분 + const [favStores,setFavStores] = useState([{ + + // description:"", + // photo:"", + // photo2:"", + // store_name:"", + // address_detail:"", + // star: 0 + name:"", + description:"", + tag:"", + url:"", + phone:"", + open_time: null, + close_time:null, + address_detail:"", + avg_star:0 + }]) + + const changeMenu = (path) => { + setMenu(path); + }; + + const navMenuClassStyle = "py-4 nav-link text-white border border-secondary"; + const contextValue = { + changeMenu, + setInfo, + info, + setReviews, + reviews, + setFavStores, + favStores, + }; + + useEffect(() => { + console.log(info); + }, [info]); + + return ( + + ); +} + +export default Mypage; + + +// <> +// +// +// +// My Page +// Information +// Favorites +// My review +// +// +// +// +// +// 메일칸 input 이런 걸로 수정 가능 +// 소개칸 크기 보라고 밑줄 쳤어요 수정 가능 +// +// +// +// +// 숫자 +// 관심 상점 +// +// +// 숫자 +// 관심 상점 +// +// +// 숫자 +// 관심 상점 +// +// +// +// 비밀번호 변경 +// 회원 탈퇴 +// +// +// +// +// \ No newline at end of file diff --git a/frontend/src/components/Pages/Register.jsx b/frontend/src/components/Pages/Register.jsx new file mode 100644 index 0000000..5454b80 --- /dev/null +++ b/frontend/src/components/Pages/Register.jsx @@ -0,0 +1,16 @@ +import React from "react"; +import RegisterForm from "../User/RegisterForm"; + +function Register () { + return ( +
+ +
+ ); +} + +export default Register; \ No newline at end of file diff --git a/frontend/src/components/Pages/Withdrawal.jsx b/frontend/src/components/Pages/Withdrawal.jsx new file mode 100644 index 0000000..9d6aa74 --- /dev/null +++ b/frontend/src/components/Pages/Withdrawal.jsx @@ -0,0 +1,20 @@ +import React from 'react' + +function Withdrawal(){ + + return( +
+

정보 이용 약관

+

1. 탈퇴 시 회원 정보는 보류 처리되어 14일간 보관됩니다. 이 기간 동안 동일한 메일 주소로 회원가입을 할 시 가입이 제한되며, 탈퇴 취소를 원하시는 경우 취소 처리도 가능합니다.

+

+ 2. 탈퇴하더라도 작성하신 리뷰는 계속 남아 있게 됩니다. 작성한 리뷰를 제외한 모든 회원 정보는 삭제되며 남아 있는 리뷰의 작성자명은 '(익명)'으로 처리됩니다.

+ {/*

약관에 동의하십니까?

*/} +
+ + +
+
+ ) +} + +export default Withdrawal \ No newline at end of file diff --git a/frontend/src/components/StyledComponents/ModalStyled.jsx b/frontend/src/components/StyledComponents/ModalStyled.jsx new file mode 100644 index 0000000..85b408d --- /dev/null +++ b/frontend/src/components/StyledComponents/ModalStyled.jsx @@ -0,0 +1,74 @@ +import styled from "styled-components"; + +export const ModalButton = styled.div` + width: 70px; + height: 20px; + float: left; + margin-top: 10px; + margin-left: 2.5%; + cursor: pointer; + font-size: 13px; + line-height: 18px; + + span.no { + color: #f25430; + border-bottom: 2px solid #f25430; + } + span.yes { + color: #1D735A; + border-bottom: 2px solid #1D735A; + } +`; + +export const ModalForm = styled.div` + width: 450px; + height: 440px; + background-color: #f2f2f2; + border: 2px solid #01402E; + + /* 모달창 중앙, 맨 앞 위치 */ + z-index: 999; + position: absolute; + top: 44%; + left: 50%; + transform: translate(-50%, -50%); + + h1 { + font-size: 20px; + color: #734838; + padding: 20px; + font-weight: bolder; + border-bottom: 1px dotted #01402E; + } + + p { + padding: 14px 20px; + font-size: 14px; + text-align: left; + word-spacing: -3px; + } + + button { + border: 1px solid #01402E; + color: #01402E; + width: 130px; + height: 35px; + font-size: 15px; + line-height: 32px; + box-shadow: inset 0 0 0; + margin-top: 12px; + + &:hover { + background-color: #a7c5ba; + } + &.left-btn { + background-color: #dcdcdc; + border: 1px solid #dcdcdc; + color: gray; + font-weight: 400; + } + &.left-btn:hover { + background-color: #cacaca; + } + } +`; \ No newline at end of file diff --git a/frontend/src/components/StyledComponents/MyPageStyled.jsx b/frontend/src/components/StyledComponents/MyPageStyled.jsx new file mode 100644 index 0000000..64dfd70 --- /dev/null +++ b/frontend/src/components/StyledComponents/MyPageStyled.jsx @@ -0,0 +1,161 @@ +import styled from "styled-components"; + +export const PageFormBox = styled.div` + display: flex; + padding-top: 40px; + width: 100%; + height: 85vh; + min-width: 400px; + margin: 0 auto; + background-color: rgba(0, 0, 0, 0.5); + justify-content: center; +`; + +export const PageContainer = styled.div` + display: grid; + grid-template-columns: 1fr 3fr; + align-items: center; + justify-content: center; + width: 60vw; + height: 70vh; + background-color: #f2f2f2; + border-radius: 35px; + max-width: 898px; +` + +export const Menubox = styled.div` + display: flex; + flex-direction: column; + width: 15vw; + height: 69vh; + align-items: center; + padding: 0 5px; +` + +export const Menus = styled.div` + display: flex; + border: 1px solid #01402E; + border-radius: 10px; + width: 100%; + height: 60px; + color: #01402E; + font-size: 20px; + justify-content: center; + line-height: 60px; + letter-spacing: 3px; + margin: 5px; + cursor: pointer; + + &:first-child { + margin-top: 10px; + border: none; + font-size: 23px; + font-weight: bolder; + border-bottom: 3px solid #01402E; + } +` + +export const ContentBox = styled.div` + display: flex; + flex-direction: column; + width: 45vw; + height: 69vh; + border: 1px solid black; + max-width: 630px; + border-radius: 30px; +` + +export const ProfileBox = styled.div` + display: grid; + grid-template-columns: 1fr 2fr; + /* border: 1px solid black; */ + width: 100%; + height: 180px; + flex-wrap: wrap; +` + +export const ProfilePhoto = styled.div` + width: 120px; + height: 120px; + border-radius: 50%; + border: 1px solid black; + margin-top: 40px; + margin-left: 60px; + margin-right: 10px; +` + +export const ProfileIntro = styled.div` + display: flex; + flex-wrap: wrap; + width: 100%; + height: 150px; +` + +export const ProfileEmail = styled.div` + width: 200px; + height: 30px; + border-bottom: 1px solid black; + margin-top: 60px; + color: #01402E; +` + +export const ProfileMyInfo = styled.div` + width: 300px; + height: 30px; + border-bottom: 1px solid black; + color: #01402E; + margin-bottom: 15px; +` + +export const ReviewBox = styled.div` + display: grid; + grid-template-columns: 1fr 1fr 1fr; + width: 100%; + height: 180px; + flex-wrap: wrap; + margin-top: 30px; + color: #01402E; +` + +export const ReviewSquare = styled.div` + display: flex; + flex-direction: column; + /* border: 1px solid black; */ + justify-content: center; + align-items: center; + justify-content: space-evenly; +` + +export const ReviewOne = styled.div` + display: flex; + flex-direction: column; + border: 1px solid black; + border-radius: 50%; + width: 80px; + height: 80px; + justify-content: space-evenly; + text-align: center; +` + +export const ReviewTitle = styled.div` + width: 130px; + height: 30px; + border: 1px solid black; + text-align: center; +` + +export const PageFootBtnBox = styled.div` + display: grid; + grid-template-columns: 1fr 1fr; + width: 250px; + height: 60px; + margin-top: 140px; + padding-left: 10px; +` + +export const PageFootBtn = styled.button` + border: 1px solid black; + width: 110px; + height: 35px; + border-radius: 20px; +` \ No newline at end of file diff --git a/frontend/src/components/StyledComponents/SignStyled.jsx b/frontend/src/components/StyledComponents/SignStyled.jsx new file mode 100644 index 0000000..29dabac --- /dev/null +++ b/frontend/src/components/StyledComponents/SignStyled.jsx @@ -0,0 +1,153 @@ +import styled, { keyframes } from "styled-components"; + + +const boxFade = keyframes` + 0% { + transform: translateY(30px); + opacity: 0; + } + 100% { + transform: translateY(0px); + opacity: 1; + } +`; + +export const LoginInputBox = styled.div` + padding-top: 40px; + background-color: #f2f2f2; + color: #734838; + width: 50vw; + height: 55vh; + max-width: 500px; + min-width: 350px; + margin: 0 auto; + border-radius: 35px; + animation: ${boxFade} 1.5s ease-in-out; + + a:hover { + color: #f2f2f2; + } +`; + +export const FormBox = styled.div` + padding-top: 25px; + width: 100%; + height: 85vh; + min-width: 400px; + margin: 0 auto; + background-color: rgba(0, 0, 0, 0.5); +`; + +export const InputBox = styled.div` + padding-top: 40px; + background-color: #f2f2f2; + color: #734838; + width: 50vw; + height: 80vh; + max-width: 500px; + min-width: 350px; + margin: 0 auto; + border-radius: 35px; + animation: ${boxFade} 1.5s ease-in-out; +`; + +export const FormTitle = styled.h1` + font-size: 23px; + color: #01402E; + font-weight: bold; + margin-bottom: 20px; +`; + +export const InputTitle = styled.div` + float: left; + font-size: 13px; + font-weight: bold; + letter-spacing: -0.07px; + line-height: 15px; + padding-left: 3%; + padding-top: 15px; + padding-bottom: 5px; +` + +export const checkBtn = styled.button` + font-size: 10px; + color: #f2f2f2; + width: 78px; + height: 23px; + border: 1px solid #734838; + line-height: 22px; + float: right; + margin-right: 2%; + border-radius: 5px; + + &:hover { + cursor: pointer; + color: #f2f2f2; + line-height: 21px; + /* border: 2px solid #734838; */ + } + + &.checked { + background-color: #628d81; + } + + &.not-checked { + border: 1px solid #f25430; + background-color: #f2f2f2; + color: #f25430; + font-size: 11px; + font-weight: bolder; + } +` + +export const InputText = styled.input` + font-size: 15px; + margin-bottom: 5px; + &::placeholder { + font-size: 13px; + } + &:hover { + cursor: pointer; + /* border-bottom: 2px solid #01402E; */ + } +`; + +export const OutputText = styled.div` + font-size: 11px; + &.success { + color: #1D735A; + } + &.error { + color: #f25430; + } +`; + +export const FootBtnBox = styled.div` + width: 100%; + text-align: center; + padding-top: 40px; +` + +export const FootButton = styled.button` + border-radius: 30px; + background-color: #025f44; + color:#f2f2f2; + width: 200px; + height: 45px; + line-height: 45px; + margin-bottom: 5px; + font-size: 15px; + &:hover { + background-color: #01402E; + } +`; + +export const LogoBox = styled.div` + display: inline-flex; + width: 20%; + justify-content: space-around; + + .kakaologo { + height: 40px; + } +` \ No newline at end of file diff --git a/frontend/src/components/StyledComponents/StoreCardStyled.jsx b/frontend/src/components/StyledComponents/StoreCardStyled.jsx new file mode 100644 index 0000000..181ecb5 --- /dev/null +++ b/frontend/src/components/StyledComponents/StoreCardStyled.jsx @@ -0,0 +1,59 @@ +import styled from "styled-components"; + +export const CardBox = styled.div` + display: grid; + grid-template-rows: 1fr 1fr; + width: 30vw; + height: 18vh; + min-width: 430px; + max-width: 450px; + border: 1px solid #40282C; + margin-bottom: 5px; + background-color: whitesmoke; + color: #523338; +` + +export const InnerBox = styled.div` + display: flex; + flex-wrap: wrap; + /* position: relative; */ +` + +export const StoreName = styled.div` + text-align: center; + padding-top: 5px; + margin-left: 10px; + font-size: 17px; + width: 180px; + height: 30px; + border-bottom: 1px solid #40282C; + font-weight: border; +` + +export const StarBox = styled.div` + width: 150px; + height: 30px; + padding-top: 10px; + // 좋아요 밑으로 떨어지게 하려고 넣은 값. 조절해주세요. + margin-right: 70px; +` +export const LikeIcon = styled.div` + width: 25px; + height: 25px; + margin-left: 15px; +` + +export const StoreAdress = styled.div` + width: 365px; + height: 25px; + font-size: 14px; + padding-left: 2px; + border-bottom: 1px solid #40282C; +` + +export const StoreInfoBox = styled.div` + /* border: 1px solid #A0BCC2; */ + margin: 0px 10px; + padding-left: 5px; + font-size: 15px; +` \ No newline at end of file diff --git a/frontend/src/components/User/CheckModal.jsx b/frontend/src/components/User/CheckModal.jsx new file mode 100644 index 0000000..21709d6 --- /dev/null +++ b/frontend/src/components/User/CheckModal.jsx @@ -0,0 +1,39 @@ +import React, {useState} from "react"; +import * as ModalStyled from "../StyledComponents/ModalStyled"; + +function CheckModal ( {onCheckAccept, isAccepted, setIsAccpted }) { + const [openModal, setOpenModal] = useState(false); + + const showModal = () => { + setOpenModal(true); + } + const closeModal = () => { + setOpenModal(false); + setIsAccpted(false); + } + + const onSubmitAccept = () => { + closeModal(); + onCheckAccept(); + } + + return ( + <> + + + 약관 동의 * + + {openModal ? +

정보 이용 약관 동의

+

1. 탈퇴 시 회원 정보는 보류 처리되어 14일간 보관됩니다. 이 기간 동안 동일한 메일 주소로 회원가입을 할 시 가입이 제한되며, 탈퇴 취소를 원하시는 경우 취소 처리도 가능합니다.

+

+ 2. 탈퇴하더라도 작성하신 리뷰는 계속 남아 있게 됩니다. 작성한 리뷰를 제외한 모든 회원 정보는 삭제되며 남아 있는 리뷰의 작성자명은 '(익명)'으로 처리됩니다.

+

약관에 동의하십니까?

+ + +
: null} + + ) +} + +export default CheckModal; \ No newline at end of file diff --git a/frontend/src/components/User/KakaoAuth.jsx b/frontend/src/components/User/KakaoAuth.jsx new file mode 100644 index 0000000..dec6f72 --- /dev/null +++ b/frontend/src/components/User/KakaoAuth.jsx @@ -0,0 +1,47 @@ +import React, { useState, useEffect, useContext } from "react"; +import { useNavigate } from "react-router-dom"; +import * as Api from "../../utils/Api"; +import { DispatchContext } from "../../App"; + + +const KakaoAuth = () => { + const navigate = useNavigate(); + const dispatch = useContext(DispatchContext); + const [code, setCode] = useState(""); + + const kakaoLogin = async (_code) => { + if (!_code) return; + const res = await Api.post("kakaoOauth", {code: _code}); + + const kakaoUser = res.data; + const kakaoToken = kakaoUser.token; + + sessionStorage.setItem("userToken", kakaoToken); + + dispatch({ + type: "LOGIN", + payload: kakaoUser, + }) + navigate("/"); + }; + // 인가 코드 + const getSourceCode = () => { + const params = new URL(window.location.href).searchParams; + const _code = params.get("code"); + if (!code) { + kakaoLogin(_code); + } + setCode(_code); + } + + useEffect(()=> { + getSourceCode(); + }, []) + + + return ( +
로그인 중입니다. 잠시만 기다려주세요.
+ ) +} + +export default KakaoAuth; \ No newline at end of file diff --git a/frontend/src/components/User/LoginForm.jsx b/frontend/src/components/User/LoginForm.jsx new file mode 100644 index 0000000..9e5205d --- /dev/null +++ b/frontend/src/components/User/LoginForm.jsx @@ -0,0 +1,143 @@ +import React, { useContext, useState, useCallback, useEffect } from "react"; +import { useNavigate } from "react-router-dom"; +import * as LoginStyled from "../StyledComponents/SignStyled"; +import { KaKaoButton } from "./OAuth"; +// import NaverLogin from "./NaverLogin"; +import * as Api from "../../utils/Api"; +import { DispatchContext } from "../../App"; + + +function LoginForm () { + const navigate = useNavigate(); + const dispatch = useContext(DispatchContext); + + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [login, setLogin] = useState(true); + + const [emailMsg, setEmailMsg] = useState(""); + const [pwdMsg, setPwdMsg] = useState(''); + + const [checkEamil, setCheckEmail] = useState(false); + const [checkPwd, setCheckPwd] = useState(false); + + + //이메일, 비밀번호 유효성 검사 + const validateEmail = (email) => { + return email + .toLowerCase() + .match(/([\w-.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/); + }; + + const validatePwd = (password) => { + return password + .toLowerCase() + .match(/^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{10,25}$/); + } + + const isEmailValid = validateEmail(email); + const isPwdValid = validatePwd(password); + + const isAllValid = isEmailValid && isPwdValid; + + const onSubmit = async (e) => { + e.preventDefault(); + + try { + const res = await Api.post("user/login", { + email, + password, + }) + + const user = res.data; + const jwtToken = user.token; + const { result, errorCause } = res.data; + + // 토큰 저장 + sessionStorage.setItem("userToken", jwtToken); + + dispatch({ + type: "LOGIN", + payload: user, + }); + + if (!result) { + if (errorCause === "email") { + setEmailMsg("입력하신 이메일이 존재하지 않습니다. 다시 입력해주세요.") + setCheckEmail(false); + } else if (errorCause === "password") { + setPwdMsg("입력하신 비밀번호가 존재하지 않습니다. 다시 입력해주세요.") + setCheckPwd(false); + } + } else { + setCheckEmail(true); + setCheckPwd(true); + navigate("/", { replace: true }); + } + } catch (err) { + setLogin(false); + console.log("로그인 실패\n" , err) + } + } + + const onChangeEmail = useCallback((e) => { + const currEmail = e.target.value; + setEmail(currEmail); + + if (!validateEmail(currEmail)) { + setEmailMsg("이메일 형식이 올바르지 않습니다.")} else { + setEmailMsg("") + } + }) + + const onChangePwd = useCallback((e) =>{ + const currPwd = e.target.value; + setPassword(currPwd); + + if (!validatePwd(currPwd)) { + setPwdMsg("영문, 숫자, 특수기호 조합으로 10자리 이상 입력해주세요.") + } else { + setPwdMsg("") + } + }, []) + + + return ( + + + 로그인 + + 이메일 주소 * + + {emailMsg} + + 비밀번호 * + + {pwdMsg} + + + 로그인 + + 회원가입 + + + +
카카오톡으로 로그인하기
+ + {/* */} + + +
+
+ ); +} + +export default LoginForm; \ No newline at end of file diff --git a/frontend/src/components/User/NaverLogin.jsx b/frontend/src/components/User/NaverLogin.jsx new file mode 100644 index 0000000..3ead223 --- /dev/null +++ b/frontend/src/components/User/NaverLogin.jsx @@ -0,0 +1,54 @@ +import axios from 'axios'; +import { useEffect } from 'react'; +import { useLocation } from 'react-router-dom'; + +const NaverLogin = () => { + + const { naver } = window; + + const initializeNaverLogin = () => { + const naverLogin = new naver.LoginWithNaverId({ + clientId: import.meta.env.VITE_NAVER_CLIENT_ID, + callbackUrl: "http://127.0.0.1:5173", + // 팝업창으로 로그인을 진행할 건지? + isPopup: false, + loginButton: { color: 'white', type: 1, height: 45, width: 45 }, + callbackHandle: true, + }); + naverLogin.init(); + }; + + //이렇게 하면 토큰 추출 가능하고 리다이렉션 페이지가 빠르고 깨끗하게 처리된다고 해서 추가함 이 토큰 갖고 네이버 기능 완성하면 됨 + //네이버는 유저 정보를 클라이언트에 직접 주지 않는다. 백엔드에 엑세스 토큰을 넘기고 백엔드가 유저 api를 만들어주면 거기서 따로 호출해야 한다. + const location = useLocation(); + + const getNaverToken = async () => { + if (!location.hash) return; + const token = window.location.href.split('=')[1].split('&')[0]; + console.log(token); + + //api 쓸 곳 + await axios.post("naverOauth", { + token + }, { + withCredentials: true + }) + .then((res) => { + window.location.replace("/") + }) + }; + + useEffect(() => { + initializeNaverLogin(); + getNaverToken(); + }, []); + + + return ( + <> + + + ) +} + +export default NaverLogin; \ No newline at end of file diff --git a/frontend/src/components/User/OAuth.jsx b/frontend/src/components/User/OAuth.jsx new file mode 100644 index 0000000..858fcd9 --- /dev/null +++ b/frontend/src/components/User/OAuth.jsx @@ -0,0 +1,16 @@ + +const REST_API_KEY = import.meta.env.VITE_KAKAO_REST_API_KEY +const REDIRECT_URL = import.meta.env.VITE_KAKAO_REDIRECT_URL + +export const KAKAO_AUTH_URL = `https://kauth.kakao.com/oauth/authorize?client_id=${REST_API_KEY}&redirect_uri=${REDIRECT_URL}&response_type=code`; + + +export const KaKaoButton = () => { + return ( +
+ + + +
+ ) +}; \ No newline at end of file diff --git a/frontend/src/components/User/RegisterForm.jsx b/frontend/src/components/User/RegisterForm.jsx new file mode 100644 index 0000000..3bc3c6e --- /dev/null +++ b/frontend/src/components/User/RegisterForm.jsx @@ -0,0 +1,228 @@ +import React, { useCallback, useState } from "react"; +import { useNavigate } from "react-router-dom"; +import * as ResisterStyled from "../StyledComponents/SignStyled"; +import CheckModal from "./CheckModal"; +import * as Api from "../../utils/Api"; + + +function RegisterForm () { + //로그인 성공하면 내비게이트로 메인페이지 보내기 + const navigate = useNavigate(); + + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [confirmPwd, setConfirmPwd] = useState(""); + const [nickname, setNickname] = useState(""); + + const [isAccepted, setIsAccpted] = useState(false); + + + //각 항목 조건이 맞지 않을 때 띄우는 메시지 + const [emailMsg, setEmailMsg] = useState(""); + const [pwdMsg, setPwdMsg] = useState(''); + const [confirmPwdMsg, setConfirmPwdMsg]= useState("") + const [nicknameMsg, setNicknameMsg] = useState("") + + // 이메일, 닉네임 중복 확인 + const [checkMail, setCheckMail] = useState(false) + const [checkNickname, setCheckNickname] = useState(false) + + // 이메일, 비밀번호, 닉네임 유효성 검사 + const validateEmail = (email) => { + return email + .toLowerCase() + .match(/([\w-.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/); + }; + + const validatePwd = (password) => { + return password + .toLowerCase() + .match(/^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{10,25}$/); + } + + const validateNickname = (nickname) => { + return nickname + .toLowerCase() + .match(/^[ㄱ-ㅎ|가-힣|a-z|A-Z|0-9|].{1,8}$/) + } + + const onSubmit = async (e) => { + e.preventDefault(); + + try { + const apiResult = await Api.post("user/register", { + email, + password, + nickname, + }); + console.log(apiResult.data); + + const { result } = apiResult.data; + + if (result) { + navigate("/login"); + } + } catch (err) { + console.log(err); + } + }; + + const onCheckEmail = async (e) => { + e.preventDefault(); + + try { + const res = await Api.post("user/register/email", {email}); + + const { result } = res.data; + + if (!result) { + setEmailMsg("이미 등록된 메일입니다. 다시 입력해주세요."); + setCheckMail(false); + } else { + setEmailMsg("사용 가능한 메일입니다.😊"); + setCheckMail(true); + } + + } catch (err) { + console.log(err); + } + } + + const onCheckNickname = async (e) => { + e.preventDefault(); + + try { + const res = await Api.post("user/register/nickname", {nickname}); + + const { result } = res.data; + + if (!result) { + setNicknameMsg("이미 등록된 닉네임입니다. 다시 입력해주세요."); + setCheckNickname(false); + } else { + setNicknameMsg("사용 가능한 닉네임입니다.😊"); + setCheckNickname(true); + } + + } catch (err) { + console.log(err); + } + } + + const isEmailValid = validateEmail(email); + const isPwdValid = validatePwd(password); + const isConfirmPwd = password === confirmPwd; + const isNicknameValid = validateNickname(nickname); + + const isAllValid = isEmailValid && isPwdValid && isConfirmPwd && isNicknameValid && isAccepted && checkMail && checkNickname; + + + //이메일 + const onChangeEmail = useCallback( async (e) => { + const currEmail = e.target.value; + setEmail(currEmail); + + if (!validateEmail(currEmail)) { + setEmailMsg("이메일 형식이 올바르지 않습니다.") + } else { + setEmailMsg("올바른 이메일 형식입니다.") + } + }) + + //비밀번호 + const onChangePwd = useCallback((e) =>{ + const currPwd = e.target.value; + setPassword(currPwd); + + if (!validatePwd(currPwd)) { + setPwdMsg("영문, 숫자, 특수기호 조합으로 10자리 이상 입력해주세요.") + } else { + setPwdMsg("안전한 비밀번호입니다.") + } + }, []) + + //비밀번호 확인 + const onChangeConfirmPwd = useCallback((e) => { + const currConfirmPwd = e.target.value; + setConfirmPwd(currConfirmPwd); + + if (currConfirmPwd !== password) { + setConfirmPwdMsg("비밀번호가 일치하지 않습니다.") + } else { + setConfirmPwdMsg("올바른 비밀번호 형식입니다.") + } + }, [password]) + + //닉네임 + const onChangeNickname = useCallback((e) => { + const currNickname = e.target.value; + setNickname(currNickname); + + if (!validateNickname(currNickname)) { + setNicknameMsg("1글자 이상 9글자 미만으로 입력해주세요.") + } else { + setNicknameMsg("올바른 닉네임 형식입니다.") + } + }, []); + + const handleCheckAccept = useCallback(() => { + setIsAccpted(true); + }, []); + + + return ( + + + 회원가입 + + 중복 확인* + + 이메일 주소 * + + + {emailMsg} + + 비밀번호 * + + {pwdMsg} + + 비밀번호 확인 * + + {confirmPwdMsg} + + 중복 확인* + + 닉네임 * + + {nicknameMsg} + + + + + + 가입하기 + + + + + + ); +} + +export default RegisterForm; \ No newline at end of file diff --git a/frontend/src/hooks/useGeolocation.jsx b/frontend/src/hooks/useGeolocation.jsx new file mode 100644 index 0000000..7b53331 --- /dev/null +++ b/frontend/src/hooks/useGeolocation.jsx @@ -0,0 +1,17 @@ +import { useEffect, useState } from "react"; + +const useGeolocation = () => { + const [geo, setGeo] = useState({ lat: 0, lon: 0 }); + useEffect(() => { + navigator.geolocation.getCurrentPosition(function (pos) { + console.log(pos); + const latitude = pos.coords.latitude; + const longitude = pos.coords.longitude; + + setGeo({ lat: latitude, lon: longitude }); + }); + }, []); + return geo; +}; + +export default useGeolocation; \ No newline at end of file diff --git a/frontend/src/index.css b/frontend/src/index.css new file mode 100644 index 0000000..e1e9243 --- /dev/null +++ b/frontend/src/index.css @@ -0,0 +1,2568 @@ +@import url("https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.6/dist/web/static/pretendard-dynamic-subset.css"); + +/* + Spectral by HTML5 UP + html5up.net | @ajlkn + Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) +*/ + +.top-btn{ + text-align: center; +} + +.swiper { + width: 100%; + height: 100%; +} + +.swiper-slide { + font-size: 18px; + background: #fff; + + /* Center slide text vertically */ + display: -webkit-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; +} + +.swiper-slide img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; +} + +html, body, div, span, applet, object, +iframe, h1, h2, h3, h4, h5, h6, p, blockquote, +pre, a, abbr, acronym, address, big, cite, +code, del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, b, +u, i, center, dl, dt, dd, ol, ul, li, fieldset, +form, label, legend, table, caption, tbody, +tfoot, thead, tr, th, td, article, aside, +canvas, details, embed, figure, figcaption, +footer, header, hgroup, menu, nav, output, ruby, +section, summary, time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} + +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block;} + +body { + line-height: 1; +} + +ol, ul { + list-style: none; +} + +blockquote, q { + quotes: none; +} + + blockquote:before, blockquote:after, q:before, q:after { + content: ''; + content: none; + } + +table { + border-collapse: collapse; + border-spacing: 0; +} + +body { + -webkit-text-size-adjust: none; +} + +mark { + background-color: transparent; + color: inherit; +} + +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +input, select, textarea { + -moz-appearance: none; + -webkit-appearance: none; + -ms-appearance: none; + appearance: none; +} + +/* Basic */ + + @-ms-viewport { + width: device-width; + } + + html { + box-sizing: border-box; + } + + *, *:before, *:after { + box-sizing: inherit; + } + + body { + background: #2e3842; + } + + body.is-preload *, body.is-preload *:before, body.is-preload *:after { + -moz-animation: none !important; + -webkit-animation: none !important; + -ms-animation: none !important; + animation: none !important; + -moz-transition: none !important; + -webkit-transition: none !important; + -ms-transition: none !important; + transition: none !important; + } + + body, input, select, textarea { + color: #fff; + font-family: 'Pretendard', serif; + font-size: 15px; + font-weight: 400; + letter-spacing: 0.075em; + line-height: 1.65em; + } + + @media screen and (max-width: 1680px) { + + body, input, select, textarea { + font-size: 13pt; + } + + } + + @media screen and (max-width: 1280px) { + + body, input, select, textarea { + font-size: 12pt; + } + + } + + @media screen and (max-width: 736px) { + + body, input, select, textarea { + font-size: 11pt; + letter-spacing: 0.0375em; + } + + } + + a { + -moz-transition: color 0.2s ease, border-bottom-color 0.2s ease; + -webkit-transition: color 0.2s ease, border-bottom-color 0.2s ease; + -ms-transition: color 0.2s ease, border-bottom-color 0.2s ease; + transition: color 0.2s ease, border-bottom-color 0.2s ease; + color: inherit; + text-decoration: none; + } + + a:hover { + border-bottom-color: transparent; + color: #01402E; + } + + strong, b { + color: #fff; + font-weight: 600; + } + + em, i { + font-style: italic; + } + + p { + margin: 0 0 0 0; + font-size: 1.33rem; + } + + h1, h2, h3, h4, h5, h6 { + color: #fff; + font-weight: 800; + letter-spacing: 0.15em; + line-height: 1em; + margin: 0 0 1em 0; + text-transform: uppercase; + } + + h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { + color: inherit; + text-decoration: none; + } + + h2 { + font-size: 1.65em; + line-height: 1.5em; + } + + @media screen and (max-width: 736px) { + + h2 { + font-size: 1.1em; + line-height: 1.65em; + } + + } + + h3 { + font-size: 1.2em; + line-height: 1.75em; + } + + @media screen and (max-width: 736px) { + + h3 { + font-size: 1em; + line-height: 1.65em; + } + + } + + h4 { + font-size: 1em; + line-height: 1.5em; + } + + h5 { + font-size: 0.8em; + line-height: 1.5em; + } + + h6 { + font-size: 0.7em; + line-height: 1.5em; + } + + sub { + font-size: 0.8em; + position: relative; + top: 0.5em; + } + + sup { + font-size: 0.8em; + position: relative; + top: -0.5em; + } + + hr { + border: 0; + border-bottom: solid 2px #fff; + margin: 3em 0; + } + + hr.major { + margin: 4.5em 0; + } + + blockquote { + border-left: solid 4px #fff; + font-style: italic; + margin: 0 0 2em 0; + padding: 0.5em 0 0.5em 2em; + } + + code { + background: rgba(144, 144, 144, 0.25); + border-radius: 3px; + font-family: "Courier New", monospace; + font-size: 0.9em; + letter-spacing: 0; + margin: 0 0.25em; + padding: 0.25em 0.65em; + } + + pre { + -webkit-overflow-scrolling: touch; + font-family: "Courier New", monospace; + font-size: 0.9em; + margin: 0 0 2em 0; + } + + pre code { + display: block; + line-height: 1.75em; + padding: 1em 1.5em; + overflow-x: auto; + } + + .align-left { + text-align: left; + } + + .align-center { + text-align: center; + } + + .align-right { + text-align: right; + } + +/* Section/Article */ + + section.special, article.special { + text-align: center; + } + + header p { + color: rgba(255, 255, 255, 0.5); + position: relative; + top: -0.25em; + } + + header h3 + p { + font-size: 1.1em; + } + + header h4 + p, + header h5 + p, + header h6 + p { + font-size: 0.9em; + } + + header.major { + margin: 0 0 3.5em 0; + } + + header.major h2, header.major h3, header.major h4, header.major h5, header.major h6 { + border-bottom: solid 2px #fff; + display: inline-block; + padding-bottom: 1em; + position: relative; + } + + header.major h2:after, header.major h3:after, header.major h4:after, header.major h5:after, header.major h6:after { + content: ''; + display: block; + height: 1px; + } + + header.major p { + color: #fff; + top: 0; + } + + @media screen and (max-width: 736px) { + + header.major { + margin: 0 0 2em 0; + } + + } + + @media screen and (max-width: 980px) { + + header br { + display: none; + } + + } + +/* Form */ + + form { + margin: 0 0 2em 0; + } + + label { + color: #fff; + display: block; + font-size: 0.9em; + font-weight: 600; + margin: 0 0 1em 0; + } + + input[type="text"], + input[type="password"], + input[type="email"], + select, + textarea { + -moz-appearance: none; + -webkit-appearance: none; + -ms-appearance: none; + appearance: none; + background-color: rgba(144, 144, 144, 0.25); + border-radius: 3px; + border: none; + color: inherit; + display: block; + outline: 0; + padding: 0 1em; + text-decoration: none; + width: 100%; + } + + input[type="text"]:invalid, + input[type="password"]:invalid, + input[type="email"]:invalid, + select:invalid, + textarea:invalid { + box-shadow: none; + } + + input[type="text"]:focus, + input[type="password"]:focus, + input[type="email"]:focus, + select:focus, + textarea:focus { + box-shadow: 0 0 0 2px #21b2a6; + } + + select { + background-size: 1.25em; + background-repeat: no-repeat; + background-position: calc(100% - 1em) center; + height: 2.75em; + padding-right: 2.75em; + text-overflow: ellipsis; + } + + select:focus::-ms-value { + background-color: transparent; + } + + select::-ms-expand { + display: none; + } + + input[type="text"], + input[type="password"], + input[type="email"], + select { + height: 2.75em; + } + + textarea { + padding: 0.75em 1em; + } + + input[type="checkbox"], + input[type="radio"] { + -moz-appearance: none; + -webkit-appearance: none; + -ms-appearance: none; + appearance: none; + display: block; + float: left; + margin-right: -2em; + opacity: 0; + width: 1em; + z-index: -1; + } + + input[type="checkbox"] + label, + input[type="radio"] + label { + text-decoration: none; + color: #fff; + cursor: pointer; + display: inline-block; + font-size: 1em; + font-weight: 400; + padding-left: 2.4em; + padding-right: 0.75em; + position: relative; + } + + input[type="checkbox"] + label:before, + input[type="radio"] + label:before { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; + text-transform: none !important; + font-family: 'Font Awesome 5 Free'; + font-weight: 900; + } + + input[type="checkbox"] + label:before, + input[type="radio"] + label:before { + background: rgba(144, 144, 144, 0.25); + border-radius: 3px; + content: ''; + display: inline-block; + font-size: 0.8em; + height: 2.0625em; + left: 0; + line-height: 2.0625em; + position: absolute; + text-align: center; + top: 0; + width: 2.0625em; + } + + input[type="checkbox"]:checked + label:before, + input[type="radio"]:checked + label:before { + background: #2e3842; + color: #fff; + content: '\f00c'; + } + + input[type="checkbox"]:focus + label:before, + input[type="radio"]:focus + label:before { + box-shadow: 0 0 0 2px #21b2a6; + } + + input[type="checkbox"] + label:before { + border-radius: 3px; + } + + input[type="radio"] + label:before { + border-radius: 100%; + } + + ::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.5) !important; + opacity: 1.0; + } + + :-moz-placeholder { + color: rgba(255, 255, 255, 0.5) !important; + opacity: 1.0; + } + + ::-moz-placeholder { + color: rgba(255, 255, 255, 0.5) !important; + opacity: 1.0; + } + + :-ms-input-placeholder { + color: rgba(255, 255, 255, 0.5) !important; + opacity: 1.0; + } + +/* Box */ + + .box { + border-radius: 3px; + border: solid 2px #fff; + margin-bottom: 2em; + padding: 1.5em; + } + + .box > :last-child, + .box > :last-child > :last-child, + .box > :last-child > :last-child > :last-child { + margin-bottom: 0; + } + + .box.alt { + border: 0; + border-radius: 0; + padding: 0; + } + +/* Icon */ + + .icon { + text-decoration: none; + border-bottom: none; + position: relative; + } + + .icon:before { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; + text-transform: none !important; + font-family: 'Font Awesome 5 Free'; + font-weight: 400; + } + + .icon > .label { + display: none; + } + + .icon:before { + line-height: inherit; + } + + .icon.solid:before { + font-weight: 900; + } + + .icon.brands:before { + font-family: 'Font Awesome 5 Brands'; + } + + .icon.major { + -moz-transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + transform: rotate(-45deg); + border-radius: 3px; + border: solid 2px #fff; + display: inline-block; + font-size: 1.35em; + height: calc(3em + 2px); + line-height: 3em; + text-align: center; + width: calc(3em + 2px); + } + + .icon.major:before { + -moz-transform: rotate(45deg); + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + display: inline-block; + font-size: 1.5em; + } + + @media screen and (max-width: 736px) { + + .icon.major { + font-size: 1em; + } + + } + + .icon.style1 { + color: #00ffcc; + } + + .icon.style2 { + color: #00f0ff; + } + + .icon.style3 { + color: #76ddff; + } + +/* Image */ + + .image { + border-radius: 3px; + border: 0; + display: inline-block; + position: relative; + } + + .image img { + border-radius: 3px; + display: block; + } + + .image.left { + float: left; + margin: 0 2em 2em 0; + top: 0.25em; + } + + .image.right { + float: right; + margin: 0 0 2em 2em; + top: 0.25em; + } + + .image.left, .image.right { + max-width: 40%; + } + + .image.left img, .image.right img { + width: 100%; + } + + .image.fit { + display: block; + margin: 0 0 2em 0; + width: 100%; + } + + .image.fit img { + width: 100%; + } + +/* List */ + + ol { + list-style: decimal; + margin: 0 0 2em 0; + padding-left: 1.25em; + } + + ol li { + padding-left: 0.25em; + } + + ul { + list-style: disc; + margin: 0 0 2em 0; + padding-left: 1em; + } + + ul li { + padding-left: 0.5em; + } + + ul.alt { + list-style: none; + padding-left: 0; + } + + ul.alt li { + border-top: solid 1px #fff; + padding: 0.5em 0; + } + + ul.alt li:first-child { + border-top: 0; + padding-top: 0; + } + + dl { + margin: 0 0 2em 0; + } + +/* Actions */ + + ul.actions { + display: -moz-flex; + display: -webkit-flex; + display: -ms-flex; + display: flex; + cursor: default; + list-style: none; + margin-left: -1em; + padding-left: 0; + } + + ul.actions li { + padding: 0 0 0 1em; + vertical-align: middle; + } + + ul.actions.special { + -moz-justify-content: center; + -webkit-justify-content: center; + -ms-justify-content: center; + justify-content: center; + width: 100%; + margin-left: 0; + } + + ul.actions.special li:first-child { + padding-left: 0; + } + + ul.actions.stacked { + -moz-flex-direction: column; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin-left: 0; + } + + ul.actions.stacked li { + padding: 1em 0 0 0; + } + + ul.actions.stacked li:first-child { + padding-top: 0; + } + + ul.actions.fit { + width: calc(100% + 1em); + } + + ul.actions.fit li { + -moz-flex-grow: 1; + -webkit-flex-grow: 1; + -ms-flex-grow: 1; + flex-grow: 1; + -moz-flex-shrink: 1; + -webkit-flex-shrink: 1; + -ms-flex-shrink: 1; + flex-shrink: 1; + width: 100%; + } + + ul.actions.fit li > * { + width: 100%; + } + + ul.actions.fit.stacked { + width: 100%; + } + + @media screen and (max-width: 480px) { + + ul.actions:not(.fixed) { + -moz-flex-direction: column; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin-left: 0; + width: 100% !important; + } + + ul.actions:not(.fixed) li { + -moz-flex-grow: 1; + -webkit-flex-grow: 1; + -ms-flex-grow: 1; + flex-grow: 1; + -moz-flex-shrink: 1; + -webkit-flex-shrink: 1; + -ms-flex-shrink: 1; + flex-shrink: 1; + padding: 1em 0 0 0; + text-align: center; + width: 100%; + } + + ul.actions:not(.fixed) li > * { + width: 100%; + } + + ul.actions:not(.fixed) li:first-child { + padding-top: 0; + } + + ul.actions:not(.fixed) li input[type="submit"], + ul.actions:not(.fixed) li input[type="reset"], + ul.actions:not(.fixed) li input[type="button"], + ul.actions:not(.fixed) li button, + ul.actions:not(.fixed) li .button { + width: 100%; + } + + ul.actions:not(.fixed) li input[type="submit"].icon:before, + ul.actions:not(.fixed) li input[type="reset"].icon:before, + ul.actions:not(.fixed) li input[type="button"].icon:before, + ul.actions:not(.fixed) li button.icon:before, + ul.actions:not(.fixed) li .button.icon:before { + margin-left: -0.5em; + } + + } + +/* Icons */ + + ul.icons { + cursor: default; + list-style: none; + padding-left: 0; + } + + ul.icons li { + display: inline-block; + padding: 0 1em 0 0; + } + + ul.icons li:last-child { + padding-right: 0 !important; + } + + ul.icons.major { + padding: 1em 0; + } + + ul.icons.major li { + padding-right: 3.5em; + } + + @media screen and (max-width: 736px) { + + ul.icons.major li { + padding: 0 1em !important; + } + + } + +/* Table */ + + .table-wrapper { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + } + + table { + margin: 0 0 2em 0; + width: 100%; + } + + table tbody tr { + border: solid 1px #fff; + border-left: 0; + border-right: 0; + } + + table tbody tr:nth-child(2n + 1) { + background-color: rgba(144, 144, 144, 0.25); + } + + table td { + padding: 0.75em 0.75em; + } + + table th { + color: #fff; + font-size: 0.9em; + font-weight: 600; + padding: 0 0.75em 0.75em 0.75em; + text-align: left; + } + + table thead { + border-bottom: solid 2px #fff; + } + + table tfoot { + border-top: solid 2px #fff; + } + + table.alt { + border-collapse: separate; + } + + table.alt tbody tr td { + border: solid 1px #fff; + border-left-width: 0; + border-top-width: 0; + } + + table.alt tbody tr td:first-child { + border-left-width: 1px; + } + + table.alt tbody tr:first-child td { + border-top-width: 1px; + } + + table.alt thead { + border-bottom: 0; + } + + table.alt tfoot { + border-top: 0; + } + +/* Button */ + + input[type="submit"], + input[type="reset"], + input[type="button"], + button, + .button { + -moz-appearance: none; + -webkit-appearance: none; + -ms-appearance: none; + appearance: none; + -moz-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; + -webkit-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; + -ms-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; + background-color: transparent; + /* border-radius: 3px; */ + border: 0; + box-shadow: inset 0 0 0 1px #fff; + /* color: #fff; */ + cursor: pointer; + display: inline-block; + font-size: 0.8em; + font-weight: 600; + height: 3.125em; + letter-spacing: 0.225em; + /* line-height: 3.125em; */ + max-width: 30em; + /* padding: 0 2.75em; */ + text-align: center; + text-decoration: none; + text-transform: uppercase; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + input[type="submit"]:hover, + input[type="reset"]:hover, + input[type="button"]:hover, + button:hover, + .button:hover { + background-color: rgba(144, 144, 144, 0.25); + } + + input[type="submit"]:active, + input[type="reset"]:active, + input[type="button"]:active, + button:active, + .button:active { + background-color: rgba(144, 144, 144, 0.5); + } + + input[type="submit"].icon:before, + input[type="reset"].icon:before, + input[type="button"].icon:before, + button.icon:before, + .button.icon:before { + margin-right: 0.5em; + } + + input[type="submit"].fit, + input[type="reset"].fit, + input[type="button"].fit, + button.fit, + .button.fit { + width: 100%; + } + + input[type="submit"].small, + input[type="reset"].small, + input[type="button"].small, + button.small, + .button.small { + font-size: 0.8em; + } + + input[type="submit"].large, + input[type="reset"].large, + input[type="button"].large, + button.large, + .button.large { + font-size: 1.35em; + } + + input[type="submit"].primary, + input[type="reset"].primary, + input[type="button"].primary, + button.primary, + .button.primary { + background-color: #ed4933; + box-shadow: none !important; + color: #ffffff !important; + display: inline-block; + } + + input[type="submit"].primary:hover, + input[type="reset"].primary:hover, + input[type="button"].primary:hover, + button.primary:hover, + .button.primary:hover { + background-color: #ef5e4a !important; + } + + input[type="submit"].primary:active, + input[type="reset"].primary:active, + input[type="button"].primary:active, + button.primary:active, + .button.primary:active { + background-color: #eb341c !important; + } + + input[type="submit"].disabled, input[type="submit"]:disabled, + input[type="reset"].disabled, + input[type="reset"]:disabled, + input[type="button"].disabled, + input[type="button"]:disabled, + button.disabled, + button:disabled, + .button.disabled, + .button:disabled { + pointer-events: none; + opacity: 0.25; + } + + @media screen and (max-width: 736px) { + + input[type="submit"], + input[type="reset"], + input[type="button"], + button, + .button { + height: 3.75em; + line-height: 3.75em; + } + + } + +/* Features */ + + .features { + display: -moz-flex; + display: -webkit-flex; + display: -ms-flex; + display: flex; + -moz-flex-wrap: wrap; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -moz-justify-content: center; + -webkit-justify-content: center; + -ms-justify-content: center; + justify-content: center; + list-style: none; + padding: 0; + width: 100%; + } + + .features li { + padding: 4em 4em 2em 6em ; + display: block; + position: relative; + text-align: left; + width: 50%; + } + + .features li:nth-child(1) { + background-color: rgba(0, 0, 0, 0.035); + } + + .features li:nth-child(2) { + background-color: rgba(0, 0, 0, 0.07); + } + + .features li:nth-child(3) { + background-color: rgba(0, 0, 0, 0.105); + } + + .features li:nth-child(4) { + background-color: rgba(0, 0, 0, 0.14); + } + + .features li:nth-child(5) { + background-color: rgba(0, 0, 0, 0.175); + } + + .features li:nth-child(6) { + background-color: rgba(0, 0, 0, 0.21); + } + + .features li:nth-child(7) { + background-color: rgba(0, 0, 0, 0.245); + } + + .features li:nth-child(8) { + background-color: rgba(0, 0, 0, 0.28); + } + + .features li:nth-child(9) { + background-color: rgba(0, 0, 0, 0.315); + } + + .features li:nth-child(10) { + background-color: rgba(0, 0, 0, 0.35); + } + + .features li:before { + display: block; + color: #00ffcc; + position: absolute; + left: 1.75em; + top: 2.75em; + font-size: 1.5em; + } + + .features li:nth-child(1) { + border-top-left-radius: 3px; + } + + .features li:nth-child(2) { + border-top-right-radius: 3px; + } + + .features li:nth-last-child(1) { + border-bottom-right-radius: 3px; + } + + .features li:nth-last-child(2) { + border-bottom-left-radius: 3px; + } + + @media screen and (max-width: 980px) { + + .features li { + padding: 3em 2em 1em 2em ; + text-align: center; + } + + .features li:before { + left: 0; + margin: 0 0 1em 0; + position: relative; + top: 0; + } + + } + + @media screen and (max-width: 736px) { + + .features li { + padding: 3em 0 1em 0 ; + background-color: transparent !important; + border-top: solid 2px #fff; + width: 100%; + } + + .features li:first-child { + border-top: 0; + } + + } + +/* Spotlight */ + + .spotlight { + -moz-align-items: center; + -webkit-align-items: center; + -ms-align-items: center; + align-items: center; + display: -moz-flex; + display: -webkit-flex; + display: -ms-flex; + display: flex; + } + + .spotlight .image { + -moz-order: 1; + -webkit-order: 1; + -ms-order: 1; + order: 1; + border-radius: 0; + width: 40%; + } + + .spotlight .image img { + border-radius: 0; + width: 100%; + } + + .spotlight .content { + padding: 2em 4em 0.1em 4em ; + -moz-order: 2; + -webkit-order: 2; + -ms-order: 2; + order: 2; + max-width: 48em; + width: 60%; + } + + .spotlight:nth-child(2n) { + -moz-flex-direction: row-reverse; + -webkit-flex-direction: row-reverse; + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; + } + + .spotlight:nth-child(1) { + background-color: rgba(0, 0, 0, 0.075); + } + + .spotlight:nth-child(2) { + background-color: rgba(0, 0, 0, 0.15); + } + + .spotlight:nth-child(3) { + background-color: rgba(0, 0, 0, 0.225); + } + + .spotlight:nth-child(4) { + background-color: rgba(0, 0, 0, 0.3); + } + + .spotlight:nth-child(5) { + background-color: rgba(0, 0, 0, 0.375); + } + + .spotlight:nth-child(6) { + background-color: rgba(0, 0, 0, 0.45); + } + + .spotlight:nth-child(7) { + background-color: rgba(0, 0, 0, 0.525); + } + + .spotlight:nth-child(8) { + background-color: rgba(0, 0, 0, 0.6); + } + + .spotlight:nth-child(9) { + background-color: rgba(0, 0, 0, 0.675); + } + + .spotlight:nth-child(10) { + background-color: rgba(0, 0, 0, 0.75); + } + + @media screen and (max-width: 1280px) { + + .spotlight .image { + width: 45%; + } + + .spotlight .content { + width: 55%; + } + + } + + @media screen and (max-width: 980px) { + + .spotlight { + display: block; + } + + .spotlight br { + display: none; + } + + .spotlight .image { + width: 100%; + } + + .spotlight .content { + padding: 4em 3em 2em 3em ; + max-width: none; + text-align: center; + width: 100%; + } + + } + + @media screen and (max-width: 736px) { + + .spotlight .content { + padding: 3em 2em 1em 2em ; + } + + } + +/* Wrapper */ + + .wrapper { + padding: 6em 0 4em 0 ; + } + + .wrapper > .inner { + width: 60em; + margin: 0 auto; + } + + @media screen and (max-width: 1280px) { + + .wrapper > .inner { + width: 90%; + } + + } + + @media screen and (max-width: 980px) { + + .wrapper > .inner { + width: 100%; + } + + } + + .wrapper.alt { + padding: 0; + } + + .wrapper.style1 { + background-color: #21b2a6; + color: #c8ece9; + } + + .wrapper.style1 strong, .wrapper.style1 b { + color: #ffffff; + } + + .wrapper.style1 h2, .wrapper.style1 h3, .wrapper.style1 h4, .wrapper.style1 h5, .wrapper.style1 h6 { + color: #ffffff; + } + + .wrapper.style1 hr { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style1 blockquote { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style1 code { + background: rgba(255, 255, 255, 0.075); + } + + .wrapper.style1 header p { + color: #a6e0db; + } + + .wrapper.style1 header.major h2, .wrapper.style1 header.major h3, .wrapper.style1 header.major h4, .wrapper.style1 header.major h5, .wrapper.style1 header.major h6 { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style1 header.major p { + color: #c8ece9; + } + + .wrapper.style1 label { + color: #ffffff; + } + + .wrapper.style1 input[type="text"], + .wrapper.style1 input[type="password"], + .wrapper.style1 input[type="email"], + .wrapper.style1 select, + .wrapper.style1 textarea { + background-color: rgba(255, 255, 255, 0.075); + } + + .wrapper.style1 select { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' preserveAspectRatio='none' viewBox='0 0 40 40'%3E%3Cpath d='M9.4,12.3l10.4,10.4l10.4-10.4c0.2-0.2,0.5-0.4,0.9-0.4c0.3,0,0.6,0.1,0.9,0.4l3.3,3.3c0.2,0.2,0.4,0.5,0.4,0.9 c0,0.4-0.1,0.6-0.4,0.9L20.7,31.9c-0.2,0.2-0.5,0.4-0.9,0.4c-0.3,0-0.6-0.1-0.9-0.4L4.3,17.3c-0.2-0.2-0.4-0.5-0.4-0.9 c0-0.4,0.1-0.6,0.4-0.9l3.3-3.3c0.2-0.2,0.5-0.4,0.9-0.4S9.1,12.1,9.4,12.3z' fill='rgba(0, 0, 0, 0.125)' /%3E%3C/svg%3E"); + } + + .wrapper.style1 select option { + color: #ffffff; + background: #21b2a6; + } + + .wrapper.style1 input[type="checkbox"] + label, + .wrapper.style1 input[type="radio"] + label { + color: #c8ece9; + } + + .wrapper.style1 input[type="checkbox"] + label:before, + .wrapper.style1 input[type="radio"] + label:before { + background: rgba(255, 255, 255, 0.075); + } + + .wrapper.style1 input[type="checkbox"]:checked + label:before, + .wrapper.style1 input[type="radio"]:checked + label:before { + background: #ffffff; + color: #21b2a6; + } + + .wrapper.style1 ::-webkit-input-placeholder { + color: #a6e0db !important; + } + + .wrapper.style1 :-moz-placeholder { + color: #a6e0db !important; + } + + .wrapper.style1 ::-moz-placeholder { + color: #a6e0db !important; + } + + .wrapper.style1 :-ms-input-placeholder { + color: #a6e0db !important; + } + + .wrapper.style1 .formerize-placeholder { + color: #a6e0db !important; + } + + .wrapper.style1 .icon.major { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style1 ul.alt li { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style1 table tbody tr { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style1 table tbody tr:nth-child(2n + 1) { + background-color: rgba(255, 255, 255, 0.075); + } + + .wrapper.style1 table th { + color: #ffffff; + } + + .wrapper.style1 table thead { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style1 table tfoot { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style1 table.alt tbody tr td { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style1 input[type="submit"], + .wrapper.style1 input[type="reset"], + .wrapper.style1 input[type="button"], + .wrapper.style1 button, + .wrapper.style1 .button { + box-shadow: inset 0 0 0 2px rgba(0, 0, 0, 0.125); + color: #ffffff; + } + + .wrapper.style1 input[type="submit"]:hover, + .wrapper.style1 input[type="reset"]:hover, + .wrapper.style1 input[type="button"]:hover, + .wrapper.style1 button:hover, + .wrapper.style1 .button:hover { + background-color: rgba(255, 255, 255, 0.075); + } + + .wrapper.style1 input[type="submit"]:active, + .wrapper.style1 input[type="reset"]:active, + .wrapper.style1 input[type="button"]:active, + .wrapper.style1 button:active, + .wrapper.style1 .button:active { + background-color: rgba(255, 255, 255, 0.2); + } + + @media screen and (max-width: 736px) { + + .wrapper.style1 .features li { + border-top-color: rgba(0, 0, 0, 0.125); + } + + } + + .wrapper.style2 { + background-color: #2e3842; + } + + .wrapper.style3 { + background-color: #505393; + color: #d3d4e4; + } + + .wrapper.style3 strong, .wrapper.style3 b { + color: #ffffff; + } + + .wrapper.style3 h2, .wrapper.style3 h3, .wrapper.style3 h4, .wrapper.style3 h5, .wrapper.style3 h6 { + color: #ffffff; + } + + .wrapper.style3 hr { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style3 blockquote { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style3 code { + background: rgba(255, 255, 255, 0.075); + } + + .wrapper.style3 header p { + color: #b9bad4; + } + + .wrapper.style3 header.major h2, .wrapper.style3 header.major h3, .wrapper.style3 header.major h4, .wrapper.style3 header.major h5, .wrapper.style3 header.major h6 { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style3 header.major p { + color: #d3d4e4; + } + + .wrapper.style3 label { + color: #ffffff; + } + + .wrapper.style3 input[type="text"], + .wrapper.style3 input[type="password"], + .wrapper.style3 input[type="email"], + .wrapper.style3 select, + .wrapper.style3 textarea { + background-color: rgba(255, 255, 255, 0.075); + } + + .wrapper.style3 select { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' preserveAspectRatio='none' viewBox='0 0 40 40'%3E%3Cpath d='M9.4,12.3l10.4,10.4l10.4-10.4c0.2-0.2,0.5-0.4,0.9-0.4c0.3,0,0.6,0.1,0.9,0.4l3.3,3.3c0.2,0.2,0.4,0.5,0.4,0.9 c0,0.4-0.1,0.6-0.4,0.9L20.7,31.9c-0.2,0.2-0.5,0.4-0.9,0.4c-0.3,0-0.6-0.1-0.9-0.4L4.3,17.3c-0.2-0.2-0.4-0.5-0.4-0.9 c0-0.4,0.1-0.6,0.4-0.9l3.3-3.3c0.2-0.2,0.5-0.4,0.9-0.4S9.1,12.1,9.4,12.3z' fill='rgba(0, 0, 0, 0.125)' /%3E%3C/svg%3E"); + } + + .wrapper.style3 select option { + color: #ffffff; + background: #505393; + } + + .wrapper.style3 input[type="checkbox"] + label, + .wrapper.style3 input[type="radio"] + label { + color: #d3d4e4; + } + + .wrapper.style3 input[type="checkbox"] + label:before, + .wrapper.style3 input[type="radio"] + label:before { + background: rgba(255, 255, 255, 0.075); + } + + .wrapper.style3 input[type="checkbox"]:checked + label:before, + .wrapper.style3 input[type="radio"]:checked + label:before { + background: #ffffff; + color: #505393; + } + + .wrapper.style3 ::-webkit-input-placeholder { + color: #b9bad4 !important; + } + + .wrapper.style3 :-moz-placeholder { + color: #b9bad4 !important; + } + + .wrapper.style3 ::-moz-placeholder { + color: #b9bad4 !important; + } + + .wrapper.style3 :-ms-input-placeholder { + color: #b9bad4 !important; + } + + .wrapper.style3 .formerize-placeholder { + color: #b9bad4 !important; + } + + .wrapper.style3 .icon.major { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style3 ul.alt li { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style3 table tbody tr { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style3 table tbody tr:nth-child(2n + 1) { + background-color: rgba(255, 255, 255, 0.075); + } + + .wrapper.style3 table th { + color: #ffffff; + } + + .wrapper.style3 table thead { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style3 table tfoot { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style3 table.alt tbody tr td { + border-color: rgba(0, 0, 0, 0.125); + } + + .wrapper.style3 input[type="submit"], + .wrapper.style3 input[type="reset"], + .wrapper.style3 input[type="button"], + .wrapper.style3 button, + .wrapper.style3 .button { + box-shadow: inset 0 0 0 2px rgba(0, 0, 0, 0.125); + color: #ffffff; + } + + .wrapper.style3 input[type="submit"]:hover, + .wrapper.style3 input[type="reset"]:hover, + .wrapper.style3 input[type="button"]:hover, + .wrapper.style3 button:hover, + .wrapper.style3 .button:hover { + background-color: rgba(255, 255, 255, 0.075); + } + + .wrapper.style3 input[type="submit"]:active, + .wrapper.style3 input[type="reset"]:active, + .wrapper.style3 input[type="button"]:active, + .wrapper.style3 button:active, + .wrapper.style3 .button:active { + background-color: rgba(255, 255, 255, 0.2); + } + + @media screen and (max-width: 736px) { + + .wrapper.style3 .features li { + border-top-color: rgba(0, 0, 0, 0.125); + } + + } + + .wrapper.style4 { + background-color: transparent; + } + + .wrapper.style5 { + background-color: #ffffff; + color: #4E4852; + } + + .wrapper.style5 strong, .wrapper.style5 b { + color: #2E3842; + } + + .wrapper.style5 h2, .wrapper.style5 h3, .wrapper.style5 h4, .wrapper.style5 h5, .wrapper.style5 h6 { + color: #2E3842; + } + + .wrapper.style5 hr { + border-color: #dfdfdf; + } + + .wrapper.style5 blockquote { + border-color: #dfdfdf; + } + + .wrapper.style5 code { + background: rgba(0, 0, 0, 0.0375); + } + + .wrapper.style5 header p { + color: #8E8892; + } + + .wrapper.style5 header.major h2, .wrapper.style5 header.major h3, .wrapper.style5 header.major h4, .wrapper.style5 header.major h5, .wrapper.style5 header.major h6 { + border-color: #dfdfdf; + } + + .wrapper.style5 header.major p { + color: #4E4852; + } + + .wrapper.style5 label { + color: #2E3842; + } + + .wrapper.style5 input[type="text"], + .wrapper.style5 input[type="password"], + .wrapper.style5 input[type="email"], + .wrapper.style5 select, + .wrapper.style5 textarea { + background-color: rgba(0, 0, 0, 0.0375); + } + + .wrapper.style5 select { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' preserveAspectRatio='none' viewBox='0 0 40 40'%3E%3Cpath d='M9.4,12.3l10.4,10.4l10.4-10.4c0.2-0.2,0.5-0.4,0.9-0.4c0.3,0,0.6,0.1,0.9,0.4l3.3,3.3c0.2,0.2,0.4,0.5,0.4,0.9 c0,0.4-0.1,0.6-0.4,0.9L20.7,31.9c-0.2,0.2-0.5,0.4-0.9,0.4c-0.3,0-0.6-0.1-0.9-0.4L4.3,17.3c-0.2-0.2-0.4-0.5-0.4-0.9 c0-0.4,0.1-0.6,0.4-0.9l3.3-3.3c0.2-0.2,0.5-0.4,0.9-0.4S9.1,12.1,9.4,12.3z' fill='%23dfdfdf' /%3E%3C/svg%3E"); + } + + .wrapper.style5 select option { + color: #2E3842; + background: #ffffff; + } + + .wrapper.style5 input[type="checkbox"] + label, + .wrapper.style5 input[type="radio"] + label { + color: #4E4852; + } + + .wrapper.style5 input[type="checkbox"] + label:before, + .wrapper.style5 input[type="radio"] + label:before { + background: rgba(0, 0, 0, 0.0375); + } + + .wrapper.style5 input[type="checkbox"]:checked + label:before, + .wrapper.style5 input[type="radio"]:checked + label:before { + background: #2E3842; + color: #ffffff; + } + + .wrapper.style5 ::-webkit-input-placeholder { + color: #8E8892 !important; + } + + .wrapper.style5 :-moz-placeholder { + color: #8E8892 !important; + } + + .wrapper.style5 ::-moz-placeholder { + color: #8E8892 !important; + } + + .wrapper.style5 :-ms-input-placeholder { + color: #8E8892 !important; + } + + .wrapper.style5 .formerize-placeholder { + color: #8E8892 !important; + } + + .wrapper.style5 .icon.major { + border-color: #dfdfdf; + } + + .wrapper.style5 ul.alt li { + border-color: #dfdfdf; + } + + .wrapper.style5 table tbody tr { + border-color: #dfdfdf; + } + + .wrapper.style5 table tbody tr:nth-child(2n + 1) { + background-color: rgba(0, 0, 0, 0.0375); + } + + .wrapper.style5 table th { + color: #2E3842; + } + + .wrapper.style5 table thead { + border-color: #dfdfdf; + } + + .wrapper.style5 table tfoot { + border-color: #dfdfdf; + } + + .wrapper.style5 table.alt tbody tr td { + border-color: #dfdfdf; + } + + .wrapper.style5 input[type="submit"], + .wrapper.style5 input[type="reset"], + .wrapper.style5 input[type="button"], + .wrapper.style5 button, + .wrapper.style5 .button { + box-shadow: inset 0 0 0 2px #dfdfdf; + color: #2E3842; + } + + .wrapper.style5 input[type="submit"]:hover, + .wrapper.style5 input[type="reset"]:hover, + .wrapper.style5 input[type="button"]:hover, + .wrapper.style5 button:hover, + .wrapper.style5 .button:hover { + background-color: rgba(0, 0, 0, 0.0375); + } + + .wrapper.style5 input[type="submit"]:active, + .wrapper.style5 input[type="reset"]:active, + .wrapper.style5 input[type="button"]:active, + .wrapper.style5 button:active, + .wrapper.style5 .button:active { + background-color: rgba(0, 0, 0, 0.1); + } + + @media screen and (max-width: 736px) { + + .wrapper.style5 .features li { + border-top-color: #dfdfdf; + } + + } + + @media screen and (max-width: 980px) { + + .wrapper { + padding: 4em 3em 2em 3em ; + } + + } + + @media screen and (max-width: 736px) { + + .wrapper { + padding: 3em 2em 1em 2em ; + } + + } + +/* Page Wrapper + Menu */ + + #page-wrapper { + -moz-transition: opacity 0.5s ease; + -webkit-transition: opacity 0.5s ease; + -ms-transition: opacity 0.5s ease; + transition: opacity 0.5s ease; + opacity: 1; + padding-top: 3em; + } + + #page-wrapper:before { + background: rgba(0, 0, 0, 0); + content: ''; + display: block; + display: none; + height: 100%; + left: 0; + position: fixed; + top: 0; + width: 100%; + z-index: 10001; + } + + #menu { + -moz-transform: translateX(20em); + -webkit-transform: translateX(20em); + -ms-transform: translateX(20em); + transform: translateX(20em); + -moz-transition: -moz-transform 0.5s ease; + -webkit-transition: -webkit-transform 0.5s ease; + -ms-transition: -ms-transform 0.5s ease; + transition: transform 0.5s ease; + -webkit-overflow-scrolling: touch; + background: #21b2a6; + color: #ffffff; + height: 100%; + max-width: 80%; + overflow-y: auto; + padding: 3em 2em; + position: fixed; + right: 0; + top: 0; + width: 20em; + z-index: 10002; + } + + #menu ul { + list-style: none; + padding: 0; + } + + #menu ul > li { + border-top: solid 1px rgba(0, 0, 0, 0.125); + margin: 0.5em 0 0 0; + padding: 0.5em 0 0 0; + } + + #menu ul > li:first-child { + border-top: 0 !important; + margin-top: 0 !important; + padding-top: 0 !important; + } + + #menu ul > li > a { + border: 0; + color: inherit; + display: block; + font-size: 0.8em; + letter-spacing: 0.225em; + outline: 0; + text-decoration: none; + text-transform: uppercase; + } + + @media screen and (max-width: 736px) { + + #menu ul > li > a { + line-height: 3em; + } + + } + + #menu .close { + background-image: url("images/close.svg"); + background-position: 4.85em 1em; + background-repeat: no-repeat; + border: 0; + cursor: pointer; + display: block; + height: 3em; + position: absolute; + right: 0; + top: 0; + /* vertical-align: middle; */ + width: 7em; + } + + @media screen and (max-width: 736px) { + + #menu { + padding: 3em 1.5em; + } + + } + + body.is-menu-visible #page-wrapper { + opacity: 0.35; + } + + body.is-menu-visible #page-wrapper:before { + display: block; + } + + body.is-menu-visible #menu { + -moz-transform: translateX(0); + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + +/* Header */ + + #header { + -moz-transition: background-color 0.2s ease; + -webkit-transition: background-color 0.2s ease; + -ms-transition: background-color 0.2s ease; + transition: background-color 0.2s ease; + background: #2e3842; + height: 3em; + left: 0; + line-height: 3em; + position: fixed; + top: 0; + width: 100%; + z-index: 10000; + } + + #header h1 { + -moz-transition: opacity 0.2s ease; + -webkit-transition: opacity 0.2s ease; + -ms-transition: opacity 0.2s ease; + transition: opacity 0.2s ease; + height: inherit; + left: 1.25em; + line-height: inherit; + position: absolute; + top: 0; + } + + #header h1 a { + border: 0; + display: block; + height: inherit; + line-height: inherit; + } + + @media screen and (max-width: 736px) { + + #header h1 a { + font-size: 0.8em; + } + + } + + #header nav { + height: inherit; + line-height: inherit; + position: absolute; + right: 0; + top: 0; + } + + #header nav > ul { + list-style: none; + margin: 0; + padding: 0; + white-space: nowrap; + } + + #header nav > ul > li { + display: inline-block; + padding: 0; + } + + #header nav > ul > li > a { + border: 0; + color: #fff; + display: block; + font-size: 0.8em; + letter-spacing: 0.225em; + padding: 0 1.5em; + text-transform: uppercase; + } + + #header nav > ul > li > a.menuToggle { + outline: 0; + position: relative; + } + + #header nav > ul > li > a.menuToggle:after { + background-image: url("images/bars.svg"); + background-position: right center; + background-repeat: no-repeat; + content: ''; + display: inline-block; + height: 3.75em; + vertical-align: top; + width: 2em; + } + + @media screen and (max-width: 736px) { + + #header nav > ul > li > a.menuToggle { + padding: 0 1.5em; + } + + #header nav > ul > li > a.menuToggle span { + display: none; + } + + } + + @media screen and (max-width: 736px) { + + #header nav > ul > li > a { + padding: 0 0 0 1.5em; + } + + } + + #header nav > ul > li:first-child { + margin-left: 0; + } + + #header.alt { + background: transparent; + } + + #header.alt h1 { + pointer-events: none; + opacity: 0; + } + +/* Banner */ + + #banner { + display: -moz-flex; + display: -webkit-flex; + display: -ms-flex; + display: flex; + -moz-flex-direction: column; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -moz-justify-content: center; + -webkit-justify-content: center; + -ms-justify-content: center; + justify-content: center; + cursor: default; + /* height: 100vh; */ + min-height: 35em; + overflow: hidden; + position: relative; + text-align: center; + } + + #banner h2 { + -moz-transform: scale(1); + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + -moz-transition: -moz-transform 0.5s ease, opacity 0.5s ease; + -webkit-transition: -webkit-transform 0.5s ease, opacity 0.5s ease; + -ms-transition: -ms-transform 0.5s ease, opacity 0.5s ease; + transition: transform 0.5s ease, opacity 0.5s ease; + display: inline-block; + font-size: 1.75em; + opacity: 1; + padding: 0.35em 1em; + position: relative; + z-index: 1; + } + + #banner h2:before, #banner h2:after { + -moz-transition: width 0.85s ease; + -webkit-transition: width 0.85s ease; + -ms-transition: width 0.85s ease; + transition: width 0.85s ease; + -moz-transition-delay: 0.25s; + -webkit-transition-delay: 0.25s; + -ms-transition-delay: 0.25s; + transition-delay: 0.25s; + background: #fff; + content: ''; + display: block; + height: 2px; + position: absolute; + width: 100%; + } + + #banner h2:before { + top: 0; + left: 0; + } + + #banner h2:after { + bottom: 0; + right: 0; + } + + #banner p { + letter-spacing: 0.225em; + text-transform: uppercase; + } + + #banner p a { + color: inherit; + } + + #banner .more { + -moz-transition: -moz-transform 0.75s ease, opacity 0.75s ease; + -webkit-transition: -webkit-transform 0.75s ease, opacity 0.75s ease; + -ms-transition: -ms-transform 0.75s ease, opacity 0.75s ease; + transition: transform 0.75s ease, opacity 0.75s ease; + -moz-transition-delay: 3.5s; + -webkit-transition-delay: 3.5s; + -ms-transition-delay: 3.5s; + transition-delay: 3.5s; + -moz-transform: translateY(0); + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); + border: none; + bottom: 0; + color: inherit; + font-size: 0.8em; + height: 8.5em; + left: 50%; + letter-spacing: 0.225em; + margin-left: -8.5em; + opacity: 1; + outline: 0; + padding-left: 0.225em; + position: absolute; + text-align: center; + text-transform: uppercase; + width: 16em; + z-index: 1; + } + + #banner .more:after { + background-image: url("images/arrow.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + bottom: 4em; + content: ''; + display: block; + height: 1.5em; + left: 50%; + margin: 0 0 0 -0.75em; + position: absolute; + width: 1.5em; + } + + #banner:after { + pointer-events: none; + -moz-transition: opacity 3s ease-in-out; + -webkit-transition: opacity 3s ease-in-out; + -ms-transition: opacity 3s ease-in-out; + transition: opacity 3s ease-in-out; + -moz-transition-delay: 1.25s; + -webkit-transition-delay: 1.25s; + -ms-transition-delay: 1.25s; + transition-delay: 1.25s; + content: ''; + background: #2e3842; + display: block; + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; + opacity: 0; + } + + @media screen and (max-width: 736px) { + + #banner { + padding: 7em 3em 5em 3em ; + height: auto; + min-height: 0; + } + + #banner h2 { + font-size: 1.25em; + } + + #banner br { + display: none; + } + + #banner .more { + display: none; + } + + } + + body.is-preload #banner h2 { + -moz-transform: scale(0.95); + -webkit-transform: scale(0.95); + -ms-transform: scale(0.95); + transform: scale(0.95); + opacity: 0; + } + + body.is-preload #banner h2:before, body.is-preload #banner h2:after { + width: 0; + } + + body.is-preload #banner .more { + -moz-transform: translateY(8.5em); + -webkit-transform: translateY(8.5em); + -ms-transform: translateY(8.5em); + transform: translateY(8.5em); + opacity: 0; + } + + body.is-preload #banner:after { + opacity: 1; + } + +/* CTA */ + + #cta .inner { + display: -moz-flex; + display: -webkit-flex; + display: -ms-flex; + display: flex; + max-width: 45em; + } + + #cta .inner header { + -moz-order: 1; + -webkit-order: 1; + -ms-order: 1; + order: 1; + padding-right: 3em; + width: 70%; + } + + #cta .inner header p { + color: inherit; + } + + #cta .inner .actions { + -moz-order: 2; + -webkit-order: 2; + -ms-order: 2; + order: 2; + width: 30%; + } + + @media screen and (max-width: 980px) { + + #cta .inner { + display: block; + text-align: center; + } + + #cta .inner header { + padding-right: 0; + width: 100%; + } + + #cta .inner .actions { + margin-left: auto; + margin-right: auto; + max-width: 20em; + width: 100%; + } + + } + + @media screen and (max-width: 736px) { + + #cta .inner .actions { + max-width: none; + } + + } + +/* Main */ + + #main > header { + padding: 12em 0 10em 0 ; + background-image: -moz-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../../images/banner.jpg"); + background-image: -webkit-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../../images/banner.jpg"); + background-image: -ms-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../../images/banner.jpg"); + background-image: linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../../images/banner.jpg"); + background-attachment: fixed; + background-position: center center; + background-repeat: no-repeat; + background-size: cover; + text-align: center; + } + + #main > header h2 { + font-size: 1.75em; + margin: 0 0 0.5em 0; + } + + #main > header p { + color: inherit; + letter-spacing: 0.225em; + text-transform: uppercase; + top: 0; + } + + #main > header p a { + color: inherit; + } + + @media screen and (max-width: 1680px) { + + #main > header { + padding: 3em 0 2em 0 ; + } + + } + + @media screen and (max-width: 1280px) { + + #main > header { + padding: 3em 0em 2em 0em ; + } + + } + + @media screen and (max-width: 980px) { + + #main > header { + padding: 3em 0em 2em 0em ; + } + + } + + @media screen and (max-width: 736px) { + + #main > header { + padding: 3em 0em 2em 0em ; + } + + #main > header h2 { + font-size: 1.25em; + margin: 0 0 1em 0; + } + + } + + body.is-mobile #main > header { + background-attachment: scroll; + } + +/* Footer */ + + #footer { + padding: 6em 0 4em 0 ; + background-color: #1d242a; + text-align: center; + } + + #footer .icons { + font-size: 1.25em; + } + + #footer .icons a { + color: rgba(255, 255, 255, 0.5); + } + + #footer .icons a:hover { + color: #fff; + } + + #footer .copyright { + color: rgba(255, 255, 255, 0.5); + font-size: 0.8em; + letter-spacing: 0.225em; + list-style: none; + padding: 0; + text-transform: uppercase; + } + + #footer .copyright li { + border-left: solid 1px rgba(255, 255, 255, 0.5); + display: inline-block; + line-height: 1em; + margin-left: 1em; + padding-left: 1em; + } + + #footer .copyright li:first-child { + border-left: 0; + margin-left: 0; + padding-left: 0; + } + + #footer .copyright li a { + color: inherit; + } + + #footer .copyright li a:hover { + color: #fff; + } + + @media screen and (max-width: 480px) { + + #footer .copyright li { + border: 0; + display: block; + line-height: 1.65em; + margin: 0; + padding: 0.5em 0; + } + + } + + @media screen and (max-width: 980px) { + + #footer { + padding: 4em 3em 2em 3em ; + } + + } + + @media screen and (max-width: 736px) { + + #footer { + padding: 3em 2em 1em 2em ; + } + + } + +/* Landing */ + + body.landing #page-wrapper { + background-image: -moz-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../../images/banner.jpg"); + background-image: -webkit-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../../images/banner.jpg"); + background-image: -ms-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../../images/banner.jpg"); + background-image: linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../../images/banner.jpg"); + background-attachment: fixed; + background-position: center center; + background-repeat: no-repeat; + background-size: cover; + padding-top: 0; + } + + body.landing #footer { + background-color: rgba(29, 36, 42, 0.9); + } + + body.is-mobile.landing #page-wrapper { + background: none; + } + + body.is-mobile.landing #banner, + body.is-mobile.landing .wrapper.style4 { + background-image: -moz-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../../images/banner.jpg"); + background-image: -webkit-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../../images/banner.jpg"); + background-image: -ms-linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../../images/banner.jpg"); + background-image: linear-gradient(top, rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url("../../images/banner.jpg"); + background-position: center center; + background-repeat: no-repeat; + background-size: cover; + } + + body.is-mobile.landing #footer { + background-color: #1d242a; + } \ No newline at end of file diff --git a/frontend/src/main.jsx b/frontend/src/main.jsx new file mode 100644 index 0000000..62f16fa --- /dev/null +++ b/frontend/src/main.jsx @@ -0,0 +1,12 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import "bootstrap/dist/css/bootstrap.min.css"; +import App from './App' +import './index.css' + +ReactDOM.createRoot(document.getElementById('root')).render( + + + + +) diff --git a/frontend/src/utils/Api.jsx b/frontend/src/utils/Api.jsx new file mode 100644 index 0000000..cca8b57 --- /dev/null +++ b/frontend/src/utils/Api.jsx @@ -0,0 +1,57 @@ +import axios from "axios"; + +axios.defaults.timeout = 3000; +axios.defaults.headers["Content-Type"] = "application/json"; +const backendPortNumber = import.meta.env.VITE_BACK_PORT_NUM; +const BASE_URL = `http://${window.location.hostname}:${backendPortNumber}/`; + +axios.interceptors.response.use( + (res) => { + return res.data; + }, + (err) => { + console.log(err); + throw new Error("(!) axios error"); + } + ); + +// axios.interceptors.request.use( +// (req) => { +// console.log(req.headers, req.body); +// // express로 보내는 데이터 타입이 "이미지 형태"일 경우, +// // "Content-Type = multipart/form-data"; +// }, +// (err) => { +// console.log(err); +// } +// ) + +const customAxios = axios.create({ + headers: { + Authorization: `Bearer ${sessionStorage.getItem("userToken")}`, + } + }); + +const post = async (endpoint, data) => { + const bodyData = JSON.stringify(data); + // bodydata는 백엔에서 처리되기 전 데이터 + // console.log(bodyData); + + return customAxios.post(BASE_URL + endpoint, bodyData); +} + +const get = async (endpoint, params="") => { + return customAxios.get(BASE_URL + endpoint + "/" + params); +} + +const put = async (endpoint, data) => { + const bodyData = JSON.stringify(data); + return customAxios.put(BASE_URL + endpoint, bodyData); +} + +const del = async (endpoint, data) => { + const bodyData = JSON.stringify(data); + return customAxios.delete(BASE_URL + endpoint, bodyData); +} + +export { post, get, put, del as delete }; \ No newline at end of file diff --git a/frontend/src/utils/reducer.jsx b/frontend/src/utils/reducer.jsx new file mode 100644 index 0000000..58c2821 --- /dev/null +++ b/frontend/src/utils/reducer.jsx @@ -0,0 +1,18 @@ + +export const loginReducer = (userState, action) => { + switch (action.type) { + //action type이 "LOGIN" + case "LOGIN": + return { + ...userState, + user: action.payload, + }; + case "LOGOUT": + return { + ...userState, + user: null, + } + default: + return userState; + } +} \ No newline at end of file diff --git a/frontend/vite.config.js b/frontend/vite.config.js new file mode 100644 index 0000000..b1b5f91 --- /dev/null +++ b/frontend/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()] +}) diff --git a/frontend/yarn.lock b/frontend/yarn.lock new file mode 100644 index 0000000..79bee1b --- /dev/null +++ b/frontend/yarn.lock @@ -0,0 +1,1475 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.19.3": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.3.tgz#707b939793f867f5a73b2666e6d9a3396eb03151" + integrity sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw== + +"@babel/core@^7.18.13": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.3.tgz#2519f62a51458f43b682d61583c3810e7dcee64c" + integrity sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.3" + "@babel/helper-compilation-targets" "^7.19.3" + "@babel/helper-module-transforms" "^7.19.0" + "@babel/helpers" "^7.19.0" + "@babel/parser" "^7.19.3" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.3" + "@babel/types" "^7.19.3" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/generator@^7.19.3": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.3.tgz#d7f4d1300485b4547cb6f94b27d10d237b42bf59" + integrity sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ== + dependencies: + "@babel/types" "^7.19.3" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.16.0", "@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-compilation-targets@^7.19.3": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz#a10a04588125675d7c7ae299af86fa1b2ee038ca" + integrity sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg== + dependencies: + "@babel/compat-data" "^7.19.3" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.21.3" + semver "^6.3.0" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-function-name@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== + dependencies: + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.0", "@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz#309b230f04e22c58c6a2c0c0c7e50b216d350c30" + integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" + +"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf" + integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== + +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helpers@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.19.0.tgz#f30534657faf246ae96551d88dd31e9d1fa1fc18" + integrity sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg== + dependencies: + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.18.10", "@babel/parser@^7.19.3": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.3.tgz#8dd36d17c53ff347f9e55c328710321b49479a9a" + integrity sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ== + +"@babel/plugin-syntax-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-jsx-development@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.18.6" + +"@babel/plugin-transform-react-jsx-self@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz#3849401bab7ae8ffa1e3e5687c94a753fc75bda7" + integrity sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-jsx-source@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz#06e9ae8a14d2bc19ce6e3c447d842032a50598fc" + integrity sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-jsx@^7.18.10", "@babel/plugin-transform-react-jsx@^7.18.6": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz#b3cbb7c3a00b92ec8ae1027910e331ba5c500eb9" + integrity sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.19.0" + +"@babel/runtime@^7.12.1", "@babel/runtime@^7.9.2": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.4.tgz#a42f814502ee467d55b38dd1c256f53a7b885c78" + integrity sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259" + integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@^7.19.0", "@babel/traverse@^7.19.3", "@babel/traverse@^7.4.5": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.3.tgz#3a3c5348d4988ba60884e8494b0592b2f15a04b4" + integrity sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.3" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.19.3" + "@babel/types" "^7.19.3" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.19.3": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.3.tgz#fc420e6bbe54880bce6779ffaf315f5e43ec9624" + integrity sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw== + dependencies: + "@babel/helper-string-parser" "^7.18.10" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@emotion/is-prop-valid@^1.1.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83" + integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg== + dependencies: + "@emotion/memoize" "^0.8.0" + +"@emotion/memoize@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" + integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== + +"@emotion/stylis@^0.8.4": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" + integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== + +"@emotion/unitless@^0.7.4": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== + +"@esbuild/android-arm@0.15.10": + version "0.15.10" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.10.tgz#a5f9432eb221afc243c321058ef25fe899886892" + integrity sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg== + +"@esbuild/linux-loong64@0.15.10": + version "0.15.10" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.10.tgz#78a42897c2cf8db9fd5f1811f7590393b77774c7" + integrity sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg== + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.15" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" + integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@nivo/annotations@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/annotations/-/annotations-0.80.0.tgz#127e4801fff7370dcfb9acfe1e335781dd65cfd5" + integrity sha512-bC9z0CLjU07LULTMWsqpjovRtHxP7n8oJjqBQBLmHOGB4IfiLbrryBfu9+aEZH3VN2jXHhdpWUz+HxeZzOzsLg== + dependencies: + "@nivo/colors" "0.80.0" + "@react-spring/web" "9.4.5" + lodash "^4.17.21" + +"@nivo/axes@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/axes/-/axes-0.80.0.tgz#22788855ddc45bb6a619dcd03d62d4bd8c0fc35f" + integrity sha512-AsUyaSHGwQVSEK8QXpsn8X+poZxvakLMYW7crKY1xTGPNw+SU4SSBohPVumm2jMH3fTSLNxLhAjWo71GBJXfdA== + dependencies: + "@nivo/scales" "0.80.0" + "@react-spring/web" "9.4.5" + d3-format "^1.4.4" + d3-time-format "^3.0.0" + +"@nivo/bar@^0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/bar/-/bar-0.80.0.tgz#6518449aeb068f2ffe263822e44898f3f427d482" + integrity sha512-woE/S12Sp+RKQeOHtp302WXfy5usj73cV/gjP95PzJxMv+Rn01i1Uwys3BILzc9h4+OxYuWTFqLADAySAmi7qQ== + dependencies: + "@nivo/annotations" "0.80.0" + "@nivo/axes" "0.80.0" + "@nivo/colors" "0.80.0" + "@nivo/legends" "0.80.0" + "@nivo/scales" "0.80.0" + "@nivo/tooltip" "0.80.0" + "@react-spring/web" "9.4.5" + d3-scale "^3.2.3" + d3-shape "^1.3.5" + lodash "^4.17.21" + +"@nivo/colors@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/colors/-/colors-0.80.0.tgz#5b70b4979df246d9d0d69fb638bba9764dd88b52" + integrity sha512-T695Zr411FU4RPo7WDINOAn8f79DPP10SFJmDdEqELE+cbzYVTpXqLGZ7JMv88ko7EOf9qxLQgcBqY69rp9tHQ== + dependencies: + d3-color "^2.0.0" + d3-scale "^3.2.3" + d3-scale-chromatic "^2.0.0" + lodash "^4.17.21" + +"@nivo/core@^0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/core/-/core-0.80.0.tgz#d180cb2622158eb7bc5f984131ff07984f12297e" + integrity sha512-6caih0RavXdWWSfde+rC2pk17WrX9YQlqK26BrxIdXzv3Ydzlh5SkrC7dR2TEvMGBhunzVeLOfiC2DWT1S8CFg== + dependencies: + "@nivo/recompose" "0.80.0" + "@react-spring/web" "9.4.5" + d3-color "^2.0.0" + d3-format "^1.4.4" + d3-interpolate "^2.0.1" + d3-scale "^3.2.3" + d3-scale-chromatic "^2.0.0" + d3-shape "^1.3.5" + d3-time-format "^3.0.0" + lodash "^4.17.21" + +"@nivo/legends@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/legends/-/legends-0.80.0.tgz#49edc54000075b4df055f86794a8c32810269d06" + integrity sha512-h0IUIPGygpbKIZZZWIxkkxOw4SO0rqPrqDrykjaoQz4CvL4HtLIUS3YRA4akKOVNZfS5agmImjzvIe0s3RvqlQ== + +"@nivo/recompose@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/recompose/-/recompose-0.80.0.tgz#572048aed793321a0bada1fd176b72df5a25282e" + integrity sha512-iL3g7j3nJGD9+mRDbwNwt/IXDXH6E29mhShY1I7SP91xrfusZV9pSFf4EzyYgruNJk/2iqMuaqn+e+TVFra44A== + dependencies: + react-lifecycles-compat "^3.0.4" + +"@nivo/scales@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/scales/-/scales-0.80.0.tgz#39313fb97c8ae9633c2aa1e17adb57cb851e8a50" + integrity sha512-4y2pQdCg+f3n4TKXC2tYuq71veZM+xPRQbOTgGYJpuBvMc7pQsXF9T5z7ryeIG9hkpXkrlyjecU6XcAG7tLSNg== + dependencies: + d3-scale "^3.2.3" + d3-time "^1.0.11" + d3-time-format "^3.0.0" + lodash "^4.17.21" + +"@nivo/tooltip@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/tooltip/-/tooltip-0.80.0.tgz#07ebef47eb708a0612bd6297d5ad156bbec19d34" + integrity sha512-qGmrreRwnCsYjn/LAuwBtxBn/tvG8y+rwgd4gkANLBAoXd3bzJyvmkSe+QJPhUG64bq57ibDK+lO2pC48a3/fw== + dependencies: + "@react-spring/web" "9.4.5" + +"@popperjs/core@^2.11.5": + version "2.11.6" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" + integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw== + +"@react-aria/ssr@^3.2.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.3.0.tgz#25e81daf0c7a270a4a891159d8d984578e4512d8" + integrity sha512-yNqUDuOVZIUGP81R87BJVi/ZUZp/nYOBXbPsRe7oltJOfErQZD+UezMpw4vM2KRz18cURffvmC8tJ6JTeyDtaQ== + dependencies: + "@babel/runtime" "^7.6.2" + +"@react-spring/animated@~9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.4.5.tgz#dd9921c716a4f4a3ed29491e0c0c9f8ca0eb1a54" + integrity sha512-KWqrtvJSMx6Fj9nMJkhTwM9r6LIriExDRV6YHZV9HKQsaolUFppgkOXpC+rsL1JEtEvKv6EkLLmSqHTnuYjiIA== + dependencies: + "@react-spring/shared" "~9.4.5" + "@react-spring/types" "~9.4.5" + +"@react-spring/core@~9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.4.5.tgz#4616e1adc18dd10f5731f100ebdbe9518b89ba3c" + integrity sha512-83u3FzfQmGMJFwZLAJSwF24/ZJctwUkWtyPD7KYtNagrFeQKUH1I05ZuhmCmqW+2w1KDW1SFWQ43RawqfXKiiQ== + dependencies: + "@react-spring/animated" "~9.4.5" + "@react-spring/rafz" "~9.4.5" + "@react-spring/shared" "~9.4.5" + "@react-spring/types" "~9.4.5" + +"@react-spring/rafz@~9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/rafz/-/rafz-9.4.5.tgz#84f809f287f2a66bbfbc66195db340482f886bd7" + integrity sha512-swGsutMwvnoyTRxvqhfJBtGM8Ipx6ks0RkIpNX9F/U7XmyPvBMGd3GgX/mqxZUpdlsuI1zr/jiYw+GXZxAlLcQ== + +"@react-spring/shared@~9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.4.5.tgz#4c3ad817bca547984fb1539204d752a412a6d829" + integrity sha512-JhMh3nFKsqyag0KM5IIM8BQANGscTdd0mMv3BXsUiMZrcjQTskyfnv5qxEeGWbJGGar52qr5kHuBHtCjQOzniA== + dependencies: + "@react-spring/rafz" "~9.4.5" + "@react-spring/types" "~9.4.5" + +"@react-spring/types@~9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.4.5.tgz#9c71e5ff866b5484a7ef3db822bf6c10e77bdd8c" + integrity sha512-mpRIamoHwql0ogxEUh9yr4TP0xU5CWyZxVQeccGkHHF8kPMErtDXJlxyo0lj+telRF35XNihtPTWoflqtyARmg== + +"@react-spring/web@9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.4.5.tgz#b92f05b87cdc0963a59ee149e677dcaff09f680e" + integrity sha512-NGAkOtKmOzDEctL7MzRlQGv24sRce++0xAY7KlcxmeVkR7LRSGkoXHaIfm9ObzxPMcPHQYQhf3+X9jepIFNHQA== + dependencies: + "@react-spring/animated" "~9.4.5" + "@react-spring/core" "~9.4.5" + "@react-spring/shared" "~9.4.5" + "@react-spring/types" "~9.4.5" + +"@reduxjs/toolkit@^1.8.6": + version "1.8.6" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.8.6.tgz#147fb7957befcdb75bc9c1230db63628e30e4332" + integrity sha512-4Ia/Loc6WLmdSOzi7k5ff7dLK8CgG2b8aqpLsCAJhazAzGdp//YBUSaj0ceW6a3kDBDNRrq5CRwyCS0wBiL1ig== + dependencies: + immer "^9.0.7" + redux "^4.1.2" + redux-thunk "^2.4.1" + reselect "^4.1.5" + +"@remix-run/router@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.0.2.tgz#1c17eadb2fa77f80a796ad5ea9bf108e6993ef06" + integrity sha512-GRSOFhJzjGN+d4sKHTMSvNeUPoZiDHWmRnXfzaxrqe7dE/Nzlc8BiMSJdLDESZlndM7jIUrZ/F4yWqVYlI0rwQ== + +"@restart/hooks@^0.4.6", "@restart/hooks@^0.4.7": + version "0.4.7" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.7.tgz#d79ca6472c01ce04389fc73d4a79af1b5e33cd39" + integrity sha512-ZbjlEHcG+FQtpDPHd7i4FzNNvJf2enAwZfJbpM8CW7BhmOAbsHpZe3tsHwfQUrBuyrxWqPYp2x5UMnilWcY22A== + dependencies: + dequal "^2.0.2" + +"@restart/ui@^1.3.1": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.4.0.tgz#8333294fefb045f58852d5bb34367c3323e2edb3" + integrity sha512-5dDj5uDzUgK1iijWPRg6AnxjkHM04XhTQDJirM1h/8tIc7KyLtF9YyjcCpNEn259hPMXswpkfXKNgiag0skPFg== + dependencies: + "@babel/runtime" "^7.18.3" + "@popperjs/core" "^2.11.5" + "@react-aria/ssr" "^3.2.0" + "@restart/hooks" "^0.4.7" + "@types/warning" "^3.0.0" + dequal "^2.0.2" + dom-helpers "^5.2.0" + uncontrollable "^7.2.1" + warning "^4.0.3" + +"@types/hoist-non-react-statics@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/react-dom@^18.0.6": + version "18.0.6" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.6.tgz#36652900024842b74607a17786b6662dd1e103a1" + integrity sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA== + dependencies: + "@types/react" "*" + +"@types/react-transition-group@^4.4.4": + version "4.4.5" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416" + integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@>=16.9.11", "@types/react@^18.0.17": + version "18.0.21" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.21.tgz#b8209e9626bb00a34c76f55482697edd2b43cc67" + integrity sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + +"@types/use-sync-external-store@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" + integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== + +"@types/warning@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52" + integrity sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA== + +"@vitejs/plugin-react@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-2.1.0.tgz#4c99df15e71d2630601bd3018093bdc787d40e55" + integrity sha512-am6rPyyU3LzUYne3Gd9oj9c4Rzbq5hQnuGXSMT6Gujq45Il/+bunwq3lrB7wghLkiF45ygMwft37vgJ/NE8IAA== + dependencies: + "@babel/core" "^7.18.13" + "@babel/plugin-transform-react-jsx" "^7.18.10" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-jsx-self" "^7.18.6" + "@babel/plugin-transform-react-jsx-source" "^7.18.6" + magic-string "^0.26.2" + react-refresh "^0.14.0" + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +axios@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.1.2.tgz#8b6f6c540abf44ab98d9904e8daf55351ca4a331" + integrity sha512-bznQyETwElsXl2RK7HLLwb5GPpOLlycxHCtrpDR/4RqqBzjARaOTo3jz4IgtntWUYee7Ne4S8UHd92VCuzPaWA== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +"babel-plugin-styled-components@>= 1.12.0": + version "2.0.7" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz#c81ef34b713f9da2b7d3f5550df0d1e19e798086" + integrity sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-module-imports" "^7.16.0" + babel-plugin-syntax-jsx "^6.18.0" + lodash "^4.17.11" + picomatch "^2.3.0" + +babel-plugin-syntax-jsx@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + integrity sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw== + +bootstrap@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.2.2.tgz#834e053eed584a65e244d8aa112a6959f56e27a0" + integrity sha512-dEtzMTV71n6Fhmbg4fYJzQsw1N29hJKO1js5ackCgIpDcGid2ETMGC6zwSYw09v05Y+oRdQ9loC54zB1La3hHQ== + +browserslist@^4.21.3: + version "4.21.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== + dependencies: + caniuse-lite "^1.0.30001400" + electron-to-chromium "^1.4.251" + node-releases "^2.0.6" + update-browserslist-db "^1.0.9" + +camelize@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" + integrity sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg== + +caniuse-lite@^1.0.30001400: + version "1.0.30001418" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz#5f459215192a024c99e3e3a53aac310fc7cf24e6" + integrity sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + 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" + +chart.js@^3.9.1: + version "3.9.1" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.9.1.tgz#3abf2c775169c4c71217a107163ac708515924b8" + integrity sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w== + +classnames@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +css-color-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" + integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== + +css-to-react-native@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756" + integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ== + dependencies: + camelize "^1.0.0" + css-color-keywords "^1.0.0" + postcss-value-parser "^4.0.2" + +csstype@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" + integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== + +d3-array@2, d3-array@^2.3.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.12.1.tgz#e20b41aafcdffdf5d50928004ececf815a465e81" + integrity sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ== + dependencies: + internmap "^1.0.0" + +"d3-color@1 - 2", d3-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-2.0.0.tgz#8d625cab42ed9b8f601a1760a389f7ea9189d62e" + integrity sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ== + +"d3-format@1 - 2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-2.0.0.tgz#a10bcc0f986c372b729ba447382413aabf5b0767" + integrity sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA== + +d3-format@^1.4.4: + version "1.4.5" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.5.tgz#374f2ba1320e3717eb74a9356c67daee17a7edb4" + integrity sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ== + +"d3-interpolate@1 - 2", "d3-interpolate@1.2.0 - 2", d3-interpolate@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-2.0.1.tgz#98be499cfb8a3b94d4ff616900501a64abc91163" + integrity sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ== + dependencies: + d3-color "1 - 2" + +d3-path@1: + version "1.0.9" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" + integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== + +d3-scale-chromatic@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-2.0.0.tgz#c13f3af86685ff91323dc2f0ebd2dabbd72d8bab" + integrity sha512-LLqy7dJSL8yDy7NRmf6xSlsFZ6zYvJ4BcWFE4zBrOPnQERv9zj24ohnXKRbyi9YHnYV+HN1oEO3iFK971/gkzA== + dependencies: + d3-color "1 - 2" + d3-interpolate "1 - 2" + +d3-scale@^3.2.3: + version "3.3.0" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-3.3.0.tgz#28c600b29f47e5b9cd2df9749c206727966203f3" + integrity sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ== + dependencies: + d3-array "^2.3.0" + d3-format "1 - 2" + d3-interpolate "1.2.0 - 2" + d3-time "^2.1.1" + d3-time-format "2 - 3" + +d3-shape@^1.3.5: + version "1.3.7" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7" + integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw== + dependencies: + d3-path "1" + +"d3-time-format@2 - 3", d3-time-format@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-3.0.0.tgz#df8056c83659e01f20ac5da5fdeae7c08d5f1bb6" + integrity sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag== + dependencies: + d3-time "1 - 2" + +"d3-time@1 - 2", d3-time@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-2.1.1.tgz#e9d8a8a88691f4548e68ca085e5ff956724a6682" + integrity sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ== + dependencies: + d3-array "2" + +d3-time@^1.0.11: + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" + integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== + +debug@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +dequal@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +dom-helpers@^5.0.1, dom-helpers@^5.2.0, dom-helpers@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + +dom7@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/dom7/-/dom7-4.0.4.tgz#8b68c5d8e5e2ed0fddb1cb93e433bc9060c8f3fb" + integrity sha512-DSSgBzQ4rJWQp1u6o+3FVwMNnT5bzQbMb+o31TjYYeRi05uAcpF8koxdfzeoe5ElzPmua7W7N28YJhF7iEKqIw== + dependencies: + ssr-window "^4.0.0" + +dotenv@^16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" + integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== + +electron-to-chromium@^1.4.251: + version "1.4.275" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.275.tgz#db25c8e39c9cc910a996d1ec9b73eee834cb0ac1" + integrity sha512-aJeQQ+Hl9Jyyzv4chBqYJwmVRY46N5i2BEX5Cuyk/5gFCUZ5F3i7Hnba6snZftWla7Gglwc5pIgcd+E7cW+rPg== + +es6-object-assign@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" + integrity sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw== + +esbuild-android-64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.10.tgz#8a59a84acbf2eca96996cadc35642cf055c494f0" + integrity sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA== + +esbuild-android-arm64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.10.tgz#f453851dc1d8c5409a38cf7613a33852faf4915d" + integrity sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg== + +esbuild-darwin-64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.10.tgz#778bd29c8186ff47b176c8af58c08cf0fb8e6b86" + integrity sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA== + +esbuild-darwin-arm64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.10.tgz#b30bbefb46dc3c5d4708b0435e52f6456578d6df" + integrity sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ== + +esbuild-freebsd-64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.10.tgz#ab301c5f6ded5110dbdd611140bef1a7c2e99236" + integrity sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w== + +esbuild-freebsd-arm64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.10.tgz#a5b09b867a6ff49110f52343b6f12265db63d43f" + integrity sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg== + +esbuild-linux-32@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.10.tgz#5282fe9915641caf9c8070e4ba2c3e16d358f837" + integrity sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w== + +esbuild-linux-64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.10.tgz#f3726e85a00149580cb19f8abfabcbb96f5d52bb" + integrity sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA== + +esbuild-linux-arm64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.10.tgz#2f0056e9d5286edb0185b56655caa8c574d8dbe7" + integrity sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A== + +esbuild-linux-arm@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.10.tgz#40a9270da3c8ffa32cf72e24a79883e323dff08d" + integrity sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A== + +esbuild-linux-mips64le@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.10.tgz#90ce1c4ee0202edb4ac69807dea77f7e5804abc4" + integrity sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q== + +esbuild-linux-ppc64le@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.10.tgz#782837ae7bd5b279178106c9dd801755a21fabdf" + integrity sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ== + +esbuild-linux-riscv64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.10.tgz#d7420d806ece5174f24f4634303146f915ab4207" + integrity sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q== + +esbuild-linux-s390x@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.10.tgz#21fdf0cb3494a7fb520a71934e4dffce67fe47be" + integrity sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA== + +esbuild-netbsd-64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.10.tgz#6c06b3107e3df53de381e6299184d4597db0440f" + integrity sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw== + +esbuild-openbsd-64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.10.tgz#4daef5f5d8e74bbda53b65160029445d582570cf" + integrity sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ== + +esbuild-sunos-64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.10.tgz#5fe7bef267a02f322fd249a8214d0274937388a7" + integrity sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg== + +esbuild-windows-32@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.10.tgz#48e3dde25ab0135579a288b30ab6ddef6d1f0b28" + integrity sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg== + +esbuild-windows-64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.10.tgz#387a9515bef3fee502d277a5d0a2db49a4ecda05" + integrity sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA== + +esbuild-windows-arm64@0.15.10: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.10.tgz#5a6fcf2fa49e895949bf5495cf088ab1b43ae879" + integrity sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw== + +esbuild@^0.15.9: + version "0.15.10" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.10.tgz#85c2f8446e9b1fe04fae68daceacba033eedbd42" + integrity sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng== + optionalDependencies: + "@esbuild/android-arm" "0.15.10" + "@esbuild/linux-loong64" "0.15.10" + esbuild-android-64 "0.15.10" + esbuild-android-arm64 "0.15.10" + esbuild-darwin-64 "0.15.10" + esbuild-darwin-arm64 "0.15.10" + esbuild-freebsd-64 "0.15.10" + esbuild-freebsd-arm64 "0.15.10" + esbuild-linux-32 "0.15.10" + esbuild-linux-64 "0.15.10" + esbuild-linux-arm "0.15.10" + esbuild-linux-arm64 "0.15.10" + esbuild-linux-mips64le "0.15.10" + esbuild-linux-ppc64le "0.15.10" + esbuild-linux-riscv64 "0.15.10" + esbuild-linux-s390x "0.15.10" + esbuild-netbsd-64 "0.15.10" + esbuild-openbsd-64 "0.15.10" + esbuild-sunos-64 "0.15.10" + esbuild-windows-32 "0.15.10" + esbuild-windows-64 "0.15.10" + esbuild-windows-arm64 "0.15.10" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +font-awesome@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133" + integrity sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +hamt_plus@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/hamt_plus/-/hamt_plus-1.0.2.tgz#e21c252968c7e33b20f6a1b094cd85787a265601" + integrity sha512-t2JXKaehnMb9paaYA7J0BX8QQAY8lwfQ9Gjf4pg/mk4krt+cmwmU652HOoWonf+7+EQV97ARPMhhVgU1ra2GhA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +internmap@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/internmap/-/internmap-1.0.1.tgz#0017cc8a3b99605f0302f2b198d272e015e5df95" + integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw== + +immer@^9.0.7: + version "9.0.15" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.15.tgz#0b9169e5b1d22137aba7d43f8a81a495dd1b62dc" + integrity sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ== + +internmap@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/internmap/-/internmap-1.0.1.tgz#0017cc8a3b99605f0302f2b198d272e015e5df95" + integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw== + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +is-core-module@^2.9.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== + dependencies: + has "^1.0.3" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +lodash@^4.17.11, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +magic-string@^0.26.2: + version "0.26.6" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.26.6.tgz#b61e417c9f40b7b53bf7e73c0a803258e20d25ee" + integrity sha512-6d+3bFybzyQFJYSoRsl9ZC0wheze8M1LrQC7tNMRqXR4izUTDOLMd9BtSuExK9iAukFh+s5K0WAhc/dlQ+HKYA== + dependencies: + sourcemap-codec "^1.4.8" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +postcss-value-parser@^4.0.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.4.16: + version "8.4.17" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.17.tgz#f87863ec7cd353f81f7ab2dec5d67d861bbb1be5" + integrity sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +promise-polyfill@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.1.0.tgz#dfa96943ea9c121fca4de9b5868cb39d3472e057" + integrity sha512-g0LWaH0gFsxovsU7R5LrrhHhWAWiHRnh1GPrhXnPgYsDkIqjRYUYSZEsej/wtleDrz5xVSIDbeKfidztp2XHFQ== + +prop-types-extra@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.1.tgz#58c3b74cbfbb95d304625975aa2f0848329a010b" + integrity sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew== + dependencies: + react-is "^16.3.2" + warning "^4.0.0" + +prop-types@^15.6.2, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +react-bootstrap@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.5.0.tgz#e25e649e37f080d38eeb92ad5b4ed562a1d7de62" + integrity sha512-j/aLR+okzbYk61TM3eDOU1NqOqnUdwyVrF+ojoCRUxPdzc2R0xXvqyRsjSoyRoCo7n82Fs/LWjPCin/QJNdwvA== + dependencies: + "@babel/runtime" "^7.17.2" + "@restart/hooks" "^0.4.6" + "@restart/ui" "^1.3.1" + "@types/react-transition-group" "^4.4.4" + classnames "^2.3.1" + dom-helpers "^5.2.1" + invariant "^2.2.4" + prop-types "^15.8.1" + prop-types-extra "^1.1.0" + react-transition-group "^4.4.2" + uncontrollable "^7.2.1" + warning "^4.0.3" + +react-chartjs-2@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/react-chartjs-2/-/react-chartjs-2-4.3.1.tgz#9941e7397fb963f28bb557addb401e9ff96c6681" + integrity sha512-5i3mjP6tU7QSn0jvb8I4hudTzHJqS8l00ORJnVwI2sYu0ihpj83Lv2YzfxunfxTZkscKvZu2F2w9LkwNBhj6xA== + +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-error-boundary@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-3.1.4.tgz#255db92b23197108757a888b01e5b729919abde0" + integrity sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA== + dependencies: + "@babel/runtime" "^7.12.5" + +react-icons@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.4.0.tgz#a13a8a20c254854e1ec9aecef28a95cdf24ef703" + integrity sha512-fSbvHeVYo/B5/L4VhB7sBA1i2tS8MkT0Hb9t2H1AVPkwGfVHLJCqyr2Py9dKMxsyM63Eng1GkdZfbWj+Fmv8Rg== + +react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-redux@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.0.4.tgz#80c31dffa8af9526967c4267022ae1525ff0e36a" + integrity sha512-yMfQ7mX6bWuicz2fids6cR1YT59VTuT8MKyyE310wJQlINKENCeT1UcPdEiX6znI5tF8zXyJ/VYvDgeGuaaNwQ== + dependencies: + "@babel/runtime" "^7.12.1" + "@types/hoist-non-react-statics" "^3.3.1" + "@types/use-sync-external-store" "^0.0.3" + hoist-non-react-statics "^3.3.2" + react-is "^18.0.0" + use-sync-external-store "^1.0.0" + +react-refresh@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" + integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== + +react-router-dom@^6.4.2: + version "6.4.2" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.4.2.tgz#115b37d501d6d8ac870683694978c51c43e6c0d2" + integrity sha512-yM1kjoTkpfjgczPrcyWrp+OuQMyB1WleICiiGfstnQYo/S8hPEEnVjr/RdmlH6yKK4Tnj1UGXFSa7uwAtmDoLQ== + dependencies: + "@remix-run/router" "1.0.2" + react-router "6.4.2" + +react-router@6.4.2: + version "6.4.2" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.4.2.tgz#300628ee9ed81b8ef1597b5cb98b474efe9779b8" + integrity sha512-Rb0BAX9KHhVzT1OKhMvCDMw776aTYM0DtkxqUBP8dNBom3mPXlfNs76JNGK8wKJ1IZEY1+WGj+cvZxHVk/GiKw== + dependencies: + "@remix-run/router" "1.0.2" + +react-theme-toggle-button@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/react-theme-toggle-button/-/react-theme-toggle-button-1.1.0.tgz#f869f06791ac96af722232c01577a47c184c30d8" + integrity sha512-adOj+y3KsXDsPo5sZ64LALke/4Vs4NDw3DSs4sNMMDlVE/BFbL7jqqEtzghUZEq28XwC6xHVQK5QoF85nFXFcw== + +react-transition-group@^4.4.2: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +recoil@^0.7.6: + version "0.7.6" + resolved "https://registry.yarnpkg.com/recoil/-/recoil-0.7.6.tgz#75297ecd70bbfeeb72e861aa6141a86bb6dfcd5e" + integrity sha512-hsBEw7jFdpBCY/tu2GweiyaqHKxVj6EqF2/SfrglbKvJHhpN57SANWvPW+gE90i3Awi+A5gssOd3u+vWlT+g7g== + dependencies: + hamt_plus "1.0.2" + +redux-persist@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-6.0.0.tgz#b4d2972f9859597c130d40d4b146fecdab51b3a8" + integrity sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ== + +redux-thunk@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.1.tgz#0dd8042cf47868f4b29699941de03c9301a75714" + integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q== + +redux@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.0.tgz#46f10d6e29b6666df758780437651eeb2b969f13" + integrity sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA== + dependencies: + "@babel/runtime" "^7.9.2" + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +reselect@^4.1.5: + version "4.1.6" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.6.tgz#19ca2d3d0b35373a74dc1c98692cdaffb6602656" + integrity sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ== + +resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +rollup@~2.78.0: + version "2.78.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.78.1.tgz#52fe3934d9c83cb4f7c4cb5fb75d88591be8648f" + integrity sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg== + optionalDependencies: + fsevents "~2.3.2" + +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +ssr-window@^4.0.0, ssr-window@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/ssr-window/-/ssr-window-4.0.2.tgz#dc6b3ee37be86ac0e3ddc60030f7b3bc9b8553be" + integrity sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ== + +styled-components@^5.3.6: + version "5.3.6" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.6.tgz#27753c8c27c650bee9358e343fc927966bfd00d1" + integrity sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/traverse" "^7.4.5" + "@emotion/is-prop-valid" "^1.1.0" + "@emotion/stylis" "^0.8.4" + "@emotion/unitless" "^0.7.4" + babel-plugin-styled-components ">= 1.12.0" + css-to-react-native "^3.0.0" + hoist-non-react-statics "^3.0.0" + shallowequal "^1.1.0" + supports-color "^5.5.0" + +styled-reset@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/styled-reset/-/styled-reset-4.4.2.tgz#4da1becb2f6d22a2b22c7ee7ca09b739fe6a685f" + integrity sha512-VzVhEZHpO/CD/F5ZllqTAY+GTaKlNDZt5mTrtPf/kXZSe85+wMkhRIiPARgvCP9/HQMk+ZGaEWk1IkdP2SYAUQ== + +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +sweetalert@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/sweetalert/-/sweetalert-2.1.2.tgz#010baaa80d0dbdc86f96bfcaa96b490728594b79" + integrity sha512-iWx7X4anRBNDa/a+AdTmvAzQtkN1+s4j/JJRWlHpYE8Qimkohs8/XnFcWeYHH2lMA8LRCa5tj2d244If3S/hzA== + dependencies: + es6-object-assign "^1.1.0" + promise-polyfill "^6.0.2" + +swiper@^8.4.4: + version "8.4.4" + resolved "https://registry.yarnpkg.com/swiper/-/swiper-8.4.4.tgz#868ccad5384624e84143b469c75bc54ba004e668" + integrity sha512-jA/8BfOZwT8PqPSnMX0TENZYitXEhNa7ZSNj1Diqh5LZyUJoBQaZcqAiPQ/PIg1+IPaRn/V8ZYVb0nxHMh51yw== + dependencies: + dom7 "^4.0.4" + ssr-window "^4.0.2" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +uncontrollable@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738" + integrity sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ== + dependencies: + "@babel/runtime" "^7.6.3" + "@types/react" ">=16.9.11" + invariant "^2.2.4" + react-lifecycles-compat "^3.0.4" + +update-browserslist-db@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +use-sync-external-store@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +vite@^3.1.0: + version "3.1.6" + resolved "https://registry.yarnpkg.com/vite/-/vite-3.1.6.tgz#4c6db3000326342c918204a42a130fb3ffed2414" + integrity sha512-qMXIwnehvvcK5XfJiXQUiTxoYAEMKhM+jqCY6ZSTKFBKu1hJnAKEzP3AOcnTerI0cMZYAaJ4wpW1wiXLMDt4mA== + dependencies: + esbuild "^0.15.9" + postcss "^8.4.16" + resolve "^1.22.1" + rollup "~2.78.0" + optionalDependencies: + fsevents "~2.3.2" + +warning@^4.0.0, warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 0000000..23a0210 --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,15 @@ +{ + "name": "team07", + "lockfileVersion": 2, + "requires": true, + "packages": { + "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" + } + } + } +} diff --git a/node_modules/negotiator/HISTORY.md b/node_modules/negotiator/HISTORY.md new file mode 100644 index 0000000..a9a5449 --- /dev/null +++ b/node_modules/negotiator/HISTORY.md @@ -0,0 +1,108 @@ +0.6.3 / 2022-01-22 +================== + + * Revert "Lazy-load modules from main entry point" + +0.6.2 / 2019-04-29 +================== + + * Fix sorting charset, encoding, and language with extra parameters + +0.6.1 / 2016-05-02 +================== + + * perf: improve `Accept` parsing speed + * perf: improve `Accept-Charset` parsing speed + * perf: improve `Accept-Encoding` parsing speed + * perf: improve `Accept-Language` parsing speed + +0.6.0 / 2015-09-29 +================== + + * Fix including type extensions in parameters in `Accept` parsing + * Fix parsing `Accept` parameters with quoted equals + * Fix parsing `Accept` parameters with quoted semicolons + * Lazy-load modules from main entry point + * perf: delay type concatenation until needed + * perf: enable strict mode + * perf: hoist regular expressions + * perf: remove closures getting spec properties + * perf: remove a closure from media type parsing + * perf: remove property delete from media type parsing + +0.5.3 / 2015-05-10 +================== + + * Fix media type parameter matching to be case-insensitive + +0.5.2 / 2015-05-06 +================== + + * Fix comparing media types with quoted values + * Fix splitting media types with quoted commas + +0.5.1 / 2015-02-14 +================== + + * Fix preference sorting to be stable for long acceptable lists + +0.5.0 / 2014-12-18 +================== + + * Fix list return order when large accepted list + * Fix missing identity encoding when q=0 exists + * Remove dynamic building of Negotiator class + +0.4.9 / 2014-10-14 +================== + + * Fix error when media type has invalid parameter + +0.4.8 / 2014-09-28 +================== + + * Fix all negotiations to be case-insensitive + * Stable sort preferences of same quality according to client order + * Support Node.js 0.6 + +0.4.7 / 2014-06-24 +================== + + * Handle invalid provided languages + * Handle invalid provided media types + +0.4.6 / 2014-06-11 +================== + + * Order by specificity when quality is the same + +0.4.5 / 2014-05-29 +================== + + * Fix regression in empty header handling + +0.4.4 / 2014-05-29 +================== + + * Fix behaviors when headers are not present + +0.4.3 / 2014-04-16 +================== + + * Handle slashes on media params correctly + +0.4.2 / 2014-02-28 +================== + + * Fix media type sorting + * Handle media types params strictly + +0.4.1 / 2014-01-16 +================== + + * Use most specific matches + +0.4.0 / 2014-01-09 +================== + + * Remove preferred prefix from methods diff --git a/node_modules/negotiator/LICENSE b/node_modules/negotiator/LICENSE new file mode 100644 index 0000000..ea6b9e2 --- /dev/null +++ b/node_modules/negotiator/LICENSE @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2012-2014 Federico Romero +Copyright (c) 2012-2014 Isaac Z. Schlueter +Copyright (c) 2014-2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/negotiator/README.md b/node_modules/negotiator/README.md new file mode 100644 index 0000000..82915e5 --- /dev/null +++ b/node_modules/negotiator/README.md @@ -0,0 +1,203 @@ +# negotiator + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][github-actions-ci-image]][github-actions-ci-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +An HTTP content negotiator for Node.js + +## Installation + +```sh +$ npm install negotiator +``` + +## API + +```js +var Negotiator = require('negotiator') +``` + +### Accept Negotiation + +```js +availableMediaTypes = ['text/html', 'text/plain', 'application/json'] + +// The negotiator constructor receives a request object +negotiator = new Negotiator(request) + +// Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8' + +negotiator.mediaTypes() +// -> ['text/html', 'image/jpeg', 'application/*'] + +negotiator.mediaTypes(availableMediaTypes) +// -> ['text/html', 'application/json'] + +negotiator.mediaType(availableMediaTypes) +// -> 'text/html' +``` + +You can check a working example at `examples/accept.js`. + +#### Methods + +##### mediaType() + +Returns the most preferred media type from the client. + +##### mediaType(availableMediaType) + +Returns the most preferred media type from a list of available media types. + +##### mediaTypes() + +Returns an array of preferred media types ordered by the client preference. + +##### mediaTypes(availableMediaTypes) + +Returns an array of preferred media types ordered by priority from a list of +available media types. + +### Accept-Language Negotiation + +```js +negotiator = new Negotiator(request) + +availableLanguages = ['en', 'es', 'fr'] + +// Let's say Accept-Language header is 'en;q=0.8, es, pt' + +negotiator.languages() +// -> ['es', 'pt', 'en'] + +negotiator.languages(availableLanguages) +// -> ['es', 'en'] + +language = negotiator.language(availableLanguages) +// -> 'es' +``` + +You can check a working example at `examples/language.js`. + +#### Methods + +##### language() + +Returns the most preferred language from the client. + +##### language(availableLanguages) + +Returns the most preferred language from a list of available languages. + +##### languages() + +Returns an array of preferred languages ordered by the client preference. + +##### languages(availableLanguages) + +Returns an array of preferred languages ordered by priority from a list of +available languages. + +### Accept-Charset Negotiation + +```js +availableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5'] + +negotiator = new Negotiator(request) + +// Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2' + +negotiator.charsets() +// -> ['utf-8', 'iso-8859-1', 'utf-7'] + +negotiator.charsets(availableCharsets) +// -> ['utf-8', 'iso-8859-1'] + +negotiator.charset(availableCharsets) +// -> 'utf-8' +``` + +You can check a working example at `examples/charset.js`. + +#### Methods + +##### charset() + +Returns the most preferred charset from the client. + +##### charset(availableCharsets) + +Returns the most preferred charset from a list of available charsets. + +##### charsets() + +Returns an array of preferred charsets ordered by the client preference. + +##### charsets(availableCharsets) + +Returns an array of preferred charsets ordered by priority from a list of +available charsets. + +### Accept-Encoding Negotiation + +```js +availableEncodings = ['identity', 'gzip'] + +negotiator = new Negotiator(request) + +// Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5' + +negotiator.encodings() +// -> ['gzip', 'identity', 'compress'] + +negotiator.encodings(availableEncodings) +// -> ['gzip', 'identity'] + +negotiator.encoding(availableEncodings) +// -> 'gzip' +``` + +You can check a working example at `examples/encoding.js`. + +#### Methods + +##### encoding() + +Returns the most preferred encoding from the client. + +##### encoding(availableEncodings) + +Returns the most preferred encoding from a list of available encodings. + +##### encodings() + +Returns an array of preferred encodings ordered by the client preference. + +##### encodings(availableEncodings) + +Returns an array of preferred encodings ordered by priority from a list of +available encodings. + +## See Also + +The [accepts](https://npmjs.org/package/accepts#readme) module builds on +this module and provides an alternative interface, mime type validation, +and more. + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/negotiator.svg +[npm-url]: https://npmjs.org/package/negotiator +[node-version-image]: https://img.shields.io/node/v/negotiator.svg +[node-version-url]: https://nodejs.org/en/download/ +[coveralls-image]: https://img.shields.io/coveralls/jshttp/negotiator/master.svg +[coveralls-url]: https://coveralls.io/r/jshttp/negotiator?branch=master +[downloads-image]: https://img.shields.io/npm/dm/negotiator.svg +[downloads-url]: https://npmjs.org/package/negotiator +[github-actions-ci-image]: https://img.shields.io/github/workflow/status/jshttp/negotiator/ci/master?label=ci +[github-actions-ci-url]: https://github.com/jshttp/negotiator/actions/workflows/ci.yml diff --git a/node_modules/negotiator/index.js b/node_modules/negotiator/index.js new file mode 100644 index 0000000..4788264 --- /dev/null +++ b/node_modules/negotiator/index.js @@ -0,0 +1,82 @@ +/*! + * negotiator + * Copyright(c) 2012 Federico Romero + * Copyright(c) 2012-2014 Isaac Z. Schlueter + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict'; + +var preferredCharsets = require('./lib/charset') +var preferredEncodings = require('./lib/encoding') +var preferredLanguages = require('./lib/language') +var preferredMediaTypes = require('./lib/mediaType') + +/** + * Module exports. + * @public + */ + +module.exports = Negotiator; +module.exports.Negotiator = Negotiator; + +/** + * Create a Negotiator instance from a request. + * @param {object} request + * @public + */ + +function Negotiator(request) { + if (!(this instanceof Negotiator)) { + return new Negotiator(request); + } + + this.request = request; +} + +Negotiator.prototype.charset = function charset(available) { + var set = this.charsets(available); + return set && set[0]; +}; + +Negotiator.prototype.charsets = function charsets(available) { + return preferredCharsets(this.request.headers['accept-charset'], available); +}; + +Negotiator.prototype.encoding = function encoding(available) { + var set = this.encodings(available); + return set && set[0]; +}; + +Negotiator.prototype.encodings = function encodings(available) { + return preferredEncodings(this.request.headers['accept-encoding'], available); +}; + +Negotiator.prototype.language = function language(available) { + var set = this.languages(available); + return set && set[0]; +}; + +Negotiator.prototype.languages = function languages(available) { + return preferredLanguages(this.request.headers['accept-language'], available); +}; + +Negotiator.prototype.mediaType = function mediaType(available) { + var set = this.mediaTypes(available); + return set && set[0]; +}; + +Negotiator.prototype.mediaTypes = function mediaTypes(available) { + return preferredMediaTypes(this.request.headers.accept, available); +}; + +// Backwards compatibility +Negotiator.prototype.preferredCharset = Negotiator.prototype.charset; +Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets; +Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding; +Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings; +Negotiator.prototype.preferredLanguage = Negotiator.prototype.language; +Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages; +Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType; +Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes; diff --git a/node_modules/negotiator/lib/charset.js b/node_modules/negotiator/lib/charset.js new file mode 100644 index 0000000..cdd0148 --- /dev/null +++ b/node_modules/negotiator/lib/charset.js @@ -0,0 +1,169 @@ +/** + * negotiator + * Copyright(c) 2012 Isaac Z. Schlueter + * Copyright(c) 2014 Federico Romero + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict'; + +/** + * Module exports. + * @public + */ + +module.exports = preferredCharsets; +module.exports.preferredCharsets = preferredCharsets; + +/** + * Module variables. + * @private + */ + +var simpleCharsetRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/; + +/** + * Parse the Accept-Charset header. + * @private + */ + +function parseAcceptCharset(accept) { + var accepts = accept.split(','); + + for (var i = 0, j = 0; i < accepts.length; i++) { + var charset = parseCharset(accepts[i].trim(), i); + + if (charset) { + accepts[j++] = charset; + } + } + + // trim accepts + accepts.length = j; + + return accepts; +} + +/** + * Parse a charset from the Accept-Charset header. + * @private + */ + +function parseCharset(str, i) { + var match = simpleCharsetRegExp.exec(str); + if (!match) return null; + + var charset = match[1]; + var q = 1; + if (match[2]) { + var params = match[2].split(';') + for (var j = 0; j < params.length; j++) { + var p = params[j].trim().split('='); + if (p[0] === 'q') { + q = parseFloat(p[1]); + break; + } + } + } + + return { + charset: charset, + q: q, + i: i + }; +} + +/** + * Get the priority of a charset. + * @private + */ + +function getCharsetPriority(charset, accepted, index) { + var priority = {o: -1, q: 0, s: 0}; + + for (var i = 0; i < accepted.length; i++) { + var spec = specify(charset, accepted[i], index); + + if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { + priority = spec; + } + } + + return priority; +} + +/** + * Get the specificity of the charset. + * @private + */ + +function specify(charset, spec, index) { + var s = 0; + if(spec.charset.toLowerCase() === charset.toLowerCase()){ + s |= 1; + } else if (spec.charset !== '*' ) { + return null + } + + return { + i: index, + o: spec.i, + q: spec.q, + s: s + } +} + +/** + * Get the preferred charsets from an Accept-Charset header. + * @public + */ + +function preferredCharsets(accept, provided) { + // RFC 2616 sec 14.2: no header = * + var accepts = parseAcceptCharset(accept === undefined ? '*' : accept || ''); + + if (!provided) { + // sorted list of all charsets + return accepts + .filter(isQuality) + .sort(compareSpecs) + .map(getFullCharset); + } + + var priorities = provided.map(function getPriority(type, index) { + return getCharsetPriority(type, accepts, index); + }); + + // sorted list of accepted charsets + return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) { + return provided[priorities.indexOf(priority)]; + }); +} + +/** + * Compare two specs. + * @private + */ + +function compareSpecs(a, b) { + return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; +} + +/** + * Get full charset string. + * @private + */ + +function getFullCharset(spec) { + return spec.charset; +} + +/** + * Check if a spec has any quality. + * @private + */ + +function isQuality(spec) { + return spec.q > 0; +} diff --git a/node_modules/negotiator/lib/encoding.js b/node_modules/negotiator/lib/encoding.js new file mode 100644 index 0000000..8432cd7 --- /dev/null +++ b/node_modules/negotiator/lib/encoding.js @@ -0,0 +1,184 @@ +/** + * negotiator + * Copyright(c) 2012 Isaac Z. Schlueter + * Copyright(c) 2014 Federico Romero + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict'; + +/** + * Module exports. + * @public + */ + +module.exports = preferredEncodings; +module.exports.preferredEncodings = preferredEncodings; + +/** + * Module variables. + * @private + */ + +var simpleEncodingRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/; + +/** + * Parse the Accept-Encoding header. + * @private + */ + +function parseAcceptEncoding(accept) { + var accepts = accept.split(','); + var hasIdentity = false; + var minQuality = 1; + + for (var i = 0, j = 0; i < accepts.length; i++) { + var encoding = parseEncoding(accepts[i].trim(), i); + + if (encoding) { + accepts[j++] = encoding; + hasIdentity = hasIdentity || specify('identity', encoding); + minQuality = Math.min(minQuality, encoding.q || 1); + } + } + + if (!hasIdentity) { + /* + * If identity doesn't explicitly appear in the accept-encoding header, + * it's added to the list of acceptable encoding with the lowest q + */ + accepts[j++] = { + encoding: 'identity', + q: minQuality, + i: i + }; + } + + // trim accepts + accepts.length = j; + + return accepts; +} + +/** + * Parse an encoding from the Accept-Encoding header. + * @private + */ + +function parseEncoding(str, i) { + var match = simpleEncodingRegExp.exec(str); + if (!match) return null; + + var encoding = match[1]; + var q = 1; + if (match[2]) { + var params = match[2].split(';'); + for (var j = 0; j < params.length; j++) { + var p = params[j].trim().split('='); + if (p[0] === 'q') { + q = parseFloat(p[1]); + break; + } + } + } + + return { + encoding: encoding, + q: q, + i: i + }; +} + +/** + * Get the priority of an encoding. + * @private + */ + +function getEncodingPriority(encoding, accepted, index) { + var priority = {o: -1, q: 0, s: 0}; + + for (var i = 0; i < accepted.length; i++) { + var spec = specify(encoding, accepted[i], index); + + if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { + priority = spec; + } + } + + return priority; +} + +/** + * Get the specificity of the encoding. + * @private + */ + +function specify(encoding, spec, index) { + var s = 0; + if(spec.encoding.toLowerCase() === encoding.toLowerCase()){ + s |= 1; + } else if (spec.encoding !== '*' ) { + return null + } + + return { + i: index, + o: spec.i, + q: spec.q, + s: s + } +}; + +/** + * Get the preferred encodings from an Accept-Encoding header. + * @public + */ + +function preferredEncodings(accept, provided) { + var accepts = parseAcceptEncoding(accept || ''); + + if (!provided) { + // sorted list of all encodings + return accepts + .filter(isQuality) + .sort(compareSpecs) + .map(getFullEncoding); + } + + var priorities = provided.map(function getPriority(type, index) { + return getEncodingPriority(type, accepts, index); + }); + + // sorted list of accepted encodings + return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) { + return provided[priorities.indexOf(priority)]; + }); +} + +/** + * Compare two specs. + * @private + */ + +function compareSpecs(a, b) { + return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; +} + +/** + * Get full encoding string. + * @private + */ + +function getFullEncoding(spec) { + return spec.encoding; +} + +/** + * Check if a spec has any quality. + * @private + */ + +function isQuality(spec) { + return spec.q > 0; +} diff --git a/node_modules/negotiator/lib/language.js b/node_modules/negotiator/lib/language.js new file mode 100644 index 0000000..a231672 --- /dev/null +++ b/node_modules/negotiator/lib/language.js @@ -0,0 +1,179 @@ +/** + * negotiator + * Copyright(c) 2012 Isaac Z. Schlueter + * Copyright(c) 2014 Federico Romero + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict'; + +/** + * Module exports. + * @public + */ + +module.exports = preferredLanguages; +module.exports.preferredLanguages = preferredLanguages; + +/** + * Module variables. + * @private + */ + +var simpleLanguageRegExp = /^\s*([^\s\-;]+)(?:-([^\s;]+))?\s*(?:;(.*))?$/; + +/** + * Parse the Accept-Language header. + * @private + */ + +function parseAcceptLanguage(accept) { + var accepts = accept.split(','); + + for (var i = 0, j = 0; i < accepts.length; i++) { + var language = parseLanguage(accepts[i].trim(), i); + + if (language) { + accepts[j++] = language; + } + } + + // trim accepts + accepts.length = j; + + return accepts; +} + +/** + * Parse a language from the Accept-Language header. + * @private + */ + +function parseLanguage(str, i) { + var match = simpleLanguageRegExp.exec(str); + if (!match) return null; + + var prefix = match[1] + var suffix = match[2] + var full = prefix + + if (suffix) full += "-" + suffix; + + var q = 1; + if (match[3]) { + var params = match[3].split(';') + for (var j = 0; j < params.length; j++) { + var p = params[j].split('='); + if (p[0] === 'q') q = parseFloat(p[1]); + } + } + + return { + prefix: prefix, + suffix: suffix, + q: q, + i: i, + full: full + }; +} + +/** + * Get the priority of a language. + * @private + */ + +function getLanguagePriority(language, accepted, index) { + var priority = {o: -1, q: 0, s: 0}; + + for (var i = 0; i < accepted.length; i++) { + var spec = specify(language, accepted[i], index); + + if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { + priority = spec; + } + } + + return priority; +} + +/** + * Get the specificity of the language. + * @private + */ + +function specify(language, spec, index) { + var p = parseLanguage(language) + if (!p) return null; + var s = 0; + if(spec.full.toLowerCase() === p.full.toLowerCase()){ + s |= 4; + } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) { + s |= 2; + } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) { + s |= 1; + } else if (spec.full !== '*' ) { + return null + } + + return { + i: index, + o: spec.i, + q: spec.q, + s: s + } +}; + +/** + * Get the preferred languages from an Accept-Language header. + * @public + */ + +function preferredLanguages(accept, provided) { + // RFC 2616 sec 14.4: no header = * + var accepts = parseAcceptLanguage(accept === undefined ? '*' : accept || ''); + + if (!provided) { + // sorted list of all languages + return accepts + .filter(isQuality) + .sort(compareSpecs) + .map(getFullLanguage); + } + + var priorities = provided.map(function getPriority(type, index) { + return getLanguagePriority(type, accepts, index); + }); + + // sorted list of accepted languages + return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) { + return provided[priorities.indexOf(priority)]; + }); +} + +/** + * Compare two specs. + * @private + */ + +function compareSpecs(a, b) { + return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; +} + +/** + * Get full language string. + * @private + */ + +function getFullLanguage(spec) { + return spec.full; +} + +/** + * Check if a spec has any quality. + * @private + */ + +function isQuality(spec) { + return spec.q > 0; +} diff --git a/node_modules/negotiator/lib/mediaType.js b/node_modules/negotiator/lib/mediaType.js new file mode 100644 index 0000000..67309dd --- /dev/null +++ b/node_modules/negotiator/lib/mediaType.js @@ -0,0 +1,294 @@ +/** + * negotiator + * Copyright(c) 2012 Isaac Z. Schlueter + * Copyright(c) 2014 Federico Romero + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict'; + +/** + * Module exports. + * @public + */ + +module.exports = preferredMediaTypes; +module.exports.preferredMediaTypes = preferredMediaTypes; + +/** + * Module variables. + * @private + */ + +var simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/; + +/** + * Parse the Accept header. + * @private + */ + +function parseAccept(accept) { + var accepts = splitMediaTypes(accept); + + for (var i = 0, j = 0; i < accepts.length; i++) { + var mediaType = parseMediaType(accepts[i].trim(), i); + + if (mediaType) { + accepts[j++] = mediaType; + } + } + + // trim accepts + accepts.length = j; + + return accepts; +} + +/** + * Parse a media type from the Accept header. + * @private + */ + +function parseMediaType(str, i) { + var match = simpleMediaTypeRegExp.exec(str); + if (!match) return null; + + var params = Object.create(null); + var q = 1; + var subtype = match[2]; + var type = match[1]; + + if (match[3]) { + var kvps = splitParameters(match[3]).map(splitKeyValuePair); + + for (var j = 0; j < kvps.length; j++) { + var pair = kvps[j]; + var key = pair[0].toLowerCase(); + var val = pair[1]; + + // get the value, unwrapping quotes + var value = val && val[0] === '"' && val[val.length - 1] === '"' + ? val.substr(1, val.length - 2) + : val; + + if (key === 'q') { + q = parseFloat(value); + break; + } + + // store parameter + params[key] = value; + } + } + + return { + type: type, + subtype: subtype, + params: params, + q: q, + i: i + }; +} + +/** + * Get the priority of a media type. + * @private + */ + +function getMediaTypePriority(type, accepted, index) { + var priority = {o: -1, q: 0, s: 0}; + + for (var i = 0; i < accepted.length; i++) { + var spec = specify(type, accepted[i], index); + + if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { + priority = spec; + } + } + + return priority; +} + +/** + * Get the specificity of the media type. + * @private + */ + +function specify(type, spec, index) { + var p = parseMediaType(type); + var s = 0; + + if (!p) { + return null; + } + + if(spec.type.toLowerCase() == p.type.toLowerCase()) { + s |= 4 + } else if(spec.type != '*') { + return null; + } + + if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) { + s |= 2 + } else if(spec.subtype != '*') { + return null; + } + + var keys = Object.keys(spec.params); + if (keys.length > 0) { + if (keys.every(function (k) { + return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase(); + })) { + s |= 1 + } else { + return null + } + } + + return { + i: index, + o: spec.i, + q: spec.q, + s: s, + } +} + +/** + * Get the preferred media types from an Accept header. + * @public + */ + +function preferredMediaTypes(accept, provided) { + // RFC 2616 sec 14.2: no header = */* + var accepts = parseAccept(accept === undefined ? '*/*' : accept || ''); + + if (!provided) { + // sorted list of all types + return accepts + .filter(isQuality) + .sort(compareSpecs) + .map(getFullType); + } + + var priorities = provided.map(function getPriority(type, index) { + return getMediaTypePriority(type, accepts, index); + }); + + // sorted list of accepted types + return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) { + return provided[priorities.indexOf(priority)]; + }); +} + +/** + * Compare two specs. + * @private + */ + +function compareSpecs(a, b) { + return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; +} + +/** + * Get full type string. + * @private + */ + +function getFullType(spec) { + return spec.type + '/' + spec.subtype; +} + +/** + * Check if a spec has any quality. + * @private + */ + +function isQuality(spec) { + return spec.q > 0; +} + +/** + * Count the number of quotes in a string. + * @private + */ + +function quoteCount(string) { + var count = 0; + var index = 0; + + while ((index = string.indexOf('"', index)) !== -1) { + count++; + index++; + } + + return count; +} + +/** + * Split a key value pair. + * @private + */ + +function splitKeyValuePair(str) { + var index = str.indexOf('='); + var key; + var val; + + if (index === -1) { + key = str; + } else { + key = str.substr(0, index); + val = str.substr(index + 1); + } + + return [key, val]; +} + +/** + * Split an Accept header into media types. + * @private + */ + +function splitMediaTypes(accept) { + var accepts = accept.split(','); + + for (var i = 1, j = 0; i < accepts.length; i++) { + if (quoteCount(accepts[j]) % 2 == 0) { + accepts[++j] = accepts[i]; + } else { + accepts[j] += ',' + accepts[i]; + } + } + + // trim accepts + accepts.length = j + 1; + + return accepts; +} + +/** + * Split a string of parameters. + * @private + */ + +function splitParameters(str) { + var parameters = str.split(';'); + + for (var i = 1, j = 0; i < parameters.length; i++) { + if (quoteCount(parameters[j]) % 2 == 0) { + parameters[++j] = parameters[i]; + } else { + parameters[j] += ';' + parameters[i]; + } + } + + // trim parameters + parameters.length = j + 1; + + for (var i = 0; i < parameters.length; i++) { + parameters[i] = parameters[i].trim(); + } + + return parameters; +} diff --git a/node_modules/negotiator/package.json b/node_modules/negotiator/package.json new file mode 100644 index 0000000..297635f --- /dev/null +++ b/node_modules/negotiator/package.json @@ -0,0 +1,42 @@ +{ + "name": "negotiator", + "description": "HTTP content negotiation", + "version": "0.6.3", + "contributors": [ + "Douglas Christopher Wilson ", + "Federico Romero ", + "Isaac Z. Schlueter (http://blog.izs.me/)" + ], + "license": "MIT", + "keywords": [ + "http", + "content negotiation", + "accept", + "accept-language", + "accept-encoding", + "accept-charset" + ], + "repository": "jshttp/negotiator", + "devDependencies": { + "eslint": "7.32.0", + "eslint-plugin-markdown": "2.2.1", + "mocha": "9.1.3", + "nyc": "15.1.0" + }, + "files": [ + "lib/", + "HISTORY.md", + "LICENSE", + "index.js", + "README.md" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --reporter spec --check-leaks --bail test/", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..12a5b0b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,27 @@ +{ + "name": "team07", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "negotiator": "^0.6.3" + } + }, + "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" + } + } + }, + "dependencies": { + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..8d30960 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "negotiator": "^0.6.3" + } +}