diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml deleted file mode 100644 index 52e79458..00000000 --- a/.github/workflows/ci.yaml +++ /dev/null @@ -1,15 +0,0 @@ -name: CI - -on: - pull_request: - push: - branches: [ main ] - -jobs: - check-format-and-lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - run: npm install - - run: npm run format:check - - run: npm run lint diff --git a/.gitignore b/.gitignore index 8c85756e..08b25532 100644 --- a/.gitignore +++ b/.gitignore @@ -1,42 +1 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# next.js -next-env.d.ts -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# local env files -.env.local -.env.development.local -.env.test.local -.env.production.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo - -# swiftlatex's postinstall files -/public/*.js -/public/*.wasm +node_modules diff --git a/LICENSE b/LICENSE index 275fd6d3..2800f769 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2022 Saad Quadri - -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. +MIT License + +Copyright (c) 2022 Saad Quadri + +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/README.md b/README.md index e53da13f..423f2ccf 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,27 @@ -> [!NOTE] -> Resumake is currently undergoing a major v3 rewrite. For any thing related to the current app, please see [v2-(old)](https://github.com/saadq/resumake.io/tree/v2-(old)). - -# resumake.io - -A website for automatically generating elegant LaTeX resumes without the need to write any TeX code yourself. - -![resumake](https://i.imgur.com/QUoFVmG.png) - -Simply choose a template, fill in as much (or as little) info as you want, and then press Make to see your output. You can change your template at any point to see how your resume looks with different designs. - -When you're happy with your result, you can download the resume as a PDF, TeX, or JSON document. The JSON output is compatible with [JSONResume](https://jsonresume.org). - -## Credits -Thanks very much to the creators of the LaTeX templates used in this website. - -* [Rensselaer Career Development Center](https://www.rpi.edu/dept/arc/training/latex/resumes/) -* [Byungjin Park](https://github.com/posquit0) -* [Scott Clark](https://github.com/sc932) -* [Debarghya Das](https://github.com/deedy) -* [Xavier Danaux](https://github.com/xdanaux) -* [Ratul Saha](https://github.com/RatulSaha) -* [Daniil Belyakov](https://github.com/dnl-blkv) -* [Frits Wenneker](https://www.overleaf.com/latex/templates/your-new-cv/xqzhcmqkqrtw) - -## License -MIT © Saad Quadri +> [!NOTE] +> Resumake is currently undergoing a major v3 rewrite. For any thing related to the current app, please see [v2-(old)](https://github.com/saadq/resumake.io/tree/v2-(old)). + +# resumake.io + +A website for automatically generating elegant LaTeX resumes without the need to write any TeX code yourself. + +![resumake](https://i.imgur.com/QUoFVmG.png) + +Simply choose a template, fill in as much (or as little) info as you want, and then press Make to see your output. You can change your template at any point to see how your resume looks with different designs. + +When you're happy with your result, you can download the resume as a PDF, TeX, or JSON document. The JSON output is compatible with [JSONResume](https://jsonresume.org). + +## Credits +Thanks very much to the creators of the LaTeX templates used in this website. + +* [Rensselaer Career Development Center](https://www.rpi.edu/dept/arc/training/latex/resumes/) +* [Byungjin Park](https://github.com/posquit0) +* [Scott Clark](https://github.com/sc932) +* [Debarghya Das](https://github.com/deedy) +* [Xavier Danaux](https://github.com/xdanaux) +* [Ratul Saha](https://github.com/RatulSaha) +* [Daniil Belyakov](https://github.com/dnl-blkv) +* [Frits Wenneker](https://www.overleaf.com/latex/templates/your-new-cv/xqzhcmqkqrtw) + +## License +MIT © Saad Quadri diff --git a/next-env.d.ts b/next-env.d.ts new file mode 100644 index 00000000..62b8a52d --- /dev/null +++ b/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/next.config.js b/next.config.js index c64a835a..d35de97f 100644 --- a/next.config.js +++ b/next.config.js @@ -1,12 +1,12 @@ -// @ts-check - -/** @type {import('next').NextConfig} **/ -const NextConfig = { - reactStrictMode: true, - swcMinify: true, - compiler: { - styledComponents: true - }, -} - -module.exports = NextConfig +// @ts-check + +/** @type {import('next').NextConfig} **/ +const NextConfig = { + reactStrictMode: true, + swcMinify: true, + compiler: { + styledComponents: true + }, +} + +module.exports = NextConfig diff --git a/package-lock.json b/package-lock.json index 75df4a94..72527330 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6158 +1,6523 @@ -{ - "name": "resumake.io", - "version": "3.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "resumake.io", - "version": "3.0.0", - "hasInstallScript": true, - "dependencies": { - "archiver": "^5.3.1", - "common-tags": "^1.8.2", - "jotai": "^1.7.0", - "next": "^13.5.4", - "polished": "^4.2.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-hook-form": "^7.31.3", - "react-icons": "^4.4.0", - "react-pdf": "^5.7.2", - "styled-components": "^5.3.3", - "styled-reset": "^4.4.1", - "swiftlatex": "https://github.com/ducaale/SwiftLaTeX/releases/download/v1.0.0-experimental-9902734/swiftlatex-1.0.0-experimental-9902734.tgz" - }, - "devDependencies": { - "@types/archiver": "^5.3.1", - "@types/common-tags": "^1.8.1", - "@types/node": "16.11.12", - "@types/react": "17.0.37", - "@types/react-pdf": "^5.0.9", - "@types/styled-components": "^5.1.17", - "@typescript-eslint/eslint-plugin": "^5.6.0", - "@typescript-eslint/parser": "^5.6.0", - "eslint": "^7.32.0", - "eslint-config-next": "^13.4.7", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "prettier": "2.7.1", - "typescript": "4.5.3" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "peer": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "peer": true, - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", - "dependencies": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "peer": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "peer": true - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "peer": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "peer": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", - "peer": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template/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/@babel/template/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/@babel/template/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/@babel/template/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/@babel/template/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/@babel/template/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/@babel/template/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/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/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/@babel/traverse/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/@babel/traverse/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/@babel/traverse/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/@babel/traverse/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/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/traverse/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/@babel/traverse/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/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@emotion/is-prop-valid": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", - "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", - "dependencies": { - "@emotion/memoize": "^0.8.1" - } - }, - "node_modules/@emotion/memoize": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" - }, - "node_modules/@emotion/stylis": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", - "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" - }, - "node_modules/@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "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/source-map": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.4.tgz", - "integrity": "sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw==", - "peer": true - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "node_modules/@next/env": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.4.tgz", - "integrity": "sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "13.4.7", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.7.tgz", - "integrity": "sha512-ANEPltxzXbyyG7CvqxdY4PmeM5+RyWdAJGufTHnU+LA/i3J6IDV2r8Z4onKwskwKEhwqzz5lMaSYGGXLyHX+mg==", - "dev": true, - "dependencies": { - "glob": "7.1.7" - } - }, - "node_modules/@next/eslint-plugin-next/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.4.tgz", - "integrity": "sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.4.tgz", - "integrity": "sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.4.tgz", - "integrity": "sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.4.tgz", - "integrity": "sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.4.tgz", - "integrity": "sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.4.tgz", - "integrity": "sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.4.tgz", - "integrity": "sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.4.tgz", - "integrity": "sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.4.tgz", - "integrity": "sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgr/utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.1.tgz", - "integrity": "sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.2.12", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz", - "integrity": "sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==", - "dev": true - }, - "node_modules/@swc/helpers": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", - "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/archiver": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.3.2.tgz", - "integrity": "sha512-IctHreBuWE5dvBDz/0WeKtyVKVRs4h75IblxOACL92wU66v+HGAfEYAOyXkOFphvRJMhuXdI9huDXpX0FC6lCw==", - "dev": true, - "dependencies": { - "@types/readdir-glob": "*" - } - }, - "node_modules/@types/common-tags": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@types/common-tags/-/common-tags-1.8.1.tgz", - "integrity": "sha512-20R/mDpKSPWdJs5TOpz3e7zqbeCNuMCPhV7Yndk9KU2Rbij2r5W4RzwDPkzC+2lzUqXYu9rFzTktCBnDjHuNQg==", - "dev": true - }, - "node_modules/@types/eslint": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", - "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "peer": true - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "dev": true, - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.11.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", - "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/react": { - "version": "17.0.37", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.37.tgz", - "integrity": "sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-pdf": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/@types/react-pdf/-/react-pdf-5.7.4.tgz", - "integrity": "sha512-Im/HY4QhkhYcG+FJoGCy0WoGvdgYcpm+89W1lK5K9KBEQCy1YqTxhmWey5UkdnIPymmEDyeVJXdK0lPjtcvMyA==", - "dev": true, - "dependencies": { - "@types/react": "*", - "pdfjs-dist": "^2.10.377" - } - }, - "node_modules/@types/readdir-glob": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/readdir-glob/-/readdir-glob-1.1.1.tgz", - "integrity": "sha512-ImM6TmoF8bgOwvehGviEj3tRdRBbQujr1N+0ypaln/GWjaerOB26jb93vsRHmdMtvVQZQebOlqt2HROark87mQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" - }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, - "node_modules/@types/styled-components": { - "version": "5.1.26", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.26.tgz", - "integrity": "sha512-KuKJ9Z6xb93uJiIyxo/+ksS7yLjS1KzG6iv5i78dhVg/X3u5t1H7juRWqVmodIdz6wGVaIApo1u01kmFRdJHVw==", - "dev": true, - "dependencies": { - "@types/hoist-non-react-statics": "*", - "@types/react": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz", - "integrity": "sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.60.1", - "@typescript-eslint/type-utils": "5.60.1", - "@typescript-eslint/utils": "5.60.1", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.1.tgz", - "integrity": "sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.60.1", - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/typescript-estree": "5.60.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz", - "integrity": "sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/visitor-keys": "5.60.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz", - "integrity": "sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.60.1", - "@typescript-eslint/utils": "5.60.1", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz", - "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz", - "integrity": "sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/visitor-keys": "5.60.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.1.tgz", - "integrity": "sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.60.1", - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/typescript-estree": "5.60.1", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz", - "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.60.1", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "peer": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "peer": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "peer": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "peer": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "peer": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "peer": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "peer": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "peer": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "peer": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "peer": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "peer": true - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "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/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/archiver": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", - "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", - "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^3.2.3", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.0.0", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/archiver-utils/node_modules/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/archiver-utils/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", - "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/babel-plugin-styled-components": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz", - "integrity": "sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "lodash": "^4.17.21", - "picomatch": "^2.3.1" - }, - "peerDependencies": { - "styled-components": ">= 2" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" - } - }, - "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.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "peer": true, - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "engines": { - "node": "*" - } - }, - "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==", - "peer": true - }, - "node_modules/bundle-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", - "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", - "dev": true, - "dependencies": { - "run-applescript": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelize": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", - "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001509", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", - "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "peer": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/comlink": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.4.1.tgz", - "integrity": "sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==" - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "peer": true - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/compress-commons": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", - "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", - "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "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==", - "peer": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/css-to-react-native": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", - "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", - "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "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/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/default-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", - "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", - "dev": true, - "dependencies": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dev": true, - "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "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/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dommatrix": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dommatrix/-/dommatrix-1.0.3.tgz", - "integrity": "sha512-l32Xp/TLgWb8ReqbVJAFIvXmY7go4nTxxlWiAFyhoQw9RKEOHBZNnyGvJWqDVSPmq3Y9HlM4npqF/T6VMOXhww==", - "deprecated": "dommatrix is no longer maintained. Please use @thednp/dommatrix.", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.447", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz", - "integrity": "sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw==", - "peer": true - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "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-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", - "peer": true - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "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==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-next": { - "version": "13.4.7", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.7.tgz", - "integrity": "sha512-+IRAyD0+J1MZaTi9RQMPUfr6Q+GCZ1wOkK6XM52Vokh7VI4R6YFGOFzdkEFHl4ZyIX4FKa5vcwUP2WscSFNjNQ==", - "dev": true, - "dependencies": { - "@next/eslint-plugin-next": "13.4.7", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.42.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" - } - }, - "node_modules/eslint-import-resolver-node/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/eslint-import-resolver-typescript": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz", - "integrity": "sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "get-tsconfig": "^4.5.0", - "globby": "^13.1.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "synckit": "^0.8.5" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/globby": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.1.tgz", - "integrity": "sha512-DPCBxctI7dN4EeIqjW2KGqgdcUMbrhJ9AzON+PlxCtvppWhubTLD4+a0GFxiym14ZvacUydTPjLPc2DlKz7EIg==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/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/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/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/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "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/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "peer": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", - "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "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/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "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/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/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/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "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/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==", - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-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/get-tsconfig": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.6.2.tgz", - "integrity": "sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg==", - "dev": true, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-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": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-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-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/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/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "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.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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-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.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-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-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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-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-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-wsl/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "peer": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jotai": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/jotai/-/jotai-1.13.1.tgz", - "integrity": "sha512-RUmH1S4vLsG3V6fbGlKzGJnLrDcC/HNb5gH2AeA9DzuJknoVxSGvvg8OBB7lke+gDc4oXmdVsaKn/xDUhWZ0vw==", - "engines": { - "node": ">=12.20.0" - }, - "peerDependencies": { - "@babel/core": "*", - "@babel/template": "*", - "jotai-devtools": "*", - "jotai-immer": "*", - "jotai-optics": "*", - "jotai-redux": "*", - "jotai-tanstack-query": "*", - "jotai-urql": "*", - "jotai-valtio": "*", - "jotai-xstate": "*", - "jotai-zustand": "*", - "react": ">=16.8" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@babel/template": { - "optional": true - }, - "jotai-devtools": { - "optional": true - }, - "jotai-immer": { - "optional": true - }, - "jotai-optics": { - "optional": true - }, - "jotai-redux": { - "optional": true - }, - "jotai-tanstack-query": { - "optional": true - }, - "jotai-urql": { - "optional": true - }, - "jotai-valtio": { - "optional": true - }, - "jotai-xstate": { - "optional": true - }, - "jotai-zustand": { - "optional": true - } - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/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-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "peer": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", - "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/lazystream/node_modules/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/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "peer": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" - }, - "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.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-cancellable-promise": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/make-cancellable-promise/-/make-cancellable-promise-1.3.1.tgz", - "integrity": "sha512-DWOzWdO3xhY5ESjVR+wVFy03rpt0ZccS4bunccNwngoX6rllKlMZm6S9ZnJ5nMuDDweqDMjtaO0g6tZeh+cCUA==", - "funding": { - "url": "https://github.com/wojtekmaj/make-cancellable-promise?sponsor=1" - } - }, - "node_modules/make-event-props": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/make-event-props/-/make-event-props-1.6.1.tgz", - "integrity": "sha512-JhvWq/iz1BvlmnPvLJjXv+xnMPJZuychrDC68V+yCGQJn5chcA8rLGKo5EP1XwIKVrigSXKLmbeXAGkf36wdCQ==", - "funding": { - "url": "https://github.com/wojtekmaj/make-event-props?sponsor=1" - } - }, - "node_modules/merge-class-names": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/merge-class-names/-/merge-class-names-1.4.2.tgz", - "integrity": "sha512-bOl98VzwCGi25Gcn3xKxnR5p/WrhWFQB59MS/aGENcmUc6iSm96yrFDF0XSNurX9qN4LbJm0R9kfvsQ17i8zCw==", - "funding": { - "url": "https://github.com/wojtekmaj/merge-class-names?sponsor=1" - } - }, - "node_modules/merge-refs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge-refs/-/merge-refs-1.2.1.tgz", - "integrity": "sha512-pRPz39HQz2xzHdXAGvtJ9S8aEpNgpUjzb5yPC3ytozodmsHg+9nqgRs7/YOmn9fM/TLzntAC8AdGTidKxOq9TQ==", - "dependencies": { - "@types/react": "*" - }, - "funding": { - "url": "https://github.com/wojtekmaj/merge-refs?sponsor=1" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "peer": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "peer": true - }, - "node_modules/next": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/next/-/next-13.5.4.tgz", - "integrity": "sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==", - "dependencies": { - "@next/env": "13.5.4", - "@swc/helpers": "0.5.2", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.31", - "styled-jsx": "5.1.1", - "watchpack": "2.4.0" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=16.14.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "13.5.4", - "@next/swc-darwin-x64": "13.5.4", - "@next/swc-linux-arm64-gnu": "13.5.4", - "@next/swc-linux-arm64-musl": "13.5.4", - "@next/swc-linux-x64-gnu": "13.5.4", - "@next/swc-linux-x64-musl": "13.5.4", - "@next/swc-win32-arm64-msvc": "13.5.4", - "@next/swc-win32-ia32-msvc": "13.5.4", - "@next/swc-win32-x64-msvc": "13.5.4" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "peer": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "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.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", - "dev": true, - "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pdfjs-dist": { - "version": "2.16.105", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.16.105.tgz", - "integrity": "sha512-J4dn41spsAwUxCpEoVf6GVoz908IAA3mYiLmNxg8J9kfRXc2jxpbUepcP0ocp0alVNLFthTAM8DZ1RaHh8sU0A==", - "dev": true, - "dependencies": { - "dommatrix": "^1.0.3", - "web-streams-polyfill": "^3.2.1" - }, - "peerDependencies": { - "worker-loader": "^3.0.8" - }, - "peerDependenciesMeta": { - "worker-loader": { - "optional": true - } - } - }, - "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==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/polished": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", - "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", - "dependencies": { - "@babel/runtime": "^7.17.8" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-hook-form": { - "version": "7.45.1", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.45.1.tgz", - "integrity": "sha512-6dWoFJwycbuFfw/iKMcl+RdAOAOHDiF11KWYhNDRN/OkUt+Di5qsZHwA0OwsVnu9y135gkHpTw9DJA+WzCeR9w==", - "engines": { - "node": ">=12.22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/react-hook-form" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18" - } - }, - "node_modules/react-icons": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.10.1.tgz", - "integrity": "sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw==", - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "peer": true - }, - "node_modules/react-pdf": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-5.7.2.tgz", - "integrity": "sha512-hdDwvf007V0i2rPCqQVS1fa70CXut17SN3laJYlRHzuqcu8sLLjEoeXihty6c0Ev5g1mw31b8OT8EwRw1s8C4g==", - "dependencies": { - "@babel/runtime": "^7.0.0", - "file-loader": "^6.0.0", - "make-cancellable-promise": "^1.0.0", - "make-event-props": "^1.1.0", - "merge-class-names": "^1.1.1", - "merge-refs": "^1.0.0", - "pdfjs-dist": "2.12.313", - "prop-types": "^15.6.2", - "tiny-invariant": "^1.0.0", - "tiny-warning": "^1.0.0" - }, - "funding": { - "url": "https://github.com/wojtekmaj/react-pdf?sponsor=1" - }, - "peerDependencies": { - "react": "^16.3.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.3.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-pdf/node_modules/pdfjs-dist": { - "version": "2.12.313", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.12.313.tgz", - "integrity": "sha512-1x6iXO4Qnv6Eb+YFdN5JdUzt4pAkxSp3aLAYPX93eQCyg/m7QFzXVWJHJVtoW48CI8HCXju4dSkhQZwoheL5mA==", - "peerDependencies": { - "worker-loader": "^3.0.8" - }, - "peerDependenciesMeta": { - "worker-loader": { - "optional": true - } - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdir-glob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", - "dependencies": { - "minimatch": "^5.1.0" - } - }, - "node_modules/readdir-glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/readdir-glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-applescript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", - "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/run-applescript/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/run-applescript/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/run-applescript/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/run-applescript/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/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/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "peer": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "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==", - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/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.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "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==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-components": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.11.tgz", - "integrity": "sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==", - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/styled-components" - }, - "peerDependencies": { - "react": ">= 16.8.0", - "react-dom": ">= 16.8.0", - "react-is": ">= 16.8.0" - } - }, - "node_modules/styled-components/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/styled-components/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/styled-jsx": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/styled-reset": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/styled-reset/-/styled-reset-4.5.1.tgz", - "integrity": "sha512-6EvFWZRwaFRFxiPYMwmnzOe33rDkw5r9jIU0eEi49bkt6VSrvjeMp2ZOw/YFbw5SVs81llIY+5fzHtR2/VBZfQ==", - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "styled-components": ">=4.0.0 || >=5.0.0 || >=6.0.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/swiftlatex": { - "version": "1.0.0", - "resolved": "https://github.com/ducaale/SwiftLaTeX/releases/download/v1.0.0-experimental-9902734/swiftlatex-1.0.0-experimental-9902734.tgz", - "integrity": "sha512-g3vNM9oZsTgwa9Se2SjZ1DaRR3IbE36yOnceLmQWZGI4lTnmAfXNWd0fvSrRdaxG4tl/Xw27iAQ3e17DR19/eA==", - "license": "AGPL-3.0", - "dependencies": { - "comlink": "^4.3.1" - } - }, - "node_modules/synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", - "dev": true, - "dependencies": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", - "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser/node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/titleize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", - "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tslib": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", - "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.3.tgz", - "integrity": "sha512-eVYaEHALSt+s9LbvgEv4Ef+Tdq7hBiIZgii12xXJnukryt3pMgJf6aKhoCZ3FWQsu6sydEnkg11fYXLzhLBjeQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "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/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "peer": true, - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/webpack": { - "version": "5.88.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", - "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "peer": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "peer": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/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/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/zip-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "dependencies": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - } - } -} +{ + "name": "resumake.io", + "version": "3.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "resumake.io", + "version": "3.0.0", + "hasInstallScript": true, + "dependencies": { + "@reduxjs/toolkit": "^2.0.1", + "archiver": "^5.3.1", + "axios": "^1.6.5", + "bootstrap": "^5.3.2", + "common-tags": "^1.8.2", + "jotai": "^1.7.0", + "next": "^13.5.4", + "polished": "^4.2.2", + "react": "^18.2.0", + "react-bootstrap": "^2.10.0", + "react-dom": "^18.2.0", + "react-hook-form": "^7.31.3", + "react-icons": "^4.4.0", + "react-pdf": "^5.7.2", + "react-redux": "^9.1.0", + "styled-components": "^5.3.3", + "styled-reset": "^4.4.1", + "swiftlatex": "https://github.com/ducaale/SwiftLaTeX/releases/download/v1.0.0-experimental-9902734/swiftlatex-1.0.0-experimental-9902734.tgz" + }, + "devDependencies": { + "@types/archiver": "^5.3.1", + "@types/common-tags": "^1.8.1", + "@types/node": "16.11.12", + "@types/react": "17.0.37", + "@types/react-pdf": "^5.0.9", + "@types/styled-components": "^5.1.17", + "@typescript-eslint/eslint-plugin": "^5.6.0", + "@typescript-eslint/parser": "^5.6.0", + "eslint": "^7.32.0", + "eslint-config-next": "^13.4.7", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "prettier": "2.7.1", + "typescript": "4.5.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "peer": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/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==", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/core/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==", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/core/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==", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/core/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==", + "peer": true + }, + "node_modules/@babel/core/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==", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/core/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==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/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==", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "peer": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "peer": true + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "peer": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "peer": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", + "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", + "peer": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/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/@babel/template/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/@babel/template/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/@babel/template/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/@babel/template/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/@babel/template/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/@babel/template/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/@babel/traverse": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/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/@babel/traverse/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/@babel/traverse/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/@babel/traverse/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/@babel/traverse/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/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/traverse/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/@babel/traverse/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/@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "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/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", + "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@next/env": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.6.tgz", + "integrity": "sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.6.tgz", + "integrity": "sha512-ng7pU/DDsxPgT6ZPvuprxrkeew3XaRf4LAT4FabaEO/hAbvVx4P7wqnqdbTdDn1kgTvsI4tpIgT4Awn/m0bGbg==", + "dev": true, + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz", + "integrity": "sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz", + "integrity": "sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz", + "integrity": "sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz", + "integrity": "sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz", + "integrity": "sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz", + "integrity": "sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz", + "integrity": "sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz", + "integrity": "sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz", + "integrity": "sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@react-aria/ssr": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.1.tgz", + "integrity": "sha512-NqzkLFP8ZVI4GSorS0AYljC13QW2sc8bDqJOkBvkAt3M8gbcAXJWVRGtZBCRscki9RZF+rNlnPdg0G0jYkhJcg==", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.0.1.tgz", + "integrity": "sha512-fxIjrR9934cmS8YXIGd9e7s1XRsEU++aFc9DVNMFMRTM5Vtsg2DCRMj21eslGtDt43IUf9bJL3h5bwUlZleibA==", + "dependencies": { + "immer": "^10.0.3", + "redux": "^5.0.0", + "redux-thunk": "^3.1.0", + "reselect": "^5.0.1" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@restart/hooks": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.15.tgz", + "integrity": "sha512-cZFXYTxbpzYcieq/mBwSyXgqnGMHoBVh3J7MU0CCoIB4NRZxV9/TuwTBAaLMqpNhC3zTPMCgkQ5Ey07L02Xmcw==", + "dependencies": { + "dequal": "^2.0.3" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@restart/ui": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.6.6.tgz", + "integrity": "sha512-eC3puKuWE1SRYbojWHXnvCNHGgf3uzHCb6JOhnF4OXPibOIPEkR1sqDSkL643ydigxwh+ruCa1CmYHlzk7ikKA==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@popperjs/core": "^2.11.6", + "@react-aria/ssr": "^3.5.0", + "@restart/hooks": "^0.4.9", + "@types/warning": "^3.0.0", + "dequal": "^2.0.3", + "dom-helpers": "^5.2.0", + "uncontrollable": "^8.0.1", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + } + }, + "node_modules/@restart/ui/node_modules/uncontrollable": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz", + "integrity": "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==", + "peerDependencies": { + "react": ">=16.14.0" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.0.tgz", + "integrity": "sha512-Jh4t/593gxs0lJZ/z3NnasKlplXT2f+4y/LZYuaKZW5KAaiVFL/fThhs+17EbUd53jUVJ0QudYCBGbN/psvaqg==", + "dev": true + }, + "node_modules/@swc/helpers": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", + "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/archiver": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.3.4.tgz", + "integrity": "sha512-Lj7fLBIMwYFgViVVZHEdExZC3lVYsl+QL0VmdNdIzGZH544jHveYWij6qdnBgJQDnR7pMKliN9z2cPZFEbhyPw==", + "dev": true, + "dependencies": { + "@types/readdir-glob": "*" + } + }, + "node_modules/@types/common-tags": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/@types/common-tags/-/common-tags-1.8.4.tgz", + "integrity": "sha512-S+1hLDJPjWNDhcGxsxEbepzaxWqURP/o+3cP4aa2w7yBXgdcmKGQtZzP8JbyfOd0m+33nh+8+kvxYE2UJtBDkg==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "8.56.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", + "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "peer": true + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "dev": true, + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.11.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", + "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" + }, + "node_modules/@types/react": { + "version": "17.0.37", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.37.tgz", + "integrity": "sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-pdf": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/@types/react-pdf/-/react-pdf-5.7.4.tgz", + "integrity": "sha512-Im/HY4QhkhYcG+FJoGCy0WoGvdgYcpm+89W1lK5K9KBEQCy1YqTxhmWey5UkdnIPymmEDyeVJXdK0lPjtcvMyA==", + "dev": true, + "dependencies": { + "@types/react": "*", + "pdfjs-dist": "^2.10.377" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", + "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/readdir-glob": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/readdir-glob/-/readdir-glob-1.1.5.tgz", + "integrity": "sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" + }, + "node_modules/@types/semver": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "dev": true + }, + "node_modules/@types/styled-components": { + "version": "5.1.34", + "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.34.tgz", + "integrity": "sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==", + "dev": true, + "dependencies": { + "@types/hoist-non-react-statics": "*", + "@types/react": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, + "node_modules/@types/warning": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz", + "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "peer": true + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "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/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/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/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", + "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "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/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", + "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", + "dependencies": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/babel-plugin-styled-components": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz", + "integrity": "sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "lodash": "^4.17.21", + "picomatch": "^2.3.1" + }, + "peerDependencies": { + "styled-components": ">= 2" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bootstrap": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz", + "integrity": "sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "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.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "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==", + "peer": true + }, + "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/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001579", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", + "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comlink": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.4.1.tgz", + "integrity": "sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "peer": true + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "peer": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "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/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dommatrix": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dommatrix/-/dommatrix-1.0.3.tgz", + "integrity": "sha512-l32Xp/TLgWb8ReqbVJAFIvXmY7go4nTxxlWiAFyhoQw9RKEOHBZNnyGvJWqDVSPmq3Y9HlM4npqF/T6VMOXhww==", + "deprecated": "dommatrix is no longer maintained. Please use @thednp/dommatrix.", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.639", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.639.tgz", + "integrity": "sha512-CkKf3ZUVZchr+zDpAlNLEEy2NJJ9T64ULWaDgy3THXXlPVPkLu3VOs9Bac44nebVtdwl2geSj6AxTtGDOxoXhg==", + "peer": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "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-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", + "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "peer": true + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "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==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.6.tgz", + "integrity": "sha512-o8pQsUHTo9aHqJ2YiZDym5gQAMRf7O2HndHo/JZeY7TDD+W4hk6Ma8Vw54RHiBeb7OWWO5dPirQB+Is/aVQ7Kg==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "13.5.6", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/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/eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/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/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/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/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "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-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "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/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "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/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "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/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "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/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==", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-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/get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-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": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.3.tgz", + "integrity": "sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-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.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "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-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-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-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "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-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jotai": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/jotai/-/jotai-1.13.1.tgz", + "integrity": "sha512-RUmH1S4vLsG3V6fbGlKzGJnLrDcC/HNb5gH2AeA9DzuJknoVxSGvvg8OBB7lke+gDc4oXmdVsaKn/xDUhWZ0vw==", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@babel/core": "*", + "@babel/template": "*", + "jotai-devtools": "*", + "jotai-immer": "*", + "jotai-optics": "*", + "jotai-redux": "*", + "jotai-tanstack-query": "*", + "jotai-urql": "*", + "jotai-valtio": "*", + "jotai-xstate": "*", + "jotai-zustand": "*", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@babel/template": { + "optional": true + }, + "jotai-devtools": { + "optional": true + }, + "jotai-immer": { + "optional": true + }, + "jotai-optics": { + "optional": true + }, + "jotai-redux": { + "optional": true + }, + "jotai-tanstack-query": { + "optional": true + }, + "jotai-urql": { + "optional": true + }, + "jotai-valtio": { + "optional": true + }, + "jotai-xstate": { + "optional": true + }, + "jotai-zustand": { + "optional": true + } + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/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-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "peer": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/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/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/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/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" + }, + "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.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-cancellable-promise": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/make-cancellable-promise/-/make-cancellable-promise-1.3.2.tgz", + "integrity": "sha512-GCXh3bq/WuMbS+Ky4JBPW1hYTOU+znU+Q5m9Pu+pI8EoUqIHk9+tviOKC6/qhHh8C4/As3tzJ69IF32kdz85ww==", + "funding": { + "url": "https://github.com/wojtekmaj/make-cancellable-promise?sponsor=1" + } + }, + "node_modules/make-event-props": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/make-event-props/-/make-event-props-1.6.2.tgz", + "integrity": "sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA==", + "funding": { + "url": "https://github.com/wojtekmaj/make-event-props?sponsor=1" + } + }, + "node_modules/merge-class-names": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/merge-class-names/-/merge-class-names-1.4.2.tgz", + "integrity": "sha512-bOl98VzwCGi25Gcn3xKxnR5p/WrhWFQB59MS/aGENcmUc6iSm96yrFDF0XSNurX9qN4LbJm0R9kfvsQ17i8zCw==", + "funding": { + "url": "https://github.com/wojtekmaj/merge-class-names?sponsor=1" + } + }, + "node_modules/merge-refs": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/merge-refs/-/merge-refs-1.2.2.tgz", + "integrity": "sha512-RwcT7GsQR3KbuLw1rRuodq4Nt547BKEBkliZ0qqsrpyNne9bGTFtsFIsIpx82huWhcl3kOlOlH4H0xkPk/DqVw==", + "funding": { + "url": "https://github.com/wojtekmaj/merge-refs?sponsor=1" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "peer": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-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.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "peer": true + }, + "node_modules/next": { + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/next/-/next-13.5.6.tgz", + "integrity": "sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==", + "dependencies": { + "@next/env": "13.5.6", + "@swc/helpers": "0.5.2", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.31", + "styled-jsx": "5.1.1", + "watchpack": "2.4.0" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=16.14.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "13.5.6", + "@next/swc-darwin-x64": "13.5.6", + "@next/swc-linux-arm64-gnu": "13.5.6", + "@next/swc-linux-arm64-musl": "13.5.6", + "@next/swc-linux-x64-gnu": "13.5.6", + "@next/swc-linux-x64-musl": "13.5.6", + "@next/swc-win32-arm64-msvc": "13.5.6", + "@next/swc-win32-ia32-msvc": "13.5.6", + "@next/swc-win32-x64-msvc": "13.5.6" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "peer": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pdfjs-dist": { + "version": "2.16.105", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.16.105.tgz", + "integrity": "sha512-J4dn41spsAwUxCpEoVf6GVoz908IAA3mYiLmNxg8J9kfRXc2jxpbUepcP0ocp0alVNLFthTAM8DZ1RaHh8sU0A==", + "dev": true, + "dependencies": { + "dommatrix": "^1.0.3", + "web-streams-polyfill": "^3.2.1" + }, + "peerDependencies": { + "worker-loader": "^3.0.8" + }, + "peerDependenciesMeta": { + "worker-loader": { + "optional": true + } + } + }, + "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==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/polished": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", + "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", + "dependencies": { + "@babel/runtime": "^7.17.8" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types-extra": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", + "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", + "dependencies": { + "react-is": "^16.3.2", + "warning": "^4.0.0" + }, + "peerDependencies": { + "react": ">=0.14.0" + } + }, + "node_modules/prop-types-extra/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "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/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-bootstrap": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.0.tgz", + "integrity": "sha512-87gRP69VAfeU2yKgp8RI3HvzhPNrnYIV2QNranYXataz3ef+k7OhvKGGdxQLQfUsQ2RTmlY66tn4pdFrZ94hNg==", + "dependencies": { + "@babel/runtime": "^7.22.5", + "@restart/hooks": "^0.4.9", + "@restart/ui": "^1.6.6", + "@types/react-transition-group": "^4.4.6", + "classnames": "^2.3.2", + "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.5", + "uncontrollable": "^7.2.1", + "warning": "^4.0.3" + }, + "peerDependencies": { + "@types/react": ">=16.14.8", + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-hook-form": { + "version": "7.49.3", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.49.3.tgz", + "integrity": "sha512-foD6r3juidAT1cOZzpmD/gOKt7fRsDhXXZ0y28+Al1CHgX+AY1qIN9VSIIItXRq1dN68QrRwl1ORFlwjBaAqeQ==", + "engines": { + "node": ">=18", + "pnpm": "8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18" + } + }, + "node_modules/react-icons": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.12.0.tgz", + "integrity": "sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "peer": true + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "node_modules/react-pdf": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-5.7.2.tgz", + "integrity": "sha512-hdDwvf007V0i2rPCqQVS1fa70CXut17SN3laJYlRHzuqcu8sLLjEoeXihty6c0Ev5g1mw31b8OT8EwRw1s8C4g==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "file-loader": "^6.0.0", + "make-cancellable-promise": "^1.0.0", + "make-event-props": "^1.1.0", + "merge-class-names": "^1.1.1", + "merge-refs": "^1.0.0", + "pdfjs-dist": "2.12.313", + "prop-types": "^15.6.2", + "tiny-invariant": "^1.0.0", + "tiny-warning": "^1.0.0" + }, + "funding": { + "url": "https://github.com/wojtekmaj/react-pdf?sponsor=1" + }, + "peerDependencies": { + "react": "^16.3.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.3.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-pdf/node_modules/pdfjs-dist": { + "version": "2.12.313", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.12.313.tgz", + "integrity": "sha512-1x6iXO4Qnv6Eb+YFdN5JdUzt4pAkxSp3aLAYPX93eQCyg/m7QFzXVWJHJVtoW48CI8HCXju4dSkhQZwoheL5mA==", + "peerDependencies": { + "worker-loader": "^3.0.8" + }, + "peerDependenciesMeta": { + "worker-loader": { + "optional": true + } + } + }, + "node_modules/react-redux": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.0.tgz", + "integrity": "sha512-6qoDzIO+gbrza8h3hjMA9aq4nwVFCKFtY2iLxCtVT38Swyy2C/dJCGBXHeHLtx6qlg/8qzc2MrhOeduf5K32wQ==", + "dependencies": { + "@types/use-sync-external-store": "^0.0.3", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25", + "react": "^18.0", + "react-native": ">=0.69", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react-native": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==" + }, + "node_modules/redux-thunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", + "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", + "peerDependencies": { + "redux": "^5.0.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reselect": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.0.tgz", + "integrity": "sha512-aw7jcGLDpSgNDyWBQLv2cedml85qd95/iszJjN988zX1t7AVRJi19d9kto5+W7oCfQ94gyo40dVbT6g2k4/kXg==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", + "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "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==", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/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.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "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==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-components": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.11.tgz", + "integrity": "sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==", + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0", + "react-is": ">= 16.8.0" + } + }, + "node_modules/styled-components/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/styled-components/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/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/styled-reset": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/styled-reset/-/styled-reset-4.5.2.tgz", + "integrity": "sha512-dbAaaVEhweBs2FGfqGBdW6oMcMK8238C2X5KCxBhUQJX92m/QyUfzRADOXhdXiXNkIPELtMCd72YY9eCdORfIw==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "styled-components": ">=4.0.0 || >=5.0.0 || >=6.0.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swiftlatex": { + "version": "1.0.0", + "resolved": "https://github.com/ducaale/SwiftLaTeX/releases/download/v1.0.0-experimental-9902734/swiftlatex-1.0.0-experimental-9902734.tgz", + "integrity": "sha512-g3vNM9oZsTgwa9Se2SjZ1DaRR3IbE36yOnceLmQWZGI4lTnmAfXNWd0fvSrRdaxG4tl/Xw27iAQ3e17DR19/eA==", + "license": "AGPL-3.0", + "dependencies": { + "comlink": "^4.3.1" + } + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", + "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "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/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.3.tgz", + "integrity": "sha512-eVYaEHALSt+s9LbvgEv4Ef+Tdq7hBiIZgii12xXJnukryt3pMgJf6aKhoCZ3FWQsu6sydEnkg11fYXLzhLBjeQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "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/uncontrollable": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz", + "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" + }, + "peerDependencies": { + "react": ">=15.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/v8-compile-cache": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", + "dev": true + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", + "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack/node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/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/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + } + } +} diff --git a/package.json b/package.json index e2610204..a8d8d727 100644 --- a/package.json +++ b/package.json @@ -1,95 +1,100 @@ -{ - "private": true, - "name": "resumake.io", - "version": "3.0.0", - "engines": { - "node": ">=20" - }, - "scripts": { - "dev": "next dev", - "start": "next start", - "build": "next build", - "lint": "next lint", - "format": "prettier --write src", - "format:check": "prettier --check src", - "postinstall": "cp node_modules/swiftlatex/dist/swift*.js node_modules/swiftlatex/dist/*.wasm public" - }, - "dependencies": { - "archiver": "^5.3.1", - "common-tags": "^1.8.2", - "jotai": "^1.7.0", - "next": "^13.5.4", - "polished": "^4.2.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-hook-form": "^7.31.3", - "react-icons": "^4.4.0", - "react-pdf": "^5.7.2", - "styled-components": "^5.3.3", - "styled-reset": "^4.4.1", - "swiftlatex": "https://github.com/ducaale/SwiftLaTeX/releases/download/v1.0.0-experimental-9902734/swiftlatex-1.0.0-experimental-9902734.tgz" - }, - "devDependencies": { - "@types/archiver": "^5.3.1", - "@types/common-tags": "^1.8.1", - "@types/node": "16.11.12", - "@types/react": "17.0.37", - "@types/react-pdf": "^5.0.9", - "@types/styled-components": "^5.1.17", - "@typescript-eslint/eslint-plugin": "^5.6.0", - "@typescript-eslint/parser": "^5.6.0", - "eslint": "^7.32.0", - "eslint-config-next": "^13.4.7", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "prettier": "2.7.1", - "typescript": "4.5.3" - }, - "prettier": { - "semi": false, - "singleQuote": true, - "trailingComma": "none" - }, - "eslintConfig": { - "extends": [ - "plugin:react/recommended", - "plugin:@typescript-eslint/recommended", - "plugin:@next/next/recommended" - ], - "plugins": [ - "@typescript-eslint", - "react-hooks" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 2018, - "sourceType": "module" - }, - "settings": { - "react": { - "pragma": "React", - "version": "detect" - } - }, - "rules": { - "no-console": "warn", - "react-hooks/rules-of-hooks": "error", - "react-hooks/exhaustive-deps": "error", - "react/prop-types": "off", - "react/react-in-jsx-scope": "off", - "react/display-name": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/no-empty-interface": "off", - "@typescript-eslint/ban-types": "off", - "@typescript-eslint/no-unused-vars": [ - "error", - { - "args": "none" - } - ], - "@typescript-eslint/no-inferrable-types": "off" - } - } -} +{ + "private": true, + "name": "resumake.io", + "version": "3.0.0", + "engines": { + "node": ">=20" + }, + "scripts": { + "dev": "next dev", + "start": "next start", + "build": "next build", + "lint": "next lint", + "format": "prettier --write src", + "format:check": "prettier --check src", + "postinstall": "cp node_modules/swiftlatex/dist/swift*.js node_modules/swiftlatex/dist/*.wasm public" + }, + "dependencies": { + "@reduxjs/toolkit": "^2.0.1", + "archiver": "^5.3.1", + "axios": "^1.6.5", + "bootstrap": "^5.3.2", + "common-tags": "^1.8.2", + "jotai": "^1.7.0", + "next": "^13.5.4", + "polished": "^4.2.2", + "react": "^18.2.0", + "react-bootstrap": "^2.10.0", + "react-dom": "^18.2.0", + "react-hook-form": "^7.31.3", + "react-icons": "^4.4.0", + "react-pdf": "^5.7.2", + "react-redux": "^9.1.0", + "styled-components": "^5.3.3", + "styled-reset": "^4.4.1", + "swiftlatex": "https://github.com/ducaale/SwiftLaTeX/releases/download/v1.0.0-experimental-9902734/swiftlatex-1.0.0-experimental-9902734.tgz" + }, + "devDependencies": { + "@types/archiver": "^5.3.1", + "@types/common-tags": "^1.8.1", + "@types/node": "16.11.12", + "@types/react": "17.0.37", + "@types/react-pdf": "^5.0.9", + "@types/styled-components": "^5.1.17", + "@typescript-eslint/eslint-plugin": "^5.6.0", + "@typescript-eslint/parser": "^5.6.0", + "eslint": "^7.32.0", + "eslint-config-next": "^13.4.7", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "prettier": "2.7.1", + "typescript": "4.5.3" + }, + "prettier": { + "semi": false, + "singleQuote": true, + "trailingComma": "none" + }, + "eslintConfig": { + "extends": [ + "plugin:react/recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@next/next/recommended" + ], + "plugins": [ + "@typescript-eslint", + "react-hooks" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "settings": { + "react": { + "pragma": "React", + "version": "detect" + } + }, + "rules": { + "no-console": "warn", + "react-hooks/rules-of-hooks": "error", + "react-hooks/exhaustive-deps": "error", + "react/prop-types": "off", + "react/react-in-jsx-scope": "off", + "react/display-name": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-empty-interface": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/no-unused-vars": [ + "error", + { + "args": "none" + } + ], + "@typescript-eslint/no-inferrable-types": "off" + } + } +} diff --git a/public/swiftlatexdvipdfm.js b/public/swiftlatexdvipdfm.js new file mode 100644 index 00000000..a8aa0f7b --- /dev/null +++ b/public/swiftlatexdvipdfm.js @@ -0,0 +1,6 @@ +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r(require("fs"),require("path")):"function"==typeof define&&define.amd?define(["fs","path"],r):((e="undefined"!=typeof globalThis?globalThis:e||self)["native/dvipdfm"]=e["native/dvipdfm"]||{},e["native/dvipdfm"]["wasm/swiftlatexdvipdfm"]=e["native/dvipdfm"]["wasm/swiftlatexdvipdfm"]||{},e["native/dvipdfm"]["wasm/swiftlatexdvipdfm"].js=r(e.require$$1,e.require$$2))}(this,(function(e,r){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=t(e),o=t(r);function a(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function i(e){if(e.__esModule)return e;var r=e.default;if("function"==typeof r){var t=function e(){return this instanceof e?Reflect.construct(r,arguments,this.constructor):r.apply(this,arguments)};t.prototype=r.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(e).forEach((function(r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})})),t}var s={exports:{}}; +/** + * @license + * Copyright 2019 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */const l=Symbol("Comlink.proxy"),u=Symbol("Comlink.endpoint"),c=Symbol("Comlink.releaseProxy"),d=Symbol("Comlink.finalizer"),f=Symbol("Comlink.thrown"),m=e=>"object"==typeof e&&null!==e||"function"==typeof e,p=new Map([["proxy",{canHandle:e=>m(e)&&e[l],serialize(e){const{port1:r,port2:t}=new MessageChannel;return h(e,r),[t,[t]]},deserialize:e=>(e.start(),v(e))}],["throw",{canHandle:e=>m(e)&&f in e,serialize({value:e}){let r;return r=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[r,[]]},deserialize(e){if(e.isError)throw Object.assign(new Error(e.value.message),e.value);throw e.value}}]]);function h(e,r=globalThis,t=["*"]){r.addEventListener("message",(function n(o){if(!o||!o.data)return;if(!function(e,r){for(const t of e){if(r===t||"*"===t)return!0;if(t instanceof RegExp&&t.test(r))return!0}return!1}(t,o.origin))return void console.warn(`Invalid origin '${o.origin}' for comlink proxy`);const{id:a,type:i,path:s}=Object.assign({path:[]},o.data),l=(o.data.argumentList||[]).map(A);let u;try{const r=s.slice(0,-1).reduce(((e,r)=>e[r]),e),t=s.reduce(((e,r)=>e[r]),e);switch(i){case"GET":u=t;break;case"SET":r[s.slice(-1)[0]]=A(o.data.value),u=!0;break;case"APPLY":u=t.apply(r,l);break;case"CONSTRUCT":u=F(new t(...l));break;case"ENDPOINT":{const{port1:r,port2:t}=new MessageChannel;h(e,t),u=D(r,[r])}break;case"RELEASE":u=void 0;break;default:return}}catch(e){u={value:e,[f]:0}}Promise.resolve(u).catch((e=>({value:e,[f]:0}))).then((t=>{const[o,s]=P(t);r.postMessage(Object.assign(Object.assign({},o),{id:a}),s),"RELEASE"===i&&(r.removeEventListener("message",n),w(r),d in e&&"function"==typeof e[d]&&e[d]())})).catch((e=>{const[t,n]=P({value:new TypeError("Unserializable return value"),[f]:0});r.postMessage(Object.assign(Object.assign({},t),{id:a}),n)}))})),r.start&&r.start()}function w(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function v(e,r){return k(e,[],r)}function g(e){if(e)throw new Error("Proxy has been released and is not useable")}function y(e){return M(e,{type:"RELEASE"}).then((()=>{w(e)}))}const E=new WeakMap,b="FinalizationRegistry"in globalThis&&new FinalizationRegistry((e=>{const r=(E.get(e)||0)-1;E.set(e,r),0===r&&y(e)}));function k(e,r=[],t=function(){}){let n=!1;const o=new Proxy(t,{get(t,a){if(g(n),a===c)return()=>{!function(e){b&&b.unregister(e)}(o),y(e),n=!0};if("then"===a){if(0===r.length)return{then:()=>o};const t=M(e,{type:"GET",path:r.map((e=>e.toString()))}).then(A);return t.then.bind(t)}return k(e,[...r,a])},set(t,o,a){g(n);const[i,s]=P(a);return M(e,{type:"SET",path:[...r,o].map((e=>e.toString())),value:i},s).then(A)},apply(t,o,a){g(n);const i=r[r.length-1];if(i===u)return M(e,{type:"ENDPOINT"}).then(A);if("bind"===i)return k(e,r.slice(0,-1));const[s,l]=_(a);return M(e,{type:"APPLY",path:r.map((e=>e.toString())),argumentList:s},l).then(A)},construct(t,o){g(n);const[a,i]=_(o);return M(e,{type:"CONSTRUCT",path:r.map((e=>e.toString())),argumentList:a},i).then(A)}});return function(e,r){const t=(E.get(r)||0)+1;E.set(r,t),b&&b.register(e,r,e)}(o,e),o}function _(e){const r=e.map(P);return[r.map((e=>e[0])),(t=r.map((e=>e[1])),Array.prototype.concat.apply([],t))];var t}const S=new WeakMap;function D(e,r){return S.set(e,r),e}function F(e){return Object.assign(e,{[l]:!0})}function P(e){for(const[r,t]of p)if(t.canHandle(e)){const[n,o]=t.serialize(e);return[{type:"HANDLER",name:r,value:n},o]}return[{type:"RAW",value:e},S.get(e)||[]]}function A(e){switch(e.type){case"HANDLER":return p.get(e.name).deserialize(e.value);case"RAW":return e.value}}function M(e,r,t){return new Promise((n=>{const o=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");e.addEventListener("message",(function r(t){t.data&&t.data.id&&t.data.id===o&&(e.removeEventListener("message",r),n(t.data))})),e.start&&e.start(),e.postMessage(Object.assign({id:o},r),t)}))}var x=i(Object.freeze({__proto__:null,createEndpoint:u,expose:h,finalizer:d,proxy:F,proxyMarker:l,releaseProxy:c,transfer:D,transferHandlers:p,windowEndpoint:function(e,r=globalThis,t="*"){return{postMessage:(r,n)=>e.postMessage(r,t,n),addEventListener:r.addEventListener.bind(r),removeEventListener:r.removeEventListener.bind(r)}},wrap:v}));return function(e){var r=void 0!==r?r:{};const t=x,a="/tex",i="/work";self.memlog="",self.initmem=void 0,self.mainfile="main.tex",self.texlive_endpoint=void 0,self.extension=void 0;r={print(e){self.memlog+=e+"\n"},printErr(e){self.memlog+=e+"\n",console.log(e)},preRun(){ge.mkdir(a),ge.mkdir(i)},postRun(){var e,r;self.postMessage("wasm_initialized"),self.initmem=(e=S.buffer,(r=new Uint8Array(e.byteLength)).set(new Uint8Array(e)),r)},onAbort(){self.memlog+="Engine crashed",console.error("full log",self.memlog)}};function s(e){let r=Oe(e.length);return M.set(new Uint8Array(e),r),r}function l(){self.memlog="",self.initmem&&new Uint8Array(S.buffer).set(self.initmem),function(){for(var e=0;e{throw r},v="object"==typeof window,g="function"==typeof importScripts,y="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,E="";if(y){var b=n.default,k=o.default;E=g?k.dirname(E)+"/":__dirname+"/",f=(e,r)=>(e=V(e)?new URL(e):k.normalize(e),b.readFileSync(e,r?void 0:"utf8")),p=e=>{var r=f(e,!0);return r.buffer||(r=new Uint8Array(r)),r},m=(e,r,t,n=!0)=>{e=V(e)?new URL(e):k.normalize(e),b.readFile(e,n?void 0:"utf8",((e,o)=>{e?t(e):r(n?o.buffer:o)}))},!r.thisProgram&&process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),process.argv.slice(2),e.exports=r,process.on("uncaughtException",(e=>{if(!("unwind"===e||e instanceof Q||e.context instanceof Q))throw e})),w=(e,r)=>{throw process.exitCode=e,r},r.inspect=()=>"[Emscripten Module object]"}else(v||g)&&(g?E=self.location.href:"undefined"!=typeof document&&document.currentScript&&(E=document.currentScript.src),E=0!==E.indexOf("blob:")?E.substr(0,E.replace(/[?#].*/,"").lastIndexOf("/")+1):"",f=e=>{var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},g&&(p=e=>{var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),m=(e,r,t)=>{var n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="arraybuffer",n.onload=()=>{200==n.status||0==n.status&&n.response?r(n.response):t()},n.onerror=t,n.send(null)});var _,S,D=r.print||console.log.bind(console),F=r.printErr||console.error.bind(console);Object.assign(r,h),h=null,r.arguments&&r.arguments,r.thisProgram&&r.thisProgram,r.quit&&(w=r.quit),r.wasmBinary&&(_=r.wasmBinary),"object"!=typeof WebAssembly&&$("no native wasm support detected");var P,A,M,R,T,z,C=!1;function j(){var e=S.buffer;r.HEAP8=A=new Int8Array(e),r.HEAP16=R=new Int16Array(e),r.HEAPU8=M=new Uint8Array(e),r.HEAPU16=new Uint16Array(e),r.HEAP32=T=new Int32Array(e),r.HEAPU32=z=new Uint32Array(e),r.HEAPF32=new Float32Array(e),r.HEAPF64=new Float64Array(e)}var L=[],N=[],O=[],U=[];var B=0,H=null;function I(e){B++,r.monitorRunDependencies&&r.monitorRunDependencies(B)}function q(e){if(B--,r.monitorRunDependencies&&r.monitorRunDependencies(B),0==B&&H){var t=H;H=null,t()}}function $(e){throw r.onAbort&&r.onAbort(e),F(e="Aborted("+e+")"),C=!0,P=1,e+=". Build with -sASSERTIONS for more info.",new WebAssembly.RuntimeError(e)}var W,X,G,K,Y=e=>e.startsWith("data:application/octet-stream;base64,"),V=e=>e.startsWith("file://");function J(e){if(e==W&&_)return new Uint8Array(_);if(p)return p(e);throw"both async and sync fetching of the wasm failed"}function Z(e,r,t){return function(e){if(!_&&(v||g)){if("function"==typeof fetch&&!V(e))return fetch(e,{credentials:"same-origin"}).then((r=>{if(!r.ok)throw"failed to load wasm binary file at '"+e+"'";return r.arrayBuffer()})).catch((()=>J(e)));if(m)return new Promise(((r,t)=>{m(e,(e=>r(new Uint8Array(e))),t)}))}return Promise.resolve().then((()=>J(e)))}(e).then((e=>WebAssembly.instantiate(e,r))).then((e=>e)).then(t,(e=>{F(`failed to asynchronously prepare wasm: ${e}`),$(e)}))}function Q(e){this.name="ExitStatus",this.message=`Program terminated with exit(${e})`,this.status=e}Y(W="swiftlatexdvipdfm.wasm")||(X=W,W=r.locateFile?r.locateFile(X,E):E+X);var ee=e=>{for(;e.length>0;)e.shift()(r)},re=r.noExitRuntime||!0,te="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,ne=(e,r,t)=>{for(var n=r+t,o=r;e[o]&&!(o>=n);)++o;if(o-r>16&&e.buffer&&te)return te.decode(e.subarray(r,o));for(var a="";r>10,56320|1023&u)}}else a+=String.fromCharCode((31&i)<<6|s)}else a+=String.fromCharCode(i)}return a},oe=(e,r)=>e?ne(M,e,r):"",ae={isAbs:e=>"/"===e.charAt(0),splitPath:e=>/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1),normalizeArray:(e,r)=>{for(var t=0,n=e.length-1;n>=0;n--){var o=e[n];"."===o?e.splice(n,1):".."===o?(e.splice(n,1),t++):t&&(e.splice(n,1),t--)}if(r)for(;t;t--)e.unshift("..");return e},normalize:e=>{var r=ae.isAbs(e),t="/"===e.substr(-1);return(e=ae.normalizeArray(e.split("/").filter((e=>!!e)),!r).join("/"))||r||(e="."),e&&t&&(e+="/"),(r?"/":"")+e},dirname:e=>{var r=ae.splitPath(e),t=r[0],n=r[1];return t||n?(n&&(n=n.substr(0,n.length-1)),t+n):"."},basename:e=>{if("/"===e)return"/";var r=(e=(e=ae.normalize(e)).replace(/\/$/,"")).lastIndexOf("/");return-1===r?e:e.substr(r+1)},join:function(){var e=Array.prototype.slice.call(arguments);return ae.normalize(e.join("/"))},join2:(e,r)=>ae.normalize(e+"/"+r)},ie=e=>(ie=(()=>{if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues)return e=>crypto.getRandomValues(e);if(y)try{var e=require("crypto");if(e.randomFillSync)return r=>e.randomFillSync(r);var r=e.randomBytes;return e=>(e.set(r(e.byteLength)),e)}catch(e){}$("initRandomDevice")})())(e),se={resolve:function(){for(var e="",r=!1,t=arguments.length-1;t>=-1&&!r;t--){var n=t>=0?arguments[t]:ge.cwd();if("string"!=typeof n)throw new TypeError("Arguments to path.resolve must be strings");if(!n)return"";e=n+"/"+e,r=ae.isAbs(n)}return(r?"/":"")+(e=ae.normalizeArray(e.split("/").filter((e=>!!e)),!r).join("/"))||"."},relative:(e,r)=>{function t(e){for(var r=0;r=0&&""===e[t];t--);return r>t?[]:e.slice(r,t-r+1)}e=se.resolve(e).substr(1),r=se.resolve(r).substr(1);for(var n=t(e.split("/")),o=t(r.split("/")),a=Math.min(n.length,o.length),i=a,s=0;s{for(var r=0,t=0;t=55296&&n<=57343?(r+=4,++t):r+=3}return r},ce=(e,r,t,n)=>{if(!(n>0))return 0;for(var o=t,a=t+n-1,i=0;i=55296&&s<=57343)s=65536+((1023&s)<<10)|1023&e.charCodeAt(++i);if(s<=127){if(t>=a)break;r[t++]=s}else if(s<=2047){if(t+1>=a)break;r[t++]=192|s>>6,r[t++]=128|63&s}else if(s<=65535){if(t+2>=a)break;r[t++]=224|s>>12,r[t++]=128|s>>6&63,r[t++]=128|63&s}else{if(t+3>=a)break;r[t++]=240|s>>18,r[t++]=128|s>>12&63,r[t++]=128|s>>6&63,r[t++]=128|63&s}}return r[t]=0,t-o};function de(e,r,t){var n=t>0?t:ue(e)+1,o=new Array(n),a=ce(e,o,0,o.length);return r&&(o.length=a),o}var fe={ttys:[],init(){},shutdown(){},register(e,r){fe.ttys[e]={input:[],output:[],ops:r},ge.registerDevice(e,fe.stream_ops)},stream_ops:{open(e){var r=fe.ttys[e.node.rdev];if(!r)throw new ge.ErrnoError(43);e.tty=r,e.seekable=!1},close(e){e.tty.ops.fsync(e.tty)},fsync(e){e.tty.ops.fsync(e.tty)},read(e,r,t,n,o){if(!e.tty||!e.tty.ops.get_char)throw new ge.ErrnoError(60);for(var a=0,i=0;i(()=>{if(!le.length){var e=null;if(y){var r=Buffer.alloc(256),t=0,n=process.stdin.fd;try{t=b.readSync(n,r)}catch(e){if(!e.toString().includes("EOF"))throw e;t=0}e=t>0?r.slice(0,t).toString("utf-8"):null}else"undefined"!=typeof window&&"function"==typeof window.prompt?null!==(e=window.prompt("Input: "))&&(e+="\n"):"function"==typeof readline&&null!==(e=readline())&&(e+="\n");if(!e)return null;le=de(e,!0)}return le.shift()})(),put_char(e,r){null===r||10===r?(D(ne(e.output,0)),e.output=[]):0!=r&&e.output.push(r)},fsync(e){e.output&&e.output.length>0&&(D(ne(e.output,0)),e.output=[])},ioctl_tcgets:e=>({c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}),ioctl_tcsets:(e,r,t)=>0,ioctl_tiocgwinsz:e=>[24,80]},default_tty1_ops:{put_char(e,r){null===r||10===r?(F(ne(e.output,0)),e.output=[]):0!=r&&e.output.push(r)},fsync(e){e.output&&e.output.length>0&&(F(ne(e.output,0)),e.output=[])}}},me=e=>{$()},pe={ops_table:null,mount:e=>pe.createNode(null,"/",16895,0),createNode(e,r,t,n){if(ge.isBlkdev(t)||ge.isFIFO(t))throw new ge.ErrnoError(63);pe.ops_table||(pe.ops_table={dir:{node:{getattr:pe.node_ops.getattr,setattr:pe.node_ops.setattr,lookup:pe.node_ops.lookup,mknod:pe.node_ops.mknod,rename:pe.node_ops.rename,unlink:pe.node_ops.unlink,rmdir:pe.node_ops.rmdir,readdir:pe.node_ops.readdir,symlink:pe.node_ops.symlink},stream:{llseek:pe.stream_ops.llseek}},file:{node:{getattr:pe.node_ops.getattr,setattr:pe.node_ops.setattr},stream:{llseek:pe.stream_ops.llseek,read:pe.stream_ops.read,write:pe.stream_ops.write,allocate:pe.stream_ops.allocate,mmap:pe.stream_ops.mmap,msync:pe.stream_ops.msync}},link:{node:{getattr:pe.node_ops.getattr,setattr:pe.node_ops.setattr,readlink:pe.node_ops.readlink},stream:{}},chrdev:{node:{getattr:pe.node_ops.getattr,setattr:pe.node_ops.setattr},stream:ge.chrdev_stream_ops}});var o=ge.createNode(e,r,t,n);return ge.isDir(o.mode)?(o.node_ops=pe.ops_table.dir.node,o.stream_ops=pe.ops_table.dir.stream,o.contents={}):ge.isFile(o.mode)?(o.node_ops=pe.ops_table.file.node,o.stream_ops=pe.ops_table.file.stream,o.usedBytes=0,o.contents=null):ge.isLink(o.mode)?(o.node_ops=pe.ops_table.link.node,o.stream_ops=pe.ops_table.link.stream):ge.isChrdev(o.mode)&&(o.node_ops=pe.ops_table.chrdev.node,o.stream_ops=pe.ops_table.chrdev.stream),o.timestamp=Date.now(),e&&(e.contents[r]=o,e.timestamp=o.timestamp),o},getFileDataAsTypedArray:e=>e.contents?e.contents.subarray?e.contents.subarray(0,e.usedBytes):new Uint8Array(e.contents):new Uint8Array(0),expandFileStorage(e,r){var t=e.contents?e.contents.length:0;if(!(t>=r)){r=Math.max(r,t*(t<1048576?2:1.125)>>>0),0!=t&&(r=Math.max(r,256));var n=e.contents;e.contents=new Uint8Array(r),e.usedBytes>0&&e.contents.set(n.subarray(0,e.usedBytes),0)}},resizeFileStorage(e,r){if(e.usedBytes!=r)if(0==r)e.contents=null,e.usedBytes=0;else{var t=e.contents;e.contents=new Uint8Array(r),t&&e.contents.set(t.subarray(0,Math.min(r,e.usedBytes))),e.usedBytes=r}},node_ops:{getattr(e){var r={};return r.dev=ge.isChrdev(e.mode)?e.id:1,r.ino=e.id,r.mode=e.mode,r.nlink=1,r.uid=0,r.gid=0,r.rdev=e.rdev,ge.isDir(e.mode)?r.size=4096:ge.isFile(e.mode)?r.size=e.usedBytes:ge.isLink(e.mode)?r.size=e.link.length:r.size=0,r.atime=new Date(e.timestamp),r.mtime=new Date(e.timestamp),r.ctime=new Date(e.timestamp),r.blksize=4096,r.blocks=Math.ceil(r.size/r.blksize),r},setattr(e,r){void 0!==r.mode&&(e.mode=r.mode),void 0!==r.timestamp&&(e.timestamp=r.timestamp),void 0!==r.size&&pe.resizeFileStorage(e,r.size)},lookup(e,r){throw ge.genericErrors[44]},mknod:(e,r,t,n)=>pe.createNode(e,r,t,n),rename(e,r,t){if(ge.isDir(e.mode)){var n;try{n=ge.lookupNode(r,t)}catch(e){}if(n)for(var o in n.contents)throw new ge.ErrnoError(55)}delete e.parent.contents[e.name],e.parent.timestamp=Date.now(),e.name=t,r.contents[t]=e,r.timestamp=e.parent.timestamp,e.parent=r},unlink(e,r){delete e.contents[r],e.timestamp=Date.now()},rmdir(e,r){var t=ge.lookupNode(e,r);for(var n in t.contents)throw new ge.ErrnoError(55);delete e.contents[r],e.timestamp=Date.now()},readdir(e){var r=[".",".."];for(var t in e.contents)e.contents.hasOwnProperty(t)&&r.push(t);return r},symlink(e,r,t){var n=pe.createNode(e,r,41471,0);return n.link=t,n},readlink(e){if(!ge.isLink(e.mode))throw new ge.ErrnoError(28);return e.link}},stream_ops:{read(e,r,t,n,o){var a=e.node.contents;if(o>=e.node.usedBytes)return 0;var i=Math.min(e.node.usedBytes-o,n);if(i>8&&a.subarray)r.set(a.subarray(o,o+i),t);else for(var s=0;s0||t+r(pe.stream_ops.write(e,r,0,n,t,!1),0)}},he=(e,r,t,n)=>{var o=n?"":`al ${e}`;m(e,(t=>{var n;n=`Loading data file "${e}" failed (no arrayBuffer).`,t||$(n),r(new Uint8Array(t)),o&&q()}),(r=>{if(!t)throw`Loading data file "${e}" failed.`;t()})),o&&I()},we=r.preloadPlugins||[],ve=(e,r)=>{var t=0;return e&&(t|=365),r&&(t|=146),t},ge={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath(e,r={}){if(!(e=se.resolve(e)))return{path:"",node:null};if((r=Object.assign({follow_mount:!0,recurse_count:0},r)).recurse_count>8)throw new ge.ErrnoError(32);for(var t=e.split("/").filter((e=>!!e)),n=ge.root,o="/",a=0;a40)throw new ge.ErrnoError(32)}}return{path:o,node:n}},getPath(e){for(var r;;){if(ge.isRoot(e)){var t=e.mount.mountpoint;return r?"/"!==t[t.length-1]?`${t}/${r}`:t+r:t}r=r?`${e.name}/${r}`:e.name,e=e.parent}},hashName(e,r){for(var t=0,n=0;n>>0)%ge.nameTable.length},hashAddNode(e){var r=ge.hashName(e.parent.id,e.name);e.name_next=ge.nameTable[r],ge.nameTable[r]=e},hashRemoveNode(e){var r=ge.hashName(e.parent.id,e.name);if(ge.nameTable[r]===e)ge.nameTable[r]=e.name_next;else for(var t=ge.nameTable[r];t;){if(t.name_next===e){t.name_next=e.name_next;break}t=t.name_next}},lookupNode(e,r){var t=ge.mayLookup(e);if(t)throw new ge.ErrnoError(t,e);for(var n=ge.hashName(e.id,r),o=ge.nameTable[n];o;o=o.name_next){var a=o.name;if(o.parent.id===e.id&&a===r)return o}return ge.lookup(e,r)},createNode(e,r,t,n){var o=new ge.FSNode(e,r,t,n);return ge.hashAddNode(o),o},destroyNode(e){ge.hashRemoveNode(e)},isRoot:e=>e===e.parent,isMountpoint:e=>!!e.mounted,isFile:e=>32768==(61440&e),isDir:e=>16384==(61440&e),isLink:e=>40960==(61440&e),isChrdev:e=>8192==(61440&e),isBlkdev:e=>24576==(61440&e),isFIFO:e=>4096==(61440&e),isSocket:e=>49152==(49152&e),flagsToPermissionString(e){var r=["r","w","rw"][3&e];return 512&e&&(r+="w"),r},nodePermissions:(e,r)=>ge.ignorePermissions||(!r.includes("r")||292&e.mode)&&(!r.includes("w")||146&e.mode)&&(!r.includes("x")||73&e.mode)?0:2,mayLookup(e){var r=ge.nodePermissions(e,"x");return r||(e.node_ops.lookup?0:2)},mayCreate(e,r){try{ge.lookupNode(e,r);return 20}catch(e){}return ge.nodePermissions(e,"wx")},mayDelete(e,r,t){var n;try{n=ge.lookupNode(e,r)}catch(e){return e.errno}var o=ge.nodePermissions(e,"wx");if(o)return o;if(t){if(!ge.isDir(n.mode))return 54;if(ge.isRoot(n)||ge.getPath(n)===ge.cwd())return 10}else if(ge.isDir(n.mode))return 31;return 0},mayOpen:(e,r)=>e?ge.isLink(e.mode)?32:ge.isDir(e.mode)&&("r"!==ge.flagsToPermissionString(r)||512&r)?31:ge.nodePermissions(e,ge.flagsToPermissionString(r)):44,MAX_OPEN_FDS:4096,nextfd(){for(var e=0;e<=ge.MAX_OPEN_FDS;e++)if(!ge.streams[e])return e;throw new ge.ErrnoError(33)},getStreamChecked(e){var r=ge.getStream(e);if(!r)throw new ge.ErrnoError(8);return r},getStream:e=>ge.streams[e],createStream:(e,r=-1)=>(ge.FSStream||(ge.FSStream=function(){this.shared={}},ge.FSStream.prototype={},Object.defineProperties(ge.FSStream.prototype,{object:{get(){return this.node},set(e){this.node=e}},isRead:{get(){return 1!=(2097155&this.flags)}},isWrite:{get(){return 0!=(2097155&this.flags)}},isAppend:{get(){return 1024&this.flags}},flags:{get(){return this.shared.flags},set(e){this.shared.flags=e}},position:{get(){return this.shared.position},set(e){this.shared.position=e}}})),e=Object.assign(new ge.FSStream,e),-1==r&&(r=ge.nextfd()),e.fd=r,ge.streams[r]=e,e),closeStream(e){ge.streams[e]=null},chrdev_stream_ops:{open(e){var r=ge.getDevice(e.node.rdev);e.stream_ops=r.stream_ops,e.stream_ops.open&&e.stream_ops.open(e)},llseek(){throw new ge.ErrnoError(70)}},major:e=>e>>8,minor:e=>255&e,makedev:(e,r)=>e<<8|r,registerDevice(e,r){ge.devices[e]={stream_ops:r}},getDevice:e=>ge.devices[e],getMounts(e){for(var r=[],t=[e];t.length;){var n=t.pop();r.push(n),t.push.apply(t,n.mounts)}return r},syncfs(e,r){"function"==typeof e&&(r=e,e=!1),ge.syncFSRequests++,ge.syncFSRequests>1&&F(`warning: ${ge.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var t=ge.getMounts(ge.root.mount),n=0;function o(e){return ge.syncFSRequests--,r(e)}function a(e){if(e)return a.errored?void 0:(a.errored=!0,o(e));++n>=t.length&&o(null)}t.forEach((r=>{if(!r.type.syncfs)return a(null);r.type.syncfs(r,e,a)}))},mount(e,r,t){var n,o="/"===t,a=!t;if(o&&ge.root)throw new ge.ErrnoError(10);if(!o&&!a){var i=ge.lookupPath(t,{follow_mount:!1});if(t=i.path,n=i.node,ge.isMountpoint(n))throw new ge.ErrnoError(10);if(!ge.isDir(n.mode))throw new ge.ErrnoError(54)}var s={type:e,opts:r,mountpoint:t,mounts:[]},l=e.mount(s);return l.mount=s,s.root=l,o?ge.root=l:n&&(n.mounted=s,n.mount&&n.mount.mounts.push(s)),l},unmount(e){var r=ge.lookupPath(e,{follow_mount:!1});if(!ge.isMountpoint(r.node))throw new ge.ErrnoError(28);var t=r.node,n=t.mounted,o=ge.getMounts(n);Object.keys(ge.nameTable).forEach((e=>{for(var r=ge.nameTable[e];r;){var t=r.name_next;o.includes(r.mount)&&ge.destroyNode(r),r=t}})),t.mounted=null;var a=t.mount.mounts.indexOf(n);t.mount.mounts.splice(a,1)},lookup:(e,r)=>e.node_ops.lookup(e,r),mknod(e,r,t){var n=ge.lookupPath(e,{parent:!0}).node,o=ae.basename(e);if(!o||"."===o||".."===o)throw new ge.ErrnoError(28);var a=ge.mayCreate(n,o);if(a)throw new ge.ErrnoError(a);if(!n.node_ops.mknod)throw new ge.ErrnoError(63);return n.node_ops.mknod(n,o,r,t)},create:(e,r)=>(r=void 0!==r?r:438,r&=4095,r|=32768,ge.mknod(e,r,0)),mkdir:(e,r)=>(r=void 0!==r?r:511,r&=1023,r|=16384,ge.mknod(e,r,0)),mkdirTree(e,r){for(var t=e.split("/"),n="",o=0;o(void 0===t&&(t=r,r=438),r|=8192,ge.mknod(e,r,t)),symlink(e,r){if(!se.resolve(e))throw new ge.ErrnoError(44);var t=ge.lookupPath(r,{parent:!0}).node;if(!t)throw new ge.ErrnoError(44);var n=ae.basename(r),o=ge.mayCreate(t,n);if(o)throw new ge.ErrnoError(o);if(!t.node_ops.symlink)throw new ge.ErrnoError(63);return t.node_ops.symlink(t,n,e)},rename(e,r){var t,n,o=ae.dirname(e),a=ae.dirname(r),i=ae.basename(e),s=ae.basename(r);if(t=ge.lookupPath(e,{parent:!0}).node,n=ge.lookupPath(r,{parent:!0}).node,!t||!n)throw new ge.ErrnoError(44);if(t.mount!==n.mount)throw new ge.ErrnoError(75);var l,u=ge.lookupNode(t,i),c=se.relative(e,a);if("."!==c.charAt(0))throw new ge.ErrnoError(28);if("."!==(c=se.relative(r,o)).charAt(0))throw new ge.ErrnoError(55);try{l=ge.lookupNode(n,s)}catch(e){}if(u!==l){var d=ge.isDir(u.mode),f=ge.mayDelete(t,i,d);if(f)throw new ge.ErrnoError(f);if(f=l?ge.mayDelete(n,s,d):ge.mayCreate(n,s))throw new ge.ErrnoError(f);if(!t.node_ops.rename)throw new ge.ErrnoError(63);if(ge.isMountpoint(u)||l&&ge.isMountpoint(l))throw new ge.ErrnoError(10);if(n!==t&&(f=ge.nodePermissions(t,"w")))throw new ge.ErrnoError(f);ge.hashRemoveNode(u);try{t.node_ops.rename(u,n,s)}catch(e){throw e}finally{ge.hashAddNode(u)}}},rmdir(e){var r=ge.lookupPath(e,{parent:!0}).node,t=ae.basename(e),n=ge.lookupNode(r,t),o=ge.mayDelete(r,t,!0);if(o)throw new ge.ErrnoError(o);if(!r.node_ops.rmdir)throw new ge.ErrnoError(63);if(ge.isMountpoint(n))throw new ge.ErrnoError(10);r.node_ops.rmdir(r,t),ge.destroyNode(n)},readdir(e){var r=ge.lookupPath(e,{follow:!0}).node;if(!r.node_ops.readdir)throw new ge.ErrnoError(54);return r.node_ops.readdir(r)},unlink(e){var r=ge.lookupPath(e,{parent:!0}).node;if(!r)throw new ge.ErrnoError(44);var t=ae.basename(e),n=ge.lookupNode(r,t),o=ge.mayDelete(r,t,!1);if(o)throw new ge.ErrnoError(o);if(!r.node_ops.unlink)throw new ge.ErrnoError(63);if(ge.isMountpoint(n))throw new ge.ErrnoError(10);r.node_ops.unlink(r,t),ge.destroyNode(n)},readlink(e){var r=ge.lookupPath(e).node;if(!r)throw new ge.ErrnoError(44);if(!r.node_ops.readlink)throw new ge.ErrnoError(28);return se.resolve(ge.getPath(r.parent),r.node_ops.readlink(r))},stat(e,r){var t=ge.lookupPath(e,{follow:!r}).node;if(!t)throw new ge.ErrnoError(44);if(!t.node_ops.getattr)throw new ge.ErrnoError(63);return t.node_ops.getattr(t)},lstat:e=>ge.stat(e,!0),chmod(e,r,t){var n;"string"==typeof e?n=ge.lookupPath(e,{follow:!t}).node:n=e;if(!n.node_ops.setattr)throw new ge.ErrnoError(63);n.node_ops.setattr(n,{mode:4095&r|-4096&n.mode,timestamp:Date.now()})},lchmod(e,r){ge.chmod(e,r,!0)},fchmod(e,r){var t=ge.getStreamChecked(e);ge.chmod(t.node,r)},chown(e,r,t,n){var o;"string"==typeof e?o=ge.lookupPath(e,{follow:!n}).node:o=e;if(!o.node_ops.setattr)throw new ge.ErrnoError(63);o.node_ops.setattr(o,{timestamp:Date.now()})},lchown(e,r,t){ge.chown(e,r,t,!0)},fchown(e,r,t){var n=ge.getStreamChecked(e);ge.chown(n.node,r,t)},truncate(e,r){if(r<0)throw new ge.ErrnoError(28);var t;"string"==typeof e?t=ge.lookupPath(e,{follow:!0}).node:t=e;if(!t.node_ops.setattr)throw new ge.ErrnoError(63);if(ge.isDir(t.mode))throw new ge.ErrnoError(31);if(!ge.isFile(t.mode))throw new ge.ErrnoError(28);var n=ge.nodePermissions(t,"w");if(n)throw new ge.ErrnoError(n);t.node_ops.setattr(t,{size:r,timestamp:Date.now()})},ftruncate(e,r){var t=ge.getStreamChecked(e);if(0==(2097155&t.flags))throw new ge.ErrnoError(28);ge.truncate(t.node,r)},utime(e,r,t){var n=ge.lookupPath(e,{follow:!0}).node;n.node_ops.setattr(n,{timestamp:Math.max(r,t)})},open(e,t,n){if(""===e)throw new ge.ErrnoError(44);var o;if(n=void 0===n?438:n,n=64&(t="string"==typeof t?(e=>{var r={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[e];if(void 0===r)throw new Error(`Unknown file open mode: ${e}`);return r})(t):t)?4095&n|32768:0,"object"==typeof e)o=e;else{e=ae.normalize(e);try{o=ge.lookupPath(e,{follow:!(131072&t)}).node}catch(e){}}var a=!1;if(64&t)if(o){if(128&t)throw new ge.ErrnoError(20)}else o=ge.mknod(e,n,0),a=!0;if(!o)throw new ge.ErrnoError(44);if(ge.isChrdev(o.mode)&&(t&=-513),65536&t&&!ge.isDir(o.mode))throw new ge.ErrnoError(54);if(!a){var i=ge.mayOpen(o,t);if(i)throw new ge.ErrnoError(i)}512&t&&!a&&ge.truncate(o,0),t&=-131713;var s=ge.createStream({node:o,path:ge.getPath(o),flags:t,seekable:!0,position:0,stream_ops:o.stream_ops,ungotten:[],error:!1});return s.stream_ops.open&&s.stream_ops.open(s),!r.logReadFiles||1&t||(ge.readFiles||(ge.readFiles={}),e in ge.readFiles||(ge.readFiles[e]=1)),s},close(e){if(ge.isClosed(e))throw new ge.ErrnoError(8);e.getdents&&(e.getdents=null);try{e.stream_ops.close&&e.stream_ops.close(e)}catch(e){throw e}finally{ge.closeStream(e.fd)}e.fd=null},isClosed:e=>null===e.fd,llseek(e,r,t){if(ge.isClosed(e))throw new ge.ErrnoError(8);if(!e.seekable||!e.stream_ops.llseek)throw new ge.ErrnoError(70);if(0!=t&&1!=t&&2!=t)throw new ge.ErrnoError(28);return e.position=e.stream_ops.llseek(e,r,t),e.ungotten=[],e.position},read(e,r,t,n,o){if(n<0||o<0)throw new ge.ErrnoError(28);if(ge.isClosed(e))throw new ge.ErrnoError(8);if(1==(2097155&e.flags))throw new ge.ErrnoError(8);if(ge.isDir(e.node.mode))throw new ge.ErrnoError(31);if(!e.stream_ops.read)throw new ge.ErrnoError(28);var a=void 0!==o;if(a){if(!e.seekable)throw new ge.ErrnoError(70)}else o=e.position;var i=e.stream_ops.read(e,r,t,n,o);return a||(e.position+=i),i},write(e,r,t,n,o,a){if(n<0||o<0)throw new ge.ErrnoError(28);if(ge.isClosed(e))throw new ge.ErrnoError(8);if(0==(2097155&e.flags))throw new ge.ErrnoError(8);if(ge.isDir(e.node.mode))throw new ge.ErrnoError(31);if(!e.stream_ops.write)throw new ge.ErrnoError(28);e.seekable&&1024&e.flags&&ge.llseek(e,0,2);var i=void 0!==o;if(i){if(!e.seekable)throw new ge.ErrnoError(70)}else o=e.position;var s=e.stream_ops.write(e,r,t,n,o,a);return i||(e.position+=s),s},allocate(e,r,t){if(ge.isClosed(e))throw new ge.ErrnoError(8);if(r<0||t<=0)throw new ge.ErrnoError(28);if(0==(2097155&e.flags))throw new ge.ErrnoError(8);if(!ge.isFile(e.node.mode)&&!ge.isDir(e.node.mode))throw new ge.ErrnoError(43);if(!e.stream_ops.allocate)throw new ge.ErrnoError(138);e.stream_ops.allocate(e,r,t)},mmap(e,r,t,n,o){if(0!=(2&n)&&0==(2&o)&&2!=(2097155&e.flags))throw new ge.ErrnoError(2);if(1==(2097155&e.flags))throw new ge.ErrnoError(2);if(!e.stream_ops.mmap)throw new ge.ErrnoError(43);return e.stream_ops.mmap(e,r,t,n,o)},msync:(e,r,t,n,o)=>e.stream_ops.msync?e.stream_ops.msync(e,r,t,n,o):0,munmap:e=>0,ioctl(e,r,t){if(!e.stream_ops.ioctl)throw new ge.ErrnoError(59);return e.stream_ops.ioctl(e,r,t)},readFile(e,r={}){if(r.flags=r.flags||0,r.encoding=r.encoding||"binary","utf8"!==r.encoding&&"binary"!==r.encoding)throw new Error(`Invalid encoding type "${r.encoding}"`);var t,n=ge.open(e,r.flags),o=ge.stat(e).size,a=new Uint8Array(o);return ge.read(n,a,0,o,0),"utf8"===r.encoding?t=ne(a,0):"binary"===r.encoding&&(t=a),ge.close(n),t},writeFile(e,r,t={}){t.flags=t.flags||577;var n=ge.open(e,t.flags,t.mode);if("string"==typeof r){var o=new Uint8Array(ue(r)+1),a=ce(r,o,0,o.length);ge.write(n,o,0,a,void 0,t.canOwn)}else{if(!ArrayBuffer.isView(r))throw new Error("Unsupported data type");ge.write(n,r,0,r.byteLength,void 0,t.canOwn)}ge.close(n)},cwd:()=>ge.currentPath,chdir(e){var r=ge.lookupPath(e,{follow:!0});if(null===r.node)throw new ge.ErrnoError(44);if(!ge.isDir(r.node.mode))throw new ge.ErrnoError(54);var t=ge.nodePermissions(r.node,"x");if(t)throw new ge.ErrnoError(t);ge.currentPath=r.path},createDefaultDirectories(){ge.mkdir("/tmp"),ge.mkdir("/home"),ge.mkdir("/home/web_user")},createDefaultDevices(){ge.mkdir("/dev"),ge.registerDevice(ge.makedev(1,3),{read:()=>0,write:(e,r,t,n,o)=>n}),ge.mkdev("/dev/null",ge.makedev(1,3)),fe.register(ge.makedev(5,0),fe.default_tty_ops),fe.register(ge.makedev(6,0),fe.default_tty1_ops),ge.mkdev("/dev/tty",ge.makedev(5,0)),ge.mkdev("/dev/tty1",ge.makedev(6,0));var e=new Uint8Array(1024),r=0,t=()=>(0===r&&(r=ie(e).byteLength),e[--r]);ge.createDevice("/dev","random",t),ge.createDevice("/dev","urandom",t),ge.mkdir("/dev/shm"),ge.mkdir("/dev/shm/tmp")},createSpecialDirectories(){ge.mkdir("/proc");var e=ge.mkdir("/proc/self");ge.mkdir("/proc/self/fd"),ge.mount({mount(){var r=ge.createNode(e,"fd",16895,73);return r.node_ops={lookup(e,r){var t=+r,n=ge.getStreamChecked(t),o={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>n.path}};return o.parent=o,o}},r}},{},"/proc/self/fd")},createStandardStreams(){r.stdin?ge.createDevice("/dev","stdin",r.stdin):ge.symlink("/dev/tty","/dev/stdin"),r.stdout?ge.createDevice("/dev","stdout",null,r.stdout):ge.symlink("/dev/tty","/dev/stdout"),r.stderr?ge.createDevice("/dev","stderr",null,r.stderr):ge.symlink("/dev/tty1","/dev/stderr"),ge.open("/dev/stdin",0),ge.open("/dev/stdout",1),ge.open("/dev/stderr",1)},ensureErrnoError(){ge.ErrnoError||(ge.ErrnoError=function(e,r){this.name="ErrnoError",this.node=r,this.setErrno=function(e){this.errno=e},this.setErrno(e),this.message="FS error"},ge.ErrnoError.prototype=new Error,ge.ErrnoError.prototype.constructor=ge.ErrnoError,[44].forEach((e=>{ge.genericErrors[e]=new ge.ErrnoError(e),ge.genericErrors[e].stack=""})))},staticInit(){ge.ensureErrnoError(),ge.nameTable=new Array(4096),ge.mount(pe,{},"/"),ge.createDefaultDirectories(),ge.createDefaultDevices(),ge.createSpecialDirectories(),ge.filesystems={MEMFS:pe}},init(e,t,n){ge.init.initialized=!0,ge.ensureErrnoError(),r.stdin=e||r.stdin,r.stdout=t||r.stdout,r.stderr=n||r.stderr,ge.createStandardStreams()},quit(){ge.init.initialized=!1;for(var e=0;ethis.length-1||e<0)){var r=e%this.chunkSize,t=e/this.chunkSize|0;return this.getter(t)[r]}},a.prototype.setDataGetter=function(e){this.getter=e},a.prototype.cacheLength=function(){var e=new XMLHttpRequest;if(e.open("HEAD",t,!1),e.send(null),!(e.status>=200&&e.status<300||304===e.status))throw new Error("Couldn't load "+t+". Status: "+e.status);var r,n=Number(e.getResponseHeader("Content-length")),o=(r=e.getResponseHeader("Accept-Ranges"))&&"bytes"===r,a=(r=e.getResponseHeader("Content-Encoding"))&&"gzip"===r,i=1048576;o||(i=n);var s=this;s.setDataGetter((e=>{var r=e*i,o=(e+1)*i-1;if(o=Math.min(o,n-1),void 0===s.chunks[e]&&(s.chunks[e]=((e,r)=>{if(e>r)throw new Error("invalid range ("+e+", "+r+") or no bytes requested!");if(r>n-1)throw new Error("only "+n+" bytes available! programmer error!");var o=new XMLHttpRequest;if(o.open("GET",t,!1),n!==i&&o.setRequestHeader("Range","bytes="+e+"-"+r),o.responseType="arraybuffer",o.overrideMimeType&&o.overrideMimeType("text/plain; charset=x-user-defined"),o.send(null),!(o.status>=200&&o.status<300||304===o.status))throw new Error("Couldn't load "+t+". Status: "+o.status);return void 0!==o.response?new Uint8Array(o.response||[]):de(o.responseText||"",!0)})(r,o)),void 0===s.chunks[e])throw new Error("doXHR failed!");return s.chunks[e]})),!a&&n||(i=n=1,n=this.getter(0).length,i=n,D("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=n,this._chunkSize=i,this.lengthKnown=!0},"undefined"!=typeof XMLHttpRequest){if(!g)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var i=new a;Object.defineProperties(i,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var s={isDevice:!1,contents:i}}else s={isDevice:!1,url:t};var l=ge.createFile(e,r,s,n,o);s.contents?l.contents=s.contents:s.url&&(l.contents=null,l.url=s.url),Object.defineProperties(l,{usedBytes:{get:function(){return this.contents.length}}});var u={};function c(e,r,t,n,o){var a=e.node.contents;if(o>=a.length)return 0;var i=Math.min(a.length-o,n);if(a.slice)for(var s=0;s{var r=l.stream_ops[e];u[e]=function(){return ge.forceLoadFile(l),r.apply(null,arguments)}})),u.read=(e,r,t,n,o)=>(ge.forceLoadFile(l),c(e,r,t,n,o)),u.mmap=(e,r,t,n,o)=>{ge.forceLoadFile(l);var a=me();if(!a)throw new ge.ErrnoError(48);return c(e,A,a,r,t),{ptr:a,allocated:!0}},l.stream_ops=u,l}},ye={DEFAULT_POLLMASK:5,calculateAt(e,r,t){if(ae.isAbs(r))return r;var n;-100===e?n=ge.cwd():n=ye.getStreamFromFD(e).path;if(0==r.length){if(!t)throw new ge.ErrnoError(44);return n}return ae.join2(n,r)},doStat(e,r,t){try{var n=e(r)}catch(e){if(e&&e.node&&ae.normalize(r)!==ae.normalize(ge.getPath(e.node)))return-54;throw e}T[t>>2]=n.dev,T[t+4>>2]=n.mode,z[t+8>>2]=n.nlink,T[t+12>>2]=n.uid,T[t+16>>2]=n.gid,T[t+20>>2]=n.rdev,K=[n.size>>>0,(G=n.size,+Math.abs(G)>=1?G>0?+Math.floor(G/4294967296)>>>0:~~+Math.ceil((G-+(~~G>>>0))/4294967296)>>>0:0)],T[t+24>>2]=K[0],T[t+28>>2]=K[1],T[t+32>>2]=4096,T[t+36>>2]=n.blocks;var o=n.atime.getTime(),a=n.mtime.getTime(),i=n.ctime.getTime();return K=[Math.floor(o/1e3)>>>0,(G=Math.floor(o/1e3),+Math.abs(G)>=1?G>0?+Math.floor(G/4294967296)>>>0:~~+Math.ceil((G-+(~~G>>>0))/4294967296)>>>0:0)],T[t+40>>2]=K[0],T[t+44>>2]=K[1],z[t+48>>2]=o%1e3*1e3,K=[Math.floor(a/1e3)>>>0,(G=Math.floor(a/1e3),+Math.abs(G)>=1?G>0?+Math.floor(G/4294967296)>>>0:~~+Math.ceil((G-+(~~G>>>0))/4294967296)>>>0:0)],T[t+56>>2]=K[0],T[t+60>>2]=K[1],z[t+64>>2]=a%1e3*1e3,K=[Math.floor(i/1e3)>>>0,(G=Math.floor(i/1e3),+Math.abs(G)>=1?G>0?+Math.floor(G/4294967296)>>>0:~~+Math.ceil((G-+(~~G>>>0))/4294967296)>>>0:0)],T[t+72>>2]=K[0],T[t+76>>2]=K[1],z[t+80>>2]=i%1e3*1e3,K=[n.ino>>>0,(G=n.ino,+Math.abs(G)>=1?G>0?+Math.floor(G/4294967296)>>>0:~~+Math.ceil((G-+(~~G>>>0))/4294967296)>>>0:0)],T[t+88>>2]=K[0],T[t+92>>2]=K[1],0},doMsync(e,r,t,n,o){if(!ge.isFile(r.node.mode))throw new ge.ErrnoError(43);if(2&n)return 0;var a=M.slice(e,e+t);ge.msync(r,a,o,t,n)},varargs:void 0,get(){var e=T[+ye.varargs>>2];return ye.varargs+=4,e},getp:()=>ye.get(),getStr:e=>oe(e),getStreamFromFD:e=>ge.getStreamChecked(e)};var Ee=(e,r)=>r+2097152>>>0<4194305-!!e?(e>>>0)+4294967296*r:NaN;var be=(e,r,t)=>ce(e,M,r,t),ke=e=>{var r=ue(e)+1,t=Oe(r);return t&&be(e,t,r),t},_e=e=>{var r=(e-S.buffer.byteLength+65535)/65536;try{return S.grow(r),j(),1}catch(e){}};var Se,De=e=>{P=e,re||(r.onExit&&r.onExit(e),C=!0),w(e,new Q(e))},Fe=(e,r)=>{P=e,De(e)},Pe=e=>{if(e instanceof Q||"unwind"==e)return P;w(1,e)},Ae=[],Me=e=>{var r=Ae[e];return r||(e>=Ae.length&&(Ae.length=e+1),Ae[e]=r=Se.get(e)),r},xe=e=>r["_"+e],Re=(e,r,t,n,o)=>{var a={string:e=>{var r=0;return null!=e&&0!==e&&(r=(e=>{var r=ue(e)+1,t=Xe(r);return be(e,t,r),t})(e)),r},array:e=>{var r,t,n=Xe(e.length);return r=e,t=n,A.set(r,t),n}};var i=xe(e),s=[],l=0;if(n)for(var u=0;u{var o=!t||t.every((e=>"number"===e||"boolean"===e));return"string"!==r&&o&&!n?xe(e):function(){return Re(e,r,t,arguments)}},ze=function(e,r,t,n){e||(e=this),this.parent=e,this.mount=e.mount,this.mounted=null,this.id=ge.nextInode++,this.name=r,this.mode=t,this.node_ops={},this.stream_ops={},this.rdev=n},Ce=365,je=146;Object.defineProperties(ze.prototype,{read:{get:function(){return(this.mode&Ce)===Ce},set:function(e){e?this.mode|=Ce:this.mode&=-366}},write:{get:function(){return(this.mode&je)===je},set:function(e){e?this.mode|=je:this.mode&=-147}},isFolder:{get:function(){return ge.isDir(this.mode)}},isDevice:{get:function(){return ge.isChrdev(this.mode)}}}),ge.FSNode=ze,ge.createPreloadedFile=(e,r,t,n,o,a,i,s,l,u)=>{var c=r?se.resolve(ae.join2(e,r)):e;function d(t){function d(t){u&&u(),s||((e,r,t,n,o,a)=>{ge.createDataFile(e,r,t,n,o,a)})(e,r,t,n,o,l),a&&a(),q()}((e,r,t,n)=>{"undefined"!=typeof Browser&&Browser.init();var o=!1;return we.forEach((a=>{o||a.canHandle(r)&&(a.handle(e,r,t,n),o=!0)})),o})(t,c,d,(()=>{i&&i(),q()}))||d(t)}I(),"string"==typeof t?he(t,(e=>d(e)),i):d(t)},ge.staticInit();var Le={a:(e,r,t,n)=>{$(`Assertion failed: ${oe(e)}, at: `+[r?oe(r):"unknown filename",t,n?oe(n):"unknown function"])},i:function(e,r,t,n){try{if(r=ye.getStr(r),r=ye.calculateAt(e,r),-8&t)return-28;var o=ge.lookupPath(r,{follow:!0}).node;if(!o)return-44;var a="";return 4&t&&(a+="r"),2&t&&(a+="w"),1&t&&(a+="x"),a&&ge.nodePermissions(o,a)?-2:0}catch(e){if(void 0===ge||"ErrnoError"!==e.name)throw e;return-e.errno}},d:function(e,r,t){ye.varargs=t;try{var n=ye.getStreamFromFD(e);switch(r){case 0:if((o=ye.get())<0)return-28;for(;ge.streams[o];)o++;return ge.createStream(n,o).fd;case 1:case 2:case 6:case 7:return 0;case 3:return n.flags;case 4:var o=ye.get();return n.flags|=o,0;case 5:o=ye.getp();return R[o+0>>1]=2,0;case 16:case 8:default:return-28;case 9:return a=28,T[Ie()>>2]=a,-1}}catch(e){if(void 0===ge||"ErrnoError"!==e.name)throw e;return-e.errno}var a},v:function(e,r){try{var t=ye.getStreamFromFD(e);return ye.doStat(ge.stat,t.path,r)}catch(e){if(void 0===ge||"ErrnoError"!==e.name)throw e;return-e.errno}},x:function(e,r,t){ye.varargs=t;try{var n=ye.getStreamFromFD(e);switch(r){case 21509:case 21510:case 21511:case 21512:case 21524:case 21515:return n.tty?0:-59;case 21505:if(!n.tty)return-59;if(n.tty.ops.ioctl_tcgets){var o=n.tty.ops.ioctl_tcgets(n),a=ye.getp();T[a>>2]=o.c_iflag||0,T[a+4>>2]=o.c_oflag||0,T[a+8>>2]=o.c_cflag||0,T[a+12>>2]=o.c_lflag||0;for(var i=0;i<32;i++)A[a+i+17>>0]=o.c_cc[i]||0;return 0}return 0;case 21506:case 21507:case 21508:if(!n.tty)return-59;if(n.tty.ops.ioctl_tcsets){a=ye.getp();var s=T[a>>2],l=T[a+4>>2],u=T[a+8>>2],c=T[a+12>>2],d=[];for(i=0;i<32;i++)d.push(A[a+i+17>>0]);return n.tty.ops.ioctl_tcsets(n.tty,r,{c_iflag:s,c_oflag:l,c_cflag:u,c_lflag:c,c_cc:d})}return 0;case 21519:if(!n.tty)return-59;a=ye.getp();return T[a>>2]=0,0;case 21520:return n.tty?-28:-59;case 21531:a=ye.getp();return ge.ioctl(n,r,a);case 21523:if(!n.tty)return-59;if(n.tty.ops.ioctl_tiocgwinsz){var f=n.tty.ops.ioctl_tiocgwinsz(n.tty);a=ye.getp();R[a>>1]=f[0],R[a+2>>1]=f[1]}return 0;default:return-28}}catch(e){if(void 0===ge||"ErrnoError"!==e.name)throw e;return-e.errno}},t:function(e,r,t,n){try{r=ye.getStr(r);var o=256&n,a=4096&n;return n&=-6401,r=ye.calculateAt(e,r,a),ye.doStat(o?ge.lstat:ge.stat,r,t)}catch(e){if(void 0===ge||"ErrnoError"!==e.name)throw e;return-e.errno}},f:function(e,r,t,n){ye.varargs=n;try{r=ye.getStr(r),r=ye.calculateAt(e,r);var o=n?ye.get():0;return ge.open(r,t,o).fd}catch(e){if(void 0===ge||"ErrnoError"!==e.name)throw e;return-e.errno}},r:function(e){try{return e=ye.getStr(e),ge.rmdir(e),0}catch(e){if(void 0===ge||"ErrnoError"!==e.name)throw e;return-e.errno}},u:function(e,r){try{return e=ye.getStr(e),ye.doStat(ge.stat,e,r)}catch(e){if(void 0===ge||"ErrnoError"!==e.name)throw e;return-e.errno}},s:function(e,r,t){try{return r=ye.getStr(r),r=ye.calculateAt(e,r),0===t?ge.unlink(r):512===t?ge.rmdir(r):$("Invalid flags passed to unlinkat"),0}catch(e){if(void 0===ge||"ErrnoError"!==e.name)throw e;return-e.errno}},o:()=>{throw 1/0},l:function(e,r,t){var n=Ee(e,r),o=new Date(1e3*n);T[t>>2]=o.getUTCSeconds(),T[t+4>>2]=o.getUTCMinutes(),T[t+8>>2]=o.getUTCHours(),T[t+12>>2]=o.getUTCDate(),T[t+16>>2]=o.getUTCMonth(),T[t+20>>2]=o.getUTCFullYear()-1900,T[t+24>>2]=o.getUTCDay();var a=Date.UTC(o.getUTCFullYear(),0,1,0,0,0,0),i=(o.getTime()-a)/864e5|0;T[t+28>>2]=i},q:(e,r,t)=>{var n=(new Date).getFullYear(),o=new Date(n,0,1),a=new Date(n,6,1),i=o.getTimezoneOffset(),s=a.getTimezoneOffset(),l=Math.max(i,s);function u(e){var r=e.toTimeString().match(/\(([A-Za-z ]+)\)$/);return r?r[1]:"GMT"}z[e>>2]=60*l,T[r>>2]=Number(i!=s);var c=u(o),d=u(a),f=ke(c),m=ke(d);s>2]=f,z[t+4>>2]=m):(z[t>>2]=m,z[t+4>>2]=f)},j:()=>{$("")},g:()=>Date.now(),h:(e,r,t)=>M.copyWithin(e,r,r+t),p:e=>{var r=M.length,t=2147483648;if((e>>>=0)>t)return!1;for(var n,o,a=1;a<=4;a*=2){var i=r*(1+.2/a);i=Math.min(i,e+100663296);var s=Math.min(t,(n=Math.max(e,i))+((o=65536)-n%o)%o);if(_e(s))return!0}return!1},b:function(e){try{var r=ye.getStreamFromFD(e);return ge.close(r),0}catch(e){if(void 0===ge||"ErrnoError"!==e.name)throw e;return e.errno}},w:function(e,r,t,n){try{var o=((e,r,t,n)=>{for(var o=0,a=0;a>2],s=z[r+4>>2];r+=8;var l=ge.read(e,A,i,s,n);if(l<0)return-1;if(o+=l,l>2]=o,0}catch(e){if(void 0===ge||"ErrnoError"!==e.name)throw e;return e.errno}},m:function(e,r,t,n,o){var a=Ee(r,t);try{if(isNaN(a))return 61;var i=ye.getStreamFromFD(e);return ge.llseek(i,a,n),K=[i.position>>>0,(G=i.position,+Math.abs(G)>=1?G>0?+Math.floor(G/4294967296)>>>0:~~+Math.ceil((G-+(~~G>>>0))/4294967296)>>>0:0)],T[o>>2]=K[0],T[o+4>>2]=K[1],i.getdents&&0===a&&0===n&&(i.getdents=null),0}catch(e){if(void 0===ge||"ErrnoError"!==e.name)throw e;return e.errno}},c:function(e,r,t,n){try{var o=((e,r,t,n)=>{for(var o=0,a=0;a>2],s=z[r+4>>2];r+=8;var l=ge.write(e,A,i,s,n);if(l<0)return-1;o+=l,void 0!==n&&(n+=l)}return o})(ye.getStreamFromFD(e),r,t);return z[n>>2]=o,0}catch(e){if(void 0===ge||"ErrnoError"!==e.name)throw e;return e.errno}},e:function(e,r,t){var n=$e();try{return Me(e)(r,t)}catch(e){if(We(n),e!==e+0)throw e;qe(1,0)}},n:function(e,r,t,n,o,a,i,s,l,u,c,d){var f=$e();try{return Ge(e,r,t,n,o,a,i,s,l,u,c,d)}catch(e){if(We(f),e!==e+0)throw e;qe(1,0)}},k:function(e,r,t){var n=$e();try{Me(e)(r,t)}catch(e){if(We(n),e!==e+0)throw e;qe(1,0)}},y:function(e,r,t){return function(e,r){let t=oe(e);if(t.startsWith("/tex/")&&(t=t.substr(5)),t.includes("/"))return 0;const n=r+"/"+t;if(n in c)return 0;if(n in d)return s(de(d[n]));const o=self.texlive_endpoint+n;let i=new XMLHttpRequest;i.open("GET",o,!1),i.timeout=15e4,i.responseType="arraybuffer",console.log("Start downloading texlive file "+o);try{i.send()}catch(e){return console.log("TexLive Download Failed "+o),0}if(200===i.status){let e=i.response;const r=i.getResponseHeader("fileid"),t=a+"/"+r;return ge.writeFile(t,new Uint8Array(e)),d[n]=t,s(de(t))}return 301===i.status?(console.log("TexLive File not exists "+o),c[n]=1,0):0}(e,r)}},Ne=function(){var e,t,n,o={a:Le};function a(e,r){var t;return Ne=e.exports,S=Ne.z,j(),Se=Ne.C,t=Ne.A,N.unshift(t),q(),Ne}if(I(),r.instantiateWasm)try{return r.instantiateWasm(o,a)}catch(e){return F(`Module.instantiateWasm callback failed with error: ${e}`),!1}return e=W,t=o,n=function(e){a(e.instance)},_||"function"!=typeof WebAssembly.instantiateStreaming||Y(e)||V(e)||y||"function"!=typeof fetch?Z(e,t,n):fetch(e,{credentials:"same-origin"}).then((r=>WebAssembly.instantiateStreaming(r,t).then(n,(function(r){return F(`wasm streaming compile failed: ${r}`),F("falling back to ArrayBuffer instantiation"),Z(e,t,n)})))),{}}(),Oe=e=>(Oe=Ne.B)(e),Ue=r._compilePDF=()=>(Ue=r._compilePDF=Ne.D)();r._setMainEntry=e=>(r._setMainEntry=Ne.E)(e);var Be,He=r._main=(e,t)=>(He=r._main=Ne.F)(e,t),Ie=()=>(Ie=Ne.G)(),qe=(e,r)=>(qe=Ne.H)(e,r),$e=()=>($e=Ne.I)(),We=e=>(We=Ne.J)(e),Xe=e=>(Xe=Ne.K)(e),Ge=r.dynCall_iiiiiiiiiij=(e,t,n,o,a,i,s,l,u,c,d,f)=>(Ge=r.dynCall_iiiiiiiiiij=Ne.L)(e,t,n,o,a,i,s,l,u,c,d,f);function Ke(){function e(){Be||(Be=!0,r.calledRun=!0,C||(r.noFSInit||ge.init.initialized||ge.init(),ge.ignorePermissions=!1,ee(N),ee(O),r.onRuntimeInitialized&&r.onRuntimeInitialized(),Ye&&function(){var e=He;try{var r=e(0,0);return Fe(r,!0),r}catch(e){return Pe(e)}}(),function(){if(r.postRun)for("function"==typeof r.postRun&&(r.postRun=[r.postRun]);r.postRun.length;)e=r.postRun.shift(),U.unshift(e);var e;ee(U)}()))}B>0||(!function(){if(r.preRun)for("function"==typeof r.preRun&&(r.preRun=[r.preRun]);r.preRun.length;)e=r.preRun.shift(),L.unshift(e);var e;ee(L)}(),B>0||(r.setStatus?(r.setStatus("Running..."),setTimeout((function(){setTimeout((function(){r.setStatus("")}),1),e()}),1)):e()))}if(r.cwrap=Te,H=function e(){Be||Ke(),Be||(H=e)},r.preInit)for("function"==typeof r.preInit&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();var Ye=!0;r.noInitialRun&&(Ye=!1),Ke()}(s),a(s.exports)})); diff --git a/public/swiftlatexdvipdfm.wasm b/public/swiftlatexdvipdfm.wasm new file mode 100644 index 00000000..32e5ae90 Binary files /dev/null and b/public/swiftlatexdvipdfm.wasm differ diff --git a/public/swiftlatexpdftex.js b/public/swiftlatexpdftex.js new file mode 100644 index 00000000..8c171cba --- /dev/null +++ b/public/swiftlatexpdftex.js @@ -0,0 +1,6 @@ +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r(require("fs"),require("path")):"function"==typeof define&&define.amd?define(["fs","path"],r):((e="undefined"!=typeof globalThis?globalThis:e||self)["native/pdftex"]=e["native/pdftex"]||{},e["native/pdftex"]["wasm/swiftlatexpdftex"]=e["native/pdftex"]["wasm/swiftlatexpdftex"]||{},e["native/pdftex"]["wasm/swiftlatexpdftex"].js=r(e.require$$1,e.require$$2))}(this,(function(e,r){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=t(e),o=t(r);function a(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function i(e){if(e.__esModule)return e;var r=e.default;if("function"==typeof r){var t=function e(){return this instanceof e?Reflect.construct(r,arguments,this.constructor):r.apply(this,arguments)};t.prototype=r.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(e).forEach((function(r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})})),t}var s={exports:{}}; +/** + * @license + * Copyright 2019 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */const l=Symbol("Comlink.proxy"),u=Symbol("Comlink.endpoint"),c=Symbol("Comlink.releaseProxy"),f=Symbol("Comlink.finalizer"),d=Symbol("Comlink.thrown"),m=e=>"object"==typeof e&&null!==e||"function"==typeof e,p=new Map([["proxy",{canHandle:e=>m(e)&&e[l],serialize(e){const{port1:r,port2:t}=new MessageChannel;return h(e,r),[t,[t]]},deserialize:e=>(e.start(),v(e))}],["throw",{canHandle:e=>m(e)&&d in e,serialize({value:e}){let r;return r=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[r,[]]},deserialize(e){if(e.isError)throw Object.assign(new Error(e.value.message),e.value);throw e.value}}]]);function h(e,r=globalThis,t=["*"]){r.addEventListener("message",(function n(o){if(!o||!o.data)return;if(!function(e,r){for(const t of e){if(r===t||"*"===t)return!0;if(t instanceof RegExp&&t.test(r))return!0}return!1}(t,o.origin))return void console.warn(`Invalid origin '${o.origin}' for comlink proxy`);const{id:a,type:i,path:s}=Object.assign({path:[]},o.data),l=(o.data.argumentList||[]).map(A);let u;try{const r=s.slice(0,-1).reduce(((e,r)=>e[r]),e),t=s.reduce(((e,r)=>e[r]),e);switch(i){case"GET":u=t;break;case"SET":r[s.slice(-1)[0]]=A(o.data.value),u=!0;break;case"APPLY":u=t.apply(r,l);break;case"CONSTRUCT":u=F(new t(...l));break;case"ENDPOINT":{const{port1:r,port2:t}=new MessageChannel;h(e,t),u=D(r,[r])}break;case"RELEASE":u=void 0;break;default:return}}catch(e){u={value:e,[d]:0}}Promise.resolve(u).catch((e=>({value:e,[d]:0}))).then((t=>{const[o,s]=M(t);r.postMessage(Object.assign(Object.assign({},o),{id:a}),s),"RELEASE"===i&&(r.removeEventListener("message",n),w(r),f in e&&"function"==typeof e[f]&&e[f]())})).catch((e=>{const[t,n]=M({value:new TypeError("Unserializable return value"),[d]:0});r.postMessage(Object.assign(Object.assign({},t),{id:a}),n)}))})),r.start&&r.start()}function w(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function v(e,r){return b(e,[],r)}function g(e){if(e)throw new Error("Proxy has been released and is not useable")}function y(e){return x(e,{type:"RELEASE"}).then((()=>{w(e)}))}const E=new WeakMap,_="FinalizationRegistry"in globalThis&&new FinalizationRegistry((e=>{const r=(E.get(e)||0)-1;E.set(e,r),0===r&&y(e)}));function b(e,r=[],t=function(){}){let n=!1;const o=new Proxy(t,{get(t,a){if(g(n),a===c)return()=>{!function(e){_&&_.unregister(e)}(o),y(e),n=!0};if("then"===a){if(0===r.length)return{then:()=>o};const t=x(e,{type:"GET",path:r.map((e=>e.toString()))}).then(A);return t.then.bind(t)}return b(e,[...r,a])},set(t,o,a){g(n);const[i,s]=M(a);return x(e,{type:"SET",path:[...r,o].map((e=>e.toString())),value:i},s).then(A)},apply(t,o,a){g(n);const i=r[r.length-1];if(i===u)return x(e,{type:"ENDPOINT"}).then(A);if("bind"===i)return b(e,r.slice(0,-1));const[s,l]=k(a);return x(e,{type:"APPLY",path:r.map((e=>e.toString())),argumentList:s},l).then(A)},construct(t,o){g(n);const[a,i]=k(o);return x(e,{type:"CONSTRUCT",path:r.map((e=>e.toString())),argumentList:a},i).then(A)}});return function(e,r){const t=(E.get(r)||0)+1;E.set(r,t),_&&_.register(e,r,e)}(o,e),o}function k(e){const r=e.map(M);return[r.map((e=>e[0])),(t=r.map((e=>e[1])),Array.prototype.concat.apply([],t))];var t}const S=new WeakMap;function D(e,r){return S.set(e,r),e}function F(e){return Object.assign(e,{[l]:!0})}function M(e){for(const[r,t]of p)if(t.canHandle(e)){const[n,o]=t.serialize(e);return[{type:"HANDLER",name:r,value:n},o]}return[{type:"RAW",value:e},S.get(e)||[]]}function A(e){switch(e.type){case"HANDLER":return p.get(e.name).deserialize(e.value);case"RAW":return e.value}}function x(e,r,t){return new Promise((n=>{const o=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");e.addEventListener("message",(function r(t){t.data&&t.data.id&&t.data.id===o&&(e.removeEventListener("message",r),n(t.data))})),e.start&&e.start(),e.postMessage(Object.assign({id:o},r),t)}))}var P=i(Object.freeze({__proto__:null,createEndpoint:u,expose:h,finalizer:f,proxy:F,proxyMarker:l,releaseProxy:c,transfer:D,transferHandlers:p,windowEndpoint:function(e,r=globalThis,t="*"){return{postMessage:(r,n)=>e.postMessage(r,t,n),addEventListener:r.addEventListener.bind(r),removeEventListener:r.removeEventListener.bind(r)}},wrap:v}));return function(e){var r=void 0!==r?r:{};const t=P,a="/tex",i="/work";self.memlog="",self.initmem=void 0,self.mainfile="main.tex",self.texlive_endpoint=void 0,self.extension=void 0;r={print(e){self.memlog+=e+"\n"},printErr(e){self.memlog+=e+"\n",console.log(e)},preRun(){Ee.mkdir(a),Ee.mkdir(i)},postRun(){var e,r;self.postMessage("wasm_initialized"),self.initmem=(e=F.buffer,(r=new Uint8Array(e.byteLength)).set(new Uint8Array(e)),r)},onAbort(){self.memlog+="Engine crashed",console.error("full log",self.memlog)}};function s(e){let r=Ke(e.length);return T.set(new Uint8Array(e),r),r}function l(){self.memlog="",self.initmem&&new Uint8Array(F.buffer).set(self.initmem),function(){for(var e=0;e{throw r},y="object"==typeof window,E="function"==typeof importScripts,_="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,b="";if(_){var k=n.default,S=o.default;b=E?S.dirname(b)+"/":__dirname+"/",d=(e,r)=>(e=Z(e)?new URL(e):S.normalize(e),k.readFileSync(e,r?void 0:"utf8")),p=e=>{var r=d(e,!0);return r.buffer||(r=new Uint8Array(r)),r},m=(e,r,t,n=!0)=>{e=Z(e)?new URL(e):S.normalize(e),k.readFile(e,n?void 0:"utf8",((e,o)=>{e?t(e):r(n?o.buffer:o)}))},!r.thisProgram&&process.argv.length>1&&(v=process.argv[1].replace(/\\/g,"/")),w=process.argv.slice(2),e.exports=r,process.on("uncaughtException",(e=>{if(!("unwind"===e||e instanceof re||e.context instanceof re))throw e})),g=(e,r)=>{throw process.exitCode=e,r},r.inspect=()=>"[Emscripten Module object]"}else(y||E)&&(E?b=self.location.href:"undefined"!=typeof document&&document.currentScript&&(b=document.currentScript.src),b=0!==b.indexOf("blob:")?b.substr(0,b.replace(/[?#].*/,"").lastIndexOf("/")+1):"",d=e=>{var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},E&&(p=e=>{var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),m=(e,r,t)=>{var n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="arraybuffer",n.onload=()=>{200==n.status||0==n.status&&n.response?r(n.response):t()},n.onerror=t,n.send(null)});var D,F,M=r.print||console.log.bind(console),A=r.printErr||console.error.bind(console);Object.assign(r,h),h=null,r.arguments&&(w=r.arguments),r.thisProgram&&(v=r.thisProgram),r.quit&&(g=r.quit),r.wasmBinary&&(D=r.wasmBinary),"object"!=typeof WebAssembly&&W("no native wasm support detected");var x,R,T,z,O,L,j=!1;function C(){var e=F.buffer;r.HEAP8=R=new Int8Array(e),r.HEAP16=z=new Int16Array(e),r.HEAPU8=T=new Uint8Array(e),r.HEAPU16=new Uint16Array(e),r.HEAP32=O=new Int32Array(e),r.HEAPU32=L=new Uint32Array(e),r.HEAPF32=new Float32Array(e),r.HEAPF64=new Float64Array(e)}var N=[],H=[],B=[],U=[];var I=0,Y=null;function q(e){I++,r.monitorRunDependencies&&r.monitorRunDependencies(I)}function $(e){if(I--,r.monitorRunDependencies&&r.monitorRunDependencies(I),0==I&&Y){var t=Y;Y=null,t()}}function W(e){throw r.onAbort&&r.onAbort(e),A(e="Aborted("+e+")"),j=!0,x=1,e+=". Build with -sASSERTIONS for more info.",new WebAssembly.RuntimeError(e)}var X,G,V,K,J=e=>e.startsWith("data:application/octet-stream;base64,"),Z=e=>e.startsWith("file://");function Q(e){if(e==X&&D)return new Uint8Array(D);if(p)return p(e);throw"both async and sync fetching of the wasm failed"}function ee(e,r,t){return function(e){if(!D&&(y||E)){if("function"==typeof fetch&&!Z(e))return fetch(e,{credentials:"same-origin"}).then((r=>{if(!r.ok)throw"failed to load wasm binary file at '"+e+"'";return r.arrayBuffer()})).catch((()=>Q(e)));if(m)return new Promise(((r,t)=>{m(e,(e=>r(new Uint8Array(e))),t)}))}return Promise.resolve().then((()=>Q(e)))}(e).then((e=>WebAssembly.instantiate(e,r))).then((e=>e)).then(t,(e=>{A(`failed to asynchronously prepare wasm: ${e}`),W(e)}))}function re(e){this.name="ExitStatus",this.message=`Program terminated with exit(${e})`,this.status=e}J(X="swiftlatexpdftex.wasm")||(G=X,X=r.locateFile?r.locateFile(G,b):b+G);var te=e=>{for(;e.length>0;)e.shift()(r)},ne=r.noExitRuntime||!0,oe="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,ae=(e,r,t)=>{for(var n=r+t,o=r;e[o]&&!(o>=n);)++o;if(o-r>16&&e.buffer&&oe)return oe.decode(e.subarray(r,o));for(var a="";r>10,56320|1023&u)}}else a+=String.fromCharCode((31&i)<<6|s)}else a+=String.fromCharCode(i)}return a},ie=(e,r)=>e?ae(T,e,r):"",se={isAbs:e=>"/"===e.charAt(0),splitPath:e=>/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1),normalizeArray:(e,r)=>{for(var t=0,n=e.length-1;n>=0;n--){var o=e[n];"."===o?e.splice(n,1):".."===o?(e.splice(n,1),t++):t&&(e.splice(n,1),t--)}if(r)for(;t;t--)e.unshift("..");return e},normalize:e=>{var r=se.isAbs(e),t="/"===e.substr(-1);return(e=se.normalizeArray(e.split("/").filter((e=>!!e)),!r).join("/"))||r||(e="."),e&&t&&(e+="/"),(r?"/":"")+e},dirname:e=>{var r=se.splitPath(e),t=r[0],n=r[1];return t||n?(n&&(n=n.substr(0,n.length-1)),t+n):"."},basename:e=>{if("/"===e)return"/";var r=(e=(e=se.normalize(e)).replace(/\/$/,"")).lastIndexOf("/");return-1===r?e:e.substr(r+1)},join:function(){var e=Array.prototype.slice.call(arguments);return se.normalize(e.join("/"))},join2:(e,r)=>se.normalize(e+"/"+r)},le=e=>(le=(()=>{if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues)return e=>crypto.getRandomValues(e);if(_)try{var e=require("crypto");if(e.randomFillSync)return r=>e.randomFillSync(r);var r=e.randomBytes;return e=>(e.set(r(e.byteLength)),e)}catch(e){}W("initRandomDevice")})())(e),ue={resolve:function(){for(var e="",r=!1,t=arguments.length-1;t>=-1&&!r;t--){var n=t>=0?arguments[t]:Ee.cwd();if("string"!=typeof n)throw new TypeError("Arguments to path.resolve must be strings");if(!n)return"";e=n+"/"+e,r=se.isAbs(n)}return(r?"/":"")+(e=se.normalizeArray(e.split("/").filter((e=>!!e)),!r).join("/"))||"."},relative:(e,r)=>{function t(e){for(var r=0;r=0&&""===e[t];t--);return r>t?[]:e.slice(r,t-r+1)}e=ue.resolve(e).substr(1),r=ue.resolve(r).substr(1);for(var n=t(e.split("/")),o=t(r.split("/")),a=Math.min(n.length,o.length),i=a,s=0;s{for(var r=0,t=0;t=55296&&n<=57343?(r+=4,++t):r+=3}return r},de=(e,r,t,n)=>{if(!(n>0))return 0;for(var o=t,a=t+n-1,i=0;i=55296&&s<=57343)s=65536+((1023&s)<<10)|1023&e.charCodeAt(++i);if(s<=127){if(t>=a)break;r[t++]=s}else if(s<=2047){if(t+1>=a)break;r[t++]=192|s>>6,r[t++]=128|63&s}else if(s<=65535){if(t+2>=a)break;r[t++]=224|s>>12,r[t++]=128|s>>6&63,r[t++]=128|63&s}else{if(t+3>=a)break;r[t++]=240|s>>18,r[t++]=128|s>>12&63,r[t++]=128|s>>6&63,r[t++]=128|63&s}}return r[t]=0,t-o};function me(e,r,t){var n=t>0?t:fe(e)+1,o=new Array(n),a=de(e,o,0,o.length);return r&&(o.length=a),o}var pe={ttys:[],init(){},shutdown(){},register(e,r){pe.ttys[e]={input:[],output:[],ops:r},Ee.registerDevice(e,pe.stream_ops)},stream_ops:{open(e){var r=pe.ttys[e.node.rdev];if(!r)throw new Ee.ErrnoError(43);e.tty=r,e.seekable=!1},close(e){e.tty.ops.fsync(e.tty)},fsync(e){e.tty.ops.fsync(e.tty)},read(e,r,t,n,o){if(!e.tty||!e.tty.ops.get_char)throw new Ee.ErrnoError(60);for(var a=0,i=0;i(()=>{if(!ce.length){var e=null;if(_){var r=Buffer.alloc(256),t=0,n=process.stdin.fd;try{t=k.readSync(n,r)}catch(e){if(!e.toString().includes("EOF"))throw e;t=0}e=t>0?r.slice(0,t).toString("utf-8"):null}else"undefined"!=typeof window&&"function"==typeof window.prompt?null!==(e=window.prompt("Input: "))&&(e+="\n"):"function"==typeof readline&&null!==(e=readline())&&(e+="\n");if(!e)return null;ce=me(e,!0)}return ce.shift()})(),put_char(e,r){null===r||10===r?(M(ae(e.output,0)),e.output=[]):0!=r&&e.output.push(r)},fsync(e){e.output&&e.output.length>0&&(M(ae(e.output,0)),e.output=[])},ioctl_tcgets:e=>({c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}),ioctl_tcsets:(e,r,t)=>0,ioctl_tiocgwinsz:e=>[24,80]},default_tty1_ops:{put_char(e,r){null===r||10===r?(A(ae(e.output,0)),e.output=[]):0!=r&&e.output.push(r)},fsync(e){e.output&&e.output.length>0&&(A(ae(e.output,0)),e.output=[])}}},he=e=>{W()},we={ops_table:null,mount:e=>we.createNode(null,"/",16895,0),createNode(e,r,t,n){if(Ee.isBlkdev(t)||Ee.isFIFO(t))throw new Ee.ErrnoError(63);we.ops_table||(we.ops_table={dir:{node:{getattr:we.node_ops.getattr,setattr:we.node_ops.setattr,lookup:we.node_ops.lookup,mknod:we.node_ops.mknod,rename:we.node_ops.rename,unlink:we.node_ops.unlink,rmdir:we.node_ops.rmdir,readdir:we.node_ops.readdir,symlink:we.node_ops.symlink},stream:{llseek:we.stream_ops.llseek}},file:{node:{getattr:we.node_ops.getattr,setattr:we.node_ops.setattr},stream:{llseek:we.stream_ops.llseek,read:we.stream_ops.read,write:we.stream_ops.write,allocate:we.stream_ops.allocate,mmap:we.stream_ops.mmap,msync:we.stream_ops.msync}},link:{node:{getattr:we.node_ops.getattr,setattr:we.node_ops.setattr,readlink:we.node_ops.readlink},stream:{}},chrdev:{node:{getattr:we.node_ops.getattr,setattr:we.node_ops.setattr},stream:Ee.chrdev_stream_ops}});var o=Ee.createNode(e,r,t,n);return Ee.isDir(o.mode)?(o.node_ops=we.ops_table.dir.node,o.stream_ops=we.ops_table.dir.stream,o.contents={}):Ee.isFile(o.mode)?(o.node_ops=we.ops_table.file.node,o.stream_ops=we.ops_table.file.stream,o.usedBytes=0,o.contents=null):Ee.isLink(o.mode)?(o.node_ops=we.ops_table.link.node,o.stream_ops=we.ops_table.link.stream):Ee.isChrdev(o.mode)&&(o.node_ops=we.ops_table.chrdev.node,o.stream_ops=we.ops_table.chrdev.stream),o.timestamp=Date.now(),e&&(e.contents[r]=o,e.timestamp=o.timestamp),o},getFileDataAsTypedArray:e=>e.contents?e.contents.subarray?e.contents.subarray(0,e.usedBytes):new Uint8Array(e.contents):new Uint8Array(0),expandFileStorage(e,r){var t=e.contents?e.contents.length:0;if(!(t>=r)){r=Math.max(r,t*(t<1048576?2:1.125)>>>0),0!=t&&(r=Math.max(r,256));var n=e.contents;e.contents=new Uint8Array(r),e.usedBytes>0&&e.contents.set(n.subarray(0,e.usedBytes),0)}},resizeFileStorage(e,r){if(e.usedBytes!=r)if(0==r)e.contents=null,e.usedBytes=0;else{var t=e.contents;e.contents=new Uint8Array(r),t&&e.contents.set(t.subarray(0,Math.min(r,e.usedBytes))),e.usedBytes=r}},node_ops:{getattr(e){var r={};return r.dev=Ee.isChrdev(e.mode)?e.id:1,r.ino=e.id,r.mode=e.mode,r.nlink=1,r.uid=0,r.gid=0,r.rdev=e.rdev,Ee.isDir(e.mode)?r.size=4096:Ee.isFile(e.mode)?r.size=e.usedBytes:Ee.isLink(e.mode)?r.size=e.link.length:r.size=0,r.atime=new Date(e.timestamp),r.mtime=new Date(e.timestamp),r.ctime=new Date(e.timestamp),r.blksize=4096,r.blocks=Math.ceil(r.size/r.blksize),r},setattr(e,r){void 0!==r.mode&&(e.mode=r.mode),void 0!==r.timestamp&&(e.timestamp=r.timestamp),void 0!==r.size&&we.resizeFileStorage(e,r.size)},lookup(e,r){throw Ee.genericErrors[44]},mknod:(e,r,t,n)=>we.createNode(e,r,t,n),rename(e,r,t){if(Ee.isDir(e.mode)){var n;try{n=Ee.lookupNode(r,t)}catch(e){}if(n)for(var o in n.contents)throw new Ee.ErrnoError(55)}delete e.parent.contents[e.name],e.parent.timestamp=Date.now(),e.name=t,r.contents[t]=e,r.timestamp=e.parent.timestamp,e.parent=r},unlink(e,r){delete e.contents[r],e.timestamp=Date.now()},rmdir(e,r){var t=Ee.lookupNode(e,r);for(var n in t.contents)throw new Ee.ErrnoError(55);delete e.contents[r],e.timestamp=Date.now()},readdir(e){var r=[".",".."];for(var t in e.contents)e.contents.hasOwnProperty(t)&&r.push(t);return r},symlink(e,r,t){var n=we.createNode(e,r,41471,0);return n.link=t,n},readlink(e){if(!Ee.isLink(e.mode))throw new Ee.ErrnoError(28);return e.link}},stream_ops:{read(e,r,t,n,o){var a=e.node.contents;if(o>=e.node.usedBytes)return 0;var i=Math.min(e.node.usedBytes-o,n);if(i>8&&a.subarray)r.set(a.subarray(o,o+i),t);else for(var s=0;s0||t+r(we.stream_ops.write(e,r,0,n,t,!1),0)}},ve=(e,r,t,n)=>{var o=n?"":`al ${e}`;m(e,(t=>{var n;n=`Loading data file "${e}" failed (no arrayBuffer).`,t||W(n),r(new Uint8Array(t)),o&&$()}),(r=>{if(!t)throw`Loading data file "${e}" failed.`;t()})),o&&q()},ge=r.preloadPlugins||[],ye=(e,r)=>{var t=0;return e&&(t|=365),r&&(t|=146),t},Ee={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath(e,r={}){if(!(e=ue.resolve(e)))return{path:"",node:null};if((r=Object.assign({follow_mount:!0,recurse_count:0},r)).recurse_count>8)throw new Ee.ErrnoError(32);for(var t=e.split("/").filter((e=>!!e)),n=Ee.root,o="/",a=0;a40)throw new Ee.ErrnoError(32)}}return{path:o,node:n}},getPath(e){for(var r;;){if(Ee.isRoot(e)){var t=e.mount.mountpoint;return r?"/"!==t[t.length-1]?`${t}/${r}`:t+r:t}r=r?`${e.name}/${r}`:e.name,e=e.parent}},hashName(e,r){for(var t=0,n=0;n>>0)%Ee.nameTable.length},hashAddNode(e){var r=Ee.hashName(e.parent.id,e.name);e.name_next=Ee.nameTable[r],Ee.nameTable[r]=e},hashRemoveNode(e){var r=Ee.hashName(e.parent.id,e.name);if(Ee.nameTable[r]===e)Ee.nameTable[r]=e.name_next;else for(var t=Ee.nameTable[r];t;){if(t.name_next===e){t.name_next=e.name_next;break}t=t.name_next}},lookupNode(e,r){var t=Ee.mayLookup(e);if(t)throw new Ee.ErrnoError(t,e);for(var n=Ee.hashName(e.id,r),o=Ee.nameTable[n];o;o=o.name_next){var a=o.name;if(o.parent.id===e.id&&a===r)return o}return Ee.lookup(e,r)},createNode(e,r,t,n){var o=new Ee.FSNode(e,r,t,n);return Ee.hashAddNode(o),o},destroyNode(e){Ee.hashRemoveNode(e)},isRoot:e=>e===e.parent,isMountpoint:e=>!!e.mounted,isFile:e=>32768==(61440&e),isDir:e=>16384==(61440&e),isLink:e=>40960==(61440&e),isChrdev:e=>8192==(61440&e),isBlkdev:e=>24576==(61440&e),isFIFO:e=>4096==(61440&e),isSocket:e=>49152==(49152&e),flagsToPermissionString(e){var r=["r","w","rw"][3&e];return 512&e&&(r+="w"),r},nodePermissions:(e,r)=>Ee.ignorePermissions||(!r.includes("r")||292&e.mode)&&(!r.includes("w")||146&e.mode)&&(!r.includes("x")||73&e.mode)?0:2,mayLookup(e){var r=Ee.nodePermissions(e,"x");return r||(e.node_ops.lookup?0:2)},mayCreate(e,r){try{Ee.lookupNode(e,r);return 20}catch(e){}return Ee.nodePermissions(e,"wx")},mayDelete(e,r,t){var n;try{n=Ee.lookupNode(e,r)}catch(e){return e.errno}var o=Ee.nodePermissions(e,"wx");if(o)return o;if(t){if(!Ee.isDir(n.mode))return 54;if(Ee.isRoot(n)||Ee.getPath(n)===Ee.cwd())return 10}else if(Ee.isDir(n.mode))return 31;return 0},mayOpen:(e,r)=>e?Ee.isLink(e.mode)?32:Ee.isDir(e.mode)&&("r"!==Ee.flagsToPermissionString(r)||512&r)?31:Ee.nodePermissions(e,Ee.flagsToPermissionString(r)):44,MAX_OPEN_FDS:4096,nextfd(){for(var e=0;e<=Ee.MAX_OPEN_FDS;e++)if(!Ee.streams[e])return e;throw new Ee.ErrnoError(33)},getStreamChecked(e){var r=Ee.getStream(e);if(!r)throw new Ee.ErrnoError(8);return r},getStream:e=>Ee.streams[e],createStream:(e,r=-1)=>(Ee.FSStream||(Ee.FSStream=function(){this.shared={}},Ee.FSStream.prototype={},Object.defineProperties(Ee.FSStream.prototype,{object:{get(){return this.node},set(e){this.node=e}},isRead:{get(){return 1!=(2097155&this.flags)}},isWrite:{get(){return 0!=(2097155&this.flags)}},isAppend:{get(){return 1024&this.flags}},flags:{get(){return this.shared.flags},set(e){this.shared.flags=e}},position:{get(){return this.shared.position},set(e){this.shared.position=e}}})),e=Object.assign(new Ee.FSStream,e),-1==r&&(r=Ee.nextfd()),e.fd=r,Ee.streams[r]=e,e),closeStream(e){Ee.streams[e]=null},chrdev_stream_ops:{open(e){var r=Ee.getDevice(e.node.rdev);e.stream_ops=r.stream_ops,e.stream_ops.open&&e.stream_ops.open(e)},llseek(){throw new Ee.ErrnoError(70)}},major:e=>e>>8,minor:e=>255&e,makedev:(e,r)=>e<<8|r,registerDevice(e,r){Ee.devices[e]={stream_ops:r}},getDevice:e=>Ee.devices[e],getMounts(e){for(var r=[],t=[e];t.length;){var n=t.pop();r.push(n),t.push.apply(t,n.mounts)}return r},syncfs(e,r){"function"==typeof e&&(r=e,e=!1),Ee.syncFSRequests++,Ee.syncFSRequests>1&&A(`warning: ${Ee.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var t=Ee.getMounts(Ee.root.mount),n=0;function o(e){return Ee.syncFSRequests--,r(e)}function a(e){if(e)return a.errored?void 0:(a.errored=!0,o(e));++n>=t.length&&o(null)}t.forEach((r=>{if(!r.type.syncfs)return a(null);r.type.syncfs(r,e,a)}))},mount(e,r,t){var n,o="/"===t,a=!t;if(o&&Ee.root)throw new Ee.ErrnoError(10);if(!o&&!a){var i=Ee.lookupPath(t,{follow_mount:!1});if(t=i.path,n=i.node,Ee.isMountpoint(n))throw new Ee.ErrnoError(10);if(!Ee.isDir(n.mode))throw new Ee.ErrnoError(54)}var s={type:e,opts:r,mountpoint:t,mounts:[]},l=e.mount(s);return l.mount=s,s.root=l,o?Ee.root=l:n&&(n.mounted=s,n.mount&&n.mount.mounts.push(s)),l},unmount(e){var r=Ee.lookupPath(e,{follow_mount:!1});if(!Ee.isMountpoint(r.node))throw new Ee.ErrnoError(28);var t=r.node,n=t.mounted,o=Ee.getMounts(n);Object.keys(Ee.nameTable).forEach((e=>{for(var r=Ee.nameTable[e];r;){var t=r.name_next;o.includes(r.mount)&&Ee.destroyNode(r),r=t}})),t.mounted=null;var a=t.mount.mounts.indexOf(n);t.mount.mounts.splice(a,1)},lookup:(e,r)=>e.node_ops.lookup(e,r),mknod(e,r,t){var n=Ee.lookupPath(e,{parent:!0}).node,o=se.basename(e);if(!o||"."===o||".."===o)throw new Ee.ErrnoError(28);var a=Ee.mayCreate(n,o);if(a)throw new Ee.ErrnoError(a);if(!n.node_ops.mknod)throw new Ee.ErrnoError(63);return n.node_ops.mknod(n,o,r,t)},create:(e,r)=>(r=void 0!==r?r:438,r&=4095,r|=32768,Ee.mknod(e,r,0)),mkdir:(e,r)=>(r=void 0!==r?r:511,r&=1023,r|=16384,Ee.mknod(e,r,0)),mkdirTree(e,r){for(var t=e.split("/"),n="",o=0;o(void 0===t&&(t=r,r=438),r|=8192,Ee.mknod(e,r,t)),symlink(e,r){if(!ue.resolve(e))throw new Ee.ErrnoError(44);var t=Ee.lookupPath(r,{parent:!0}).node;if(!t)throw new Ee.ErrnoError(44);var n=se.basename(r),o=Ee.mayCreate(t,n);if(o)throw new Ee.ErrnoError(o);if(!t.node_ops.symlink)throw new Ee.ErrnoError(63);return t.node_ops.symlink(t,n,e)},rename(e,r){var t,n,o=se.dirname(e),a=se.dirname(r),i=se.basename(e),s=se.basename(r);if(t=Ee.lookupPath(e,{parent:!0}).node,n=Ee.lookupPath(r,{parent:!0}).node,!t||!n)throw new Ee.ErrnoError(44);if(t.mount!==n.mount)throw new Ee.ErrnoError(75);var l,u=Ee.lookupNode(t,i),c=ue.relative(e,a);if("."!==c.charAt(0))throw new Ee.ErrnoError(28);if("."!==(c=ue.relative(r,o)).charAt(0))throw new Ee.ErrnoError(55);try{l=Ee.lookupNode(n,s)}catch(e){}if(u!==l){var f=Ee.isDir(u.mode),d=Ee.mayDelete(t,i,f);if(d)throw new Ee.ErrnoError(d);if(d=l?Ee.mayDelete(n,s,f):Ee.mayCreate(n,s))throw new Ee.ErrnoError(d);if(!t.node_ops.rename)throw new Ee.ErrnoError(63);if(Ee.isMountpoint(u)||l&&Ee.isMountpoint(l))throw new Ee.ErrnoError(10);if(n!==t&&(d=Ee.nodePermissions(t,"w")))throw new Ee.ErrnoError(d);Ee.hashRemoveNode(u);try{t.node_ops.rename(u,n,s)}catch(e){throw e}finally{Ee.hashAddNode(u)}}},rmdir(e){var r=Ee.lookupPath(e,{parent:!0}).node,t=se.basename(e),n=Ee.lookupNode(r,t),o=Ee.mayDelete(r,t,!0);if(o)throw new Ee.ErrnoError(o);if(!r.node_ops.rmdir)throw new Ee.ErrnoError(63);if(Ee.isMountpoint(n))throw new Ee.ErrnoError(10);r.node_ops.rmdir(r,t),Ee.destroyNode(n)},readdir(e){var r=Ee.lookupPath(e,{follow:!0}).node;if(!r.node_ops.readdir)throw new Ee.ErrnoError(54);return r.node_ops.readdir(r)},unlink(e){var r=Ee.lookupPath(e,{parent:!0}).node;if(!r)throw new Ee.ErrnoError(44);var t=se.basename(e),n=Ee.lookupNode(r,t),o=Ee.mayDelete(r,t,!1);if(o)throw new Ee.ErrnoError(o);if(!r.node_ops.unlink)throw new Ee.ErrnoError(63);if(Ee.isMountpoint(n))throw new Ee.ErrnoError(10);r.node_ops.unlink(r,t),Ee.destroyNode(n)},readlink(e){var r=Ee.lookupPath(e).node;if(!r)throw new Ee.ErrnoError(44);if(!r.node_ops.readlink)throw new Ee.ErrnoError(28);return ue.resolve(Ee.getPath(r.parent),r.node_ops.readlink(r))},stat(e,r){var t=Ee.lookupPath(e,{follow:!r}).node;if(!t)throw new Ee.ErrnoError(44);if(!t.node_ops.getattr)throw new Ee.ErrnoError(63);return t.node_ops.getattr(t)},lstat:e=>Ee.stat(e,!0),chmod(e,r,t){var n;"string"==typeof e?n=Ee.lookupPath(e,{follow:!t}).node:n=e;if(!n.node_ops.setattr)throw new Ee.ErrnoError(63);n.node_ops.setattr(n,{mode:4095&r|-4096&n.mode,timestamp:Date.now()})},lchmod(e,r){Ee.chmod(e,r,!0)},fchmod(e,r){var t=Ee.getStreamChecked(e);Ee.chmod(t.node,r)},chown(e,r,t,n){var o;"string"==typeof e?o=Ee.lookupPath(e,{follow:!n}).node:o=e;if(!o.node_ops.setattr)throw new Ee.ErrnoError(63);o.node_ops.setattr(o,{timestamp:Date.now()})},lchown(e,r,t){Ee.chown(e,r,t,!0)},fchown(e,r,t){var n=Ee.getStreamChecked(e);Ee.chown(n.node,r,t)},truncate(e,r){if(r<0)throw new Ee.ErrnoError(28);var t;"string"==typeof e?t=Ee.lookupPath(e,{follow:!0}).node:t=e;if(!t.node_ops.setattr)throw new Ee.ErrnoError(63);if(Ee.isDir(t.mode))throw new Ee.ErrnoError(31);if(!Ee.isFile(t.mode))throw new Ee.ErrnoError(28);var n=Ee.nodePermissions(t,"w");if(n)throw new Ee.ErrnoError(n);t.node_ops.setattr(t,{size:r,timestamp:Date.now()})},ftruncate(e,r){var t=Ee.getStreamChecked(e);if(0==(2097155&t.flags))throw new Ee.ErrnoError(28);Ee.truncate(t.node,r)},utime(e,r,t){var n=Ee.lookupPath(e,{follow:!0}).node;n.node_ops.setattr(n,{timestamp:Math.max(r,t)})},open(e,t,n){if(""===e)throw new Ee.ErrnoError(44);var o;if(n=void 0===n?438:n,n=64&(t="string"==typeof t?(e=>{var r={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[e];if(void 0===r)throw new Error(`Unknown file open mode: ${e}`);return r})(t):t)?4095&n|32768:0,"object"==typeof e)o=e;else{e=se.normalize(e);try{o=Ee.lookupPath(e,{follow:!(131072&t)}).node}catch(e){}}var a=!1;if(64&t)if(o){if(128&t)throw new Ee.ErrnoError(20)}else o=Ee.mknod(e,n,0),a=!0;if(!o)throw new Ee.ErrnoError(44);if(Ee.isChrdev(o.mode)&&(t&=-513),65536&t&&!Ee.isDir(o.mode))throw new Ee.ErrnoError(54);if(!a){var i=Ee.mayOpen(o,t);if(i)throw new Ee.ErrnoError(i)}512&t&&!a&&Ee.truncate(o,0),t&=-131713;var s=Ee.createStream({node:o,path:Ee.getPath(o),flags:t,seekable:!0,position:0,stream_ops:o.stream_ops,ungotten:[],error:!1});return s.stream_ops.open&&s.stream_ops.open(s),!r.logReadFiles||1&t||(Ee.readFiles||(Ee.readFiles={}),e in Ee.readFiles||(Ee.readFiles[e]=1)),s},close(e){if(Ee.isClosed(e))throw new Ee.ErrnoError(8);e.getdents&&(e.getdents=null);try{e.stream_ops.close&&e.stream_ops.close(e)}catch(e){throw e}finally{Ee.closeStream(e.fd)}e.fd=null},isClosed:e=>null===e.fd,llseek(e,r,t){if(Ee.isClosed(e))throw new Ee.ErrnoError(8);if(!e.seekable||!e.stream_ops.llseek)throw new Ee.ErrnoError(70);if(0!=t&&1!=t&&2!=t)throw new Ee.ErrnoError(28);return e.position=e.stream_ops.llseek(e,r,t),e.ungotten=[],e.position},read(e,r,t,n,o){if(n<0||o<0)throw new Ee.ErrnoError(28);if(Ee.isClosed(e))throw new Ee.ErrnoError(8);if(1==(2097155&e.flags))throw new Ee.ErrnoError(8);if(Ee.isDir(e.node.mode))throw new Ee.ErrnoError(31);if(!e.stream_ops.read)throw new Ee.ErrnoError(28);var a=void 0!==o;if(a){if(!e.seekable)throw new Ee.ErrnoError(70)}else o=e.position;var i=e.stream_ops.read(e,r,t,n,o);return a||(e.position+=i),i},write(e,r,t,n,o,a){if(n<0||o<0)throw new Ee.ErrnoError(28);if(Ee.isClosed(e))throw new Ee.ErrnoError(8);if(0==(2097155&e.flags))throw new Ee.ErrnoError(8);if(Ee.isDir(e.node.mode))throw new Ee.ErrnoError(31);if(!e.stream_ops.write)throw new Ee.ErrnoError(28);e.seekable&&1024&e.flags&&Ee.llseek(e,0,2);var i=void 0!==o;if(i){if(!e.seekable)throw new Ee.ErrnoError(70)}else o=e.position;var s=e.stream_ops.write(e,r,t,n,o,a);return i||(e.position+=s),s},allocate(e,r,t){if(Ee.isClosed(e))throw new Ee.ErrnoError(8);if(r<0||t<=0)throw new Ee.ErrnoError(28);if(0==(2097155&e.flags))throw new Ee.ErrnoError(8);if(!Ee.isFile(e.node.mode)&&!Ee.isDir(e.node.mode))throw new Ee.ErrnoError(43);if(!e.stream_ops.allocate)throw new Ee.ErrnoError(138);e.stream_ops.allocate(e,r,t)},mmap(e,r,t,n,o){if(0!=(2&n)&&0==(2&o)&&2!=(2097155&e.flags))throw new Ee.ErrnoError(2);if(1==(2097155&e.flags))throw new Ee.ErrnoError(2);if(!e.stream_ops.mmap)throw new Ee.ErrnoError(43);return e.stream_ops.mmap(e,r,t,n,o)},msync:(e,r,t,n,o)=>e.stream_ops.msync?e.stream_ops.msync(e,r,t,n,o):0,munmap:e=>0,ioctl(e,r,t){if(!e.stream_ops.ioctl)throw new Ee.ErrnoError(59);return e.stream_ops.ioctl(e,r,t)},readFile(e,r={}){if(r.flags=r.flags||0,r.encoding=r.encoding||"binary","utf8"!==r.encoding&&"binary"!==r.encoding)throw new Error(`Invalid encoding type "${r.encoding}"`);var t,n=Ee.open(e,r.flags),o=Ee.stat(e).size,a=new Uint8Array(o);return Ee.read(n,a,0,o,0),"utf8"===r.encoding?t=ae(a,0):"binary"===r.encoding&&(t=a),Ee.close(n),t},writeFile(e,r,t={}){t.flags=t.flags||577;var n=Ee.open(e,t.flags,t.mode);if("string"==typeof r){var o=new Uint8Array(fe(r)+1),a=de(r,o,0,o.length);Ee.write(n,o,0,a,void 0,t.canOwn)}else{if(!ArrayBuffer.isView(r))throw new Error("Unsupported data type");Ee.write(n,r,0,r.byteLength,void 0,t.canOwn)}Ee.close(n)},cwd:()=>Ee.currentPath,chdir(e){var r=Ee.lookupPath(e,{follow:!0});if(null===r.node)throw new Ee.ErrnoError(44);if(!Ee.isDir(r.node.mode))throw new Ee.ErrnoError(54);var t=Ee.nodePermissions(r.node,"x");if(t)throw new Ee.ErrnoError(t);Ee.currentPath=r.path},createDefaultDirectories(){Ee.mkdir("/tmp"),Ee.mkdir("/home"),Ee.mkdir("/home/web_user")},createDefaultDevices(){Ee.mkdir("/dev"),Ee.registerDevice(Ee.makedev(1,3),{read:()=>0,write:(e,r,t,n,o)=>n}),Ee.mkdev("/dev/null",Ee.makedev(1,3)),pe.register(Ee.makedev(5,0),pe.default_tty_ops),pe.register(Ee.makedev(6,0),pe.default_tty1_ops),Ee.mkdev("/dev/tty",Ee.makedev(5,0)),Ee.mkdev("/dev/tty1",Ee.makedev(6,0));var e=new Uint8Array(1024),r=0,t=()=>(0===r&&(r=le(e).byteLength),e[--r]);Ee.createDevice("/dev","random",t),Ee.createDevice("/dev","urandom",t),Ee.mkdir("/dev/shm"),Ee.mkdir("/dev/shm/tmp")},createSpecialDirectories(){Ee.mkdir("/proc");var e=Ee.mkdir("/proc/self");Ee.mkdir("/proc/self/fd"),Ee.mount({mount(){var r=Ee.createNode(e,"fd",16895,73);return r.node_ops={lookup(e,r){var t=+r,n=Ee.getStreamChecked(t),o={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>n.path}};return o.parent=o,o}},r}},{},"/proc/self/fd")},createStandardStreams(){r.stdin?Ee.createDevice("/dev","stdin",r.stdin):Ee.symlink("/dev/tty","/dev/stdin"),r.stdout?Ee.createDevice("/dev","stdout",null,r.stdout):Ee.symlink("/dev/tty","/dev/stdout"),r.stderr?Ee.createDevice("/dev","stderr",null,r.stderr):Ee.symlink("/dev/tty1","/dev/stderr"),Ee.open("/dev/stdin",0),Ee.open("/dev/stdout",1),Ee.open("/dev/stderr",1)},ensureErrnoError(){Ee.ErrnoError||(Ee.ErrnoError=function(e,r){this.name="ErrnoError",this.node=r,this.setErrno=function(e){this.errno=e},this.setErrno(e),this.message="FS error"},Ee.ErrnoError.prototype=new Error,Ee.ErrnoError.prototype.constructor=Ee.ErrnoError,[44].forEach((e=>{Ee.genericErrors[e]=new Ee.ErrnoError(e),Ee.genericErrors[e].stack=""})))},staticInit(){Ee.ensureErrnoError(),Ee.nameTable=new Array(4096),Ee.mount(we,{},"/"),Ee.createDefaultDirectories(),Ee.createDefaultDevices(),Ee.createSpecialDirectories(),Ee.filesystems={MEMFS:we}},init(e,t,n){Ee.init.initialized=!0,Ee.ensureErrnoError(),r.stdin=e||r.stdin,r.stdout=t||r.stdout,r.stderr=n||r.stderr,Ee.createStandardStreams()},quit(){Ee.init.initialized=!1;for(var e=0;ethis.length-1||e<0)){var r=e%this.chunkSize,t=e/this.chunkSize|0;return this.getter(t)[r]}},a.prototype.setDataGetter=function(e){this.getter=e},a.prototype.cacheLength=function(){var e=new XMLHttpRequest;if(e.open("HEAD",t,!1),e.send(null),!(e.status>=200&&e.status<300||304===e.status))throw new Error("Couldn't load "+t+". Status: "+e.status);var r,n=Number(e.getResponseHeader("Content-length")),o=(r=e.getResponseHeader("Accept-Ranges"))&&"bytes"===r,a=(r=e.getResponseHeader("Content-Encoding"))&&"gzip"===r,i=1048576;o||(i=n);var s=this;s.setDataGetter((e=>{var r=e*i,o=(e+1)*i-1;if(o=Math.min(o,n-1),void 0===s.chunks[e]&&(s.chunks[e]=((e,r)=>{if(e>r)throw new Error("invalid range ("+e+", "+r+") or no bytes requested!");if(r>n-1)throw new Error("only "+n+" bytes available! programmer error!");var o=new XMLHttpRequest;if(o.open("GET",t,!1),n!==i&&o.setRequestHeader("Range","bytes="+e+"-"+r),o.responseType="arraybuffer",o.overrideMimeType&&o.overrideMimeType("text/plain; charset=x-user-defined"),o.send(null),!(o.status>=200&&o.status<300||304===o.status))throw new Error("Couldn't load "+t+". Status: "+o.status);return void 0!==o.response?new Uint8Array(o.response||[]):me(o.responseText||"",!0)})(r,o)),void 0===s.chunks[e])throw new Error("doXHR failed!");return s.chunks[e]})),!a&&n||(i=n=1,n=this.getter(0).length,i=n,M("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=n,this._chunkSize=i,this.lengthKnown=!0},"undefined"!=typeof XMLHttpRequest){if(!E)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var i=new a;Object.defineProperties(i,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var s={isDevice:!1,contents:i}}else s={isDevice:!1,url:t};var l=Ee.createFile(e,r,s,n,o);s.contents?l.contents=s.contents:s.url&&(l.contents=null,l.url=s.url),Object.defineProperties(l,{usedBytes:{get:function(){return this.contents.length}}});var u={};function c(e,r,t,n,o){var a=e.node.contents;if(o>=a.length)return 0;var i=Math.min(a.length-o,n);if(a.slice)for(var s=0;s{var r=l.stream_ops[e];u[e]=function(){return Ee.forceLoadFile(l),r.apply(null,arguments)}})),u.read=(e,r,t,n,o)=>(Ee.forceLoadFile(l),c(e,r,t,n,o)),u.mmap=(e,r,t,n,o)=>{Ee.forceLoadFile(l);var a=he();if(!a)throw new Ee.ErrnoError(48);return c(e,R,a,r,t),{ptr:a,allocated:!0}},l.stream_ops=u,l}},_e={DEFAULT_POLLMASK:5,calculateAt(e,r,t){if(se.isAbs(r))return r;var n;-100===e?n=Ee.cwd():n=_e.getStreamFromFD(e).path;if(0==r.length){if(!t)throw new Ee.ErrnoError(44);return n}return se.join2(n,r)},doStat(e,r,t){try{var n=e(r)}catch(e){if(e&&e.node&&se.normalize(r)!==se.normalize(Ee.getPath(e.node)))return-54;throw e}O[t>>2]=n.dev,O[t+4>>2]=n.mode,L[t+8>>2]=n.nlink,O[t+12>>2]=n.uid,O[t+16>>2]=n.gid,O[t+20>>2]=n.rdev,K=[n.size>>>0,(V=n.size,+Math.abs(V)>=1?V>0?+Math.floor(V/4294967296)>>>0:~~+Math.ceil((V-+(~~V>>>0))/4294967296)>>>0:0)],O[t+24>>2]=K[0],O[t+28>>2]=K[1],O[t+32>>2]=4096,O[t+36>>2]=n.blocks;var o=n.atime.getTime(),a=n.mtime.getTime(),i=n.ctime.getTime();return K=[Math.floor(o/1e3)>>>0,(V=Math.floor(o/1e3),+Math.abs(V)>=1?V>0?+Math.floor(V/4294967296)>>>0:~~+Math.ceil((V-+(~~V>>>0))/4294967296)>>>0:0)],O[t+40>>2]=K[0],O[t+44>>2]=K[1],L[t+48>>2]=o%1e3*1e3,K=[Math.floor(a/1e3)>>>0,(V=Math.floor(a/1e3),+Math.abs(V)>=1?V>0?+Math.floor(V/4294967296)>>>0:~~+Math.ceil((V-+(~~V>>>0))/4294967296)>>>0:0)],O[t+56>>2]=K[0],O[t+60>>2]=K[1],L[t+64>>2]=a%1e3*1e3,K=[Math.floor(i/1e3)>>>0,(V=Math.floor(i/1e3),+Math.abs(V)>=1?V>0?+Math.floor(V/4294967296)>>>0:~~+Math.ceil((V-+(~~V>>>0))/4294967296)>>>0:0)],O[t+72>>2]=K[0],O[t+76>>2]=K[1],L[t+80>>2]=i%1e3*1e3,K=[n.ino>>>0,(V=n.ino,+Math.abs(V)>=1?V>0?+Math.floor(V/4294967296)>>>0:~~+Math.ceil((V-+(~~V>>>0))/4294967296)>>>0:0)],O[t+88>>2]=K[0],O[t+92>>2]=K[1],0},doMsync(e,r,t,n,o){if(!Ee.isFile(r.node.mode))throw new Ee.ErrnoError(43);if(2&n)return 0;var a=T.slice(e,e+t);Ee.msync(r,a,o,t,n)},varargs:void 0,get(){var e=O[+_e.varargs>>2];return _e.varargs+=4,e},getp:()=>_e.get(),getStr:e=>ie(e),getStreamFromFD:e=>Ee.getStreamChecked(e)};var be=(e,r,t)=>de(e,T,r,t);var ke=e=>e%4==0&&(e%100!=0||e%400==0),Se=[0,31,60,91,121,152,182,213,244,274,305,335],De=[0,31,59,90,120,151,181,212,243,273,304,334],Fe=(e,r)=>r+2097152>>>0<4194305-!!e?(e>>>0)+4294967296*r:NaN;var Me=e=>{var r=fe(e)+1,t=Ke(r);return t&&be(e,t,r),t},Ae=e=>{var r=(e-F.buffer.byteLength+65535)/65536;try{return F.grow(r),C(),1}catch(e){}},xe={},Pe=()=>{if(!Pe.strings){var e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:v||"./this.program"};for(var r in xe)void 0===xe[r]?delete e[r]:e[r]=xe[r];var t=[];for(var r in e)t.push(`${r}=${e[r]}`);Pe.strings=t}return Pe.strings},Re=e=>{x=e,ne||(r.onExit&&r.onExit(e),j=!0),g(e,new re(e))},Te=(e,r)=>{x=e,Re(e)},ze=Te;var Oe,Le=[31,29,31,30,31,30,31,31,30,31,30,31],je=[31,28,31,30,31,30,31,31,30,31,30,31],Ce=(e,r)=>{R.set(e,r)},Ne=e=>{if(e instanceof re||"unwind"==e)return x;g(1,e)},He=e=>{var r=fe(e)+1,t=ar(r);return be(e,t,r),t},Be=[],Ue=e=>{var r=Be[e];return r||(e>=Be.length&&(Be.length=e+1),Be[e]=r=Oe.get(e)),r},Ie=e=>r["_"+e],Ye=(e,r,t,n,o)=>{var a={string:e=>{var r=0;return null!=e&&0!==e&&(r=He(e)),r},array:e=>{var r=ar(e.length);return Ce(e,r),r}};var i=Ie(e),s=[],l=0;if(n)for(var u=0;u{var o=!t||t.every((e=>"number"===e||"boolean"===e));return"string"!==r&&o&&!n?Ie(e):function(){return Ye(e,r,t,arguments)}},$e=function(e,r,t,n){e||(e=this),this.parent=e,this.mount=e.mount,this.mounted=null,this.id=Ee.nextInode++,this.name=r,this.mode=t,this.node_ops={},this.stream_ops={},this.rdev=n},We=365,Xe=146;Object.defineProperties($e.prototype,{read:{get:function(){return(this.mode&We)===We},set:function(e){e?this.mode|=We:this.mode&=-366}},write:{get:function(){return(this.mode&Xe)===Xe},set:function(e){e?this.mode|=Xe:this.mode&=-147}},isFolder:{get:function(){return Ee.isDir(this.mode)}},isDevice:{get:function(){return Ee.isChrdev(this.mode)}}}),Ee.FSNode=$e,Ee.createPreloadedFile=(e,r,t,n,o,a,i,s,l,u)=>{var c=r?ue.resolve(se.join2(e,r)):e;function f(t){function f(t){u&&u(),s||((e,r,t,n,o,a)=>{Ee.createDataFile(e,r,t,n,o,a)})(e,r,t,n,o,l),a&&a(),$()}((e,r,t,n)=>{"undefined"!=typeof Browser&&Browser.init();var o=!1;return ge.forEach((a=>{o||a.canHandle(r)&&(a.handle(e,r,t,n),o=!0)})),o})(t,c,f,(()=>{i&&i(),$()}))||f(t)}q(),"string"==typeof t?ve(t,(e=>f(e)),i):f(t)},Ee.staticInit();var Ge={a:(e,r,t,n)=>{W(`Assertion failed: ${ie(e)}, at: `+[r?ie(r):"unknown filename",t,n?ie(n):"unknown function"])},F:function(e,r,t,n){try{if(r=_e.getStr(r),r=_e.calculateAt(e,r),-8&t)return-28;var o=Ee.lookupPath(r,{follow:!0}).node;if(!o)return-44;var a="";return 4&t&&(a+="r"),2&t&&(a+="w"),1&t&&(a+="x"),a&&Ee.nodePermissions(o,a)?-2:0}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return-e.errno}},p:function(e,r,t){_e.varargs=t;try{var n=_e.getStreamFromFD(e);switch(r){case 0:if((o=_e.get())<0)return-28;for(;Ee.streams[o];)o++;return Ee.createStream(n,o).fd;case 1:case 2:case 6:case 7:return 0;case 3:return n.flags;case 4:var o=_e.get();return n.flags|=o,0;case 5:o=_e.getp();return z[o+0>>1]=2,0;case 16:case 8:default:return-28;case 9:return a=28,O[rr()>>2]=a,-1}}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return-e.errno}var a},C:function(e,r){try{if(0===r)return-28;var t=Ee.cwd(),n=fe(t)+1;return r>2]=o.c_iflag||0,O[a+4>>2]=o.c_oflag||0,O[a+8>>2]=o.c_cflag||0,O[a+12>>2]=o.c_lflag||0;for(var i=0;i<32;i++)R[a+i+17>>0]=o.c_cc[i]||0;return 0}return 0;case 21506:case 21507:case 21508:if(!n.tty)return-59;if(n.tty.ops.ioctl_tcsets){a=_e.getp();var s=O[a>>2],l=O[a+4>>2],u=O[a+8>>2],c=O[a+12>>2],f=[];for(i=0;i<32;i++)f.push(R[a+i+17>>0]);return n.tty.ops.ioctl_tcsets(n.tty,r,{c_iflag:s,c_oflag:l,c_cflag:u,c_lflag:c,c_cc:f})}return 0;case 21519:if(!n.tty)return-59;a=_e.getp();return O[a>>2]=0,0;case 21520:return n.tty?-28:-59;case 21531:a=_e.getp();return Ee.ioctl(n,r,a);case 21523:if(!n.tty)return-59;if(n.tty.ops.ioctl_tiocgwinsz){var d=n.tty.ops.ioctl_tiocgwinsz(n.tty);a=_e.getp();z[a>>1]=d[0],z[a+2>>1]=d[1]}return 0;default:return-28}}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return-e.errno}},D:function(e,r,t,n){_e.varargs=n;try{r=_e.getStr(r),r=_e.calculateAt(e,r);var o=n?_e.get():0;return Ee.open(r,t,o).fd}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return-e.errno}},y:function(e){try{return e=_e.getStr(e),Ee.rmdir(e),0}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return-e.errno}},x:function(e,r){try{return e=_e.getStr(e),_e.doStat(Ee.stat,e,r)}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return-e.errno}},z:function(e,r,t){try{return r=_e.getStr(r),r=_e.calculateAt(e,r),0===t?Ee.unlink(r):512===t?Ee.rmdir(r):W("Invalid flags passed to unlinkat"),0}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return-e.errno}},u:()=>{throw 1/0},s:function(e,r,t){var n=Fe(e,r),o=new Date(1e3*n);O[t>>2]=o.getSeconds(),O[t+4>>2]=o.getMinutes(),O[t+8>>2]=o.getHours(),O[t+12>>2]=o.getDate(),O[t+16>>2]=o.getMonth(),O[t+20>>2]=o.getFullYear()-1900,O[t+24>>2]=o.getDay();var a=0|(e=>(ke(e.getFullYear())?Se:De)[e.getMonth()]+e.getDate()-1)(o);O[t+28>>2]=a,O[t+36>>2]=-60*o.getTimezoneOffset();var i=new Date(o.getFullYear(),0,1),s=new Date(o.getFullYear(),6,1).getTimezoneOffset(),l=i.getTimezoneOffset(),u=0|(s!=l&&o.getTimezoneOffset()==Math.min(l,s));O[t+32>>2]=u},w:(e,r,t)=>{var n=(new Date).getFullYear(),o=new Date(n,0,1),a=new Date(n,6,1),i=o.getTimezoneOffset(),s=a.getTimezoneOffset(),l=Math.max(i,s);function u(e){var r=e.toTimeString().match(/\(([A-Za-z ]+)\)$/);return r?r[1]:"GMT"}L[e>>2]=60*l,O[r>>2]=Number(i!=s);var c=u(o),f=u(a),d=Me(c),m=Me(f);s>2]=d,L[t+4>>2]=m):(L[t>>2]=m,L[t+4>>2]=d)},f:()=>{W("")},m:()=>Date.now(),E:(e,r,t)=>T.copyWithin(e,r,r+t),v:e=>{var r=T.length,t=2147483648;if((e>>>=0)>t)return!1;for(var n,o,a=1;a<=4;a*=2){var i=r*(1+.2/a);i=Math.min(i,e+100663296);var s=Math.min(t,(n=Math.max(e,i))+((o=65536)-n%o)%o);if(Ae(s))return!0}return!1},A:(e,r)=>{var t=0;return Pe().forEach(((n,o)=>{var a=r+t;L[e+4*o>>2]=a,((e,r)=>{for(var t=0;t>0]=e.charCodeAt(t);R[r>>0]=0})(n,a),t+=n.length+1})),0},B:(e,r)=>{var t=Pe();L[e>>2]=t.length;var n=0;return t.forEach((e=>n+=e.length+1)),L[r>>2]=n,0},l:ze,o:function(e){try{var r=_e.getStreamFromFD(e);return Ee.close(r),0}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return e.errno}},G:function(e,r,t,n){try{var o=((e,r,t,n)=>{for(var o=0,a=0;a>2],s=L[r+4>>2];r+=8;var l=Ee.read(e,R,i,s,n);if(l<0)return-1;if(o+=l,l>2]=o,0}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return e.errno}},t:function(e,r,t,n,o){var a=Fe(r,t);try{if(isNaN(a))return 61;var i=_e.getStreamFromFD(e);return Ee.llseek(i,a,n),K=[i.position>>>0,(V=i.position,+Math.abs(V)>=1?V>0?+Math.floor(V/4294967296)>>>0:~~+Math.ceil((V-+(~~V>>>0))/4294967296)>>>0:0)],O[o>>2]=K[0],O[o+4>>2]=K[1],i.getdents&&0===a&&0===n&&(i.getdents=null),0}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return e.errno}},n:function(e,r,t,n){try{var o=((e,r,t,n)=>{for(var o=0,a=0;a>2],s=L[r+4>>2];r+=8;var l=Ee.write(e,R,i,s,n);if(l<0)return-1;o+=l,void 0!==n&&(n+=l)}return o})(_e.getStreamFromFD(e),r,t);return L[n>>2]=o,0}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return e.errno}},I:function(e){var r=nr();try{return Ue(e)()}catch(e){if(or(r),e!==e+0)throw e;tr(1,0)}},i:function(e,r){var t=nr();try{return Ue(e)(r)}catch(e){if(or(t),e!==e+0)throw e;tr(1,0)}},d:function(e,r,t){var n=nr();try{return Ue(e)(r,t)}catch(e){if(or(n),e!==e+0)throw e;tr(1,0)}},j:function(e,r,t,n){var o=nr();try{return Ue(e)(r,t,n)}catch(e){if(or(o),e!==e+0)throw e;tr(1,0)}},b:function(e,r,t,n,o){var a=nr();try{return Ue(e)(r,t,n,o)}catch(e){if(or(a),e!==e+0)throw e;tr(1,0)}},c:function(e,r,t,n,o,a){var i=nr();try{return Ue(e)(r,t,n,o,a)}catch(e){if(or(i),e!==e+0)throw e;tr(1,0)}},e:function(e){var r=nr();try{Ue(e)()}catch(e){if(or(r),e!==e+0)throw e;tr(1,0)}},h:function(e,r){var t=nr();try{Ue(e)(r)}catch(e){if(or(t),e!==e+0)throw e;tr(1,0)}},g:function(e,r,t){var n=nr();try{Ue(e)(r,t)}catch(e){if(or(n),e!==e+0)throw e;tr(1,0)}},r:function(e,r,t){return function(e,r){let t=ie(e);if(t.startsWith("/tex/")&&(t=t.substr(5)),t.includes("/"))return 0;const n=r+"/"+t;if(n in c)return 0;if(n in f)return s(me(f[n]));const o=self.texlive_endpoint+n;let i=new XMLHttpRequest;i.open("GET",o,!1),i.timeout=15e4,i.responseType="arraybuffer",console.log("Start downloading texlive file "+o);try{i.send()}catch(e){return console.log("TexLive Download Failed "+o),0}if(200===i.status){let e=i.response;const r=i.getResponseHeader("fileid"),t=a+"/"+r;return Ee.writeFile(t,new Uint8Array(e)),f[n]=t,s(me(t))}return 301===i.status?(console.log("TexLive File not exists "+o),c[n]=1,0):0}(e,r)},q:function(e,r){return kpse_find_pk_impl(e,r)},k:(e,r,t,n)=>{var o=L[n+40>>2],a={tm_sec:O[n>>2],tm_min:O[n+4>>2],tm_hour:O[n+8>>2],tm_mday:O[n+12>>2],tm_mon:O[n+16>>2],tm_year:O[n+20>>2],tm_wday:O[n+24>>2],tm_yday:O[n+28>>2],tm_isdst:O[n+32>>2],tm_gmtoff:O[n+36>>2],tm_zone:o?ie(o):""},i=ie(t),s={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var l in s)i=i.replace(new RegExp(l,"g"),s[l]);var u=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],c=["January","February","March","April","May","June","July","August","September","October","November","December"];function f(e,r,t){for(var n="number"==typeof e?e.toString():e||"";n.length0?1:0}var n;return 0===(n=t(e.getFullYear()-r.getFullYear()))&&0===(n=t(e.getMonth()-r.getMonth()))&&(n=t(e.getDate()-r.getDate())),n}function p(e){switch(e.getDay()){case 0:return new Date(e.getFullYear()-1,11,29);case 1:return e;case 2:return new Date(e.getFullYear(),0,3);case 3:return new Date(e.getFullYear(),0,2);case 4:return new Date(e.getFullYear(),0,1);case 5:return new Date(e.getFullYear()-1,11,31);case 6:return new Date(e.getFullYear()-1,11,30)}}function h(e){var r=((e,r)=>{for(var t=new Date(e.getTime());r>0;){var n=ke(t.getFullYear()),o=t.getMonth(),a=(n?Le:je)[o];if(!(r>a-t.getDate()))return t.setDate(t.getDate()+r),t;r-=a-t.getDate()+1,t.setDate(1),o<11?t.setMonth(o+1):(t.setMonth(0),t.setFullYear(t.getFullYear()+1))}return t})(new Date(e.tm_year+1900,0,1),e.tm_yday),t=new Date(r.getFullYear(),0,4),n=new Date(r.getFullYear()+1,0,4),o=p(t),a=p(n);return m(o,r)<=0?m(a,r)<=0?r.getFullYear()+1:r.getFullYear():r.getFullYear()-1}var w={"%a":e=>u[e.tm_wday].substring(0,3),"%A":e=>u[e.tm_wday],"%b":e=>c[e.tm_mon].substring(0,3),"%B":e=>c[e.tm_mon],"%C":e=>d((e.tm_year+1900)/100|0,2),"%d":e=>d(e.tm_mday,2),"%e":e=>f(e.tm_mday,2," "),"%g":e=>h(e).toString().substring(2),"%G":e=>h(e),"%H":e=>d(e.tm_hour,2),"%I":e=>{var r=e.tm_hour;return 0==r?r=12:r>12&&(r-=12),d(r,2)},"%j":e=>d(e.tm_mday+((e,r)=>{for(var t=0,n=0;n<=r;t+=e[n++]);return t})(ke(e.tm_year+1900)?Le:je,e.tm_mon-1),3),"%m":e=>d(e.tm_mon+1,2),"%M":e=>d(e.tm_min,2),"%n":()=>"\n","%p":e=>e.tm_hour>=0&&e.tm_hour<12?"AM":"PM","%S":e=>d(e.tm_sec,2),"%t":()=>"\t","%u":e=>e.tm_wday||7,"%U":e=>{var r=e.tm_yday+7-e.tm_wday;return d(Math.floor(r/7),2)},"%V":e=>{var r=Math.floor((e.tm_yday+7-(e.tm_wday+6)%7)/7);if((e.tm_wday+371-e.tm_yday-2)%7<=2&&r++,r){if(53==r){var t=(e.tm_wday+371-e.tm_yday)%7;4==t||3==t&&ke(e.tm_year)||(r=1)}}else{r=52;var n=(e.tm_wday+7-e.tm_yday-1)%7;(4==n||5==n&&ke(e.tm_year%400-1))&&r++}return d(r,2)},"%w":e=>e.tm_wday,"%W":e=>{var r=e.tm_yday+7-(e.tm_wday+6)%7;return d(Math.floor(r/7),2)},"%y":e=>(e.tm_year+1900).toString().substring(2),"%Y":e=>e.tm_year+1900,"%z":e=>{var r=e.tm_gmtoff,t=r>=0;return r=(r=Math.abs(r)/60)/60*100+r%60,(t?"+":"-")+String("0000"+r).slice(-4)},"%Z":e=>e.tm_zone,"%%":()=>"%"};for(var l in i=i.replace(/%%/g,"\0\0"),w)i.includes(l)&&(i=i.replace(new RegExp(l,"g"),w[l](a)));var v=me(i=i.replace(/\0\0/g,"%"),!1);return v.length>r?0:(Ce(v,e),v.length-1)}},Ve=function(){var e,t,n,o={a:Ge};function a(e,r){var t;return Ve=e.exports,F=Ve.J,C(),Oe=Ve.R,t=Ve.K,H.unshift(t),$(),Ve}if(q(),r.instantiateWasm)try{return r.instantiateWasm(o,a)}catch(e){return A(`Module.instantiateWasm callback failed with error: ${e}`),!1}return e=X,t=o,n=function(e){a(e.instance)},D||"function"!=typeof WebAssembly.instantiateStreaming||J(e)||Z(e)||_||"function"!=typeof fetch?ee(e,t,n):fetch(e,{credentials:"same-origin"}).then((r=>WebAssembly.instantiateStreaming(r,t).then(n,(function(r){return A(`wasm streaming compile failed: ${r}`),A("falling back to ArrayBuffer instantiation"),ee(e,t,n)})))),{}}(),Ke=e=>(Ke=Ve.L)(e),Je=r._compileLaTeX=()=>(Je=r._compileLaTeX=Ve.M)();r._compileFormat=()=>(r._compileFormat=Ve.N)();var Ze=r._compileBibtex=()=>(Ze=r._compileBibtex=Ve.O)();r._setMainEntry=e=>(r._setMainEntry=Ve.P)(e);var Qe,er=r._main=(e,t)=>(er=r._main=Ve.Q)(e,t),rr=()=>(rr=Ve.S)(),tr=(e,r)=>(tr=Ve.T)(e,r),nr=()=>(nr=Ve.U)(),or=e=>(or=Ve.V)(e),ar=e=>(ar=Ve.W)(e);function ir(e=w){function t(){Qe||(Qe=!0,r.calledRun=!0,j||(r.noFSInit||Ee.init.initialized||Ee.init(),Ee.ignorePermissions=!1,te(H),te(B),r.onRuntimeInitialized&&r.onRuntimeInitialized(),sr&&function(e=[]){var r=er;e.unshift(v);var t=e.length,n=ar(4*(t+1)),o=n;e.forEach((e=>{L[o>>2]=He(e),o+=4})),L[o>>2]=0;try{var a=r(t,n);return Te(a,!0),a}catch(e){return Ne(e)}}(e),function(){if(r.postRun)for("function"==typeof r.postRun&&(r.postRun=[r.postRun]);r.postRun.length;)e=r.postRun.shift(),U.unshift(e);var e;te(U)}()))}I>0||(!function(){if(r.preRun)for("function"==typeof r.preRun&&(r.preRun=[r.preRun]);r.preRun.length;)e=r.preRun.shift(),N.unshift(e);var e;te(N)}(),I>0||(r.setStatus?(r.setStatus("Running..."),setTimeout((function(){setTimeout((function(){r.setStatus("")}),1),t()}),1)):t()))}if(r.cwrap=qe,Y=function e(){Qe||ir(),Qe||(Y=e)},r.preInit)for("function"==typeof r.preInit&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();var sr=!0;r.noInitialRun&&(sr=!1),ir()}(s),a(s.exports)})); diff --git a/public/swiftlatexpdftex.wasm b/public/swiftlatexpdftex.wasm new file mode 100644 index 00000000..ad8ca365 Binary files /dev/null and b/public/swiftlatexpdftex.wasm differ diff --git a/public/swiftlatexxetex.js b/public/swiftlatexxetex.js new file mode 100644 index 00000000..0cf0f7b8 --- /dev/null +++ b/public/swiftlatexxetex.js @@ -0,0 +1,6 @@ +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r(require("fs"),require("path")):"function"==typeof define&&define.amd?define(["fs","path"],r):((e="undefined"!=typeof globalThis?globalThis:e||self)["native/xetex"]=e["native/xetex"]||{},e["native/xetex"]["wasm/swiftlatexxetex"]=e["native/xetex"]["wasm/swiftlatexxetex"]||{},e["native/xetex"]["wasm/swiftlatexxetex"].js=r(e.require$$1,e.require$$2))}(this,(function(e,r){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=t(e),o=t(r);function a(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function i(e){if(e.__esModule)return e;var r=e.default;if("function"==typeof r){var t=function e(){return this instanceof e?Reflect.construct(r,arguments,this.constructor):r.apply(this,arguments)};t.prototype=r.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(e).forEach((function(r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})})),t}var s={exports:{}}; +/** + * @license + * Copyright 2019 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */const l=Symbol("Comlink.proxy"),u=Symbol("Comlink.endpoint"),c=Symbol("Comlink.releaseProxy"),f=Symbol("Comlink.finalizer"),d=Symbol("Comlink.thrown"),m=e=>"object"==typeof e&&null!==e||"function"==typeof e,p=new Map([["proxy",{canHandle:e=>m(e)&&e[l],serialize(e){const{port1:r,port2:t}=new MessageChannel;return h(e,r),[t,[t]]},deserialize:e=>(e.start(),v(e))}],["throw",{canHandle:e=>m(e)&&d in e,serialize({value:e}){let r;return r=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[r,[]]},deserialize(e){if(e.isError)throw Object.assign(new Error(e.value.message),e.value);throw e.value}}]]);function h(e,r=globalThis,t=["*"]){r.addEventListener("message",(function n(o){if(!o||!o.data)return;if(!function(e,r){for(const t of e){if(r===t||"*"===t)return!0;if(t instanceof RegExp&&t.test(r))return!0}return!1}(t,o.origin))return void console.warn(`Invalid origin '${o.origin}' for comlink proxy`);const{id:a,type:i,path:s}=Object.assign({path:[]},o.data),l=(o.data.argumentList||[]).map(x);let u;try{const r=s.slice(0,-1).reduce(((e,r)=>e[r]),e),t=s.reduce(((e,r)=>e[r]),e);switch(i){case"GET":u=t;break;case"SET":r[s.slice(-1)[0]]=x(o.data.value),u=!0;break;case"APPLY":u=t.apply(r,l);break;case"CONSTRUCT":u=F(new t(...l));break;case"ENDPOINT":{const{port1:r,port2:t}=new MessageChannel;h(e,t),u=D(r,[r])}break;case"RELEASE":u=void 0;break;default:return}}catch(e){u={value:e,[d]:0}}Promise.resolve(u).catch((e=>({value:e,[d]:0}))).then((t=>{const[o,s]=M(t);r.postMessage(Object.assign(Object.assign({},o),{id:a}),s),"RELEASE"===i&&(r.removeEventListener("message",n),w(r),f in e&&"function"==typeof e[f]&&e[f]())})).catch((e=>{const[t,n]=M({value:new TypeError("Unserializable return value"),[d]:0});r.postMessage(Object.assign(Object.assign({},t),{id:a}),n)}))})),r.start&&r.start()}function w(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function v(e,r){return b(e,[],r)}function g(e){if(e)throw new Error("Proxy has been released and is not useable")}function y(e){return A(e,{type:"RELEASE"}).then((()=>{w(e)}))}const E=new WeakMap,_="FinalizationRegistry"in globalThis&&new FinalizationRegistry((e=>{const r=(E.get(e)||0)-1;E.set(e,r),0===r&&y(e)}));function b(e,r=[],t=function(){}){let n=!1;const o=new Proxy(t,{get(t,a){if(g(n),a===c)return()=>{!function(e){_&&_.unregister(e)}(o),y(e),n=!0};if("then"===a){if(0===r.length)return{then:()=>o};const t=A(e,{type:"GET",path:r.map((e=>e.toString()))}).then(x);return t.then.bind(t)}return b(e,[...r,a])},set(t,o,a){g(n);const[i,s]=M(a);return A(e,{type:"SET",path:[...r,o].map((e=>e.toString())),value:i},s).then(x)},apply(t,o,a){g(n);const i=r[r.length-1];if(i===u)return A(e,{type:"ENDPOINT"}).then(x);if("bind"===i)return b(e,r.slice(0,-1));const[s,l]=k(a);return A(e,{type:"APPLY",path:r.map((e=>e.toString())),argumentList:s},l).then(x)},construct(t,o){g(n);const[a,i]=k(o);return A(e,{type:"CONSTRUCT",path:r.map((e=>e.toString())),argumentList:a},i).then(x)}});return function(e,r){const t=(E.get(r)||0)+1;E.set(r,t),_&&_.register(e,r,e)}(o,e),o}function k(e){const r=e.map(M);return[r.map((e=>e[0])),(t=r.map((e=>e[1])),Array.prototype.concat.apply([],t))];var t}const S=new WeakMap;function D(e,r){return S.set(e,r),e}function F(e){return Object.assign(e,{[l]:!0})}function M(e){for(const[r,t]of p)if(t.canHandle(e)){const[n,o]=t.serialize(e);return[{type:"HANDLER",name:r,value:n},o]}return[{type:"RAW",value:e},S.get(e)||[]]}function x(e){switch(e.type){case"HANDLER":return p.get(e.name).deserialize(e.value);case"RAW":return e.value}}function A(e,r,t){return new Promise((n=>{const o=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");e.addEventListener("message",(function r(t){t.data&&t.data.id&&t.data.id===o&&(e.removeEventListener("message",r),n(t.data))})),e.start&&e.start(),e.postMessage(Object.assign({id:o},r),t)}))}var P=i(Object.freeze({__proto__:null,createEndpoint:u,expose:h,finalizer:f,proxy:F,proxyMarker:l,releaseProxy:c,transfer:D,transferHandlers:p,windowEndpoint:function(e,r=globalThis,t="*"){return{postMessage:(r,n)=>e.postMessage(r,t,n),addEventListener:r.addEventListener.bind(r),removeEventListener:r.removeEventListener.bind(r)}},wrap:v}));return function(e){var r=void 0!==r?r:{};const t=P,a="/tex",i="/work";self.memlog="",self.initmem=void 0,self.mainfile="main.tex",self.texlive_endpoint=void 0,self.extension=void 0;r={print(e){self.memlog+=e+"\n"},printErr(e){self.memlog+=e+"\n",console.log(e)},preRun(){Ee.mkdir(a),Ee.mkdir(i)},postRun(){var e,r;self.postMessage("wasm_initialized"),self.initmem=(e=F.buffer,(r=new Uint8Array(e.byteLength)).set(new Uint8Array(e)),r)},onAbort(){self.memlog+="Engine crashed",console.error("full log",self.memlog)}};function s(e){let r=Je(e.length);return T.set(new Uint8Array(e),r),r}function l(){self.memlog="",self.initmem&&new Uint8Array(F.buffer).set(self.initmem),function(){for(var e=0;e{throw r},y="object"==typeof window,E="function"==typeof importScripts,_="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,b="";if(_){var k=n.default,S=o.default;b=E?S.dirname(b)+"/":__dirname+"/",d=(e,r)=>(e=Z(e)?new URL(e):S.normalize(e),k.readFileSync(e,r?void 0:"utf8")),p=e=>{var r=d(e,!0);return r.buffer||(r=new Uint8Array(r)),r},m=(e,r,t,n=!0)=>{e=Z(e)?new URL(e):S.normalize(e),k.readFile(e,n?void 0:"utf8",((e,o)=>{e?t(e):r(n?o.buffer:o)}))},!r.thisProgram&&process.argv.length>1&&(v=process.argv[1].replace(/\\/g,"/")),w=process.argv.slice(2),e.exports=r,process.on("uncaughtException",(e=>{if(!("unwind"===e||e instanceof re||e.context instanceof re))throw e})),g=(e,r)=>{throw process.exitCode=e,r},r.inspect=()=>"[Emscripten Module object]"}else(y||E)&&(E?b=self.location.href:"undefined"!=typeof document&&document.currentScript&&(b=document.currentScript.src),b=0!==b.indexOf("blob:")?b.substr(0,b.replace(/[?#].*/,"").lastIndexOf("/")+1):"",d=e=>{var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},E&&(p=e=>{var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),m=(e,r,t)=>{var n=new XMLHttpRequest;n.open("GET",e,!0),n.responseType="arraybuffer",n.onload=()=>{200==n.status||0==n.status&&n.response?r(n.response):t()},n.onerror=t,n.send(null)});var D,F,M=r.print||console.log.bind(console),x=r.printErr||console.error.bind(console);Object.assign(r,h),h=null,r.arguments&&(w=r.arguments),r.thisProgram&&(v=r.thisProgram),r.quit&&(g=r.quit),r.wasmBinary&&(D=r.wasmBinary),"object"!=typeof WebAssembly&&W("no native wasm support detected");var A,R,T,z,O,L,j=!1;function N(){var e=F.buffer;r.HEAP8=R=new Int8Array(e),r.HEAP16=z=new Int16Array(e),r.HEAPU8=T=new Uint8Array(e),r.HEAPU16=new Uint16Array(e),r.HEAP32=O=new Int32Array(e),r.HEAPU32=L=new Uint32Array(e),r.HEAPF32=new Float32Array(e),r.HEAPF64=new Float64Array(e)}var C=[],H=[],B=[],U=[];var I=0,Y=null;function q(e){I++,r.monitorRunDependencies&&r.monitorRunDependencies(I)}function $(e){if(I--,r.monitorRunDependencies&&r.monitorRunDependencies(I),0==I&&Y){var t=Y;Y=null,t()}}function W(e){throw r.onAbort&&r.onAbort(e),x(e="Aborted("+e+")"),j=!0,A=1,e+=". Build with -sASSERTIONS for more info.",new WebAssembly.RuntimeError(e)}var X,G,V,K,J=e=>e.startsWith("data:application/octet-stream;base64,"),Z=e=>e.startsWith("file://");function Q(e){if(e==X&&D)return new Uint8Array(D);if(p)return p(e);throw"both async and sync fetching of the wasm failed"}function ee(e,r,t){return function(e){if(!D&&(y||E)){if("function"==typeof fetch&&!Z(e))return fetch(e,{credentials:"same-origin"}).then((r=>{if(!r.ok)throw"failed to load wasm binary file at '"+e+"'";return r.arrayBuffer()})).catch((()=>Q(e)));if(m)return new Promise(((r,t)=>{m(e,(e=>r(new Uint8Array(e))),t)}))}return Promise.resolve().then((()=>Q(e)))}(e).then((e=>WebAssembly.instantiate(e,r))).then((e=>e)).then(t,(e=>{x(`failed to asynchronously prepare wasm: ${e}`),W(e)}))}function re(e){this.name="ExitStatus",this.message=`Program terminated with exit(${e})`,this.status=e}J(X="swiftlatexxetex.wasm")||(G=X,X=r.locateFile?r.locateFile(G,b):b+G);var te=e=>{for(;e.length>0;)e.shift()(r)},ne=r.noExitRuntime||!0,oe="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,ae=(e,r,t)=>{for(var n=r+t,o=r;e[o]&&!(o>=n);)++o;if(o-r>16&&e.buffer&&oe)return oe.decode(e.subarray(r,o));for(var a="";r>10,56320|1023&u)}}else a+=String.fromCharCode((31&i)<<6|s)}else a+=String.fromCharCode(i)}return a},ie=(e,r)=>e?ae(T,e,r):"",se={isAbs:e=>"/"===e.charAt(0),splitPath:e=>/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1),normalizeArray:(e,r)=>{for(var t=0,n=e.length-1;n>=0;n--){var o=e[n];"."===o?e.splice(n,1):".."===o?(e.splice(n,1),t++):t&&(e.splice(n,1),t--)}if(r)for(;t;t--)e.unshift("..");return e},normalize:e=>{var r=se.isAbs(e),t="/"===e.substr(-1);return(e=se.normalizeArray(e.split("/").filter((e=>!!e)),!r).join("/"))||r||(e="."),e&&t&&(e+="/"),(r?"/":"")+e},dirname:e=>{var r=se.splitPath(e),t=r[0],n=r[1];return t||n?(n&&(n=n.substr(0,n.length-1)),t+n):"."},basename:e=>{if("/"===e)return"/";var r=(e=(e=se.normalize(e)).replace(/\/$/,"")).lastIndexOf("/");return-1===r?e:e.substr(r+1)},join:function(){var e=Array.prototype.slice.call(arguments);return se.normalize(e.join("/"))},join2:(e,r)=>se.normalize(e+"/"+r)},le=e=>(le=(()=>{if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues)return e=>crypto.getRandomValues(e);if(_)try{var e=require("crypto");if(e.randomFillSync)return r=>e.randomFillSync(r);var r=e.randomBytes;return e=>(e.set(r(e.byteLength)),e)}catch(e){}W("initRandomDevice")})())(e),ue={resolve:function(){for(var e="",r=!1,t=arguments.length-1;t>=-1&&!r;t--){var n=t>=0?arguments[t]:Ee.cwd();if("string"!=typeof n)throw new TypeError("Arguments to path.resolve must be strings");if(!n)return"";e=n+"/"+e,r=se.isAbs(n)}return(r?"/":"")+(e=se.normalizeArray(e.split("/").filter((e=>!!e)),!r).join("/"))||"."},relative:(e,r)=>{function t(e){for(var r=0;r=0&&""===e[t];t--);return r>t?[]:e.slice(r,t-r+1)}e=ue.resolve(e).substr(1),r=ue.resolve(r).substr(1);for(var n=t(e.split("/")),o=t(r.split("/")),a=Math.min(n.length,o.length),i=a,s=0;s{for(var r=0,t=0;t=55296&&n<=57343?(r+=4,++t):r+=3}return r},de=(e,r,t,n)=>{if(!(n>0))return 0;for(var o=t,a=t+n-1,i=0;i=55296&&s<=57343)s=65536+((1023&s)<<10)|1023&e.charCodeAt(++i);if(s<=127){if(t>=a)break;r[t++]=s}else if(s<=2047){if(t+1>=a)break;r[t++]=192|s>>6,r[t++]=128|63&s}else if(s<=65535){if(t+2>=a)break;r[t++]=224|s>>12,r[t++]=128|s>>6&63,r[t++]=128|63&s}else{if(t+3>=a)break;r[t++]=240|s>>18,r[t++]=128|s>>12&63,r[t++]=128|s>>6&63,r[t++]=128|63&s}}return r[t]=0,t-o};function me(e,r,t){var n=t>0?t:fe(e)+1,o=new Array(n),a=de(e,o,0,o.length);return r&&(o.length=a),o}var pe={ttys:[],init(){},shutdown(){},register(e,r){pe.ttys[e]={input:[],output:[],ops:r},Ee.registerDevice(e,pe.stream_ops)},stream_ops:{open(e){var r=pe.ttys[e.node.rdev];if(!r)throw new Ee.ErrnoError(43);e.tty=r,e.seekable=!1},close(e){e.tty.ops.fsync(e.tty)},fsync(e){e.tty.ops.fsync(e.tty)},read(e,r,t,n,o){if(!e.tty||!e.tty.ops.get_char)throw new Ee.ErrnoError(60);for(var a=0,i=0;i(()=>{if(!ce.length){var e=null;if(_){var r=Buffer.alloc(256),t=0,n=process.stdin.fd;try{t=k.readSync(n,r)}catch(e){if(!e.toString().includes("EOF"))throw e;t=0}e=t>0?r.slice(0,t).toString("utf-8"):null}else"undefined"!=typeof window&&"function"==typeof window.prompt?null!==(e=window.prompt("Input: "))&&(e+="\n"):"function"==typeof readline&&null!==(e=readline())&&(e+="\n");if(!e)return null;ce=me(e,!0)}return ce.shift()})(),put_char(e,r){null===r||10===r?(M(ae(e.output,0)),e.output=[]):0!=r&&e.output.push(r)},fsync(e){e.output&&e.output.length>0&&(M(ae(e.output,0)),e.output=[])},ioctl_tcgets:e=>({c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}),ioctl_tcsets:(e,r,t)=>0,ioctl_tiocgwinsz:e=>[24,80]},default_tty1_ops:{put_char(e,r){null===r||10===r?(x(ae(e.output,0)),e.output=[]):0!=r&&e.output.push(r)},fsync(e){e.output&&e.output.length>0&&(x(ae(e.output,0)),e.output=[])}}},he=e=>{e=((e,r)=>Math.ceil(e/r)*r)(e,65536);var r=nr(65536,e);return r?((e,r)=>(T.fill(0,e,e+r),e))(r,e):0},we={ops_table:null,mount:e=>we.createNode(null,"/",16895,0),createNode(e,r,t,n){if(Ee.isBlkdev(t)||Ee.isFIFO(t))throw new Ee.ErrnoError(63);we.ops_table||(we.ops_table={dir:{node:{getattr:we.node_ops.getattr,setattr:we.node_ops.setattr,lookup:we.node_ops.lookup,mknod:we.node_ops.mknod,rename:we.node_ops.rename,unlink:we.node_ops.unlink,rmdir:we.node_ops.rmdir,readdir:we.node_ops.readdir,symlink:we.node_ops.symlink},stream:{llseek:we.stream_ops.llseek}},file:{node:{getattr:we.node_ops.getattr,setattr:we.node_ops.setattr},stream:{llseek:we.stream_ops.llseek,read:we.stream_ops.read,write:we.stream_ops.write,allocate:we.stream_ops.allocate,mmap:we.stream_ops.mmap,msync:we.stream_ops.msync}},link:{node:{getattr:we.node_ops.getattr,setattr:we.node_ops.setattr,readlink:we.node_ops.readlink},stream:{}},chrdev:{node:{getattr:we.node_ops.getattr,setattr:we.node_ops.setattr},stream:Ee.chrdev_stream_ops}});var o=Ee.createNode(e,r,t,n);return Ee.isDir(o.mode)?(o.node_ops=we.ops_table.dir.node,o.stream_ops=we.ops_table.dir.stream,o.contents={}):Ee.isFile(o.mode)?(o.node_ops=we.ops_table.file.node,o.stream_ops=we.ops_table.file.stream,o.usedBytes=0,o.contents=null):Ee.isLink(o.mode)?(o.node_ops=we.ops_table.link.node,o.stream_ops=we.ops_table.link.stream):Ee.isChrdev(o.mode)&&(o.node_ops=we.ops_table.chrdev.node,o.stream_ops=we.ops_table.chrdev.stream),o.timestamp=Date.now(),e&&(e.contents[r]=o,e.timestamp=o.timestamp),o},getFileDataAsTypedArray:e=>e.contents?e.contents.subarray?e.contents.subarray(0,e.usedBytes):new Uint8Array(e.contents):new Uint8Array(0),expandFileStorage(e,r){var t=e.contents?e.contents.length:0;if(!(t>=r)){r=Math.max(r,t*(t<1048576?2:1.125)>>>0),0!=t&&(r=Math.max(r,256));var n=e.contents;e.contents=new Uint8Array(r),e.usedBytes>0&&e.contents.set(n.subarray(0,e.usedBytes),0)}},resizeFileStorage(e,r){if(e.usedBytes!=r)if(0==r)e.contents=null,e.usedBytes=0;else{var t=e.contents;e.contents=new Uint8Array(r),t&&e.contents.set(t.subarray(0,Math.min(r,e.usedBytes))),e.usedBytes=r}},node_ops:{getattr(e){var r={};return r.dev=Ee.isChrdev(e.mode)?e.id:1,r.ino=e.id,r.mode=e.mode,r.nlink=1,r.uid=0,r.gid=0,r.rdev=e.rdev,Ee.isDir(e.mode)?r.size=4096:Ee.isFile(e.mode)?r.size=e.usedBytes:Ee.isLink(e.mode)?r.size=e.link.length:r.size=0,r.atime=new Date(e.timestamp),r.mtime=new Date(e.timestamp),r.ctime=new Date(e.timestamp),r.blksize=4096,r.blocks=Math.ceil(r.size/r.blksize),r},setattr(e,r){void 0!==r.mode&&(e.mode=r.mode),void 0!==r.timestamp&&(e.timestamp=r.timestamp),void 0!==r.size&&we.resizeFileStorage(e,r.size)},lookup(e,r){throw Ee.genericErrors[44]},mknod:(e,r,t,n)=>we.createNode(e,r,t,n),rename(e,r,t){if(Ee.isDir(e.mode)){var n;try{n=Ee.lookupNode(r,t)}catch(e){}if(n)for(var o in n.contents)throw new Ee.ErrnoError(55)}delete e.parent.contents[e.name],e.parent.timestamp=Date.now(),e.name=t,r.contents[t]=e,r.timestamp=e.parent.timestamp,e.parent=r},unlink(e,r){delete e.contents[r],e.timestamp=Date.now()},rmdir(e,r){var t=Ee.lookupNode(e,r);for(var n in t.contents)throw new Ee.ErrnoError(55);delete e.contents[r],e.timestamp=Date.now()},readdir(e){var r=[".",".."];for(var t in e.contents)e.contents.hasOwnProperty(t)&&r.push(t);return r},symlink(e,r,t){var n=we.createNode(e,r,41471,0);return n.link=t,n},readlink(e){if(!Ee.isLink(e.mode))throw new Ee.ErrnoError(28);return e.link}},stream_ops:{read(e,r,t,n,o){var a=e.node.contents;if(o>=e.node.usedBytes)return 0;var i=Math.min(e.node.usedBytes-o,n);if(i>8&&a.subarray)r.set(a.subarray(o,o+i),t);else for(var s=0;s0||t+r(we.stream_ops.write(e,r,0,n,t,!1),0)}},ve=(e,r,t,n)=>{var o=n?"":`al ${e}`;m(e,(t=>{var n;n=`Loading data file "${e}" failed (no arrayBuffer).`,t||W(n),r(new Uint8Array(t)),o&&$()}),(r=>{if(!t)throw`Loading data file "${e}" failed.`;t()})),o&&q()},ge=r.preloadPlugins||[],ye=(e,r)=>{var t=0;return e&&(t|=365),r&&(t|=146),t},Ee={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath(e,r={}){if(!(e=ue.resolve(e)))return{path:"",node:null};if((r=Object.assign({follow_mount:!0,recurse_count:0},r)).recurse_count>8)throw new Ee.ErrnoError(32);for(var t=e.split("/").filter((e=>!!e)),n=Ee.root,o="/",a=0;a40)throw new Ee.ErrnoError(32)}}return{path:o,node:n}},getPath(e){for(var r;;){if(Ee.isRoot(e)){var t=e.mount.mountpoint;return r?"/"!==t[t.length-1]?`${t}/${r}`:t+r:t}r=r?`${e.name}/${r}`:e.name,e=e.parent}},hashName(e,r){for(var t=0,n=0;n>>0)%Ee.nameTable.length},hashAddNode(e){var r=Ee.hashName(e.parent.id,e.name);e.name_next=Ee.nameTable[r],Ee.nameTable[r]=e},hashRemoveNode(e){var r=Ee.hashName(e.parent.id,e.name);if(Ee.nameTable[r]===e)Ee.nameTable[r]=e.name_next;else for(var t=Ee.nameTable[r];t;){if(t.name_next===e){t.name_next=e.name_next;break}t=t.name_next}},lookupNode(e,r){var t=Ee.mayLookup(e);if(t)throw new Ee.ErrnoError(t,e);for(var n=Ee.hashName(e.id,r),o=Ee.nameTable[n];o;o=o.name_next){var a=o.name;if(o.parent.id===e.id&&a===r)return o}return Ee.lookup(e,r)},createNode(e,r,t,n){var o=new Ee.FSNode(e,r,t,n);return Ee.hashAddNode(o),o},destroyNode(e){Ee.hashRemoveNode(e)},isRoot:e=>e===e.parent,isMountpoint:e=>!!e.mounted,isFile:e=>32768==(61440&e),isDir:e=>16384==(61440&e),isLink:e=>40960==(61440&e),isChrdev:e=>8192==(61440&e),isBlkdev:e=>24576==(61440&e),isFIFO:e=>4096==(61440&e),isSocket:e=>49152==(49152&e),flagsToPermissionString(e){var r=["r","w","rw"][3&e];return 512&e&&(r+="w"),r},nodePermissions:(e,r)=>Ee.ignorePermissions||(!r.includes("r")||292&e.mode)&&(!r.includes("w")||146&e.mode)&&(!r.includes("x")||73&e.mode)?0:2,mayLookup(e){var r=Ee.nodePermissions(e,"x");return r||(e.node_ops.lookup?0:2)},mayCreate(e,r){try{Ee.lookupNode(e,r);return 20}catch(e){}return Ee.nodePermissions(e,"wx")},mayDelete(e,r,t){var n;try{n=Ee.lookupNode(e,r)}catch(e){return e.errno}var o=Ee.nodePermissions(e,"wx");if(o)return o;if(t){if(!Ee.isDir(n.mode))return 54;if(Ee.isRoot(n)||Ee.getPath(n)===Ee.cwd())return 10}else if(Ee.isDir(n.mode))return 31;return 0},mayOpen:(e,r)=>e?Ee.isLink(e.mode)?32:Ee.isDir(e.mode)&&("r"!==Ee.flagsToPermissionString(r)||512&r)?31:Ee.nodePermissions(e,Ee.flagsToPermissionString(r)):44,MAX_OPEN_FDS:4096,nextfd(){for(var e=0;e<=Ee.MAX_OPEN_FDS;e++)if(!Ee.streams[e])return e;throw new Ee.ErrnoError(33)},getStreamChecked(e){var r=Ee.getStream(e);if(!r)throw new Ee.ErrnoError(8);return r},getStream:e=>Ee.streams[e],createStream:(e,r=-1)=>(Ee.FSStream||(Ee.FSStream=function(){this.shared={}},Ee.FSStream.prototype={},Object.defineProperties(Ee.FSStream.prototype,{object:{get(){return this.node},set(e){this.node=e}},isRead:{get(){return 1!=(2097155&this.flags)}},isWrite:{get(){return 0!=(2097155&this.flags)}},isAppend:{get(){return 1024&this.flags}},flags:{get(){return this.shared.flags},set(e){this.shared.flags=e}},position:{get(){return this.shared.position},set(e){this.shared.position=e}}})),e=Object.assign(new Ee.FSStream,e),-1==r&&(r=Ee.nextfd()),e.fd=r,Ee.streams[r]=e,e),closeStream(e){Ee.streams[e]=null},chrdev_stream_ops:{open(e){var r=Ee.getDevice(e.node.rdev);e.stream_ops=r.stream_ops,e.stream_ops.open&&e.stream_ops.open(e)},llseek(){throw new Ee.ErrnoError(70)}},major:e=>e>>8,minor:e=>255&e,makedev:(e,r)=>e<<8|r,registerDevice(e,r){Ee.devices[e]={stream_ops:r}},getDevice:e=>Ee.devices[e],getMounts(e){for(var r=[],t=[e];t.length;){var n=t.pop();r.push(n),t.push.apply(t,n.mounts)}return r},syncfs(e,r){"function"==typeof e&&(r=e,e=!1),Ee.syncFSRequests++,Ee.syncFSRequests>1&&x(`warning: ${Ee.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var t=Ee.getMounts(Ee.root.mount),n=0;function o(e){return Ee.syncFSRequests--,r(e)}function a(e){if(e)return a.errored?void 0:(a.errored=!0,o(e));++n>=t.length&&o(null)}t.forEach((r=>{if(!r.type.syncfs)return a(null);r.type.syncfs(r,e,a)}))},mount(e,r,t){var n,o="/"===t,a=!t;if(o&&Ee.root)throw new Ee.ErrnoError(10);if(!o&&!a){var i=Ee.lookupPath(t,{follow_mount:!1});if(t=i.path,n=i.node,Ee.isMountpoint(n))throw new Ee.ErrnoError(10);if(!Ee.isDir(n.mode))throw new Ee.ErrnoError(54)}var s={type:e,opts:r,mountpoint:t,mounts:[]},l=e.mount(s);return l.mount=s,s.root=l,o?Ee.root=l:n&&(n.mounted=s,n.mount&&n.mount.mounts.push(s)),l},unmount(e){var r=Ee.lookupPath(e,{follow_mount:!1});if(!Ee.isMountpoint(r.node))throw new Ee.ErrnoError(28);var t=r.node,n=t.mounted,o=Ee.getMounts(n);Object.keys(Ee.nameTable).forEach((e=>{for(var r=Ee.nameTable[e];r;){var t=r.name_next;o.includes(r.mount)&&Ee.destroyNode(r),r=t}})),t.mounted=null;var a=t.mount.mounts.indexOf(n);t.mount.mounts.splice(a,1)},lookup:(e,r)=>e.node_ops.lookup(e,r),mknod(e,r,t){var n=Ee.lookupPath(e,{parent:!0}).node,o=se.basename(e);if(!o||"."===o||".."===o)throw new Ee.ErrnoError(28);var a=Ee.mayCreate(n,o);if(a)throw new Ee.ErrnoError(a);if(!n.node_ops.mknod)throw new Ee.ErrnoError(63);return n.node_ops.mknod(n,o,r,t)},create:(e,r)=>(r=void 0!==r?r:438,r&=4095,r|=32768,Ee.mknod(e,r,0)),mkdir:(e,r)=>(r=void 0!==r?r:511,r&=1023,r|=16384,Ee.mknod(e,r,0)),mkdirTree(e,r){for(var t=e.split("/"),n="",o=0;o(void 0===t&&(t=r,r=438),r|=8192,Ee.mknod(e,r,t)),symlink(e,r){if(!ue.resolve(e))throw new Ee.ErrnoError(44);var t=Ee.lookupPath(r,{parent:!0}).node;if(!t)throw new Ee.ErrnoError(44);var n=se.basename(r),o=Ee.mayCreate(t,n);if(o)throw new Ee.ErrnoError(o);if(!t.node_ops.symlink)throw new Ee.ErrnoError(63);return t.node_ops.symlink(t,n,e)},rename(e,r){var t,n,o=se.dirname(e),a=se.dirname(r),i=se.basename(e),s=se.basename(r);if(t=Ee.lookupPath(e,{parent:!0}).node,n=Ee.lookupPath(r,{parent:!0}).node,!t||!n)throw new Ee.ErrnoError(44);if(t.mount!==n.mount)throw new Ee.ErrnoError(75);var l,u=Ee.lookupNode(t,i),c=ue.relative(e,a);if("."!==c.charAt(0))throw new Ee.ErrnoError(28);if("."!==(c=ue.relative(r,o)).charAt(0))throw new Ee.ErrnoError(55);try{l=Ee.lookupNode(n,s)}catch(e){}if(u!==l){var f=Ee.isDir(u.mode),d=Ee.mayDelete(t,i,f);if(d)throw new Ee.ErrnoError(d);if(d=l?Ee.mayDelete(n,s,f):Ee.mayCreate(n,s))throw new Ee.ErrnoError(d);if(!t.node_ops.rename)throw new Ee.ErrnoError(63);if(Ee.isMountpoint(u)||l&&Ee.isMountpoint(l))throw new Ee.ErrnoError(10);if(n!==t&&(d=Ee.nodePermissions(t,"w")))throw new Ee.ErrnoError(d);Ee.hashRemoveNode(u);try{t.node_ops.rename(u,n,s)}catch(e){throw e}finally{Ee.hashAddNode(u)}}},rmdir(e){var r=Ee.lookupPath(e,{parent:!0}).node,t=se.basename(e),n=Ee.lookupNode(r,t),o=Ee.mayDelete(r,t,!0);if(o)throw new Ee.ErrnoError(o);if(!r.node_ops.rmdir)throw new Ee.ErrnoError(63);if(Ee.isMountpoint(n))throw new Ee.ErrnoError(10);r.node_ops.rmdir(r,t),Ee.destroyNode(n)},readdir(e){var r=Ee.lookupPath(e,{follow:!0}).node;if(!r.node_ops.readdir)throw new Ee.ErrnoError(54);return r.node_ops.readdir(r)},unlink(e){var r=Ee.lookupPath(e,{parent:!0}).node;if(!r)throw new Ee.ErrnoError(44);var t=se.basename(e),n=Ee.lookupNode(r,t),o=Ee.mayDelete(r,t,!1);if(o)throw new Ee.ErrnoError(o);if(!r.node_ops.unlink)throw new Ee.ErrnoError(63);if(Ee.isMountpoint(n))throw new Ee.ErrnoError(10);r.node_ops.unlink(r,t),Ee.destroyNode(n)},readlink(e){var r=Ee.lookupPath(e).node;if(!r)throw new Ee.ErrnoError(44);if(!r.node_ops.readlink)throw new Ee.ErrnoError(28);return ue.resolve(Ee.getPath(r.parent),r.node_ops.readlink(r))},stat(e,r){var t=Ee.lookupPath(e,{follow:!r}).node;if(!t)throw new Ee.ErrnoError(44);if(!t.node_ops.getattr)throw new Ee.ErrnoError(63);return t.node_ops.getattr(t)},lstat:e=>Ee.stat(e,!0),chmod(e,r,t){var n;"string"==typeof e?n=Ee.lookupPath(e,{follow:!t}).node:n=e;if(!n.node_ops.setattr)throw new Ee.ErrnoError(63);n.node_ops.setattr(n,{mode:4095&r|-4096&n.mode,timestamp:Date.now()})},lchmod(e,r){Ee.chmod(e,r,!0)},fchmod(e,r){var t=Ee.getStreamChecked(e);Ee.chmod(t.node,r)},chown(e,r,t,n){var o;"string"==typeof e?o=Ee.lookupPath(e,{follow:!n}).node:o=e;if(!o.node_ops.setattr)throw new Ee.ErrnoError(63);o.node_ops.setattr(o,{timestamp:Date.now()})},lchown(e,r,t){Ee.chown(e,r,t,!0)},fchown(e,r,t){var n=Ee.getStreamChecked(e);Ee.chown(n.node,r,t)},truncate(e,r){if(r<0)throw new Ee.ErrnoError(28);var t;"string"==typeof e?t=Ee.lookupPath(e,{follow:!0}).node:t=e;if(!t.node_ops.setattr)throw new Ee.ErrnoError(63);if(Ee.isDir(t.mode))throw new Ee.ErrnoError(31);if(!Ee.isFile(t.mode))throw new Ee.ErrnoError(28);var n=Ee.nodePermissions(t,"w");if(n)throw new Ee.ErrnoError(n);t.node_ops.setattr(t,{size:r,timestamp:Date.now()})},ftruncate(e,r){var t=Ee.getStreamChecked(e);if(0==(2097155&t.flags))throw new Ee.ErrnoError(28);Ee.truncate(t.node,r)},utime(e,r,t){var n=Ee.lookupPath(e,{follow:!0}).node;n.node_ops.setattr(n,{timestamp:Math.max(r,t)})},open(e,t,n){if(""===e)throw new Ee.ErrnoError(44);var o;if(n=void 0===n?438:n,n=64&(t="string"==typeof t?(e=>{var r={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[e];if(void 0===r)throw new Error(`Unknown file open mode: ${e}`);return r})(t):t)?4095&n|32768:0,"object"==typeof e)o=e;else{e=se.normalize(e);try{o=Ee.lookupPath(e,{follow:!(131072&t)}).node}catch(e){}}var a=!1;if(64&t)if(o){if(128&t)throw new Ee.ErrnoError(20)}else o=Ee.mknod(e,n,0),a=!0;if(!o)throw new Ee.ErrnoError(44);if(Ee.isChrdev(o.mode)&&(t&=-513),65536&t&&!Ee.isDir(o.mode))throw new Ee.ErrnoError(54);if(!a){var i=Ee.mayOpen(o,t);if(i)throw new Ee.ErrnoError(i)}512&t&&!a&&Ee.truncate(o,0),t&=-131713;var s=Ee.createStream({node:o,path:Ee.getPath(o),flags:t,seekable:!0,position:0,stream_ops:o.stream_ops,ungotten:[],error:!1});return s.stream_ops.open&&s.stream_ops.open(s),!r.logReadFiles||1&t||(Ee.readFiles||(Ee.readFiles={}),e in Ee.readFiles||(Ee.readFiles[e]=1)),s},close(e){if(Ee.isClosed(e))throw new Ee.ErrnoError(8);e.getdents&&(e.getdents=null);try{e.stream_ops.close&&e.stream_ops.close(e)}catch(e){throw e}finally{Ee.closeStream(e.fd)}e.fd=null},isClosed:e=>null===e.fd,llseek(e,r,t){if(Ee.isClosed(e))throw new Ee.ErrnoError(8);if(!e.seekable||!e.stream_ops.llseek)throw new Ee.ErrnoError(70);if(0!=t&&1!=t&&2!=t)throw new Ee.ErrnoError(28);return e.position=e.stream_ops.llseek(e,r,t),e.ungotten=[],e.position},read(e,r,t,n,o){if(n<0||o<0)throw new Ee.ErrnoError(28);if(Ee.isClosed(e))throw new Ee.ErrnoError(8);if(1==(2097155&e.flags))throw new Ee.ErrnoError(8);if(Ee.isDir(e.node.mode))throw new Ee.ErrnoError(31);if(!e.stream_ops.read)throw new Ee.ErrnoError(28);var a=void 0!==o;if(a){if(!e.seekable)throw new Ee.ErrnoError(70)}else o=e.position;var i=e.stream_ops.read(e,r,t,n,o);return a||(e.position+=i),i},write(e,r,t,n,o,a){if(n<0||o<0)throw new Ee.ErrnoError(28);if(Ee.isClosed(e))throw new Ee.ErrnoError(8);if(0==(2097155&e.flags))throw new Ee.ErrnoError(8);if(Ee.isDir(e.node.mode))throw new Ee.ErrnoError(31);if(!e.stream_ops.write)throw new Ee.ErrnoError(28);e.seekable&&1024&e.flags&&Ee.llseek(e,0,2);var i=void 0!==o;if(i){if(!e.seekable)throw new Ee.ErrnoError(70)}else o=e.position;var s=e.stream_ops.write(e,r,t,n,o,a);return i||(e.position+=s),s},allocate(e,r,t){if(Ee.isClosed(e))throw new Ee.ErrnoError(8);if(r<0||t<=0)throw new Ee.ErrnoError(28);if(0==(2097155&e.flags))throw new Ee.ErrnoError(8);if(!Ee.isFile(e.node.mode)&&!Ee.isDir(e.node.mode))throw new Ee.ErrnoError(43);if(!e.stream_ops.allocate)throw new Ee.ErrnoError(138);e.stream_ops.allocate(e,r,t)},mmap(e,r,t,n,o){if(0!=(2&n)&&0==(2&o)&&2!=(2097155&e.flags))throw new Ee.ErrnoError(2);if(1==(2097155&e.flags))throw new Ee.ErrnoError(2);if(!e.stream_ops.mmap)throw new Ee.ErrnoError(43);return e.stream_ops.mmap(e,r,t,n,o)},msync:(e,r,t,n,o)=>e.stream_ops.msync?e.stream_ops.msync(e,r,t,n,o):0,munmap:e=>0,ioctl(e,r,t){if(!e.stream_ops.ioctl)throw new Ee.ErrnoError(59);return e.stream_ops.ioctl(e,r,t)},readFile(e,r={}){if(r.flags=r.flags||0,r.encoding=r.encoding||"binary","utf8"!==r.encoding&&"binary"!==r.encoding)throw new Error(`Invalid encoding type "${r.encoding}"`);var t,n=Ee.open(e,r.flags),o=Ee.stat(e).size,a=new Uint8Array(o);return Ee.read(n,a,0,o,0),"utf8"===r.encoding?t=ae(a,0):"binary"===r.encoding&&(t=a),Ee.close(n),t},writeFile(e,r,t={}){t.flags=t.flags||577;var n=Ee.open(e,t.flags,t.mode);if("string"==typeof r){var o=new Uint8Array(fe(r)+1),a=de(r,o,0,o.length);Ee.write(n,o,0,a,void 0,t.canOwn)}else{if(!ArrayBuffer.isView(r))throw new Error("Unsupported data type");Ee.write(n,r,0,r.byteLength,void 0,t.canOwn)}Ee.close(n)},cwd:()=>Ee.currentPath,chdir(e){var r=Ee.lookupPath(e,{follow:!0});if(null===r.node)throw new Ee.ErrnoError(44);if(!Ee.isDir(r.node.mode))throw new Ee.ErrnoError(54);var t=Ee.nodePermissions(r.node,"x");if(t)throw new Ee.ErrnoError(t);Ee.currentPath=r.path},createDefaultDirectories(){Ee.mkdir("/tmp"),Ee.mkdir("/home"),Ee.mkdir("/home/web_user")},createDefaultDevices(){Ee.mkdir("/dev"),Ee.registerDevice(Ee.makedev(1,3),{read:()=>0,write:(e,r,t,n,o)=>n}),Ee.mkdev("/dev/null",Ee.makedev(1,3)),pe.register(Ee.makedev(5,0),pe.default_tty_ops),pe.register(Ee.makedev(6,0),pe.default_tty1_ops),Ee.mkdev("/dev/tty",Ee.makedev(5,0)),Ee.mkdev("/dev/tty1",Ee.makedev(6,0));var e=new Uint8Array(1024),r=0,t=()=>(0===r&&(r=le(e).byteLength),e[--r]);Ee.createDevice("/dev","random",t),Ee.createDevice("/dev","urandom",t),Ee.mkdir("/dev/shm"),Ee.mkdir("/dev/shm/tmp")},createSpecialDirectories(){Ee.mkdir("/proc");var e=Ee.mkdir("/proc/self");Ee.mkdir("/proc/self/fd"),Ee.mount({mount(){var r=Ee.createNode(e,"fd",16895,73);return r.node_ops={lookup(e,r){var t=+r,n=Ee.getStreamChecked(t),o={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>n.path}};return o.parent=o,o}},r}},{},"/proc/self/fd")},createStandardStreams(){r.stdin?Ee.createDevice("/dev","stdin",r.stdin):Ee.symlink("/dev/tty","/dev/stdin"),r.stdout?Ee.createDevice("/dev","stdout",null,r.stdout):Ee.symlink("/dev/tty","/dev/stdout"),r.stderr?Ee.createDevice("/dev","stderr",null,r.stderr):Ee.symlink("/dev/tty1","/dev/stderr"),Ee.open("/dev/stdin",0),Ee.open("/dev/stdout",1),Ee.open("/dev/stderr",1)},ensureErrnoError(){Ee.ErrnoError||(Ee.ErrnoError=function(e,r){this.name="ErrnoError",this.node=r,this.setErrno=function(e){this.errno=e},this.setErrno(e),this.message="FS error"},Ee.ErrnoError.prototype=new Error,Ee.ErrnoError.prototype.constructor=Ee.ErrnoError,[44].forEach((e=>{Ee.genericErrors[e]=new Ee.ErrnoError(e),Ee.genericErrors[e].stack=""})))},staticInit(){Ee.ensureErrnoError(),Ee.nameTable=new Array(4096),Ee.mount(we,{},"/"),Ee.createDefaultDirectories(),Ee.createDefaultDevices(),Ee.createSpecialDirectories(),Ee.filesystems={MEMFS:we}},init(e,t,n){Ee.init.initialized=!0,Ee.ensureErrnoError(),r.stdin=e||r.stdin,r.stdout=t||r.stdout,r.stderr=n||r.stderr,Ee.createStandardStreams()},quit(){Ee.init.initialized=!1;for(var e=0;ethis.length-1||e<0)){var r=e%this.chunkSize,t=e/this.chunkSize|0;return this.getter(t)[r]}},a.prototype.setDataGetter=function(e){this.getter=e},a.prototype.cacheLength=function(){var e=new XMLHttpRequest;if(e.open("HEAD",t,!1),e.send(null),!(e.status>=200&&e.status<300||304===e.status))throw new Error("Couldn't load "+t+". Status: "+e.status);var r,n=Number(e.getResponseHeader("Content-length")),o=(r=e.getResponseHeader("Accept-Ranges"))&&"bytes"===r,a=(r=e.getResponseHeader("Content-Encoding"))&&"gzip"===r,i=1048576;o||(i=n);var s=this;s.setDataGetter((e=>{var r=e*i,o=(e+1)*i-1;if(o=Math.min(o,n-1),void 0===s.chunks[e]&&(s.chunks[e]=((e,r)=>{if(e>r)throw new Error("invalid range ("+e+", "+r+") or no bytes requested!");if(r>n-1)throw new Error("only "+n+" bytes available! programmer error!");var o=new XMLHttpRequest;if(o.open("GET",t,!1),n!==i&&o.setRequestHeader("Range","bytes="+e+"-"+r),o.responseType="arraybuffer",o.overrideMimeType&&o.overrideMimeType("text/plain; charset=x-user-defined"),o.send(null),!(o.status>=200&&o.status<300||304===o.status))throw new Error("Couldn't load "+t+". Status: "+o.status);return void 0!==o.response?new Uint8Array(o.response||[]):me(o.responseText||"",!0)})(r,o)),void 0===s.chunks[e])throw new Error("doXHR failed!");return s.chunks[e]})),!a&&n||(i=n=1,n=this.getter(0).length,i=n,M("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=n,this._chunkSize=i,this.lengthKnown=!0},"undefined"!=typeof XMLHttpRequest){if(!E)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var i=new a;Object.defineProperties(i,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var s={isDevice:!1,contents:i}}else s={isDevice:!1,url:t};var l=Ee.createFile(e,r,s,n,o);s.contents?l.contents=s.contents:s.url&&(l.contents=null,l.url=s.url),Object.defineProperties(l,{usedBytes:{get:function(){return this.contents.length}}});var u={};function c(e,r,t,n,o){var a=e.node.contents;if(o>=a.length)return 0;var i=Math.min(a.length-o,n);if(a.slice)for(var s=0;s{var r=l.stream_ops[e];u[e]=function(){return Ee.forceLoadFile(l),r.apply(null,arguments)}})),u.read=(e,r,t,n,o)=>(Ee.forceLoadFile(l),c(e,r,t,n,o)),u.mmap=(e,r,t,n,o)=>{Ee.forceLoadFile(l);var a=he(r);if(!a)throw new Ee.ErrnoError(48);return c(e,R,a,r,t),{ptr:a,allocated:!0}},l.stream_ops=u,l}},_e={DEFAULT_POLLMASK:5,calculateAt(e,r,t){if(se.isAbs(r))return r;var n;-100===e?n=Ee.cwd():n=_e.getStreamFromFD(e).path;if(0==r.length){if(!t)throw new Ee.ErrnoError(44);return n}return se.join2(n,r)},doStat(e,r,t){try{var n=e(r)}catch(e){if(e&&e.node&&se.normalize(r)!==se.normalize(Ee.getPath(e.node)))return-54;throw e}O[t>>2]=n.dev,O[t+4>>2]=n.mode,L[t+8>>2]=n.nlink,O[t+12>>2]=n.uid,O[t+16>>2]=n.gid,O[t+20>>2]=n.rdev,K=[n.size>>>0,(V=n.size,+Math.abs(V)>=1?V>0?+Math.floor(V/4294967296)>>>0:~~+Math.ceil((V-+(~~V>>>0))/4294967296)>>>0:0)],O[t+24>>2]=K[0],O[t+28>>2]=K[1],O[t+32>>2]=4096,O[t+36>>2]=n.blocks;var o=n.atime.getTime(),a=n.mtime.getTime(),i=n.ctime.getTime();return K=[Math.floor(o/1e3)>>>0,(V=Math.floor(o/1e3),+Math.abs(V)>=1?V>0?+Math.floor(V/4294967296)>>>0:~~+Math.ceil((V-+(~~V>>>0))/4294967296)>>>0:0)],O[t+40>>2]=K[0],O[t+44>>2]=K[1],L[t+48>>2]=o%1e3*1e3,K=[Math.floor(a/1e3)>>>0,(V=Math.floor(a/1e3),+Math.abs(V)>=1?V>0?+Math.floor(V/4294967296)>>>0:~~+Math.ceil((V-+(~~V>>>0))/4294967296)>>>0:0)],O[t+56>>2]=K[0],O[t+60>>2]=K[1],L[t+64>>2]=a%1e3*1e3,K=[Math.floor(i/1e3)>>>0,(V=Math.floor(i/1e3),+Math.abs(V)>=1?V>0?+Math.floor(V/4294967296)>>>0:~~+Math.ceil((V-+(~~V>>>0))/4294967296)>>>0:0)],O[t+72>>2]=K[0],O[t+76>>2]=K[1],L[t+80>>2]=i%1e3*1e3,K=[n.ino>>>0,(V=n.ino,+Math.abs(V)>=1?V>0?+Math.floor(V/4294967296)>>>0:~~+Math.ceil((V-+(~~V>>>0))/4294967296)>>>0:0)],O[t+88>>2]=K[0],O[t+92>>2]=K[1],0},doMsync(e,r,t,n,o){if(!Ee.isFile(r.node.mode))throw new Ee.ErrnoError(43);if(2&n)return 0;var a=T.slice(e,e+t);Ee.msync(r,a,o,t,n)},varargs:void 0,get(){var e=O[+_e.varargs>>2];return _e.varargs+=4,e},getp:()=>_e.get(),getStr:e=>ie(e),getStreamFromFD:e=>Ee.getStreamChecked(e)};var be=(e,r,t)=>de(e,T,r,t);var ke=e=>e%4==0&&(e%100!=0||e%400==0),Se=[0,31,60,91,121,152,182,213,244,274,305,335],De=[0,31,59,90,120,151,181,212,243,273,304,334],Fe=(e,r)=>r+2097152>>>0<4194305-!!e?(e>>>0)+4294967296*r:NaN;var Me=e=>{var r=fe(e)+1,t=Je(r);return t&&be(e,t,r),t},xe=e=>{var r=(e-F.buffer.byteLength+65535)/65536;try{return F.grow(r),N(),1}catch(e){}},Ae={},Pe=()=>{if(!Pe.strings){var e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:v||"./this.program"};for(var r in Ae)void 0===Ae[r]?delete e[r]:e[r]=Ae[r];var t=[];for(var r in e)t.push(`${r}=${e[r]}`);Pe.strings=t}return Pe.strings},Re=e=>{A=e,ne||(r.onExit&&r.onExit(e),j=!0),g(e,new re(e))},Te=(e,r)=>{A=e,Re(e)},ze=Te;var Oe,Le=[31,29,31,30,31,30,31,31,30,31,30,31],je=[31,28,31,30,31,30,31,31,30,31,30,31],Ne=(e,r)=>{R.set(e,r)},Ce=(e,r,t,n)=>{var o=L[n+40>>2],a={tm_sec:O[n>>2],tm_min:O[n+4>>2],tm_hour:O[n+8>>2],tm_mday:O[n+12>>2],tm_mon:O[n+16>>2],tm_year:O[n+20>>2],tm_wday:O[n+24>>2],tm_yday:O[n+28>>2],tm_isdst:O[n+32>>2],tm_gmtoff:O[n+36>>2],tm_zone:o?ie(o):""},i=ie(t),s={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var l in s)i=i.replace(new RegExp(l,"g"),s[l]);var u=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],c=["January","February","March","April","May","June","July","August","September","October","November","December"];function f(e,r,t){for(var n="number"==typeof e?e.toString():e||"";n.length0?1:0}var n;return 0===(n=t(e.getFullYear()-r.getFullYear()))&&0===(n=t(e.getMonth()-r.getMonth()))&&(n=t(e.getDate()-r.getDate())),n}function p(e){switch(e.getDay()){case 0:return new Date(e.getFullYear()-1,11,29);case 1:return e;case 2:return new Date(e.getFullYear(),0,3);case 3:return new Date(e.getFullYear(),0,2);case 4:return new Date(e.getFullYear(),0,1);case 5:return new Date(e.getFullYear()-1,11,31);case 6:return new Date(e.getFullYear()-1,11,30)}}function h(e){var r=((e,r)=>{for(var t=new Date(e.getTime());r>0;){var n=ke(t.getFullYear()),o=t.getMonth(),a=(n?Le:je)[o];if(!(r>a-t.getDate()))return t.setDate(t.getDate()+r),t;r-=a-t.getDate()+1,t.setDate(1),o<11?t.setMonth(o+1):(t.setMonth(0),t.setFullYear(t.getFullYear()+1))}return t})(new Date(e.tm_year+1900,0,1),e.tm_yday),t=new Date(r.getFullYear(),0,4),n=new Date(r.getFullYear()+1,0,4),o=p(t),a=p(n);return m(o,r)<=0?m(a,r)<=0?r.getFullYear()+1:r.getFullYear():r.getFullYear()-1}var w={"%a":e=>u[e.tm_wday].substring(0,3),"%A":e=>u[e.tm_wday],"%b":e=>c[e.tm_mon].substring(0,3),"%B":e=>c[e.tm_mon],"%C":e=>d((e.tm_year+1900)/100|0,2),"%d":e=>d(e.tm_mday,2),"%e":e=>f(e.tm_mday,2," "),"%g":e=>h(e).toString().substring(2),"%G":e=>h(e),"%H":e=>d(e.tm_hour,2),"%I":e=>{var r=e.tm_hour;return 0==r?r=12:r>12&&(r-=12),d(r,2)},"%j":e=>d(e.tm_mday+((e,r)=>{for(var t=0,n=0;n<=r;t+=e[n++]);return t})(ke(e.tm_year+1900)?Le:je,e.tm_mon-1),3),"%m":e=>d(e.tm_mon+1,2),"%M":e=>d(e.tm_min,2),"%n":()=>"\n","%p":e=>e.tm_hour>=0&&e.tm_hour<12?"AM":"PM","%S":e=>d(e.tm_sec,2),"%t":()=>"\t","%u":e=>e.tm_wday||7,"%U":e=>{var r=e.tm_yday+7-e.tm_wday;return d(Math.floor(r/7),2)},"%V":e=>{var r=Math.floor((e.tm_yday+7-(e.tm_wday+6)%7)/7);if((e.tm_wday+371-e.tm_yday-2)%7<=2&&r++,r){if(53==r){var t=(e.tm_wday+371-e.tm_yday)%7;4==t||3==t&&ke(e.tm_year)||(r=1)}}else{r=52;var n=(e.tm_wday+7-e.tm_yday-1)%7;(4==n||5==n&&ke(e.tm_year%400-1))&&r++}return d(r,2)},"%w":e=>e.tm_wday,"%W":e=>{var r=e.tm_yday+7-(e.tm_wday+6)%7;return d(Math.floor(r/7),2)},"%y":e=>(e.tm_year+1900).toString().substring(2),"%Y":e=>e.tm_year+1900,"%z":e=>{var r=e.tm_gmtoff,t=r>=0;return r=(r=Math.abs(r)/60)/60*100+r%60,(t?"+":"-")+String("0000"+r).slice(-4)},"%Z":e=>e.tm_zone,"%%":()=>"%"};for(var l in i=i.replace(/%%/g,"\0\0"),w)i.includes(l)&&(i=i.replace(new RegExp(l,"g"),w[l](a)));var v=me(i=i.replace(/\0\0/g,"%"),!1);return v.length>r?0:(Ne(v,e),v.length-1)},He=e=>{if(e instanceof re||"unwind"==e)return A;g(1,e)},Be=e=>{var r=fe(e)+1,t=sr(r);return be(e,t,r),t},Ue=[],Ie=e=>{var r=Ue[e];return r||(e>=Ue.length&&(Ue.length=e+1),Ue[e]=r=Oe.get(e)),r},Ye=e=>r["_"+e],qe=(e,r,t,n,o)=>{var a={string:e=>{var r=0;return null!=e&&0!==e&&(r=Be(e)),r},array:e=>{var r=sr(e.length);return Ne(e,r),r}};var i=Ye(e),s=[],l=0;if(n)for(var u=0;u{var o=!t||t.every((e=>"number"===e||"boolean"===e));return"string"!==r&&o&&!n?Ye(e):function(){return qe(e,r,t,arguments)}},We=function(e,r,t,n){e||(e=this),this.parent=e,this.mount=e.mount,this.mounted=null,this.id=Ee.nextInode++,this.name=r,this.mode=t,this.node_ops={},this.stream_ops={},this.rdev=n},Xe=365,Ge=146;Object.defineProperties(We.prototype,{read:{get:function(){return(this.mode&Xe)===Xe},set:function(e){e?this.mode|=Xe:this.mode&=-366}},write:{get:function(){return(this.mode&Ge)===Ge},set:function(e){e?this.mode|=Ge:this.mode&=-147}},isFolder:{get:function(){return Ee.isDir(this.mode)}},isDevice:{get:function(){return Ee.isChrdev(this.mode)}}}),Ee.FSNode=We,Ee.createPreloadedFile=(e,r,t,n,o,a,i,s,l,u)=>{var c=r?ue.resolve(se.join2(e,r)):e;function f(t){function f(t){u&&u(),s||((e,r,t,n,o,a)=>{Ee.createDataFile(e,r,t,n,o,a)})(e,r,t,n,o,l),a&&a(),$()}((e,r,t,n)=>{"undefined"!=typeof Browser&&Browser.init();var o=!1;return ge.forEach((a=>{o||a.canHandle(r)&&(a.handle(e,r,t,n),o=!0)})),o})(t,c,f,(()=>{i&&i(),$()}))||f(t)}q(),"string"==typeof t?ve(t,(e=>f(e)),i):f(t)},Ee.staticInit();var Ve={j:(e,r,t,n)=>{W(`Assertion failed: ${ie(e)}, at: `+[r?ie(r):"unknown filename",t,n?ie(n):"unknown function"])},F:function(e,r,t,n){try{if(r=_e.getStr(r),r=_e.calculateAt(e,r),-8&t)return-28;var o=Ee.lookupPath(r,{follow:!0}).node;if(!o)return-44;var a="";return 4&t&&(a+="r"),2&t&&(a+="w"),1&t&&(a+="x"),a&&Ee.nodePermissions(o,a)?-2:0}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return-e.errno}},q:function(e,r,t){_e.varargs=t;try{var n=_e.getStreamFromFD(e);switch(r){case 0:if((o=_e.get())<0)return-28;for(;Ee.streams[o];)o++;return Ee.createStream(n,o).fd;case 1:case 2:case 6:case 7:return 0;case 3:return n.flags;case 4:var o=_e.get();return n.flags|=o,0;case 5:o=_e.getp();return z[o+0>>1]=2,0;case 16:case 8:default:return-28;case 9:return a=28,O[tr()>>2]=a,-1}}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return-e.errno}var a},C:function(e,r){try{if(0===r)return-28;var t=Ee.cwd(),n=fe(t)+1;return r>2]=o.c_iflag||0,O[a+4>>2]=o.c_oflag||0,O[a+8>>2]=o.c_cflag||0,O[a+12>>2]=o.c_lflag||0;for(var i=0;i<32;i++)R[a+i+17>>0]=o.c_cc[i]||0;return 0}return 0;case 21506:case 21507:case 21508:if(!n.tty)return-59;if(n.tty.ops.ioctl_tcsets){a=_e.getp();var s=O[a>>2],l=O[a+4>>2],u=O[a+8>>2],c=O[a+12>>2],f=[];for(i=0;i<32;i++)f.push(R[a+i+17>>0]);return n.tty.ops.ioctl_tcsets(n.tty,r,{c_iflag:s,c_oflag:l,c_cflag:u,c_lflag:c,c_cc:f})}return 0;case 21519:if(!n.tty)return-59;a=_e.getp();return O[a>>2]=0,0;case 21520:return n.tty?-28:-59;case 21531:a=_e.getp();return Ee.ioctl(n,r,a);case 21523:if(!n.tty)return-59;if(n.tty.ops.ioctl_tiocgwinsz){var d=n.tty.ops.ioctl_tiocgwinsz(n.tty);a=_e.getp();z[a>>1]=d[0],z[a+2>>1]=d[1]}return 0;default:return-28}}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return-e.errno}},n:function(e,r,t,n){_e.varargs=n;try{r=_e.getStr(r),r=_e.calculateAt(e,r);var o=n?_e.get():0;return Ee.open(r,t,o).fd}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return-e.errno}},D:function(e,r){try{return e=_e.getStr(e),_e.doStat(Ee.stat,e,r)}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return-e.errno}},w:()=>{throw 1/0},t:function(e,r,t){var n=Fe(e,r),o=new Date(1e3*n);O[t>>2]=o.getSeconds(),O[t+4>>2]=o.getMinutes(),O[t+8>>2]=o.getHours(),O[t+12>>2]=o.getDate(),O[t+16>>2]=o.getMonth(),O[t+20>>2]=o.getFullYear()-1900,O[t+24>>2]=o.getDay();var a=0|(e=>(ke(e.getFullYear())?Se:De)[e.getMonth()]+e.getDate()-1)(o);O[t+28>>2]=a,O[t+36>>2]=-60*o.getTimezoneOffset();var i=new Date(o.getFullYear(),0,1),s=new Date(o.getFullYear(),6,1).getTimezoneOffset(),l=i.getTimezoneOffset(),u=0|(s!=l&&o.getTimezoneOffset()==Math.min(l,s));O[t+32>>2]=u},r:function(e,r,t,n,o,a,i,s){var l=Fe(o,a);try{if(isNaN(l))return 61;var u=_e.getStreamFromFD(n),c=Ee.mmap(u,e,l,r,t),f=c.ptr;return O[i>>2]=c.allocated,L[s>>2]=f,0}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return-e.errno}},s:function(e,r,t,n,o,a,i){var s=Fe(a,i);try{if(isNaN(s))return 61;var l=_e.getStreamFromFD(o);2&t&&_e.doMsync(e,l,r,n,s),Ee.munmap(l)}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return-e.errno}},y:(e,r,t)=>{var n=(new Date).getFullYear(),o=new Date(n,0,1),a=new Date(n,6,1),i=o.getTimezoneOffset(),s=a.getTimezoneOffset(),l=Math.max(i,s);function u(e){var r=e.toTimeString().match(/\(([A-Za-z ]+)\)$/);return r?r[1]:"GMT"}L[e>>2]=60*l,O[r>>2]=Number(i!=s);var c=u(o),f=u(a),d=Me(c),m=Me(f);s>2]=d,L[t+4>>2]=m):(L[t>>2]=m,L[t+4>>2]=d)},d:()=>{W("")},o:()=>Date.now(),z:()=>2147483648,E:(e,r,t)=>T.copyWithin(e,r,r+t),x:e=>{var r=T.length,t=2147483648;if((e>>>=0)>t)return!1;for(var n,o,a=1;a<=4;a*=2){var i=r*(1+.2/a);i=Math.min(i,e+100663296);var s=Math.min(t,(n=Math.max(e,i))+((o=65536)-n%o)%o);if(xe(s))return!0}return!1},A:(e,r)=>{var t=0;return Pe().forEach(((n,o)=>{var a=r+t;L[e+4*o>>2]=a,((e,r)=>{for(var t=0;t>0]=e.charCodeAt(t);R[r>>0]=0})(n,a),t+=n.length+1})),0},B:(e,r)=>{var t=Pe();L[e>>2]=t.length;var n=0;return t.forEach((e=>n+=e.length+1)),L[r>>2]=n,0},g:ze,m:function(e){try{var r=_e.getStreamFromFD(e);return Ee.close(r),0}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return e.errno}},G:function(e,r,t,n){try{var o=((e,r,t,n)=>{for(var o=0,a=0;a>2],s=L[r+4>>2];r+=8;var l=Ee.read(e,R,i,s,n);if(l<0)return-1;if(o+=l,l>2]=o,0}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return e.errno}},u:function(e,r,t,n,o){var a=Fe(r,t);try{if(isNaN(a))return 61;var i=_e.getStreamFromFD(e);return Ee.llseek(i,a,n),K=[i.position>>>0,(V=i.position,+Math.abs(V)>=1?V>0?+Math.floor(V/4294967296)>>>0:~~+Math.ceil((V-+(~~V>>>0))/4294967296)>>>0:0)],O[o>>2]=K[0],O[o+4>>2]=K[1],i.getdents&&0===a&&0===n&&(i.getdents=null),0}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return e.errno}},p:function(e,r,t,n){try{var o=((e,r,t,n)=>{for(var o=0,a=0;a>2],s=L[r+4>>2];r+=8;var l=Ee.write(e,R,i,s,n);if(l<0)return-1;o+=l,void 0!==n&&(n+=l)}return o})(_e.getStreamFromFD(e),r,t);return L[n>>2]=o,0}catch(e){if(void 0===Ee||"ErrnoError"!==e.name)throw e;return e.errno}},i:function(e,r){var t=ar();try{return Ie(e)(r)}catch(e){if(ir(t),e!==e+0)throw e;or(1,0)}},c:function(e,r,t){var n=ar();try{return Ie(e)(r,t)}catch(e){if(ir(n),e!==e+0)throw e;or(1,0)}},k:function(e,r,t,n){var o=ar();try{return Ie(e)(r,t,n)}catch(e){if(ir(o),e!==e+0)throw e;or(1,0)}},a:function(e,r,t,n,o){var a=ar();try{return Ie(e)(r,t,n,o)}catch(e){if(ir(a),e!==e+0)throw e;or(1,0)}},b:function(e,r,t,n,o,a){var i=ar();try{return Ie(e)(r,t,n,o,a)}catch(e){if(ir(i),e!==e+0)throw e;or(1,0)}},e:function(e){var r=ar();try{Ie(e)()}catch(e){if(ir(r),e!==e+0)throw e;or(1,0)}},f:function(e,r){var t=ar();try{Ie(e)(r)}catch(e){if(ir(t),e!==e+0)throw e;or(1,0)}},h:function(e,r,t){var n=ar();try{Ie(e)(r,t)}catch(e){if(ir(n),e!==e+0)throw e;or(1,0)}},I:function(e,r,t){return function(e,r){let t=ie(e);if(t.startsWith("/tex/")&&(t=t.substr(5)),t.includes("/"))return 0;const n=r+"/"+t;if(n in c)return 0;if(n in f)return s(me(f[n]));const o=self.texlive_endpoint+n;let i=new XMLHttpRequest;i.open("GET",o,!1),i.timeout=15e4,i.responseType="arraybuffer",console.log("Start downloading texlive file "+o);try{i.send()}catch(e){return console.log("TexLive Download Failed "+o),0}if(200===i.status){let e=i.response;const r=i.getResponseHeader("fileid"),t=a+"/"+r;return Ee.writeFile(t,new Uint8Array(e)),f[n]=t,s(me(t))}return 301===i.status?(console.log("TexLive File not exists "+o),c[n]=1,0):0}(e,r)},l:Ce,v:(e,r,t,n,o)=>Ce(e,r,t,n)},Ke=function(){var e,t,n,o={a:Ve};function a(e,r){var t;return Ke=e.exports,F=Ke.J,N(),Oe=Ke.R,t=Ke.K,H.unshift(t),$(),Ke}if(q(),r.instantiateWasm)try{return r.instantiateWasm(o,a)}catch(e){return x(`Module.instantiateWasm callback failed with error: ${e}`),!1}return e=X,t=o,n=function(e){a(e.instance)},D||"function"!=typeof WebAssembly.instantiateStreaming||J(e)||Z(e)||_||"function"!=typeof fetch?ee(e,t,n):fetch(e,{credentials:"same-origin"}).then((r=>WebAssembly.instantiateStreaming(r,t).then(n,(function(r){return x(`wasm streaming compile failed: ${r}`),x("falling back to ArrayBuffer instantiation"),ee(e,t,n)})))),{}}(),Je=e=>(Je=Ke.L)(e),Ze=r._compileLaTeX=()=>(Ze=r._compileLaTeX=Ke.M)();r._compileFormat=()=>(r._compileFormat=Ke.N)();var Qe=r._compileBibtex=()=>(Qe=r._compileBibtex=Ke.O)();r._setMainEntry=e=>(r._setMainEntry=Ke.P)(e);var er,rr=r._main=(e,t)=>(rr=r._main=Ke.Q)(e,t),tr=()=>(tr=Ke.S)(),nr=(e,r)=>(nr=Ke.T)(e,r),or=(e,r)=>(or=Ke.U)(e,r),ar=()=>(ar=Ke.V)(),ir=e=>(ir=Ke.W)(e),sr=e=>(sr=Ke.X)(e);function lr(e=w){function t(){er||(er=!0,r.calledRun=!0,j||(r.noFSInit||Ee.init.initialized||Ee.init(),Ee.ignorePermissions=!1,te(H),te(B),r.onRuntimeInitialized&&r.onRuntimeInitialized(),ur&&function(e=[]){var r=rr;e.unshift(v);var t=e.length,n=sr(4*(t+1)),o=n;e.forEach((e=>{L[o>>2]=Be(e),o+=4})),L[o>>2]=0;try{var a=r(t,n);return Te(a,!0),a}catch(e){return He(e)}}(e),function(){if(r.postRun)for("function"==typeof r.postRun&&(r.postRun=[r.postRun]);r.postRun.length;)e=r.postRun.shift(),U.unshift(e);var e;te(U)}()))}I>0||(!function(){if(r.preRun)for("function"==typeof r.preRun&&(r.preRun=[r.preRun]);r.preRun.length;)e=r.preRun.shift(),C.unshift(e);var e;te(C)}(),I>0||(r.setStatus?(r.setStatus("Running..."),setTimeout((function(){setTimeout((function(){r.setStatus("")}),1),t()}),1)):t()))}if(r.cwrap=$e,Y=function e(){er||lr(),er||(Y=e)},r.preInit)for("function"==typeof r.preInit&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();var ur=!0;r.noInitialRun&&(ur=!1),lr()}(s),a(s.exports)})); diff --git a/public/swiftlatexxetex.wasm b/public/swiftlatexxetex.wasm new file mode 100644 index 00000000..72710f07 Binary files /dev/null and b/public/swiftlatexxetex.wasm differ diff --git a/public/templates/template2/awesome-cv.cls b/public/templates/template2/awesome-cv.cls index e864a273..ee908e66 100755 --- a/public/templates/template2/awesome-cv.cls +++ b/public/templates/template2/awesome-cv.cls @@ -1,680 +1,680 @@ -%% Start of file `awesome-cv.cls'. -% Awesome CV Class File -% -% This class has been downloaded from: -% https://github.com/posquit0/Awesome-CV -% -% Author: -% Claud D. Park -% http://www.posquit0.com -% -% Notes: -% 1) This class file defines the structure and layout of the template file (cv.tex, resume.tex). -% 2) It has been written in such a way that under most circumstances you -% should not need to edit it. -% -% Class license: -% LPPL v1.3c (http://www.latex-project.org/lppl) -% - - -%------------------------------------------------------------------------------- -% Identification -%------------------------------------------------------------------------------- -\ProvidesClass{awesome-cv}[2015/12/14 v1.3 Awesome Curriculum Vitae Class] -\NeedsTeXFormat{LaTeX2e} - - -%------------------------------------------------------------------------------- -% Class options -% -% (need to be done before the external package loading, for example because -% we need \paperwidth, \paperheight and \@ptsize to be defined before loading -% geometry and fancyhdr) -%------------------------------------------------------------------------------- -% Options for draft or final -\DeclareOption{draft}{\setlength\overfullrule{5pt}} -\DeclareOption{final}{\setlength\overfullrule{0pt}} -% Inherit options of article -\DeclareOption*{ - \PassOptionsToClass{\CurrentOption}{article} -} -\ProcessOptions\relax -\LoadClass{article} - - -%------------------------------------------------------------------------------- -% 3rd party packages -%------------------------------------------------------------------------------- -% Needed to make fixed length table -\RequirePackage{array} -% Needed to handle list environment -\RequirePackage{enumitem} -% Needed to handle text alignment -\RequirePackage{ragged2e} -% Needed to configure page layout -\RequirePackage{geometry} -% Needed to make header & footer effeciently -\RequirePackage{fancyhdr} -% Needed to manage colors -\RequirePackage{xcolor} -% Needed to use \ifxetex-\else-\fi statement -\RequirePackage{ifxetex} -% Needed to use \if-\then-\else statement -\RequirePackage{xifthen} -% Needed to use a toolbox of programming tools -\RequirePackage{etoolbox} -% Needed to change line spacing in specific environment -\RequirePackage{setspace} -% Needed to manage fonts -\ifxetex - \RequirePackage[quiet]{fontspec} - % To support LaTeX quoting style - \defaultfontfeatures{Ligatures=TeX} -\else - \RequirePackage[T1]{fontenc} - % Replace by the encoding you are using - \RequirePackage[utf8]{inputenc} -\fi -% Needed to manage math fonts -\RequirePackage{unicode-math} -% Needed to use icons from font-awesome -% (https://github.com/posquit0/latex-fontawesome) -\RequirePackage{fontawesome} -% Needed to deal a paragraphs -\RequirePackage{parskip} -% Needed to deal hyperlink -\RequirePackage{hyperref} -\hypersetup{ - pdftitle={}, - pdfauthor={}, - pdfsubject={}, - pdfkeywords={}, - colorlinks=false, - allbordercolors=white -} - - -%------------------------------------------------------------------------------- -% Configuration for directory locations -%------------------------------------------------------------------------------- -% Configure a directory location for fonts(default: 'fonts/') -\newcommand*{\fontdir}[1][fonts/]{\def\@fontdir{#1}} -\fontdir - - -%------------------------------------------------------------------------------- -% Configuration for layout -%------------------------------------------------------------------------------- -%% Page Layout -% Configure page margins with geometry -\geometry{left=2.0cm, top=1.5cm, right=2.0cm, bottom=2.0cm, footskip=.5cm} - -%% Header & Footer -% Set offset to each header and offset -\fancyhfoffset{0em} -% Remove head rule -\renewcommand{\headrulewidth}{0pt} -% Clear all header & footer fields -\fancyhf{} -% Enable if you want to make header or footer using fancyhdr -\pagestyle{fancy} - - -%------------------------------------------------------------------------------- -% Configuration for colors -%------------------------------------------------------------------------------- -% Gray-scale colors -\definecolor{white}{HTML}{FFFFFF} -\definecolor{black}{HTML}{000000} -\definecolor{darkgray}{HTML}{333333} -\definecolor{gray}{HTML}{5D5D5D} -\definecolor{lightgray}{HTML}{999999} -% Basic colors -\definecolor{green}{HTML}{C2E15F} -\definecolor{orange}{HTML}{FDA333} -\definecolor{purple}{HTML}{D3A4F9} -\definecolor{red}{HTML}{FB4485} -\definecolor{blue}{HTML}{6CE0F1} -% Text colors -\definecolor{darktext}{HTML}{414141} -\colorlet{text}{darkgray} -\colorlet{graytext}{gray} -\colorlet{lighttext}{lightgray} -% Awesome colors -\definecolor{awesome-emerald}{HTML}{00A388} -\definecolor{awesome-skyblue}{HTML}{0395DE} -\definecolor{awesome-red}{HTML}{000000} -\definecolor{awesome-pink}{HTML}{EF4089} -\definecolor{awesome-orange}{HTML}{FF6138} -\definecolor{awesome-nephritis}{HTML}{27AE60} -\definecolor{awesome-concrete}{HTML}{95A5A6} -\definecolor{awesome-darknight}{HTML}{131A28} -\colorlet{awesome}{awesome-red} - -% Awesome section color -\newcounter{colorCounter} -\def\@sectioncolor#1#2#3{% - {% - \color{% - \ifcase\value{colorCounter}% - awesome\or% - awesome\or% - awesome\or% - awesome\or% - awesome\else% - awesome\fi% - } #1#2#3% - }% - \stepcounter{colorCounter}% -} - - -%------------------------------------------------------------------------------- -% Configuration for fonts -%------------------------------------------------------------------------------- -% Set font for header (default is Roboto) -\newfontfamily\headerfont[ - Path=\@fontdir, - UprightFont=*-Regular, - ItalicFont=*-Italic, - BoldFont=*-Bold, - BoldItalicFont=*-BoldItalic, -]{Roboto} - -\newfontfamily\headerfontlight[ - Path=\@fontdir, - UprightFont=*-Thin, - ItalicFont=*-ThinItalic, - BoldFont=*-Medium, - BoldItalicFont=*-MediumItalic, -]{Roboto} - -% Set font for footer (default is Source Sans Pro) -\newfontfamily\footerfont[ - Path=\@fontdir, - UprightFont=*-Regular, - ItalicFont=*-It, - BoldFont=*-Bold -]{SourceSansPro} - -% Set font for body (default is Source Sans Pro) -\newfontfamily\bodyfont[ - Path=\@fontdir, - UprightFont=*-Regular, - ItalicFont=*-It, - BoldFont=*-Bold, - BoldItalicFont=*-BoldIt -]{SourceSansPro} - -\newfontfamily\bodyfontlight[ - Path=\@fontdir, - UprightFont=*-Light, - ItalicFont=*-LightIt, - BoldFont=*-Semibold, - BoldItalicFont=*-SemiboldIt -]{SourceSansPro} - - -%------------------------------------------------------------------------------- -% Configuration for styles -%------------------------------------------------------------------------------- -% Configure styles for each CV elements -% For fundamental structures -\newcommand*{\headerfirstnamestyle}[1]{{\fontsize{32pt}{1em}\headerfontlight\color{graytext} #1}} -\newcommand*{\headerlastnamestyle}[1]{{\fontsize{32pt}{1em}\headerfont\bfseries\color{text} #1}} -\newcommand*{\headerpositionstyle}[1]{{\fontsize{7.6pt}{1em}\bodyfont\scshape\color{awesome} #1}} -\newcommand*{\headeraddressstyle}[1]{{\fontsize{8pt}{1em}\headerfont\itshape\color{lighttext} #1}} -\newcommand*{\headersocialstyle}[1]{{\fontsize{6.8pt}{1em}\headerfont\color{text} #1}} -\newcommand*{\headerquotestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\itshape\color{darktext} #1}} -\newcommand*{\footerstyle}[1]{{\fontsize{8pt}{1em}\footerfont\scshape\color{lighttext} #1}} -\newcommand*{\sectionstyle}[1]{{\fontsize{16pt}{1em}\bodyfont\bfseries\color{text}\@sectioncolor #1}} -\newcommand*{\subsectionstyle}[1]{{\fontsize{12pt}{1em}\bodyfont\scshape\textcolor{text}{#1}}} - -% For elements of entry -\newcommand*{\entrytitlestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} -\newcommand*{\entrypositionstyle}[1]{{\fontsize{8pt}{1em}\bodyfont\scshape\color{graytext} #1}} -\newcommand*{\entrydatestyle}[1]{{\fontsize{8pt}{1em}\bodyfontlight\slshape\color{graytext} #1}} -\newcommand*{\entrylocationstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} -\newcommand*{\descriptionstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\upshape\color{text} #1}} -\newcommand*{\skill}[1]{{\fontsize{9pt}{1em}\bodyfontlight\upshape\color{text} \textnormal{#1}}} - -% For elements of subentry -\newcommand*{\subentrytitlestyle}[1]{{\fontsize{8pt}{1em}\bodyfont\mdseries\color{graytext} #1}} -\newcommand*{\subentrypositionstyle}[1]{{\fontsize{7pt}{1em}\bodyfont\scshape\color{graytext} #1}} -\newcommand*{\subentrydatestyle}[1]{{\fontsize{7pt}{1em}\bodyfontlight\slshape\color{graytext} #1}} -\newcommand*{\subentrylocationstyle}[1]{{\fontsize{7pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} -\newcommand*{\subdescriptionstyle}[1]{{\fontsize{8pt}{1em}\bodyfontlight\upshape\color{text} #1}} - -% For elements of honor -\newcommand*{\honortitlestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\color{graytext} #1}} -\newcommand*{\honorpositionstyle}[1]{{\fontsize{9pt}{1em}\bodyfont\bfseries\color{darktext} #1}} -\newcommand*{\honordatestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\color{graytext} #1}} -\newcommand*{\honorlocationstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} - -% For elements of skill -\newcommand*{\skilltypestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} -\newcommand*{\skillsetstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\color{text} #1}} - -% For elements of the cover letter -\newcommand*{\paragraphstyle}[1]{{\fontsize{14pt}{1em}\bodyfont\bfseries\color{text}\@sectioncolor #1}} -\newcommand*{\recipientaddressstyle}[1]{{\fontsize{9pt}{1em}\bodyfont\scshape\color{graytext} #1}} -\newcommand*{\recipienttitlestyle}[1]{{\fontsize{11pt}{1em}\bodyfont\bfseries\color{darktext} #1}} -\newcommand*{\lettertitlestyle}[1]{{\fontsize{10pt}{1em}\bodyfontlight\bfseries\color{darktext} \underline{#1}}} -\newcommand*{\letterdatestyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{graytext} #1}} -\newcommand*{\lettertextstyle}{\fontsize{10pt}{1.4em}\bodyfontlight\upshape\color{graytext}} -\newcommand*{\letternamestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} -\newcommand*{\letterenclosurestyle}[1]{{\fontsize{10pt}{1em}\bodyfontlight\slshape\color{lighttext} #1}} - - -%------------------------------------------------------------------------------- -% Commands for personal information -%------------------------------------------------------------------------------- -% Define writer's name -% Usage: \name{}{} -% Usage: \firstname{} -% Usage: \lastname{} -% Usage: \familyname{} -\newcommand*{\name}[2]{\def\@firstname{#1}\def\@lastname{#2}} -\newcommand*{\firstname}[1]{\def\@firstname{#1}} -\newcommand*{\lastname}[1]{\def\@lastname{#1}} -\newcommand*{\familyname}[1]{\def\@lastname{#1}} -\def\@familyname{\@lastname} - -% Define writer's address -% Usage: \address{
} -\newcommand*{\address}[1]{\def\@address{#1}} - -% Define writer's position -% Usage: \name{} -\newcommand*{\position}[1]{\def\@position{#1}} - -% Defines writer's mobile (optional) -% Usage: \mobile{} -\newcommand*{\mobile}[1]{\def\@mobile{#1}} - -% Defines writer's email (optional) -% Usage: \email{} -\newcommand*{\email}[1]{\def\@email{#1}} - -% Defines writer's link (optional) -% Usage: \link{} -\newcommand*{\link}[1]{\def\@link{#1}} - -% Defines writer's github (optional) -% Usage: \github{} -\newcommand*{\github}[1]{\def\@github{#1}} - -% Defines writer's github (optional) -% Usage: \github{} -\newcommand*{\location}[1]{\def\@location{#1}} - -% Defines writer's linked-in (optional) -% Usage: \linkedin{} -\newcommand*{\linkedin}[1]{\def\@linkedin{#1}} - -% Defines writer's stackoverflow profile (optional) -% Usage: \stackoverflow{}{} -% e.g.https://stackoverflow.com/users/123456/sam-smith -% would be \stackoverflow{123456}{sam-smith} -\newcommand*{\stackoverflow}[2]{\def\@stackoverflowid{#1}\def\@stackoverflowname{#2}} - -% Defines writer's skype (optional) -% Usage: \skype{} -\newcommand*{\skype}[1]{\def\@skype{#1}} - -% Defines writer's twitter (optional) -% Usage: \twitter{} -\newcommand*{\twitter}[1]{\def\@twitter{#1}} - -% Defines writer's quote (optional) -% Usage: \quote{} -\renewcommand*{\quote}[1]{\def\@quote{#1}} - -% Defines recipient's information (cover letter only) -% Usage: \recipient{}{} -% Usage: \recipientname{} -% Usage: \recipientaddress{} -\newcommand*{\recipient}[2]{\def\@recipientname{#1}\def\@recipientaddress{#2}} -\newcommand*{\recipientname}[1]{\def\@recipientname{#1}} -\newcommand*{\recipientaddress}[1]{\def\@recipientaddress{#1}} - -% Defines the title for letter (cover letter only, optional) -% Usage: \lettertitle{} -\newcommand*{\lettertitle}[1]{\def\@lettertitle{#1}} - -% Defines the date for letter (cover letter only) -% Usage: \letterdate{<date>} -\newcommand*{\letterdate}[1]{\def\@letterdate{#1}} - -% Defines a message of opening for letter (cover letter only) -% Usage: \letteropening{<message>} -\newcommand*{\letteropening}[1]{\def\@letteropening{#1}} - -% Defines a message of closing for letter (cover letter only) -% Usage: \letterclosing{<message>} -\newcommand*{\letterclosing}[1]{\def\@letterclosing{#1}} - -% Defines an enclosure for letter (cover letter only, optional) -% Usage: \letterenclosure[<enclosure name>]{<enclosure>} -\newcommand*{\letterenclname}[1][Enclosure]{\def\@letterenclname{#1}} -\newcommand*{\letterenclosure}[2][]{ - % if an optional argument is provided, use it to redefine \enclname - \ifthenelse{\equal{#1}{}}{}{\def\@letterenclname{#1}} - \def\@letterenclosure{#2} -} - - -%------------------------------------------------------------------------------- -% Commands for extra -%------------------------------------------------------------------------------- -% Define separator for social informations in header -% Usage: \headersocialsep{<separator>} -% Default: \quad\textbar\quad -\newcommand*{\headersocialsep}[1][\quad\textbar\quad]{\def\@headersocialsep{#1}} -\headersocialsep - - -%------------------------------------------------------------------------------- -% Commands for utilities -%------------------------------------------------------------------------------- -% Use to align an element of tabular table -\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} -\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} -\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} - -% Use to draw horizontal line with specific tickness -\def\vhrulefill#1{\leavevmode\leaders\hrule\@height#1\hfill \kern\z@} - -% Use to execute conditional statements by checking empty string -\newcommand*{\ifempty}[3]{\ifthenelse{\isempty{#1}}{#2}{#3}} - - -%------------------------------------------------------------------------------- -% Commands for elements of CV structure -%------------------------------------------------------------------------------- -% Define a header for CV -% Usage: \makecvheader -\newcommand*{\makecvheader}{ - \begin{center} - \headerfirstnamestyle{ - \@firstname - } \headerlastnamestyle{ - \@lastname - } - \\ - \vspace{0.4mm} - \ifthenelse{\isundefined{\@position}}{}{\headerpositionstyle{\@position\\}} - \vspace{0.4mm} - \ifthenelse{\isundefined{\@address}}{}{\headeraddressstyle{\@address\\}} - \vspace{-0.5mm} - \headersocialstyle{ - \newbool{isstart} - \setbool{isstart}{true} - \ifthenelse{\isundefined{\@mobile}} - {} - { - \faMobile\ \@mobile - \setbool{isstart}{false} - } - \ifthenelse{\isundefined{\@email}} - {} - { - \ifbool{isstart} - { - \setbool{isstart}{false} - } - {\@headersocialsep} - \href{mailto:\@email}{\faEnvelope\ \@email} - } - \ifthenelse{\isundefined{\@link}} - {} - { - \ifbool{isstart} - { - \setbool{isstart}{false} - } - {\@headersocialsep} - \href{http://\@link}{\faLink\ \@link} - } - \ifthenelse{\isundefined{\@github}} - {} - { - \ifbool{isstart} - { - \setbool{isstart}{false} - } - {\@headersocialsep} - \href{https://github.com/\@github}{\faGithubSquare\ \@github} - } - \ifthenelse{\isundefined{\@stackoverflowid}} - {} - { - \ifbool{isstart} - { - \setbool{isstart}{false} - } - {\@headersocialsep} - \href{https://stackoverflow.com/users/\@stackoverflowid}{\faStackOverflow\ \@stackoverflowname} - } - \ifthenelse{\isundefined{\@linkedin}} - {} - { - \ifbool{isstart} - { - \setbool{isstart}{false} - } - {\@headersocialsep} - \href{https://www.linkedin.com/in/\@linkedin}{\faLinkedinSquare\ \@linkedin} - } - \ifthenelse{\isundefined{\@location}} - {} - { - \ifbool{isstart} - { - \setbool{isstart}{false} - } - {\@headersocialsep} - {}{\faMapMarker\ \@location} - } - \ifthenelse{\isundefined{\@twitter}} - {} - { - \ifbool{isstart} - { - \setbool{isstart}{false} - } - {\@headersocialsep} - \href{https://twitter.com/\@twitter}{\faTwitter\ \@twitter} - } - \ifthenelse{\isundefined{\@skype}} - {} - { - \ifbool{isstart} - { - \setbool{isstart}{false} - } - {\@headersocialsep} - \faSkype\ \@skype - } - } \\ - \ifthenelse{\isundefined{\@quote}} - {} - {\vspace{6.0mm}\headerquotestyle{\@quote\\}\vspace{5.0mm}} - \end{center} -} - -% Define a footer for CV -% Usage: \makecvfooter{<left>}{<center>}{<right>} -\newcommand*{\makecvfooter}[3]{ - \fancyfoot{} - \fancyfoot[L]{ - \footerstyle{#1} - } - \fancyfoot[C]{ - \footerstyle{#2} - } - \fancyfoot[R]{ - \footerstyle{#3} - } -} - -% Define a section for CV -% Usage: \cvsection{<section-title>} -\newcommand{\cvsection}[1]{ - \par\addvspace{1.5ex} - \phantomsection{} - \sectionstyle{#1} - \color{gray}\vhrulefill{0.9pt} - \par\nobreak\addvspace{1ex} -} - -% Define a subsection for CV -% Usage: \cvsubsection{<subsection-title>} -\newcommand{\cvsubsection}[1]{ - \phantomsection{} - \subsectionstyle{#1} -} - -% Define an environment for cventry -\newenvironment{cventries}{ - \begin{center} -}{ - \end{center} -} -% Define an entry of cv information -% Usage: \cventry{<position>}{<title>}{<location>}{<date>}{<description>} -\newcommand*{\cventry}[5]{ - \setlength\tabcolsep{0pt} - \setlength{\extrarowheight}{0pt} - \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{12.5cm} R{4.5cm}} - \ifempty{#2#3} - {\entrypositionstyle{#1} & \entrydatestyle{#4} \\} - {\entrytitlestyle{#2} & \entrylocationstyle{#3} \\ - \entrypositionstyle{#1} & \entrydatestyle{#4} \\} - \multicolumn{2}{L{17cm}}{\descriptionstyle{#5}} \\ - \end{tabular*} -} - -% Define an environment for cvsubentry -\newenvironment{cvsubentries}{ - \begin{center} -}{ - \end{center} -} -% Define a subentry of cv information -% Usage: \cvsubentry{<position>}{<title>}{<date>}{<description>} -\newcommand*{\cvsubentry}[4]{ - \setlength\tabcolsep{0pt} - \setlength{\extrarowheight}{0pt} - \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{12.5cm} R{4.5cm}} - \setlength\leftskip{0.2cm} - \subentrytitlestyle{#2} & \ifthenelse{\equal{#1}{}} - {\subentrydatestyle{#3}}{} - \ifthenelse{\equal{#1}{}} - {} - {\subentrypositionstyle{#1} & \subentrydatestyle{#3} \\} - \ifthenelse{\equal{#4}{}} - {} - {\multicolumn{2}{L{17.0cm}}{\subdescriptionstyle{#4}} \\} - \end{tabular*} -} - -% Define an environment for cvhonor -\newenvironment{cvhonors}{ - \begin{center} - \setlength\tabcolsep{0pt} - \setlength{\extrarowheight}{0pt} - \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} C{1.5cm} L{13.0cm} R{2.5cm}} -}{ - \end{tabular*} - \end{center} -} -% Define a line of cv information(honor, award or something else) -% Usage: \cvhonor{<position>}{<title>}{<location>}{<date>} -\newcommand*{\cvhonor}[4]{ - \honordatestyle{#4} & \honorpositionstyle{#1}, \honortitlestyle{#2} & \honorlocationstyle{#3} - \\ -} - -% Define an environment for cvskill -\newenvironment{cvskills}{ - \begin{center} - \setlength\tabcolsep{1ex} - \setlength{\extrarowheight}{0pt} - \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} r L{15.2cm}} -}{ - \end{tabular*} - \end{center} -} -% Define a line of cv information(skill) -% Usage: \cvskill{<type>}{<skillset>} -\newcommand*{\cvskill}[2]{ - \skilltypestyle{#1} & \skillsetstyle{#2} - \\ -} - -% Define an environment for cvitems(for cventry) -\newenvironment{cvitems}{ - \vspace{-4mm} - \begin{justify} - \begin{itemize}[leftmargin=2ex, nosep, noitemsep] - \setlength{\parskip}{0pt} - \renewcommand{\labelitemi}{\bullet} -}{ - \end{itemize} - \end{justify} - \vspace{-2mm} -} - - -%------------------------------------------------------------------------------- -% Commands for elements of Cover Letter -%------------------------------------------------------------------------------- -% Define an environment for cvletter -\newenvironment{cvletter}{ - \lettertextstyle -}{ -} - -% Define a paragraph for cvletter -% Usage: \cvparagraph{<paragraph-title>} -\newcommand{\cvparagraph}[1]{ - \par\addvspace{2.5ex} - \phantomsection{} - \paragraphstyle{#1} - \color{gray}\vhrulefill{0.9pt} - \par\nobreak\addvspace{0.4ex} -} - -% Define a title of the cover letter -% Usage: \makelettertitle -\newcommand*{\makelettertitle}{ - \vspace{8.4mm} - \setlength\tabcolsep{0pt} - \setlength{\extrarowheight}{0pt} - \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{12.5cm} R{4.5cm}} - \recipienttitlestyle{\@recipientname} & \letterdatestyle{\@letterdate} - \end{tabular*} - \begin{singlespace} - \recipientaddressstyle{\@recipientaddress} \\\\ - \end{singlespace} - \ifthenelse{\isundefined{\@lettertitle}} - {} - {\lettertitlestyle{\@lettertitle} \\} - \lettertextstyle{\@letteropening} -} - -% Define a closing of the cover letter -% Usage: \makeletterclosing -\newcommand*{\makeletterclosing}{ - \vspace{3.4mm} - \lettertextstyle{\@letterclosing} \\\\ - \letternamestyle{\@firstname \@lastname} - \ifthenelse{\isundefined{\@letterenclosure}} - {\\} - { - \\\\\\ - \letterenclosurestyle{\@letterenclname: \@letterenclosure} \\ - } -} +%% Start of file `awesome-cv.cls'. +% Awesome CV Class File +% +% This class has been downloaded from: +% https://github.com/posquit0/Awesome-CV +% +% Author: +% Claud D. Park <posquit0.bj@gmail.com> +% http://www.posquit0.com +% +% Notes: +% 1) This class file defines the structure and layout of the template file (cv.tex, resume.tex). +% 2) It has been written in such a way that under most circumstances you +% should not need to edit it. +% +% Class license: +% LPPL v1.3c (http://www.latex-project.org/lppl) +% + + +%------------------------------------------------------------------------------- +% Identification +%------------------------------------------------------------------------------- +\ProvidesClass{awesome-cv}[2015/12/14 v1.3 Awesome Curriculum Vitae Class] +\NeedsTeXFormat{LaTeX2e} + + +%------------------------------------------------------------------------------- +% Class options +% +% (need to be done before the external package loading, for example because +% we need \paperwidth, \paperheight and \@ptsize to be defined before loading +% geometry and fancyhdr) +%------------------------------------------------------------------------------- +% Options for draft or final +\DeclareOption{draft}{\setlength\overfullrule{5pt}} +\DeclareOption{final}{\setlength\overfullrule{0pt}} +% Inherit options of article +\DeclareOption*{ + \PassOptionsToClass{\CurrentOption}{article} +} +\ProcessOptions\relax +\LoadClass{article} + + +%------------------------------------------------------------------------------- +% 3rd party packages +%------------------------------------------------------------------------------- +% Needed to make fixed length table +\RequirePackage{array} +% Needed to handle list environment +\RequirePackage{enumitem} +% Needed to handle text alignment +\RequirePackage{ragged2e} +% Needed to configure page layout +\RequirePackage{geometry} +% Needed to make header & footer effeciently +\RequirePackage{fancyhdr} +% Needed to manage colors +\RequirePackage{xcolor} +% Needed to use \ifxetex-\else-\fi statement +\RequirePackage{ifxetex} +% Needed to use \if-\then-\else statement +\RequirePackage{xifthen} +% Needed to use a toolbox of programming tools +\RequirePackage{etoolbox} +% Needed to change line spacing in specific environment +\RequirePackage{setspace} +% Needed to manage fonts +\ifxetex + \RequirePackage[quiet]{fontspec} + % To support LaTeX quoting style + \defaultfontfeatures{Ligatures=TeX} +\else + \RequirePackage[T1]{fontenc} + % Replace by the encoding you are using + \RequirePackage[utf8]{inputenc} +\fi +% Needed to manage math fonts +\RequirePackage{unicode-math} +% Needed to use icons from font-awesome +% (https://github.com/posquit0/latex-fontawesome) +\RequirePackage{fontawesome} +% Needed to deal a paragraphs +\RequirePackage{parskip} +% Needed to deal hyperlink +\RequirePackage{hyperref} +\hypersetup{ + pdftitle={}, + pdfauthor={}, + pdfsubject={}, + pdfkeywords={}, + colorlinks=false, + allbordercolors=white +} + + +%------------------------------------------------------------------------------- +% Configuration for directory locations +%------------------------------------------------------------------------------- +% Configure a directory location for fonts(default: 'fonts/') +\newcommand*{\fontdir}[1][fonts/]{\def\@fontdir{#1}} +\fontdir + + +%------------------------------------------------------------------------------- +% Configuration for layout +%------------------------------------------------------------------------------- +%% Page Layout +% Configure page margins with geometry +\geometry{left=2.0cm, top=1.5cm, right=2.0cm, bottom=2.0cm, footskip=.5cm} + +%% Header & Footer +% Set offset to each header and offset +\fancyhfoffset{0em} +% Remove head rule +\renewcommand{\headrulewidth}{0pt} +% Clear all header & footer fields +\fancyhf{} +% Enable if you want to make header or footer using fancyhdr +\pagestyle{fancy} + + +%------------------------------------------------------------------------------- +% Configuration for colors +%------------------------------------------------------------------------------- +% Gray-scale colors +\definecolor{white}{HTML}{FFFFFF} +\definecolor{black}{HTML}{000000} +\definecolor{darkgray}{HTML}{333333} +\definecolor{gray}{HTML}{5D5D5D} +\definecolor{lightgray}{HTML}{999999} +% Basic colors +\definecolor{green}{HTML}{C2E15F} +\definecolor{orange}{HTML}{FDA333} +\definecolor{purple}{HTML}{D3A4F9} +\definecolor{red}{HTML}{FB4485} +\definecolor{blue}{HTML}{6CE0F1} +% Text colors +\definecolor{darktext}{HTML}{414141} +\colorlet{text}{darkgray} +\colorlet{graytext}{gray} +\colorlet{lighttext}{lightgray} +% Awesome colors +\definecolor{awesome-emerald}{HTML}{00A388} +\definecolor{awesome-skyblue}{HTML}{0395DE} +\definecolor{awesome-red}{HTML}{000000} +\definecolor{awesome-pink}{HTML}{EF4089} +\definecolor{awesome-orange}{HTML}{FF6138} +\definecolor{awesome-nephritis}{HTML}{27AE60} +\definecolor{awesome-concrete}{HTML}{95A5A6} +\definecolor{awesome-darknight}{HTML}{131A28} +\colorlet{awesome}{awesome-red} + +% Awesome section color +\newcounter{colorCounter} +\def\@sectioncolor#1#2#3{% + {% + \color{% + \ifcase\value{colorCounter}% + awesome\or% + awesome\or% + awesome\or% + awesome\or% + awesome\else% + awesome\fi% + } #1#2#3% + }% + \stepcounter{colorCounter}% +} + + +%------------------------------------------------------------------------------- +% Configuration for fonts +%------------------------------------------------------------------------------- +% Set font for header (default is Roboto) +\newfontfamily\headerfont[ + Path=\@fontdir, + UprightFont=*-Regular, + ItalicFont=*-Italic, + BoldFont=*-Bold, + BoldItalicFont=*-BoldItalic, +]{Roboto} + +\newfontfamily\headerfontlight[ + Path=\@fontdir, + UprightFont=*-Thin, + ItalicFont=*-ThinItalic, + BoldFont=*-Medium, + BoldItalicFont=*-MediumItalic, +]{Roboto} + +% Set font for footer (default is Source Sans Pro) +\newfontfamily\footerfont[ + Path=\@fontdir, + UprightFont=*-Regular, + ItalicFont=*-It, + BoldFont=*-Bold +]{SourceSansPro} + +% Set font for body (default is Source Sans Pro) +\newfontfamily\bodyfont[ + Path=\@fontdir, + UprightFont=*-Regular, + ItalicFont=*-It, + BoldFont=*-Bold, + BoldItalicFont=*-BoldIt +]{SourceSansPro} + +\newfontfamily\bodyfontlight[ + Path=\@fontdir, + UprightFont=*-Light, + ItalicFont=*-LightIt, + BoldFont=*-Semibold, + BoldItalicFont=*-SemiboldIt +]{SourceSansPro} + + +%------------------------------------------------------------------------------- +% Configuration for styles +%------------------------------------------------------------------------------- +% Configure styles for each CV elements +% For fundamental structures +\newcommand*{\headerfirstnamestyle}[1]{{\fontsize{32pt}{1em}\headerfontlight\color{graytext} #1}} +\newcommand*{\headerlastnamestyle}[1]{{\fontsize{32pt}{1em}\headerfont\bfseries\color{text} #1}} +\newcommand*{\headerpositionstyle}[1]{{\fontsize{7.6pt}{1em}\bodyfont\scshape\color{awesome} #1}} +\newcommand*{\headeraddressstyle}[1]{{\fontsize{8pt}{1em}\headerfont\itshape\color{lighttext} #1}} +\newcommand*{\headersocialstyle}[1]{{\fontsize{6.8pt}{1em}\headerfont\color{text} #1}} +\newcommand*{\headerquotestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\itshape\color{darktext} #1}} +\newcommand*{\footerstyle}[1]{{\fontsize{8pt}{1em}\footerfont\scshape\color{lighttext} #1}} +\newcommand*{\sectionstyle}[1]{{\fontsize{16pt}{1em}\bodyfont\bfseries\color{text}\@sectioncolor #1}} +\newcommand*{\subsectionstyle}[1]{{\fontsize{12pt}{1em}\bodyfont\scshape\textcolor{text}{#1}}} + +% For elements of entry +\newcommand*{\entrytitlestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} +\newcommand*{\entrypositionstyle}[1]{{\fontsize{8pt}{1em}\bodyfont\scshape\color{graytext} #1}} +\newcommand*{\entrydatestyle}[1]{{\fontsize{8pt}{1em}\bodyfontlight\slshape\color{graytext} #1}} +\newcommand*{\entrylocationstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} +\newcommand*{\descriptionstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\upshape\color{text} #1}} +\newcommand*{\skill}[1]{{\fontsize{9pt}{1em}\bodyfontlight\upshape\color{text} \textnormal{#1}}} + +% For elements of subentry +\newcommand*{\subentrytitlestyle}[1]{{\fontsize{8pt}{1em}\bodyfont\mdseries\color{graytext} #1}} +\newcommand*{\subentrypositionstyle}[1]{{\fontsize{7pt}{1em}\bodyfont\scshape\color{graytext} #1}} +\newcommand*{\subentrydatestyle}[1]{{\fontsize{7pt}{1em}\bodyfontlight\slshape\color{graytext} #1}} +\newcommand*{\subentrylocationstyle}[1]{{\fontsize{7pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} +\newcommand*{\subdescriptionstyle}[1]{{\fontsize{8pt}{1em}\bodyfontlight\upshape\color{text} #1}} + +% For elements of honor +\newcommand*{\honortitlestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\color{graytext} #1}} +\newcommand*{\honorpositionstyle}[1]{{\fontsize{9pt}{1em}\bodyfont\bfseries\color{darktext} #1}} +\newcommand*{\honordatestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\color{graytext} #1}} +\newcommand*{\honorlocationstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} + +% For elements of skill +\newcommand*{\skilltypestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} +\newcommand*{\skillsetstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\color{text} #1}} + +% For elements of the cover letter +\newcommand*{\paragraphstyle}[1]{{\fontsize{14pt}{1em}\bodyfont\bfseries\color{text}\@sectioncolor #1}} +\newcommand*{\recipientaddressstyle}[1]{{\fontsize{9pt}{1em}\bodyfont\scshape\color{graytext} #1}} +\newcommand*{\recipienttitlestyle}[1]{{\fontsize{11pt}{1em}\bodyfont\bfseries\color{darktext} #1}} +\newcommand*{\lettertitlestyle}[1]{{\fontsize{10pt}{1em}\bodyfontlight\bfseries\color{darktext} \underline{#1}}} +\newcommand*{\letterdatestyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{graytext} #1}} +\newcommand*{\lettertextstyle}{\fontsize{10pt}{1.4em}\bodyfontlight\upshape\color{graytext}} +\newcommand*{\letternamestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} +\newcommand*{\letterenclosurestyle}[1]{{\fontsize{10pt}{1em}\bodyfontlight\slshape\color{lighttext} #1}} + + +%------------------------------------------------------------------------------- +% Commands for personal information +%------------------------------------------------------------------------------- +% Define writer's name +% Usage: \name{<firstname>}{<lastname>} +% Usage: \firstname{<firstname>} +% Usage: \lastname{<lastname>} +% Usage: \familyname{<familyname>} +\newcommand*{\name}[2]{\def\@firstname{#1}\def\@lastname{#2}} +\newcommand*{\firstname}[1]{\def\@firstname{#1}} +\newcommand*{\lastname}[1]{\def\@lastname{#1}} +\newcommand*{\familyname}[1]{\def\@lastname{#1}} +\def\@familyname{\@lastname} + +% Define writer's address +% Usage: \address{<address>} +\newcommand*{\address}[1]{\def\@address{#1}} + +% Define writer's position +% Usage: \name{<position>} +\newcommand*{\position}[1]{\def\@position{#1}} + +% Defines writer's mobile (optional) +% Usage: \mobile{<mobile number>} +\newcommand*{\mobile}[1]{\def\@mobile{#1}} + +% Defines writer's email (optional) +% Usage: \email{<email adress>} +\newcommand*{\email}[1]{\def\@email{#1}} + +% Defines writer's link (optional) +% Usage: \link{<url>} +\newcommand*{\link}[1]{\def\@link{#1}} + +% Defines writer's github (optional) +% Usage: \github{<github-nick>} +\newcommand*{\github}[1]{\def\@github{#1}} + +% Defines writer's github (optional) +% Usage: \github{<github-nick>} +\newcommand*{\location}[1]{\def\@location{#1}} + +% Defines writer's linked-in (optional) +% Usage: \linkedin{<linked-in-nick>} +\newcommand*{\linkedin}[1]{\def\@linkedin{#1}} + +% Defines writer's stackoverflow profile (optional) +% Usage: \stackoverflow{<so userid>}{<so username>} +% e.g.https://stackoverflow.com/users/123456/sam-smith +% would be \stackoverflow{123456}{sam-smith} +\newcommand*{\stackoverflow}[2]{\def\@stackoverflowid{#1}\def\@stackoverflowname{#2}} + +% Defines writer's skype (optional) +% Usage: \skype{<skype account>} +\newcommand*{\skype}[1]{\def\@skype{#1}} + +% Defines writer's twitter (optional) +% Usage: \twitter{<twitter handle>} +\newcommand*{\twitter}[1]{\def\@twitter{#1}} + +% Defines writer's quote (optional) +% Usage: \quote{<quote>} +\renewcommand*{\quote}[1]{\def\@quote{#1}} + +% Defines recipient's information (cover letter only) +% Usage: \recipient{<recipient name>}{<recipient address>} +% Usage: \recipientname{<recipient name>} +% Usage: \recipientaddress{<recipient address>} +\newcommand*{\recipient}[2]{\def\@recipientname{#1}\def\@recipientaddress{#2}} +\newcommand*{\recipientname}[1]{\def\@recipientname{#1}} +\newcommand*{\recipientaddress}[1]{\def\@recipientaddress{#1}} + +% Defines the title for letter (cover letter only, optional) +% Usage: \lettertitle{<title>} +\newcommand*{\lettertitle}[1]{\def\@lettertitle{#1}} + +% Defines the date for letter (cover letter only) +% Usage: \letterdate{<date>} +\newcommand*{\letterdate}[1]{\def\@letterdate{#1}} + +% Defines a message of opening for letter (cover letter only) +% Usage: \letteropening{<message>} +\newcommand*{\letteropening}[1]{\def\@letteropening{#1}} + +% Defines a message of closing for letter (cover letter only) +% Usage: \letterclosing{<message>} +\newcommand*{\letterclosing}[1]{\def\@letterclosing{#1}} + +% Defines an enclosure for letter (cover letter only, optional) +% Usage: \letterenclosure[<enclosure name>]{<enclosure>} +\newcommand*{\letterenclname}[1][Enclosure]{\def\@letterenclname{#1}} +\newcommand*{\letterenclosure}[2][]{ + % if an optional argument is provided, use it to redefine \enclname + \ifthenelse{\equal{#1}{}}{}{\def\@letterenclname{#1}} + \def\@letterenclosure{#2} +} + + +%------------------------------------------------------------------------------- +% Commands for extra +%------------------------------------------------------------------------------- +% Define separator for social informations in header +% Usage: \headersocialsep{<separator>} +% Default: \quad\textbar\quad +\newcommand*{\headersocialsep}[1][\quad\textbar\quad]{\def\@headersocialsep{#1}} +\headersocialsep + + +%------------------------------------------------------------------------------- +% Commands for utilities +%------------------------------------------------------------------------------- +% Use to align an element of tabular table +\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} +\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} +\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} + +% Use to draw horizontal line with specific tickness +\def\vhrulefill#1{\leavevmode\leaders\hrule\@height#1\hfill \kern\z@} + +% Use to execute conditional statements by checking empty string +\newcommand*{\ifempty}[3]{\ifthenelse{\isempty{#1}}{#2}{#3}} + + +%------------------------------------------------------------------------------- +% Commands for elements of CV structure +%------------------------------------------------------------------------------- +% Define a header for CV +% Usage: \makecvheader +\newcommand*{\makecvheader}{ + \begin{center} + \headerfirstnamestyle{ + \@firstname + } \headerlastnamestyle{ + \@lastname + } + \\ + \vspace{0.4mm} + \ifthenelse{\isundefined{\@position}}{}{\headerpositionstyle{\@position\\}} + \vspace{0.4mm} + \ifthenelse{\isundefined{\@address}}{}{\headeraddressstyle{\@address\\}} + \vspace{-0.5mm} + \headersocialstyle{ + \newbool{isstart} + \setbool{isstart}{true} + \ifthenelse{\isundefined{\@mobile}} + {} + { + \faMobile\ \@mobile + \setbool{isstart}{false} + } + \ifthenelse{\isundefined{\@email}} + {} + { + \ifbool{isstart} + { + \setbool{isstart}{false} + } + {\@headersocialsep} + \href{mailto:\@email}{\faEnvelope\ \@email} + } + \ifthenelse{\isundefined{\@link}} + {} + { + \ifbool{isstart} + { + \setbool{isstart}{false} + } + {\@headersocialsep} + \href{http://\@link}{\faLink\ \@link} + } + \ifthenelse{\isundefined{\@github}} + {} + { + \ifbool{isstart} + { + \setbool{isstart}{false} + } + {\@headersocialsep} + \href{https://github.com/\@github}{\faGithubSquare\ \@github} + } + \ifthenelse{\isundefined{\@stackoverflowid}} + {} + { + \ifbool{isstart} + { + \setbool{isstart}{false} + } + {\@headersocialsep} + \href{https://stackoverflow.com/users/\@stackoverflowid}{\faStackOverflow\ \@stackoverflowname} + } + \ifthenelse{\isundefined{\@linkedin}} + {} + { + \ifbool{isstart} + { + \setbool{isstart}{false} + } + {\@headersocialsep} + \href{https://www.linkedin.com/in/\@linkedin}{\faLinkedinSquare\ \@linkedin} + } + \ifthenelse{\isundefined{\@location}} + {} + { + \ifbool{isstart} + { + \setbool{isstart}{false} + } + {\@headersocialsep} + {}{\faMapMarker\ \@location} + } + \ifthenelse{\isundefined{\@twitter}} + {} + { + \ifbool{isstart} + { + \setbool{isstart}{false} + } + {\@headersocialsep} + \href{https://twitter.com/\@twitter}{\faTwitter\ \@twitter} + } + \ifthenelse{\isundefined{\@skype}} + {} + { + \ifbool{isstart} + { + \setbool{isstart}{false} + } + {\@headersocialsep} + \faSkype\ \@skype + } + } \\ + \ifthenelse{\isundefined{\@quote}} + {} + {\vspace{6.0mm}\headerquotestyle{\@quote\\}\vspace{5.0mm}} + \end{center} +} + +% Define a footer for CV +% Usage: \makecvfooter{<left>}{<center>}{<right>} +\newcommand*{\makecvfooter}[3]{ + \fancyfoot{} + \fancyfoot[L]{ + \footerstyle{#1} + } + \fancyfoot[C]{ + \footerstyle{#2} + } + \fancyfoot[R]{ + \footerstyle{#3} + } +} + +% Define a section for CV +% Usage: \cvsection{<section-title>} +\newcommand{\cvsection}[1]{ + \par\addvspace{1.5ex} + \phantomsection{} + \sectionstyle{#1} + \color{gray}\vhrulefill{0.9pt} + \par\nobreak\addvspace{1ex} +} + +% Define a subsection for CV +% Usage: \cvsubsection{<subsection-title>} +\newcommand{\cvsubsection}[1]{ + \phantomsection{} + \subsectionstyle{#1} +} + +% Define an environment for cventry +\newenvironment{cventries}{ + \begin{center} +}{ + \end{center} +} +% Define an entry of cv information +% Usage: \cventry{<position>}{<title>}{<location>}{<date>}{<description>} +\newcommand*{\cventry}[5]{ + \setlength\tabcolsep{0pt} + \setlength{\extrarowheight}{0pt} + \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{12.5cm} R{4.5cm}} + \ifempty{#2#3} + {\entrypositionstyle{#1} & \entrydatestyle{#4} \\} + {\entrytitlestyle{#2} & \entrylocationstyle{#3} \\ + \entrypositionstyle{#1} & \entrydatestyle{#4} \\} + \multicolumn{2}{L{17cm}}{\descriptionstyle{#5}} \\ + \end{tabular*} +} + +% Define an environment for cvsubentry +\newenvironment{cvsubentries}{ + \begin{center} +}{ + \end{center} +} +% Define a subentry of cv information +% Usage: \cvsubentry{<position>}{<title>}{<date>}{<description>} +\newcommand*{\cvsubentry}[4]{ + \setlength\tabcolsep{0pt} + \setlength{\extrarowheight}{0pt} + \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{12.5cm} R{4.5cm}} + \setlength\leftskip{0.2cm} + \subentrytitlestyle{#2} & \ifthenelse{\equal{#1}{}} + {\subentrydatestyle{#3}}{} + \ifthenelse{\equal{#1}{}} + {} + {\subentrypositionstyle{#1} & \subentrydatestyle{#3} \\} + \ifthenelse{\equal{#4}{}} + {} + {\multicolumn{2}{L{17.0cm}}{\subdescriptionstyle{#4}} \\} + \end{tabular*} +} + +% Define an environment for cvhonor +\newenvironment{cvhonors}{ + \begin{center} + \setlength\tabcolsep{0pt} + \setlength{\extrarowheight}{0pt} + \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} C{1.5cm} L{13.0cm} R{2.5cm}} +}{ + \end{tabular*} + \end{center} +} +% Define a line of cv information(honor, award or something else) +% Usage: \cvhonor{<position>}{<title>}{<location>}{<date>} +\newcommand*{\cvhonor}[4]{ + \honordatestyle{#4} & \honorpositionstyle{#1}, \honortitlestyle{#2} & \honorlocationstyle{#3} + \\ +} + +% Define an environment for cvskill +\newenvironment{cvskills}{ + \begin{center} + \setlength\tabcolsep{1ex} + \setlength{\extrarowheight}{0pt} + \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} r L{15.2cm}} +}{ + \end{tabular*} + \end{center} +} +% Define a line of cv information(skill) +% Usage: \cvskill{<type>}{<skillset>} +\newcommand*{\cvskill}[2]{ + \skilltypestyle{#1} & \skillsetstyle{#2} + \\ +} + +% Define an environment for cvitems(for cventry) +\newenvironment{cvitems}{ + \vspace{-4mm} + \begin{justify} + \begin{itemize}[leftmargin=2ex, nosep, noitemsep] + \setlength{\parskip}{0pt} + \renewcommand{\labelitemi}{\bullet} +}{ + \end{itemize} + \end{justify} + \vspace{-2mm} +} + + +%------------------------------------------------------------------------------- +% Commands for elements of Cover Letter +%------------------------------------------------------------------------------- +% Define an environment for cvletter +\newenvironment{cvletter}{ + \lettertextstyle +}{ +} + +% Define a paragraph for cvletter +% Usage: \cvparagraph{<paragraph-title>} +\newcommand{\cvparagraph}[1]{ + \par\addvspace{2.5ex} + \phantomsection{} + \paragraphstyle{#1} + \color{gray}\vhrulefill{0.9pt} + \par\nobreak\addvspace{0.4ex} +} + +% Define a title of the cover letter +% Usage: \makelettertitle +\newcommand*{\makelettertitle}{ + \vspace{8.4mm} + \setlength\tabcolsep{0pt} + \setlength{\extrarowheight}{0pt} + \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{12.5cm} R{4.5cm}} + \recipienttitlestyle{\@recipientname} & \letterdatestyle{\@letterdate} + \end{tabular*} + \begin{singlespace} + \recipientaddressstyle{\@recipientaddress} \\\\ + \end{singlespace} + \ifthenelse{\isundefined{\@lettertitle}} + {} + {\lettertitlestyle{\@lettertitle} \\} + \lettertextstyle{\@letteropening} +} + +% Define a closing of the cover letter +% Usage: \makeletterclosing +\newcommand*{\makeletterclosing}{ + \vspace{3.4mm} + \lettertextstyle{\@letterclosing} \\\\ + \letternamestyle{\@firstname \@lastname} + \ifthenelse{\isundefined{\@letterenclosure}} + {\\} + { + \\\\\\ + \letterenclosurestyle{\@letterenclname: \@letterenclosure} \\ + } +} diff --git a/public/templates/template2/fontawesome.sty b/public/templates/template2/fontawesome.sty index ca60f2b5..86e56ef3 100755 --- a/public/templates/template2/fontawesome.sty +++ b/public/templates/template2/fontawesome.sty @@ -1,683 +1,683 @@ -%% Copyright 2015 Claud D. Park <posquit0.bj@gmail.com> -%% It is based on furl's latex-fontawesome project. - -% Identify this package. -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{fontawesome}[2015/11/04 v4.4.0 font awesome icons] - -% Requirements to use. -\usepackage{fontspec} - -% Define shortcut to load the Font Awesome font. -\newfontfamily{\FA}[ -Path=fonts/ -]{FontAwesome} -% Generic command displaying an icon by its name. -\newcommand*{\faicon}[1]{{ - \FA\csname faicon@#1\endcsname -}} - -\expandafter\def\csname faicon@adjust\endcsname {\symbol{"F042}} \def\faAdjust {{\FA\csname faicon@adjust\endcsname}} -\expandafter\def\csname faicon@adn\endcsname {\symbol{"F170}} \def\faAdn {{\FA\csname faicon@adn\endcsname}} -\expandafter\def\csname faicon@align-center\endcsname {\symbol{"F037}} \def\faAlignCenter {{\FA\csname faicon@align-center\endcsname}} -\expandafter\def\csname faicon@align-justify\endcsname {\symbol{"F039}} \def\faAlignJustify {{\FA\csname faicon@align-justify\endcsname}} -\expandafter\def\csname faicon@align-left\endcsname {\symbol{"F036}} \def\faAlignLeft {{\FA\csname faicon@align-left\endcsname}} -\expandafter\def\csname faicon@align-right\endcsname {\symbol{"F038}} \def\faAlignRight {{\FA\csname faicon@align-right\endcsname}} -\expandafter\def\csname faicon@amazon\endcsname {\symbol{"F270}} \def\faAmazon {{\FA\csname faicon@amazon\endcsname}} -\expandafter\def\csname faicon@ambulance\endcsname {\symbol{"F0F9}} \def\faAmbulance {{\FA\csname faicon@ambulance\endcsname}} -\expandafter\def\csname faicon@anchor\endcsname {\symbol{"F13D}} \def\faAnchor {{\FA\csname faicon@anchor\endcsname}} -\expandafter\def\csname faicon@android\endcsname {\symbol{"F17B}} \def\faAndroid {{\FA\csname faicon@android\endcsname}} -\expandafter\def\csname faicon@angellist\endcsname {\symbol{"F209}} \def\faAngellist {{\FA\csname faicon@angellist\endcsname}} -\expandafter\def\csname faicon@angle-double-down\endcsname {\symbol{"F103}} \def\faAngleDoubleDown {{\FA\csname faicon@angle-double-down\endcsname}} -\expandafter\def\csname faicon@angle-double-left\endcsname {\symbol{"F100}} \def\faAngleDoubleLeft {{\FA\csname faicon@angle-double-left\endcsname}} -\expandafter\def\csname faicon@angle-double-right\endcsname {\symbol{"F101}} \def\faAngleDoubleRight {{\FA\csname faicon@angle-double-right\endcsname}} -\expandafter\def\csname faicon@angle-double-up\endcsname {\symbol{"F102}} \def\faAngleDoubleUp {{\FA\csname faicon@angle-double-up\endcsname}} -\expandafter\def\csname faicon@angle-down\endcsname {\symbol{"F107}} \def\faAngleDown {{\FA\csname faicon@angle-down\endcsname}} -\expandafter\def\csname faicon@angle-left\endcsname {\symbol{"F104}} \def\faAngleLeft {{\FA\csname faicon@angle-left\endcsname}} -\expandafter\def\csname faicon@angle-right\endcsname {\symbol{"F105}} \def\faAngleRight {{\FA\csname faicon@angle-right\endcsname}} -\expandafter\def\csname faicon@angle-up\endcsname {\symbol{"F106}} \def\faAngleUp {{\FA\csname faicon@angle-up\endcsname}} -\expandafter\def\csname faicon@apple\endcsname {\symbol{"F179}} \def\faApple {{\FA\csname faicon@apple\endcsname}} -\expandafter\def\csname faicon@archive\endcsname {\symbol{"F187}} \def\faArchive {{\FA\csname faicon@archive\endcsname}} -\expandafter\def\csname faicon@area-chart\endcsname {\symbol{"F1FE}} \def\faAreaChart {{\FA\csname faicon@area-chart\endcsname}} -\expandafter\def\csname faicon@arrow-circle-down\endcsname {\symbol{"F0AB}} \def\faArrowCircleDown {{\FA\csname faicon@arrow-circle-down\endcsname}} -\expandafter\def\csname faicon@arrow-circle-left\endcsname {\symbol{"F0A8}} \def\faArrowCircleLeft {{\FA\csname faicon@arrow-circle-left\endcsname}} -\expandafter\def\csname faicon@arrow-circle-o-down\endcsname {\symbol{"F01A}} \def\faArrowCircleODown {{\FA\csname faicon@arrow-circle-o-down\endcsname}} -\expandafter\def\csname faicon@arrow-circle-o-left\endcsname {\symbol{"F190}} \def\faArrowCircleOLeft {{\FA\csname faicon@arrow-circle-o-left\endcsname}} -\expandafter\def\csname faicon@arrow-circle-o-right\endcsname {\symbol{"F18E}} \def\faArrowCircleORight {{\FA\csname faicon@arrow-circle-o-right\endcsname}} -\expandafter\def\csname faicon@arrow-circle-o-up\endcsname {\symbol{"F01B}} \def\faArrowCircleOUp {{\FA\csname faicon@arrow-circle-o-up\endcsname}} -\expandafter\def\csname faicon@arrow-circle-right\endcsname {\symbol{"F0A9}} \def\faArrowCircleRight {{\FA\csname faicon@arrow-circle-right\endcsname}} -\expandafter\def\csname faicon@arrow-circle-up\endcsname {\symbol{"F0AA}} \def\faArrowCircleUp {{\FA\csname faicon@arrow-circle-up\endcsname}} -\expandafter\def\csname faicon@arrow-down\endcsname {\symbol{"F063}} \def\faArrowDown {{\FA\csname faicon@arrow-down\endcsname}} -\expandafter\def\csname faicon@arrow-left\endcsname {\symbol{"F060}} \def\faArrowLeft {{\FA\csname faicon@arrow-left\endcsname}} -\expandafter\def\csname faicon@arrow-right\endcsname {\symbol{"F061}} \def\faArrowRight {{\FA\csname faicon@arrow-right\endcsname}} -\expandafter\def\csname faicon@arrow-up\endcsname {\symbol{"F062}} \def\faArrowUp {{\FA\csname faicon@arrow-up\endcsname}} -\expandafter\def\csname faicon@arrows\endcsname {\symbol{"F047}} \def\faArrows {{\FA\csname faicon@arrows\endcsname}} -\expandafter\def\csname faicon@arrows-alt\endcsname {\symbol{"F0B2}} \def\faArrowsAlt {{\FA\csname faicon@arrows-alt\endcsname}} -\expandafter\def\csname faicon@arrows-h\endcsname {\symbol{"F07E}} \def\faArrowsH {{\FA\csname faicon@arrows-h\endcsname}} -\expandafter\def\csname faicon@arrows-v\endcsname {\symbol{"F07D}} \def\faArrowsV {{\FA\csname faicon@arrows-v\endcsname}} -\expandafter\def\csname faicon@asterisk\endcsname {\symbol{"F069}} \def\faAsterisk {{\FA\csname faicon@asterisk\endcsname}} -\expandafter\def\csname faicon@at\endcsname {\symbol{"F1FA}} \def\faAt {{\FA\csname faicon@at\endcsname}} -\expandafter\def\csname faicon@automobile\endcsname {\symbol{"F1B9}} \def\faAutomobile {{\FA\csname faicon@automobile\endcsname}} -\expandafter\def\csname faicon@backward\endcsname {\symbol{"F04A}} \def\faBackward {{\FA\csname faicon@backward\endcsname}} -\expandafter\def\csname faicon@balance-scale\endcsname {\symbol{"F24E}} \def\faBalanceScale {{\FA\csname faicon@balance-scale\endcsname}} -\expandafter\def\csname faicon@ban\endcsname {\symbol{"F05E}} \def\faBan {{\FA\csname faicon@ban\endcsname}} -\expandafter\def\csname faicon@bank\endcsname {\symbol{"F19C}} \def\faBank {{\FA\csname faicon@bank\endcsname}} -\expandafter\def\csname faicon@bar-chart\endcsname {\symbol{"F080}} \def\faBarChart {{\FA\csname faicon@bar-chart\endcsname}} -\expandafter\def\csname faicon@bar-chart-o\endcsname {\symbol{"F080}} \def\faBarChartO {{\FA\csname faicon@bar-chart-o\endcsname}} -\expandafter\def\csname faicon@barcode\endcsname {\symbol{"F02A}} \def\faBarcode {{\FA\csname faicon@barcode\endcsname}} -\expandafter\def\csname faicon@bars\endcsname {\symbol{"F0C9}} \def\faBars {{\FA\csname faicon@bars\endcsname}} -\expandafter\def\csname faicon@battery-empty\endcsname {\symbol{"F244}} \def\faBatteryEmpty {{\FA\csname faicon@battery-empty\endcsname}} -\expandafter\def\csname faicon@battery-full\endcsname {\symbol{"F240}} \def\faBatteryFull {{\FA\csname faicon@battery-full\endcsname}} -\expandafter\def\csname faicon@battery-half\endcsname {\symbol{"F242}} \def\faBatteryHalf {{\FA\csname faicon@battery-half\endcsname}} -\expandafter\def\csname faicon@battery-quarter\endcsname {\symbol{"F243}} \def\faBatteryQuarter {{\FA\csname faicon@battery-quarter\endcsname}} -\expandafter\def\csname faicon@battery-three-quarters\endcsname {\symbol{"F241}} \def\faBatteryThreeQuarters {{\FA\csname faicon@battery-three-quarters\endcsname}} -\expandafter\def\csname faicon@bed\endcsname {\symbol{"F236}} \def\faBed {{\FA\csname faicon@bed\endcsname}} -\expandafter\def\csname faicon@beer\endcsname {\symbol{"F0FC}} \def\faBeer {{\FA\csname faicon@beer\endcsname}} -\expandafter\def\csname faicon@behance\endcsname {\symbol{"F1B4}} \def\faBehance {{\FA\csname faicon@behance\endcsname}} -\expandafter\def\csname faicon@behance-square\endcsname {\symbol{"F1B5}} \def\faBehanceSquare {{\FA\csname faicon@behance-square\endcsname}} -\expandafter\def\csname faicon@bell\endcsname {\symbol{"F0F3}} \def\faBell {{\FA\csname faicon@bell\endcsname}} -\expandafter\def\csname faicon@bell-o\endcsname {\symbol{"F0A2}} \def\faBellO {{\FA\csname faicon@bell-o\endcsname}} -\expandafter\def\csname faicon@bell-slash\endcsname {\symbol{"F1F6}} \def\faBellSlash {{\FA\csname faicon@bell-slash\endcsname}} -\expandafter\def\csname faicon@bell-slash-o\endcsname {\symbol{"F1F7}} \def\faBellSlashO {{\FA\csname faicon@bell-slash-o\endcsname}} -\expandafter\def\csname faicon@bicycle\endcsname {\symbol{"F206}} \def\faBicycle {{\FA\csname faicon@bicycle\endcsname}} -\expandafter\def\csname faicon@binoculars\endcsname {\symbol{"F1E5}} \def\faBinoculars {{\FA\csname faicon@binoculars\endcsname}} -\expandafter\def\csname faicon@birthday-cake\endcsname {\symbol{"F1FD}} \def\faBirthdayCake {{\FA\csname faicon@birthday-cake\endcsname}} -\expandafter\def\csname faicon@bitbucket\endcsname {\symbol{"F171}} \def\faBitbucket {{\FA\csname faicon@bitbucket\endcsname}} -\expandafter\def\csname faicon@bitbucket-square\endcsname {\symbol{"F172}} \def\faBitbucketSquare {{\FA\csname faicon@bitbucket-square\endcsname}} -\expandafter\def\csname faicon@bitcoin\endcsname {\symbol{"F15A}} \def\faBitcoin {{\FA\csname faicon@bitcoin\endcsname}} -\expandafter\def\csname faicon@black-tie\endcsname {\symbol{"F27E}} \def\faBlackTie {{\FA\csname faicon@black-tie\endcsname}} -\expandafter\def\csname faicon@bold\endcsname {\symbol{"F032}} \def\faBold {{\FA\csname faicon@bold\endcsname}} -\expandafter\def\csname faicon@bolt\endcsname {\symbol{"F0E7}} \def\faBolt {{\FA\csname faicon@bolt\endcsname}} -\expandafter\def\csname faicon@bomb\endcsname {\symbol{"F1E2}} \def\faBomb {{\FA\csname faicon@bomb\endcsname}} -\expandafter\def\csname faicon@book\endcsname {\symbol{"F02D}} \def\faBook {{\FA\csname faicon@book\endcsname}} -\expandafter\def\csname faicon@bookmark\endcsname {\symbol{"F02E}} \def\faBookmark {{\FA\csname faicon@bookmark\endcsname}} -\expandafter\def\csname faicon@bookmark-o\endcsname {\symbol{"F097}} \def\faBookmarkO {{\FA\csname faicon@bookmark-o\endcsname}} -\expandafter\def\csname faicon@briefcase\endcsname {\symbol{"F0B1}} \def\faBriefcase {{\FA\csname faicon@briefcase\endcsname}} -\expandafter\def\csname faicon@btc\endcsname {\symbol{"F15A}} \def\faBtc {{\FA\csname faicon@btc\endcsname}} -\expandafter\def\csname faicon@bug\endcsname {\symbol{"F188}} \def\faBug {{\FA\csname faicon@bug\endcsname}} -\expandafter\def\csname faicon@building\endcsname {\symbol{"F1AD}} \def\faBuilding {{\FA\csname faicon@building\endcsname}} -\expandafter\def\csname faicon@building-o\endcsname {\symbol{"F0F7}} \def\faBuildingO {{\FA\csname faicon@building-o\endcsname}} -\expandafter\def\csname faicon@bullhorn\endcsname {\symbol{"F0A1}} \def\faBullhorn {{\FA\csname faicon@bullhorn\endcsname}} -\expandafter\def\csname faicon@bullseye\endcsname {\symbol{"F140}} \def\faBullseye {{\FA\csname faicon@bullseye\endcsname}} -\expandafter\def\csname faicon@bus\endcsname {\symbol{"F207}} \def\faBus {{\FA\csname faicon@bus\endcsname}} -\expandafter\def\csname faicon@buysellads\endcsname {\symbol{"F20D}} \def\faBuysellads {{\FA\csname faicon@buysellads\endcsname}} -\expandafter\def\csname faicon@cab\endcsname {\symbol{"F1BA}} \def\faCab {{\FA\csname faicon@cab\endcsname}} -\expandafter\def\csname faicon@calculator\endcsname {\symbol{"F1EC}} \def\faCalculator {{\FA\csname faicon@calculator\endcsname}} -\expandafter\def\csname faicon@calendar\endcsname {\symbol{"F073}} \def\faCalendar {{\FA\csname faicon@calendar\endcsname}} -\expandafter\def\csname faicon@calendar-check-o\endcsname {\symbol{"F274}} \def\faCalendarCheckO {{\FA\csname faicon@calendar-check-o\endcsname}} -\expandafter\def\csname faicon@calendar-minus-o\endcsname {\symbol{"F272}} \def\faCalendarMinusO {{\FA\csname faicon@calendar-minus-o\endcsname}} -\expandafter\def\csname faicon@calendar-o\endcsname {\symbol{"F133}} \def\faCalendarO {{\FA\csname faicon@calendar-o\endcsname}} -\expandafter\def\csname faicon@calendar-plus-o\endcsname {\symbol{"F271}} \def\faCalendarPlusO {{\FA\csname faicon@calendar-plus-o\endcsname}} -\expandafter\def\csname faicon@calendar-times-o\endcsname {\symbol{"F273}} \def\faCalendarTimesO {{\FA\csname faicon@calendar-times-o\endcsname}} -\expandafter\def\csname faicon@camera\endcsname {\symbol{"F030}} \def\faCamera {{\FA\csname faicon@camera\endcsname}} -\expandafter\def\csname faicon@camera-retro\endcsname {\symbol{"F083}} \def\faCameraRetro {{\FA\csname faicon@camera-retro\endcsname}} -\expandafter\def\csname faicon@car\endcsname {\symbol{"F1B9}} \def\faCar {{\FA\csname faicon@car\endcsname}} -\expandafter\def\csname faicon@caret-down\endcsname {\symbol{"F0D7}} \def\faCaretDown {{\FA\csname faicon@caret-down\endcsname}} -\expandafter\def\csname faicon@caret-left\endcsname {\symbol{"F0D9}} \def\faCaretLeft {{\FA\csname faicon@caret-left\endcsname}} -\expandafter\def\csname faicon@caret-right\endcsname {\symbol{"F0DA}} \def\faCaretRight {{\FA\csname faicon@caret-right\endcsname}} -\expandafter\def\csname faicon@caret-square-o-down\endcsname {\symbol{"F150}} \def\faCaretSquareODown {{\FA\csname faicon@caret-square-o-down\endcsname}} -\expandafter\def\csname faicon@caret-square-o-left\endcsname {\symbol{"F191}} \def\faCaretSquareOLeft {{\FA\csname faicon@caret-square-o-left\endcsname}} -\expandafter\def\csname faicon@caret-square-o-right\endcsname {\symbol{"F152}} \def\faCaretSquareORight {{\FA\csname faicon@caret-square-o-right\endcsname}} -\expandafter\def\csname faicon@caret-square-o-up\endcsname {\symbol{"F151}} \def\faCaretSquareOUp {{\FA\csname faicon@caret-square-o-up\endcsname}} -\expandafter\def\csname faicon@caret-up\endcsname {\symbol{"F0D8}} \def\faCaretUp {{\FA\csname faicon@caret-up\endcsname}} -\expandafter\def\csname faicon@cart-arrow-down\endcsname {\symbol{"F218}} \def\faCartArrowDown {{\FA\csname faicon@cart-arrow-down\endcsname}} -\expandafter\def\csname faicon@cart-plus\endcsname {\symbol{"F217}} \def\faCartPlus {{\FA\csname faicon@cart-plus\endcsname}} -\expandafter\def\csname faicon@cc\endcsname {\symbol{"F20A}} \def\faCc {{\FA\csname faicon@cc\endcsname}} -\expandafter\def\csname faicon@cc-amex\endcsname {\symbol{"F1F3}} \def\faCcAmex {{\FA\csname faicon@cc-amex\endcsname}} -\expandafter\def\csname faicon@cc-diners-club\endcsname {\symbol{"F24C}} \def\faCcDinersClub {{\FA\csname faicon@cc-diners-club\endcsname}} -\expandafter\def\csname faicon@cc-discover\endcsname {\symbol{"F1F2}} \def\faCcDiscover {{\FA\csname faicon@cc-discover\endcsname}} -\expandafter\def\csname faicon@cc-jcb\endcsname {\symbol{"F24B}} \def\faCcJcb {{\FA\csname faicon@cc-jcb\endcsname}} -\expandafter\def\csname faicon@cc-mastercard\endcsname {\symbol{"F1F1}} \def\faCcMastercard {{\FA\csname faicon@cc-mastercard\endcsname}} -\expandafter\def\csname faicon@cc-paypal\endcsname {\symbol{"F1F4}} \def\faCcPaypal {{\FA\csname faicon@cc-paypal\endcsname}} -\expandafter\def\csname faicon@cc-stripe\endcsname {\symbol{"F1F5}} \def\faCcStripe {{\FA\csname faicon@cc-stripe\endcsname}} -\expandafter\def\csname faicon@cc-visa\endcsname {\symbol{"F1F0}} \def\faCcVisa {{\FA\csname faicon@cc-visa\endcsname}} -\expandafter\def\csname faicon@certificate\endcsname {\symbol{"F0A3}} \def\faCertificate {{\FA\csname faicon@certificate\endcsname}} -\expandafter\def\csname faicon@chain\endcsname {\symbol{"F0C1}} \def\faChain {{\FA\csname faicon@chain\endcsname}} -\expandafter\def\csname faicon@chain-broken\endcsname {\symbol{"F127}} \def\faChainBroken {{\FA\csname faicon@chain-broken\endcsname}} -\expandafter\def\csname faicon@check\endcsname {\symbol{"F00C}} \def\faCheck {{\FA\csname faicon@check\endcsname}} -\expandafter\def\csname faicon@check-circle\endcsname {\symbol{"F058}} \def\faCheckCircle {{\FA\csname faicon@check-circle\endcsname}} -\expandafter\def\csname faicon@check-circle-o\endcsname {\symbol{"F05D}} \def\faCheckCircleO {{\FA\csname faicon@check-circle-o\endcsname}} -\expandafter\def\csname faicon@check-square\endcsname {\symbol{"F14A}} \def\faCheckSquare {{\FA\csname faicon@check-square\endcsname}} -\expandafter\def\csname faicon@check-square-o\endcsname {\symbol{"F046}} \def\faCheckSquareO {{\FA\csname faicon@check-square-o\endcsname}} -\expandafter\def\csname faicon@chevron-circle-down\endcsname {\symbol{"F13A}} \def\faChevronCircleDown {{\FA\csname faicon@chevron-circle-down\endcsname}} -\expandafter\def\csname faicon@chevron-circle-left\endcsname {\symbol{"F137}} \def\faChevronCircleLeft {{\FA\csname faicon@chevron-circle-left\endcsname}} -\expandafter\def\csname faicon@chevron-circle-right\endcsname {\symbol{"F138}} \def\faChevronCircleRight {{\FA\csname faicon@chevron-circle-right\endcsname}} -\expandafter\def\csname faicon@chevron-circle-up\endcsname {\symbol{"F139}} \def\faChevronCircleUp {{\FA\csname faicon@chevron-circle-up\endcsname}} -\expandafter\def\csname faicon@chevron-down\endcsname {\symbol{"F078}} \def\faChevronDown {{\FA\csname faicon@chevron-down\endcsname}} -\expandafter\def\csname faicon@chevron-left\endcsname {\symbol{"F053}} \def\faChevronLeft {{\FA\csname faicon@chevron-left\endcsname}} -\expandafter\def\csname faicon@chevron-right\endcsname {\symbol{"F054}} \def\faChevronRight {{\FA\csname faicon@chevron-right\endcsname}} -\expandafter\def\csname faicon@chevron-up\endcsname {\symbol{"F077}} \def\faChevronUp {{\FA\csname faicon@chevron-up\endcsname}} -\expandafter\def\csname faicon@child\endcsname {\symbol{"F1AE}} \def\faChild {{\FA\csname faicon@child\endcsname}} -\expandafter\def\csname faicon@chrome\endcsname {\symbol{"F268}} \def\faChrome {{\FA\csname faicon@chrome\endcsname}} -\expandafter\def\csname faicon@circle\endcsname {\symbol{"F111}} \def\faCircle {{\FA\csname faicon@circle\endcsname}} -\expandafter\def\csname faicon@circle-o\endcsname {\symbol{"F10C}} \def\faCircleO {{\FA\csname faicon@circle-o\endcsname}} -\expandafter\def\csname faicon@circle-o-notch\endcsname {\symbol{"F1CE}} \def\faCircleONotch {{\FA\csname faicon@circle-o-notch\endcsname}} -\expandafter\def\csname faicon@circle-thin\endcsname {\symbol{"F1DB}} \def\faCircleThin {{\FA\csname faicon@circle-thin\endcsname}} -\expandafter\def\csname faicon@clipboard\endcsname {\symbol{"F0EA}} \def\faClipboard {{\FA\csname faicon@clipboard\endcsname}} -\expandafter\def\csname faicon@clock-o\endcsname {\symbol{"F017}} \def\faClockO {{\FA\csname faicon@clock-o\endcsname}} -\expandafter\def\csname faicon@clone\endcsname {\symbol{"F24D}} \def\faClone {{\FA\csname faicon@clone\endcsname}} -\expandafter\def\csname faicon@close\endcsname {\symbol{"F00D}} \def\faClose {{\FA\csname faicon@close\endcsname}} -\expandafter\def\csname faicon@cloud\endcsname {\symbol{"F0C2}} \def\faCloud {{\FA\csname faicon@cloud\endcsname}} -\expandafter\def\csname faicon@cloud-download\endcsname {\symbol{"F0ED}} \def\faCloudDownload {{\FA\csname faicon@cloud-download\endcsname}} -\expandafter\def\csname faicon@cloud-upload\endcsname {\symbol{"F0EE}} \def\faCloudUpload {{\FA\csname faicon@cloud-upload\endcsname}} -\expandafter\def\csname faicon@cny\endcsname {\symbol{"F157}} \def\faCny {{\FA\csname faicon@cny\endcsname}} -\expandafter\def\csname faicon@code\endcsname {\symbol{"F121}} \def\faCode {{\FA\csname faicon@code\endcsname}} -\expandafter\def\csname faicon@code-fork\endcsname {\symbol{"F126}} \def\faCodeFork {{\FA\csname faicon@code-fork\endcsname}} -\expandafter\def\csname faicon@codepen\endcsname {\symbol{"F1CB}} \def\faCodepen {{\FA\csname faicon@codepen\endcsname}} -\expandafter\def\csname faicon@coffee\endcsname {\symbol{"F0F4}} \def\faCoffee {{\FA\csname faicon@coffee\endcsname}} -\expandafter\def\csname faicon@cog\endcsname {\symbol{"F013}} \def\faCog {{\FA\csname faicon@cog\endcsname}} -\expandafter\def\csname faicon@cogs\endcsname {\symbol{"F085}} \def\faCogs {{\FA\csname faicon@cogs\endcsname}} -\expandafter\def\csname faicon@columns\endcsname {\symbol{"F0DB}} \def\faColumns {{\FA\csname faicon@columns\endcsname}} -\expandafter\def\csname faicon@comment\endcsname {\symbol{"F075}} \def\faComment {{\FA\csname faicon@comment\endcsname}} -\expandafter\def\csname faicon@comment-o\endcsname {\symbol{"F0E5}} \def\faCommentO {{\FA\csname faicon@comment-o\endcsname}} -\expandafter\def\csname faicon@commenting\endcsname {\symbol{"F27A}} \def\faCommenting {{\FA\csname faicon@commenting\endcsname}} -\expandafter\def\csname faicon@commenting-o\endcsname {\symbol{"F27B}} \def\faCommentingO {{\FA\csname faicon@commenting-o\endcsname}} -\expandafter\def\csname faicon@comments\endcsname {\symbol{"F086}} \def\faComments {{\FA\csname faicon@comments\endcsname}} -\expandafter\def\csname faicon@comments-o\endcsname {\symbol{"F0E6}} \def\faCommentsO {{\FA\csname faicon@comments-o\endcsname}} -\expandafter\def\csname faicon@compass\endcsname {\symbol{"F14E}} \def\faCompass {{\FA\csname faicon@compass\endcsname}} -\expandafter\def\csname faicon@compress\endcsname {\symbol{"F066}} \def\faCompress {{\FA\csname faicon@compress\endcsname}} -\expandafter\def\csname faicon@connectdevelop\endcsname {\symbol{"F20E}} \def\faConnectdevelop {{\FA\csname faicon@connectdevelop\endcsname}} -\expandafter\def\csname faicon@contao\endcsname {\symbol{"F26D}} \def\faContao {{\FA\csname faicon@contao\endcsname}} -\expandafter\def\csname faicon@copy\endcsname {\symbol{"F0C5}} \def\faCopy {{\FA\csname faicon@copy\endcsname}} -\expandafter\def\csname faicon@copyright\endcsname {\symbol{"F1F9}} \def\faCopyright {{\FA\csname faicon@copyright\endcsname}} -\expandafter\def\csname faicon@creative-commons\endcsname {\symbol{"F25E}} \def\faCreativeCommons {{\FA\csname faicon@creative-commons\endcsname}} -\expandafter\def\csname faicon@credit-card\endcsname {\symbol{"F09D}} \def\faCreditCard {{\FA\csname faicon@credit-card\endcsname}} -\expandafter\def\csname faicon@crop\endcsname {\symbol{"F125}} \def\faCrop {{\FA\csname faicon@crop\endcsname}} -\expandafter\def\csname faicon@crosshairs\endcsname {\symbol{"F05B}} \def\faCrosshairs {{\FA\csname faicon@crosshairs\endcsname}} -\expandafter\def\csname faicon@cube\endcsname {\symbol{"F1B2}} \def\faCube {{\FA\csname faicon@cube\endcsname}} -\expandafter\def\csname faicon@cubes\endcsname {\symbol{"F1B3}} \def\faCubes {{\FA\csname faicon@cubes\endcsname}} -\expandafter\def\csname faicon@cut\endcsname {\symbol{"F0C4}} \def\faCut {{\FA\csname faicon@cut\endcsname}} -\expandafter\def\csname faicon@cutlery\endcsname {\symbol{"F0F5}} \def\faCutlery {{\FA\csname faicon@cutlery\endcsname}} -\expandafter\def\csname faicon@dashboard\endcsname {\symbol{"F0E4}} \def\faDashboard {{\FA\csname faicon@dashboard\endcsname}} -\expandafter\def\csname faicon@dashcube\endcsname {\symbol{"F210}} \def\faDashcube {{\FA\csname faicon@dashcube\endcsname}} -\expandafter\def\csname faicon@database\endcsname {\symbol{"F1C0}} \def\faDatabase {{\FA\csname faicon@database\endcsname}} -\expandafter\def\csname faicon@dedent\endcsname {\symbol{"F03B}} \def\faDedent {{\FA\csname faicon@dedent\endcsname}} -\expandafter\def\csname faicon@delicious\endcsname {\symbol{"F1A5}} \def\faDelicious {{\FA\csname faicon@delicious\endcsname}} -\expandafter\def\csname faicon@desktop\endcsname {\symbol{"F108}} \def\faDesktop {{\FA\csname faicon@desktop\endcsname}} -\expandafter\def\csname faicon@deviantart\endcsname {\symbol{"F1BD}} \def\faDeviantart {{\FA\csname faicon@deviantart\endcsname}} -\expandafter\def\csname faicon@diamond\endcsname {\symbol{"F219}} \def\faDiamond {{\FA\csname faicon@diamond\endcsname}} -\expandafter\def\csname faicon@digg\endcsname {\symbol{"F1A6}} \def\faDigg {{\FA\csname faicon@digg\endcsname}} -\expandafter\def\csname faicon@dollar\endcsname {\symbol{"F155}} \def\faDollar {{\FA\csname faicon@dollar\endcsname}} -\expandafter\def\csname faicon@dot-circle-o\endcsname {\symbol{"F192}} \def\faDotCircleO {{\FA\csname faicon@dot-circle-o\endcsname}} -\expandafter\def\csname faicon@download\endcsname {\symbol{"F019}} \def\faDownload {{\FA\csname faicon@download\endcsname}} -\expandafter\def\csname faicon@dribbble\endcsname {\symbol{"F17D}} \def\faDribbble {{\FA\csname faicon@dribbble\endcsname}} -\expandafter\def\csname faicon@dropbox\endcsname {\symbol{"F16B}} \def\faDropbox {{\FA\csname faicon@dropbox\endcsname}} -\expandafter\def\csname faicon@drupal\endcsname {\symbol{"F1A9}} \def\faDrupal {{\FA\csname faicon@drupal\endcsname}} -\expandafter\def\csname faicon@edit\endcsname {\symbol{"F044}} \def\faEdit {{\FA\csname faicon@edit\endcsname}} -\expandafter\def\csname faicon@eject\endcsname {\symbol{"F052}} \def\faEject {{\FA\csname faicon@eject\endcsname}} -\expandafter\def\csname faicon@ellipsis-h\endcsname {\symbol{"F141}} \def\faEllipsisH {{\FA\csname faicon@ellipsis-h\endcsname}} -\expandafter\def\csname faicon@ellipsis-v\endcsname {\symbol{"F142}} \def\faEllipsisV {{\FA\csname faicon@ellipsis-v\endcsname}} -\expandafter\def\csname faicon@empire\endcsname {\symbol{"F1D1}} \def\faEmpire {{\FA\csname faicon@empire\endcsname}} -\expandafter\def\csname faicon@envelope\endcsname {\symbol{"F0E0}} \def\faEnvelope {{\FA\csname faicon@envelope\endcsname}} -\expandafter\def\csname faicon@envelope-o\endcsname {\symbol{"F003}} \def\faEnvelopeO {{\FA\csname faicon@envelope-o\endcsname}} -\expandafter\def\csname faicon@envelope-square\endcsname {\symbol{"F199}} \def\faEnvelopeSquare {{\FA\csname faicon@envelope-square\endcsname}} -\expandafter\def\csname faicon@eraser\endcsname {\symbol{"F12D}} \def\faEraser {{\FA\csname faicon@eraser\endcsname}} -\expandafter\def\csname faicon@eur\endcsname {\symbol{"F153}} \def\faEur {{\FA\csname faicon@eur\endcsname}} -\expandafter\def\csname faicon@euro\endcsname {\symbol{"F153}} \def\faEuro {{\FA\csname faicon@euro\endcsname}} -\expandafter\def\csname faicon@exchange\endcsname {\symbol{"F0EC}} \def\faExchange {{\FA\csname faicon@exchange\endcsname}} -\expandafter\def\csname faicon@exclamation\endcsname {\symbol{"F12A}} \def\faExclamation {{\FA\csname faicon@exclamation\endcsname}} -\expandafter\def\csname faicon@exclamation-circle\endcsname {\symbol{"F06A}} \def\faExclamationCircle {{\FA\csname faicon@exclamation-circle\endcsname}} -\expandafter\def\csname faicon@exclamation-triangle\endcsname {\symbol{"F071}} \def\faExclamationTriangle {{\FA\csname faicon@exclamation-triangle\endcsname}} -\expandafter\def\csname faicon@expand\endcsname {\symbol{"F065}} \def\faExpand {{\FA\csname faicon@expand\endcsname}} -\expandafter\def\csname faicon@expeditedssl\endcsname {\symbol{"F23E}} \def\faExpeditedssl {{\FA\csname faicon@expeditedssl\endcsname}} -\expandafter\def\csname faicon@external-link\endcsname {\symbol{"F08E}} \def\faExternalLink {{\FA\csname faicon@external-link\endcsname}} -\expandafter\def\csname faicon@external-link-square\endcsname {\symbol{"F14C}} \def\faExternalLinkSquare {{\FA\csname faicon@external-link-square\endcsname}} -\expandafter\def\csname faicon@eye\endcsname {\symbol{"F06E}} \def\faEye {{\FA\csname faicon@eye\endcsname}} -\expandafter\def\csname faicon@eye-slash\endcsname {\symbol{"F070}} \def\faEyeSlash {{\FA\csname faicon@eye-slash\endcsname}} -\expandafter\def\csname faicon@eyedropper\endcsname {\symbol{"F1FB}} \def\faEyedropper {{\FA\csname faicon@eyedropper\endcsname}} -\expandafter\def\csname faicon@facebook\endcsname {\symbol{"F09A}} \def\faFacebook {{\FA\csname faicon@facebook\endcsname}} -\expandafter\def\csname faicon@facebook-f\endcsname {\symbol{"F09A}} \def\faFacebookF {{\FA\csname faicon@facebook-f\endcsname}} -\expandafter\def\csname faicon@facebook-official\endcsname {\symbol{"F230}} \def\faFacebookOfficial {{\FA\csname faicon@facebook-official\endcsname}} -\expandafter\def\csname faicon@facebook-square\endcsname {\symbol{"F082}} \def\faFacebookSquare {{\FA\csname faicon@facebook-square\endcsname}} -\expandafter\def\csname faicon@fast-backward\endcsname {\symbol{"F049}} \def\faFastBackward {{\FA\csname faicon@fast-backward\endcsname}} -\expandafter\def\csname faicon@fast-forward\endcsname {\symbol{"F050}} \def\faFastForward {{\FA\csname faicon@fast-forward\endcsname}} -\expandafter\def\csname faicon@fax\endcsname {\symbol{"F1AC}} \def\faFax {{\FA\csname faicon@fax\endcsname}} -\expandafter\def\csname faicon@feed\endcsname {\symbol{"F09E}} \def\faFeed {{\FA\csname faicon@feed\endcsname}} -\expandafter\def\csname faicon@female\endcsname {\symbol{"F182}} \def\faFemale {{\FA\csname faicon@female\endcsname}} -\expandafter\def\csname faicon@fighter-jet\endcsname {\symbol{"F0FB}} \def\faFighterJet {{\FA\csname faicon@fighter-jet\endcsname}} -\expandafter\def\csname faicon@file\endcsname {\symbol{"F15B}} \def\faFile {{\FA\csname faicon@file\endcsname}} -\expandafter\def\csname faicon@file-archive-o\endcsname {\symbol{"F1C6}} \def\faFileArchiveO {{\FA\csname faicon@file-archive-o\endcsname}} -\expandafter\def\csname faicon@file-audio-o\endcsname {\symbol{"F1C7}} \def\faFileAudioO {{\FA\csname faicon@file-audio-o\endcsname}} -\expandafter\def\csname faicon@file-code-o\endcsname {\symbol{"F1C9}} \def\faFileCodeO {{\FA\csname faicon@file-code-o\endcsname}} -\expandafter\def\csname faicon@file-excel-o\endcsname {\symbol{"F1C3}} \def\faFileExcelO {{\FA\csname faicon@file-excel-o\endcsname}} -\expandafter\def\csname faicon@file-image-o\endcsname {\symbol{"F1C5}} \def\faFileImageO {{\FA\csname faicon@file-image-o\endcsname}} -\expandafter\def\csname faicon@file-movie-o\endcsname {\symbol{"F1C8}} \def\faFileMovieO {{\FA\csname faicon@file-movie-o\endcsname}} -\expandafter\def\csname faicon@file-o\endcsname {\symbol{"F016}} \def\faFileO {{\FA\csname faicon@file-o\endcsname}} -\expandafter\def\csname faicon@file-pdf-o\endcsname {\symbol{"F1C1}} \def\faFilePdfO {{\FA\csname faicon@file-pdf-o\endcsname}} -\expandafter\def\csname faicon@file-photo-o\endcsname {\symbol{"F1C5}} \def\faFilePhotoO {{\FA\csname faicon@file-photo-o\endcsname}} -\expandafter\def\csname faicon@file-picture-o\endcsname {\symbol{"F1C5}} \def\faFilePictureO {{\FA\csname faicon@file-picture-o\endcsname}} -\expandafter\def\csname faicon@file-powerpoint-o\endcsname {\symbol{"F1C4}} \def\faFilePowerpointO {{\FA\csname faicon@file-powerpoint-o\endcsname}} -\expandafter\def\csname faicon@file-sound-o\endcsname {\symbol{"F1C7}} \def\faFileSoundO {{\FA\csname faicon@file-sound-o\endcsname}} -\expandafter\def\csname faicon@file-text\endcsname {\symbol{"F15C}} \def\faFileText {{\FA\csname faicon@file-text\endcsname}} -\expandafter\def\csname faicon@file-text-o\endcsname {\symbol{"F0F6}} \def\faFileTextO {{\FA\csname faicon@file-text-o\endcsname}} -\expandafter\def\csname faicon@file-video-o\endcsname {\symbol{"F1C8}} \def\faFileVideoO {{\FA\csname faicon@file-video-o\endcsname}} -\expandafter\def\csname faicon@file-word-o\endcsname {\symbol{"F1C2}} \def\faFileWordO {{\FA\csname faicon@file-word-o\endcsname}} -\expandafter\def\csname faicon@file-zip-o\endcsname {\symbol{"F1C6}} \def\faFileZipO {{\FA\csname faicon@file-zip-o\endcsname}} -\expandafter\def\csname faicon@files-o\endcsname {\symbol{"F0C5}} \def\faFilesO {{\FA\csname faicon@files-o\endcsname}} -\expandafter\def\csname faicon@film\endcsname {\symbol{"F008}} \def\faFilm {{\FA\csname faicon@film\endcsname}} -\expandafter\def\csname faicon@filter\endcsname {\symbol{"F0B0}} \def\faFilter {{\FA\csname faicon@filter\endcsname}} -\expandafter\def\csname faicon@fire\endcsname {\symbol{"F06D}} \def\faFire {{\FA\csname faicon@fire\endcsname}} -\expandafter\def\csname faicon@fire-extinguisher\endcsname {\symbol{"F134}} \def\faFireExtinguisher {{\FA\csname faicon@fire-extinguisher\endcsname}} -\expandafter\def\csname faicon@firefox\endcsname {\symbol{"F269}} \def\faFirefox {{\FA\csname faicon@firefox\endcsname}} -\expandafter\def\csname faicon@flag\endcsname {\symbol{"F024}} \def\faFlag {{\FA\csname faicon@flag\endcsname}} -\expandafter\def\csname faicon@flag-checkered\endcsname {\symbol{"F11E}} \def\faFlagCheckered {{\FA\csname faicon@flag-checkered\endcsname}} -\expandafter\def\csname faicon@flag-o\endcsname {\symbol{"F11D}} \def\faFlagO {{\FA\csname faicon@flag-o\endcsname}} -\expandafter\def\csname faicon@flash\endcsname {\symbol{"F0E7}} \def\faFlash {{\FA\csname faicon@flash\endcsname}} -\expandafter\def\csname faicon@flask\endcsname {\symbol{"F0C3}} \def\faFlask {{\FA\csname faicon@flask\endcsname}} -\expandafter\def\csname faicon@flickr\endcsname {\symbol{"F16E}} \def\faFlickr {{\FA\csname faicon@flickr\endcsname}} -\expandafter\def\csname faicon@floppy-o\endcsname {\symbol{"F0C7}} \def\faFloppyO {{\FA\csname faicon@floppy-o\endcsname}} -\expandafter\def\csname faicon@folder\endcsname {\symbol{"F07B}} \def\faFolder {{\FA\csname faicon@folder\endcsname}} -\expandafter\def\csname faicon@folder-o\endcsname {\symbol{"F114}} \def\faFolderO {{\FA\csname faicon@folder-o\endcsname}} -\expandafter\def\csname faicon@folder-open\endcsname {\symbol{"F07C}} \def\faFolderOpen {{\FA\csname faicon@folder-open\endcsname}} -\expandafter\def\csname faicon@folder-open-o\endcsname {\symbol{"F115}} \def\faFolderOpenO {{\FA\csname faicon@folder-open-o\endcsname}} -\expandafter\def\csname faicon@font\endcsname {\symbol{"F031}} \def\faFont {{\FA\csname faicon@font\endcsname}} -\expandafter\def\csname faicon@fonticons\endcsname {\symbol{"F280}} \def\faFonticons {{\FA\csname faicon@fonticons\endcsname}} -\expandafter\def\csname faicon@forumbee\endcsname {\symbol{"F211}} \def\faForumbee {{\FA\csname faicon@forumbee\endcsname}} -\expandafter\def\csname faicon@forward\endcsname {\symbol{"F04E}} \def\faForward {{\FA\csname faicon@forward\endcsname}} -\expandafter\def\csname faicon@foursquare\endcsname {\symbol{"F180}} \def\faFoursquare {{\FA\csname faicon@foursquare\endcsname}} -\expandafter\def\csname faicon@frown-o\endcsname {\symbol{"F119}} \def\faFrownO {{\FA\csname faicon@frown-o\endcsname}} -\expandafter\def\csname faicon@futbol-o\endcsname {\symbol{"F1E3}} \def\faFutbolO {{\FA\csname faicon@futbol-o\endcsname}} -\expandafter\def\csname faicon@gamepad\endcsname {\symbol{"F11B}} \def\faGamepad {{\FA\csname faicon@gamepad\endcsname}} -\expandafter\def\csname faicon@gavel\endcsname {\symbol{"F0E3}} \def\faGavel {{\FA\csname faicon@gavel\endcsname}} -\expandafter\def\csname faicon@gbp\endcsname {\symbol{"F154}} \def\faGbp {{\FA\csname faicon@gbp\endcsname}} -\expandafter\def\csname faicon@ge\endcsname {\symbol{"F1D1}} \def\faGe {{\FA\csname faicon@ge\endcsname}} -\expandafter\def\csname faicon@gear\endcsname {\symbol{"F013}} \def\faGear {{\FA\csname faicon@gear\endcsname}} -\expandafter\def\csname faicon@gears\endcsname {\symbol{"F085}} \def\faGears {{\FA\csname faicon@gears\endcsname}} -\expandafter\def\csname faicon@genderless\endcsname {\symbol{"F22D}} \def\faGenderless {{\FA\csname faicon@genderless\endcsname}} -\expandafter\def\csname faicon@get-pocket\endcsname {\symbol{"F265}} \def\faGetPocket {{\FA\csname faicon@get-pocket\endcsname}} -\expandafter\def\csname faicon@gg\endcsname {\symbol{"F260}} \def\faGg {{\FA\csname faicon@gg\endcsname}} -\expandafter\def\csname faicon@gg-circle\endcsname {\symbol{"F261}} \def\faGgCircle {{\FA\csname faicon@gg-circle\endcsname}} -\expandafter\def\csname faicon@gift\endcsname {\symbol{"F06B}} \def\faGift {{\FA\csname faicon@gift\endcsname}} -\expandafter\def\csname faicon@git\endcsname {\symbol{"F1D3}} \def\faGit {{\FA\csname faicon@git\endcsname}} -\expandafter\def\csname faicon@git-square\endcsname {\symbol{"F1D2}} \def\faGitSquare {{\FA\csname faicon@git-square\endcsname}} -\expandafter\def\csname faicon@github\endcsname {\symbol{"F09B}} \def\faGithub {{\FA\csname faicon@github\endcsname}} -\expandafter\def\csname faicon@github-alt\endcsname {\symbol{"F113}} \def\faGithubAlt {{\FA\csname faicon@github-alt\endcsname}} -\expandafter\def\csname faicon@github-square\endcsname {\symbol{"F092}} \def\faGithubSquare {{\FA\csname faicon@github-square\endcsname}} -\expandafter\def\csname faicon@gittip\endcsname {\symbol{"F184}} \def\faGittip {{\FA\csname faicon@gittip\endcsname}} -\expandafter\def\csname faicon@glass\endcsname {\symbol{"F000}} \def\faGlass {{\FA\csname faicon@glass\endcsname}} -\expandafter\def\csname faicon@globe\endcsname {\symbol{"F0AC}} \def\faGlobe {{\FA\csname faicon@globe\endcsname}} -\expandafter\def\csname faicon@google\endcsname {\symbol{"F1A0}} \def\faGoogle {{\FA\csname faicon@google\endcsname}} -\expandafter\def\csname faicon@google-plus\endcsname {\symbol{"F0D5}} \def\faGooglePlus {{\FA\csname faicon@google-plus\endcsname}} -\expandafter\def\csname faicon@google-plus-square\endcsname {\symbol{"F0D4}} \def\faGooglePlusSquare {{\FA\csname faicon@google-plus-square\endcsname}} -\expandafter\def\csname faicon@google-wallet\endcsname {\symbol{"F1EE}} \def\faGoogleWallet {{\FA\csname faicon@google-wallet\endcsname}} -\expandafter\def\csname faicon@graduation-cap\endcsname {\symbol{"F19D}} \def\faGraduationCap {{\FA\csname faicon@graduation-cap\endcsname}} -\expandafter\def\csname faicon@gratipay\endcsname {\symbol{"F184}} \def\faGratipay {{\FA\csname faicon@gratipay\endcsname}} -\expandafter\def\csname faicon@group\endcsname {\symbol{"F0C0}} \def\faGroup {{\FA\csname faicon@group\endcsname}} -\expandafter\def\csname faicon@h-square\endcsname {\symbol{"F0FD}} \def\faHSquare {{\FA\csname faicon@h-square\endcsname}} -\expandafter\def\csname faicon@hacker-news\endcsname {\symbol{"F1D4}} \def\faHackerNews {{\FA\csname faicon@hacker-news\endcsname}} -\expandafter\def\csname faicon@hand-grab-o\endcsname {\symbol{"F255}} \def\faHandGrabO {{\FA\csname faicon@hand-grab-o\endcsname}} -\expandafter\def\csname faicon@hand-lizard-o\endcsname {\symbol{"F258}} \def\faHandLizardO {{\FA\csname faicon@hand-lizard-o\endcsname}} -\expandafter\def\csname faicon@hand-o-down\endcsname {\symbol{"F0A7}} \def\faHandODown {{\FA\csname faicon@hand-o-down\endcsname}} -\expandafter\def\csname faicon@hand-o-left\endcsname {\symbol{"F0A5}} \def\faHandOLeft {{\FA\csname faicon@hand-o-left\endcsname}} -\expandafter\def\csname faicon@hand-o-right\endcsname {\symbol{"F0A4}} \def\faHandORight {{\FA\csname faicon@hand-o-right\endcsname}} -\expandafter\def\csname faicon@hand-o-up\endcsname {\symbol{"F0A6}} \def\faHandOUp {{\FA\csname faicon@hand-o-up\endcsname}} -\expandafter\def\csname faicon@hand-paper-o\endcsname {\symbol{"F256}} \def\faHandPaperO {{\FA\csname faicon@hand-paper-o\endcsname}} -\expandafter\def\csname faicon@hand-peace-o\endcsname {\symbol{"F25B}} \def\faHandPeaceO {{\FA\csname faicon@hand-peace-o\endcsname}} -\expandafter\def\csname faicon@hand-pointer-o\endcsname {\symbol{"F25A}} \def\faHandPointerO {{\FA\csname faicon@hand-pointer-o\endcsname}} -\expandafter\def\csname faicon@hand-rock-o\endcsname {\symbol{"F255}} \def\faHandRockO {{\FA\csname faicon@hand-rock-o\endcsname}} -\expandafter\def\csname faicon@hand-scissors-o\endcsname {\symbol{"F257}} \def\faHandScissorsO {{\FA\csname faicon@hand-scissors-o\endcsname}} -\expandafter\def\csname faicon@hand-spock-o\endcsname {\symbol{"F259}} \def\faHandSpockO {{\FA\csname faicon@hand-spock-o\endcsname}} -\expandafter\def\csname faicon@hand-stop-o\endcsname {\symbol{"F256}} \def\faHandStopO {{\FA\csname faicon@hand-stop-o\endcsname}} -\expandafter\def\csname faicon@hdd-o\endcsname {\symbol{"F0A0}} \def\faHddO {{\FA\csname faicon@hdd-o\endcsname}} -\expandafter\def\csname faicon@header\endcsname {\symbol{"F1DC}} \def\faHeader {{\FA\csname faicon@header\endcsname}} -\expandafter\def\csname faicon@headphones\endcsname {\symbol{"F025}} \def\faHeadphones {{\FA\csname faicon@headphones\endcsname}} -\expandafter\def\csname faicon@heart\endcsname {\symbol{"F004}} \def\faHeart {{\FA\csname faicon@heart\endcsname}} -\expandafter\def\csname faicon@heart-o\endcsname {\symbol{"F08A}} \def\faHeartO {{\FA\csname faicon@heart-o\endcsname}} -\expandafter\def\csname faicon@heartbeat\endcsname {\symbol{"F21E}} \def\faHeartbeat {{\FA\csname faicon@heartbeat\endcsname}} -\expandafter\def\csname faicon@history\endcsname {\symbol{"F1DA}} \def\faHistory {{\FA\csname faicon@history\endcsname}} -\expandafter\def\csname faicon@home\endcsname {\symbol{"F015}} \def\faHome {{\FA\csname faicon@home\endcsname}} -\expandafter\def\csname faicon@hospital-o\endcsname {\symbol{"F0F8}} \def\faHospitalO {{\FA\csname faicon@hospital-o\endcsname}} -\expandafter\def\csname faicon@hotel\endcsname {\symbol{"F236}} \def\faHotel {{\FA\csname faicon@hotel\endcsname}} -\expandafter\def\csname faicon@hourglass\endcsname {\symbol{"F254}} \def\faHourglass {{\FA\csname faicon@hourglass\endcsname}} -\expandafter\def\csname faicon@hourglass-end\endcsname {\symbol{"F253}} \def\faHourglassEnd {{\FA\csname faicon@hourglass-end\endcsname}} -\expandafter\def\csname faicon@hourglass-half\endcsname {\symbol{"F252}} \def\faHourglassHalf {{\FA\csname faicon@hourglass-half\endcsname}} -\expandafter\def\csname faicon@hourglass-o\endcsname {\symbol{"F250}} \def\faHourglassO {{\FA\csname faicon@hourglass-o\endcsname}} -\expandafter\def\csname faicon@hourglass-start\endcsname {\symbol{"F251}} \def\faHourglassStart {{\FA\csname faicon@hourglass-start\endcsname}} -\expandafter\def\csname faicon@houzz\endcsname {\symbol{"F27C}} \def\faHouzz {{\FA\csname faicon@houzz\endcsname}} -\expandafter\def\csname faicon@i-cursor\endcsname {\symbol{"F246}} \def\faICursor {{\FA\csname faicon@i-cursor\endcsname}} -\expandafter\def\csname faicon@ils\endcsname {\symbol{"F20B}} \def\faIls {{\FA\csname faicon@ils\endcsname}} -\expandafter\def\csname faicon@image\endcsname {\symbol{"F03E}} \def\faImage {{\FA\csname faicon@image\endcsname}} -\expandafter\def\csname faicon@inbox\endcsname {\symbol{"F01C}} \def\faInbox {{\FA\csname faicon@inbox\endcsname}} -\expandafter\def\csname faicon@indent\endcsname {\symbol{"F03C}} \def\faIndent {{\FA\csname faicon@indent\endcsname}} -\expandafter\def\csname faicon@industry\endcsname {\symbol{"F275}} \def\faIndustry {{\FA\csname faicon@industry\endcsname}} -\expandafter\def\csname faicon@info\endcsname {\symbol{"F129}} \def\faInfo {{\FA\csname faicon@info\endcsname}} -\expandafter\def\csname faicon@info-circle\endcsname {\symbol{"F05A}} \def\faInfoCircle {{\FA\csname faicon@info-circle\endcsname}} -\expandafter\def\csname faicon@inr\endcsname {\symbol{"F156}} \def\faInr {{\FA\csname faicon@inr\endcsname}} -\expandafter\def\csname faicon@instagram\endcsname {\symbol{"F16D}} \def\faInstagram {{\FA\csname faicon@instagram\endcsname}} -\expandafter\def\csname faicon@institution\endcsname {\symbol{"F19C}} \def\faInstitution {{\FA\csname faicon@institution\endcsname}} -\expandafter\def\csname faicon@internet-explorer\endcsname {\symbol{"F26B}} \def\faInternetExplorer {{\FA\csname faicon@internet-explorer\endcsname}} -\expandafter\def\csname faicon@intersex\endcsname {\symbol{"F224}} \def\faIntersex {{\FA\csname faicon@intersex\endcsname}} -\expandafter\def\csname faicon@ioxhost\endcsname {\symbol{"F208}} \def\faIoxhost {{\FA\csname faicon@ioxhost\endcsname}} -\expandafter\def\csname faicon@italic\endcsname {\symbol{"F033}} \def\faItalic {{\FA\csname faicon@italic\endcsname}} -\expandafter\def\csname faicon@joomla\endcsname {\symbol{"F1AA}} \def\faJoomla {{\FA\csname faicon@joomla\endcsname}} -\expandafter\def\csname faicon@jpy\endcsname {\symbol{"F157}} \def\faJpy {{\FA\csname faicon@jpy\endcsname}} -\expandafter\def\csname faicon@jsfiddle\endcsname {\symbol{"F1CC}} \def\faJsfiddle {{\FA\csname faicon@jsfiddle\endcsname}} -\expandafter\def\csname faicon@key\endcsname {\symbol{"F084}} \def\faKey {{\FA\csname faicon@key\endcsname}} -\expandafter\def\csname faicon@keyboard-o\endcsname {\symbol{"F11C}} \def\faKeyboardO {{\FA\csname faicon@keyboard-o\endcsname}} -\expandafter\def\csname faicon@krw\endcsname {\symbol{"F159}} \def\faKrw {{\FA\csname faicon@krw\endcsname}} -\expandafter\def\csname faicon@language\endcsname {\symbol{"F1AB}} \def\faLanguage {{\FA\csname faicon@language\endcsname}} -\expandafter\def\csname faicon@laptop\endcsname {\symbol{"F109}} \def\faLaptop {{\FA\csname faicon@laptop\endcsname}} -\expandafter\def\csname faicon@lastfm\endcsname {\symbol{"F202}} \def\faLastfm {{\FA\csname faicon@lastfm\endcsname}} -\expandafter\def\csname faicon@lastfm-square\endcsname {\symbol{"F203}} \def\faLastfmSquare {{\FA\csname faicon@lastfm-square\endcsname}} -\expandafter\def\csname faicon@leaf\endcsname {\symbol{"F06C}} \def\faLeaf {{\FA\csname faicon@leaf\endcsname}} -\expandafter\def\csname faicon@leanpub\endcsname {\symbol{"F212}} \def\faLeanpub {{\FA\csname faicon@leanpub\endcsname}} -\expandafter\def\csname faicon@legal\endcsname {\symbol{"F0E3}} \def\faLegal {{\FA\csname faicon@legal\endcsname}} -\expandafter\def\csname faicon@lemon-o\endcsname {\symbol{"F094}} \def\faLemonO {{\FA\csname faicon@lemon-o\endcsname}} -\expandafter\def\csname faicon@level-down\endcsname {\symbol{"F149}} \def\faLevelDown {{\FA\csname faicon@level-down\endcsname}} -\expandafter\def\csname faicon@level-up\endcsname {\symbol{"F148}} \def\faLevelUp {{\FA\csname faicon@level-up\endcsname}} -\expandafter\def\csname faicon@life-bouy\endcsname {\symbol{"F1CD}} \def\faLifeBouy {{\FA\csname faicon@life-bouy\endcsname}} -\expandafter\def\csname faicon@life-buoy\endcsname {\symbol{"F1CD}} \def\faLifeBuoy {{\FA\csname faicon@life-buoy\endcsname}} -\expandafter\def\csname faicon@life-ring\endcsname {\symbol{"F1CD}} \def\faLifeRing {{\FA\csname faicon@life-ring\endcsname}} -\expandafter\def\csname faicon@life-saver\endcsname {\symbol{"F1CD}} \def\faLifeSaver {{\FA\csname faicon@life-saver\endcsname}} -\expandafter\def\csname faicon@lightbulb-o\endcsname {\symbol{"F0EB}} \def\faLightbulbO {{\FA\csname faicon@lightbulb-o\endcsname}} -\expandafter\def\csname faicon@line-chart\endcsname {\symbol{"F201}} \def\faLineChart {{\FA\csname faicon@line-chart\endcsname}} -\expandafter\def\csname faicon@link\endcsname {\symbol{"F0C1}} \def\faLink {{\FA\csname faicon@link\endcsname}} -\expandafter\def\csname faicon@linkedin\endcsname {\symbol{"F0E1}} \def\faLinkedin {{\FA\csname faicon@linkedin\endcsname}} -\expandafter\def\csname faicon@linkedin-square\endcsname {\symbol{"F08C}} \def\faLinkedinSquare {{\FA\csname faicon@linkedin-square\endcsname}} -\expandafter\def\csname faicon@linux\endcsname {\symbol{"F17C}} \def\faLinux {{\FA\csname faicon@linux\endcsname}} -\expandafter\def\csname faicon@list\endcsname {\symbol{"F03A}} \def\faList {{\FA\csname faicon@list\endcsname}} -\expandafter\def\csname faicon@list-alt\endcsname {\symbol{"F022}} \def\faListAlt {{\FA\csname faicon@list-alt\endcsname}} -\expandafter\def\csname faicon@list-ol\endcsname {\symbol{"F0CB}} \def\faListOl {{\FA\csname faicon@list-ol\endcsname}} -\expandafter\def\csname faicon@list-ul\endcsname {\symbol{"F0CA}} \def\faListUl {{\FA\csname faicon@list-ul\endcsname}} -\expandafter\def\csname faicon@location-arrow\endcsname {\symbol{"F124}} \def\faLocationArrow {{\FA\csname faicon@location-arrow\endcsname}} -\expandafter\def\csname faicon@lock\endcsname {\symbol{"F023}} \def\faLock {{\FA\csname faicon@lock\endcsname}} -\expandafter\def\csname faicon@long-arrow-down\endcsname {\symbol{"F175}} \def\faLongArrowDown {{\FA\csname faicon@long-arrow-down\endcsname}} -\expandafter\def\csname faicon@long-arrow-left\endcsname {\symbol{"F177}} \def\faLongArrowLeft {{\FA\csname faicon@long-arrow-left\endcsname}} -\expandafter\def\csname faicon@long-arrow-right\endcsname {\symbol{"F178}} \def\faLongArrowRight {{\FA\csname faicon@long-arrow-right\endcsname}} -\expandafter\def\csname faicon@long-arrow-up\endcsname {\symbol{"F176}} \def\faLongArrowUp {{\FA\csname faicon@long-arrow-up\endcsname}} -\expandafter\def\csname faicon@magic\endcsname {\symbol{"F0D0}} \def\faMagic {{\FA\csname faicon@magic\endcsname}} -\expandafter\def\csname faicon@magnet\endcsname {\symbol{"F076}} \def\faMagnet {{\FA\csname faicon@magnet\endcsname}} -\expandafter\def\csname faicon@mail-forward\endcsname {\symbol{"F064}} \def\faMailForward {{\FA\csname faicon@mail-forward\endcsname}} -\expandafter\def\csname faicon@mail-reply\endcsname {\symbol{"F112}} \def\faMailReply {{\FA\csname faicon@mail-reply\endcsname}} -\expandafter\def\csname faicon@mail-reply-all\endcsname {\symbol{"F122}} \def\faMailReplyAll {{\FA\csname faicon@mail-reply-all\endcsname}} -\expandafter\def\csname faicon@male\endcsname {\symbol{"F183}} \def\faMale {{\FA\csname faicon@male\endcsname}} -\expandafter\def\csname faicon@map\endcsname {\symbol{"F279}} \def\faMap {{\FA\csname faicon@map\endcsname}} -\expandafter\def\csname faicon@map-marker\endcsname {\symbol{"F041}} \def\faMapMarker {{\FA\csname faicon@map-marker\endcsname}} -\expandafter\def\csname faicon@map-o\endcsname {\symbol{"F278}} \def\faMapO {{\FA\csname faicon@map-o\endcsname}} -\expandafter\def\csname faicon@map-pin\endcsname {\symbol{"F276}} \def\faMapPin {{\FA\csname faicon@map-pin\endcsname}} -\expandafter\def\csname faicon@map-signs\endcsname {\symbol{"F277}} \def\faMapSigns {{\FA\csname faicon@map-signs\endcsname}} -\expandafter\def\csname faicon@mars\endcsname {\symbol{"F222}} \def\faMars {{\FA\csname faicon@mars\endcsname}} -\expandafter\def\csname faicon@mars-double\endcsname {\symbol{"F227}} \def\faMarsDouble {{\FA\csname faicon@mars-double\endcsname}} -\expandafter\def\csname faicon@mars-stroke\endcsname {\symbol{"F229}} \def\faMarsStroke {{\FA\csname faicon@mars-stroke\endcsname}} -\expandafter\def\csname faicon@mars-stroke-h\endcsname {\symbol{"F22B}} \def\faMarsStrokeH {{\FA\csname faicon@mars-stroke-h\endcsname}} -\expandafter\def\csname faicon@mars-stroke-v\endcsname {\symbol{"F22A}} \def\faMarsStrokeV {{\FA\csname faicon@mars-stroke-v\endcsname}} -\expandafter\def\csname faicon@maxcdn\endcsname {\symbol{"F136}} \def\faMaxcdn {{\FA\csname faicon@maxcdn\endcsname}} -\expandafter\def\csname faicon@meanpath\endcsname {\symbol{"F20C}} \def\faMeanpath {{\FA\csname faicon@meanpath\endcsname}} -\expandafter\def\csname faicon@medium\endcsname {\symbol{"F23A}} \def\faMedium {{\FA\csname faicon@medium\endcsname}} -\expandafter\def\csname faicon@medkit\endcsname {\symbol{"F0FA}} \def\faMedkit {{\FA\csname faicon@medkit\endcsname}} -\expandafter\def\csname faicon@meh-o\endcsname {\symbol{"F11A}} \def\faMehO {{\FA\csname faicon@meh-o\endcsname}} -\expandafter\def\csname faicon@mercury\endcsname {\symbol{"F223}} \def\faMercury {{\FA\csname faicon@mercury\endcsname}} -\expandafter\def\csname faicon@microphone\endcsname {\symbol{"F130}} \def\faMicrophone {{\FA\csname faicon@microphone\endcsname}} -\expandafter\def\csname faicon@microphone-slash\endcsname {\symbol{"F131}} \def\faMicrophoneSlash {{\FA\csname faicon@microphone-slash\endcsname}} -\expandafter\def\csname faicon@minus\endcsname {\symbol{"F068}} \def\faMinus {{\FA\csname faicon@minus\endcsname}} -\expandafter\def\csname faicon@minus-circle\endcsname {\symbol{"F056}} \def\faMinusCircle {{\FA\csname faicon@minus-circle\endcsname}} -\expandafter\def\csname faicon@minus-square\endcsname {\symbol{"F146}} \def\faMinusSquare {{\FA\csname faicon@minus-square\endcsname}} -\expandafter\def\csname faicon@minus-square-o\endcsname {\symbol{"F147}} \def\faMinusSquareO {{\FA\csname faicon@minus-square-o\endcsname}} -\expandafter\def\csname faicon@mobile\endcsname {\symbol{"F10B}} \def\faMobile {{\FA\csname faicon@mobile\endcsname}} -\expandafter\def\csname faicon@mobile-phone\endcsname {\symbol{"F10B}} \def\faMobilePhone {{\FA\csname faicon@mobile-phone\endcsname}} -\expandafter\def\csname faicon@money\endcsname {\symbol{"F0D6}} \def\faMoney {{\FA\csname faicon@money\endcsname}} -\expandafter\def\csname faicon@moon-o\endcsname {\symbol{"F186}} \def\faMoonO {{\FA\csname faicon@moon-o\endcsname}} -\expandafter\def\csname faicon@mortar-board\endcsname {\symbol{"F19D}} \def\faMortarBoard {{\FA\csname faicon@mortar-board\endcsname}} -\expandafter\def\csname faicon@motorcycle\endcsname {\symbol{"F21C}} \def\faMotorcycle {{\FA\csname faicon@motorcycle\endcsname}} -\expandafter\def\csname faicon@mouse-pointer\endcsname {\symbol{"F245}} \def\faMousePointer {{\FA\csname faicon@mouse-pointer\endcsname}} -\expandafter\def\csname faicon@music\endcsname {\symbol{"F001}} \def\faMusic {{\FA\csname faicon@music\endcsname}} -\expandafter\def\csname faicon@navicon\endcsname {\symbol{"F0C9}} \def\faNavicon {{\FA\csname faicon@navicon\endcsname}} -\expandafter\def\csname faicon@neuter\endcsname {\symbol{"F22C}} \def\faNeuter {{\FA\csname faicon@neuter\endcsname}} -\expandafter\def\csname faicon@newspaper-o\endcsname {\symbol{"F1EA}} \def\faNewspaperO {{\FA\csname faicon@newspaper-o\endcsname}} -\expandafter\def\csname faicon@object-group\endcsname {\symbol{"F247}} \def\faObjectGroup {{\FA\csname faicon@object-group\endcsname}} -\expandafter\def\csname faicon@object-ungroup\endcsname {\symbol{"F248}} \def\faObjectUngroup {{\FA\csname faicon@object-ungroup\endcsname}} -\expandafter\def\csname faicon@odnoklassniki\endcsname {\symbol{"F263}} \def\faOdnoklassniki {{\FA\csname faicon@odnoklassniki\endcsname}} -\expandafter\def\csname faicon@odnoklassniki-square\endcsname {\symbol{"F264}} \def\faOdnoklassnikiSquare {{\FA\csname faicon@odnoklassniki-square\endcsname}} -\expandafter\def\csname faicon@opencart\endcsname {\symbol{"F23D}} \def\faOpencart {{\FA\csname faicon@opencart\endcsname}} -\expandafter\def\csname faicon@openid\endcsname {\symbol{"F19B}} \def\faOpenid {{\FA\csname faicon@openid\endcsname}} -\expandafter\def\csname faicon@opera\endcsname {\symbol{"F26A}} \def\faOpera {{\FA\csname faicon@opera\endcsname}} -\expandafter\def\csname faicon@optin-monster\endcsname {\symbol{"F23C}} \def\faOptinMonster {{\FA\csname faicon@optin-monster\endcsname}} -\expandafter\def\csname faicon@outdent\endcsname {\symbol{"F03B}} \def\faOutdent {{\FA\csname faicon@outdent\endcsname}} -\expandafter\def\csname faicon@pagelines\endcsname {\symbol{"F18C}} \def\faPagelines {{\FA\csname faicon@pagelines\endcsname}} -\expandafter\def\csname faicon@paint-brush\endcsname {\symbol{"F1FC}} \def\faPaintBrush {{\FA\csname faicon@paint-brush\endcsname}} -\expandafter\def\csname faicon@paper-plane\endcsname {\symbol{"F1D8}} \def\faPaperPlane {{\FA\csname faicon@paper-plane\endcsname}} -\expandafter\def\csname faicon@paper-plane-o\endcsname {\symbol{"F1D9}} \def\faPaperPlaneO {{\FA\csname faicon@paper-plane-o\endcsname}} -\expandafter\def\csname faicon@paperclip\endcsname {\symbol{"F0C6}} \def\faPaperclip {{\FA\csname faicon@paperclip\endcsname}} -\expandafter\def\csname faicon@paragraph\endcsname {\symbol{"F1DD}} \def\faParagraph {{\FA\csname faicon@paragraph\endcsname}} -\expandafter\def\csname faicon@paste\endcsname {\symbol{"F0EA}} \def\faPaste {{\FA\csname faicon@paste\endcsname}} -\expandafter\def\csname faicon@pause\endcsname {\symbol{"F04C}} \def\faPause {{\FA\csname faicon@pause\endcsname}} -\expandafter\def\csname faicon@paw\endcsname {\symbol{"F1B0}} \def\faPaw {{\FA\csname faicon@paw\endcsname}} -\expandafter\def\csname faicon@paypal\endcsname {\symbol{"F1ED}} \def\faPaypal {{\FA\csname faicon@paypal\endcsname}} -\expandafter\def\csname faicon@pencil\endcsname {\symbol{"F040}} \def\faPencil {{\FA\csname faicon@pencil\endcsname}} -\expandafter\def\csname faicon@pencil-square\endcsname {\symbol{"F14B}} \def\faPencilSquare {{\FA\csname faicon@pencil-square\endcsname}} -\expandafter\def\csname faicon@pencil-square-o\endcsname {\symbol{"F044}} \def\faPencilSquareO {{\FA\csname faicon@pencil-square-o\endcsname}} -\expandafter\def\csname faicon@phone\endcsname {\symbol{"F095}} \def\faPhone {{\FA\csname faicon@phone\endcsname}} -\expandafter\def\csname faicon@phone-square\endcsname {\symbol{"F098}} \def\faPhoneSquare {{\FA\csname faicon@phone-square\endcsname}} -\expandafter\def\csname faicon@photo\endcsname {\symbol{"F03E}} \def\faPhoto {{\FA\csname faicon@photo\endcsname}} -\expandafter\def\csname faicon@picture-o\endcsname {\symbol{"F03E}} \def\faPictureO {{\FA\csname faicon@picture-o\endcsname}} -\expandafter\def\csname faicon@pie-chart\endcsname {\symbol{"F200}} \def\faPieChart {{\FA\csname faicon@pie-chart\endcsname}} -\expandafter\def\csname faicon@pied-piper\endcsname {\symbol{"F1A7}} \def\faPiedPiper {{\FA\csname faicon@pied-piper\endcsname}} -\expandafter\def\csname faicon@pied-piper-alt\endcsname {\symbol{"F1A8}} \def\faPiedPiperAlt {{\FA\csname faicon@pied-piper-alt\endcsname}} -\expandafter\def\csname faicon@pinterest\endcsname {\symbol{"F0D2}} \def\faPinterest {{\FA\csname faicon@pinterest\endcsname}} -\expandafter\def\csname faicon@pinterest-p\endcsname {\symbol{"F231}} \def\faPinterestP {{\FA\csname faicon@pinterest-p\endcsname}} -\expandafter\def\csname faicon@pinterest-square\endcsname {\symbol{"F0D3}} \def\faPinterestSquare {{\FA\csname faicon@pinterest-square\endcsname}} -\expandafter\def\csname faicon@plane\endcsname {\symbol{"F072}} \def\faPlane {{\FA\csname faicon@plane\endcsname}} -\expandafter\def\csname faicon@play\endcsname {\symbol{"F04B}} \def\faPlay {{\FA\csname faicon@play\endcsname}} -\expandafter\def\csname faicon@play-circle\endcsname {\symbol{"F144}} \def\faPlayCircle {{\FA\csname faicon@play-circle\endcsname}} -\expandafter\def\csname faicon@play-circle-o\endcsname {\symbol{"F01D}} \def\faPlayCircleO {{\FA\csname faicon@play-circle-o\endcsname}} -\expandafter\def\csname faicon@plug\endcsname {\symbol{"F1E6}} \def\faPlug {{\FA\csname faicon@plug\endcsname}} -\expandafter\def\csname faicon@plus\endcsname {\symbol{"F067}} \def\faPlus {{\FA\csname faicon@plus\endcsname}} -\expandafter\def\csname faicon@plus-circle\endcsname {\symbol{"F055}} \def\faPlusCircle {{\FA\csname faicon@plus-circle\endcsname}} -\expandafter\def\csname faicon@plus-square\endcsname {\symbol{"F0FE}} \def\faPlusSquare {{\FA\csname faicon@plus-square\endcsname}} -\expandafter\def\csname faicon@plus-square-o\endcsname {\symbol{"F196}} \def\faPlusSquareO {{\FA\csname faicon@plus-square-o\endcsname}} -\expandafter\def\csname faicon@power-off\endcsname {\symbol{"F011}} \def\faPowerOff {{\FA\csname faicon@power-off\endcsname}} -\expandafter\def\csname faicon@print\endcsname {\symbol{"F02F}} \def\faPrint {{\FA\csname faicon@print\endcsname}} -\expandafter\def\csname faicon@puzzle-piece\endcsname {\symbol{"F12E}} \def\faPuzzlePiece {{\FA\csname faicon@puzzle-piece\endcsname}} -\expandafter\def\csname faicon@qq\endcsname {\symbol{"F1D6}} \def\faQq {{\FA\csname faicon@qq\endcsname}} -\expandafter\def\csname faicon@qrcode\endcsname {\symbol{"F029}} \def\faQrcode {{\FA\csname faicon@qrcode\endcsname}} -\expandafter\def\csname faicon@question\endcsname {\symbol{"F128}} \def\faQuestion {{\FA\csname faicon@question\endcsname}} -\expandafter\def\csname faicon@question-circle\endcsname {\symbol{"F059}} \def\faQuestionCircle {{\FA\csname faicon@question-circle\endcsname}} -\expandafter\def\csname faicon@quote-left\endcsname {\symbol{"F10D}} \def\faQuoteLeft {{\FA\csname faicon@quote-left\endcsname}} -\expandafter\def\csname faicon@quote-right\endcsname {\symbol{"F10E}} \def\faQuoteRight {{\FA\csname faicon@quote-right\endcsname}} -\expandafter\def\csname faicon@ra\endcsname {\symbol{"F1D0}} \def\faRa {{\FA\csname faicon@ra\endcsname}} -\expandafter\def\csname faicon@random\endcsname {\symbol{"F074}} \def\faRandom {{\FA\csname faicon@random\endcsname}} -\expandafter\def\csname faicon@rebel\endcsname {\symbol{"F1D0}} \def\faRebel {{\FA\csname faicon@rebel\endcsname}} -\expandafter\def\csname faicon@recycle\endcsname {\symbol{"F1B8}} \def\faRecycle {{\FA\csname faicon@recycle\endcsname}} -\expandafter\def\csname faicon@reddit\endcsname {\symbol{"F1A1}} \def\faReddit {{\FA\csname faicon@reddit\endcsname}} -\expandafter\def\csname faicon@reddit-square\endcsname {\symbol{"F1A2}} \def\faRedditSquare {{\FA\csname faicon@reddit-square\endcsname}} -\expandafter\def\csname faicon@refresh\endcsname {\symbol{"F021}} \def\faRefresh {{\FA\csname faicon@refresh\endcsname}} -\expandafter\def\csname faicon@registered\endcsname {\symbol{"F25D}} \def\faRegistered {{\FA\csname faicon@registered\endcsname}} -\expandafter\def\csname faicon@remove\endcsname {\symbol{"F00D}} \def\faRemove {{\FA\csname faicon@remove\endcsname}} -\expandafter\def\csname faicon@renren\endcsname {\symbol{"F18B}} \def\faRenren {{\FA\csname faicon@renren\endcsname}} -\expandafter\def\csname faicon@reorder\endcsname {\symbol{"F0C9}} \def\faReorder {{\FA\csname faicon@reorder\endcsname}} -\expandafter\def\csname faicon@repeat\endcsname {\symbol{"F01E}} \def\faRepeat {{\FA\csname faicon@repeat\endcsname}} -\expandafter\def\csname faicon@reply\endcsname {\symbol{"F112}} \def\faReply {{\FA\csname faicon@reply\endcsname}} -\expandafter\def\csname faicon@reply-all\endcsname {\symbol{"F122}} \def\faReplyAll {{\FA\csname faicon@reply-all\endcsname}} -\expandafter\def\csname faicon@retweet\endcsname {\symbol{"F079}} \def\faRetweet {{\FA\csname faicon@retweet\endcsname}} -\expandafter\def\csname faicon@rmb\endcsname {\symbol{"F157}} \def\faRmb {{\FA\csname faicon@rmb\endcsname}} -\expandafter\def\csname faicon@road\endcsname {\symbol{"F018}} \def\faRoad {{\FA\csname faicon@road\endcsname}} -\expandafter\def\csname faicon@rocket\endcsname {\symbol{"F135}} \def\faRocket {{\FA\csname faicon@rocket\endcsname}} -\expandafter\def\csname faicon@rotate-left\endcsname {\symbol{"F0E2}} \def\faRotateLeft {{\FA\csname faicon@rotate-left\endcsname}} -\expandafter\def\csname faicon@rotate-right\endcsname {\symbol{"F01E}} \def\faRotateRight {{\FA\csname faicon@rotate-right\endcsname}} -\expandafter\def\csname faicon@rouble\endcsname {\symbol{"F158}} \def\faRouble {{\FA\csname faicon@rouble\endcsname}} -\expandafter\def\csname faicon@rss\endcsname {\symbol{"F09E}} \def\faRss {{\FA\csname faicon@rss\endcsname}} -\expandafter\def\csname faicon@rss-square\endcsname {\symbol{"F143}} \def\faRssSquare {{\FA\csname faicon@rss-square\endcsname}} -\expandafter\def\csname faicon@rub\endcsname {\symbol{"F158}} \def\faRub {{\FA\csname faicon@rub\endcsname}} -\expandafter\def\csname faicon@ruble\endcsname {\symbol{"F158}} \def\faRuble {{\FA\csname faicon@ruble\endcsname}} -\expandafter\def\csname faicon@rupee\endcsname {\symbol{"F156}} \def\faRupee {{\FA\csname faicon@rupee\endcsname}} -\expandafter\def\csname faicon@safari\endcsname {\symbol{"F267}} \def\faSafari {{\FA\csname faicon@safari\endcsname}} -\expandafter\def\csname faicon@save\endcsname {\symbol{"F0C7}} \def\faSave {{\FA\csname faicon@save\endcsname}} -\expandafter\def\csname faicon@scissors\endcsname {\symbol{"F0C4}} \def\faScissors {{\FA\csname faicon@scissors\endcsname}} -\expandafter\def\csname faicon@search\endcsname {\symbol{"F002}} \def\faSearch {{\FA\csname faicon@search\endcsname}} -\expandafter\def\csname faicon@search-minus\endcsname {\symbol{"F010}} \def\faSearchMinus {{\FA\csname faicon@search-minus\endcsname}} -\expandafter\def\csname faicon@search-plus\endcsname {\symbol{"F00E}} \def\faSearchPlus {{\FA\csname faicon@search-plus\endcsname}} -\expandafter\def\csname faicon@sellsy\endcsname {\symbol{"F213}} \def\faSellsy {{\FA\csname faicon@sellsy\endcsname}} -\expandafter\def\csname faicon@send\endcsname {\symbol{"F1D8}} \def\faSend {{\FA\csname faicon@send\endcsname}} -\expandafter\def\csname faicon@send-o\endcsname {\symbol{"F1D9}} \def\faSendO {{\FA\csname faicon@send-o\endcsname}} -\expandafter\def\csname faicon@server\endcsname {\symbol{"F233}} \def\faServer {{\FA\csname faicon@server\endcsname}} -\expandafter\def\csname faicon@share\endcsname {\symbol{"F064}} \def\faShare {{\FA\csname faicon@share\endcsname}} -\expandafter\def\csname faicon@share-alt\endcsname {\symbol{"F1E0}} \def\faShareAlt {{\FA\csname faicon@share-alt\endcsname}} -\expandafter\def\csname faicon@share-alt-square\endcsname {\symbol{"F1E1}} \def\faShareAltSquare {{\FA\csname faicon@share-alt-square\endcsname}} -\expandafter\def\csname faicon@share-square\endcsname {\symbol{"F14D}} \def\faShareSquare {{\FA\csname faicon@share-square\endcsname}} -\expandafter\def\csname faicon@share-square-o\endcsname {\symbol{"F045}} \def\faShareSquareO {{\FA\csname faicon@share-square-o\endcsname}} -\expandafter\def\csname faicon@shekel\endcsname {\symbol{"F20B}} \def\faShekel {{\FA\csname faicon@shekel\endcsname}} -\expandafter\def\csname faicon@sheqel\endcsname {\symbol{"F20B}} \def\faSheqel {{\FA\csname faicon@sheqel\endcsname}} -\expandafter\def\csname faicon@shield\endcsname {\symbol{"F132}} \def\faShield {{\FA\csname faicon@shield\endcsname}} -\expandafter\def\csname faicon@ship\endcsname {\symbol{"F21A}} \def\faShip {{\FA\csname faicon@ship\endcsname}} -\expandafter\def\csname faicon@shirtsinbulk\endcsname {\symbol{"F214}} \def\faShirtsinbulk {{\FA\csname faicon@shirtsinbulk\endcsname}} -\expandafter\def\csname faicon@shopping-cart\endcsname {\symbol{"F07A}} \def\faShoppingCart {{\FA\csname faicon@shopping-cart\endcsname}} -\expandafter\def\csname faicon@sign-in\endcsname {\symbol{"F090}} \def\faSignIn {{\FA\csname faicon@sign-in\endcsname}} -\expandafter\def\csname faicon@sign-out\endcsname {\symbol{"F08B}} \def\faSignOut {{\FA\csname faicon@sign-out\endcsname}} -\expandafter\def\csname faicon@signal\endcsname {\symbol{"F012}} \def\faSignal {{\FA\csname faicon@signal\endcsname}} -\expandafter\def\csname faicon@simplybuilt\endcsname {\symbol{"F215}} \def\faSimplybuilt {{\FA\csname faicon@simplybuilt\endcsname}} -\expandafter\def\csname faicon@sitemap\endcsname {\symbol{"F0E8}} \def\faSitemap {{\FA\csname faicon@sitemap\endcsname}} -\expandafter\def\csname faicon@skyatlas\endcsname {\symbol{"F216}} \def\faSkyatlas {{\FA\csname faicon@skyatlas\endcsname}} -\expandafter\def\csname faicon@skype\endcsname {\symbol{"F17E}} \def\faSkype {{\FA\csname faicon@skype\endcsname}} -\expandafter\def\csname faicon@slack\endcsname {\symbol{"F198}} \def\faSlack {{\FA\csname faicon@slack\endcsname}} -\expandafter\def\csname faicon@sliders\endcsname {\symbol{"F1DE}} \def\faSliders {{\FA\csname faicon@sliders\endcsname}} -\expandafter\def\csname faicon@slideshare\endcsname {\symbol{"F1E7}} \def\faSlideshare {{\FA\csname faicon@slideshare\endcsname}} -\expandafter\def\csname faicon@smile-o\endcsname {\symbol{"F118}} \def\faSmileO {{\FA\csname faicon@smile-o\endcsname}} -\expandafter\def\csname faicon@soccer-ball-o\endcsname {\symbol{"F1E3}} \def\faSoccerBallO {{\FA\csname faicon@soccer-ball-o\endcsname}} -\expandafter\def\csname faicon@sort\endcsname {\symbol{"F0DC}} \def\faSort {{\FA\csname faicon@sort\endcsname}} -\expandafter\def\csname faicon@sort-alpha-asc\endcsname {\symbol{"F15D}} \def\faSortAlphaAsc {{\FA\csname faicon@sort-alpha-asc\endcsname}} -\expandafter\def\csname faicon@sort-alpha-desc\endcsname {\symbol{"F15E}} \def\faSortAlphaDesc {{\FA\csname faicon@sort-alpha-desc\endcsname}} -\expandafter\def\csname faicon@sort-amount-asc\endcsname {\symbol{"F160}} \def\faSortAmountAsc {{\FA\csname faicon@sort-amount-asc\endcsname}} -\expandafter\def\csname faicon@sort-amount-desc\endcsname {\symbol{"F161}} \def\faSortAmountDesc {{\FA\csname faicon@sort-amount-desc\endcsname}} -\expandafter\def\csname faicon@sort-asc\endcsname {\symbol{"F0DE}} \def\faSortAsc {{\FA\csname faicon@sort-asc\endcsname}} -\expandafter\def\csname faicon@sort-desc\endcsname {\symbol{"F0DD}} \def\faSortDesc {{\FA\csname faicon@sort-desc\endcsname}} -\expandafter\def\csname faicon@sort-down\endcsname {\symbol{"F0DD}} \def\faSortDown {{\FA\csname faicon@sort-down\endcsname}} -\expandafter\def\csname faicon@sort-numeric-asc\endcsname {\symbol{"F162}} \def\faSortNumericAsc {{\FA\csname faicon@sort-numeric-asc\endcsname}} -\expandafter\def\csname faicon@sort-numeric-desc\endcsname {\symbol{"F163}} \def\faSortNumericDesc {{\FA\csname faicon@sort-numeric-desc\endcsname}} -\expandafter\def\csname faicon@sort-up\endcsname {\symbol{"F0DE}} \def\faSortUp {{\FA\csname faicon@sort-up\endcsname}} -\expandafter\def\csname faicon@soundcloud\endcsname {\symbol{"F1BE}} \def\faSoundcloud {{\FA\csname faicon@soundcloud\endcsname}} -\expandafter\def\csname faicon@space-shuttle\endcsname {\symbol{"F197}} \def\faSpaceShuttle {{\FA\csname faicon@space-shuttle\endcsname}} -\expandafter\def\csname faicon@spinner\endcsname {\symbol{"F110}} \def\faSpinner {{\FA\csname faicon@spinner\endcsname}} -\expandafter\def\csname faicon@spoon\endcsname {\symbol{"F1B1}} \def\faSpoon {{\FA\csname faicon@spoon\endcsname}} -\expandafter\def\csname faicon@spotify\endcsname {\symbol{"F1BC}} \def\faSpotify {{\FA\csname faicon@spotify\endcsname}} -\expandafter\def\csname faicon@square\endcsname {\symbol{"F0C8}} \def\faSquare {{\FA\csname faicon@square\endcsname}} -\expandafter\def\csname faicon@square-o\endcsname {\symbol{"F096}} \def\faSquareO {{\FA\csname faicon@square-o\endcsname}} -\expandafter\def\csname faicon@stack-exchange\endcsname {\symbol{"F18D}} \def\faStackExchange {{\FA\csname faicon@stack-exchange\endcsname}} -\expandafter\def\csname faicon@stack-overflow\endcsname {\symbol{"F16C}} \def\faStackOverflow {{\FA\csname faicon@stack-overflow\endcsname}} -\expandafter\def\csname faicon@star\endcsname {\symbol{"F005}} \def\faStar {{\FA\csname faicon@star\endcsname}} -\expandafter\def\csname faicon@star-half\endcsname {\symbol{"F089}} \def\faStarHalf {{\FA\csname faicon@star-half\endcsname}} -\expandafter\def\csname faicon@star-half-empty\endcsname {\symbol{"F123}} \def\faStarHalfEmpty {{\FA\csname faicon@star-half-empty\endcsname}} -\expandafter\def\csname faicon@star-half-full\endcsname {\symbol{"F123}} \def\faStarHalfFull {{\FA\csname faicon@star-half-full\endcsname}} -\expandafter\def\csname faicon@star-half-o\endcsname {\symbol{"F123}} \def\faStarHalfO {{\FA\csname faicon@star-half-o\endcsname}} -\expandafter\def\csname faicon@star-o\endcsname {\symbol{"F006}} \def\faStarO {{\FA\csname faicon@star-o\endcsname}} -\expandafter\def\csname faicon@steam\endcsname {\symbol{"F1B6}} \def\faSteam {{\FA\csname faicon@steam\endcsname}} -\expandafter\def\csname faicon@steam-square\endcsname {\symbol{"F1B7}} \def\faSteamSquare {{\FA\csname faicon@steam-square\endcsname}} -\expandafter\def\csname faicon@step-backward\endcsname {\symbol{"F048}} \def\faStepBackward {{\FA\csname faicon@step-backward\endcsname}} -\expandafter\def\csname faicon@step-forward\endcsname {\symbol{"F051}} \def\faStepForward {{\FA\csname faicon@step-forward\endcsname}} -\expandafter\def\csname faicon@stethoscope\endcsname {\symbol{"F0F1}} \def\faStethoscope {{\FA\csname faicon@stethoscope\endcsname}} -\expandafter\def\csname faicon@sticky-note\endcsname {\symbol{"F249}} \def\faStickyNote {{\FA\csname faicon@sticky-note\endcsname}} -\expandafter\def\csname faicon@sticky-note-o\endcsname {\symbol{"F24A}} \def\faStickyNoteO {{\FA\csname faicon@sticky-note-o\endcsname}} -\expandafter\def\csname faicon@stop\endcsname {\symbol{"F04D}} \def\faStop {{\FA\csname faicon@stop\endcsname}} -\expandafter\def\csname faicon@street-view\endcsname {\symbol{"F21D}} \def\faStreetView {{\FA\csname faicon@street-view\endcsname}} -\expandafter\def\csname faicon@strikethrough\endcsname {\symbol{"F0CC}} \def\faStrikethrough {{\FA\csname faicon@strikethrough\endcsname}} -\expandafter\def\csname faicon@stumbleupon\endcsname {\symbol{"F1A4}} \def\faStumbleupon {{\FA\csname faicon@stumbleupon\endcsname}} -\expandafter\def\csname faicon@stumbleupon-circle\endcsname {\symbol{"F1A3}} \def\faStumbleuponCircle {{\FA\csname faicon@stumbleupon-circle\endcsname}} -\expandafter\def\csname faicon@subscript\endcsname {\symbol{"F12C}} \def\faSubscript {{\FA\csname faicon@subscript\endcsname}} -\expandafter\def\csname faicon@subway\endcsname {\symbol{"F239}} \def\faSubway {{\FA\csname faicon@subway\endcsname}} -\expandafter\def\csname faicon@suitcase\endcsname {\symbol{"F0F2}} \def\faSuitcase {{\FA\csname faicon@suitcase\endcsname}} -\expandafter\def\csname faicon@sun-o\endcsname {\symbol{"F185}} \def\faSunO {{\FA\csname faicon@sun-o\endcsname}} -\expandafter\def\csname faicon@superscript\endcsname {\symbol{"F12B}} \def\faSuperscript {{\FA\csname faicon@superscript\endcsname}} -\expandafter\def\csname faicon@support\endcsname {\symbol{"F1CD}} \def\faSupport {{\FA\csname faicon@support\endcsname}} -\expandafter\def\csname faicon@table\endcsname {\symbol{"F0CE}} \def\faTable {{\FA\csname faicon@table\endcsname}} -\expandafter\def\csname faicon@tablet\endcsname {\symbol{"F10A}} \def\faTablet {{\FA\csname faicon@tablet\endcsname}} -\expandafter\def\csname faicon@tachometer\endcsname {\symbol{"F0E4}} \def\faTachometer {{\FA\csname faicon@tachometer\endcsname}} -\expandafter\def\csname faicon@tag\endcsname {\symbol{"F02B}} \def\faTag {{\FA\csname faicon@tag\endcsname}} -\expandafter\def\csname faicon@tags\endcsname {\symbol{"F02C}} \def\faTags {{\FA\csname faicon@tags\endcsname}} -\expandafter\def\csname faicon@tasks\endcsname {\symbol{"F0AE}} \def\faTasks {{\FA\csname faicon@tasks\endcsname}} -\expandafter\def\csname faicon@taxi\endcsname {\symbol{"F1BA}} \def\faTaxi {{\FA\csname faicon@taxi\endcsname}} -\expandafter\def\csname faicon@television\endcsname {\symbol{"F26C}} \def\faTelevision {{\FA\csname faicon@television\endcsname}} -\expandafter\def\csname faicon@tencent-weibo\endcsname {\symbol{"F1D5}} \def\faTencentWeibo {{\FA\csname faicon@tencent-weibo\endcsname}} -\expandafter\def\csname faicon@terminal\endcsname {\symbol{"F120}} \def\faTerminal {{\FA\csname faicon@terminal\endcsname}} -\expandafter\def\csname faicon@text-height\endcsname {\symbol{"F034}} \def\faTextHeight {{\FA\csname faicon@text-height\endcsname}} -\expandafter\def\csname faicon@text-width\endcsname {\symbol{"F035}} \def\faTextWidth {{\FA\csname faicon@text-width\endcsname}} -\expandafter\def\csname faicon@th\endcsname {\symbol{"F00A}} \def\faTh {{\FA\csname faicon@th\endcsname}} -\expandafter\def\csname faicon@th-large\endcsname {\symbol{"F009}} \def\faThLarge {{\FA\csname faicon@th-large\endcsname}} -\expandafter\def\csname faicon@th-list\endcsname {\symbol{"F00B}} \def\faThList {{\FA\csname faicon@th-list\endcsname}} -\expandafter\def\csname faicon@thumb-tack\endcsname {\symbol{"F08D}} \def\faThumbTack {{\FA\csname faicon@thumb-tack\endcsname}} -\expandafter\def\csname faicon@thumbs-down\endcsname {\symbol{"F165}} \def\faThumbsDown {{\FA\csname faicon@thumbs-down\endcsname}} -\expandafter\def\csname faicon@thumbs-o-down\endcsname {\symbol{"F088}} \def\faThumbsODown {{\FA\csname faicon@thumbs-o-down\endcsname}} -\expandafter\def\csname faicon@thumbs-o-up\endcsname {\symbol{"F087}} \def\faThumbsOUp {{\FA\csname faicon@thumbs-o-up\endcsname}} -\expandafter\def\csname faicon@thumbs-up\endcsname {\symbol{"F164}} \def\faThumbsUp {{\FA\csname faicon@thumbs-up\endcsname}} -\expandafter\def\csname faicon@ticket\endcsname {\symbol{"F145}} \def\faTicket {{\FA\csname faicon@ticket\endcsname}} -\expandafter\def\csname faicon@times\endcsname {\symbol{"F00D}} \def\faTimes {{\FA\csname faicon@times\endcsname}} -\expandafter\def\csname faicon@times-circle\endcsname {\symbol{"F057}} \def\faTimesCircle {{\FA\csname faicon@times-circle\endcsname}} -\expandafter\def\csname faicon@times-circle-o\endcsname {\symbol{"F05C}} \def\faTimesCircleO {{\FA\csname faicon@times-circle-o\endcsname}} -\expandafter\def\csname faicon@tint\endcsname {\symbol{"F043}} \def\faTint {{\FA\csname faicon@tint\endcsname}} -\expandafter\def\csname faicon@toggle-down\endcsname {\symbol{"F150}} \def\faToggleDown {{\FA\csname faicon@toggle-down\endcsname}} -\expandafter\def\csname faicon@toggle-left\endcsname {\symbol{"F191}} \def\faToggleLeft {{\FA\csname faicon@toggle-left\endcsname}} -\expandafter\def\csname faicon@toggle-off\endcsname {\symbol{"F204}} \def\faToggleOff {{\FA\csname faicon@toggle-off\endcsname}} -\expandafter\def\csname faicon@toggle-on\endcsname {\symbol{"F205}} \def\faToggleOn {{\FA\csname faicon@toggle-on\endcsname}} -\expandafter\def\csname faicon@toggle-right\endcsname {\symbol{"F152}} \def\faToggleRight {{\FA\csname faicon@toggle-right\endcsname}} -\expandafter\def\csname faicon@toggle-up\endcsname {\symbol{"F151}} \def\faToggleUp {{\FA\csname faicon@toggle-up\endcsname}} -\expandafter\def\csname faicon@trademark\endcsname {\symbol{"F25C}} \def\faTrademark {{\FA\csname faicon@trademark\endcsname}} -\expandafter\def\csname faicon@train\endcsname {\symbol{"F238}} \def\faTrain {{\FA\csname faicon@train\endcsname}} -\expandafter\def\csname faicon@transgender\endcsname {\symbol{"F224}} \def\faTransgender {{\FA\csname faicon@transgender\endcsname}} -\expandafter\def\csname faicon@transgender-alt\endcsname {\symbol{"F225}} \def\faTransgenderAlt {{\FA\csname faicon@transgender-alt\endcsname}} -\expandafter\def\csname faicon@trash\endcsname {\symbol{"F1F8}} \def\faTrash {{\FA\csname faicon@trash\endcsname}} -\expandafter\def\csname faicon@trash-o\endcsname {\symbol{"F014}} \def\faTrashO {{\FA\csname faicon@trash-o\endcsname}} -\expandafter\def\csname faicon@tree\endcsname {\symbol{"F1BB}} \def\faTree {{\FA\csname faicon@tree\endcsname}} -\expandafter\def\csname faicon@trello\endcsname {\symbol{"F181}} \def\faTrello {{\FA\csname faicon@trello\endcsname}} -\expandafter\def\csname faicon@tripadvisor\endcsname {\symbol{"F262}} \def\faTripadvisor {{\FA\csname faicon@tripadvisor\endcsname}} -\expandafter\def\csname faicon@trophy\endcsname {\symbol{"F091}} \def\faTrophy {{\FA\csname faicon@trophy\endcsname}} -\expandafter\def\csname faicon@truck\endcsname {\symbol{"F0D1}} \def\faTruck {{\FA\csname faicon@truck\endcsname}} -\expandafter\def\csname faicon@try\endcsname {\symbol{"F195}} \def\faTry {{\FA\csname faicon@try\endcsname}} -\expandafter\def\csname faicon@tty\endcsname {\symbol{"F1E4}} \def\faTty {{\FA\csname faicon@tty\endcsname}} -\expandafter\def\csname faicon@tumblr\endcsname {\symbol{"F173}} \def\faTumblr {{\FA\csname faicon@tumblr\endcsname}} -\expandafter\def\csname faicon@tumblr-square\endcsname {\symbol{"F174}} \def\faTumblrSquare {{\FA\csname faicon@tumblr-square\endcsname}} -\expandafter\def\csname faicon@turkish-lira\endcsname {\symbol{"F195}} \def\faTurkishLira {{\FA\csname faicon@turkish-lira\endcsname}} -\expandafter\def\csname faicon@tv\endcsname {\symbol{"F26C}} \def\faTv {{\FA\csname faicon@tv\endcsname}} -\expandafter\def\csname faicon@twitch\endcsname {\symbol{"F1E8}} \def\faTwitch {{\FA\csname faicon@twitch\endcsname}} -\expandafter\def\csname faicon@twitter\endcsname {\symbol{"F099}} \def\faTwitter {{\FA\csname faicon@twitter\endcsname}} -\expandafter\def\csname faicon@twitter-square\endcsname {\symbol{"F081}} \def\faTwitterSquare {{\FA\csname faicon@twitter-square\endcsname}} -\expandafter\def\csname faicon@umbrella\endcsname {\symbol{"F0E9}} \def\faUmbrella {{\FA\csname faicon@umbrella\endcsname}} -\expandafter\def\csname faicon@underline\endcsname {\symbol{"F0CD}} \def\faUnderline {{\FA\csname faicon@underline\endcsname}} -\expandafter\def\csname faicon@undo\endcsname {\symbol{"F0E2}} \def\faUndo {{\FA\csname faicon@undo\endcsname}} -\expandafter\def\csname faicon@university\endcsname {\symbol{"F19C}} \def\faUniversity {{\FA\csname faicon@university\endcsname}} -\expandafter\def\csname faicon@unlink\endcsname {\symbol{"F127}} \def\faUnlink {{\FA\csname faicon@unlink\endcsname}} -\expandafter\def\csname faicon@unlock\endcsname {\symbol{"F09C}} \def\faUnlock {{\FA\csname faicon@unlock\endcsname}} -\expandafter\def\csname faicon@unlock-alt\endcsname {\symbol{"F13E}} \def\faUnlockAlt {{\FA\csname faicon@unlock-alt\endcsname}} -\expandafter\def\csname faicon@unsorted\endcsname {\symbol{"F0DC}} \def\faUnsorted {{\FA\csname faicon@unsorted\endcsname}} -\expandafter\def\csname faicon@upload\endcsname {\symbol{"F093}} \def\faUpload {{\FA\csname faicon@upload\endcsname}} -\expandafter\def\csname faicon@usd\endcsname {\symbol{"F155}} \def\faUsd {{\FA\csname faicon@usd\endcsname}} -\expandafter\def\csname faicon@user\endcsname {\symbol{"F007}} \def\faUser {{\FA\csname faicon@user\endcsname}} -\expandafter\def\csname faicon@user-md\endcsname {\symbol{"F0F0}} \def\faUserMd {{\FA\csname faicon@user-md\endcsname}} -\expandafter\def\csname faicon@user-plus\endcsname {\symbol{"F234}} \def\faUserPlus {{\FA\csname faicon@user-plus\endcsname}} -\expandafter\def\csname faicon@user-secret\endcsname {\symbol{"F21B}} \def\faUserSecret {{\FA\csname faicon@user-secret\endcsname}} -\expandafter\def\csname faicon@user-times\endcsname {\symbol{"F235}} \def\faUserTimes {{\FA\csname faicon@user-times\endcsname}} -\expandafter\def\csname faicon@users\endcsname {\symbol{"F0C0}} \def\faUsers {{\FA\csname faicon@users\endcsname}} -\expandafter\def\csname faicon@venus\endcsname {\symbol{"F221}} \def\faVenus {{\FA\csname faicon@venus\endcsname}} -\expandafter\def\csname faicon@venus-double\endcsname {\symbol{"F226}} \def\faVenusDouble {{\FA\csname faicon@venus-double\endcsname}} -\expandafter\def\csname faicon@venus-mars\endcsname {\symbol{"F228}} \def\faVenusMars {{\FA\csname faicon@venus-mars\endcsname}} -\expandafter\def\csname faicon@viacoin\endcsname {\symbol{"F237}} \def\faViacoin {{\FA\csname faicon@viacoin\endcsname}} -\expandafter\def\csname faicon@video-camera\endcsname {\symbol{"F03D}} \def\faVideoCamera {{\FA\csname faicon@video-camera\endcsname}} -\expandafter\def\csname faicon@vimeo\endcsname {\symbol{"F27D}} \def\faVimeo {{\FA\csname faicon@vimeo\endcsname}} -\expandafter\def\csname faicon@vimeo-square\endcsname {\symbol{"F194}} \def\faVimeoSquare {{\FA\csname faicon@vimeo-square\endcsname}} -\expandafter\def\csname faicon@vine\endcsname {\symbol{"F1CA}} \def\faVine {{\FA\csname faicon@vine\endcsname}} -\expandafter\def\csname faicon@vk\endcsname {\symbol{"F189}} \def\faVk {{\FA\csname faicon@vk\endcsname}} -\expandafter\def\csname faicon@volume-down\endcsname {\symbol{"F027}} \def\faVolumeDown {{\FA\csname faicon@volume-down\endcsname}} -\expandafter\def\csname faicon@volume-off\endcsname {\symbol{"F026}} \def\faVolumeOff {{\FA\csname faicon@volume-off\endcsname}} -\expandafter\def\csname faicon@volume-up\endcsname {\symbol{"F028}} \def\faVolumeUp {{\FA\csname faicon@volume-up\endcsname}} -\expandafter\def\csname faicon@warning\endcsname {\symbol{"F071}} \def\faWarning {{\FA\csname faicon@warning\endcsname}} -\expandafter\def\csname faicon@wechat\endcsname {\symbol{"F1D7}} \def\faWechat {{\FA\csname faicon@wechat\endcsname}} -\expandafter\def\csname faicon@weibo\endcsname {\symbol{"F18A}} \def\faWeibo {{\FA\csname faicon@weibo\endcsname}} -\expandafter\def\csname faicon@weixin\endcsname {\symbol{"F1D7}} \def\faWeixin {{\FA\csname faicon@weixin\endcsname}} -\expandafter\def\csname faicon@whatsapp\endcsname {\symbol{"F232}} \def\faWhatsapp {{\FA\csname faicon@whatsapp\endcsname}} -\expandafter\def\csname faicon@wheelchair\endcsname {\symbol{"F193}} \def\faWheelchair {{\FA\csname faicon@wheelchair\endcsname}} -\expandafter\def\csname faicon@wifi\endcsname {\symbol{"F1EB}} \def\faWifi {{\FA\csname faicon@wifi\endcsname}} -\expandafter\def\csname faicon@wikipedia-w\endcsname {\symbol{"F266}} \def\faWikipediaW {{\FA\csname faicon@wikipedia-w\endcsname}} -\expandafter\def\csname faicon@windows\endcsname {\symbol{"F17A}} \def\faWindows {{\FA\csname faicon@windows\endcsname}} -\expandafter\def\csname faicon@won\endcsname {\symbol{"F159}} \def\faWon {{\FA\csname faicon@won\endcsname}} -\expandafter\def\csname faicon@wordpress\endcsname {\symbol{"F19A}} \def\faWordpress {{\FA\csname faicon@wordpress\endcsname}} -\expandafter\def\csname faicon@wrench\endcsname {\symbol{"F0AD}} \def\faWrench {{\FA\csname faicon@wrench\endcsname}} -\expandafter\def\csname faicon@xing\endcsname {\symbol{"F168}} \def\faXing {{\FA\csname faicon@xing\endcsname}} -\expandafter\def\csname faicon@xing-square\endcsname {\symbol{"F169}} \def\faXingSquare {{\FA\csname faicon@xing-square\endcsname}} -\expandafter\def\csname faicon@y-combinator\endcsname {\symbol{"F23B}} \def\faYCombinator {{\FA\csname faicon@y-combinator\endcsname}} -\expandafter\def\csname faicon@y-combinator-square\endcsname {\symbol{"F1D4}} \def\faYCombinatorSquare {{\FA\csname faicon@y-combinator-square\endcsname}} -\expandafter\def\csname faicon@yahoo\endcsname {\symbol{"F19E}} \def\faYahoo {{\FA\csname faicon@yahoo\endcsname}} -\expandafter\def\csname faicon@yc\endcsname {\symbol{"F23B}} \def\faYc {{\FA\csname faicon@yc\endcsname}} -\expandafter\def\csname faicon@yc-square\endcsname {\symbol{"F1D4}} \def\faYcSquare {{\FA\csname faicon@yc-square\endcsname}} -\expandafter\def\csname faicon@yelp\endcsname {\symbol{"F1E9}} \def\faYelp {{\FA\csname faicon@yelp\endcsname}} -\expandafter\def\csname faicon@yen\endcsname {\symbol{"F157}} \def\faYen {{\FA\csname faicon@yen\endcsname}} -\expandafter\def\csname faicon@youtube\endcsname {\symbol{"F167}} \def\faYoutube {{\FA\csname faicon@youtube\endcsname}} -\expandafter\def\csname faicon@youtube-play\endcsname {\symbol{"F16A}} \def\faYoutubePlay {{\FA\csname faicon@youtube-play\endcsname}} -\expandafter\def\csname faicon@youtube-square\endcsname {\symbol{"F166}} \def\faYoutubeSquare {{\FA\csname faicon@youtube-square\endcsname}} +%% Copyright 2015 Claud D. Park <posquit0.bj@gmail.com> +%% It is based on furl's latex-fontawesome project. + +% Identify this package. +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{fontawesome}[2015/11/04 v4.4.0 font awesome icons] + +% Requirements to use. +\usepackage{fontspec} + +% Define shortcut to load the Font Awesome font. +\newfontfamily{\FA}[ +Path=fonts/ +]{FontAwesome} +% Generic command displaying an icon by its name. +\newcommand*{\faicon}[1]{{ + \FA\csname faicon@#1\endcsname +}} + +\expandafter\def\csname faicon@adjust\endcsname {\symbol{"F042}} \def\faAdjust {{\FA\csname faicon@adjust\endcsname}} +\expandafter\def\csname faicon@adn\endcsname {\symbol{"F170}} \def\faAdn {{\FA\csname faicon@adn\endcsname}} +\expandafter\def\csname faicon@align-center\endcsname {\symbol{"F037}} \def\faAlignCenter {{\FA\csname faicon@align-center\endcsname}} +\expandafter\def\csname faicon@align-justify\endcsname {\symbol{"F039}} \def\faAlignJustify {{\FA\csname faicon@align-justify\endcsname}} +\expandafter\def\csname faicon@align-left\endcsname {\symbol{"F036}} \def\faAlignLeft {{\FA\csname faicon@align-left\endcsname}} +\expandafter\def\csname faicon@align-right\endcsname {\symbol{"F038}} \def\faAlignRight {{\FA\csname faicon@align-right\endcsname}} +\expandafter\def\csname faicon@amazon\endcsname {\symbol{"F270}} \def\faAmazon {{\FA\csname faicon@amazon\endcsname}} +\expandafter\def\csname faicon@ambulance\endcsname {\symbol{"F0F9}} \def\faAmbulance {{\FA\csname faicon@ambulance\endcsname}} +\expandafter\def\csname faicon@anchor\endcsname {\symbol{"F13D}} \def\faAnchor {{\FA\csname faicon@anchor\endcsname}} +\expandafter\def\csname faicon@android\endcsname {\symbol{"F17B}} \def\faAndroid {{\FA\csname faicon@android\endcsname}} +\expandafter\def\csname faicon@angellist\endcsname {\symbol{"F209}} \def\faAngellist {{\FA\csname faicon@angellist\endcsname}} +\expandafter\def\csname faicon@angle-double-down\endcsname {\symbol{"F103}} \def\faAngleDoubleDown {{\FA\csname faicon@angle-double-down\endcsname}} +\expandafter\def\csname faicon@angle-double-left\endcsname {\symbol{"F100}} \def\faAngleDoubleLeft {{\FA\csname faicon@angle-double-left\endcsname}} +\expandafter\def\csname faicon@angle-double-right\endcsname {\symbol{"F101}} \def\faAngleDoubleRight {{\FA\csname faicon@angle-double-right\endcsname}} +\expandafter\def\csname faicon@angle-double-up\endcsname {\symbol{"F102}} \def\faAngleDoubleUp {{\FA\csname faicon@angle-double-up\endcsname}} +\expandafter\def\csname faicon@angle-down\endcsname {\symbol{"F107}} \def\faAngleDown {{\FA\csname faicon@angle-down\endcsname}} +\expandafter\def\csname faicon@angle-left\endcsname {\symbol{"F104}} \def\faAngleLeft {{\FA\csname faicon@angle-left\endcsname}} +\expandafter\def\csname faicon@angle-right\endcsname {\symbol{"F105}} \def\faAngleRight {{\FA\csname faicon@angle-right\endcsname}} +\expandafter\def\csname faicon@angle-up\endcsname {\symbol{"F106}} \def\faAngleUp {{\FA\csname faicon@angle-up\endcsname}} +\expandafter\def\csname faicon@apple\endcsname {\symbol{"F179}} \def\faApple {{\FA\csname faicon@apple\endcsname}} +\expandafter\def\csname faicon@archive\endcsname {\symbol{"F187}} \def\faArchive {{\FA\csname faicon@archive\endcsname}} +\expandafter\def\csname faicon@area-chart\endcsname {\symbol{"F1FE}} \def\faAreaChart {{\FA\csname faicon@area-chart\endcsname}} +\expandafter\def\csname faicon@arrow-circle-down\endcsname {\symbol{"F0AB}} \def\faArrowCircleDown {{\FA\csname faicon@arrow-circle-down\endcsname}} +\expandafter\def\csname faicon@arrow-circle-left\endcsname {\symbol{"F0A8}} \def\faArrowCircleLeft {{\FA\csname faicon@arrow-circle-left\endcsname}} +\expandafter\def\csname faicon@arrow-circle-o-down\endcsname {\symbol{"F01A}} \def\faArrowCircleODown {{\FA\csname faicon@arrow-circle-o-down\endcsname}} +\expandafter\def\csname faicon@arrow-circle-o-left\endcsname {\symbol{"F190}} \def\faArrowCircleOLeft {{\FA\csname faicon@arrow-circle-o-left\endcsname}} +\expandafter\def\csname faicon@arrow-circle-o-right\endcsname {\symbol{"F18E}} \def\faArrowCircleORight {{\FA\csname faicon@arrow-circle-o-right\endcsname}} +\expandafter\def\csname faicon@arrow-circle-o-up\endcsname {\symbol{"F01B}} \def\faArrowCircleOUp {{\FA\csname faicon@arrow-circle-o-up\endcsname}} +\expandafter\def\csname faicon@arrow-circle-right\endcsname {\symbol{"F0A9}} \def\faArrowCircleRight {{\FA\csname faicon@arrow-circle-right\endcsname}} +\expandafter\def\csname faicon@arrow-circle-up\endcsname {\symbol{"F0AA}} \def\faArrowCircleUp {{\FA\csname faicon@arrow-circle-up\endcsname}} +\expandafter\def\csname faicon@arrow-down\endcsname {\symbol{"F063}} \def\faArrowDown {{\FA\csname faicon@arrow-down\endcsname}} +\expandafter\def\csname faicon@arrow-left\endcsname {\symbol{"F060}} \def\faArrowLeft {{\FA\csname faicon@arrow-left\endcsname}} +\expandafter\def\csname faicon@arrow-right\endcsname {\symbol{"F061}} \def\faArrowRight {{\FA\csname faicon@arrow-right\endcsname}} +\expandafter\def\csname faicon@arrow-up\endcsname {\symbol{"F062}} \def\faArrowUp {{\FA\csname faicon@arrow-up\endcsname}} +\expandafter\def\csname faicon@arrows\endcsname {\symbol{"F047}} \def\faArrows {{\FA\csname faicon@arrows\endcsname}} +\expandafter\def\csname faicon@arrows-alt\endcsname {\symbol{"F0B2}} \def\faArrowsAlt {{\FA\csname faicon@arrows-alt\endcsname}} +\expandafter\def\csname faicon@arrows-h\endcsname {\symbol{"F07E}} \def\faArrowsH {{\FA\csname faicon@arrows-h\endcsname}} +\expandafter\def\csname faicon@arrows-v\endcsname {\symbol{"F07D}} \def\faArrowsV {{\FA\csname faicon@arrows-v\endcsname}} +\expandafter\def\csname faicon@asterisk\endcsname {\symbol{"F069}} \def\faAsterisk {{\FA\csname faicon@asterisk\endcsname}} +\expandafter\def\csname faicon@at\endcsname {\symbol{"F1FA}} \def\faAt {{\FA\csname faicon@at\endcsname}} +\expandafter\def\csname faicon@automobile\endcsname {\symbol{"F1B9}} \def\faAutomobile {{\FA\csname faicon@automobile\endcsname}} +\expandafter\def\csname faicon@backward\endcsname {\symbol{"F04A}} \def\faBackward {{\FA\csname faicon@backward\endcsname}} +\expandafter\def\csname faicon@balance-scale\endcsname {\symbol{"F24E}} \def\faBalanceScale {{\FA\csname faicon@balance-scale\endcsname}} +\expandafter\def\csname faicon@ban\endcsname {\symbol{"F05E}} \def\faBan {{\FA\csname faicon@ban\endcsname}} +\expandafter\def\csname faicon@bank\endcsname {\symbol{"F19C}} \def\faBank {{\FA\csname faicon@bank\endcsname}} +\expandafter\def\csname faicon@bar-chart\endcsname {\symbol{"F080}} \def\faBarChart {{\FA\csname faicon@bar-chart\endcsname}} +\expandafter\def\csname faicon@bar-chart-o\endcsname {\symbol{"F080}} \def\faBarChartO {{\FA\csname faicon@bar-chart-o\endcsname}} +\expandafter\def\csname faicon@barcode\endcsname {\symbol{"F02A}} \def\faBarcode {{\FA\csname faicon@barcode\endcsname}} +\expandafter\def\csname faicon@bars\endcsname {\symbol{"F0C9}} \def\faBars {{\FA\csname faicon@bars\endcsname}} +\expandafter\def\csname faicon@battery-empty\endcsname {\symbol{"F244}} \def\faBatteryEmpty {{\FA\csname faicon@battery-empty\endcsname}} +\expandafter\def\csname faicon@battery-full\endcsname {\symbol{"F240}} \def\faBatteryFull {{\FA\csname faicon@battery-full\endcsname}} +\expandafter\def\csname faicon@battery-half\endcsname {\symbol{"F242}} \def\faBatteryHalf {{\FA\csname faicon@battery-half\endcsname}} +\expandafter\def\csname faicon@battery-quarter\endcsname {\symbol{"F243}} \def\faBatteryQuarter {{\FA\csname faicon@battery-quarter\endcsname}} +\expandafter\def\csname faicon@battery-three-quarters\endcsname {\symbol{"F241}} \def\faBatteryThreeQuarters {{\FA\csname faicon@battery-three-quarters\endcsname}} +\expandafter\def\csname faicon@bed\endcsname {\symbol{"F236}} \def\faBed {{\FA\csname faicon@bed\endcsname}} +\expandafter\def\csname faicon@beer\endcsname {\symbol{"F0FC}} \def\faBeer {{\FA\csname faicon@beer\endcsname}} +\expandafter\def\csname faicon@behance\endcsname {\symbol{"F1B4}} \def\faBehance {{\FA\csname faicon@behance\endcsname}} +\expandafter\def\csname faicon@behance-square\endcsname {\symbol{"F1B5}} \def\faBehanceSquare {{\FA\csname faicon@behance-square\endcsname}} +\expandafter\def\csname faicon@bell\endcsname {\symbol{"F0F3}} \def\faBell {{\FA\csname faicon@bell\endcsname}} +\expandafter\def\csname faicon@bell-o\endcsname {\symbol{"F0A2}} \def\faBellO {{\FA\csname faicon@bell-o\endcsname}} +\expandafter\def\csname faicon@bell-slash\endcsname {\symbol{"F1F6}} \def\faBellSlash {{\FA\csname faicon@bell-slash\endcsname}} +\expandafter\def\csname faicon@bell-slash-o\endcsname {\symbol{"F1F7}} \def\faBellSlashO {{\FA\csname faicon@bell-slash-o\endcsname}} +\expandafter\def\csname faicon@bicycle\endcsname {\symbol{"F206}} \def\faBicycle {{\FA\csname faicon@bicycle\endcsname}} +\expandafter\def\csname faicon@binoculars\endcsname {\symbol{"F1E5}} \def\faBinoculars {{\FA\csname faicon@binoculars\endcsname}} +\expandafter\def\csname faicon@birthday-cake\endcsname {\symbol{"F1FD}} \def\faBirthdayCake {{\FA\csname faicon@birthday-cake\endcsname}} +\expandafter\def\csname faicon@bitbucket\endcsname {\symbol{"F171}} \def\faBitbucket {{\FA\csname faicon@bitbucket\endcsname}} +\expandafter\def\csname faicon@bitbucket-square\endcsname {\symbol{"F172}} \def\faBitbucketSquare {{\FA\csname faicon@bitbucket-square\endcsname}} +\expandafter\def\csname faicon@bitcoin\endcsname {\symbol{"F15A}} \def\faBitcoin {{\FA\csname faicon@bitcoin\endcsname}} +\expandafter\def\csname faicon@black-tie\endcsname {\symbol{"F27E}} \def\faBlackTie {{\FA\csname faicon@black-tie\endcsname}} +\expandafter\def\csname faicon@bold\endcsname {\symbol{"F032}} \def\faBold {{\FA\csname faicon@bold\endcsname}} +\expandafter\def\csname faicon@bolt\endcsname {\symbol{"F0E7}} \def\faBolt {{\FA\csname faicon@bolt\endcsname}} +\expandafter\def\csname faicon@bomb\endcsname {\symbol{"F1E2}} \def\faBomb {{\FA\csname faicon@bomb\endcsname}} +\expandafter\def\csname faicon@book\endcsname {\symbol{"F02D}} \def\faBook {{\FA\csname faicon@book\endcsname}} +\expandafter\def\csname faicon@bookmark\endcsname {\symbol{"F02E}} \def\faBookmark {{\FA\csname faicon@bookmark\endcsname}} +\expandafter\def\csname faicon@bookmark-o\endcsname {\symbol{"F097}} \def\faBookmarkO {{\FA\csname faicon@bookmark-o\endcsname}} +\expandafter\def\csname faicon@briefcase\endcsname {\symbol{"F0B1}} \def\faBriefcase {{\FA\csname faicon@briefcase\endcsname}} +\expandafter\def\csname faicon@btc\endcsname {\symbol{"F15A}} \def\faBtc {{\FA\csname faicon@btc\endcsname}} +\expandafter\def\csname faicon@bug\endcsname {\symbol{"F188}} \def\faBug {{\FA\csname faicon@bug\endcsname}} +\expandafter\def\csname faicon@building\endcsname {\symbol{"F1AD}} \def\faBuilding {{\FA\csname faicon@building\endcsname}} +\expandafter\def\csname faicon@building-o\endcsname {\symbol{"F0F7}} \def\faBuildingO {{\FA\csname faicon@building-o\endcsname}} +\expandafter\def\csname faicon@bullhorn\endcsname {\symbol{"F0A1}} \def\faBullhorn {{\FA\csname faicon@bullhorn\endcsname}} +\expandafter\def\csname faicon@bullseye\endcsname {\symbol{"F140}} \def\faBullseye {{\FA\csname faicon@bullseye\endcsname}} +\expandafter\def\csname faicon@bus\endcsname {\symbol{"F207}} \def\faBus {{\FA\csname faicon@bus\endcsname}} +\expandafter\def\csname faicon@buysellads\endcsname {\symbol{"F20D}} \def\faBuysellads {{\FA\csname faicon@buysellads\endcsname}} +\expandafter\def\csname faicon@cab\endcsname {\symbol{"F1BA}} \def\faCab {{\FA\csname faicon@cab\endcsname}} +\expandafter\def\csname faicon@calculator\endcsname {\symbol{"F1EC}} \def\faCalculator {{\FA\csname faicon@calculator\endcsname}} +\expandafter\def\csname faicon@calendar\endcsname {\symbol{"F073}} \def\faCalendar {{\FA\csname faicon@calendar\endcsname}} +\expandafter\def\csname faicon@calendar-check-o\endcsname {\symbol{"F274}} \def\faCalendarCheckO {{\FA\csname faicon@calendar-check-o\endcsname}} +\expandafter\def\csname faicon@calendar-minus-o\endcsname {\symbol{"F272}} \def\faCalendarMinusO {{\FA\csname faicon@calendar-minus-o\endcsname}} +\expandafter\def\csname faicon@calendar-o\endcsname {\symbol{"F133}} \def\faCalendarO {{\FA\csname faicon@calendar-o\endcsname}} +\expandafter\def\csname faicon@calendar-plus-o\endcsname {\symbol{"F271}} \def\faCalendarPlusO {{\FA\csname faicon@calendar-plus-o\endcsname}} +\expandafter\def\csname faicon@calendar-times-o\endcsname {\symbol{"F273}} \def\faCalendarTimesO {{\FA\csname faicon@calendar-times-o\endcsname}} +\expandafter\def\csname faicon@camera\endcsname {\symbol{"F030}} \def\faCamera {{\FA\csname faicon@camera\endcsname}} +\expandafter\def\csname faicon@camera-retro\endcsname {\symbol{"F083}} \def\faCameraRetro {{\FA\csname faicon@camera-retro\endcsname}} +\expandafter\def\csname faicon@car\endcsname {\symbol{"F1B9}} \def\faCar {{\FA\csname faicon@car\endcsname}} +\expandafter\def\csname faicon@caret-down\endcsname {\symbol{"F0D7}} \def\faCaretDown {{\FA\csname faicon@caret-down\endcsname}} +\expandafter\def\csname faicon@caret-left\endcsname {\symbol{"F0D9}} \def\faCaretLeft {{\FA\csname faicon@caret-left\endcsname}} +\expandafter\def\csname faicon@caret-right\endcsname {\symbol{"F0DA}} \def\faCaretRight {{\FA\csname faicon@caret-right\endcsname}} +\expandafter\def\csname faicon@caret-square-o-down\endcsname {\symbol{"F150}} \def\faCaretSquareODown {{\FA\csname faicon@caret-square-o-down\endcsname}} +\expandafter\def\csname faicon@caret-square-o-left\endcsname {\symbol{"F191}} \def\faCaretSquareOLeft {{\FA\csname faicon@caret-square-o-left\endcsname}} +\expandafter\def\csname faicon@caret-square-o-right\endcsname {\symbol{"F152}} \def\faCaretSquareORight {{\FA\csname faicon@caret-square-o-right\endcsname}} +\expandafter\def\csname faicon@caret-square-o-up\endcsname {\symbol{"F151}} \def\faCaretSquareOUp {{\FA\csname faicon@caret-square-o-up\endcsname}} +\expandafter\def\csname faicon@caret-up\endcsname {\symbol{"F0D8}} \def\faCaretUp {{\FA\csname faicon@caret-up\endcsname}} +\expandafter\def\csname faicon@cart-arrow-down\endcsname {\symbol{"F218}} \def\faCartArrowDown {{\FA\csname faicon@cart-arrow-down\endcsname}} +\expandafter\def\csname faicon@cart-plus\endcsname {\symbol{"F217}} \def\faCartPlus {{\FA\csname faicon@cart-plus\endcsname}} +\expandafter\def\csname faicon@cc\endcsname {\symbol{"F20A}} \def\faCc {{\FA\csname faicon@cc\endcsname}} +\expandafter\def\csname faicon@cc-amex\endcsname {\symbol{"F1F3}} \def\faCcAmex {{\FA\csname faicon@cc-amex\endcsname}} +\expandafter\def\csname faicon@cc-diners-club\endcsname {\symbol{"F24C}} \def\faCcDinersClub {{\FA\csname faicon@cc-diners-club\endcsname}} +\expandafter\def\csname faicon@cc-discover\endcsname {\symbol{"F1F2}} \def\faCcDiscover {{\FA\csname faicon@cc-discover\endcsname}} +\expandafter\def\csname faicon@cc-jcb\endcsname {\symbol{"F24B}} \def\faCcJcb {{\FA\csname faicon@cc-jcb\endcsname}} +\expandafter\def\csname faicon@cc-mastercard\endcsname {\symbol{"F1F1}} \def\faCcMastercard {{\FA\csname faicon@cc-mastercard\endcsname}} +\expandafter\def\csname faicon@cc-paypal\endcsname {\symbol{"F1F4}} \def\faCcPaypal {{\FA\csname faicon@cc-paypal\endcsname}} +\expandafter\def\csname faicon@cc-stripe\endcsname {\symbol{"F1F5}} \def\faCcStripe {{\FA\csname faicon@cc-stripe\endcsname}} +\expandafter\def\csname faicon@cc-visa\endcsname {\symbol{"F1F0}} \def\faCcVisa {{\FA\csname faicon@cc-visa\endcsname}} +\expandafter\def\csname faicon@certificate\endcsname {\symbol{"F0A3}} \def\faCertificate {{\FA\csname faicon@certificate\endcsname}} +\expandafter\def\csname faicon@chain\endcsname {\symbol{"F0C1}} \def\faChain {{\FA\csname faicon@chain\endcsname}} +\expandafter\def\csname faicon@chain-broken\endcsname {\symbol{"F127}} \def\faChainBroken {{\FA\csname faicon@chain-broken\endcsname}} +\expandafter\def\csname faicon@check\endcsname {\symbol{"F00C}} \def\faCheck {{\FA\csname faicon@check\endcsname}} +\expandafter\def\csname faicon@check-circle\endcsname {\symbol{"F058}} \def\faCheckCircle {{\FA\csname faicon@check-circle\endcsname}} +\expandafter\def\csname faicon@check-circle-o\endcsname {\symbol{"F05D}} \def\faCheckCircleO {{\FA\csname faicon@check-circle-o\endcsname}} +\expandafter\def\csname faicon@check-square\endcsname {\symbol{"F14A}} \def\faCheckSquare {{\FA\csname faicon@check-square\endcsname}} +\expandafter\def\csname faicon@check-square-o\endcsname {\symbol{"F046}} \def\faCheckSquareO {{\FA\csname faicon@check-square-o\endcsname}} +\expandafter\def\csname faicon@chevron-circle-down\endcsname {\symbol{"F13A}} \def\faChevronCircleDown {{\FA\csname faicon@chevron-circle-down\endcsname}} +\expandafter\def\csname faicon@chevron-circle-left\endcsname {\symbol{"F137}} \def\faChevronCircleLeft {{\FA\csname faicon@chevron-circle-left\endcsname}} +\expandafter\def\csname faicon@chevron-circle-right\endcsname {\symbol{"F138}} \def\faChevronCircleRight {{\FA\csname faicon@chevron-circle-right\endcsname}} +\expandafter\def\csname faicon@chevron-circle-up\endcsname {\symbol{"F139}} \def\faChevronCircleUp {{\FA\csname faicon@chevron-circle-up\endcsname}} +\expandafter\def\csname faicon@chevron-down\endcsname {\symbol{"F078}} \def\faChevronDown {{\FA\csname faicon@chevron-down\endcsname}} +\expandafter\def\csname faicon@chevron-left\endcsname {\symbol{"F053}} \def\faChevronLeft {{\FA\csname faicon@chevron-left\endcsname}} +\expandafter\def\csname faicon@chevron-right\endcsname {\symbol{"F054}} \def\faChevronRight {{\FA\csname faicon@chevron-right\endcsname}} +\expandafter\def\csname faicon@chevron-up\endcsname {\symbol{"F077}} \def\faChevronUp {{\FA\csname faicon@chevron-up\endcsname}} +\expandafter\def\csname faicon@child\endcsname {\symbol{"F1AE}} \def\faChild {{\FA\csname faicon@child\endcsname}} +\expandafter\def\csname faicon@chrome\endcsname {\symbol{"F268}} \def\faChrome {{\FA\csname faicon@chrome\endcsname}} +\expandafter\def\csname faicon@circle\endcsname {\symbol{"F111}} \def\faCircle {{\FA\csname faicon@circle\endcsname}} +\expandafter\def\csname faicon@circle-o\endcsname {\symbol{"F10C}} \def\faCircleO {{\FA\csname faicon@circle-o\endcsname}} +\expandafter\def\csname faicon@circle-o-notch\endcsname {\symbol{"F1CE}} \def\faCircleONotch {{\FA\csname faicon@circle-o-notch\endcsname}} +\expandafter\def\csname faicon@circle-thin\endcsname {\symbol{"F1DB}} \def\faCircleThin {{\FA\csname faicon@circle-thin\endcsname}} +\expandafter\def\csname faicon@clipboard\endcsname {\symbol{"F0EA}} \def\faClipboard {{\FA\csname faicon@clipboard\endcsname}} +\expandafter\def\csname faicon@clock-o\endcsname {\symbol{"F017}} \def\faClockO {{\FA\csname faicon@clock-o\endcsname}} +\expandafter\def\csname faicon@clone\endcsname {\symbol{"F24D}} \def\faClone {{\FA\csname faicon@clone\endcsname}} +\expandafter\def\csname faicon@close\endcsname {\symbol{"F00D}} \def\faClose {{\FA\csname faicon@close\endcsname}} +\expandafter\def\csname faicon@cloud\endcsname {\symbol{"F0C2}} \def\faCloud {{\FA\csname faicon@cloud\endcsname}} +\expandafter\def\csname faicon@cloud-download\endcsname {\symbol{"F0ED}} \def\faCloudDownload {{\FA\csname faicon@cloud-download\endcsname}} +\expandafter\def\csname faicon@cloud-upload\endcsname {\symbol{"F0EE}} \def\faCloudUpload {{\FA\csname faicon@cloud-upload\endcsname}} +\expandafter\def\csname faicon@cny\endcsname {\symbol{"F157}} \def\faCny {{\FA\csname faicon@cny\endcsname}} +\expandafter\def\csname faicon@code\endcsname {\symbol{"F121}} \def\faCode {{\FA\csname faicon@code\endcsname}} +\expandafter\def\csname faicon@code-fork\endcsname {\symbol{"F126}} \def\faCodeFork {{\FA\csname faicon@code-fork\endcsname}} +\expandafter\def\csname faicon@codepen\endcsname {\symbol{"F1CB}} \def\faCodepen {{\FA\csname faicon@codepen\endcsname}} +\expandafter\def\csname faicon@coffee\endcsname {\symbol{"F0F4}} \def\faCoffee {{\FA\csname faicon@coffee\endcsname}} +\expandafter\def\csname faicon@cog\endcsname {\symbol{"F013}} \def\faCog {{\FA\csname faicon@cog\endcsname}} +\expandafter\def\csname faicon@cogs\endcsname {\symbol{"F085}} \def\faCogs {{\FA\csname faicon@cogs\endcsname}} +\expandafter\def\csname faicon@columns\endcsname {\symbol{"F0DB}} \def\faColumns {{\FA\csname faicon@columns\endcsname}} +\expandafter\def\csname faicon@comment\endcsname {\symbol{"F075}} \def\faComment {{\FA\csname faicon@comment\endcsname}} +\expandafter\def\csname faicon@comment-o\endcsname {\symbol{"F0E5}} \def\faCommentO {{\FA\csname faicon@comment-o\endcsname}} +\expandafter\def\csname faicon@commenting\endcsname {\symbol{"F27A}} \def\faCommenting {{\FA\csname faicon@commenting\endcsname}} +\expandafter\def\csname faicon@commenting-o\endcsname {\symbol{"F27B}} \def\faCommentingO {{\FA\csname faicon@commenting-o\endcsname}} +\expandafter\def\csname faicon@comments\endcsname {\symbol{"F086}} \def\faComments {{\FA\csname faicon@comments\endcsname}} +\expandafter\def\csname faicon@comments-o\endcsname {\symbol{"F0E6}} \def\faCommentsO {{\FA\csname faicon@comments-o\endcsname}} +\expandafter\def\csname faicon@compass\endcsname {\symbol{"F14E}} \def\faCompass {{\FA\csname faicon@compass\endcsname}} +\expandafter\def\csname faicon@compress\endcsname {\symbol{"F066}} \def\faCompress {{\FA\csname faicon@compress\endcsname}} +\expandafter\def\csname faicon@connectdevelop\endcsname {\symbol{"F20E}} \def\faConnectdevelop {{\FA\csname faicon@connectdevelop\endcsname}} +\expandafter\def\csname faicon@contao\endcsname {\symbol{"F26D}} \def\faContao {{\FA\csname faicon@contao\endcsname}} +\expandafter\def\csname faicon@copy\endcsname {\symbol{"F0C5}} \def\faCopy {{\FA\csname faicon@copy\endcsname}} +\expandafter\def\csname faicon@copyright\endcsname {\symbol{"F1F9}} \def\faCopyright {{\FA\csname faicon@copyright\endcsname}} +\expandafter\def\csname faicon@creative-commons\endcsname {\symbol{"F25E}} \def\faCreativeCommons {{\FA\csname faicon@creative-commons\endcsname}} +\expandafter\def\csname faicon@credit-card\endcsname {\symbol{"F09D}} \def\faCreditCard {{\FA\csname faicon@credit-card\endcsname}} +\expandafter\def\csname faicon@crop\endcsname {\symbol{"F125}} \def\faCrop {{\FA\csname faicon@crop\endcsname}} +\expandafter\def\csname faicon@crosshairs\endcsname {\symbol{"F05B}} \def\faCrosshairs {{\FA\csname faicon@crosshairs\endcsname}} +\expandafter\def\csname faicon@cube\endcsname {\symbol{"F1B2}} \def\faCube {{\FA\csname faicon@cube\endcsname}} +\expandafter\def\csname faicon@cubes\endcsname {\symbol{"F1B3}} \def\faCubes {{\FA\csname faicon@cubes\endcsname}} +\expandafter\def\csname faicon@cut\endcsname {\symbol{"F0C4}} \def\faCut {{\FA\csname faicon@cut\endcsname}} +\expandafter\def\csname faicon@cutlery\endcsname {\symbol{"F0F5}} \def\faCutlery {{\FA\csname faicon@cutlery\endcsname}} +\expandafter\def\csname faicon@dashboard\endcsname {\symbol{"F0E4}} \def\faDashboard {{\FA\csname faicon@dashboard\endcsname}} +\expandafter\def\csname faicon@dashcube\endcsname {\symbol{"F210}} \def\faDashcube {{\FA\csname faicon@dashcube\endcsname}} +\expandafter\def\csname faicon@database\endcsname {\symbol{"F1C0}} \def\faDatabase {{\FA\csname faicon@database\endcsname}} +\expandafter\def\csname faicon@dedent\endcsname {\symbol{"F03B}} \def\faDedent {{\FA\csname faicon@dedent\endcsname}} +\expandafter\def\csname faicon@delicious\endcsname {\symbol{"F1A5}} \def\faDelicious {{\FA\csname faicon@delicious\endcsname}} +\expandafter\def\csname faicon@desktop\endcsname {\symbol{"F108}} \def\faDesktop {{\FA\csname faicon@desktop\endcsname}} +\expandafter\def\csname faicon@deviantart\endcsname {\symbol{"F1BD}} \def\faDeviantart {{\FA\csname faicon@deviantart\endcsname}} +\expandafter\def\csname faicon@diamond\endcsname {\symbol{"F219}} \def\faDiamond {{\FA\csname faicon@diamond\endcsname}} +\expandafter\def\csname faicon@digg\endcsname {\symbol{"F1A6}} \def\faDigg {{\FA\csname faicon@digg\endcsname}} +\expandafter\def\csname faicon@dollar\endcsname {\symbol{"F155}} \def\faDollar {{\FA\csname faicon@dollar\endcsname}} +\expandafter\def\csname faicon@dot-circle-o\endcsname {\symbol{"F192}} \def\faDotCircleO {{\FA\csname faicon@dot-circle-o\endcsname}} +\expandafter\def\csname faicon@download\endcsname {\symbol{"F019}} \def\faDownload {{\FA\csname faicon@download\endcsname}} +\expandafter\def\csname faicon@dribbble\endcsname {\symbol{"F17D}} \def\faDribbble {{\FA\csname faicon@dribbble\endcsname}} +\expandafter\def\csname faicon@dropbox\endcsname {\symbol{"F16B}} \def\faDropbox {{\FA\csname faicon@dropbox\endcsname}} +\expandafter\def\csname faicon@drupal\endcsname {\symbol{"F1A9}} \def\faDrupal {{\FA\csname faicon@drupal\endcsname}} +\expandafter\def\csname faicon@edit\endcsname {\symbol{"F044}} \def\faEdit {{\FA\csname faicon@edit\endcsname}} +\expandafter\def\csname faicon@eject\endcsname {\symbol{"F052}} \def\faEject {{\FA\csname faicon@eject\endcsname}} +\expandafter\def\csname faicon@ellipsis-h\endcsname {\symbol{"F141}} \def\faEllipsisH {{\FA\csname faicon@ellipsis-h\endcsname}} +\expandafter\def\csname faicon@ellipsis-v\endcsname {\symbol{"F142}} \def\faEllipsisV {{\FA\csname faicon@ellipsis-v\endcsname}} +\expandafter\def\csname faicon@empire\endcsname {\symbol{"F1D1}} \def\faEmpire {{\FA\csname faicon@empire\endcsname}} +\expandafter\def\csname faicon@envelope\endcsname {\symbol{"F0E0}} \def\faEnvelope {{\FA\csname faicon@envelope\endcsname}} +\expandafter\def\csname faicon@envelope-o\endcsname {\symbol{"F003}} \def\faEnvelopeO {{\FA\csname faicon@envelope-o\endcsname}} +\expandafter\def\csname faicon@envelope-square\endcsname {\symbol{"F199}} \def\faEnvelopeSquare {{\FA\csname faicon@envelope-square\endcsname}} +\expandafter\def\csname faicon@eraser\endcsname {\symbol{"F12D}} \def\faEraser {{\FA\csname faicon@eraser\endcsname}} +\expandafter\def\csname faicon@eur\endcsname {\symbol{"F153}} \def\faEur {{\FA\csname faicon@eur\endcsname}} +\expandafter\def\csname faicon@euro\endcsname {\symbol{"F153}} \def\faEuro {{\FA\csname faicon@euro\endcsname}} +\expandafter\def\csname faicon@exchange\endcsname {\symbol{"F0EC}} \def\faExchange {{\FA\csname faicon@exchange\endcsname}} +\expandafter\def\csname faicon@exclamation\endcsname {\symbol{"F12A}} \def\faExclamation {{\FA\csname faicon@exclamation\endcsname}} +\expandafter\def\csname faicon@exclamation-circle\endcsname {\symbol{"F06A}} \def\faExclamationCircle {{\FA\csname faicon@exclamation-circle\endcsname}} +\expandafter\def\csname faicon@exclamation-triangle\endcsname {\symbol{"F071}} \def\faExclamationTriangle {{\FA\csname faicon@exclamation-triangle\endcsname}} +\expandafter\def\csname faicon@expand\endcsname {\symbol{"F065}} \def\faExpand {{\FA\csname faicon@expand\endcsname}} +\expandafter\def\csname faicon@expeditedssl\endcsname {\symbol{"F23E}} \def\faExpeditedssl {{\FA\csname faicon@expeditedssl\endcsname}} +\expandafter\def\csname faicon@external-link\endcsname {\symbol{"F08E}} \def\faExternalLink {{\FA\csname faicon@external-link\endcsname}} +\expandafter\def\csname faicon@external-link-square\endcsname {\symbol{"F14C}} \def\faExternalLinkSquare {{\FA\csname faicon@external-link-square\endcsname}} +\expandafter\def\csname faicon@eye\endcsname {\symbol{"F06E}} \def\faEye {{\FA\csname faicon@eye\endcsname}} +\expandafter\def\csname faicon@eye-slash\endcsname {\symbol{"F070}} \def\faEyeSlash {{\FA\csname faicon@eye-slash\endcsname}} +\expandafter\def\csname faicon@eyedropper\endcsname {\symbol{"F1FB}} \def\faEyedropper {{\FA\csname faicon@eyedropper\endcsname}} +\expandafter\def\csname faicon@facebook\endcsname {\symbol{"F09A}} \def\faFacebook {{\FA\csname faicon@facebook\endcsname}} +\expandafter\def\csname faicon@facebook-f\endcsname {\symbol{"F09A}} \def\faFacebookF {{\FA\csname faicon@facebook-f\endcsname}} +\expandafter\def\csname faicon@facebook-official\endcsname {\symbol{"F230}} \def\faFacebookOfficial {{\FA\csname faicon@facebook-official\endcsname}} +\expandafter\def\csname faicon@facebook-square\endcsname {\symbol{"F082}} \def\faFacebookSquare {{\FA\csname faicon@facebook-square\endcsname}} +\expandafter\def\csname faicon@fast-backward\endcsname {\symbol{"F049}} \def\faFastBackward {{\FA\csname faicon@fast-backward\endcsname}} +\expandafter\def\csname faicon@fast-forward\endcsname {\symbol{"F050}} \def\faFastForward {{\FA\csname faicon@fast-forward\endcsname}} +\expandafter\def\csname faicon@fax\endcsname {\symbol{"F1AC}} \def\faFax {{\FA\csname faicon@fax\endcsname}} +\expandafter\def\csname faicon@feed\endcsname {\symbol{"F09E}} \def\faFeed {{\FA\csname faicon@feed\endcsname}} +\expandafter\def\csname faicon@female\endcsname {\symbol{"F182}} \def\faFemale {{\FA\csname faicon@female\endcsname}} +\expandafter\def\csname faicon@fighter-jet\endcsname {\symbol{"F0FB}} \def\faFighterJet {{\FA\csname faicon@fighter-jet\endcsname}} +\expandafter\def\csname faicon@file\endcsname {\symbol{"F15B}} \def\faFile {{\FA\csname faicon@file\endcsname}} +\expandafter\def\csname faicon@file-archive-o\endcsname {\symbol{"F1C6}} \def\faFileArchiveO {{\FA\csname faicon@file-archive-o\endcsname}} +\expandafter\def\csname faicon@file-audio-o\endcsname {\symbol{"F1C7}} \def\faFileAudioO {{\FA\csname faicon@file-audio-o\endcsname}} +\expandafter\def\csname faicon@file-code-o\endcsname {\symbol{"F1C9}} \def\faFileCodeO {{\FA\csname faicon@file-code-o\endcsname}} +\expandafter\def\csname faicon@file-excel-o\endcsname {\symbol{"F1C3}} \def\faFileExcelO {{\FA\csname faicon@file-excel-o\endcsname}} +\expandafter\def\csname faicon@file-image-o\endcsname {\symbol{"F1C5}} \def\faFileImageO {{\FA\csname faicon@file-image-o\endcsname}} +\expandafter\def\csname faicon@file-movie-o\endcsname {\symbol{"F1C8}} \def\faFileMovieO {{\FA\csname faicon@file-movie-o\endcsname}} +\expandafter\def\csname faicon@file-o\endcsname {\symbol{"F016}} \def\faFileO {{\FA\csname faicon@file-o\endcsname}} +\expandafter\def\csname faicon@file-pdf-o\endcsname {\symbol{"F1C1}} \def\faFilePdfO {{\FA\csname faicon@file-pdf-o\endcsname}} +\expandafter\def\csname faicon@file-photo-o\endcsname {\symbol{"F1C5}} \def\faFilePhotoO {{\FA\csname faicon@file-photo-o\endcsname}} +\expandafter\def\csname faicon@file-picture-o\endcsname {\symbol{"F1C5}} \def\faFilePictureO {{\FA\csname faicon@file-picture-o\endcsname}} +\expandafter\def\csname faicon@file-powerpoint-o\endcsname {\symbol{"F1C4}} \def\faFilePowerpointO {{\FA\csname faicon@file-powerpoint-o\endcsname}} +\expandafter\def\csname faicon@file-sound-o\endcsname {\symbol{"F1C7}} \def\faFileSoundO {{\FA\csname faicon@file-sound-o\endcsname}} +\expandafter\def\csname faicon@file-text\endcsname {\symbol{"F15C}} \def\faFileText {{\FA\csname faicon@file-text\endcsname}} +\expandafter\def\csname faicon@file-text-o\endcsname {\symbol{"F0F6}} \def\faFileTextO {{\FA\csname faicon@file-text-o\endcsname}} +\expandafter\def\csname faicon@file-video-o\endcsname {\symbol{"F1C8}} \def\faFileVideoO {{\FA\csname faicon@file-video-o\endcsname}} +\expandafter\def\csname faicon@file-word-o\endcsname {\symbol{"F1C2}} \def\faFileWordO {{\FA\csname faicon@file-word-o\endcsname}} +\expandafter\def\csname faicon@file-zip-o\endcsname {\symbol{"F1C6}} \def\faFileZipO {{\FA\csname faicon@file-zip-o\endcsname}} +\expandafter\def\csname faicon@files-o\endcsname {\symbol{"F0C5}} \def\faFilesO {{\FA\csname faicon@files-o\endcsname}} +\expandafter\def\csname faicon@film\endcsname {\symbol{"F008}} \def\faFilm {{\FA\csname faicon@film\endcsname}} +\expandafter\def\csname faicon@filter\endcsname {\symbol{"F0B0}} \def\faFilter {{\FA\csname faicon@filter\endcsname}} +\expandafter\def\csname faicon@fire\endcsname {\symbol{"F06D}} \def\faFire {{\FA\csname faicon@fire\endcsname}} +\expandafter\def\csname faicon@fire-extinguisher\endcsname {\symbol{"F134}} \def\faFireExtinguisher {{\FA\csname faicon@fire-extinguisher\endcsname}} +\expandafter\def\csname faicon@firefox\endcsname {\symbol{"F269}} \def\faFirefox {{\FA\csname faicon@firefox\endcsname}} +\expandafter\def\csname faicon@flag\endcsname {\symbol{"F024}} \def\faFlag {{\FA\csname faicon@flag\endcsname}} +\expandafter\def\csname faicon@flag-checkered\endcsname {\symbol{"F11E}} \def\faFlagCheckered {{\FA\csname faicon@flag-checkered\endcsname}} +\expandafter\def\csname faicon@flag-o\endcsname {\symbol{"F11D}} \def\faFlagO {{\FA\csname faicon@flag-o\endcsname}} +\expandafter\def\csname faicon@flash\endcsname {\symbol{"F0E7}} \def\faFlash {{\FA\csname faicon@flash\endcsname}} +\expandafter\def\csname faicon@flask\endcsname {\symbol{"F0C3}} \def\faFlask {{\FA\csname faicon@flask\endcsname}} +\expandafter\def\csname faicon@flickr\endcsname {\symbol{"F16E}} \def\faFlickr {{\FA\csname faicon@flickr\endcsname}} +\expandafter\def\csname faicon@floppy-o\endcsname {\symbol{"F0C7}} \def\faFloppyO {{\FA\csname faicon@floppy-o\endcsname}} +\expandafter\def\csname faicon@folder\endcsname {\symbol{"F07B}} \def\faFolder {{\FA\csname faicon@folder\endcsname}} +\expandafter\def\csname faicon@folder-o\endcsname {\symbol{"F114}} \def\faFolderO {{\FA\csname faicon@folder-o\endcsname}} +\expandafter\def\csname faicon@folder-open\endcsname {\symbol{"F07C}} \def\faFolderOpen {{\FA\csname faicon@folder-open\endcsname}} +\expandafter\def\csname faicon@folder-open-o\endcsname {\symbol{"F115}} \def\faFolderOpenO {{\FA\csname faicon@folder-open-o\endcsname}} +\expandafter\def\csname faicon@font\endcsname {\symbol{"F031}} \def\faFont {{\FA\csname faicon@font\endcsname}} +\expandafter\def\csname faicon@fonticons\endcsname {\symbol{"F280}} \def\faFonticons {{\FA\csname faicon@fonticons\endcsname}} +\expandafter\def\csname faicon@forumbee\endcsname {\symbol{"F211}} \def\faForumbee {{\FA\csname faicon@forumbee\endcsname}} +\expandafter\def\csname faicon@forward\endcsname {\symbol{"F04E}} \def\faForward {{\FA\csname faicon@forward\endcsname}} +\expandafter\def\csname faicon@foursquare\endcsname {\symbol{"F180}} \def\faFoursquare {{\FA\csname faicon@foursquare\endcsname}} +\expandafter\def\csname faicon@frown-o\endcsname {\symbol{"F119}} \def\faFrownO {{\FA\csname faicon@frown-o\endcsname}} +\expandafter\def\csname faicon@futbol-o\endcsname {\symbol{"F1E3}} \def\faFutbolO {{\FA\csname faicon@futbol-o\endcsname}} +\expandafter\def\csname faicon@gamepad\endcsname {\symbol{"F11B}} \def\faGamepad {{\FA\csname faicon@gamepad\endcsname}} +\expandafter\def\csname faicon@gavel\endcsname {\symbol{"F0E3}} \def\faGavel {{\FA\csname faicon@gavel\endcsname}} +\expandafter\def\csname faicon@gbp\endcsname {\symbol{"F154}} \def\faGbp {{\FA\csname faicon@gbp\endcsname}} +\expandafter\def\csname faicon@ge\endcsname {\symbol{"F1D1}} \def\faGe {{\FA\csname faicon@ge\endcsname}} +\expandafter\def\csname faicon@gear\endcsname {\symbol{"F013}} \def\faGear {{\FA\csname faicon@gear\endcsname}} +\expandafter\def\csname faicon@gears\endcsname {\symbol{"F085}} \def\faGears {{\FA\csname faicon@gears\endcsname}} +\expandafter\def\csname faicon@genderless\endcsname {\symbol{"F22D}} \def\faGenderless {{\FA\csname faicon@genderless\endcsname}} +\expandafter\def\csname faicon@get-pocket\endcsname {\symbol{"F265}} \def\faGetPocket {{\FA\csname faicon@get-pocket\endcsname}} +\expandafter\def\csname faicon@gg\endcsname {\symbol{"F260}} \def\faGg {{\FA\csname faicon@gg\endcsname}} +\expandafter\def\csname faicon@gg-circle\endcsname {\symbol{"F261}} \def\faGgCircle {{\FA\csname faicon@gg-circle\endcsname}} +\expandafter\def\csname faicon@gift\endcsname {\symbol{"F06B}} \def\faGift {{\FA\csname faicon@gift\endcsname}} +\expandafter\def\csname faicon@git\endcsname {\symbol{"F1D3}} \def\faGit {{\FA\csname faicon@git\endcsname}} +\expandafter\def\csname faicon@git-square\endcsname {\symbol{"F1D2}} \def\faGitSquare {{\FA\csname faicon@git-square\endcsname}} +\expandafter\def\csname faicon@github\endcsname {\symbol{"F09B}} \def\faGithub {{\FA\csname faicon@github\endcsname}} +\expandafter\def\csname faicon@github-alt\endcsname {\symbol{"F113}} \def\faGithubAlt {{\FA\csname faicon@github-alt\endcsname}} +\expandafter\def\csname faicon@github-square\endcsname {\symbol{"F092}} \def\faGithubSquare {{\FA\csname faicon@github-square\endcsname}} +\expandafter\def\csname faicon@gittip\endcsname {\symbol{"F184}} \def\faGittip {{\FA\csname faicon@gittip\endcsname}} +\expandafter\def\csname faicon@glass\endcsname {\symbol{"F000}} \def\faGlass {{\FA\csname faicon@glass\endcsname}} +\expandafter\def\csname faicon@globe\endcsname {\symbol{"F0AC}} \def\faGlobe {{\FA\csname faicon@globe\endcsname}} +\expandafter\def\csname faicon@google\endcsname {\symbol{"F1A0}} \def\faGoogle {{\FA\csname faicon@google\endcsname}} +\expandafter\def\csname faicon@google-plus\endcsname {\symbol{"F0D5}} \def\faGooglePlus {{\FA\csname faicon@google-plus\endcsname}} +\expandafter\def\csname faicon@google-plus-square\endcsname {\symbol{"F0D4}} \def\faGooglePlusSquare {{\FA\csname faicon@google-plus-square\endcsname}} +\expandafter\def\csname faicon@google-wallet\endcsname {\symbol{"F1EE}} \def\faGoogleWallet {{\FA\csname faicon@google-wallet\endcsname}} +\expandafter\def\csname faicon@graduation-cap\endcsname {\symbol{"F19D}} \def\faGraduationCap {{\FA\csname faicon@graduation-cap\endcsname}} +\expandafter\def\csname faicon@gratipay\endcsname {\symbol{"F184}} \def\faGratipay {{\FA\csname faicon@gratipay\endcsname}} +\expandafter\def\csname faicon@group\endcsname {\symbol{"F0C0}} \def\faGroup {{\FA\csname faicon@group\endcsname}} +\expandafter\def\csname faicon@h-square\endcsname {\symbol{"F0FD}} \def\faHSquare {{\FA\csname faicon@h-square\endcsname}} +\expandafter\def\csname faicon@hacker-news\endcsname {\symbol{"F1D4}} \def\faHackerNews {{\FA\csname faicon@hacker-news\endcsname}} +\expandafter\def\csname faicon@hand-grab-o\endcsname {\symbol{"F255}} \def\faHandGrabO {{\FA\csname faicon@hand-grab-o\endcsname}} +\expandafter\def\csname faicon@hand-lizard-o\endcsname {\symbol{"F258}} \def\faHandLizardO {{\FA\csname faicon@hand-lizard-o\endcsname}} +\expandafter\def\csname faicon@hand-o-down\endcsname {\symbol{"F0A7}} \def\faHandODown {{\FA\csname faicon@hand-o-down\endcsname}} +\expandafter\def\csname faicon@hand-o-left\endcsname {\symbol{"F0A5}} \def\faHandOLeft {{\FA\csname faicon@hand-o-left\endcsname}} +\expandafter\def\csname faicon@hand-o-right\endcsname {\symbol{"F0A4}} \def\faHandORight {{\FA\csname faicon@hand-o-right\endcsname}} +\expandafter\def\csname faicon@hand-o-up\endcsname {\symbol{"F0A6}} \def\faHandOUp {{\FA\csname faicon@hand-o-up\endcsname}} +\expandafter\def\csname faicon@hand-paper-o\endcsname {\symbol{"F256}} \def\faHandPaperO {{\FA\csname faicon@hand-paper-o\endcsname}} +\expandafter\def\csname faicon@hand-peace-o\endcsname {\symbol{"F25B}} \def\faHandPeaceO {{\FA\csname faicon@hand-peace-o\endcsname}} +\expandafter\def\csname faicon@hand-pointer-o\endcsname {\symbol{"F25A}} \def\faHandPointerO {{\FA\csname faicon@hand-pointer-o\endcsname}} +\expandafter\def\csname faicon@hand-rock-o\endcsname {\symbol{"F255}} \def\faHandRockO {{\FA\csname faicon@hand-rock-o\endcsname}} +\expandafter\def\csname faicon@hand-scissors-o\endcsname {\symbol{"F257}} \def\faHandScissorsO {{\FA\csname faicon@hand-scissors-o\endcsname}} +\expandafter\def\csname faicon@hand-spock-o\endcsname {\symbol{"F259}} \def\faHandSpockO {{\FA\csname faicon@hand-spock-o\endcsname}} +\expandafter\def\csname faicon@hand-stop-o\endcsname {\symbol{"F256}} \def\faHandStopO {{\FA\csname faicon@hand-stop-o\endcsname}} +\expandafter\def\csname faicon@hdd-o\endcsname {\symbol{"F0A0}} \def\faHddO {{\FA\csname faicon@hdd-o\endcsname}} +\expandafter\def\csname faicon@header\endcsname {\symbol{"F1DC}} \def\faHeader {{\FA\csname faicon@header\endcsname}} +\expandafter\def\csname faicon@headphones\endcsname {\symbol{"F025}} \def\faHeadphones {{\FA\csname faicon@headphones\endcsname}} +\expandafter\def\csname faicon@heart\endcsname {\symbol{"F004}} \def\faHeart {{\FA\csname faicon@heart\endcsname}} +\expandafter\def\csname faicon@heart-o\endcsname {\symbol{"F08A}} \def\faHeartO {{\FA\csname faicon@heart-o\endcsname}} +\expandafter\def\csname faicon@heartbeat\endcsname {\symbol{"F21E}} \def\faHeartbeat {{\FA\csname faicon@heartbeat\endcsname}} +\expandafter\def\csname faicon@history\endcsname {\symbol{"F1DA}} \def\faHistory {{\FA\csname faicon@history\endcsname}} +\expandafter\def\csname faicon@home\endcsname {\symbol{"F015}} \def\faHome {{\FA\csname faicon@home\endcsname}} +\expandafter\def\csname faicon@hospital-o\endcsname {\symbol{"F0F8}} \def\faHospitalO {{\FA\csname faicon@hospital-o\endcsname}} +\expandafter\def\csname faicon@hotel\endcsname {\symbol{"F236}} \def\faHotel {{\FA\csname faicon@hotel\endcsname}} +\expandafter\def\csname faicon@hourglass\endcsname {\symbol{"F254}} \def\faHourglass {{\FA\csname faicon@hourglass\endcsname}} +\expandafter\def\csname faicon@hourglass-end\endcsname {\symbol{"F253}} \def\faHourglassEnd {{\FA\csname faicon@hourglass-end\endcsname}} +\expandafter\def\csname faicon@hourglass-half\endcsname {\symbol{"F252}} \def\faHourglassHalf {{\FA\csname faicon@hourglass-half\endcsname}} +\expandafter\def\csname faicon@hourglass-o\endcsname {\symbol{"F250}} \def\faHourglassO {{\FA\csname faicon@hourglass-o\endcsname}} +\expandafter\def\csname faicon@hourglass-start\endcsname {\symbol{"F251}} \def\faHourglassStart {{\FA\csname faicon@hourglass-start\endcsname}} +\expandafter\def\csname faicon@houzz\endcsname {\symbol{"F27C}} \def\faHouzz {{\FA\csname faicon@houzz\endcsname}} +\expandafter\def\csname faicon@i-cursor\endcsname {\symbol{"F246}} \def\faICursor {{\FA\csname faicon@i-cursor\endcsname}} +\expandafter\def\csname faicon@ils\endcsname {\symbol{"F20B}} \def\faIls {{\FA\csname faicon@ils\endcsname}} +\expandafter\def\csname faicon@image\endcsname {\symbol{"F03E}} \def\faImage {{\FA\csname faicon@image\endcsname}} +\expandafter\def\csname faicon@inbox\endcsname {\symbol{"F01C}} \def\faInbox {{\FA\csname faicon@inbox\endcsname}} +\expandafter\def\csname faicon@indent\endcsname {\symbol{"F03C}} \def\faIndent {{\FA\csname faicon@indent\endcsname}} +\expandafter\def\csname faicon@industry\endcsname {\symbol{"F275}} \def\faIndustry {{\FA\csname faicon@industry\endcsname}} +\expandafter\def\csname faicon@info\endcsname {\symbol{"F129}} \def\faInfo {{\FA\csname faicon@info\endcsname}} +\expandafter\def\csname faicon@info-circle\endcsname {\symbol{"F05A}} \def\faInfoCircle {{\FA\csname faicon@info-circle\endcsname}} +\expandafter\def\csname faicon@inr\endcsname {\symbol{"F156}} \def\faInr {{\FA\csname faicon@inr\endcsname}} +\expandafter\def\csname faicon@instagram\endcsname {\symbol{"F16D}} \def\faInstagram {{\FA\csname faicon@instagram\endcsname}} +\expandafter\def\csname faicon@institution\endcsname {\symbol{"F19C}} \def\faInstitution {{\FA\csname faicon@institution\endcsname}} +\expandafter\def\csname faicon@internet-explorer\endcsname {\symbol{"F26B}} \def\faInternetExplorer {{\FA\csname faicon@internet-explorer\endcsname}} +\expandafter\def\csname faicon@intersex\endcsname {\symbol{"F224}} \def\faIntersex {{\FA\csname faicon@intersex\endcsname}} +\expandafter\def\csname faicon@ioxhost\endcsname {\symbol{"F208}} \def\faIoxhost {{\FA\csname faicon@ioxhost\endcsname}} +\expandafter\def\csname faicon@italic\endcsname {\symbol{"F033}} \def\faItalic {{\FA\csname faicon@italic\endcsname}} +\expandafter\def\csname faicon@joomla\endcsname {\symbol{"F1AA}} \def\faJoomla {{\FA\csname faicon@joomla\endcsname}} +\expandafter\def\csname faicon@jpy\endcsname {\symbol{"F157}} \def\faJpy {{\FA\csname faicon@jpy\endcsname}} +\expandafter\def\csname faicon@jsfiddle\endcsname {\symbol{"F1CC}} \def\faJsfiddle {{\FA\csname faicon@jsfiddle\endcsname}} +\expandafter\def\csname faicon@key\endcsname {\symbol{"F084}} \def\faKey {{\FA\csname faicon@key\endcsname}} +\expandafter\def\csname faicon@keyboard-o\endcsname {\symbol{"F11C}} \def\faKeyboardO {{\FA\csname faicon@keyboard-o\endcsname}} +\expandafter\def\csname faicon@krw\endcsname {\symbol{"F159}} \def\faKrw {{\FA\csname faicon@krw\endcsname}} +\expandafter\def\csname faicon@language\endcsname {\symbol{"F1AB}} \def\faLanguage {{\FA\csname faicon@language\endcsname}} +\expandafter\def\csname faicon@laptop\endcsname {\symbol{"F109}} \def\faLaptop {{\FA\csname faicon@laptop\endcsname}} +\expandafter\def\csname faicon@lastfm\endcsname {\symbol{"F202}} \def\faLastfm {{\FA\csname faicon@lastfm\endcsname}} +\expandafter\def\csname faicon@lastfm-square\endcsname {\symbol{"F203}} \def\faLastfmSquare {{\FA\csname faicon@lastfm-square\endcsname}} +\expandafter\def\csname faicon@leaf\endcsname {\symbol{"F06C}} \def\faLeaf {{\FA\csname faicon@leaf\endcsname}} +\expandafter\def\csname faicon@leanpub\endcsname {\symbol{"F212}} \def\faLeanpub {{\FA\csname faicon@leanpub\endcsname}} +\expandafter\def\csname faicon@legal\endcsname {\symbol{"F0E3}} \def\faLegal {{\FA\csname faicon@legal\endcsname}} +\expandafter\def\csname faicon@lemon-o\endcsname {\symbol{"F094}} \def\faLemonO {{\FA\csname faicon@lemon-o\endcsname}} +\expandafter\def\csname faicon@level-down\endcsname {\symbol{"F149}} \def\faLevelDown {{\FA\csname faicon@level-down\endcsname}} +\expandafter\def\csname faicon@level-up\endcsname {\symbol{"F148}} \def\faLevelUp {{\FA\csname faicon@level-up\endcsname}} +\expandafter\def\csname faicon@life-bouy\endcsname {\symbol{"F1CD}} \def\faLifeBouy {{\FA\csname faicon@life-bouy\endcsname}} +\expandafter\def\csname faicon@life-buoy\endcsname {\symbol{"F1CD}} \def\faLifeBuoy {{\FA\csname faicon@life-buoy\endcsname}} +\expandafter\def\csname faicon@life-ring\endcsname {\symbol{"F1CD}} \def\faLifeRing {{\FA\csname faicon@life-ring\endcsname}} +\expandafter\def\csname faicon@life-saver\endcsname {\symbol{"F1CD}} \def\faLifeSaver {{\FA\csname faicon@life-saver\endcsname}} +\expandafter\def\csname faicon@lightbulb-o\endcsname {\symbol{"F0EB}} \def\faLightbulbO {{\FA\csname faicon@lightbulb-o\endcsname}} +\expandafter\def\csname faicon@line-chart\endcsname {\symbol{"F201}} \def\faLineChart {{\FA\csname faicon@line-chart\endcsname}} +\expandafter\def\csname faicon@link\endcsname {\symbol{"F0C1}} \def\faLink {{\FA\csname faicon@link\endcsname}} +\expandafter\def\csname faicon@linkedin\endcsname {\symbol{"F0E1}} \def\faLinkedin {{\FA\csname faicon@linkedin\endcsname}} +\expandafter\def\csname faicon@linkedin-square\endcsname {\symbol{"F08C}} \def\faLinkedinSquare {{\FA\csname faicon@linkedin-square\endcsname}} +\expandafter\def\csname faicon@linux\endcsname {\symbol{"F17C}} \def\faLinux {{\FA\csname faicon@linux\endcsname}} +\expandafter\def\csname faicon@list\endcsname {\symbol{"F03A}} \def\faList {{\FA\csname faicon@list\endcsname}} +\expandafter\def\csname faicon@list-alt\endcsname {\symbol{"F022}} \def\faListAlt {{\FA\csname faicon@list-alt\endcsname}} +\expandafter\def\csname faicon@list-ol\endcsname {\symbol{"F0CB}} \def\faListOl {{\FA\csname faicon@list-ol\endcsname}} +\expandafter\def\csname faicon@list-ul\endcsname {\symbol{"F0CA}} \def\faListUl {{\FA\csname faicon@list-ul\endcsname}} +\expandafter\def\csname faicon@location-arrow\endcsname {\symbol{"F124}} \def\faLocationArrow {{\FA\csname faicon@location-arrow\endcsname}} +\expandafter\def\csname faicon@lock\endcsname {\symbol{"F023}} \def\faLock {{\FA\csname faicon@lock\endcsname}} +\expandafter\def\csname faicon@long-arrow-down\endcsname {\symbol{"F175}} \def\faLongArrowDown {{\FA\csname faicon@long-arrow-down\endcsname}} +\expandafter\def\csname faicon@long-arrow-left\endcsname {\symbol{"F177}} \def\faLongArrowLeft {{\FA\csname faicon@long-arrow-left\endcsname}} +\expandafter\def\csname faicon@long-arrow-right\endcsname {\symbol{"F178}} \def\faLongArrowRight {{\FA\csname faicon@long-arrow-right\endcsname}} +\expandafter\def\csname faicon@long-arrow-up\endcsname {\symbol{"F176}} \def\faLongArrowUp {{\FA\csname faicon@long-arrow-up\endcsname}} +\expandafter\def\csname faicon@magic\endcsname {\symbol{"F0D0}} \def\faMagic {{\FA\csname faicon@magic\endcsname}} +\expandafter\def\csname faicon@magnet\endcsname {\symbol{"F076}} \def\faMagnet {{\FA\csname faicon@magnet\endcsname}} +\expandafter\def\csname faicon@mail-forward\endcsname {\symbol{"F064}} \def\faMailForward {{\FA\csname faicon@mail-forward\endcsname}} +\expandafter\def\csname faicon@mail-reply\endcsname {\symbol{"F112}} \def\faMailReply {{\FA\csname faicon@mail-reply\endcsname}} +\expandafter\def\csname faicon@mail-reply-all\endcsname {\symbol{"F122}} \def\faMailReplyAll {{\FA\csname faicon@mail-reply-all\endcsname}} +\expandafter\def\csname faicon@male\endcsname {\symbol{"F183}} \def\faMale {{\FA\csname faicon@male\endcsname}} +\expandafter\def\csname faicon@map\endcsname {\symbol{"F279}} \def\faMap {{\FA\csname faicon@map\endcsname}} +\expandafter\def\csname faicon@map-marker\endcsname {\symbol{"F041}} \def\faMapMarker {{\FA\csname faicon@map-marker\endcsname}} +\expandafter\def\csname faicon@map-o\endcsname {\symbol{"F278}} \def\faMapO {{\FA\csname faicon@map-o\endcsname}} +\expandafter\def\csname faicon@map-pin\endcsname {\symbol{"F276}} \def\faMapPin {{\FA\csname faicon@map-pin\endcsname}} +\expandafter\def\csname faicon@map-signs\endcsname {\symbol{"F277}} \def\faMapSigns {{\FA\csname faicon@map-signs\endcsname}} +\expandafter\def\csname faicon@mars\endcsname {\symbol{"F222}} \def\faMars {{\FA\csname faicon@mars\endcsname}} +\expandafter\def\csname faicon@mars-double\endcsname {\symbol{"F227}} \def\faMarsDouble {{\FA\csname faicon@mars-double\endcsname}} +\expandafter\def\csname faicon@mars-stroke\endcsname {\symbol{"F229}} \def\faMarsStroke {{\FA\csname faicon@mars-stroke\endcsname}} +\expandafter\def\csname faicon@mars-stroke-h\endcsname {\symbol{"F22B}} \def\faMarsStrokeH {{\FA\csname faicon@mars-stroke-h\endcsname}} +\expandafter\def\csname faicon@mars-stroke-v\endcsname {\symbol{"F22A}} \def\faMarsStrokeV {{\FA\csname faicon@mars-stroke-v\endcsname}} +\expandafter\def\csname faicon@maxcdn\endcsname {\symbol{"F136}} \def\faMaxcdn {{\FA\csname faicon@maxcdn\endcsname}} +\expandafter\def\csname faicon@meanpath\endcsname {\symbol{"F20C}} \def\faMeanpath {{\FA\csname faicon@meanpath\endcsname}} +\expandafter\def\csname faicon@medium\endcsname {\symbol{"F23A}} \def\faMedium {{\FA\csname faicon@medium\endcsname}} +\expandafter\def\csname faicon@medkit\endcsname {\symbol{"F0FA}} \def\faMedkit {{\FA\csname faicon@medkit\endcsname}} +\expandafter\def\csname faicon@meh-o\endcsname {\symbol{"F11A}} \def\faMehO {{\FA\csname faicon@meh-o\endcsname}} +\expandafter\def\csname faicon@mercury\endcsname {\symbol{"F223}} \def\faMercury {{\FA\csname faicon@mercury\endcsname}} +\expandafter\def\csname faicon@microphone\endcsname {\symbol{"F130}} \def\faMicrophone {{\FA\csname faicon@microphone\endcsname}} +\expandafter\def\csname faicon@microphone-slash\endcsname {\symbol{"F131}} \def\faMicrophoneSlash {{\FA\csname faicon@microphone-slash\endcsname}} +\expandafter\def\csname faicon@minus\endcsname {\symbol{"F068}} \def\faMinus {{\FA\csname faicon@minus\endcsname}} +\expandafter\def\csname faicon@minus-circle\endcsname {\symbol{"F056}} \def\faMinusCircle {{\FA\csname faicon@minus-circle\endcsname}} +\expandafter\def\csname faicon@minus-square\endcsname {\symbol{"F146}} \def\faMinusSquare {{\FA\csname faicon@minus-square\endcsname}} +\expandafter\def\csname faicon@minus-square-o\endcsname {\symbol{"F147}} \def\faMinusSquareO {{\FA\csname faicon@minus-square-o\endcsname}} +\expandafter\def\csname faicon@mobile\endcsname {\symbol{"F10B}} \def\faMobile {{\FA\csname faicon@mobile\endcsname}} +\expandafter\def\csname faicon@mobile-phone\endcsname {\symbol{"F10B}} \def\faMobilePhone {{\FA\csname faicon@mobile-phone\endcsname}} +\expandafter\def\csname faicon@money\endcsname {\symbol{"F0D6}} \def\faMoney {{\FA\csname faicon@money\endcsname}} +\expandafter\def\csname faicon@moon-o\endcsname {\symbol{"F186}} \def\faMoonO {{\FA\csname faicon@moon-o\endcsname}} +\expandafter\def\csname faicon@mortar-board\endcsname {\symbol{"F19D}} \def\faMortarBoard {{\FA\csname faicon@mortar-board\endcsname}} +\expandafter\def\csname faicon@motorcycle\endcsname {\symbol{"F21C}} \def\faMotorcycle {{\FA\csname faicon@motorcycle\endcsname}} +\expandafter\def\csname faicon@mouse-pointer\endcsname {\symbol{"F245}} \def\faMousePointer {{\FA\csname faicon@mouse-pointer\endcsname}} +\expandafter\def\csname faicon@music\endcsname {\symbol{"F001}} \def\faMusic {{\FA\csname faicon@music\endcsname}} +\expandafter\def\csname faicon@navicon\endcsname {\symbol{"F0C9}} \def\faNavicon {{\FA\csname faicon@navicon\endcsname}} +\expandafter\def\csname faicon@neuter\endcsname {\symbol{"F22C}} \def\faNeuter {{\FA\csname faicon@neuter\endcsname}} +\expandafter\def\csname faicon@newspaper-o\endcsname {\symbol{"F1EA}} \def\faNewspaperO {{\FA\csname faicon@newspaper-o\endcsname}} +\expandafter\def\csname faicon@object-group\endcsname {\symbol{"F247}} \def\faObjectGroup {{\FA\csname faicon@object-group\endcsname}} +\expandafter\def\csname faicon@object-ungroup\endcsname {\symbol{"F248}} \def\faObjectUngroup {{\FA\csname faicon@object-ungroup\endcsname}} +\expandafter\def\csname faicon@odnoklassniki\endcsname {\symbol{"F263}} \def\faOdnoklassniki {{\FA\csname faicon@odnoklassniki\endcsname}} +\expandafter\def\csname faicon@odnoklassniki-square\endcsname {\symbol{"F264}} \def\faOdnoklassnikiSquare {{\FA\csname faicon@odnoklassniki-square\endcsname}} +\expandafter\def\csname faicon@opencart\endcsname {\symbol{"F23D}} \def\faOpencart {{\FA\csname faicon@opencart\endcsname}} +\expandafter\def\csname faicon@openid\endcsname {\symbol{"F19B}} \def\faOpenid {{\FA\csname faicon@openid\endcsname}} +\expandafter\def\csname faicon@opera\endcsname {\symbol{"F26A}} \def\faOpera {{\FA\csname faicon@opera\endcsname}} +\expandafter\def\csname faicon@optin-monster\endcsname {\symbol{"F23C}} \def\faOptinMonster {{\FA\csname faicon@optin-monster\endcsname}} +\expandafter\def\csname faicon@outdent\endcsname {\symbol{"F03B}} \def\faOutdent {{\FA\csname faicon@outdent\endcsname}} +\expandafter\def\csname faicon@pagelines\endcsname {\symbol{"F18C}} \def\faPagelines {{\FA\csname faicon@pagelines\endcsname}} +\expandafter\def\csname faicon@paint-brush\endcsname {\symbol{"F1FC}} \def\faPaintBrush {{\FA\csname faicon@paint-brush\endcsname}} +\expandafter\def\csname faicon@paper-plane\endcsname {\symbol{"F1D8}} \def\faPaperPlane {{\FA\csname faicon@paper-plane\endcsname}} +\expandafter\def\csname faicon@paper-plane-o\endcsname {\symbol{"F1D9}} \def\faPaperPlaneO {{\FA\csname faicon@paper-plane-o\endcsname}} +\expandafter\def\csname faicon@paperclip\endcsname {\symbol{"F0C6}} \def\faPaperclip {{\FA\csname faicon@paperclip\endcsname}} +\expandafter\def\csname faicon@paragraph\endcsname {\symbol{"F1DD}} \def\faParagraph {{\FA\csname faicon@paragraph\endcsname}} +\expandafter\def\csname faicon@paste\endcsname {\symbol{"F0EA}} \def\faPaste {{\FA\csname faicon@paste\endcsname}} +\expandafter\def\csname faicon@pause\endcsname {\symbol{"F04C}} \def\faPause {{\FA\csname faicon@pause\endcsname}} +\expandafter\def\csname faicon@paw\endcsname {\symbol{"F1B0}} \def\faPaw {{\FA\csname faicon@paw\endcsname}} +\expandafter\def\csname faicon@paypal\endcsname {\symbol{"F1ED}} \def\faPaypal {{\FA\csname faicon@paypal\endcsname}} +\expandafter\def\csname faicon@pencil\endcsname {\symbol{"F040}} \def\faPencil {{\FA\csname faicon@pencil\endcsname}} +\expandafter\def\csname faicon@pencil-square\endcsname {\symbol{"F14B}} \def\faPencilSquare {{\FA\csname faicon@pencil-square\endcsname}} +\expandafter\def\csname faicon@pencil-square-o\endcsname {\symbol{"F044}} \def\faPencilSquareO {{\FA\csname faicon@pencil-square-o\endcsname}} +\expandafter\def\csname faicon@phone\endcsname {\symbol{"F095}} \def\faPhone {{\FA\csname faicon@phone\endcsname}} +\expandafter\def\csname faicon@phone-square\endcsname {\symbol{"F098}} \def\faPhoneSquare {{\FA\csname faicon@phone-square\endcsname}} +\expandafter\def\csname faicon@photo\endcsname {\symbol{"F03E}} \def\faPhoto {{\FA\csname faicon@photo\endcsname}} +\expandafter\def\csname faicon@picture-o\endcsname {\symbol{"F03E}} \def\faPictureO {{\FA\csname faicon@picture-o\endcsname}} +\expandafter\def\csname faicon@pie-chart\endcsname {\symbol{"F200}} \def\faPieChart {{\FA\csname faicon@pie-chart\endcsname}} +\expandafter\def\csname faicon@pied-piper\endcsname {\symbol{"F1A7}} \def\faPiedPiper {{\FA\csname faicon@pied-piper\endcsname}} +\expandafter\def\csname faicon@pied-piper-alt\endcsname {\symbol{"F1A8}} \def\faPiedPiperAlt {{\FA\csname faicon@pied-piper-alt\endcsname}} +\expandafter\def\csname faicon@pinterest\endcsname {\symbol{"F0D2}} \def\faPinterest {{\FA\csname faicon@pinterest\endcsname}} +\expandafter\def\csname faicon@pinterest-p\endcsname {\symbol{"F231}} \def\faPinterestP {{\FA\csname faicon@pinterest-p\endcsname}} +\expandafter\def\csname faicon@pinterest-square\endcsname {\symbol{"F0D3}} \def\faPinterestSquare {{\FA\csname faicon@pinterest-square\endcsname}} +\expandafter\def\csname faicon@plane\endcsname {\symbol{"F072}} \def\faPlane {{\FA\csname faicon@plane\endcsname}} +\expandafter\def\csname faicon@play\endcsname {\symbol{"F04B}} \def\faPlay {{\FA\csname faicon@play\endcsname}} +\expandafter\def\csname faicon@play-circle\endcsname {\symbol{"F144}} \def\faPlayCircle {{\FA\csname faicon@play-circle\endcsname}} +\expandafter\def\csname faicon@play-circle-o\endcsname {\symbol{"F01D}} \def\faPlayCircleO {{\FA\csname faicon@play-circle-o\endcsname}} +\expandafter\def\csname faicon@plug\endcsname {\symbol{"F1E6}} \def\faPlug {{\FA\csname faicon@plug\endcsname}} +\expandafter\def\csname faicon@plus\endcsname {\symbol{"F067}} \def\faPlus {{\FA\csname faicon@plus\endcsname}} +\expandafter\def\csname faicon@plus-circle\endcsname {\symbol{"F055}} \def\faPlusCircle {{\FA\csname faicon@plus-circle\endcsname}} +\expandafter\def\csname faicon@plus-square\endcsname {\symbol{"F0FE}} \def\faPlusSquare {{\FA\csname faicon@plus-square\endcsname}} +\expandafter\def\csname faicon@plus-square-o\endcsname {\symbol{"F196}} \def\faPlusSquareO {{\FA\csname faicon@plus-square-o\endcsname}} +\expandafter\def\csname faicon@power-off\endcsname {\symbol{"F011}} \def\faPowerOff {{\FA\csname faicon@power-off\endcsname}} +\expandafter\def\csname faicon@print\endcsname {\symbol{"F02F}} \def\faPrint {{\FA\csname faicon@print\endcsname}} +\expandafter\def\csname faicon@puzzle-piece\endcsname {\symbol{"F12E}} \def\faPuzzlePiece {{\FA\csname faicon@puzzle-piece\endcsname}} +\expandafter\def\csname faicon@qq\endcsname {\symbol{"F1D6}} \def\faQq {{\FA\csname faicon@qq\endcsname}} +\expandafter\def\csname faicon@qrcode\endcsname {\symbol{"F029}} \def\faQrcode {{\FA\csname faicon@qrcode\endcsname}} +\expandafter\def\csname faicon@question\endcsname {\symbol{"F128}} \def\faQuestion {{\FA\csname faicon@question\endcsname}} +\expandafter\def\csname faicon@question-circle\endcsname {\symbol{"F059}} \def\faQuestionCircle {{\FA\csname faicon@question-circle\endcsname}} +\expandafter\def\csname faicon@quote-left\endcsname {\symbol{"F10D}} \def\faQuoteLeft {{\FA\csname faicon@quote-left\endcsname}} +\expandafter\def\csname faicon@quote-right\endcsname {\symbol{"F10E}} \def\faQuoteRight {{\FA\csname faicon@quote-right\endcsname}} +\expandafter\def\csname faicon@ra\endcsname {\symbol{"F1D0}} \def\faRa {{\FA\csname faicon@ra\endcsname}} +\expandafter\def\csname faicon@random\endcsname {\symbol{"F074}} \def\faRandom {{\FA\csname faicon@random\endcsname}} +\expandafter\def\csname faicon@rebel\endcsname {\symbol{"F1D0}} \def\faRebel {{\FA\csname faicon@rebel\endcsname}} +\expandafter\def\csname faicon@recycle\endcsname {\symbol{"F1B8}} \def\faRecycle {{\FA\csname faicon@recycle\endcsname}} +\expandafter\def\csname faicon@reddit\endcsname {\symbol{"F1A1}} \def\faReddit {{\FA\csname faicon@reddit\endcsname}} +\expandafter\def\csname faicon@reddit-square\endcsname {\symbol{"F1A2}} \def\faRedditSquare {{\FA\csname faicon@reddit-square\endcsname}} +\expandafter\def\csname faicon@refresh\endcsname {\symbol{"F021}} \def\faRefresh {{\FA\csname faicon@refresh\endcsname}} +\expandafter\def\csname faicon@registered\endcsname {\symbol{"F25D}} \def\faRegistered {{\FA\csname faicon@registered\endcsname}} +\expandafter\def\csname faicon@remove\endcsname {\symbol{"F00D}} \def\faRemove {{\FA\csname faicon@remove\endcsname}} +\expandafter\def\csname faicon@renren\endcsname {\symbol{"F18B}} \def\faRenren {{\FA\csname faicon@renren\endcsname}} +\expandafter\def\csname faicon@reorder\endcsname {\symbol{"F0C9}} \def\faReorder {{\FA\csname faicon@reorder\endcsname}} +\expandafter\def\csname faicon@repeat\endcsname {\symbol{"F01E}} \def\faRepeat {{\FA\csname faicon@repeat\endcsname}} +\expandafter\def\csname faicon@reply\endcsname {\symbol{"F112}} \def\faReply {{\FA\csname faicon@reply\endcsname}} +\expandafter\def\csname faicon@reply-all\endcsname {\symbol{"F122}} \def\faReplyAll {{\FA\csname faicon@reply-all\endcsname}} +\expandafter\def\csname faicon@retweet\endcsname {\symbol{"F079}} \def\faRetweet {{\FA\csname faicon@retweet\endcsname}} +\expandafter\def\csname faicon@rmb\endcsname {\symbol{"F157}} \def\faRmb {{\FA\csname faicon@rmb\endcsname}} +\expandafter\def\csname faicon@road\endcsname {\symbol{"F018}} \def\faRoad {{\FA\csname faicon@road\endcsname}} +\expandafter\def\csname faicon@rocket\endcsname {\symbol{"F135}} \def\faRocket {{\FA\csname faicon@rocket\endcsname}} +\expandafter\def\csname faicon@rotate-left\endcsname {\symbol{"F0E2}} \def\faRotateLeft {{\FA\csname faicon@rotate-left\endcsname}} +\expandafter\def\csname faicon@rotate-right\endcsname {\symbol{"F01E}} \def\faRotateRight {{\FA\csname faicon@rotate-right\endcsname}} +\expandafter\def\csname faicon@rouble\endcsname {\symbol{"F158}} \def\faRouble {{\FA\csname faicon@rouble\endcsname}} +\expandafter\def\csname faicon@rss\endcsname {\symbol{"F09E}} \def\faRss {{\FA\csname faicon@rss\endcsname}} +\expandafter\def\csname faicon@rss-square\endcsname {\symbol{"F143}} \def\faRssSquare {{\FA\csname faicon@rss-square\endcsname}} +\expandafter\def\csname faicon@rub\endcsname {\symbol{"F158}} \def\faRub {{\FA\csname faicon@rub\endcsname}} +\expandafter\def\csname faicon@ruble\endcsname {\symbol{"F158}} \def\faRuble {{\FA\csname faicon@ruble\endcsname}} +\expandafter\def\csname faicon@rupee\endcsname {\symbol{"F156}} \def\faRupee {{\FA\csname faicon@rupee\endcsname}} +\expandafter\def\csname faicon@safari\endcsname {\symbol{"F267}} \def\faSafari {{\FA\csname faicon@safari\endcsname}} +\expandafter\def\csname faicon@save\endcsname {\symbol{"F0C7}} \def\faSave {{\FA\csname faicon@save\endcsname}} +\expandafter\def\csname faicon@scissors\endcsname {\symbol{"F0C4}} \def\faScissors {{\FA\csname faicon@scissors\endcsname}} +\expandafter\def\csname faicon@search\endcsname {\symbol{"F002}} \def\faSearch {{\FA\csname faicon@search\endcsname}} +\expandafter\def\csname faicon@search-minus\endcsname {\symbol{"F010}} \def\faSearchMinus {{\FA\csname faicon@search-minus\endcsname}} +\expandafter\def\csname faicon@search-plus\endcsname {\symbol{"F00E}} \def\faSearchPlus {{\FA\csname faicon@search-plus\endcsname}} +\expandafter\def\csname faicon@sellsy\endcsname {\symbol{"F213}} \def\faSellsy {{\FA\csname faicon@sellsy\endcsname}} +\expandafter\def\csname faicon@send\endcsname {\symbol{"F1D8}} \def\faSend {{\FA\csname faicon@send\endcsname}} +\expandafter\def\csname faicon@send-o\endcsname {\symbol{"F1D9}} \def\faSendO {{\FA\csname faicon@send-o\endcsname}} +\expandafter\def\csname faicon@server\endcsname {\symbol{"F233}} \def\faServer {{\FA\csname faicon@server\endcsname}} +\expandafter\def\csname faicon@share\endcsname {\symbol{"F064}} \def\faShare {{\FA\csname faicon@share\endcsname}} +\expandafter\def\csname faicon@share-alt\endcsname {\symbol{"F1E0}} \def\faShareAlt {{\FA\csname faicon@share-alt\endcsname}} +\expandafter\def\csname faicon@share-alt-square\endcsname {\symbol{"F1E1}} \def\faShareAltSquare {{\FA\csname faicon@share-alt-square\endcsname}} +\expandafter\def\csname faicon@share-square\endcsname {\symbol{"F14D}} \def\faShareSquare {{\FA\csname faicon@share-square\endcsname}} +\expandafter\def\csname faicon@share-square-o\endcsname {\symbol{"F045}} \def\faShareSquareO {{\FA\csname faicon@share-square-o\endcsname}} +\expandafter\def\csname faicon@shekel\endcsname {\symbol{"F20B}} \def\faShekel {{\FA\csname faicon@shekel\endcsname}} +\expandafter\def\csname faicon@sheqel\endcsname {\symbol{"F20B}} \def\faSheqel {{\FA\csname faicon@sheqel\endcsname}} +\expandafter\def\csname faicon@shield\endcsname {\symbol{"F132}} \def\faShield {{\FA\csname faicon@shield\endcsname}} +\expandafter\def\csname faicon@ship\endcsname {\symbol{"F21A}} \def\faShip {{\FA\csname faicon@ship\endcsname}} +\expandafter\def\csname faicon@shirtsinbulk\endcsname {\symbol{"F214}} \def\faShirtsinbulk {{\FA\csname faicon@shirtsinbulk\endcsname}} +\expandafter\def\csname faicon@shopping-cart\endcsname {\symbol{"F07A}} \def\faShoppingCart {{\FA\csname faicon@shopping-cart\endcsname}} +\expandafter\def\csname faicon@sign-in\endcsname {\symbol{"F090}} \def\faSignIn {{\FA\csname faicon@sign-in\endcsname}} +\expandafter\def\csname faicon@sign-out\endcsname {\symbol{"F08B}} \def\faSignOut {{\FA\csname faicon@sign-out\endcsname}} +\expandafter\def\csname faicon@signal\endcsname {\symbol{"F012}} \def\faSignal {{\FA\csname faicon@signal\endcsname}} +\expandafter\def\csname faicon@simplybuilt\endcsname {\symbol{"F215}} \def\faSimplybuilt {{\FA\csname faicon@simplybuilt\endcsname}} +\expandafter\def\csname faicon@sitemap\endcsname {\symbol{"F0E8}} \def\faSitemap {{\FA\csname faicon@sitemap\endcsname}} +\expandafter\def\csname faicon@skyatlas\endcsname {\symbol{"F216}} \def\faSkyatlas {{\FA\csname faicon@skyatlas\endcsname}} +\expandafter\def\csname faicon@skype\endcsname {\symbol{"F17E}} \def\faSkype {{\FA\csname faicon@skype\endcsname}} +\expandafter\def\csname faicon@slack\endcsname {\symbol{"F198}} \def\faSlack {{\FA\csname faicon@slack\endcsname}} +\expandafter\def\csname faicon@sliders\endcsname {\symbol{"F1DE}} \def\faSliders {{\FA\csname faicon@sliders\endcsname}} +\expandafter\def\csname faicon@slideshare\endcsname {\symbol{"F1E7}} \def\faSlideshare {{\FA\csname faicon@slideshare\endcsname}} +\expandafter\def\csname faicon@smile-o\endcsname {\symbol{"F118}} \def\faSmileO {{\FA\csname faicon@smile-o\endcsname}} +\expandafter\def\csname faicon@soccer-ball-o\endcsname {\symbol{"F1E3}} \def\faSoccerBallO {{\FA\csname faicon@soccer-ball-o\endcsname}} +\expandafter\def\csname faicon@sort\endcsname {\symbol{"F0DC}} \def\faSort {{\FA\csname faicon@sort\endcsname}} +\expandafter\def\csname faicon@sort-alpha-asc\endcsname {\symbol{"F15D}} \def\faSortAlphaAsc {{\FA\csname faicon@sort-alpha-asc\endcsname}} +\expandafter\def\csname faicon@sort-alpha-desc\endcsname {\symbol{"F15E}} \def\faSortAlphaDesc {{\FA\csname faicon@sort-alpha-desc\endcsname}} +\expandafter\def\csname faicon@sort-amount-asc\endcsname {\symbol{"F160}} \def\faSortAmountAsc {{\FA\csname faicon@sort-amount-asc\endcsname}} +\expandafter\def\csname faicon@sort-amount-desc\endcsname {\symbol{"F161}} \def\faSortAmountDesc {{\FA\csname faicon@sort-amount-desc\endcsname}} +\expandafter\def\csname faicon@sort-asc\endcsname {\symbol{"F0DE}} \def\faSortAsc {{\FA\csname faicon@sort-asc\endcsname}} +\expandafter\def\csname faicon@sort-desc\endcsname {\symbol{"F0DD}} \def\faSortDesc {{\FA\csname faicon@sort-desc\endcsname}} +\expandafter\def\csname faicon@sort-down\endcsname {\symbol{"F0DD}} \def\faSortDown {{\FA\csname faicon@sort-down\endcsname}} +\expandafter\def\csname faicon@sort-numeric-asc\endcsname {\symbol{"F162}} \def\faSortNumericAsc {{\FA\csname faicon@sort-numeric-asc\endcsname}} +\expandafter\def\csname faicon@sort-numeric-desc\endcsname {\symbol{"F163}} \def\faSortNumericDesc {{\FA\csname faicon@sort-numeric-desc\endcsname}} +\expandafter\def\csname faicon@sort-up\endcsname {\symbol{"F0DE}} \def\faSortUp {{\FA\csname faicon@sort-up\endcsname}} +\expandafter\def\csname faicon@soundcloud\endcsname {\symbol{"F1BE}} \def\faSoundcloud {{\FA\csname faicon@soundcloud\endcsname}} +\expandafter\def\csname faicon@space-shuttle\endcsname {\symbol{"F197}} \def\faSpaceShuttle {{\FA\csname faicon@space-shuttle\endcsname}} +\expandafter\def\csname faicon@spinner\endcsname {\symbol{"F110}} \def\faSpinner {{\FA\csname faicon@spinner\endcsname}} +\expandafter\def\csname faicon@spoon\endcsname {\symbol{"F1B1}} \def\faSpoon {{\FA\csname faicon@spoon\endcsname}} +\expandafter\def\csname faicon@spotify\endcsname {\symbol{"F1BC}} \def\faSpotify {{\FA\csname faicon@spotify\endcsname}} +\expandafter\def\csname faicon@square\endcsname {\symbol{"F0C8}} \def\faSquare {{\FA\csname faicon@square\endcsname}} +\expandafter\def\csname faicon@square-o\endcsname {\symbol{"F096}} \def\faSquareO {{\FA\csname faicon@square-o\endcsname}} +\expandafter\def\csname faicon@stack-exchange\endcsname {\symbol{"F18D}} \def\faStackExchange {{\FA\csname faicon@stack-exchange\endcsname}} +\expandafter\def\csname faicon@stack-overflow\endcsname {\symbol{"F16C}} \def\faStackOverflow {{\FA\csname faicon@stack-overflow\endcsname}} +\expandafter\def\csname faicon@star\endcsname {\symbol{"F005}} \def\faStar {{\FA\csname faicon@star\endcsname}} +\expandafter\def\csname faicon@star-half\endcsname {\symbol{"F089}} \def\faStarHalf {{\FA\csname faicon@star-half\endcsname}} +\expandafter\def\csname faicon@star-half-empty\endcsname {\symbol{"F123}} \def\faStarHalfEmpty {{\FA\csname faicon@star-half-empty\endcsname}} +\expandafter\def\csname faicon@star-half-full\endcsname {\symbol{"F123}} \def\faStarHalfFull {{\FA\csname faicon@star-half-full\endcsname}} +\expandafter\def\csname faicon@star-half-o\endcsname {\symbol{"F123}} \def\faStarHalfO {{\FA\csname faicon@star-half-o\endcsname}} +\expandafter\def\csname faicon@star-o\endcsname {\symbol{"F006}} \def\faStarO {{\FA\csname faicon@star-o\endcsname}} +\expandafter\def\csname faicon@steam\endcsname {\symbol{"F1B6}} \def\faSteam {{\FA\csname faicon@steam\endcsname}} +\expandafter\def\csname faicon@steam-square\endcsname {\symbol{"F1B7}} \def\faSteamSquare {{\FA\csname faicon@steam-square\endcsname}} +\expandafter\def\csname faicon@step-backward\endcsname {\symbol{"F048}} \def\faStepBackward {{\FA\csname faicon@step-backward\endcsname}} +\expandafter\def\csname faicon@step-forward\endcsname {\symbol{"F051}} \def\faStepForward {{\FA\csname faicon@step-forward\endcsname}} +\expandafter\def\csname faicon@stethoscope\endcsname {\symbol{"F0F1}} \def\faStethoscope {{\FA\csname faicon@stethoscope\endcsname}} +\expandafter\def\csname faicon@sticky-note\endcsname {\symbol{"F249}} \def\faStickyNote {{\FA\csname faicon@sticky-note\endcsname}} +\expandafter\def\csname faicon@sticky-note-o\endcsname {\symbol{"F24A}} \def\faStickyNoteO {{\FA\csname faicon@sticky-note-o\endcsname}} +\expandafter\def\csname faicon@stop\endcsname {\symbol{"F04D}} \def\faStop {{\FA\csname faicon@stop\endcsname}} +\expandafter\def\csname faicon@street-view\endcsname {\symbol{"F21D}} \def\faStreetView {{\FA\csname faicon@street-view\endcsname}} +\expandafter\def\csname faicon@strikethrough\endcsname {\symbol{"F0CC}} \def\faStrikethrough {{\FA\csname faicon@strikethrough\endcsname}} +\expandafter\def\csname faicon@stumbleupon\endcsname {\symbol{"F1A4}} \def\faStumbleupon {{\FA\csname faicon@stumbleupon\endcsname}} +\expandafter\def\csname faicon@stumbleupon-circle\endcsname {\symbol{"F1A3}} \def\faStumbleuponCircle {{\FA\csname faicon@stumbleupon-circle\endcsname}} +\expandafter\def\csname faicon@subscript\endcsname {\symbol{"F12C}} \def\faSubscript {{\FA\csname faicon@subscript\endcsname}} +\expandafter\def\csname faicon@subway\endcsname {\symbol{"F239}} \def\faSubway {{\FA\csname faicon@subway\endcsname}} +\expandafter\def\csname faicon@suitcase\endcsname {\symbol{"F0F2}} \def\faSuitcase {{\FA\csname faicon@suitcase\endcsname}} +\expandafter\def\csname faicon@sun-o\endcsname {\symbol{"F185}} \def\faSunO {{\FA\csname faicon@sun-o\endcsname}} +\expandafter\def\csname faicon@superscript\endcsname {\symbol{"F12B}} \def\faSuperscript {{\FA\csname faicon@superscript\endcsname}} +\expandafter\def\csname faicon@support\endcsname {\symbol{"F1CD}} \def\faSupport {{\FA\csname faicon@support\endcsname}} +\expandafter\def\csname faicon@table\endcsname {\symbol{"F0CE}} \def\faTable {{\FA\csname faicon@table\endcsname}} +\expandafter\def\csname faicon@tablet\endcsname {\symbol{"F10A}} \def\faTablet {{\FA\csname faicon@tablet\endcsname}} +\expandafter\def\csname faicon@tachometer\endcsname {\symbol{"F0E4}} \def\faTachometer {{\FA\csname faicon@tachometer\endcsname}} +\expandafter\def\csname faicon@tag\endcsname {\symbol{"F02B}} \def\faTag {{\FA\csname faicon@tag\endcsname}} +\expandafter\def\csname faicon@tags\endcsname {\symbol{"F02C}} \def\faTags {{\FA\csname faicon@tags\endcsname}} +\expandafter\def\csname faicon@tasks\endcsname {\symbol{"F0AE}} \def\faTasks {{\FA\csname faicon@tasks\endcsname}} +\expandafter\def\csname faicon@taxi\endcsname {\symbol{"F1BA}} \def\faTaxi {{\FA\csname faicon@taxi\endcsname}} +\expandafter\def\csname faicon@television\endcsname {\symbol{"F26C}} \def\faTelevision {{\FA\csname faicon@television\endcsname}} +\expandafter\def\csname faicon@tencent-weibo\endcsname {\symbol{"F1D5}} \def\faTencentWeibo {{\FA\csname faicon@tencent-weibo\endcsname}} +\expandafter\def\csname faicon@terminal\endcsname {\symbol{"F120}} \def\faTerminal {{\FA\csname faicon@terminal\endcsname}} +\expandafter\def\csname faicon@text-height\endcsname {\symbol{"F034}} \def\faTextHeight {{\FA\csname faicon@text-height\endcsname}} +\expandafter\def\csname faicon@text-width\endcsname {\symbol{"F035}} \def\faTextWidth {{\FA\csname faicon@text-width\endcsname}} +\expandafter\def\csname faicon@th\endcsname {\symbol{"F00A}} \def\faTh {{\FA\csname faicon@th\endcsname}} +\expandafter\def\csname faicon@th-large\endcsname {\symbol{"F009}} \def\faThLarge {{\FA\csname faicon@th-large\endcsname}} +\expandafter\def\csname faicon@th-list\endcsname {\symbol{"F00B}} \def\faThList {{\FA\csname faicon@th-list\endcsname}} +\expandafter\def\csname faicon@thumb-tack\endcsname {\symbol{"F08D}} \def\faThumbTack {{\FA\csname faicon@thumb-tack\endcsname}} +\expandafter\def\csname faicon@thumbs-down\endcsname {\symbol{"F165}} \def\faThumbsDown {{\FA\csname faicon@thumbs-down\endcsname}} +\expandafter\def\csname faicon@thumbs-o-down\endcsname {\symbol{"F088}} \def\faThumbsODown {{\FA\csname faicon@thumbs-o-down\endcsname}} +\expandafter\def\csname faicon@thumbs-o-up\endcsname {\symbol{"F087}} \def\faThumbsOUp {{\FA\csname faicon@thumbs-o-up\endcsname}} +\expandafter\def\csname faicon@thumbs-up\endcsname {\symbol{"F164}} \def\faThumbsUp {{\FA\csname faicon@thumbs-up\endcsname}} +\expandafter\def\csname faicon@ticket\endcsname {\symbol{"F145}} \def\faTicket {{\FA\csname faicon@ticket\endcsname}} +\expandafter\def\csname faicon@times\endcsname {\symbol{"F00D}} \def\faTimes {{\FA\csname faicon@times\endcsname}} +\expandafter\def\csname faicon@times-circle\endcsname {\symbol{"F057}} \def\faTimesCircle {{\FA\csname faicon@times-circle\endcsname}} +\expandafter\def\csname faicon@times-circle-o\endcsname {\symbol{"F05C}} \def\faTimesCircleO {{\FA\csname faicon@times-circle-o\endcsname}} +\expandafter\def\csname faicon@tint\endcsname {\symbol{"F043}} \def\faTint {{\FA\csname faicon@tint\endcsname}} +\expandafter\def\csname faicon@toggle-down\endcsname {\symbol{"F150}} \def\faToggleDown {{\FA\csname faicon@toggle-down\endcsname}} +\expandafter\def\csname faicon@toggle-left\endcsname {\symbol{"F191}} \def\faToggleLeft {{\FA\csname faicon@toggle-left\endcsname}} +\expandafter\def\csname faicon@toggle-off\endcsname {\symbol{"F204}} \def\faToggleOff {{\FA\csname faicon@toggle-off\endcsname}} +\expandafter\def\csname faicon@toggle-on\endcsname {\symbol{"F205}} \def\faToggleOn {{\FA\csname faicon@toggle-on\endcsname}} +\expandafter\def\csname faicon@toggle-right\endcsname {\symbol{"F152}} \def\faToggleRight {{\FA\csname faicon@toggle-right\endcsname}} +\expandafter\def\csname faicon@toggle-up\endcsname {\symbol{"F151}} \def\faToggleUp {{\FA\csname faicon@toggle-up\endcsname}} +\expandafter\def\csname faicon@trademark\endcsname {\symbol{"F25C}} \def\faTrademark {{\FA\csname faicon@trademark\endcsname}} +\expandafter\def\csname faicon@train\endcsname {\symbol{"F238}} \def\faTrain {{\FA\csname faicon@train\endcsname}} +\expandafter\def\csname faicon@transgender\endcsname {\symbol{"F224}} \def\faTransgender {{\FA\csname faicon@transgender\endcsname}} +\expandafter\def\csname faicon@transgender-alt\endcsname {\symbol{"F225}} \def\faTransgenderAlt {{\FA\csname faicon@transgender-alt\endcsname}} +\expandafter\def\csname faicon@trash\endcsname {\symbol{"F1F8}} \def\faTrash {{\FA\csname faicon@trash\endcsname}} +\expandafter\def\csname faicon@trash-o\endcsname {\symbol{"F014}} \def\faTrashO {{\FA\csname faicon@trash-o\endcsname}} +\expandafter\def\csname faicon@tree\endcsname {\symbol{"F1BB}} \def\faTree {{\FA\csname faicon@tree\endcsname}} +\expandafter\def\csname faicon@trello\endcsname {\symbol{"F181}} \def\faTrello {{\FA\csname faicon@trello\endcsname}} +\expandafter\def\csname faicon@tripadvisor\endcsname {\symbol{"F262}} \def\faTripadvisor {{\FA\csname faicon@tripadvisor\endcsname}} +\expandafter\def\csname faicon@trophy\endcsname {\symbol{"F091}} \def\faTrophy {{\FA\csname faicon@trophy\endcsname}} +\expandafter\def\csname faicon@truck\endcsname {\symbol{"F0D1}} \def\faTruck {{\FA\csname faicon@truck\endcsname}} +\expandafter\def\csname faicon@try\endcsname {\symbol{"F195}} \def\faTry {{\FA\csname faicon@try\endcsname}} +\expandafter\def\csname faicon@tty\endcsname {\symbol{"F1E4}} \def\faTty {{\FA\csname faicon@tty\endcsname}} +\expandafter\def\csname faicon@tumblr\endcsname {\symbol{"F173}} \def\faTumblr {{\FA\csname faicon@tumblr\endcsname}} +\expandafter\def\csname faicon@tumblr-square\endcsname {\symbol{"F174}} \def\faTumblrSquare {{\FA\csname faicon@tumblr-square\endcsname}} +\expandafter\def\csname faicon@turkish-lira\endcsname {\symbol{"F195}} \def\faTurkishLira {{\FA\csname faicon@turkish-lira\endcsname}} +\expandafter\def\csname faicon@tv\endcsname {\symbol{"F26C}} \def\faTv {{\FA\csname faicon@tv\endcsname}} +\expandafter\def\csname faicon@twitch\endcsname {\symbol{"F1E8}} \def\faTwitch {{\FA\csname faicon@twitch\endcsname}} +\expandafter\def\csname faicon@twitter\endcsname {\symbol{"F099}} \def\faTwitter {{\FA\csname faicon@twitter\endcsname}} +\expandafter\def\csname faicon@twitter-square\endcsname {\symbol{"F081}} \def\faTwitterSquare {{\FA\csname faicon@twitter-square\endcsname}} +\expandafter\def\csname faicon@umbrella\endcsname {\symbol{"F0E9}} \def\faUmbrella {{\FA\csname faicon@umbrella\endcsname}} +\expandafter\def\csname faicon@underline\endcsname {\symbol{"F0CD}} \def\faUnderline {{\FA\csname faicon@underline\endcsname}} +\expandafter\def\csname faicon@undo\endcsname {\symbol{"F0E2}} \def\faUndo {{\FA\csname faicon@undo\endcsname}} +\expandafter\def\csname faicon@university\endcsname {\symbol{"F19C}} \def\faUniversity {{\FA\csname faicon@university\endcsname}} +\expandafter\def\csname faicon@unlink\endcsname {\symbol{"F127}} \def\faUnlink {{\FA\csname faicon@unlink\endcsname}} +\expandafter\def\csname faicon@unlock\endcsname {\symbol{"F09C}} \def\faUnlock {{\FA\csname faicon@unlock\endcsname}} +\expandafter\def\csname faicon@unlock-alt\endcsname {\symbol{"F13E}} \def\faUnlockAlt {{\FA\csname faicon@unlock-alt\endcsname}} +\expandafter\def\csname faicon@unsorted\endcsname {\symbol{"F0DC}} \def\faUnsorted {{\FA\csname faicon@unsorted\endcsname}} +\expandafter\def\csname faicon@upload\endcsname {\symbol{"F093}} \def\faUpload {{\FA\csname faicon@upload\endcsname}} +\expandafter\def\csname faicon@usd\endcsname {\symbol{"F155}} \def\faUsd {{\FA\csname faicon@usd\endcsname}} +\expandafter\def\csname faicon@user\endcsname {\symbol{"F007}} \def\faUser {{\FA\csname faicon@user\endcsname}} +\expandafter\def\csname faicon@user-md\endcsname {\symbol{"F0F0}} \def\faUserMd {{\FA\csname faicon@user-md\endcsname}} +\expandafter\def\csname faicon@user-plus\endcsname {\symbol{"F234}} \def\faUserPlus {{\FA\csname faicon@user-plus\endcsname}} +\expandafter\def\csname faicon@user-secret\endcsname {\symbol{"F21B}} \def\faUserSecret {{\FA\csname faicon@user-secret\endcsname}} +\expandafter\def\csname faicon@user-times\endcsname {\symbol{"F235}} \def\faUserTimes {{\FA\csname faicon@user-times\endcsname}} +\expandafter\def\csname faicon@users\endcsname {\symbol{"F0C0}} \def\faUsers {{\FA\csname faicon@users\endcsname}} +\expandafter\def\csname faicon@venus\endcsname {\symbol{"F221}} \def\faVenus {{\FA\csname faicon@venus\endcsname}} +\expandafter\def\csname faicon@venus-double\endcsname {\symbol{"F226}} \def\faVenusDouble {{\FA\csname faicon@venus-double\endcsname}} +\expandafter\def\csname faicon@venus-mars\endcsname {\symbol{"F228}} \def\faVenusMars {{\FA\csname faicon@venus-mars\endcsname}} +\expandafter\def\csname faicon@viacoin\endcsname {\symbol{"F237}} \def\faViacoin {{\FA\csname faicon@viacoin\endcsname}} +\expandafter\def\csname faicon@video-camera\endcsname {\symbol{"F03D}} \def\faVideoCamera {{\FA\csname faicon@video-camera\endcsname}} +\expandafter\def\csname faicon@vimeo\endcsname {\symbol{"F27D}} \def\faVimeo {{\FA\csname faicon@vimeo\endcsname}} +\expandafter\def\csname faicon@vimeo-square\endcsname {\symbol{"F194}} \def\faVimeoSquare {{\FA\csname faicon@vimeo-square\endcsname}} +\expandafter\def\csname faicon@vine\endcsname {\symbol{"F1CA}} \def\faVine {{\FA\csname faicon@vine\endcsname}} +\expandafter\def\csname faicon@vk\endcsname {\symbol{"F189}} \def\faVk {{\FA\csname faicon@vk\endcsname}} +\expandafter\def\csname faicon@volume-down\endcsname {\symbol{"F027}} \def\faVolumeDown {{\FA\csname faicon@volume-down\endcsname}} +\expandafter\def\csname faicon@volume-off\endcsname {\symbol{"F026}} \def\faVolumeOff {{\FA\csname faicon@volume-off\endcsname}} +\expandafter\def\csname faicon@volume-up\endcsname {\symbol{"F028}} \def\faVolumeUp {{\FA\csname faicon@volume-up\endcsname}} +\expandafter\def\csname faicon@warning\endcsname {\symbol{"F071}} \def\faWarning {{\FA\csname faicon@warning\endcsname}} +\expandafter\def\csname faicon@wechat\endcsname {\symbol{"F1D7}} \def\faWechat {{\FA\csname faicon@wechat\endcsname}} +\expandafter\def\csname faicon@weibo\endcsname {\symbol{"F18A}} \def\faWeibo {{\FA\csname faicon@weibo\endcsname}} +\expandafter\def\csname faicon@weixin\endcsname {\symbol{"F1D7}} \def\faWeixin {{\FA\csname faicon@weixin\endcsname}} +\expandafter\def\csname faicon@whatsapp\endcsname {\symbol{"F232}} \def\faWhatsapp {{\FA\csname faicon@whatsapp\endcsname}} +\expandafter\def\csname faicon@wheelchair\endcsname {\symbol{"F193}} \def\faWheelchair {{\FA\csname faicon@wheelchair\endcsname}} +\expandafter\def\csname faicon@wifi\endcsname {\symbol{"F1EB}} \def\faWifi {{\FA\csname faicon@wifi\endcsname}} +\expandafter\def\csname faicon@wikipedia-w\endcsname {\symbol{"F266}} \def\faWikipediaW {{\FA\csname faicon@wikipedia-w\endcsname}} +\expandafter\def\csname faicon@windows\endcsname {\symbol{"F17A}} \def\faWindows {{\FA\csname faicon@windows\endcsname}} +\expandafter\def\csname faicon@won\endcsname {\symbol{"F159}} \def\faWon {{\FA\csname faicon@won\endcsname}} +\expandafter\def\csname faicon@wordpress\endcsname {\symbol{"F19A}} \def\faWordpress {{\FA\csname faicon@wordpress\endcsname}} +\expandafter\def\csname faicon@wrench\endcsname {\symbol{"F0AD}} \def\faWrench {{\FA\csname faicon@wrench\endcsname}} +\expandafter\def\csname faicon@xing\endcsname {\symbol{"F168}} \def\faXing {{\FA\csname faicon@xing\endcsname}} +\expandafter\def\csname faicon@xing-square\endcsname {\symbol{"F169}} \def\faXingSquare {{\FA\csname faicon@xing-square\endcsname}} +\expandafter\def\csname faicon@y-combinator\endcsname {\symbol{"F23B}} \def\faYCombinator {{\FA\csname faicon@y-combinator\endcsname}} +\expandafter\def\csname faicon@y-combinator-square\endcsname {\symbol{"F1D4}} \def\faYCombinatorSquare {{\FA\csname faicon@y-combinator-square\endcsname}} +\expandafter\def\csname faicon@yahoo\endcsname {\symbol{"F19E}} \def\faYahoo {{\FA\csname faicon@yahoo\endcsname}} +\expandafter\def\csname faicon@yc\endcsname {\symbol{"F23B}} \def\faYc {{\FA\csname faicon@yc\endcsname}} +\expandafter\def\csname faicon@yc-square\endcsname {\symbol{"F1D4}} \def\faYcSquare {{\FA\csname faicon@yc-square\endcsname}} +\expandafter\def\csname faicon@yelp\endcsname {\symbol{"F1E9}} \def\faYelp {{\FA\csname faicon@yelp\endcsname}} +\expandafter\def\csname faicon@yen\endcsname {\symbol{"F157}} \def\faYen {{\FA\csname faicon@yen\endcsname}} +\expandafter\def\csname faicon@youtube\endcsname {\symbol{"F167}} \def\faYoutube {{\FA\csname faicon@youtube\endcsname}} +\expandafter\def\csname faicon@youtube-play\endcsname {\symbol{"F16A}} \def\faYoutubePlay {{\FA\csname faicon@youtube-play\endcsname}} +\expandafter\def\csname faicon@youtube-square\endcsname {\symbol{"F166}} \def\faYoutubeSquare {{\FA\csname faicon@youtube-square\endcsname}} \endinput \ No newline at end of file diff --git a/public/templates/template4/deedy-resume-openfont.cls b/public/templates/template4/deedy-resume-openfont.cls index c402272c..8ace4cf9 100755 --- a/public/templates/template4/deedy-resume-openfont.cls +++ b/public/templates/template4/deedy-resume-openfont.cls @@ -1,80 +1,80 @@ -% Intro Options -\ProvidesClass{deedy-resume-openfont}[2014/04/30 CV class] -\NeedsTeXFormat{LaTeX2e} -\DeclareOption{print}{\def\@cv@print{}} -\DeclareOption*{% - \PassOptionsToClass{\CurrentOption}{article} -} -\ProcessOptions\relax -\LoadClass{article} - -% Package Imports -\usepackage[hmargin=1.25cm, vmargin=0.7cm]{geometry} -\usepackage[usenames,dvipsnames]{xcolor} -\usepackage[hidelinks]{hyperref} -\usepackage{titlesec} -\usepackage[absolute]{textpos} -\usepackage[UKenglish]{babel} -\usepackage[UKenglish]{isodate} -\usepackage{fontspec,xltxtra,xunicode,fontenc} -\usepackage{textcomp} - -% Color definitions -\definecolor{date}{HTML}{666666} -\definecolor{primary}{HTML}{2b2b2b} -\definecolor{headings}{HTML}{6A6A6A} -\definecolor{subheadings}{HTML}{333333} - -% Set main fonts -\defaultfontfeatures{Mapping=tex-text} -\setmainfont[Color=primary, Path = fonts/]{Raleway-ExtraLight} -\setsansfont[Scale=MatchLowercase,Mapping=tex-text, Path = fonts/]{Raleway-ExtraLight} -\newcommand{\custombold}[1]{\color{subheadings}\fontspec[Path = fonts/]{Raleway-Regular}\selectfont #1 \normalfont} - -% Date command -\setlength{\TPHorizModule}{1mm} -\setlength{\TPVertModule}{1mm} -\textblockorigin{0mm}{5mm} % start everyth -\newcommand{\lastupdated}{\begin{textblock}{60}(165,0) -\color{date}\fontspec[Path = fonts/]{Raleway-ExtraLight}\fontsize{8pt}{10pt}\selectfont -Last Updated on -\today -\end{textblock}} - -% Name command -\newcommand{\namesection}[3]{ - \centering{ - \sffamily - \fontspec[Path = fonts/]{Raleway-ExtraLight}\fontsize{40pt}{10cm}\selectfont #1 - \fontspec[Path = fonts/]{Raleway-ExtraLight}\selectfont #2 - } \\ - \vspace{5pt} - \centering{ \color{headings}\fontspec[Path = fonts/]{Raleway-Medium}\fontsize{11pt}{14pt}\selectfont #3} - \noindent\makebox[\linewidth]{\rule{\paperwidth}{0.4pt}} - \vspace{-15pt} -} -\titlespacing{\section}{0pt}{0pt}{0pt} - -% Headings command -\titleformat{\section}{\color{headings} -\scshape\fontspec[Path = fonts/]{Raleway-Medium}\fontsize{16pt}{24pt}\selectfont \raggedright\uppercase}{} {0em}{} - -% Subeadings command -\titleformat{\subsection}{\color{subheadings} -\fontspec[Path = fonts/]{Raleway-Medium}\fontsize{12pt}{12pt}\selectfont\bfseries\uppercase}{}{0em}{} -\titlespacing{\subsection}{0pt}{\parskip}{-\parskip} -\titlespacing{\subsubsection}{0pt}{\parskip}{-\parskip} -\newcommand{\runsubsection}[1]{\color{subheadings} -\fontspec[Path = fonts/]{Raleway-Medium}\fontsize{12pt}{12pt}\selectfont\bfseries\uppercase {#1} \normalfont} - -% Descriptors command -\newcommand{\descript}[1]{\color{subheadings}\raggedright\scshape\fontspec[Path = fonts/]{Raleway-Medium}\fontsize{11pt}{13pt}\selectfont {#1} \normalfont} - -% Location command -\newcommand{\location}[1]{\color{headings}\raggedright\fontspec[Path = fonts/]{Raleway-Medium}\fontsize{11pt}{13pt}\selectfont {#1} \normalfont} - -% Section seperators command -\newcommand{\sectionsep}[0]{\vspace{8pt}} - -% Bullet Lists with fewer gaps command -\newenvironment{tightemize}{\vspace{-1mm}\begin{itemize}\itemsep1pt \parskip1.5pt \parsep1.5pt}{\end{itemize}\vspace{-\topsep}} +% Intro Options +\ProvidesClass{deedy-resume-openfont}[2014/04/30 CV class] +\NeedsTeXFormat{LaTeX2e} +\DeclareOption{print}{\def\@cv@print{}} +\DeclareOption*{% + \PassOptionsToClass{\CurrentOption}{article} +} +\ProcessOptions\relax +\LoadClass{article} + +% Package Imports +\usepackage[hmargin=1.25cm, vmargin=0.7cm]{geometry} +\usepackage[usenames,dvipsnames]{xcolor} +\usepackage[hidelinks]{hyperref} +\usepackage{titlesec} +\usepackage[absolute]{textpos} +\usepackage[UKenglish]{babel} +\usepackage[UKenglish]{isodate} +\usepackage{fontspec,xltxtra,xunicode,fontenc} +\usepackage{textcomp} + +% Color definitions +\definecolor{date}{HTML}{666666} +\definecolor{primary}{HTML}{2b2b2b} +\definecolor{headings}{HTML}{6A6A6A} +\definecolor{subheadings}{HTML}{333333} + +% Set main fonts +\defaultfontfeatures{Mapping=tex-text} +\setmainfont[Color=primary, Path = fonts/]{Raleway-ExtraLight} +\setsansfont[Scale=MatchLowercase,Mapping=tex-text, Path = fonts/]{Raleway-ExtraLight} +\newcommand{\custombold}[1]{\color{subheadings}\fontspec[Path = fonts/]{Raleway-Regular}\selectfont #1 \normalfont} + +% Date command +\setlength{\TPHorizModule}{1mm} +\setlength{\TPVertModule}{1mm} +\textblockorigin{0mm}{5mm} % start everyth +\newcommand{\lastupdated}{\begin{textblock}{60}(165,0) +\color{date}\fontspec[Path = fonts/]{Raleway-ExtraLight}\fontsize{8pt}{10pt}\selectfont +Last Updated on +\today +\end{textblock}} + +% Name command +\newcommand{\namesection}[3]{ + \centering{ + \sffamily + \fontspec[Path = fonts/]{Raleway-ExtraLight}\fontsize{40pt}{10cm}\selectfont #1 + \fontspec[Path = fonts/]{Raleway-ExtraLight}\selectfont #2 + } \\ + \vspace{5pt} + \centering{ \color{headings}\fontspec[Path = fonts/]{Raleway-Medium}\fontsize{11pt}{14pt}\selectfont #3} + \noindent\makebox[\linewidth]{\rule{\paperwidth}{0.4pt}} + \vspace{-15pt} +} +\titlespacing{\section}{0pt}{0pt}{0pt} + +% Headings command +\titleformat{\section}{\color{headings} +\scshape\fontspec[Path = fonts/]{Raleway-Medium}\fontsize{16pt}{24pt}\selectfont \raggedright\uppercase}{} {0em}{} + +% Subeadings command +\titleformat{\subsection}{\color{subheadings} +\fontspec[Path = fonts/]{Raleway-Medium}\fontsize{12pt}{12pt}\selectfont\bfseries\uppercase}{}{0em}{} +\titlespacing{\subsection}{0pt}{\parskip}{-\parskip} +\titlespacing{\subsubsection}{0pt}{\parskip}{-\parskip} +\newcommand{\runsubsection}[1]{\color{subheadings} +\fontspec[Path = fonts/]{Raleway-Medium}\fontsize{12pt}{12pt}\selectfont\bfseries\uppercase {#1} \normalfont} + +% Descriptors command +\newcommand{\descript}[1]{\color{subheadings}\raggedright\scshape\fontspec[Path = fonts/]{Raleway-Medium}\fontsize{11pt}{13pt}\selectfont {#1} \normalfont} + +% Location command +\newcommand{\location}[1]{\color{headings}\raggedright\fontspec[Path = fonts/]{Raleway-Medium}\fontsize{11pt}{13pt}\selectfont {#1} \normalfont} + +% Section seperators command +\newcommand{\sectionsep}[0]{\vspace{8pt}} + +% Bullet Lists with fewer gaps command +\newenvironment{tightemize}{\vspace{-1mm}\begin{itemize}\itemsep1pt \parskip1.5pt \parsep1.5pt}{\end{itemize}\vspace{-\topsep}} diff --git a/public/templates/template5/helvetica.sty b/public/templates/template5/helvetica.sty index 2b8d920e..0013f136 100755 --- a/public/templates/template5/helvetica.sty +++ b/public/templates/template5/helvetica.sty @@ -1,32 +1,32 @@ -%% -%% This is file `helvetica.sty', based on helvet.sty extended to include -%% definitions for rm and tt. This means commands such as \textbf, \textit, -%% etc. will appear in Helvetica. -%% Changes added by Harriet Borton on <1995/12/11> -%% -%% The original source files were: -%% -%% psfonts.dtx (with options: `helvet') -%% -%% Copyright (C) 1994 Sebastian Rahtz -%% All rights reserved. -%% -%% The original file is part of the PSNFSS2e package. -%% ----------------------------------------- -%% -%% This is a generated file. Permission is granted to to customize the -%% declarations in this file to serve the needs of your installation. -%% However, no permission is granted to distribute a modified version of -%% this file under its original name. -\def\fileversion{4.2} -\def\filedate{94/11/11} -\def\docdate {94/11/06} -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{helvetica}[\filedate\space\fileversion\space -Helvetica PSNFSS2e package] -\renewcommand{\sfdefault}{phv} -\renewcommand{\rmdefault}{phv} -\renewcommand{\ttdefault}{pcr} -\endinput -%% -%% End of file `helvetica.sty'. +%% +%% This is file `helvetica.sty', based on helvet.sty extended to include +%% definitions for rm and tt. This means commands such as \textbf, \textit, +%% etc. will appear in Helvetica. +%% Changes added by Harriet Borton on <1995/12/11> +%% +%% The original source files were: +%% +%% psfonts.dtx (with options: `helvet') +%% +%% Copyright (C) 1994 Sebastian Rahtz +%% All rights reserved. +%% +%% The original file is part of the PSNFSS2e package. +%% ----------------------------------------- +%% +%% This is a generated file. Permission is granted to to customize the +%% declarations in this file to serve the needs of your installation. +%% However, no permission is granted to distribute a modified version of +%% this file under its original name. +\def\fileversion{4.2} +\def\filedate{94/11/11} +\def\docdate {94/11/06} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{helvetica}[\filedate\space\fileversion\space +Helvetica PSNFSS2e package] +\renewcommand{\sfdefault}{phv} +\renewcommand{\rmdefault}{phv} +\renewcommand{\ttdefault}{pcr} +\endinput +%% +%% End of file `helvetica.sty'. diff --git a/public/templates/template5/res.cls b/public/templates/template5/res.cls index 2d2a3bb6..c3daa7d3 100755 --- a/public/templates/template5/res.cls +++ b/public/templates/template5/res.cls @@ -1,802 +1,802 @@ -% RESUME DOCUMENT STYLE -- Released 23 Nov 1989 -% for LaTeX version 2.09 -% Copyright (C) 1988,1989 by Michael DeCorte - -\typeout{Document Style `res' <26 Sep 89>.} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% res.sty -% -% \documentstyle{res} -% -% Copyright (c) 1988 by Michael DeCorte -% Permission to copy all or part of this work is granted, provided -% that the copies are not made or distributed for resale, and that -% the copyright notice and this notice are retained. -% -% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO -% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK, -% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS -% FOR ANY PARTICULAR PURPOSE. -% -% If you make any improvements, I'd like to hear about them. -% -% Michael DeCorte -% P.O. Box 652 -% Potsdam NY 13676 -% mrd@sun.soe.clarkson.edu -% mrd@clutx.bitnet -% -% Changes for LaTeX2e -- Venkat Krishnamurthy (Aug 7, 2001) -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% You can have multiple style options the legal options ones are: -% -% centered the name and address are centered at the top of the -% page (default) -% -% line the name is the left with a horizontal line then -% the address to the right -% -% overlapped the section titles overlap the body text (default) -% -% margin the section titles are to the left of the body text -% -% 11pt use 11 point fonts instead of 10 point fonts -% -% 12pt use 12 point fonts instead of 10 point fonts -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Commands -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \Resume prints the word resume but typeset nicely -% -% \newsectionwidth{dimen} -% defines the amount of space the labels extend -% into the left margin. -% DO NOT TRY to change any of the dimensions -% yourself. You will probably confuse the style file. -% -% \name{text} defines your name -% -% \address{text} -% defines your address -% this can be called twice if you have two addresses -% use \\'s to indicate where either line breaks or -% comas should go -% -% \opening this prints your name and address at that spot -% this is not normally needed, as \begin{resume} -% does this but is provided just in case you need -% to do something odd -% -% \begin{resume} ... \end{resume} -% all of the resume should go inside of this -% environment -% -% \section{text} -% This prints 'text' in the left hand margin. -% Its exact placement depends on what the style -% options has been set to. (overlapped or margin) -% You should use \\ to start a new line. If the -% style option is margin, the \\ is converted -% to a space. -% To use this in any of the list environments, put -% the \section after the \item[] but before the -% text. -% Eg. -% \begin{itemize} -% \item\section{text} -% text -% \end{itemize} -% -% \begin{ncolumn}{n} ... \end{ncolumn} -% creates a tabular environment with n equally -% spaced columns. Separate columns by & and -% end them with \\ -% -% \begin{position} ... \end{position} -% this is used to print a job description. There should -% be only one job description in it. Information -% related to the job (such as title, dates...) will -% be printed. -% -% \begin{format} ... \end{format} -% used to change the default format for the position -% environment. Within it the recognized commands are: -% \title{option} -% \employer{option} -% \location{option} -% \dates{option} -% \body -% \\ -% where option is one of l,r,c standing for left, right, center. -% The format will eventually be used to make several -% tabular environments and you are defining the number of columns -% and the placement of text within the columns of the tabulars. -% Each row is terminated by a \\. Any number of options can -% be on a line, they will each be set in their own columns. -% Any of the options except \body may be left out. -% -% Eg. -% \begin{format} -% \title{l}\employer{r}\\ -% \dates{r}\\ -% \body\\ -% \location{l}\\ -% \end{format} -% -% In this example the title and employer information -% are set in 2 columns left justified and right justified -% respectively. Then the date is set right justified. -% Then the body is set. Then the location is set left -% justified. -% -% \employer{text} -% \title{text} -% \dates{text} -% \location{text} -% declare text for the next invocation of the position -% environment -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Glue -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% sectionskip the amount of horizontal before a section -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Dimensions -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% sectionwidth the amount that the section titles go in the -% left margin -% -% resumewidth the width of the total resume from the left -% margin to the right. Don't use textwidth -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Definitions -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% sectionfont the font used to print section titles -% use \renewcommand to change it -% -% namefont the font used to print your name -% use \renewcommand to change it -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% THINGS TO DO -% -% add lm,rm options to format style to allow things to be placed -% in the left or right margin respectivly -% -% add capability so that \body doesn't have to be proceeded (followed) -% by a \\ allowing part of the description (eg. location) to be the -% first (last) thing of the body -% -% clean up the list building procedures -% -% write docs to tell people how to use this - -\NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesClass{res}[2000/05/19 v1.4b Resume class] - -%\DeclareOption{11pt}{\renewcommand\@ptsize{1}} -%\DeclareOption{12pt}{\renewcommand\@ptsize{2}} - -\PassOptionsToClass{11pt,12pt}{article} -\LoadClassWithOptions{article} - -\newif\if@line -\newif\if@margin - -\DeclareOption{line}{\@linetrue} -\DeclareOption{centered}{\@linefalse} - -\DeclareOption{margin}{\@margintrue} -\DeclareOption{overlapped}{\@marginfalse} - -\ExecuteOptions{overlapped,centered} -\ProcessOptions\relax - -\nofiles % resume's don't need .aux files - - -\newtoks\tabular@text % holds the current list being processed -\newtoks\tabular@head % holds the head tabular list -\newtoks\tabular@tail % holds the tail tabular list -\newtoks\@ta % used by \@append -\newtoks\undefined@token\undefined@token={} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% prints a centered name with the address centered -% or the two address on opposite sides of the page -% -\def\@printcentername{\begingroup - % print the name centered - \leavevmode\hbox to \textwidth{\hfil\@tablebox{\namefont\@name}\hfil}\par - \@ifundefined{@addressone}{% - % do nothing - }{% - \@ifundefined{@addresstwo}{ - % only one address - \leavevmode\hbox to \textwidth{\hfil\@tablebox{\@addressone}\hfil}\par - }{ - % two addresses - \leavevmode\hbox to \textwidth{\@tablebox{\@addressone}\hfil - \@tablebox{\@addresstwo}}\par - }% - }% -\endgroup} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% this is used to print the name and address at the top of -% the page with a hline in between -% -\def\namefont{\large\bf} -\def\@linename{\begingroup - \def\\{, } - {\namefont\@name} - \vskip 2pt - \fullline - \vskip 2pt - % where do you live? - \@ifundefined{@addressone}{% - % do nothing - }{% - \leavevmode\hbox to \textwidth - {\hfill\vbox{\hbox{\@addressone} - \hbox{\@addresstwo} - }% - }\par - } -\endgroup} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% HEADINGS: -% There are two types of headings: -% 1) one with the name centered and the address centered or -% in the left and right side if there are two address -% 2) one where the name is in the upper left corner -% the a line accross the paper -% then the address all on one line in the right corner -% the second address will be directly below the first if defined -% -\let\print@name\relax -\def\ds@centered{\ifx\print@name\relax\let\print@name\@printcentername\fi} -\def\ds@line{\ifx\print@name\relax\let\print@name\@linename\fi} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Use this to set the sectionwidth. -% It adjust the width of the text as well as the hoffset -% You probably shouldn't touch any of the size paramaters -% unless you really understand all of this but it is not -% hard. Either way, it can only be executed once -% -\def\sectionfont{\bf} -\newdimen\sectionwidth -\newskip\sectionskip -\newdimen\resumewidth - -\resumewidth=6.5in -\sectionskip=3.5ex plus 1ex minus -.2ex % values stolen from LaTeX - -\def\newsectionwidth#1{% - \sectionwidth=#1 - \textwidth=\resumewidth - \advance\textwidth-\sectionwidth - \hsize=\textwidth - \hoffset=\sectionwidth -} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% This is for sectiontitles that are entirely in the left margin. -% multiline sectiontitles are permited and will be broken by -% \TeX{} to fit into a box \verb|\sectionwidth| wide. It is advised -% that \verb|\\| be used to break the lines by hand as \TeX{} will -% probably not do what you want. -% -% When using this with {\tt tabbing} and {\tt list} (or anything -% that is made out of {\tt list}) put the \section's inside of -% the \verb|\begin{}| and the \verb|\item|Eg. -% \begin{verbatim} -% \begin{trivlist} -% \item[] -% \section{foo} -% text -% \end{trivlist} -% \end{verbatim} -% -\def\boxed@sectiontitle#1{% - % this macro may be called in a tabular. Special code must be written - % to accomodate this. In LaTeX, a tabular is made out of hboxes. - % TeX never goes into horizontal mode because of this; it only - % gets into vertical mode and restricted horizontal mode. Certain - % indenting problems must be handled because of this. They - % are delt with at the end of this routine. - % It is also necessary to close the hbox that was created before - % the \section and create a new one when this macro has ended. - % This macro therefore simulates a \kill, so that any text before - % the \section not be printed. The proper use is therefore - % ... - % text\\ - % \section{foo} - % more text\\ - % ... - \ifx\\\@tabcr % is this in a tabular? (this *should* work but is a cludge) - \@stopfield % the is the first part of a \kill - \else - \@@par % This will end the previous paragraph if needed and - % go into vertical mode. If this was already in - % vertical mode then the \par does nothing. - - \fi - \begingroup - \everypar={}% - \def\par{\@@par}% - \let\\=\@normalcr - \addpenalty{\@secpenalty} % this would be a good place for a page break - % \@secpenalty is what LaTeX uses before its - % section's. It happens to be -300 - \addvspace{\sectionskip} % put in a bit of glue - % The following hbox will be contributed to the page list without going - % into horizontal mode. Therefore, any \parindent's, \parshape's, \leftskip - % will be ignored but \hoffset's are not. The result is that the box will - % only by \hoffset. This is what I want - \hbox to 0pt{% - \hss % this is an llap. In other words, this glue - % will shrink by the width of the stuff in the vbox - % (\sectionwidth) into the left margin and then - % insert the contents of the vbox. - \vtop to 0pt{% make a 0pt height paragraph, with the baseline at the - % lined up with the baseline of the first box in the list - \leftskip=0pt - \hsize=\sectionwidth - \textwidth=\sectionwidth - \raggedright % you don't want this filled out to the right margin - \sectionfont - #1\vss % Go into horizontal mode; do the paragraph; - % go into vertical mode; add some negative glue - % to give a box of 0pt height and depth - }% - }% - \addpenalty{-\@secpenalty} % this would be a bad place for a page break - \vskip-\baselineskip % when the next box is processed, baselineskip glue - % glue will be added (the box has no depth because of - % the \vss; therefore, we don't have to worry about - % \lineskiplimit). This -\baselineskip glue - % is to undo this. \nointerlineskip doesn't - % work because the baseline of this line would be lined - % up with the top of the top of the next box. We - % want the baselines lined up. - % - % It may have been possible to do this by forcing the - % baseline of this box to be the top of the box but - % then the interline skip between this box and the - % previous box would be off as the baselines of the - % this box (the one that being made above) and the - % previous line would be separated by \baselineskip - % (probably, it may be separted by the depth of the - % previous box + \lineskip) but as the baseline of - % this box has been moved to the top, the box's would - % separted by to much glue. The exact amount being - % the height of this box. - \endgroup - \ifx\\\@tabcr % is this in a tabular? (this *should* work but is a cludge) - % this is the second part of the \kill; it starts the next tabbing line - % Because this routine will never get into paragraph mode when used in - % tabbing the \parskip that is discussed below will never be inserted. - % Therefore it should not be negated as done below. - \@startline - \ignorespaces - \else - \vskip-\parskip % The next thing to be contributed will be a paragraph. - % Right before being contributed though a \vskip\parskip - % will be inserted. This is to negate it. - % - % I do consider this to be a bit of a cludge but - % I can not find a way to write \unskipfutureskip - % or a way to make TeX think that nothing has - % been contributed to the page list. - \fi -} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% This is for sectiontitles that are entirely above the section text -% -\def\unboxed@sectiontitle#1{% - \ifx\\\@tabcr % see boxed@sectiontitle for explation - \@stopfield - \else - \@@par - \fi - \begingroup - \everypar={}% - \def\par{\@@par}% - \def\\{ } - \addpenalty{\@secpenalty} - \addvspace{\sectionskip} - \hbox to 0pt{\hss\hbox to \sectionwidth{\sectionfont#1\hss}} - \addpenalty{-\@secpenalty} % this would be a bad place for a page break - \endgroup - \ifx\\\@tabcr % see boxed@sectiontitle for explation - \@startline - \else - \vskip-\parskip - \fi - \ignorespaces -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% There are two types of section headings: -% 1) the section heading is all on one line and directly -% below it, is the body of the text -% 2) the section heading is entirely in the left margin -% (possibly taking multiple lines) with the body of -% the text next to it -% -\let\@@section\relax -\def\ds@overlapped{\ifx\@@section\relax\newsectionwidth{0.5in}\let - \@@section\unboxed@sectiontitle\fi} -\def\ds@margin{\ifx\@@section\relax\newsectionwidth{1.3in}\let - \@@section\boxed@sectiontitle\fi} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% DEFAULTS: (some of them) -% -% centered name -% overlapped section titles -% -% format is: -% title employer -% location dates -% body -% with everything in the left of its column - -%\input article.sty - -\if@line\ds@line\else\ds@centered\fi -\if@margin\ds@margin\else\ds@overlapped\fi - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% typeset resume all nice and pretty -% -\def\Resume{{R\'{e}sum\'{e}}} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% makes a line of width \textwidth starting at -\hoffset -% -\def\fullline{ % hrules only listen to \hoffset - \nointerlineskip % so I have this code - \moveleft\hoffset\vbox{\hrule width\textwidth} - \nointerlineskip -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% create a multiline box. -% -\def\@tablebox#1{\begin{tabular}[t]{@{}l@{\extracolsep{\fill}}}#1\end{tabular}} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% use this to define your name -% -\def\name#1{\def\@name{#1}} - -\def\@name{} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% use this to define your address, this may be called more than once. -% -\let\@addressone\relax -\let\@addresstwo\relax - -\def\address#1{ - \@ifundefined{@addressone}{\def\@addressone{#1}}{\def\@addresstwo{#1}}} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% if you want to print your name and address is a slightly -% different format than sugessted, then this can be used -% to place it exactly where you want -% -\def\opening{\def\@opening{} - \begingroup - \leftskip=-\hoffset % I use leftskip to move things to the left as - \advance\textwidth\hoffset % changing hoffset doesn't work. But this - \hsize=\textwidth % doesn't really work as hboxes are rules - % are unaffeted - \let\par=\@@par - \parindent=0pt - \parskip=0pt - \print@name - \endgroup -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% all of the resume goes in the resume environment -% -\newenvironment{resume}{\begingroup - \@ifundefined{@opening}{\opening}{} -}{\endgroup} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% gives you a tabular environment with n equally spaced columns -% \begin{ncolumn}{#} ... \end{ncolumn} -% -% The p option of LaTeX is broken in all but the newest verion -% of latex.tex, this is how to fix it -% -\def\@endpbox{\par\egroup\hfil} -\let\@@endpbox=\@endpbox - -\newdimen\@columnwidth % the width of each column equal to -\def\ncolumn#1{% - % \@columnwidth = \textwidth / #1 - \@columnwidth=\textwidth \divide\@columnwidth by #1 - \begin{tabular*}{\textwidth}[t]% - {*{#1}{@{}p{\@columnwidth}@{\extracolsep{\fill}}}} -} - -\def\endncolumn{\end{tabular*}} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \employer{text} defines employer to be text -% \location{text} defines location to be text -% \dates{text} defines dates to be text -% \title{text} defines title to be text -% \body -% - -\def\employer#1{\def\@employer{\print@employer{#1}}} -\def\location#1{\def\@location{\print@location{#1}}} -\def\dates#1{\def\@dates{\print@dates{#1}}} -\def\title#1{\def\@title{\print@title{#1}}} - -\let\l@justify\raggedright -\let\r@justify\raggedleft -\let\c@justify\centering - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \@format{name}{justify} -% will define \print@#1 to print it's one argument -% justified according to #2 which can be -% l = left -% r = right -% c = center -% -% eg. -% \@format{employer}{c} -% is the same as \def\print@employer#1{{\centering #1\par}} -% -\def\@format#1#2{% - \expandafter\gdef\csname print@#1\endcsname##1{% - {\csname#2@justify\endcsname##1\par}} -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% this is used to define how the position environment should -% formated. -% -% \begin{format} positioning text \end{format} -% where positioning text may be -% \employer{pos} -% \location{pos} -% \dates{pos} -% \title{pos} -% \body (for the body of the position environment) -% where pos is -% l for left -% r for right -% c for center -% use \\ to break the line -% you don't have to use all of the options. -% on any one line, you should indicate what you want on that line -% and where it should go within its column. -% eg. -% the following prints the employer in the left with the location -% centered within that its column. It then prints the date on the -% right. Then it prints the body of the position environment. Then -% it prints the title centered within its column; as there is only -% one column here it is really just centered. -% -% \begin{format} -% \employer{l}\location{c}\\ -% \dates{r}\\ -% \body\\ -% \title{c}\\ -% \end{format} - -\newcounter{numberofcolumns} -\newenvironment{format}{% - \def\end@line@head{\append@tabular@head{tabular@text}\tabular@text={}% - \c@numberofcolumns 0} - \def\end@line@tail{\append@tabular@tail{tabular@text}\tabular@text={}% - \c@numberofcolumns 0} - \tabular@text={} - \tabular@head={} - \tabular@tail={} - \c@numberofcolumns 0 - \let\\=\end@line@head - \def\employer##1{\advance\c@numberofcolumns 1 - \@format{employer}{##1} - \append@tabular@text{employer}} - \def\location##1{\advance\c@numberofcolumns 1 - \@format{location}{##1} - \append@tabular@text{location}} - \def\dates##1{\advance\c@numberofcolumns 1 - \@format{dates}{##1} - \append@tabular@text{dates}} - \def\title##1{\advance\c@numberofcolumns 1 - \@format{title}{##1} - \append@tabular@text{title}} - \def\body{\iftoks\tabular@head\undefined@token\then - \else - \@append{\noexpand\\}\to\tabular@head - \skotfi - \let\\=\end@line@tail}}{} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%taken from page 378 of TeXbook but freely hacked -% -% appends the expansion of #1 to the token list #2 - -\def\@append#1\to#2{% - \@ta=\expandafter{#1}% - \xdef\@append@temp{\the#2\the\@ta} - \global#2=\expandafter{\@append@temp}% -} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% CHAA006%vaxb.rhbnc.ac.uk@NSS.Cs.Ucl.AC.UK -% texhax.88.078 -% is used to see if two token lists are equal -% there must be a better way -% - -\let \then = \empty -\def \iftoks #1#2\then #3\else #4\skotfi{ - \edef \1{\the #1} - \edef \2{\the #2} - \ifx \1\2\then #3\else #4\fi} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \append@tabular@text{command} -% -% appends command to the end of \tabular@text. -% NOTE: command MUST be a command but without the \ -% Eg. \append@tabular@text{relax} -% -% used to define \tabular@text for the tabular environment -% used by append@tabular@head and append@tabular@tail -% - -\def\append@tabular@text#1{% -\iftoks\tabular@text\undefined@token\then - \global\tabular@text=\expandafter{\csname @#1\endcsname} -\else - \@append{&}\to\tabular@text - \@append{\csname @#1\endcsname}\to\tabular@text -\skotfi -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% append@tabular@head -% -% appends command to the end of \tabular@text@head -% NOTE: command MUST be a command but without the \ -% Eg. \append@tabular@head{relax} -% -% used to define \tabular@head for the tabular environment -% used by the position environment -% -\def\append@tabular@head#1{% - \ifnum\the\c@numberofcolumns=0\relax - \else - \iftoks\tabular@head\undefined@token\then - \relax - \else - \@append{\noexpand\\}\to\tabular@head - \@append{\noexpand\penalty-\@secpenalty}\to\tabular@head - \skotfi - \@append{\noexpand\begin{ncolumn}}\to\tabular@head - \@append{\expandafter{\the\c@numberofcolumns}}\to\tabular@head - \@append{\the\csname#1\endcsname}\to\tabular@head - \@append{\noexpand\end{ncolumn}}\to\tabular@head - \fi -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% append@tabular@tail -% -% appends command to the end of \tabular@text@htail -% NOTE: command MUST be a command but without the \ -% Eg. \append@tabular@tail{relax} -% -% used to define \tabular@tail for the tabular environment -% used by the position environment -% -\def\append@tabular@tail#1{% - \ifnum\the\c@numberofcolumns=0\relax - \else - \iftoks\tabular@tail\undefined@token\then - \else - \@append{\noexpand\\}\to\tabular@tail - \@append{\noexpand\penalty-\@secpenalty}\to\tabular@tail - \skotfi - \@append{\noexpand\begin{ncolumn}}\to\tabular@tail - \@append{\expandafter{\the\c@numberofcolumns}}\to\tabular@tail - \@append{\the\csname#1\endcsname}\to\tabular@tail - \@append{\noexpand\end{ncolumn}}\to\tabular@tail - \fi -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% put the actual job descriptions here -% \begin{postion} ... \end{position} -% in the ... describe the position. -% don't put the \dates \location etc in here. define them before hand -\newenvironment{position}% - {% - \begingroup - \par - \the\tabular@head -% \addpenalty{-\@secpenalty}% bad place for a page break - \penalty -\@secpenalty % bad place for a page break - \penalty 10000 - \ignorespaces - }{% - \the\tabular@tail -% \addpenalty{\@secpenalty}% good place for a page break - \penalty \@secpenalty % good place for a page break - \endgroup -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% DEFAULTS: (the rest of them) -% -% centered name -% overlapped section titles -% -% format is: -% title employer -% location dates -% body -% with everything in the left of its column - -\@secpenalty = -500 -\topmargin 0pt -\headheight 0pt -\headsep 0pt -\textheight 9in -\parindent 0pt -\topmargin 0in -\oddsidemargin 0pt -\evensidemargin 0pt -\marginparwidth 0pt -\parindent 0pt -\parskip \baselineskip -\setcounter{secnumdepth}{0} -\def\@listI{\leftmargin\leftmargini -\topsep 0pt -\parskip 0pt -\partopsep 2pt plus 2pt -\parsep 2pt plus 2pt -\itemsep \parsep} - -\pagestyle{empty} % don't want page numbers - -\begin{format} -\title{l}\employer{r}\\ -\location{l}\dates{r}\\ -\body\\ -\end{format} - -\let\section\@@section +% RESUME DOCUMENT STYLE -- Released 23 Nov 1989 +% for LaTeX version 2.09 +% Copyright (C) 1988,1989 by Michael DeCorte + +\typeout{Document Style `res' <26 Sep 89>.} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% res.sty +% +% \documentstyle{res} +% +% Copyright (c) 1988 by Michael DeCorte +% Permission to copy all or part of this work is granted, provided +% that the copies are not made or distributed for resale, and that +% the copyright notice and this notice are retained. +% +% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO +% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK, +% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS +% FOR ANY PARTICULAR PURPOSE. +% +% If you make any improvements, I'd like to hear about them. +% +% Michael DeCorte +% P.O. Box 652 +% Potsdam NY 13676 +% mrd@sun.soe.clarkson.edu +% mrd@clutx.bitnet +% +% Changes for LaTeX2e -- Venkat Krishnamurthy (Aug 7, 2001) +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% You can have multiple style options the legal options ones are: +% +% centered the name and address are centered at the top of the +% page (default) +% +% line the name is the left with a horizontal line then +% the address to the right +% +% overlapped the section titles overlap the body text (default) +% +% margin the section titles are to the left of the body text +% +% 11pt use 11 point fonts instead of 10 point fonts +% +% 12pt use 12 point fonts instead of 10 point fonts +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Commands +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \Resume prints the word resume but typeset nicely +% +% \newsectionwidth{dimen} +% defines the amount of space the labels extend +% into the left margin. +% DO NOT TRY to change any of the dimensions +% yourself. You will probably confuse the style file. +% +% \name{text} defines your name +% +% \address{text} +% defines your address +% this can be called twice if you have two addresses +% use \\'s to indicate where either line breaks or +% comas should go +% +% \opening this prints your name and address at that spot +% this is not normally needed, as \begin{resume} +% does this but is provided just in case you need +% to do something odd +% +% \begin{resume} ... \end{resume} +% all of the resume should go inside of this +% environment +% +% \section{text} +% This prints 'text' in the left hand margin. +% Its exact placement depends on what the style +% options has been set to. (overlapped or margin) +% You should use \\ to start a new line. If the +% style option is margin, the \\ is converted +% to a space. +% To use this in any of the list environments, put +% the \section after the \item[] but before the +% text. +% Eg. +% \begin{itemize} +% \item\section{text} +% text +% \end{itemize} +% +% \begin{ncolumn}{n} ... \end{ncolumn} +% creates a tabular environment with n equally +% spaced columns. Separate columns by & and +% end them with \\ +% +% \begin{position} ... \end{position} +% this is used to print a job description. There should +% be only one job description in it. Information +% related to the job (such as title, dates...) will +% be printed. +% +% \begin{format} ... \end{format} +% used to change the default format for the position +% environment. Within it the recognized commands are: +% \title{option} +% \employer{option} +% \location{option} +% \dates{option} +% \body +% \\ +% where option is one of l,r,c standing for left, right, center. +% The format will eventually be used to make several +% tabular environments and you are defining the number of columns +% and the placement of text within the columns of the tabulars. +% Each row is terminated by a \\. Any number of options can +% be on a line, they will each be set in their own columns. +% Any of the options except \body may be left out. +% +% Eg. +% \begin{format} +% \title{l}\employer{r}\\ +% \dates{r}\\ +% \body\\ +% \location{l}\\ +% \end{format} +% +% In this example the title and employer information +% are set in 2 columns left justified and right justified +% respectively. Then the date is set right justified. +% Then the body is set. Then the location is set left +% justified. +% +% \employer{text} +% \title{text} +% \dates{text} +% \location{text} +% declare text for the next invocation of the position +% environment +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Glue +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% sectionskip the amount of horizontal before a section +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Dimensions +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% sectionwidth the amount that the section titles go in the +% left margin +% +% resumewidth the width of the total resume from the left +% margin to the right. Don't use textwidth +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Definitions +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% sectionfont the font used to print section titles +% use \renewcommand to change it +% +% namefont the font used to print your name +% use \renewcommand to change it +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% THINGS TO DO +% +% add lm,rm options to format style to allow things to be placed +% in the left or right margin respectivly +% +% add capability so that \body doesn't have to be proceeded (followed) +% by a \\ allowing part of the description (eg. location) to be the +% first (last) thing of the body +% +% clean up the list building procedures +% +% write docs to tell people how to use this + +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{res}[2000/05/19 v1.4b Resume class] + +%\DeclareOption{11pt}{\renewcommand\@ptsize{1}} +%\DeclareOption{12pt}{\renewcommand\@ptsize{2}} + +\PassOptionsToClass{11pt,12pt}{article} +\LoadClassWithOptions{article} + +\newif\if@line +\newif\if@margin + +\DeclareOption{line}{\@linetrue} +\DeclareOption{centered}{\@linefalse} + +\DeclareOption{margin}{\@margintrue} +\DeclareOption{overlapped}{\@marginfalse} + +\ExecuteOptions{overlapped,centered} +\ProcessOptions\relax + +\nofiles % resume's don't need .aux files + + +\newtoks\tabular@text % holds the current list being processed +\newtoks\tabular@head % holds the head tabular list +\newtoks\tabular@tail % holds the tail tabular list +\newtoks\@ta % used by \@append +\newtoks\undefined@token\undefined@token={} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% prints a centered name with the address centered +% or the two address on opposite sides of the page +% +\def\@printcentername{\begingroup + % print the name centered + \leavevmode\hbox to \textwidth{\hfil\@tablebox{\namefont\@name}\hfil}\par + \@ifundefined{@addressone}{% + % do nothing + }{% + \@ifundefined{@addresstwo}{ + % only one address + \leavevmode\hbox to \textwidth{\hfil\@tablebox{\@addressone}\hfil}\par + }{ + % two addresses + \leavevmode\hbox to \textwidth{\@tablebox{\@addressone}\hfil + \@tablebox{\@addresstwo}}\par + }% + }% +\endgroup} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% this is used to print the name and address at the top of +% the page with a hline in between +% +\def\namefont{\large\bf} +\def\@linename{\begingroup + \def\\{, } + {\namefont\@name} + \vskip 2pt + \fullline + \vskip 2pt + % where do you live? + \@ifundefined{@addressone}{% + % do nothing + }{% + \leavevmode\hbox to \textwidth + {\hfill\vbox{\hbox{\@addressone} + \hbox{\@addresstwo} + }% + }\par + } +\endgroup} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% HEADINGS: +% There are two types of headings: +% 1) one with the name centered and the address centered or +% in the left and right side if there are two address +% 2) one where the name is in the upper left corner +% the a line accross the paper +% then the address all on one line in the right corner +% the second address will be directly below the first if defined +% +\let\print@name\relax +\def\ds@centered{\ifx\print@name\relax\let\print@name\@printcentername\fi} +\def\ds@line{\ifx\print@name\relax\let\print@name\@linename\fi} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Use this to set the sectionwidth. +% It adjust the width of the text as well as the hoffset +% You probably shouldn't touch any of the size paramaters +% unless you really understand all of this but it is not +% hard. Either way, it can only be executed once +% +\def\sectionfont{\bf} +\newdimen\sectionwidth +\newskip\sectionskip +\newdimen\resumewidth + +\resumewidth=6.5in +\sectionskip=3.5ex plus 1ex minus -.2ex % values stolen from LaTeX + +\def\newsectionwidth#1{% + \sectionwidth=#1 + \textwidth=\resumewidth + \advance\textwidth-\sectionwidth + \hsize=\textwidth + \hoffset=\sectionwidth +} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is for sectiontitles that are entirely in the left margin. +% multiline sectiontitles are permited and will be broken by +% \TeX{} to fit into a box \verb|\sectionwidth| wide. It is advised +% that \verb|\\| be used to break the lines by hand as \TeX{} will +% probably not do what you want. +% +% When using this with {\tt tabbing} and {\tt list} (or anything +% that is made out of {\tt list}) put the \section's inside of +% the \verb|\begin{}| and the \verb|\item|Eg. +% \begin{verbatim} +% \begin{trivlist} +% \item[] +% \section{foo} +% text +% \end{trivlist} +% \end{verbatim} +% +\def\boxed@sectiontitle#1{% + % this macro may be called in a tabular. Special code must be written + % to accomodate this. In LaTeX, a tabular is made out of hboxes. + % TeX never goes into horizontal mode because of this; it only + % gets into vertical mode and restricted horizontal mode. Certain + % indenting problems must be handled because of this. They + % are delt with at the end of this routine. + % It is also necessary to close the hbox that was created before + % the \section and create a new one when this macro has ended. + % This macro therefore simulates a \kill, so that any text before + % the \section not be printed. The proper use is therefore + % ... + % text\\ + % \section{foo} + % more text\\ + % ... + \ifx\\\@tabcr % is this in a tabular? (this *should* work but is a cludge) + \@stopfield % the is the first part of a \kill + \else + \@@par % This will end the previous paragraph if needed and + % go into vertical mode. If this was already in + % vertical mode then the \par does nothing. + + \fi + \begingroup + \everypar={}% + \def\par{\@@par}% + \let\\=\@normalcr + \addpenalty{\@secpenalty} % this would be a good place for a page break + % \@secpenalty is what LaTeX uses before its + % section's. It happens to be -300 + \addvspace{\sectionskip} % put in a bit of glue + % The following hbox will be contributed to the page list without going + % into horizontal mode. Therefore, any \parindent's, \parshape's, \leftskip + % will be ignored but \hoffset's are not. The result is that the box will + % only by \hoffset. This is what I want + \hbox to 0pt{% + \hss % this is an llap. In other words, this glue + % will shrink by the width of the stuff in the vbox + % (\sectionwidth) into the left margin and then + % insert the contents of the vbox. + \vtop to 0pt{% make a 0pt height paragraph, with the baseline at the + % lined up with the baseline of the first box in the list + \leftskip=0pt + \hsize=\sectionwidth + \textwidth=\sectionwidth + \raggedright % you don't want this filled out to the right margin + \sectionfont + #1\vss % Go into horizontal mode; do the paragraph; + % go into vertical mode; add some negative glue + % to give a box of 0pt height and depth + }% + }% + \addpenalty{-\@secpenalty} % this would be a bad place for a page break + \vskip-\baselineskip % when the next box is processed, baselineskip glue + % glue will be added (the box has no depth because of + % the \vss; therefore, we don't have to worry about + % \lineskiplimit). This -\baselineskip glue + % is to undo this. \nointerlineskip doesn't + % work because the baseline of this line would be lined + % up with the top of the top of the next box. We + % want the baselines lined up. + % + % It may have been possible to do this by forcing the + % baseline of this box to be the top of the box but + % then the interline skip between this box and the + % previous box would be off as the baselines of the + % this box (the one that being made above) and the + % previous line would be separated by \baselineskip + % (probably, it may be separted by the depth of the + % previous box + \lineskip) but as the baseline of + % this box has been moved to the top, the box's would + % separted by to much glue. The exact amount being + % the height of this box. + \endgroup + \ifx\\\@tabcr % is this in a tabular? (this *should* work but is a cludge) + % this is the second part of the \kill; it starts the next tabbing line + % Because this routine will never get into paragraph mode when used in + % tabbing the \parskip that is discussed below will never be inserted. + % Therefore it should not be negated as done below. + \@startline + \ignorespaces + \else + \vskip-\parskip % The next thing to be contributed will be a paragraph. + % Right before being contributed though a \vskip\parskip + % will be inserted. This is to negate it. + % + % I do consider this to be a bit of a cludge but + % I can not find a way to write \unskipfutureskip + % or a way to make TeX think that nothing has + % been contributed to the page list. + \fi +} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is for sectiontitles that are entirely above the section text +% +\def\unboxed@sectiontitle#1{% + \ifx\\\@tabcr % see boxed@sectiontitle for explation + \@stopfield + \else + \@@par + \fi + \begingroup + \everypar={}% + \def\par{\@@par}% + \def\\{ } + \addpenalty{\@secpenalty} + \addvspace{\sectionskip} + \hbox to 0pt{\hss\hbox to \sectionwidth{\sectionfont#1\hss}} + \addpenalty{-\@secpenalty} % this would be a bad place for a page break + \endgroup + \ifx\\\@tabcr % see boxed@sectiontitle for explation + \@startline + \else + \vskip-\parskip + \fi + \ignorespaces +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% There are two types of section headings: +% 1) the section heading is all on one line and directly +% below it, is the body of the text +% 2) the section heading is entirely in the left margin +% (possibly taking multiple lines) with the body of +% the text next to it +% +\let\@@section\relax +\def\ds@overlapped{\ifx\@@section\relax\newsectionwidth{0.5in}\let + \@@section\unboxed@sectiontitle\fi} +\def\ds@margin{\ifx\@@section\relax\newsectionwidth{1.3in}\let + \@@section\boxed@sectiontitle\fi} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% DEFAULTS: (some of them) +% +% centered name +% overlapped section titles +% +% format is: +% title employer +% location dates +% body +% with everything in the left of its column + +%\input article.sty + +\if@line\ds@line\else\ds@centered\fi +\if@margin\ds@margin\else\ds@overlapped\fi + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% typeset resume all nice and pretty +% +\def\Resume{{R\'{e}sum\'{e}}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% makes a line of width \textwidth starting at -\hoffset +% +\def\fullline{ % hrules only listen to \hoffset + \nointerlineskip % so I have this code + \moveleft\hoffset\vbox{\hrule width\textwidth} + \nointerlineskip +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% create a multiline box. +% +\def\@tablebox#1{\begin{tabular}[t]{@{}l@{\extracolsep{\fill}}}#1\end{tabular}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% use this to define your name +% +\def\name#1{\def\@name{#1}} + +\def\@name{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% use this to define your address, this may be called more than once. +% +\let\@addressone\relax +\let\@addresstwo\relax + +\def\address#1{ + \@ifundefined{@addressone}{\def\@addressone{#1}}{\def\@addresstwo{#1}}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% if you want to print your name and address is a slightly +% different format than sugessted, then this can be used +% to place it exactly where you want +% +\def\opening{\def\@opening{} + \begingroup + \leftskip=-\hoffset % I use leftskip to move things to the left as + \advance\textwidth\hoffset % changing hoffset doesn't work. But this + \hsize=\textwidth % doesn't really work as hboxes are rules + % are unaffeted + \let\par=\@@par + \parindent=0pt + \parskip=0pt + \print@name + \endgroup +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% all of the resume goes in the resume environment +% +\newenvironment{resume}{\begingroup + \@ifundefined{@opening}{\opening}{} +}{\endgroup} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% gives you a tabular environment with n equally spaced columns +% \begin{ncolumn}{#} ... \end{ncolumn} +% +% The p option of LaTeX is broken in all but the newest verion +% of latex.tex, this is how to fix it +% +\def\@endpbox{\par\egroup\hfil} +\let\@@endpbox=\@endpbox + +\newdimen\@columnwidth % the width of each column equal to +\def\ncolumn#1{% + % \@columnwidth = \textwidth / #1 + \@columnwidth=\textwidth \divide\@columnwidth by #1 + \begin{tabular*}{\textwidth}[t]% + {*{#1}{@{}p{\@columnwidth}@{\extracolsep{\fill}}}} +} + +\def\endncolumn{\end{tabular*}} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \employer{text} defines employer to be text +% \location{text} defines location to be text +% \dates{text} defines dates to be text +% \title{text} defines title to be text +% \body +% + +\def\employer#1{\def\@employer{\print@employer{#1}}} +\def\location#1{\def\@location{\print@location{#1}}} +\def\dates#1{\def\@dates{\print@dates{#1}}} +\def\title#1{\def\@title{\print@title{#1}}} + +\let\l@justify\raggedright +\let\r@justify\raggedleft +\let\c@justify\centering + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \@format{name}{justify} +% will define \print@#1 to print it's one argument +% justified according to #2 which can be +% l = left +% r = right +% c = center +% +% eg. +% \@format{employer}{c} +% is the same as \def\print@employer#1{{\centering #1\par}} +% +\def\@format#1#2{% + \expandafter\gdef\csname print@#1\endcsname##1{% + {\csname#2@justify\endcsname##1\par}} +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% this is used to define how the position environment should +% formated. +% +% \begin{format} positioning text \end{format} +% where positioning text may be +% \employer{pos} +% \location{pos} +% \dates{pos} +% \title{pos} +% \body (for the body of the position environment) +% where pos is +% l for left +% r for right +% c for center +% use \\ to break the line +% you don't have to use all of the options. +% on any one line, you should indicate what you want on that line +% and where it should go within its column. +% eg. +% the following prints the employer in the left with the location +% centered within that its column. It then prints the date on the +% right. Then it prints the body of the position environment. Then +% it prints the title centered within its column; as there is only +% one column here it is really just centered. +% +% \begin{format} +% \employer{l}\location{c}\\ +% \dates{r}\\ +% \body\\ +% \title{c}\\ +% \end{format} + +\newcounter{numberofcolumns} +\newenvironment{format}{% + \def\end@line@head{\append@tabular@head{tabular@text}\tabular@text={}% + \c@numberofcolumns 0} + \def\end@line@tail{\append@tabular@tail{tabular@text}\tabular@text={}% + \c@numberofcolumns 0} + \tabular@text={} + \tabular@head={} + \tabular@tail={} + \c@numberofcolumns 0 + \let\\=\end@line@head + \def\employer##1{\advance\c@numberofcolumns 1 + \@format{employer}{##1} + \append@tabular@text{employer}} + \def\location##1{\advance\c@numberofcolumns 1 + \@format{location}{##1} + \append@tabular@text{location}} + \def\dates##1{\advance\c@numberofcolumns 1 + \@format{dates}{##1} + \append@tabular@text{dates}} + \def\title##1{\advance\c@numberofcolumns 1 + \@format{title}{##1} + \append@tabular@text{title}} + \def\body{\iftoks\tabular@head\undefined@token\then + \else + \@append{\noexpand\\}\to\tabular@head + \skotfi + \let\\=\end@line@tail}}{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%taken from page 378 of TeXbook but freely hacked +% +% appends the expansion of #1 to the token list #2 + +\def\@append#1\to#2{% + \@ta=\expandafter{#1}% + \xdef\@append@temp{\the#2\the\@ta} + \global#2=\expandafter{\@append@temp}% +} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% CHAA006%vaxb.rhbnc.ac.uk@NSS.Cs.Ucl.AC.UK +% texhax.88.078 +% is used to see if two token lists are equal +% there must be a better way +% + +\let \then = \empty +\def \iftoks #1#2\then #3\else #4\skotfi{ + \edef \1{\the #1} + \edef \2{\the #2} + \ifx \1\2\then #3\else #4\fi} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \append@tabular@text{command} +% +% appends command to the end of \tabular@text. +% NOTE: command MUST be a command but without the \ +% Eg. \append@tabular@text{relax} +% +% used to define \tabular@text for the tabular environment +% used by append@tabular@head and append@tabular@tail +% + +\def\append@tabular@text#1{% +\iftoks\tabular@text\undefined@token\then + \global\tabular@text=\expandafter{\csname @#1\endcsname} +\else + \@append{&}\to\tabular@text + \@append{\csname @#1\endcsname}\to\tabular@text +\skotfi +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% append@tabular@head +% +% appends command to the end of \tabular@text@head +% NOTE: command MUST be a command but without the \ +% Eg. \append@tabular@head{relax} +% +% used to define \tabular@head for the tabular environment +% used by the position environment +% +\def\append@tabular@head#1{% + \ifnum\the\c@numberofcolumns=0\relax + \else + \iftoks\tabular@head\undefined@token\then + \relax + \else + \@append{\noexpand\\}\to\tabular@head + \@append{\noexpand\penalty-\@secpenalty}\to\tabular@head + \skotfi + \@append{\noexpand\begin{ncolumn}}\to\tabular@head + \@append{\expandafter{\the\c@numberofcolumns}}\to\tabular@head + \@append{\the\csname#1\endcsname}\to\tabular@head + \@append{\noexpand\end{ncolumn}}\to\tabular@head + \fi +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% append@tabular@tail +% +% appends command to the end of \tabular@text@htail +% NOTE: command MUST be a command but without the \ +% Eg. \append@tabular@tail{relax} +% +% used to define \tabular@tail for the tabular environment +% used by the position environment +% +\def\append@tabular@tail#1{% + \ifnum\the\c@numberofcolumns=0\relax + \else + \iftoks\tabular@tail\undefined@token\then + \else + \@append{\noexpand\\}\to\tabular@tail + \@append{\noexpand\penalty-\@secpenalty}\to\tabular@tail + \skotfi + \@append{\noexpand\begin{ncolumn}}\to\tabular@tail + \@append{\expandafter{\the\c@numberofcolumns}}\to\tabular@tail + \@append{\the\csname#1\endcsname}\to\tabular@tail + \@append{\noexpand\end{ncolumn}}\to\tabular@tail + \fi +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% put the actual job descriptions here +% \begin{postion} ... \end{position} +% in the ... describe the position. +% don't put the \dates \location etc in here. define them before hand +\newenvironment{position}% + {% + \begingroup + \par + \the\tabular@head +% \addpenalty{-\@secpenalty}% bad place for a page break + \penalty -\@secpenalty % bad place for a page break + \penalty 10000 + \ignorespaces + }{% + \the\tabular@tail +% \addpenalty{\@secpenalty}% good place for a page break + \penalty \@secpenalty % good place for a page break + \endgroup +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% DEFAULTS: (the rest of them) +% +% centered name +% overlapped section titles +% +% format is: +% title employer +% location dates +% body +% with everything in the left of its column + +\@secpenalty = -500 +\topmargin 0pt +\headheight 0pt +\headsep 0pt +\textheight 9in +\parindent 0pt +\topmargin 0in +\oddsidemargin 0pt +\evensidemargin 0pt +\marginparwidth 0pt +\parindent 0pt +\parskip \baselineskip +\setcounter{secnumdepth}{0} +\def\@listI{\leftmargin\leftmargini +\topsep 0pt +\parskip 0pt +\partopsep 2pt plus 2pt +\parsep 2pt plus 2pt +\itemsep \parsep} + +\pagestyle{empty} % don't want page numbers + +\begin{format} +\title{l}\employer{r}\\ +\location{l}\dates{r}\\ +\body\\ +\end{format} + +\let\section\@@section diff --git a/public/templates/template7/collection.sty b/public/templates/template7/collection.sty index a4067bde..c4a937e7 100644 --- a/public/templates/template7/collection.sty +++ b/public/templates/template7/collection.sty @@ -1,85 +1,85 @@ -%% start of file `collection.sty'. -%% Copyright 2013-2013 Xavier Danaux (xdanaux@gmail.com). -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License version 1.3c, -% available at http://www.latex-project.org/lppl/. - - -%------------------------------------------------------------------------------- -% identification -%------------------------------------------------------------------------------- -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{collection}[2013/03/28 v1.0.0 collections] - - -%------------------------------------------------------------------------------- -% requirements -%------------------------------------------------------------------------------- - - -\RequirePackage{ifthen} - - -%------------------------------------------------------------------------------- -% code -%------------------------------------------------------------------------------- - -% creates a new collection -% usage: \collectionnew{<collection name>} -\newcommand*{\collectionnew}[1]{% - \newcounter{collection@#1@count}} - -% adds an item to a collection -% usage: \collectionadd[<optional key>]{<collection name>}{<item to add>} -\newcommand*{\collectionadd}[3][]{% - \expandafter\def\csname collection@#2@item\roman{collection@#2@count}\endcsname{#3}% - \if\relax\noexpand#1\relax% if #1 is empty - \else\expandafter\def\csname collection@#2@key\roman{collection@#2@count}\endcsname{#1}\fi% - \stepcounter{collection@#2@count}} - -% returns the number of items in a collection -% usage: \collectioncount{<collection name>} -\newcommand*{\collectioncount}[1]{% - \value{collection@#1@count}} - -% gets an item from a collection -% usage: \collectiongetitem{<collection name>}{<element id>} -% where <element id> is an integer between 0 and (collectioncount-1) -\newcommand*{\collectiongetitem}[2]{% - \csname collection@#1@item\romannumeral #2\endcsname} - -% gets a key from a collection -% usage: \collectiongetkey{<collection name>}{<element id>} -% where <element id> is an integer between 0 and (collectioncount-1) -\newcommand*{\collectiongetkey}[2]{% - \csname collection@#1@key\romannumeral #2\endcsname} - -% loops through a collection and perform the given operation on every element -% usage: \collectionloop{<collection name>}{<operation sequence>} -% where <operation sequence> is the code sequence to be evaluated for each collection item, -% code which can refer to \collectionloopid, \collectionloopkey, \collectionloopitem and -% \collectionloopbreak -\newcounter{collection@iterator} -\newcommand*{\collectionloopbreak}{\let\iterate\relax} -\newcommand*{\collectionloop}[2]{% - \setcounter{collection@iterator}{0}% - \loop\ifnum\value{collection@iterator}<\value{collection@#1@count}% - \def\collectionloopid{\arabic{collection@iterator}}% - \def\collectionloopitem{\collectiongetitem{#1}{\collectionloopid}}% - \def\collectionloopkey{\collectiongetkey{#1}{\collectionloopid}}% - #2% - \stepcounter{collection@iterator}% - \repeat} - -% loops through a collection and finds the (first) element matching the given key -% usage: \collectionfindbykey{<collection name>}{key>} -\newcommand*{\collectionfindbykey}[2]{% - \collectionloop{#1}{% - \ifthenelse{\equal{\collectionloopkey}{#2}}{\collectionloopitem\collectionloopbreak}{}}} - - -\endinput - - +%% start of file `collection.sty'. +%% Copyright 2013-2013 Xavier Danaux (xdanaux@gmail.com). +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License version 1.3c, +% available at http://www.latex-project.org/lppl/. + + +%------------------------------------------------------------------------------- +% identification +%------------------------------------------------------------------------------- +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{collection}[2013/03/28 v1.0.0 collections] + + +%------------------------------------------------------------------------------- +% requirements +%------------------------------------------------------------------------------- + + +\RequirePackage{ifthen} + + +%------------------------------------------------------------------------------- +% code +%------------------------------------------------------------------------------- + +% creates a new collection +% usage: \collectionnew{<collection name>} +\newcommand*{\collectionnew}[1]{% + \newcounter{collection@#1@count}} + +% adds an item to a collection +% usage: \collectionadd[<optional key>]{<collection name>}{<item to add>} +\newcommand*{\collectionadd}[3][]{% + \expandafter\def\csname collection@#2@item\roman{collection@#2@count}\endcsname{#3}% + \if\relax\noexpand#1\relax% if #1 is empty + \else\expandafter\def\csname collection@#2@key\roman{collection@#2@count}\endcsname{#1}\fi% + \stepcounter{collection@#2@count}} + +% returns the number of items in a collection +% usage: \collectioncount{<collection name>} +\newcommand*{\collectioncount}[1]{% + \value{collection@#1@count}} + +% gets an item from a collection +% usage: \collectiongetitem{<collection name>}{<element id>} +% where <element id> is an integer between 0 and (collectioncount-1) +\newcommand*{\collectiongetitem}[2]{% + \csname collection@#1@item\romannumeral #2\endcsname} + +% gets a key from a collection +% usage: \collectiongetkey{<collection name>}{<element id>} +% where <element id> is an integer between 0 and (collectioncount-1) +\newcommand*{\collectiongetkey}[2]{% + \csname collection@#1@key\romannumeral #2\endcsname} + +% loops through a collection and perform the given operation on every element +% usage: \collectionloop{<collection name>}{<operation sequence>} +% where <operation sequence> is the code sequence to be evaluated for each collection item, +% code which can refer to \collectionloopid, \collectionloopkey, \collectionloopitem and +% \collectionloopbreak +\newcounter{collection@iterator} +\newcommand*{\collectionloopbreak}{\let\iterate\relax} +\newcommand*{\collectionloop}[2]{% + \setcounter{collection@iterator}{0}% + \loop\ifnum\value{collection@iterator}<\value{collection@#1@count}% + \def\collectionloopid{\arabic{collection@iterator}}% + \def\collectionloopitem{\collectiongetitem{#1}{\collectionloopid}}% + \def\collectionloopkey{\collectiongetkey{#1}{\collectionloopid}}% + #2% + \stepcounter{collection@iterator}% + \repeat} + +% loops through a collection and finds the (first) element matching the given key +% usage: \collectionfindbykey{<collection name>}{key>} +\newcommand*{\collectionfindbykey}[2]{% + \collectionloop{#1}{% + \ifthenelse{\equal{\collectionloopkey}{#2}}{\collectionloopitem\collectionloopbreak}{}}} + + +\endinput + + %% end of file `collection.cls'. \ No newline at end of file diff --git a/public/templates/template7/moderncv.cls b/public/templates/template7/moderncv.cls index ea12f1b2..81be7d0f 100644 --- a/public/templates/template7/moderncv.cls +++ b/public/templates/template7/moderncv.cls @@ -1,582 +1,582 @@ -%% start of file `moderncv.cls'. -%% Copyright 2006-2013 Xavier Danaux (xdanaux@gmail.com). -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License version 1.3c, -% available at http://www.latex-project.org/lppl/. - - -%------------------------------------------------------------------------------- -% identification -%------------------------------------------------------------------------------- -\NeedsTeXFormat{LaTeX2e} -\ProvidesClass{moderncv}[2013/02/09 v1.3.0 modern curriculum vitae and letter document class] - - -%------------------------------------------------------------------------------- -% class options -% -% (need to be done before the external package loading, for example because -% we need \paperwidth, \paperheight and \@ptsize to be defined before loading -% geometry and fancyhdr) -%------------------------------------------------------------------------------- -% paper size option -\DeclareOption{a4paper}{ - \setlength\paperheight{297mm} - \setlength\paperwidth{210mm}} -\DeclareOption{a5paper}{ - \setlength\paperheight{210mm} - \setlength\paperwidth{148mm}} -\DeclareOption{b5paper}{ - \setlength\paperheight{250mm} - \setlength\paperwidth{176mm}} -\DeclareOption{letterpaper}{ - \setlength\paperheight{11in} - \setlength\paperwidth{8.5in}} -\DeclareOption{legalpaper}{ - \setlength\paperheight{14in} - \setlength\paperwidth{8.5in}} -\DeclareOption{executivepaper}{ - \setlength\paperheight{10.5in} - \setlength\paperwidth{7.25in}} -\DeclareOption{landscape}{ - \setlength\@tempdima{\paperheight} - \setlength\paperheight{\paperwidth} - \setlength\paperwidth{\@tempdima}} - -% font size options -\newcommand\@ptsize{} -\DeclareOption{10pt}{\renewcommand\@ptsize{0}} -\DeclareOption{11pt}{\renewcommand\@ptsize{1}} -\DeclareOption{12pt}{\renewcommand\@ptsize{2}} - -% font type options -\DeclareOption{sans}{\AtBeginDocument{\renewcommand{\familydefault}{\sfdefault}}} -\DeclareOption{roman}{\AtBeginDocument{\renewcommand{\familydefault}{\rmdefault}}} - -% draft/final option -\DeclareOption{draft}{\setlength\overfullrule{5pt}} -\DeclareOption{final}{\setlength\overfullrule{0pt}} - -% execute default options -\ExecuteOptions{a4paper,11pt,final} - -% process given options -\ProcessOptions\relax -\input{size1\@ptsize.clo} - - -%------------------------------------------------------------------------------- -% required packages -%------------------------------------------------------------------------------- -% \AtEndPreamble hook (loading etoolbox instead of defining the macro, as to avoid incompatibilities with etoolbox (and packages relying on it) defining the macro too) -\RequirePackage{etoolbox} -%\let\@endpreamblehook\@empty -%\def\AtEndPreamble{\g@addto@macro\@endpreamblehook} -%\let\document@original\document -%\def\document{\endgroup\@endpreamblehook\begingroup\document@original} - -% if... then... else... constructs -\RequirePackage{ifthen} -% TODO: move to xifthen and \isempty{<arg>} instead of \equal{<arg>}{} - -% color -\RequirePackage{xcolor} - -% font loading -%\RequirePackage{ifxetex,ifluatex} -%\newif\ifxetexorluatex -%\ifxetex -% \xetexorluatextrue -%\else -% \ifluatex -% \xetexorluatextrue -% \else -% \xetexorluatexfalse -% \fi -%\fi -% automatic loading of latin modern fonts -%\ifxetexorluatex -% \RequirePackage{fontspec} -% \defaultfontfeatures{Ligatures=TeX} -% \RequirePackage{unicode-math} -% \setmainfont{Latin Modern} -% \setsansfont{Latin Modern Sans} -% \setmathfont{Latin Modern Math} -%\else - \RequirePackage[T1]{fontenc} - \IfFileExists{lmodern.sty}% - {\RequirePackage{lmodern}}% - {} -%\fi - -% hyper links (hyperref is loaded at the end of the preamble to pass options required by loaded packages such as CJK) -\newcommand*\pdfpagemode{UseNone}% do not show thumbnails or bookmarks on opening (on supporting browsers); set \pdfpagemode to "UseOutlines" to show bookmarks -\RequirePackage{url} -\urlstyle{tt} -\AtEndPreamble{ - \pagenumbering{arabic}% has to be issued before loading hyperref, as to set \thepage and hence to avoid hyperref issuing a warning and setting pdfpagelabels=false - \RequirePackage[unicode]{hyperref}% unicode is required for unicode pdf metadata - \hypersetup{ - breaklinks, - baseurl = http://, - pdfborder = 0 0 0, - pdfpagemode = \pdfpagemode, - pdfstartpage = 1, - pdfcreator = {\LaTeX{} with 'moderncv' package}, -% pdfproducer = {\LaTeX{}},% will/should be set automatically to the correct TeX engine used - bookmarksopen = true, - bookmarksdepth= 2,% to show sections and subsections - pdfauthor = {\@firstname{}~\@lastname{}}, - pdftitle = {\@firstname{}~\@lastname{} -- \@title{}}, - pdfsubject = {Resum\'{e} of \@firstname{}~\@lastname{}}, - pdfkeywords = {\@firstname{}~\@lastname{}, curriculum vit\ae{}, resum\'{e}}}} - -% graphics -\RequirePackage{graphicx} - -% headers and footers -\RequirePackage{fancyhdr} -\fancypagestyle{plain}{ - \renewcommand{\headrulewidth}{0pt} - \renewcommand{\footrulewidth}{0pt} - \fancyhf{}} -% page numbers in footer if more than 1 page -\newif\if@displaypagenumbers\@displaypagenumberstrue -\newcommand*{\nopagenumbers}{\@displaypagenumbersfalse} -\AtEndPreamble{% - \AtBeginDocument{% - \if@displaypagenumbers% - \@ifundefined{r@lastpage}{}{% - \ifthenelse{\pageref{lastpage}>1}{% - \newlength{\pagenumberwidth}% - \settowidth{\pagenumberwidth}{\color{color2}\addressfont\itshape\strut\thepage/\pageref{lastpage}}% - \fancypagestyle{plain}{% - \fancyfoot[r]{\parbox[b]{\pagenumberwidth}{\color{color2}\pagenumberfont\strut\thepage/\pageref{lastpage}}}}% the parbox is required to ensure alignment with a possible center footer (e.g., as in the casual style) - \pagestyle{plain}}{}}% - \AtEndDocument{\label{lastpage}}\else\fi}} -\pagestyle{plain} - -% reduced list spacing -% package providing hooks into lists -% originally developped by Jakob Schiøtz (see http://dcwww.camd.dtu.dk/~schiotz/comp/LatexTips/tweaklist.sty) -% modified and distributed with moderncv(not available otherwise on ctan) -\RequirePackage{tweaklist} -\renewcommand*{\itemhook}{% - \@minipagetrue% removes spacing before lists as they use \addvspace, which doesn't add vertical space inside minipages - \@noparlisttrue% removes spacing at end of lists, caused by \par - \setlength{\topsep}{0pt}% normally not required thanks to \@minipagetrue - \setlength{\partopsep}{0pt}% normally not required thanks to \@minipagetrue - \setlength{\parsep}{0pt}% not required when \itemsep and \parskip are set to 0pt (?) - \setlength{\parskip}{0pt}% - \setlength{\itemsep}{0pt}} -\renewcommand*{\enumhook}{\itemhook{}} -\renewcommand*{\deschook}{\itemhook{}} - -% lengths calculations -\RequirePackage{calc} - -% advanced command arguments (LaTeX 3) -\RequirePackage{xparse} -% TODO (?): replace all \newcommand by \NewDocumentCommand - -% micro-typography (e.g., character protrusion, font expansion, hyphenatable letterspacing) -\RequirePackage{microtype} - -% compatibility package with older versions of moderncv -\RequirePackageWithOptions{moderncvcompatibility} - - -%------------------------------------------------------------------------------- -% class definition -%------------------------------------------------------------------------------- -% minimal base settings -\setlength\lineskip{1\p@} -\setlength\normallineskip{1\p@} -\renewcommand\baselinestretch{} -\setlength{\parindent}{0\p@} -\setlength{\parskip}{0\p@} -\setlength\columnsep{10\p@} -\setlength\columnseprule{0\p@} -\setlength\fboxsep{3\p@} -\setlength\fboxrule{.4\p@} -\setlength\arrayrulewidth{.4\p@} -\setlength\doublerulesep{2\p@} - -% not set on purpose -%\setlength\arraycolsep{5\p@} -%\setlength\tabcolsep{6\p@} -%\setlength\tabbingsep{\labelsep} - -\raggedbottom -\onecolumn - - -%------------------------------------------------------------------------------- -% overall design commands definitions -%------------------------------------------------------------------------------- -% elements -% defines one's name -% usage: \name{<firstname>}{<lastname>} -\newcommand*{\name}[2]{\def\@firstname{#1}\def\@lastname{#2}} -% defines one's title (optional) -% usage: \title{<title>} -\renewcommand*{\title}[1]{\def\@title{#1}} -% defines one's address (optional) -% usage: \address{<street>}{<city>}{<country>} -% where the <city> and <country> arguments can be omitted or provided empty -\NewDocumentCommand{\address}{mG{}G{}}{\def\@addressstreet{#1}\def\@addresscity{#2}\def\@addresscountry{#3}} -% adds a mobile/fixed/fax number to one's personal information (optional) -% usage: \phone[<optional type>]{<number>} -% where <optional type> should be either "mobile", "fixed" or "fax -\RequirePackage{collection} -\collectionnew{phones} -\newcommand*{\phone}[2][fixed]{\collectionadd[#1]{phones}{#2}} -\newcommand*{\email}[1]{\def\@email{#1}} -% defines one's home page (optional) -% usage: \homepage{<url>} -\newcommand*{\homepage}[1]{\def\@homepage{#1}} -% defines additional personal information (optional) -% usage: \extrainfo{<text>} -\newcommand*{\extrainfo}[1]{\def\@extrainfo{#1}} - -% colors -\definecolor{color0}{rgb}{0,0,0}% main default color, normally left to black -\definecolor{color1}{rgb}{0,0,0}% primary theme color -\definecolor{color2}{rgb}{0,0,0}% secondary theme color -\definecolor{color3}{rgb}{0,0,0}% tertiary theme color - -% symbols -% itemize labels (the struts were added to correct inter-item spacing (works for single line items, until a solution is found for multi-line ones...) -\newcommand*{\labelitemi}{\strut\textcolor{color1}{\large\rmfamily\textbullet}}% the \rmfamily is required to force Latin Modern fonts when using sans serif, as OMS/lmss/m/n is not defined and gets substituted by OMS/cmsy/m/n -\newcommand*{\labelitemii}{\strut\textcolor{color1}{\large\bfseries-}} -\newcommand*{\labelitemiii}{\strut\textcolor{color1}{\rmfamily\textperiodcentered}}% alternative: \textasteriskcentered; the \rmfamily is required to force Latin Modern fonts when using sans serif, as OMS/lmss/m/n is not defined and gets substituted by OMS/cmsy/m/n -\newcommand*{\labelitemiv}{\labelitemiii} -% enumerate labels -\renewcommand{\theenumi}{\@arabic\c@enumi} -\renewcommand{\theenumii}{\@alph\c@enumii} -\renewcommand{\theenumiii}{\@roman\c@enumiii} -\renewcommand{\theenumiv}{\@Alph\c@enumiv} -% other symbols -\newcommand*{\listitemsymbol}{\labelitemi~} -\newcommand*{\addresssymbol}{} -\newcommand*{\mobilephonesymbol}{} -\newcommand*{\fixedphonesymbol}{} -\newcommand*{\faxphonesymbol}{} -\newcommand*{\emailsymbol}{} -\newcommand*{\homepagesymbol}{} - -% fonts -\AtBeginDocument{\normalfont\color{color0}} - -% strings for internationalisation -\newcommand*{\refname}{Publications} -\newcommand*{\enclname}{Enclosure} - -% makes the footer (normally used both for the resume and the letter) -% usage: \makefooter -\newcommand*{\makefooter}{}% - -% loads a style variant -% usage: \moderncvstyle{<style variant name>} -\newcommand*{\moderncvstyle}[1]{ - \RequirePackage{moderncvstyle#1}} - -% loads a color scheme -% usage: \moderncvcolor{<color scheme name>} -\newcommand*{\moderncvcolor}[1]{ - \RequirePackage{moderncvcolor#1}} - -% loads an icons set -% usage: \moderncvicons{<icon set name>} -\newcommand*{\moderncvicons}[1]{ - \RequirePackage{moderncvicons#1}} - -% recomputes all automatic lengths -\newcommand*{\recomputelengths}{\recomputecvlengths} -\AtBeginDocument{\recomputelengths{}} - -% creates a length if not yet defined -\newcommand*{\@initializelength}[1]{% - \ifdefined#1\else\newlength{#1}\fi} - - -%------------------------------------------------------------------------------- -% resume design commands definitions -%------------------------------------------------------------------------------- -% elements -% defines one's picture (optional) -% usage: photo[<picture width>][<picture frame thickness>]{<picture filename>} -\NewDocumentCommand{\photo}{O{64pt}O{0.4pt}m}{\def\@photowidth{#1}\def\@photoframewidth{#2}\def\@photo{#3}} -\newcommand*{\quote}[1]{\def\@quote{#1}} - -% fonts -\newcommand*{\namefont}{} -\newcommand*{\titlefont}{} -\newcommand*{\addressfont}{} -\newcommand*{\quotefont}{} -\newcommand*{\sectionfont}{} -\newcommand*{\subsectionfont}{} -\newcommand*{\hintfont}{} -\newcommand*{\pagenumberfont}{\addressfont\itshape} - -% styles -\newcommand*{\namestyle}[1]{{\namefont#1}} -\newcommand*{\titlestyle}[1]{{\titlefont#1}} -\newcommand*{\addressstyle}[1]{{\addressfont#1}} -\newcommand*{\quotestyle}[1]{{\quotefont#1}} -\newcommand*{\sectionstyle}[1]{{\sectionfont#1}} -\newcommand*{\subsectionstyle}[1]{{\subsectionfont#1}} -\newcommand*{\hintstyle}[1]{{\hintfont#1}} -\newcommand*{\pagenumberstyle}[1]{{\pagenumberfont#1}} - -% recompute all resume lengths -\newcommand*{\recomputecvlengths}{} - -% internal maketitle command to issue a new line only when required -\newif\if@firstdetailselement\@firstdetailselementtrue -\newcommand*{\makenewline}{ - \if@firstdetailselement% - \strut% to ensure baseline alignment, e.g. with when put in the margin vs sections that also contains a \strut - \else% - \\\fi% - \@firstdetailselementfalse} - -% makes the resume title -% usage: \makecvtitle -\newcommand*{\makecvtitle}{} - -% makes the resume footer -% usage: \makecvfooter -\newcommand*{\makecvfooter}{\makefooter} - -% makes a resume section -% usage: \section{<title>} -% identical starred and non-starred variants should be defined for compatibility with other packages (e.g. with natbib, that uses \section*{} for the bibliography header) -\NewDocumentCommand{\section}{sm}{} - -% makes a resume subsection -% usage: \subsection{title} -\NewDocumentCommand{\subsection}{sm}{} - -% makes a resume line with a header and a corresponding text -% usage: \cvitem[spacing]{header}{text} -\newcommand*{\cvitem}[3][.25em]{} - -% makes a resume line 2 headers and their corresponding text -% usage: \cvdoubleitem[spacing]{header1}{text1}{header2}{text2} -\newcommand*{\cvdoubleitem}[5][.25em]{} - -% makes a resume line with a list item -% usage: \cvlistitem[label]{item} -\newcommand*{\cvlistitem}[2][\listitemsymbol]{} - -% makes a resume line with 2 list items -% usage: \cvlistdoubleitem[label]{item1}{item2} -\newcommand*{\cvlistdoubleitem}[3][\listitemsymbol]{} - -% makes a typical resume job / education entry -% usage: \cventry[spacing]{years}{degree/job title}{institution/employer}{localization}{optionnal: grade/...}{optional: comment/job description} -\newcommand*{\cventry}[7][.25em]{} - -% makes a resume entry with a proficiency comment -% usage: \cvitemwithcomment[spacing]{header}{text}{comment} -\newcommand*{\cvitemwithcomment}[4][.25em]{} - -% makes a generic hyperlink -% usage: \link[optional text]{link} -\newcommand*{\link}[2][]{% - \ifthenelse{\equal{#1}{}}% - {\href{#2}{#2}}% - {\href{#2}{#1}}} - -% makes a http hyperlink -% usage: \httplink[optional text]{link} -\newcommand*{\httplink}[2][]{% - \ifthenelse{\equal{#1}{}}% - {\href{http://#2}{#2}}% - {\href{http://#2}{#1}}} - -% makes an email hyperlink -% usage: \emaillink[optional text]{link} -\newcommand*{\emaillink}[2][]{% - \ifthenelse{\equal{#1}{}}% - {\href{mailto:#2}{#2}}% - {\href{mailto:#2}{#1}}} - -% cvcolumns environment, where every column is created through \cvcolumn -% usage: \begin{cvcolumns} -% \cvcolumn[width]{head}{content} -% \cvcolumn[width]{head}{content} -% ... -% \end{cvcolumns} -% where "width" is the width as a fraction of the line length (between 0 and 1), "head" is the column header and "content" its content -\newcounter{cvcolumnscounter}% counter for the number of columns -\newcounter{cvcolumnsautowidthcounter}% counter for the number of columns with no column width provided, and which will then be equally distributed -\newcounter{tmpiteratorcounter}% counter for any temporary purpose (e.g., iterating loops) -\newlength{\cvcolumnsdummywidth}\setlength{\cvcolumnsdummywidth}{1000pt}% dummy width for total width, in order to enable arithmetics (TeX has no float variables, only integer counters or lengths) -\newlength{\cvcolumnswidth}% total width available for head / content -\newlength{\cvcolumnsautowidth}% total width of columns with no explicit width provided -\newlength{\cvcolumnautowidth}% width of one of the columns with no explicit width provided (based on equal distribution of remaining space) -\newif\if@cvcolumns@head@empty% whether or not at least one of the columns has a header -\newenvironment*{cvcolumns}% - {% at environment opening: reset counters, lengths and ifs - \setcounter{cvcolumnscounter}{0}% - \setcounter{cvcolumnsautowidthcounter}{0}% - \setlength{\cvcolumnsautowidth}{\cvcolumnsdummywidth}% - \setlength{\cvcolumnautowidth}{0pt}% - \@cvcolumns@head@emptytrue}% - {% at environment closing: typeset environment - % compute the width of each cvcolumn, considering a spacing of \separatorcolumnwidth and the columns with set width - \ifnum\thecvcolumnscounter>0% - \setlength{\cvcolumnswidth}{\maincolumnwidth-\value{cvcolumnscounter}\separatorcolumnwidth+\separatorcolumnwidth}% - \setlength{\cvcolumnautowidth}{\cvcolumnswidth*\ratio{\cvcolumnsautowidth}{\cvcolumnsdummywidth}/\value{cvcolumnsautowidthcounter}}\fi% - % pre-aggregate the tabular definition, heading and content (required before creating the tabular, as the tabular environment doesn't like loops --- probably because "&" generates a \endgroup) - % - the tabular definition is the aggregation of the different "\cvcolumn<i>@def" (by default "p{\cvcolumnautowidth}"), separated by "@{\hspace*{\separatorcolumnwidth}}" - % - the tabular heading is the aggregation of the different "\cvcolumn<i>@head", separated by "&" - % - the tabular content is the aggregation of the different "\cvcolumn<i>@content", separated by "&" - % to aggregate the different elements, \protected@edef or \g@addto@macro is required to avoid that \cvcolumns@def, -@head and -@content get expanded in subsequent redefinitions, which would cause errors due to the expansions of \hspace, of \subsectionstyle and possibly of user content/argument such as font commands - \def\cvcolumns@def{}% - \def\cvcolumns@head{}% - \def\cvcolumns@content{}% - \setcounter{tmpiteratorcounter}{0}% - % loop based on \g@addto@macro - \loop\ifnum\thetmpiteratorcounter<\thecvcolumnscounter% - \ifnum\thetmpiteratorcounter=0\else% - \g@addto@macro\cvcolumns@def{@{\hspace*{\separatorcolumnwidth}}}% - \g@addto@macro\cvcolumns@head{&}% - \g@addto@macro\cvcolumns@content{&}\fi% - \expandafter\g@addto@macro\expandafter\cvcolumns@def\expandafter{\csname cvcolumn\roman{tmpiteratorcounter}@def\endcsname}% - \expandafter\g@addto@macro\expandafter\cvcolumns@head\expandafter{\csname cvcolumn\roman{tmpiteratorcounter}@head\endcsname}% - \expandafter\g@addto@macro\expandafter\cvcolumns@content\expandafter{\csname cvcolumn\roman{tmpiteratorcounter}@content\endcsname}% - \stepcounter{tmpiteratorcounter}% - \repeat% -% % same loop based on \protected@edef -% \loop\ifnum\thetmpiteratorcounter<\thecvcolumnscounter% -% \ifnum\thetmpiteratorcounter=0\else% -% \protected@edef\cvcolumns@def{\cvcolumns@def @{\hspace*{\separatorcolumnwidth}}}% -% \protected@edef\cvcolumns@head{\cvcolumns@head &}% -% \protected@edef\cvcolumns@content{\cvcolumns@content &}\fi% -% \expandafter\protected@edef\expandafter\cvcolumns@def\expandafter{\expandafter\cvcolumns@def\expandafter\protect\csname cvcolumn\roman{tmpiteratorcounter}@def\endcsname}% -% \expandafter\protected@edef\expandafter\cvcolumns@head\expandafter{\expandafter\cvcolumns@head\expandafter\protect\csname cvcolumn\roman{tmpiteratorcounter}@head\endcsname}% -% \expandafter\protected@edef\expandafter\cvcolumns@content\expandafter{\expandafter\cvcolumns@content\expandafter\protect\csname cvcolumn\roman{tmpiteratorcounter}@content\endcsname}% -% \stepcounter{tmpiteratorcounter}% -% \repeat% - % create the tabular - \cvitem{}{% - \begin{tabular}{\cvcolumns@def}% - \if@cvcolumns@head@empty\else% - \cvcolumns@head\\[-.8em]% - {\color{color1}\rule{\maincolumnwidth}{.25pt}}\\\fi% - \cvcolumns@content% - \end{tabular}}} - -% cvcolumn command, to create a column inside a cvcolumns environment -% usage: \cvcolumn[width]{head}{content} -% where "width" is the width as a fraction of the line length (between 0 and 1), "head" is the column header and "content" its content ("head" and "content" can contain "\\", "\newline" or any other paragraph command such as "itemize") -\newcommand*{\cvcolumn}[3][\cvcolumnautowidth]{% -% \def\cvcolumn@width{}% - \ifthenelse{\equal{#1}{\cvcolumnautowidth}}% - {% if no width fraction is provided, count this column as auto-adjusted and set its width to \cvcolumnsautowidth - \stepcounter{cvcolumnsautowidthcounter}% - \expandafter\expandafter\expandafter\def\expandafter\csname cvcolumn\roman{cvcolumnscounter}@def\endcsname{p{\cvcolumnautowidth}}% - \expandafter\expandafter\expandafter\def\expandafter\csname cvcolumn\roman{cvcolumnscounter}@head\endcsname{\protect\parbox[b]{\cvcolumnautowidth}{\protect\subsectionstyle{#2}}}}% - {% if a width is provided, set the width of the column to it and decrease the available space for auto-adjusted columns - \addtolength{\cvcolumnsautowidth}{-#1\cvcolumnsdummywidth}% - \expandafter\expandafter\expandafter\def\expandafter\csname cvcolumn\roman{cvcolumnscounter}@def\endcsname{p{#1\cvcolumnswidth}}% - \expandafter\expandafter\expandafter\def\expandafter\csname cvcolumn\roman{cvcolumnscounter}@head\endcsname{\protect\parbox[b]{#1\cvcolumnswidth}{\protect\subsectionstyle{#2}}}}% - \ifthenelse{\equal{#2}{}}{}{\@cvcolumns@head@emptyfalse}% - \expandafter\expandafter\expandafter\def\expandafter\csname cvcolumn\roman{cvcolumnscounter}@content\endcsname{\protect\cvcolumncell{#3}}% - \stepcounter{cvcolumnscounter}} - -% internal cvcolumncell command, that enables a cvcolumn cell to contain paragraph commands (lists, newlines, etc) -\newcommand*{\cvcolumncell}[1]{{% put cell inside a group, so that command redefinitions are only local - % roughly restore \\ to its regular definition (outside of tabular) - \renewcommand*{\\}{\newline}% - % enclose the contents of the cell inside a vertical box, to allow paragraph commands - \protect\vtop{#1}}} - -% thebibliography environment, for use with BibTeX and possibly multibib -\newlength{\bibindent} -\setlength{\bibindent}{1.5em} -% bibliography item label -\newcommand*{\bibliographyitemlabel}{}% use \@biblabel{\arabic{enumiv}} for BibTeX labels -%\newif\if@multibibfirstbib\@multibibfirstbibfalse -% bibliography head (section, etc}, depending on whether multibib is used -\newcommand*{\bibliographyhead}[1]{\section{#1}} -\AtEndPreamble{\@ifpackageloaded{multibib}{\renewcommand*{\bibliographyhead}[1]{\subsection{#1}}}{}} -% thebibliography environment definition -\newenvironment{thebibliography}[1]{}{} -\newcommand*{\newblock}{\hskip .11em\@plus.33em\@minus.07em} -\let\@openbib@code\@empty - -% itemize, enumerate and description environment -\setlength{\leftmargini} {1em} -\leftmargin\leftmargini -\setlength{\leftmarginii} {\leftmargini} -\setlength{\leftmarginiii} {\leftmargini} -\setlength{\leftmarginiv} {\leftmargini} -\setlength{\leftmarginv} {\leftmargini} -\setlength{\leftmarginvi} {\leftmargini} -\setlength{\labelsep} {.5em}% this is the distance between the label and the body, but it pushes the label to the left rather than pushing the body to the right (to do the latter, modify \leftmargin(i) -\setlength{\labelwidth} {\leftmargini}% unfortunately, \labelwidth is not defined by item level (i.e. no \labeliwidth, \labeliiwidth, etc) -\addtolength{\labelwidth} {-\labelsep} -\@beginparpenalty -\@lowpenalty -\@endparpenalty -\@lowpenalty -\@itempenalty -\@lowpenalty -\newcommand\labelenumi{\theenumi.} -\newcommand\labelenumii{(\theenumii)} -\newcommand\labelenumiii{\theenumiii.} -\newcommand\labelenumiv{\theenumiv.} -\renewcommand\p@enumii{\theenumi} -\renewcommand\p@enumiii{\p@enumii(\theenumii)} -\renewcommand\p@enumiv{\p@enumiii\theenumiii} -% description label -\newcommand*\descriptionlabel[1]{\hspace\labelsep\normalfont\bfseries#1} - -% classical \today definition -\def\today{\ifcase\month\or - January\or February\or March\or April\or May\or June\or - July\or August\or September\or October\or November\or December\fi - \space\number\day, \number\year} - -%\newcommand{\widthofautobox}[1]{% -% \widthof{\begin{tabular}{@{}l@{}}#1\end{tabular}}} - -%\newcommand{\autobox}[2][b]{% -% \parbox[#1]{\widthofautobox{#2}}{#2}} - - -%------------------------------------------------------------------------------- -% letter design commands definitions -%------------------------------------------------------------------------------- -% elements -\newcommand*{\recipient}[2]{\def\@recipientname{#1}\def\@recipientaddress{#2}} -\renewcommand*{\date}[1]{\def\@date{#1}}\date{\today} -\newcommand*{\opening}[1]{\def\@opening{#1}} -\newcommand*{\closing}[1]{\def\@closing{#1}} -\newcommand*{\enclosure}[2][]{% - % if an optional argument is provided, use it to redefine \enclname - \ifthenelse{\equal{#1}{}}{}{\renewcommand*{\enclname}{#1}}% - \def\@enclosure{#2}} - -% recompute all letter lengths -\newcommand*{\recomputeletterlengths}{} - -% makes the letter title -% usage: \makelettertitle -\newcommand*{\makelettertitle}{} - -% makes the letter footer -% usage: \makeletterfooter -\newcommand*{\makeletterfooter}{\makefooter} - -% makes the letter closing -% usage: \makeletterclosing -\newcommand*{\makeletterclosing}{} - - -\endinput - - +%% start of file `moderncv.cls'. +%% Copyright 2006-2013 Xavier Danaux (xdanaux@gmail.com). +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License version 1.3c, +% available at http://www.latex-project.org/lppl/. + + +%------------------------------------------------------------------------------- +% identification +%------------------------------------------------------------------------------- +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{moderncv}[2013/02/09 v1.3.0 modern curriculum vitae and letter document class] + + +%------------------------------------------------------------------------------- +% class options +% +% (need to be done before the external package loading, for example because +% we need \paperwidth, \paperheight and \@ptsize to be defined before loading +% geometry and fancyhdr) +%------------------------------------------------------------------------------- +% paper size option +\DeclareOption{a4paper}{ + \setlength\paperheight{297mm} + \setlength\paperwidth{210mm}} +\DeclareOption{a5paper}{ + \setlength\paperheight{210mm} + \setlength\paperwidth{148mm}} +\DeclareOption{b5paper}{ + \setlength\paperheight{250mm} + \setlength\paperwidth{176mm}} +\DeclareOption{letterpaper}{ + \setlength\paperheight{11in} + \setlength\paperwidth{8.5in}} +\DeclareOption{legalpaper}{ + \setlength\paperheight{14in} + \setlength\paperwidth{8.5in}} +\DeclareOption{executivepaper}{ + \setlength\paperheight{10.5in} + \setlength\paperwidth{7.25in}} +\DeclareOption{landscape}{ + \setlength\@tempdima{\paperheight} + \setlength\paperheight{\paperwidth} + \setlength\paperwidth{\@tempdima}} + +% font size options +\newcommand\@ptsize{} +\DeclareOption{10pt}{\renewcommand\@ptsize{0}} +\DeclareOption{11pt}{\renewcommand\@ptsize{1}} +\DeclareOption{12pt}{\renewcommand\@ptsize{2}} + +% font type options +\DeclareOption{sans}{\AtBeginDocument{\renewcommand{\familydefault}{\sfdefault}}} +\DeclareOption{roman}{\AtBeginDocument{\renewcommand{\familydefault}{\rmdefault}}} + +% draft/final option +\DeclareOption{draft}{\setlength\overfullrule{5pt}} +\DeclareOption{final}{\setlength\overfullrule{0pt}} + +% execute default options +\ExecuteOptions{a4paper,11pt,final} + +% process given options +\ProcessOptions\relax +\input{size1\@ptsize.clo} + + +%------------------------------------------------------------------------------- +% required packages +%------------------------------------------------------------------------------- +% \AtEndPreamble hook (loading etoolbox instead of defining the macro, as to avoid incompatibilities with etoolbox (and packages relying on it) defining the macro too) +\RequirePackage{etoolbox} +%\let\@endpreamblehook\@empty +%\def\AtEndPreamble{\g@addto@macro\@endpreamblehook} +%\let\document@original\document +%\def\document{\endgroup\@endpreamblehook\begingroup\document@original} + +% if... then... else... constructs +\RequirePackage{ifthen} +% TODO: move to xifthen and \isempty{<arg>} instead of \equal{<arg>}{} + +% color +\RequirePackage{xcolor} + +% font loading +%\RequirePackage{ifxetex,ifluatex} +%\newif\ifxetexorluatex +%\ifxetex +% \xetexorluatextrue +%\else +% \ifluatex +% \xetexorluatextrue +% \else +% \xetexorluatexfalse +% \fi +%\fi +% automatic loading of latin modern fonts +%\ifxetexorluatex +% \RequirePackage{fontspec} +% \defaultfontfeatures{Ligatures=TeX} +% \RequirePackage{unicode-math} +% \setmainfont{Latin Modern} +% \setsansfont{Latin Modern Sans} +% \setmathfont{Latin Modern Math} +%\else + \RequirePackage[T1]{fontenc} + \IfFileExists{lmodern.sty}% + {\RequirePackage{lmodern}}% + {} +%\fi + +% hyper links (hyperref is loaded at the end of the preamble to pass options required by loaded packages such as CJK) +\newcommand*\pdfpagemode{UseNone}% do not show thumbnails or bookmarks on opening (on supporting browsers); set \pdfpagemode to "UseOutlines" to show bookmarks +\RequirePackage{url} +\urlstyle{tt} +\AtEndPreamble{ + \pagenumbering{arabic}% has to be issued before loading hyperref, as to set \thepage and hence to avoid hyperref issuing a warning and setting pdfpagelabels=false + \RequirePackage[unicode]{hyperref}% unicode is required for unicode pdf metadata + \hypersetup{ + breaklinks, + baseurl = http://, + pdfborder = 0 0 0, + pdfpagemode = \pdfpagemode, + pdfstartpage = 1, + pdfcreator = {\LaTeX{} with 'moderncv' package}, +% pdfproducer = {\LaTeX{}},% will/should be set automatically to the correct TeX engine used + bookmarksopen = true, + bookmarksdepth= 2,% to show sections and subsections + pdfauthor = {\@firstname{}~\@lastname{}}, + pdftitle = {\@firstname{}~\@lastname{} -- \@title{}}, + pdfsubject = {Resum\'{e} of \@firstname{}~\@lastname{}}, + pdfkeywords = {\@firstname{}~\@lastname{}, curriculum vit\ae{}, resum\'{e}}}} + +% graphics +\RequirePackage{graphicx} + +% headers and footers +\RequirePackage{fancyhdr} +\fancypagestyle{plain}{ + \renewcommand{\headrulewidth}{0pt} + \renewcommand{\footrulewidth}{0pt} + \fancyhf{}} +% page numbers in footer if more than 1 page +\newif\if@displaypagenumbers\@displaypagenumberstrue +\newcommand*{\nopagenumbers}{\@displaypagenumbersfalse} +\AtEndPreamble{% + \AtBeginDocument{% + \if@displaypagenumbers% + \@ifundefined{r@lastpage}{}{% + \ifthenelse{\pageref{lastpage}>1}{% + \newlength{\pagenumberwidth}% + \settowidth{\pagenumberwidth}{\color{color2}\addressfont\itshape\strut\thepage/\pageref{lastpage}}% + \fancypagestyle{plain}{% + \fancyfoot[r]{\parbox[b]{\pagenumberwidth}{\color{color2}\pagenumberfont\strut\thepage/\pageref{lastpage}}}}% the parbox is required to ensure alignment with a possible center footer (e.g., as in the casual style) + \pagestyle{plain}}{}}% + \AtEndDocument{\label{lastpage}}\else\fi}} +\pagestyle{plain} + +% reduced list spacing +% package providing hooks into lists +% originally developped by Jakob Schiøtz (see http://dcwww.camd.dtu.dk/~schiotz/comp/LatexTips/tweaklist.sty) +% modified and distributed with moderncv(not available otherwise on ctan) +\RequirePackage{tweaklist} +\renewcommand*{\itemhook}{% + \@minipagetrue% removes spacing before lists as they use \addvspace, which doesn't add vertical space inside minipages + \@noparlisttrue% removes spacing at end of lists, caused by \par + \setlength{\topsep}{0pt}% normally not required thanks to \@minipagetrue + \setlength{\partopsep}{0pt}% normally not required thanks to \@minipagetrue + \setlength{\parsep}{0pt}% not required when \itemsep and \parskip are set to 0pt (?) + \setlength{\parskip}{0pt}% + \setlength{\itemsep}{0pt}} +\renewcommand*{\enumhook}{\itemhook{}} +\renewcommand*{\deschook}{\itemhook{}} + +% lengths calculations +\RequirePackage{calc} + +% advanced command arguments (LaTeX 3) +\RequirePackage{xparse} +% TODO (?): replace all \newcommand by \NewDocumentCommand + +% micro-typography (e.g., character protrusion, font expansion, hyphenatable letterspacing) +\RequirePackage{microtype} + +% compatibility package with older versions of moderncv +\RequirePackageWithOptions{moderncvcompatibility} + + +%------------------------------------------------------------------------------- +% class definition +%------------------------------------------------------------------------------- +% minimal base settings +\setlength\lineskip{1\p@} +\setlength\normallineskip{1\p@} +\renewcommand\baselinestretch{} +\setlength{\parindent}{0\p@} +\setlength{\parskip}{0\p@} +\setlength\columnsep{10\p@} +\setlength\columnseprule{0\p@} +\setlength\fboxsep{3\p@} +\setlength\fboxrule{.4\p@} +\setlength\arrayrulewidth{.4\p@} +\setlength\doublerulesep{2\p@} + +% not set on purpose +%\setlength\arraycolsep{5\p@} +%\setlength\tabcolsep{6\p@} +%\setlength\tabbingsep{\labelsep} + +\raggedbottom +\onecolumn + + +%------------------------------------------------------------------------------- +% overall design commands definitions +%------------------------------------------------------------------------------- +% elements +% defines one's name +% usage: \name{<firstname>}{<lastname>} +\newcommand*{\name}[2]{\def\@firstname{#1}\def\@lastname{#2}} +% defines one's title (optional) +% usage: \title{<title>} +\renewcommand*{\title}[1]{\def\@title{#1}} +% defines one's address (optional) +% usage: \address{<street>}{<city>}{<country>} +% where the <city> and <country> arguments can be omitted or provided empty +\NewDocumentCommand{\address}{mG{}G{}}{\def\@addressstreet{#1}\def\@addresscity{#2}\def\@addresscountry{#3}} +% adds a mobile/fixed/fax number to one's personal information (optional) +% usage: \phone[<optional type>]{<number>} +% where <optional type> should be either "mobile", "fixed" or "fax +\RequirePackage{collection} +\collectionnew{phones} +\newcommand*{\phone}[2][fixed]{\collectionadd[#1]{phones}{#2}} +\newcommand*{\email}[1]{\def\@email{#1}} +% defines one's home page (optional) +% usage: \homepage{<url>} +\newcommand*{\homepage}[1]{\def\@homepage{#1}} +% defines additional personal information (optional) +% usage: \extrainfo{<text>} +\newcommand*{\extrainfo}[1]{\def\@extrainfo{#1}} + +% colors +\definecolor{color0}{rgb}{0,0,0}% main default color, normally left to black +\definecolor{color1}{rgb}{0,0,0}% primary theme color +\definecolor{color2}{rgb}{0,0,0}% secondary theme color +\definecolor{color3}{rgb}{0,0,0}% tertiary theme color + +% symbols +% itemize labels (the struts were added to correct inter-item spacing (works for single line items, until a solution is found for multi-line ones...) +\newcommand*{\labelitemi}{\strut\textcolor{color1}{\large\rmfamily\textbullet}}% the \rmfamily is required to force Latin Modern fonts when using sans serif, as OMS/lmss/m/n is not defined and gets substituted by OMS/cmsy/m/n +\newcommand*{\labelitemii}{\strut\textcolor{color1}{\large\bfseries-}} +\newcommand*{\labelitemiii}{\strut\textcolor{color1}{\rmfamily\textperiodcentered}}% alternative: \textasteriskcentered; the \rmfamily is required to force Latin Modern fonts when using sans serif, as OMS/lmss/m/n is not defined and gets substituted by OMS/cmsy/m/n +\newcommand*{\labelitemiv}{\labelitemiii} +% enumerate labels +\renewcommand{\theenumi}{\@arabic\c@enumi} +\renewcommand{\theenumii}{\@alph\c@enumii} +\renewcommand{\theenumiii}{\@roman\c@enumiii} +\renewcommand{\theenumiv}{\@Alph\c@enumiv} +% other symbols +\newcommand*{\listitemsymbol}{\labelitemi~} +\newcommand*{\addresssymbol}{} +\newcommand*{\mobilephonesymbol}{} +\newcommand*{\fixedphonesymbol}{} +\newcommand*{\faxphonesymbol}{} +\newcommand*{\emailsymbol}{} +\newcommand*{\homepagesymbol}{} + +% fonts +\AtBeginDocument{\normalfont\color{color0}} + +% strings for internationalisation +\newcommand*{\refname}{Publications} +\newcommand*{\enclname}{Enclosure} + +% makes the footer (normally used both for the resume and the letter) +% usage: \makefooter +\newcommand*{\makefooter}{}% + +% loads a style variant +% usage: \moderncvstyle{<style variant name>} +\newcommand*{\moderncvstyle}[1]{ + \RequirePackage{moderncvstyle#1}} + +% loads a color scheme +% usage: \moderncvcolor{<color scheme name>} +\newcommand*{\moderncvcolor}[1]{ + \RequirePackage{moderncvcolor#1}} + +% loads an icons set +% usage: \moderncvicons{<icon set name>} +\newcommand*{\moderncvicons}[1]{ + \RequirePackage{moderncvicons#1}} + +% recomputes all automatic lengths +\newcommand*{\recomputelengths}{\recomputecvlengths} +\AtBeginDocument{\recomputelengths{}} + +% creates a length if not yet defined +\newcommand*{\@initializelength}[1]{% + \ifdefined#1\else\newlength{#1}\fi} + + +%------------------------------------------------------------------------------- +% resume design commands definitions +%------------------------------------------------------------------------------- +% elements +% defines one's picture (optional) +% usage: photo[<picture width>][<picture frame thickness>]{<picture filename>} +\NewDocumentCommand{\photo}{O{64pt}O{0.4pt}m}{\def\@photowidth{#1}\def\@photoframewidth{#2}\def\@photo{#3}} +\newcommand*{\quote}[1]{\def\@quote{#1}} + +% fonts +\newcommand*{\namefont}{} +\newcommand*{\titlefont}{} +\newcommand*{\addressfont}{} +\newcommand*{\quotefont}{} +\newcommand*{\sectionfont}{} +\newcommand*{\subsectionfont}{} +\newcommand*{\hintfont}{} +\newcommand*{\pagenumberfont}{\addressfont\itshape} + +% styles +\newcommand*{\namestyle}[1]{{\namefont#1}} +\newcommand*{\titlestyle}[1]{{\titlefont#1}} +\newcommand*{\addressstyle}[1]{{\addressfont#1}} +\newcommand*{\quotestyle}[1]{{\quotefont#1}} +\newcommand*{\sectionstyle}[1]{{\sectionfont#1}} +\newcommand*{\subsectionstyle}[1]{{\subsectionfont#1}} +\newcommand*{\hintstyle}[1]{{\hintfont#1}} +\newcommand*{\pagenumberstyle}[1]{{\pagenumberfont#1}} + +% recompute all resume lengths +\newcommand*{\recomputecvlengths}{} + +% internal maketitle command to issue a new line only when required +\newif\if@firstdetailselement\@firstdetailselementtrue +\newcommand*{\makenewline}{ + \if@firstdetailselement% + \strut% to ensure baseline alignment, e.g. with when put in the margin vs sections that also contains a \strut + \else% + \\\fi% + \@firstdetailselementfalse} + +% makes the resume title +% usage: \makecvtitle +\newcommand*{\makecvtitle}{} + +% makes the resume footer +% usage: \makecvfooter +\newcommand*{\makecvfooter}{\makefooter} + +% makes a resume section +% usage: \section{<title>} +% identical starred and non-starred variants should be defined for compatibility with other packages (e.g. with natbib, that uses \section*{} for the bibliography header) +\NewDocumentCommand{\section}{sm}{} + +% makes a resume subsection +% usage: \subsection{title} +\NewDocumentCommand{\subsection}{sm}{} + +% makes a resume line with a header and a corresponding text +% usage: \cvitem[spacing]{header}{text} +\newcommand*{\cvitem}[3][.25em]{} + +% makes a resume line 2 headers and their corresponding text +% usage: \cvdoubleitem[spacing]{header1}{text1}{header2}{text2} +\newcommand*{\cvdoubleitem}[5][.25em]{} + +% makes a resume line with a list item +% usage: \cvlistitem[label]{item} +\newcommand*{\cvlistitem}[2][\listitemsymbol]{} + +% makes a resume line with 2 list items +% usage: \cvlistdoubleitem[label]{item1}{item2} +\newcommand*{\cvlistdoubleitem}[3][\listitemsymbol]{} + +% makes a typical resume job / education entry +% usage: \cventry[spacing]{years}{degree/job title}{institution/employer}{localization}{optionnal: grade/...}{optional: comment/job description} +\newcommand*{\cventry}[7][.25em]{} + +% makes a resume entry with a proficiency comment +% usage: \cvitemwithcomment[spacing]{header}{text}{comment} +\newcommand*{\cvitemwithcomment}[4][.25em]{} + +% makes a generic hyperlink +% usage: \link[optional text]{link} +\newcommand*{\link}[2][]{% + \ifthenelse{\equal{#1}{}}% + {\href{#2}{#2}}% + {\href{#2}{#1}}} + +% makes a http hyperlink +% usage: \httplink[optional text]{link} +\newcommand*{\httplink}[2][]{% + \ifthenelse{\equal{#1}{}}% + {\href{http://#2}{#2}}% + {\href{http://#2}{#1}}} + +% makes an email hyperlink +% usage: \emaillink[optional text]{link} +\newcommand*{\emaillink}[2][]{% + \ifthenelse{\equal{#1}{}}% + {\href{mailto:#2}{#2}}% + {\href{mailto:#2}{#1}}} + +% cvcolumns environment, where every column is created through \cvcolumn +% usage: \begin{cvcolumns} +% \cvcolumn[width]{head}{content} +% \cvcolumn[width]{head}{content} +% ... +% \end{cvcolumns} +% where "width" is the width as a fraction of the line length (between 0 and 1), "head" is the column header and "content" its content +\newcounter{cvcolumnscounter}% counter for the number of columns +\newcounter{cvcolumnsautowidthcounter}% counter for the number of columns with no column width provided, and which will then be equally distributed +\newcounter{tmpiteratorcounter}% counter for any temporary purpose (e.g., iterating loops) +\newlength{\cvcolumnsdummywidth}\setlength{\cvcolumnsdummywidth}{1000pt}% dummy width for total width, in order to enable arithmetics (TeX has no float variables, only integer counters or lengths) +\newlength{\cvcolumnswidth}% total width available for head / content +\newlength{\cvcolumnsautowidth}% total width of columns with no explicit width provided +\newlength{\cvcolumnautowidth}% width of one of the columns with no explicit width provided (based on equal distribution of remaining space) +\newif\if@cvcolumns@head@empty% whether or not at least one of the columns has a header +\newenvironment*{cvcolumns}% + {% at environment opening: reset counters, lengths and ifs + \setcounter{cvcolumnscounter}{0}% + \setcounter{cvcolumnsautowidthcounter}{0}% + \setlength{\cvcolumnsautowidth}{\cvcolumnsdummywidth}% + \setlength{\cvcolumnautowidth}{0pt}% + \@cvcolumns@head@emptytrue}% + {% at environment closing: typeset environment + % compute the width of each cvcolumn, considering a spacing of \separatorcolumnwidth and the columns with set width + \ifnum\thecvcolumnscounter>0% + \setlength{\cvcolumnswidth}{\maincolumnwidth-\value{cvcolumnscounter}\separatorcolumnwidth+\separatorcolumnwidth}% + \setlength{\cvcolumnautowidth}{\cvcolumnswidth*\ratio{\cvcolumnsautowidth}{\cvcolumnsdummywidth}/\value{cvcolumnsautowidthcounter}}\fi% + % pre-aggregate the tabular definition, heading and content (required before creating the tabular, as the tabular environment doesn't like loops --- probably because "&" generates a \endgroup) + % - the tabular definition is the aggregation of the different "\cvcolumn<i>@def" (by default "p{\cvcolumnautowidth}"), separated by "@{\hspace*{\separatorcolumnwidth}}" + % - the tabular heading is the aggregation of the different "\cvcolumn<i>@head", separated by "&" + % - the tabular content is the aggregation of the different "\cvcolumn<i>@content", separated by "&" + % to aggregate the different elements, \protected@edef or \g@addto@macro is required to avoid that \cvcolumns@def, -@head and -@content get expanded in subsequent redefinitions, which would cause errors due to the expansions of \hspace, of \subsectionstyle and possibly of user content/argument such as font commands + \def\cvcolumns@def{}% + \def\cvcolumns@head{}% + \def\cvcolumns@content{}% + \setcounter{tmpiteratorcounter}{0}% + % loop based on \g@addto@macro + \loop\ifnum\thetmpiteratorcounter<\thecvcolumnscounter% + \ifnum\thetmpiteratorcounter=0\else% + \g@addto@macro\cvcolumns@def{@{\hspace*{\separatorcolumnwidth}}}% + \g@addto@macro\cvcolumns@head{&}% + \g@addto@macro\cvcolumns@content{&}\fi% + \expandafter\g@addto@macro\expandafter\cvcolumns@def\expandafter{\csname cvcolumn\roman{tmpiteratorcounter}@def\endcsname}% + \expandafter\g@addto@macro\expandafter\cvcolumns@head\expandafter{\csname cvcolumn\roman{tmpiteratorcounter}@head\endcsname}% + \expandafter\g@addto@macro\expandafter\cvcolumns@content\expandafter{\csname cvcolumn\roman{tmpiteratorcounter}@content\endcsname}% + \stepcounter{tmpiteratorcounter}% + \repeat% +% % same loop based on \protected@edef +% \loop\ifnum\thetmpiteratorcounter<\thecvcolumnscounter% +% \ifnum\thetmpiteratorcounter=0\else% +% \protected@edef\cvcolumns@def{\cvcolumns@def @{\hspace*{\separatorcolumnwidth}}}% +% \protected@edef\cvcolumns@head{\cvcolumns@head &}% +% \protected@edef\cvcolumns@content{\cvcolumns@content &}\fi% +% \expandafter\protected@edef\expandafter\cvcolumns@def\expandafter{\expandafter\cvcolumns@def\expandafter\protect\csname cvcolumn\roman{tmpiteratorcounter}@def\endcsname}% +% \expandafter\protected@edef\expandafter\cvcolumns@head\expandafter{\expandafter\cvcolumns@head\expandafter\protect\csname cvcolumn\roman{tmpiteratorcounter}@head\endcsname}% +% \expandafter\protected@edef\expandafter\cvcolumns@content\expandafter{\expandafter\cvcolumns@content\expandafter\protect\csname cvcolumn\roman{tmpiteratorcounter}@content\endcsname}% +% \stepcounter{tmpiteratorcounter}% +% \repeat% + % create the tabular + \cvitem{}{% + \begin{tabular}{\cvcolumns@def}% + \if@cvcolumns@head@empty\else% + \cvcolumns@head\\[-.8em]% + {\color{color1}\rule{\maincolumnwidth}{.25pt}}\\\fi% + \cvcolumns@content% + \end{tabular}}} + +% cvcolumn command, to create a column inside a cvcolumns environment +% usage: \cvcolumn[width]{head}{content} +% where "width" is the width as a fraction of the line length (between 0 and 1), "head" is the column header and "content" its content ("head" and "content" can contain "\\", "\newline" or any other paragraph command such as "itemize") +\newcommand*{\cvcolumn}[3][\cvcolumnautowidth]{% +% \def\cvcolumn@width{}% + \ifthenelse{\equal{#1}{\cvcolumnautowidth}}% + {% if no width fraction is provided, count this column as auto-adjusted and set its width to \cvcolumnsautowidth + \stepcounter{cvcolumnsautowidthcounter}% + \expandafter\expandafter\expandafter\def\expandafter\csname cvcolumn\roman{cvcolumnscounter}@def\endcsname{p{\cvcolumnautowidth}}% + \expandafter\expandafter\expandafter\def\expandafter\csname cvcolumn\roman{cvcolumnscounter}@head\endcsname{\protect\parbox[b]{\cvcolumnautowidth}{\protect\subsectionstyle{#2}}}}% + {% if a width is provided, set the width of the column to it and decrease the available space for auto-adjusted columns + \addtolength{\cvcolumnsautowidth}{-#1\cvcolumnsdummywidth}% + \expandafter\expandafter\expandafter\def\expandafter\csname cvcolumn\roman{cvcolumnscounter}@def\endcsname{p{#1\cvcolumnswidth}}% + \expandafter\expandafter\expandafter\def\expandafter\csname cvcolumn\roman{cvcolumnscounter}@head\endcsname{\protect\parbox[b]{#1\cvcolumnswidth}{\protect\subsectionstyle{#2}}}}% + \ifthenelse{\equal{#2}{}}{}{\@cvcolumns@head@emptyfalse}% + \expandafter\expandafter\expandafter\def\expandafter\csname cvcolumn\roman{cvcolumnscounter}@content\endcsname{\protect\cvcolumncell{#3}}% + \stepcounter{cvcolumnscounter}} + +% internal cvcolumncell command, that enables a cvcolumn cell to contain paragraph commands (lists, newlines, etc) +\newcommand*{\cvcolumncell}[1]{{% put cell inside a group, so that command redefinitions are only local + % roughly restore \\ to its regular definition (outside of tabular) + \renewcommand*{\\}{\newline}% + % enclose the contents of the cell inside a vertical box, to allow paragraph commands + \protect\vtop{#1}}} + +% thebibliography environment, for use with BibTeX and possibly multibib +\newlength{\bibindent} +\setlength{\bibindent}{1.5em} +% bibliography item label +\newcommand*{\bibliographyitemlabel}{}% use \@biblabel{\arabic{enumiv}} for BibTeX labels +%\newif\if@multibibfirstbib\@multibibfirstbibfalse +% bibliography head (section, etc}, depending on whether multibib is used +\newcommand*{\bibliographyhead}[1]{\section{#1}} +\AtEndPreamble{\@ifpackageloaded{multibib}{\renewcommand*{\bibliographyhead}[1]{\subsection{#1}}}{}} +% thebibliography environment definition +\newenvironment{thebibliography}[1]{}{} +\newcommand*{\newblock}{\hskip .11em\@plus.33em\@minus.07em} +\let\@openbib@code\@empty + +% itemize, enumerate and description environment +\setlength{\leftmargini} {1em} +\leftmargin\leftmargini +\setlength{\leftmarginii} {\leftmargini} +\setlength{\leftmarginiii} {\leftmargini} +\setlength{\leftmarginiv} {\leftmargini} +\setlength{\leftmarginv} {\leftmargini} +\setlength{\leftmarginvi} {\leftmargini} +\setlength{\labelsep} {.5em}% this is the distance between the label and the body, but it pushes the label to the left rather than pushing the body to the right (to do the latter, modify \leftmargin(i) +\setlength{\labelwidth} {\leftmargini}% unfortunately, \labelwidth is not defined by item level (i.e. no \labeliwidth, \labeliiwidth, etc) +\addtolength{\labelwidth} {-\labelsep} +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty +\newcommand\labelenumi{\theenumi.} +\newcommand\labelenumii{(\theenumii)} +\newcommand\labelenumiii{\theenumiii.} +\newcommand\labelenumiv{\theenumiv.} +\renewcommand\p@enumii{\theenumi} +\renewcommand\p@enumiii{\p@enumii(\theenumii)} +\renewcommand\p@enumiv{\p@enumiii\theenumiii} +% description label +\newcommand*\descriptionlabel[1]{\hspace\labelsep\normalfont\bfseries#1} + +% classical \today definition +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} + +%\newcommand{\widthofautobox}[1]{% +% \widthof{\begin{tabular}{@{}l@{}}#1\end{tabular}}} + +%\newcommand{\autobox}[2][b]{% +% \parbox[#1]{\widthofautobox{#2}}{#2}} + + +%------------------------------------------------------------------------------- +% letter design commands definitions +%------------------------------------------------------------------------------- +% elements +\newcommand*{\recipient}[2]{\def\@recipientname{#1}\def\@recipientaddress{#2}} +\renewcommand*{\date}[1]{\def\@date{#1}}\date{\today} +\newcommand*{\opening}[1]{\def\@opening{#1}} +\newcommand*{\closing}[1]{\def\@closing{#1}} +\newcommand*{\enclosure}[2][]{% + % if an optional argument is provided, use it to redefine \enclname + \ifthenelse{\equal{#1}{}}{}{\renewcommand*{\enclname}{#1}}% + \def\@enclosure{#2}} + +% recompute all letter lengths +\newcommand*{\recomputeletterlengths}{} + +% makes the letter title +% usage: \makelettertitle +\newcommand*{\makelettertitle}{} + +% makes the letter footer +% usage: \makeletterfooter +\newcommand*{\makeletterfooter}{\makefooter} + +% makes the letter closing +% usage: \makeletterclosing +\newcommand*{\makeletterclosing}{} + + +\endinput + + %% end of file `moderncv.cls'. \ No newline at end of file diff --git a/public/templates/template7/moderncvcolorblue.sty b/public/templates/template7/moderncvcolorblue.sty index cd244b89..3f9e4ac7 100644 --- a/public/templates/template7/moderncvcolorblue.sty +++ b/public/templates/template7/moderncvcolorblue.sty @@ -1,27 +1,27 @@ -%% start of file `moderncvcolorblue.sty'. -%% Copyright 2006-2013 Xavier Danaux (xdanaux@gmail.com). -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License version 1.3c, -% available at http://www.latex-project.org/lppl/. - - -%------------------------------------------------------------------------------- -% identification -%------------------------------------------------------------------------------- -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvcolorblue}[2013/02/09 v1.3.0 modern curriculum vitae and letter color scheme: blue] - - -%------------------------------------------------------------------------------- -% color scheme definition -%------------------------------------------------------------------------------- -\definecolor{color0}{rgb}{0,0,0}% black -\definecolor{color1}{rgb}{0, 0, 0}% light blue -\definecolor{color2}{rgb}{0.45,0.45,0.45}% dark grey - - -\endinput - - +%% start of file `moderncvcolorblue.sty'. +%% Copyright 2006-2013 Xavier Danaux (xdanaux@gmail.com). +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License version 1.3c, +% available at http://www.latex-project.org/lppl/. + + +%------------------------------------------------------------------------------- +% identification +%------------------------------------------------------------------------------- +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{moderncvcolorblue}[2013/02/09 v1.3.0 modern curriculum vitae and letter color scheme: blue] + + +%------------------------------------------------------------------------------- +% color scheme definition +%------------------------------------------------------------------------------- +\definecolor{color0}{rgb}{0,0,0}% black +\definecolor{color1}{rgb}{0, 0, 0}% light blue +\definecolor{color2}{rgb}{0.45,0.45,0.45}% dark grey + + +\endinput + + %% end of file `moderncvcolorblue.sty'. \ No newline at end of file diff --git a/public/templates/template7/moderncviconsletters.sty b/public/templates/template7/moderncviconsletters.sty index a9c8a705..de132206 100644 --- a/public/templates/template7/moderncviconsletters.sty +++ b/public/templates/template7/moderncviconsletters.sty @@ -1,50 +1,50 @@ -%% start of file `moderncviconsletters.sty'. -%% Copyright 2013-2013 Xavier Danaux (xdanaux@gmail.com). -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License version 1.3c, -% available at http://www.latex-project.org/lppl/. - - -%------------------------------------------------------------------------------- -% identification -%------------------------------------------------------------------------------- -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncviconsmarvosym}[2013/02/09 v1.3.0 modern curriculum vitae and letter icons: letters] - - -%------------------------------------------------------------------------------- -% required packages -%------------------------------------------------------------------------------- -% MarVoSym font -%\RequirePackage{marvosym} -\newcommand*{\marvosymbol}[1]{} -%\ifxetexorluatex -% \renewcommand*{\marvosymbol}[1]{{\fontspec{MarVoSym}\char#1}} -%\else - \renewcommand*{\marvosymbol}[1]{{\fontfamily{mvs}\fontencoding{U}\fontseries{m}\fontshape{n}\selectfont\char#1}} -%\fi - - -%------------------------------------------------------------------------------- -% symbols definition -%------------------------------------------------------------------------------- -\renewcommand*{\labelitemi}{\strut\textcolor{color1}{\marvosymbol{123}}}% equivalent to \Neutral from marvosym package; alternative: \fontencoding{U}\fontfamily{ding}\selectfont\tiny\symbol{'102} -%\renewcommand*{\labelitemii}{\strut\textcolor{color1}{\large\bfseries-}}% no change from default in moderncv.cls -%\renewcommand*{\labelitemiii}{\strut\textcolor{color1}{\rmfamily\textperiodcentered}}% no change from default in moderncv.cls -%\renewcommand*{\labelitemiv}{\labelitemiii}% no change from default in moderncv.cls - -\renewcommand*{\addresssymbol}{} -\renewcommand*{\mobilephonesymbol}{\textbf{M}~} -\renewcommand*{\fixedphonesymbol}{\textbf{T}~} -\renewcommand*{\faxphonesymbol}{\textbf{F}~} -\renewcommand*{\emailsymbol}{\textbf{E}~} -\renewcommand*{\homepagesymbol}{} - -\renewcommand*{\listitemsymbol}{\labelitemi~} - - -\endinput - - +%% start of file `moderncviconsletters.sty'. +%% Copyright 2013-2013 Xavier Danaux (xdanaux@gmail.com). +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License version 1.3c, +% available at http://www.latex-project.org/lppl/. + + +%------------------------------------------------------------------------------- +% identification +%------------------------------------------------------------------------------- +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{moderncviconsmarvosym}[2013/02/09 v1.3.0 modern curriculum vitae and letter icons: letters] + + +%------------------------------------------------------------------------------- +% required packages +%------------------------------------------------------------------------------- +% MarVoSym font +%\RequirePackage{marvosym} +\newcommand*{\marvosymbol}[1]{} +%\ifxetexorluatex +% \renewcommand*{\marvosymbol}[1]{{\fontspec{MarVoSym}\char#1}} +%\else + \renewcommand*{\marvosymbol}[1]{{\fontfamily{mvs}\fontencoding{U}\fontseries{m}\fontshape{n}\selectfont\char#1}} +%\fi + + +%------------------------------------------------------------------------------- +% symbols definition +%------------------------------------------------------------------------------- +\renewcommand*{\labelitemi}{\strut\textcolor{color1}{\marvosymbol{123}}}% equivalent to \Neutral from marvosym package; alternative: \fontencoding{U}\fontfamily{ding}\selectfont\tiny\symbol{'102} +%\renewcommand*{\labelitemii}{\strut\textcolor{color1}{\large\bfseries-}}% no change from default in moderncv.cls +%\renewcommand*{\labelitemiii}{\strut\textcolor{color1}{\rmfamily\textperiodcentered}}% no change from default in moderncv.cls +%\renewcommand*{\labelitemiv}{\labelitemiii}% no change from default in moderncv.cls + +\renewcommand*{\addresssymbol}{} +\renewcommand*{\mobilephonesymbol}{\textbf{M}~} +\renewcommand*{\fixedphonesymbol}{\textbf{T}~} +\renewcommand*{\faxphonesymbol}{\textbf{F}~} +\renewcommand*{\emailsymbol}{\textbf{E}~} +\renewcommand*{\homepagesymbol}{} + +\renewcommand*{\listitemsymbol}{\labelitemi~} + + +\endinput + + %% end of file `moderncviconsletters.sty'. \ No newline at end of file diff --git a/public/templates/template7/moderncviconsmarvosym.sty b/public/templates/template7/moderncviconsmarvosym.sty index facc32a6..c6ee316d 100644 --- a/public/templates/template7/moderncviconsmarvosym.sty +++ b/public/templates/template7/moderncviconsmarvosym.sty @@ -1,48 +1,48 @@ -%% start of file `moderncviconsmarvosym.sty'. -%% Copyright 2013-2013 Xavier Danaux (xdanaux@gmail.com). -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License version 1.3c, -% available at http://www.latex-project.org/lppl/. - - -%------------------------------------------------------------------------------- -% identification -%------------------------------------------------------------------------------- -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncviconsmarvosym}[2013/02/09 v1.3.0 modern curriculum vitae and letter icons: marvosym] - - -%------------------------------------------------------------------------------- -% required packages -%------------------------------------------------------------------------------- -% MarVoSym font -%\RequirePackage{marvosym} -\newcommand*{\marvosymbol}[1]{} -%\ifxetexorluatex -% \renewcommand*{\marvosymbol}[1]{{\fontspec{MarVoSym}\char#1}} -%\else - \renewcommand*{\marvosymbol}[1]{{\fontfamily{mvs}\fontencoding{U}\fontseries{m}\fontshape{n}\selectfont\char#1}} -%\fi - - -%------------------------------------------------------------------------------- -% symbols definition -%------------------------------------------------------------------------------- -\renewcommand*{\labelitemi}{\strut\textcolor{color1}{\marvosymbol{123}}}% equivalent to \Neutral from marvosym package; alternative: \fontencoding{U}\fontfamily{ding}\selectfont\tiny\symbol{'102} -%\renewcommand*{\labelitemii}{\strut\textcolor{color1}{\large\bfseries-}}% no change from default in moderncv.cls -%\renewcommand*{\labelitemiii}{\strut\textcolor{color1}{\rmfamily\textperiodcentered}}% no change from default in moderncv.cls -%\renewcommand*{\labelitemiv}{\labelitemiii}% no change from default in moderncv.cls - -\renewcommand*{\addresssymbol}{} -\renewcommand*{\mobilephonesymbol}{\marvosymbol{72}~} -\renewcommand*{\fixedphonesymbol}{\marvosymbol{84}~} -\renewcommand*{\faxphonesymbol}{\marvosymbol{117}~} -\renewcommand*{\emailsymbol}{\marvosymbol{66}~} -\renewcommand*{\homepagesymbol}{{\Large\marvosymbol{205}}~} - - -\endinput - - +%% start of file `moderncviconsmarvosym.sty'. +%% Copyright 2013-2013 Xavier Danaux (xdanaux@gmail.com). +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License version 1.3c, +% available at http://www.latex-project.org/lppl/. + + +%------------------------------------------------------------------------------- +% identification +%------------------------------------------------------------------------------- +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{moderncviconsmarvosym}[2013/02/09 v1.3.0 modern curriculum vitae and letter icons: marvosym] + + +%------------------------------------------------------------------------------- +% required packages +%------------------------------------------------------------------------------- +% MarVoSym font +%\RequirePackage{marvosym} +\newcommand*{\marvosymbol}[1]{} +%\ifxetexorluatex +% \renewcommand*{\marvosymbol}[1]{{\fontspec{MarVoSym}\char#1}} +%\else + \renewcommand*{\marvosymbol}[1]{{\fontfamily{mvs}\fontencoding{U}\fontseries{m}\fontshape{n}\selectfont\char#1}} +%\fi + + +%------------------------------------------------------------------------------- +% symbols definition +%------------------------------------------------------------------------------- +\renewcommand*{\labelitemi}{\strut\textcolor{color1}{\marvosymbol{123}}}% equivalent to \Neutral from marvosym package; alternative: \fontencoding{U}\fontfamily{ding}\selectfont\tiny\symbol{'102} +%\renewcommand*{\labelitemii}{\strut\textcolor{color1}{\large\bfseries-}}% no change from default in moderncv.cls +%\renewcommand*{\labelitemiii}{\strut\textcolor{color1}{\rmfamily\textperiodcentered}}% no change from default in moderncv.cls +%\renewcommand*{\labelitemiv}{\labelitemiii}% no change from default in moderncv.cls + +\renewcommand*{\addresssymbol}{} +\renewcommand*{\mobilephonesymbol}{\marvosymbol{72}~} +\renewcommand*{\fixedphonesymbol}{\marvosymbol{84}~} +\renewcommand*{\faxphonesymbol}{\marvosymbol{117}~} +\renewcommand*{\emailsymbol}{\marvosymbol{66}~} +\renewcommand*{\homepagesymbol}{{\Large\marvosymbol{205}}~} + + +\endinput + + %% end of file `moderncviconsmarvosym.sty'. \ No newline at end of file diff --git a/public/templates/template7/moderncvstyleclassic.sty b/public/templates/template7/moderncvstyleclassic.sty index 6babac23..613916e6 100644 --- a/public/templates/template7/moderncvstyleclassic.sty +++ b/public/templates/template7/moderncvstyleclassic.sty @@ -1,302 +1,302 @@ -%% start of file `moderncvstyleclassic.sty'. -%% Copyright 2006-2013 Xavier Danaux (xdanaux@gmail.com). -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License version 1.3c, -% available at http://www.latex-project.org/lppl/. - - -%------------------------------------------------------------------------------- -% identification -%------------------------------------------------------------------------------- -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{moderncvstyleclassic}[2013/02/09 v1.3.0 modern curriculum vitae and letter style scheme: classic] - - -%------------------------------------------------------------------------------- -% required packages -%------------------------------------------------------------------------------- -% Latin Modern fonts -%\ifxetexorluatex -% \setmainfont{Latin Modern Roman} -% \setsansfont{Latin Modern Sans} -% \setmathfont{Latin Modern Math} -%\else - \IfFileExists{lmodern.sty}% - {\RequirePackage{lmodern}}% - {} -%\fi - - -%------------------------------------------------------------------------------- -% overall style definition -%------------------------------------------------------------------------------- -% symbols -\moderncvicons{marvosym} - - -%------------------------------------------------------------------------------- -% resume style definition -%------------------------------------------------------------------------------- -% fonts -\renewcommand*{\namefont}{\fontsize{34}{36}\mdseries\upshape} -\renewcommand*{\titlefont}{\LARGE\mdseries\slshape} -\renewcommand*{\addressfont}{\small\mdseries\slshape} -\renewcommand*{\quotefont}{\large\slshape} -\renewcommand*{\sectionfont}{\Large\mdseries\upshape} -\renewcommand*{\subsectionfont}{\large\mdseries\upshape} -\renewcommand*{\hintfont}{} - -% styles -\renewcommand*{\namestyle}[1]{{\namefont\textcolor{color0}{#1}}} -\renewcommand*{\titlestyle}[1]{{\titlefont\textcolor{color2}{#1}}} -\renewcommand*{\addressstyle}[1]{{\addressfont\textcolor{color1}{#1}}} -\renewcommand*{\quotestyle}[1]{{\quotefont\textcolor{color1}{#1}}} -\renewcommand*{\sectionstyle}[1]{{\sectionfont\textcolor{color1}{#1}}} -\renewcommand*{\subsectionstyle}[1]{{\subsectionfont\textcolor{color1}{#1}}} -\renewcommand*{\hintstyle}[1]{{\hintfont\textcolor{color0}{#1}}} - -% lengths -\newlength{\quotewidth} -\newlength{\hintscolumnwidth} -\setlength{\hintscolumnwidth}{0.175\textwidth} -\newlength{\separatorcolumnwidth} -\setlength{\separatorcolumnwidth}{0.025\textwidth} -\newlength{\maincolumnwidth} -\newlength{\doubleitemmaincolumnwidth} -\newlength{\listitemsymbolwidth} -\settowidth{\listitemsymbolwidth}{\listitemsymbol} -\newlength{\listitemmaincolumnwidth} -\newlength{\listdoubleitemmaincolumnwidth} - -% commands -\renewcommand*{\recomputecvlengths}{% - \setlength{\quotewidth}{0.65\textwidth}% - % main lenghts - \setlength{\maincolumnwidth}{\textwidth-\separatorcolumnwidth-\hintscolumnwidth}% - % listitem lengths - \setlength{\listitemmaincolumnwidth}{\maincolumnwidth-\listitemsymbolwidth}% - % doubleitem lengths - \setlength{\doubleitemmaincolumnwidth}{\maincolumnwidth-\hintscolumnwidth-\separatorcolumnwidth-\separatorcolumnwidth}% - \setlength{\doubleitemmaincolumnwidth}{0.5\doubleitemmaincolumnwidth}% - % listdoubleitem lengths - \setlength{\listdoubleitemmaincolumnwidth}{\maincolumnwidth-\listitemsymbolwidth-\separatorcolumnwidth-\listitemsymbolwidth}% - \setlength{\listdoubleitemmaincolumnwidth}{0.5\listdoubleitemmaincolumnwidth}% - % fancyhdr lengths - \renewcommand{\headwidth}{\textwidth}% - % regular lengths - \setlength{\parskip}{0\p@}} - -% optional maketitle width to force a certain width (if set to 0pt, the width is calculated automatically) -\newlength{\makecvtitlenamewidth} -\setlength{\makecvtitlenamewidth}{0pt}% dummy value -\renewcommand*{\makecvtitle}{% - % recompute lengths (in case we are switching from letter to resume, or vice versa) - \recomputecvlengths% - % optional detailed information (pre-rendering) - \def\phonesdetails{}% - \collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number - \protected@edef\phonesdetails{\phonesdetails\protect\makenewline\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}}% - \newbox{\makecvtitledetailsbox}% - \savebox{\makecvtitledetailsbox}{% - \addressfont\color{color2}% - \begin{tabular}[b]{@{}r@{}}% - \ifthenelse{\isundefined{\@addressstreet}}{}{\makenewline\addresssymbol\@addressstreet% - \ifthenelse{\equal{\@addresscity}{}}{}{\makenewline\@addresscity}% if \addresstreet is defined, \addresscity and addresscountry will always be defined but could be empty - \ifthenelse{\equal{\@addresscountry}{}}{}{\makenewline\@addresscountry}}% - \phonesdetails% needed to be pre-rendered as loops and tabulars seem to conflict - \ifthenelse{\isundefined{\@email}}{}{\makenewline\emailsymbol\emaillink{\@email}}% - \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\homepagesymbol\httplink{\@homepage}}% - \ifthenelse{\isundefined{\@extrainfo}}{}{\makenewline\@extrainfo}% - \end{tabular} - }% - % optional photo (pre-rendering) - \newbox{\makecvtitlepicturebox}% - \savebox{\makecvtitlepicturebox}{% - \ifthenelse{\isundefined{\@photo}}% - {}% - {% - \hspace*{\separatorcolumnwidth}% - \color{color1}% - \setlength{\fboxrule}{\@photoframewidth}% - \ifdim\@photoframewidth=0pt% - \setlength{\fboxsep}{0pt}\fi% - \framebox{\includegraphics[width=\@photowidth]{\@photo}}}}% - % name and title - \newlength{\makecvtitledetailswidth}\settowidth{\makecvtitledetailswidth}{\usebox{\makecvtitledetailsbox}}% - \newlength{\makecvtitlepicturewidth}\settowidth{\makecvtitlepicturewidth}{\usebox{\makecvtitlepicturebox}}% - \ifthenelse{\lengthtest{\makecvtitlenamewidth=0pt}}% check for dummy value (equivalent to \ifdim\makecvtitlenamewidth=0pt) - {\setlength{\makecvtitlenamewidth}{\textwidth-\makecvtitledetailswidth-\makecvtitlepicturewidth}}% - {}% - \begin{minipage}[b]{\makecvtitlenamewidth}% - \namestyle{\@firstname\ \@lastname}% - \ifthenelse{\equal{\@title}{}}{}{\\[1.25em]\titlestyle{\@title}}% - \end{minipage}% - \hfill% - % optional detailed information (rendering) - \llap{\usebox{\makecvtitledetailsbox}}% \llap is used to suppress the width of the box, allowing overlap if the value of makecvtitlenamewidth is forced - % optional photo (rendering) - \usebox{\makecvtitlepicturebox}\\[2.5em]% - % optional quote - \ifthenelse{\isundefined{\@quote}}% - {}% - {{\centering\begin{minipage}{\quotewidth}\centering\quotestyle{\@quote}\end{minipage}\\[2.5em]}}% - \par}% to avoid weird spacing bug at the first section if no blank line is left after \makecvtitle - -\newlength{\baseletterheight} -\settoheight{\baseletterheight}{\sectionstyle{o}} -\setlength{\baseletterheight}{\baseletterheight-0.95ex} -\RenewDocumentCommand{\section}{sm}{% - \par\addvspace{2.5ex}% - \phantomsection{}% reset the anchor for hyperrefs - \addcontentsline{toc}{section}{#2}% - \parbox[t]{\hintscolumnwidth}{\strut\raggedleft\raisebox{\baseletterheight}{\color{color1}\rule{\hintscolumnwidth}{0.95ex}}}% - \hspace{\separatorcolumnwidth}% - \parbox[t]{\maincolumnwidth}{\strut\sectionstyle{#2}}% - \par\nobreak\addvspace{1ex}\@afterheading}% to avoid a pagebreak after the heading - -\RenewDocumentCommand{\subsection}{sm}{% - \par\addvspace{1ex}% - \phantomsection{}% reset the anchor for hyperrefs - \addcontentsline{toc}{subsection}{#2}% - \begin{tabular}{@{}p{\hintscolumnwidth}@{\hspace{\separatorcolumnwidth}}p{\maincolumnwidth}@{}}% - \raggedleft\hintstyle{} &{\strut\subsectionstyle{#2}}% - \end{tabular}% - \par\nobreak\addvspace{0.5ex}\@afterheading}% to avoid a pagebreak after the heading - -\renewcommand*{\cvitem}[3][.25em]{% - \begin{tabular}{@{}p{\hintscolumnwidth}@{\hspace{\separatorcolumnwidth}}p{\maincolumnwidth}@{}}% - \raggedleft\hintstyle{#2} &{#3}% - \end{tabular}% - \par\addvspace{#1}} - -\renewcommand*{\cvdoubleitem}[5][.25em]{% - \cvitem[#1]{#2}{% - \begin{minipage}[t]{\doubleitemmaincolumnwidth}#3\end{minipage}% - \hfill% fill of \separatorcolumnwidth - \begin{minipage}[t]{\hintscolumnwidth}\raggedleft\hintstyle{#4}\end{minipage}% - \hspace*{\separatorcolumnwidth}% - \begin{minipage}[t]{\doubleitemmaincolumnwidth}#5\end{minipage}}} - -\renewcommand*{\cvlistitem}[2][.25em]{% - \cvitem[#1]{}{\listitemsymbol\begin{minipage}[t]{\listitemmaincolumnwidth}#2\end{minipage}}} - -\renewcommand*{\cvlistdoubleitem}[3][.25em]{% - \cvitem[#1]{}{\listitemsymbol\begin{minipage}[t]{\listdoubleitemmaincolumnwidth}#2\end{minipage}% - \hfill% fill of \separatorcolumnwidth - \ifthenelse{\equal{#3}{}}% - {}% - {\listitemsymbol\begin{minipage}[t]{\listdoubleitemmaincolumnwidth}#3\end{minipage}}}} - -\renewcommand*{\cventry}[7][.25em]{% - \cvitem[#1]{#2}{% - {\bfseries#3}% - \ifthenelse{\equal{#4}{}}{}{, {\slshape#4}}% - \ifthenelse{\equal{#5}{}}{}{, #5}% - \ifthenelse{\equal{#6}{}}{}{, #6}% - .\strut% - \ifx&% - \else{\newline{}\begin{minipage}[t]{\linewidth}\small#7\end{minipage}}\fi}} - -\newbox{\cvitemwithcommentmainbox} -\newlength{\cvitemwithcommentmainlength} -\newlength{\cvitemwithcommentcommentlength} -\renewcommand*{\cvitemwithcomment}[4][.25em]{% - \savebox{\cvitemwithcommentmainbox}{{\bfseries#3}}% - \setlength{\cvitemwithcommentmainlength}{\widthof{\usebox{\cvitemwithcommentmainbox}}}% - \setlength{\cvitemwithcommentcommentlength}{\maincolumnwidth-\separatorcolumnwidth-\cvitemwithcommentmainlength}% - \cvitem[#1]{#2}{% - \begin{minipage}[t]{\cvitemwithcommentmainlength}\bfseries#3\end{minipage}% - \hfill% fill of \separatorcolumnwidth - \begin{minipage}[t]{\cvitemwithcommentcommentlength}\raggedleft\small\itshape#4\end{minipage}}} -\newcommand{\project}[4][.25em]{% - \savebox{\cvitemwithcommentmainbox}{{\bfseries#3}}% - \setlength{\cvitemwithcommentmainlength}{\widthof{\usebox{\cvitemwithcommentmainbox}}}% - \setlength{\cvitemwithcommentcommentlength}{\maincolumnwidth-\separatorcolumnwidth-\cvitemwithcommentmainlength}% - \cvitem[#1]{#2}{% - \begin{minipage}[t]{\cvitemwithcommentmainlength}\bfseries#3\end{minipage}% - \hfill% fill of \separatorcolumnwidth - \begin{minipage}[t]{\cvitemwithcommentcommentlength}\raggedleft\small\itshape#4\end{minipage}}} - -\renewenvironment{thebibliography}[1]% - {% - \bibliographyhead{\refname}% -% \small% - \begin{list}{\bibliographyitemlabel}% - {% - \setlength{\topsep}{0pt}% - \setlength{\labelwidth}{\hintscolumnwidth}% - \setlength{\labelsep}{\separatorcolumnwidth}% - \leftmargin\labelwidth% - \advance\leftmargin\labelsep% - \@openbib@code% - \usecounter{enumiv}% - \let\p@enumiv\@empty% - \renewcommand\theenumiv{\@arabic\c@enumiv}}% - \sloppy\clubpenalty4000\widowpenalty4000% -% \sfcode`\.\@m% -% \sfcode `\=1000\relax% - }% - {% - \def\@noitemerr{\@latex@warning{Empty `thebibliography' environment}}% - \end{list}% - } - - -%------------------------------------------------------------------------------- -% letter style definition -%------------------------------------------------------------------------------- -% commands -\renewcommand*{\recomputeletterlengths}{% - \recomputecvlengths% - \setlength{\parskip}{6\p@}} - -\renewcommand*{\makelettertitle}{% - % recompute lengths (in case we are switching from letter to resume, or vice versa) - \recomputeletterlengths% - % sender contact info - \hfill% - \begin{minipage}{.5\textwidth}% - \raggedleft% - \addressfont\textcolor{color2}{% - {\bfseries\upshape\@firstname~\@lastname}\@firstdetailselementfalse% - \ifthenelse{\isundefined{\@addressstreet}}{}{\makenewline\addresssymbol\@addressstreet% - \ifthenelse{\equal{\@addresscity}{}}{}{\makenewline\@addresscity}% if \addresstreet is defined, \addresscity and addresscountry will always be defined but could be empty - \ifthenelse{\equal{\@addresscountry}{}}{}{\makenewline\@addresscountry}}% - \collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number - \makenewline\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}% - \ifthenelse{\isundefined{\@email}}{}{\makenewline\emailsymbol\emaillink{\@email}}% - \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\homepagesymbol\httplink{\@homepage}}% - \ifthenelse{\isundefined{\@extrainfo}}{}{\makenewline\@extrainfo}}% - \end{minipage}\\[1em] - % recipient block - \begin{minipage}[t]{.5\textwidth} - \raggedright% - \addressfont% - {\bfseries\upshape\@recipientname}\\% - \@recipientaddress% - \end{minipage} - % date - \hfill% US style -% \\[1em]% UK style - \@date\\[2em]% US informal style: "January 1, 1900"; UK formal style: "01/01/1900" - % opening - \raggedright% - \@opening\\[1.5em]% - % ensure no extra spacing after \makelettertitle due to a possible blank line -% \ignorespacesafterend% not working - \hspace{0pt}\par\vspace{-\baselineskip}\vspace{-\parskip}} - -\renewcommand*{\makeletterclosing}{ - \@closing\\[3em]% - {\bfseries \@firstname~\@lastname}% - \ifthenelse{\isundefined{\@enclosure}}{}{% - \\% - \vfill% - {\color{color2}\itshape\enclname: \@enclosure}}} - - -\endinput - - +%% start of file `moderncvstyleclassic.sty'. +%% Copyright 2006-2013 Xavier Danaux (xdanaux@gmail.com). +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License version 1.3c, +% available at http://www.latex-project.org/lppl/. + + +%------------------------------------------------------------------------------- +% identification +%------------------------------------------------------------------------------- +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{moderncvstyleclassic}[2013/02/09 v1.3.0 modern curriculum vitae and letter style scheme: classic] + + +%------------------------------------------------------------------------------- +% required packages +%------------------------------------------------------------------------------- +% Latin Modern fonts +%\ifxetexorluatex +% \setmainfont{Latin Modern Roman} +% \setsansfont{Latin Modern Sans} +% \setmathfont{Latin Modern Math} +%\else + \IfFileExists{lmodern.sty}% + {\RequirePackage{lmodern}}% + {} +%\fi + + +%------------------------------------------------------------------------------- +% overall style definition +%------------------------------------------------------------------------------- +% symbols +\moderncvicons{marvosym} + + +%------------------------------------------------------------------------------- +% resume style definition +%------------------------------------------------------------------------------- +% fonts +\renewcommand*{\namefont}{\fontsize{34}{36}\mdseries\upshape} +\renewcommand*{\titlefont}{\LARGE\mdseries\slshape} +\renewcommand*{\addressfont}{\small\mdseries\slshape} +\renewcommand*{\quotefont}{\large\slshape} +\renewcommand*{\sectionfont}{\Large\mdseries\upshape} +\renewcommand*{\subsectionfont}{\large\mdseries\upshape} +\renewcommand*{\hintfont}{} + +% styles +\renewcommand*{\namestyle}[1]{{\namefont\textcolor{color0}{#1}}} +\renewcommand*{\titlestyle}[1]{{\titlefont\textcolor{color2}{#1}}} +\renewcommand*{\addressstyle}[1]{{\addressfont\textcolor{color1}{#1}}} +\renewcommand*{\quotestyle}[1]{{\quotefont\textcolor{color1}{#1}}} +\renewcommand*{\sectionstyle}[1]{{\sectionfont\textcolor{color1}{#1}}} +\renewcommand*{\subsectionstyle}[1]{{\subsectionfont\textcolor{color1}{#1}}} +\renewcommand*{\hintstyle}[1]{{\hintfont\textcolor{color0}{#1}}} + +% lengths +\newlength{\quotewidth} +\newlength{\hintscolumnwidth} +\setlength{\hintscolumnwidth}{0.175\textwidth} +\newlength{\separatorcolumnwidth} +\setlength{\separatorcolumnwidth}{0.025\textwidth} +\newlength{\maincolumnwidth} +\newlength{\doubleitemmaincolumnwidth} +\newlength{\listitemsymbolwidth} +\settowidth{\listitemsymbolwidth}{\listitemsymbol} +\newlength{\listitemmaincolumnwidth} +\newlength{\listdoubleitemmaincolumnwidth} + +% commands +\renewcommand*{\recomputecvlengths}{% + \setlength{\quotewidth}{0.65\textwidth}% + % main lenghts + \setlength{\maincolumnwidth}{\textwidth-\separatorcolumnwidth-\hintscolumnwidth}% + % listitem lengths + \setlength{\listitemmaincolumnwidth}{\maincolumnwidth-\listitemsymbolwidth}% + % doubleitem lengths + \setlength{\doubleitemmaincolumnwidth}{\maincolumnwidth-\hintscolumnwidth-\separatorcolumnwidth-\separatorcolumnwidth}% + \setlength{\doubleitemmaincolumnwidth}{0.5\doubleitemmaincolumnwidth}% + % listdoubleitem lengths + \setlength{\listdoubleitemmaincolumnwidth}{\maincolumnwidth-\listitemsymbolwidth-\separatorcolumnwidth-\listitemsymbolwidth}% + \setlength{\listdoubleitemmaincolumnwidth}{0.5\listdoubleitemmaincolumnwidth}% + % fancyhdr lengths + \renewcommand{\headwidth}{\textwidth}% + % regular lengths + \setlength{\parskip}{0\p@}} + +% optional maketitle width to force a certain width (if set to 0pt, the width is calculated automatically) +\newlength{\makecvtitlenamewidth} +\setlength{\makecvtitlenamewidth}{0pt}% dummy value +\renewcommand*{\makecvtitle}{% + % recompute lengths (in case we are switching from letter to resume, or vice versa) + \recomputecvlengths% + % optional detailed information (pre-rendering) + \def\phonesdetails{}% + \collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number + \protected@edef\phonesdetails{\phonesdetails\protect\makenewline\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}}% + \newbox{\makecvtitledetailsbox}% + \savebox{\makecvtitledetailsbox}{% + \addressfont\color{color2}% + \begin{tabular}[b]{@{}r@{}}% + \ifthenelse{\isundefined{\@addressstreet}}{}{\makenewline\addresssymbol\@addressstreet% + \ifthenelse{\equal{\@addresscity}{}}{}{\makenewline\@addresscity}% if \addresstreet is defined, \addresscity and addresscountry will always be defined but could be empty + \ifthenelse{\equal{\@addresscountry}{}}{}{\makenewline\@addresscountry}}% + \phonesdetails% needed to be pre-rendered as loops and tabulars seem to conflict + \ifthenelse{\isundefined{\@email}}{}{\makenewline\emailsymbol\emaillink{\@email}}% + \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\homepagesymbol\httplink{\@homepage}}% + \ifthenelse{\isundefined{\@extrainfo}}{}{\makenewline\@extrainfo}% + \end{tabular} + }% + % optional photo (pre-rendering) + \newbox{\makecvtitlepicturebox}% + \savebox{\makecvtitlepicturebox}{% + \ifthenelse{\isundefined{\@photo}}% + {}% + {% + \hspace*{\separatorcolumnwidth}% + \color{color1}% + \setlength{\fboxrule}{\@photoframewidth}% + \ifdim\@photoframewidth=0pt% + \setlength{\fboxsep}{0pt}\fi% + \framebox{\includegraphics[width=\@photowidth]{\@photo}}}}% + % name and title + \newlength{\makecvtitledetailswidth}\settowidth{\makecvtitledetailswidth}{\usebox{\makecvtitledetailsbox}}% + \newlength{\makecvtitlepicturewidth}\settowidth{\makecvtitlepicturewidth}{\usebox{\makecvtitlepicturebox}}% + \ifthenelse{\lengthtest{\makecvtitlenamewidth=0pt}}% check for dummy value (equivalent to \ifdim\makecvtitlenamewidth=0pt) + {\setlength{\makecvtitlenamewidth}{\textwidth-\makecvtitledetailswidth-\makecvtitlepicturewidth}}% + {}% + \begin{minipage}[b]{\makecvtitlenamewidth}% + \namestyle{\@firstname\ \@lastname}% + \ifthenelse{\equal{\@title}{}}{}{\\[1.25em]\titlestyle{\@title}}% + \end{minipage}% + \hfill% + % optional detailed information (rendering) + \llap{\usebox{\makecvtitledetailsbox}}% \llap is used to suppress the width of the box, allowing overlap if the value of makecvtitlenamewidth is forced + % optional photo (rendering) + \usebox{\makecvtitlepicturebox}\\[2.5em]% + % optional quote + \ifthenelse{\isundefined{\@quote}}% + {}% + {{\centering\begin{minipage}{\quotewidth}\centering\quotestyle{\@quote}\end{minipage}\\[2.5em]}}% + \par}% to avoid weird spacing bug at the first section if no blank line is left after \makecvtitle + +\newlength{\baseletterheight} +\settoheight{\baseletterheight}{\sectionstyle{o}} +\setlength{\baseletterheight}{\baseletterheight-0.95ex} +\RenewDocumentCommand{\section}{sm}{% + \par\addvspace{2.5ex}% + \phantomsection{}% reset the anchor for hyperrefs + \addcontentsline{toc}{section}{#2}% + \parbox[t]{\hintscolumnwidth}{\strut\raggedleft\raisebox{\baseletterheight}{\color{color1}\rule{\hintscolumnwidth}{0.95ex}}}% + \hspace{\separatorcolumnwidth}% + \parbox[t]{\maincolumnwidth}{\strut\sectionstyle{#2}}% + \par\nobreak\addvspace{1ex}\@afterheading}% to avoid a pagebreak after the heading + +\RenewDocumentCommand{\subsection}{sm}{% + \par\addvspace{1ex}% + \phantomsection{}% reset the anchor for hyperrefs + \addcontentsline{toc}{subsection}{#2}% + \begin{tabular}{@{}p{\hintscolumnwidth}@{\hspace{\separatorcolumnwidth}}p{\maincolumnwidth}@{}}% + \raggedleft\hintstyle{} &{\strut\subsectionstyle{#2}}% + \end{tabular}% + \par\nobreak\addvspace{0.5ex}\@afterheading}% to avoid a pagebreak after the heading + +\renewcommand*{\cvitem}[3][.25em]{% + \begin{tabular}{@{}p{\hintscolumnwidth}@{\hspace{\separatorcolumnwidth}}p{\maincolumnwidth}@{}}% + \raggedleft\hintstyle{#2} &{#3}% + \end{tabular}% + \par\addvspace{#1}} + +\renewcommand*{\cvdoubleitem}[5][.25em]{% + \cvitem[#1]{#2}{% + \begin{minipage}[t]{\doubleitemmaincolumnwidth}#3\end{minipage}% + \hfill% fill of \separatorcolumnwidth + \begin{minipage}[t]{\hintscolumnwidth}\raggedleft\hintstyle{#4}\end{minipage}% + \hspace*{\separatorcolumnwidth}% + \begin{minipage}[t]{\doubleitemmaincolumnwidth}#5\end{minipage}}} + +\renewcommand*{\cvlistitem}[2][.25em]{% + \cvitem[#1]{}{\listitemsymbol\begin{minipage}[t]{\listitemmaincolumnwidth}#2\end{minipage}}} + +\renewcommand*{\cvlistdoubleitem}[3][.25em]{% + \cvitem[#1]{}{\listitemsymbol\begin{minipage}[t]{\listdoubleitemmaincolumnwidth}#2\end{minipage}% + \hfill% fill of \separatorcolumnwidth + \ifthenelse{\equal{#3}{}}% + {}% + {\listitemsymbol\begin{minipage}[t]{\listdoubleitemmaincolumnwidth}#3\end{minipage}}}} + +\renewcommand*{\cventry}[7][.25em]{% + \cvitem[#1]{#2}{% + {\bfseries#3}% + \ifthenelse{\equal{#4}{}}{}{, {\slshape#4}}% + \ifthenelse{\equal{#5}{}}{}{, #5}% + \ifthenelse{\equal{#6}{}}{}{, #6}% + .\strut% + \ifx&% + \else{\newline{}\begin{minipage}[t]{\linewidth}\small#7\end{minipage}}\fi}} + +\newbox{\cvitemwithcommentmainbox} +\newlength{\cvitemwithcommentmainlength} +\newlength{\cvitemwithcommentcommentlength} +\renewcommand*{\cvitemwithcomment}[4][.25em]{% + \savebox{\cvitemwithcommentmainbox}{{\bfseries#3}}% + \setlength{\cvitemwithcommentmainlength}{\widthof{\usebox{\cvitemwithcommentmainbox}}}% + \setlength{\cvitemwithcommentcommentlength}{\maincolumnwidth-\separatorcolumnwidth-\cvitemwithcommentmainlength}% + \cvitem[#1]{#2}{% + \begin{minipage}[t]{\cvitemwithcommentmainlength}\bfseries#3\end{minipage}% + \hfill% fill of \separatorcolumnwidth + \begin{minipage}[t]{\cvitemwithcommentcommentlength}\raggedleft\small\itshape#4\end{minipage}}} +\newcommand{\project}[4][.25em]{% + \savebox{\cvitemwithcommentmainbox}{{\bfseries#3}}% + \setlength{\cvitemwithcommentmainlength}{\widthof{\usebox{\cvitemwithcommentmainbox}}}% + \setlength{\cvitemwithcommentcommentlength}{\maincolumnwidth-\separatorcolumnwidth-\cvitemwithcommentmainlength}% + \cvitem[#1]{#2}{% + \begin{minipage}[t]{\cvitemwithcommentmainlength}\bfseries#3\end{minipage}% + \hfill% fill of \separatorcolumnwidth + \begin{minipage}[t]{\cvitemwithcommentcommentlength}\raggedleft\small\itshape#4\end{minipage}}} + +\renewenvironment{thebibliography}[1]% + {% + \bibliographyhead{\refname}% +% \small% + \begin{list}{\bibliographyitemlabel}% + {% + \setlength{\topsep}{0pt}% + \setlength{\labelwidth}{\hintscolumnwidth}% + \setlength{\labelsep}{\separatorcolumnwidth}% + \leftmargin\labelwidth% + \advance\leftmargin\labelsep% + \@openbib@code% + \usecounter{enumiv}% + \let\p@enumiv\@empty% + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \sloppy\clubpenalty4000\widowpenalty4000% +% \sfcode`\.\@m% +% \sfcode `\=1000\relax% + }% + {% + \def\@noitemerr{\@latex@warning{Empty `thebibliography' environment}}% + \end{list}% + } + + +%------------------------------------------------------------------------------- +% letter style definition +%------------------------------------------------------------------------------- +% commands +\renewcommand*{\recomputeletterlengths}{% + \recomputecvlengths% + \setlength{\parskip}{6\p@}} + +\renewcommand*{\makelettertitle}{% + % recompute lengths (in case we are switching from letter to resume, or vice versa) + \recomputeletterlengths% + % sender contact info + \hfill% + \begin{minipage}{.5\textwidth}% + \raggedleft% + \addressfont\textcolor{color2}{% + {\bfseries\upshape\@firstname~\@lastname}\@firstdetailselementfalse% + \ifthenelse{\isundefined{\@addressstreet}}{}{\makenewline\addresssymbol\@addressstreet% + \ifthenelse{\equal{\@addresscity}{}}{}{\makenewline\@addresscity}% if \addresstreet is defined, \addresscity and addresscountry will always be defined but could be empty + \ifthenelse{\equal{\@addresscountry}{}}{}{\makenewline\@addresscountry}}% + \collectionloop{phones}{% the key holds the phone type (=symbol command prefix), the item holds the number + \makenewline\csname\collectionloopkey phonesymbol\endcsname\collectionloopitem}% + \ifthenelse{\isundefined{\@email}}{}{\makenewline\emailsymbol\emaillink{\@email}}% + \ifthenelse{\isundefined{\@homepage}}{}{\makenewline\homepagesymbol\httplink{\@homepage}}% + \ifthenelse{\isundefined{\@extrainfo}}{}{\makenewline\@extrainfo}}% + \end{minipage}\\[1em] + % recipient block + \begin{minipage}[t]{.5\textwidth} + \raggedright% + \addressfont% + {\bfseries\upshape\@recipientname}\\% + \@recipientaddress% + \end{minipage} + % date + \hfill% US style +% \\[1em]% UK style + \@date\\[2em]% US informal style: "January 1, 1900"; UK formal style: "01/01/1900" + % opening + \raggedright% + \@opening\\[1.5em]% + % ensure no extra spacing after \makelettertitle due to a possible blank line +% \ignorespacesafterend% not working + \hspace{0pt}\par\vspace{-\baselineskip}\vspace{-\parskip}} + +\renewcommand*{\makeletterclosing}{ + \@closing\\[3em]% + {\bfseries \@firstname~\@lastname}% + \ifthenelse{\isundefined{\@enclosure}}{}{% + \\% + \vfill% + {\color{color2}\itshape\enclname: \@enclosure}}} + + +\endinput + + %% end of file `moderncvstyleclassic.sty'. \ No newline at end of file diff --git a/public/templates/template7/tweaklist.sty b/public/templates/template7/tweaklist.sty index e9283cf8..b5e2e343 100644 --- a/public/templates/template7/tweaklist.sty +++ b/public/templates/template7/tweaklist.sty @@ -1,56 +1,56 @@ -%% start of file `tweaklist.sty'. -%% Original by Jakob Schiøtz, downloaded from http://dcwww.camd.dtu.dk/~schiotz/comp/LatexTips/tweaklist.sty; not found on ctan. -%% Modified by Xavier Danaux (xdanaux@gmail.com). -% -% The tweaklist.sty package redefines the itemize, enumerate and description packages, so that all parameters can be adjusted. -% This was done by copying the original definitions, and adding "hook commands" that are executed when entering the environment. -% The hook commands are initially empty, but can be redefined with \renewcommand. -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License version 1.3c, -% available at http://www.latex-project.org/lppl/. - - -% hooks for the itemize environment -\def\itemhook{} -\def\itemhooki{} -\def\itemhookii{} -\def\itemhookiii{} -\def\itemhookiv{} -% hooks for the enumerate environment -\def\enumhook{} -\def\enumhooki{} -\def\enumhookii{} -\def\enumhookiii{} -\def\enumhookiv{} -% hook for the description environment -\def\deschook{} -% original environment definitions, with hooks added -\def\enumerate{% - \ifnum \@enumdepth >\thr@@\@toodeep\else - \advance\@enumdepth\@ne - \edef\@enumctr{enum\romannumeral\the\@enumdepth}% - \expandafter - \list - \csname label\@enumctr\endcsname - {% - \enumhook \csname enumhook\romannumeral\the\@enumdepth\endcsname% - \usecounter\@enumctr\def\makelabel##1{\hss\llap{##1}}% - }% - \fi} -\def\itemize{% - \ifnum \@itemdepth >\thr@@\@toodeep\else - \advance\@itemdepth\@ne - \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% - \expandafter - \list - \csname\@itemitem\endcsname - {% - \itemhook \csname itemhook\romannumeral\the\@itemdepth\endcsname% - \def\makelabel##1{\hss\llap{##1}}% - }% - \fi} -\newenvironment{description} - {\list{}{\deschook\labelwidth\z@ \itemindent-\leftmargin - \let\makelabel\descriptionlabel}} +%% start of file `tweaklist.sty'. +%% Original by Jakob Schiøtz, downloaded from http://dcwww.camd.dtu.dk/~schiotz/comp/LatexTips/tweaklist.sty; not found on ctan. +%% Modified by Xavier Danaux (xdanaux@gmail.com). +% +% The tweaklist.sty package redefines the itemize, enumerate and description packages, so that all parameters can be adjusted. +% This was done by copying the original definitions, and adding "hook commands" that are executed when entering the environment. +% The hook commands are initially empty, but can be redefined with \renewcommand. +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License version 1.3c, +% available at http://www.latex-project.org/lppl/. + + +% hooks for the itemize environment +\def\itemhook{} +\def\itemhooki{} +\def\itemhookii{} +\def\itemhookiii{} +\def\itemhookiv{} +% hooks for the enumerate environment +\def\enumhook{} +\def\enumhooki{} +\def\enumhookii{} +\def\enumhookiii{} +\def\enumhookiv{} +% hook for the description environment +\def\deschook{} +% original environment definitions, with hooks added +\def\enumerate{% + \ifnum \@enumdepth >\thr@@\@toodeep\else + \advance\@enumdepth\@ne + \edef\@enumctr{enum\romannumeral\the\@enumdepth}% + \expandafter + \list + \csname label\@enumctr\endcsname + {% + \enumhook \csname enumhook\romannumeral\the\@enumdepth\endcsname% + \usecounter\@enumctr\def\makelabel##1{\hss\llap{##1}}% + }% + \fi} +\def\itemize{% + \ifnum \@itemdepth >\thr@@\@toodeep\else + \advance\@itemdepth\@ne + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% + \expandafter + \list + \csname\@itemitem\endcsname + {% + \itemhook \csname itemhook\romannumeral\the\@itemdepth\endcsname% + \def\makelabel##1{\hss\llap{##1}}% + }% + \fi} +\newenvironment{description} + {\list{}{\deschook\labelwidth\z@ \itemindent-\leftmargin + \let\makelabel\descriptionlabel}} {\endlist} \ No newline at end of file diff --git a/public/templates/template8/mcdowellcv.cls b/public/templates/template8/mcdowellcv.cls index a489940e..7beeacac 100755 --- a/public/templates/template8/mcdowellcv.cls +++ b/public/templates/template8/mcdowellcv.cls @@ -1,192 +1,192 @@ -%% The MIT License (MIT) -%% -%% Copyright (c) 2015 Daniil Belyakov -%% -%% 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. -\ProvidesClass{mcdowellcv}[2015/12/15 v1.1.0 McDowell CV class] - -% Set up the fonts according to options -\def\mainfontsize{11pt} -\def\mainfontface{Times New Roman} - -\DeclareOption{calibri}{% - \def\mainfontface{Calibri} -} - -\ProcessOptions\relax - -% Set font size and paper type -\LoadClass[letterpaper,\mainfontsize]{article} - -% Set document margins -\usepackage[left=0.75in,top=0.6in,right=0.75in,bottom=0.6in]{geometry} - -% Set font face -\usepackage{fontspec} - -% Remove paragraph indentation -\usepackage[parfill]{parskip} - -% Required for boldface (\bf and \bfseries) tabular columns -\usepackage{array} - -% Required for ifthenelse statements -\usepackage{etoolbox} - -% Suppress page numbers -\pagestyle{empty} - -% Flexible tables -\usepackage{tabu} - -% For custom margins -\usepackage{changepage} - -% To customize lists -\usepackage{enumitem} -% Remove left margin from lists, suppress vertical item separation and set top -% separation to a negative value to suppress a single parskip before lists -\setlist{leftmargin=*, noitemsep, topsep=-1\parskip} - -% For spcaed small caps -\usepackage{microtype} - -\DeclareMicrotypeSet*{smallcapsi} { - encoding = {OT1,T1,T2A,LY1,OT4,QX,T5,TS1,EU1,EU2}, - shape = {sc*,si,scit} -} - -%-------------------------------------------------------------------------------- -% Constants - -%-------------------------------------------------------------------------------- -\def\afterheaderspace{3pt} -\def\beforesectionheaderspace{4.75pt} -\def\sectionheadermargin{6pt} -\def\aftersectionheaderspace{-4pt} -\def\sectionheaderhrlueheight{0.5pt} -\def\aftersinglelinesubsectionheaderspace{-6pt} -\def\afterdoublelinesubsectionheaderspace{0pt} -\def\aftermultilinesubsectionheaderspace{-6pt} -\def\afteremptysubsectionheaderspace{3pt} -\def\subsectionmargin{9pt} -\def\aftersubsectionspace{3pt} - -%-------------------------------------------------------------------------------- -% Header Setup and Printing - -%-------------------------------------------------------------------------------- - -% Address -\makeatletter - -\newcommand\address[1]{\def\@address{#1}} -\address{} - -\newcommand\printaddress{ - \small{\@address} -} - -\makeatother - -% Name -\makeatletter - -\newcommand\name[1]{\def\@name{#1}} -\name{} - -\newcommand\printname{ - \textbf{\LARGE\textsc{\@name}} -} - -\makeatother - -% Contacts -\makeatletter - -\newcommand\contacts[1]{\def\@contacts{#1}} -\contacts{} - -\newcommand\printcontacts{ - \small{\@contacts} -} - -\makeatother - -\makeatletter -\newcommand\makeheader{ - \begin{center} - \begin{tabu} to 1\textwidth { X[l,m] X[2,c,m] X[r,m] } - \printaddress & \printname & \printcontacts \\ - \end{tabu} - \end{center} - \vspace*{\afterheaderspace} -} -\makeatother - -%-------------------------------------------------------------------------------- -% Sections and Subsections - -%-------------------------------------------------------------------------------- - -% Print a section header -\makeatletter -\newenvironment{cvsection}[1]{ - \vspace*{\beforesectionheaderspace} - % Set text margins to equal \tabcolsep (6pt by default) - \begin{adjustwidth}{\sectionheadermargin}{\sectionheadermargin} - \textsc{\textbf{#1}} - \end{adjustwidth} - \smallskip - \hrule height \sectionheaderhrlueheight - \vspace*{\aftersectionheaderspace} -}{} -\makeatother - -% Print a subsection -\makeatletter -% Define toggles checking if titles were defined -\newtoggle{lefttitledefined} -\newtoggle{centertitledefined} -\newtoggle{righttitledefined} - -\newenvironment{cvsubsection}[4][1]{ - \notblank{#2}{\toggletrue{lefttitledefined}}{} - \notblank{#3}{\toggletrue{centertitledefined}}{} - \notblank{#4}{\toggletrue{righttitledefined}}{} - \ifboolexpr{togl {lefttitledefined} or togl {centertitledefined} or togl {righttitledefined}}{ - \begin{tabu} to 1\textwidth { X[l,p] X[c,p] X[r,p] } - \textbf{#2} & \textbf{#3} & \textbf{#4} \\ - \end{tabu} - % Add space according to the specidied number of lines - \ifnumcomp{#1}{=}{1}{\vspace*{\aftersinglelinesubsectionheaderspace}}{ - \ifnumcomp{#1}{=}{2}{\vspace*{\afterdoublelinesubsectionheaderspace}}{ - \vspace*{\aftermultilinesubsectionheaderspace} - } - } - }{ - \vspace*{\afteremptysubsectionheaderspace} - } - \togglefalse{lefttitledefined} - \togglefalse{centertitledefined} - \togglefalse{righttitledefined} - \begin{adjustwidth}{\subsectionmargin}{\subsectionmargin} -} -{ - \end{adjustwidth} - \vspace*{\aftersubsectionspace} -} +%% The MIT License (MIT) +%% +%% Copyright (c) 2015 Daniil Belyakov +%% +%% 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. +\ProvidesClass{mcdowellcv}[2015/12/15 v1.1.0 McDowell CV class] + +% Set up the fonts according to options +\def\mainfontsize{11pt} +\def\mainfontface{Times New Roman} + +\DeclareOption{calibri}{% + \def\mainfontface{Calibri} +} + +\ProcessOptions\relax + +% Set font size and paper type +\LoadClass[letterpaper,\mainfontsize]{article} + +% Set document margins +\usepackage[left=0.75in,top=0.6in,right=0.75in,bottom=0.6in]{geometry} + +% Set font face +\usepackage{fontspec} + +% Remove paragraph indentation +\usepackage[parfill]{parskip} + +% Required for boldface (\bf and \bfseries) tabular columns +\usepackage{array} + +% Required for ifthenelse statements +\usepackage{etoolbox} + +% Suppress page numbers +\pagestyle{empty} + +% Flexible tables +\usepackage{tabu} + +% For custom margins +\usepackage{changepage} + +% To customize lists +\usepackage{enumitem} +% Remove left margin from lists, suppress vertical item separation and set top +% separation to a negative value to suppress a single parskip before lists +\setlist{leftmargin=*, noitemsep, topsep=-1\parskip} + +% For spcaed small caps +\usepackage{microtype} + +\DeclareMicrotypeSet*{smallcapsi} { + encoding = {OT1,T1,T2A,LY1,OT4,QX,T5,TS1,EU1,EU2}, + shape = {sc*,si,scit} +} + +%-------------------------------------------------------------------------------- +% Constants - +%-------------------------------------------------------------------------------- +\def\afterheaderspace{3pt} +\def\beforesectionheaderspace{4.75pt} +\def\sectionheadermargin{6pt} +\def\aftersectionheaderspace{-4pt} +\def\sectionheaderhrlueheight{0.5pt} +\def\aftersinglelinesubsectionheaderspace{-6pt} +\def\afterdoublelinesubsectionheaderspace{0pt} +\def\aftermultilinesubsectionheaderspace{-6pt} +\def\afteremptysubsectionheaderspace{3pt} +\def\subsectionmargin{9pt} +\def\aftersubsectionspace{3pt} + +%-------------------------------------------------------------------------------- +% Header Setup and Printing - +%-------------------------------------------------------------------------------- + +% Address +\makeatletter + +\newcommand\address[1]{\def\@address{#1}} +\address{} + +\newcommand\printaddress{ + \small{\@address} +} + +\makeatother + +% Name +\makeatletter + +\newcommand\name[1]{\def\@name{#1}} +\name{} + +\newcommand\printname{ + \textbf{\LARGE\textsc{\@name}} +} + +\makeatother + +% Contacts +\makeatletter + +\newcommand\contacts[1]{\def\@contacts{#1}} +\contacts{} + +\newcommand\printcontacts{ + \small{\@contacts} +} + +\makeatother + +\makeatletter +\newcommand\makeheader{ + \begin{center} + \begin{tabu} to 1\textwidth { X[l,m] X[2,c,m] X[r,m] } + \printaddress & \printname & \printcontacts \\ + \end{tabu} + \end{center} + \vspace*{\afterheaderspace} +} +\makeatother + +%-------------------------------------------------------------------------------- +% Sections and Subsections - +%-------------------------------------------------------------------------------- + +% Print a section header +\makeatletter +\newenvironment{cvsection}[1]{ + \vspace*{\beforesectionheaderspace} + % Set text margins to equal \tabcolsep (6pt by default) + \begin{adjustwidth}{\sectionheadermargin}{\sectionheadermargin} + \textsc{\textbf{#1}} + \end{adjustwidth} + \smallskip + \hrule height \sectionheaderhrlueheight + \vspace*{\aftersectionheaderspace} +}{} +\makeatother + +% Print a subsection +\makeatletter +% Define toggles checking if titles were defined +\newtoggle{lefttitledefined} +\newtoggle{centertitledefined} +\newtoggle{righttitledefined} + +\newenvironment{cvsubsection}[4][1]{ + \notblank{#2}{\toggletrue{lefttitledefined}}{} + \notblank{#3}{\toggletrue{centertitledefined}}{} + \notblank{#4}{\toggletrue{righttitledefined}}{} + \ifboolexpr{togl {lefttitledefined} or togl {centertitledefined} or togl {righttitledefined}}{ + \begin{tabu} to 1\textwidth { X[l,p] X[c,p] X[r,p] } + \textbf{#2} & \textbf{#3} & \textbf{#4} \\ + \end{tabu} + % Add space according to the specidied number of lines + \ifnumcomp{#1}{=}{1}{\vspace*{\aftersinglelinesubsectionheaderspace}}{ + \ifnumcomp{#1}{=}{2}{\vspace*{\afterdoublelinesubsectionheaderspace}}{ + \vspace*{\aftermultilinesubsectionheaderspace} + } + } + }{ + \vspace*{\afteremptysubsectionheaderspace} + } + \togglefalse{lefttitledefined} + \togglefalse{centertitledefined} + \togglefalse{righttitledefined} + \begin{adjustwidth}{\subsectionmargin}{\subsectionmargin} +} +{ + \end{adjustwidth} + \vspace*{\aftersubsectionspace} +} \makeatother \ No newline at end of file diff --git a/src/atoms/progress.ts b/src/atoms/progress.ts index 634e0246..cc5cbddb 100644 --- a/src/atoms/progress.ts +++ b/src/atoms/progress.ts @@ -1,19 +1,19 @@ -import { atom } from 'jotai' - -export type SectionName = - | 'basics' - | 'education' - | 'work' - | 'skills' - | 'projects' - | 'awards' - -export interface Progress { - currSection: SectionName -} - -export const progressAtom = atom({ - currSection: 'basics' -}) - -progressAtom.debugLabel = 'formAtom' +import { atom } from 'jotai' + +export type SectionName = + | 'basics' + | 'education' + | 'work' + | 'skills' + | 'projects' + | 'awards' + +export interface Progress { + currSection: SectionName +} + +export const progressAtom = atom({ + currSection: 'basics' +}) + +progressAtom.debugLabel = 'formAtom' diff --git a/src/atoms/resume.ts b/src/atoms/resume.ts index b73d05bd..041bed2e 100644 --- a/src/atoms/resume.ts +++ b/src/atoms/resume.ts @@ -1,15 +1,15 @@ -import { atom } from 'jotai' - -export interface Resume { - url: string - isLoading: boolean - isError: boolean -} - -export const resumeAtom = atom({ - url: '', - isLoading: false, - isError: false -}) - -resumeAtom.debugLabel = 'resumeAtom' +import { atom } from 'jotai' + +export interface Resume { + url: string + isLoading: boolean + isError: boolean +} + +export const resumeAtom = atom({ + url: '', + isLoading: false, + isError: false +}) + +resumeAtom.debugLabel = 'resumeAtom' diff --git a/src/components/core/Button.tsx b/src/components/core/Button.tsx index ba5d1b23..3af0c1c8 100644 --- a/src/components/core/Button.tsx +++ b/src/components/core/Button.tsx @@ -1,89 +1,89 @@ -import styled from 'styled-components' -import { lighten, darken, rgba } from 'polished' -import { colors } from '../../theme' - -export const Button = styled.button` - display: flex; - justify-content: center; - align-items: center; - font-family: inherit; - font-size: 0.85em; - text-align: center; - text-decoration: none; - width: 175px; - height: 45px; - margin: 7px 0; - background: transparent; - color: white; - border-radius: 100px; - border: 1px solid ${darken(0.1, colors.primary)}; - box-shadow: 0 0 0 0 ${rgba(colors.primary, 0.7)}; - &:hover { - background: linear-gradient( - 40deg, - ${darken(0.45, colors.primary)}, - ${darken(0.3, colors.primary)} - ); - animation: none; - cursor: pointer; - } - &:active { - box-shadow: 0 1px 6px rgba(0, 0, 0, 0.06), 0 2px 40px rgba(0, 0, 0, 0.16); - border-color: ${lighten(0.15, colors.primary)}; - color: ${lighten(0.15, colors.primary)}; - } - &:focus { - outline: none; - } -` - -export const PrimaryButton = styled(Button)` - background: linear-gradient( - 40deg, - ${darken(0.3, colors.primary)}, - ${colors.primary} - ); - &:hover { - background: linear-gradient( - 40deg, - ${darken(0.4, colors.primary)}, - ${colors.primary} - ); - } -` - -export const MiniButton = styled(Button)` - height: unset; - width: unset; - padding: 6px 24px; - background: ${colors.borders}; - border: none; - border-radius: 4px; -` - -export const AddButton = styled.button` - padding: 0.5rem 0.75rem; - cursor: pointer; - outline: none; - border: none; - background: transparent; - color: ${colors.primary}; -` - -export const IconButton = styled.button` - display: flex; - align-items: center; - outline: none; - border: none; - background: transparent; - color: white; - border-radius: 4px; - - :hover { - background: ${colors.borders}; - } - - :focus { - background: ${colors.borders}; - } -` +import styled from 'styled-components' +import { lighten, darken, rgba } from 'polished' +import { colors } from '../../theme' + +export const Button = styled.button` + display: flex; + justify-content: center; + align-items: center; + font-family: inherit; + font-size: 0.85em; + text-align: center; + text-decoration: none; + width: 175px; + height: 45px; + margin: 7px 0; + background: transparent; + color: white; + border-radius: 100px; + border: 1px solid ${darken(0.1, colors.primary)}; + box-shadow: 0 0 0 0 ${rgba(colors.primary, 0.7)}; + &:hover { + background: linear-gradient( + 40deg, + ${darken(0.45, colors.primary)}, + ${darken(0.3, colors.primary)} + ); + animation: none; + cursor: pointer; + } + &:active { + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.06), 0 2px 40px rgba(0, 0, 0, 0.16); + border-color: ${lighten(0.15, colors.primary)}; + color: ${lighten(0.15, colors.primary)}; + } + &:focus { + outline: none; + } +` + +export const PrimaryButton = styled(Button)` + background: linear-gradient( + 40deg, + ${darken(0.3, colors.primary)}, + ${colors.primary} + ); + &:hover { + background: linear-gradient( + 40deg, + ${darken(0.4, colors.primary)}, + ${colors.primary} + ); + } +` + +export const MiniButton = styled(Button)` + height: unset; + width: unset; + padding: 6px 24px; + background: ${colors.borders}; + border: none; + border-radius: 4px; +` + +export const AddButton = styled.button` + padding: 0.5rem 0.75rem; + cursor: pointer; + outline: none; + border: none; + background: transparent; + color: ${colors.primary}; +` + +export const IconButton = styled.button` + display: flex; + align-items: center; + outline: none; + border: none; + background: transparent; + color: white; + border-radius: 4px; + + :hover { + background: ${colors.borders}; + } + + :focus { + background: ${colors.borders}; + } +` diff --git a/src/components/core/Divider.tsx b/src/components/core/Divider.tsx index 8a4a5738..42068c97 100644 --- a/src/components/core/Divider.tsx +++ b/src/components/core/Divider.tsx @@ -1,9 +1,9 @@ -import styled from 'styled-components' -import { colors } from '../../theme' - -export const Divider = styled.hr` - margin: 24px 0; - background: ${colors.primary}; - height: 4px; - border: none; -` +import styled from 'styled-components' +import { colors } from '../../theme' + +export const Divider = styled.hr` + margin: 24px 0; + background: ${colors.primary}; + height: 4px; + border: none; +` diff --git a/src/components/core/FormInput.tsx b/src/components/core/FormInput.tsx index 00f69eb5..a08e1f99 100644 --- a/src/components/core/FormInput.tsx +++ b/src/components/core/FormInput.tsx @@ -1,43 +1,43 @@ -import { useState, CSSProperties, SyntheticEvent } from 'react' -import styled from 'styled-components' - -import { StyledInput } from './Input' -import { MiniButton } from './Button' - -const Container = styled.div` - display: grid; - grid-template-columns: 1fr auto 12px; -` - -interface FormInputProps { - onSubmit: (value: string) => void - style?: CSSProperties -} - -export function FormInput({ onSubmit, style }: FormInputProps) { - const [value, setValue] = useState('') - - const handleSubmit = (event: SyntheticEvent) => { - event.preventDefault() - onSubmit(value) - setValue('') - } - - return ( - <Container style={style}> - <StyledInput - value={value} - onChange={(e) => setValue(e.target.value)} - onKeyDown={(e) => e.key === 'Enter' && handleSubmit(e)} - style={{ gridColumn: '1/4', gridRow: '1/1', paddingRight: 96 }} - /> - <MiniButton - type="button" - onClick={handleSubmit} - style={{ gridArea: '1/2' }} - > - Add - </MiniButton> - </Container> - ) -} +import { useState, CSSProperties, SyntheticEvent } from 'react' +import styled from 'styled-components' + +import { StyledInput } from './Input' +import { MiniButton } from './Button' + +const Container = styled.div` + display: grid; + grid-template-columns: 1fr auto 12px; +` + +interface FormInputProps { + onSubmit: (value: string) => void + style?: CSSProperties +} + +export function FormInput({ onSubmit, style }: FormInputProps) { + const [value, setValue] = useState('') + + const handleSubmit = (event: SyntheticEvent) => { + event.preventDefault() + onSubmit(value) + setValue('') + } + + return ( + <Container style={style}> + <StyledInput + value={value} + onChange={(e) => setValue(e.target.value)} + onKeyDown={(e) => e.key === 'Enter' && handleSubmit(e)} + style={{ gridColumn: '1/4', gridRow: '1/1', paddingRight: 96 }} + /> + <MiniButton + type="button" + onClick={handleSubmit} + style={{ gridArea: '1/2' }} + > + Add + </MiniButton> + </Container> + ) +} diff --git a/src/components/core/GlobalStyle.tsx b/src/components/core/GlobalStyle.tsx index a1fa86de..087568f8 100644 --- a/src/components/core/GlobalStyle.tsx +++ b/src/components/core/GlobalStyle.tsx @@ -1,20 +1,20 @@ -import { createGlobalStyle } from 'styled-components' -import cssReset from 'styled-reset' -import { colors } from '../../theme' - -export const GlobalStyle = createGlobalStyle` - ${cssReset} - - * { - box-sizing: border-box; - } - - html, body { - width: 100%; - height: 100%; - font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; - font-size: 0.95rem; - background: ${colors.background}; - color: ${colors.foreground}; - } -` +import { createGlobalStyle } from 'styled-components' +import cssReset from 'styled-reset' +import { colors } from '../../theme' + +export const GlobalStyle = createGlobalStyle` + ${cssReset} + + * { + box-sizing: border-box; + } + + html, body { + width: 100%; + height: 100%; + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-size: 0.95rem; + background: ${colors.background}; + color: ${colors.foreground}; + } +` diff --git a/src/components/core/Input.tsx b/src/components/core/Input.tsx index a9d889bd..d403ae06 100644 --- a/src/components/core/Input.tsx +++ b/src/components/core/Input.tsx @@ -1,33 +1,33 @@ -import { InputHTMLAttributes } from 'react' -import { FieldPath, useFormContext } from 'react-hook-form' -import styled from 'styled-components' -import { colors } from '../../theme' -import { FormValues } from '../../types' - -export const StyledInput = styled.input` - border: none; - background: transparent; - border: 1px solid ${colors.input}; - padding: 1rem; - color: ${colors.white}; - font-size: 0.85rem; - border-radius: 4px; - - &:focus { - outline: 1px solid ${colors.primary}; - } - - &::placeholder { - color: ${colors.placeholder}; - opacity: 0.5; - } -` - -export interface InputProps extends InputHTMLAttributes<HTMLInputElement> { - name: FieldPath<FormValues> -} - -export function Input({ name, ...inputProps }: InputProps) { - const formContext = useFormContext<FormValues>() - return <StyledInput {...inputProps} {...formContext.register(name)} /> -} +import { InputHTMLAttributes } from 'react' +import { FieldPath, useFormContext } from 'react-hook-form' +import styled from 'styled-components' +import { colors } from '../../theme' +import { FormValues } from '../../types' + +export const StyledInput = styled.input` + border: none; + background: transparent; + border: 1px solid ${colors.input}; + padding: 1rem; + color: ${colors.white}; + font-size: 0.85rem; + border-radius: 4px; + + &:focus { + outline: 1px solid ${colors.primary}; + } + + &::placeholder { + color: ${colors.placeholder}; + opacity: 0.5; + } +` + +export interface InputProps extends InputHTMLAttributes<HTMLInputElement> { + name: FieldPath<FormValues> +} + +export function Input({ name, ...inputProps }: InputProps) { + const formContext = useFormContext<FormValues>() + return <StyledInput {...inputProps} {...formContext.register(name)} /> +} diff --git a/src/components/core/LabeledInput.tsx b/src/components/core/LabeledInput.tsx index d8679ec3..e65541a9 100644 --- a/src/components/core/LabeledInput.tsx +++ b/src/components/core/LabeledInput.tsx @@ -1,32 +1,32 @@ -import styled from 'styled-components' -import { Input, InputProps } from './Input' -import { colors } from '../../theme' - -const Container = styled.div` - display: flex; - flex-direction: column; - margin-bottom: 2rem; - color: ${colors.white}; - - &:last-of-type { - margin-bottom: 0; - } -` - -const Label = styled.label` - color: ${colors.white}; - margin-bottom: 0.5rem; -` - -interface Props extends Omit<InputProps, 'formContext'> { - label: string -} - -export function LabeledInput({ label, ...inputProps }: Props) { - return ( - <Container> - <Label>{label}</Label> - <Input {...inputProps} /> - </Container> - ) -} +import styled from 'styled-components' +import { Input, InputProps } from './Input' +import { colors } from '../../theme' + +const Container = styled.div` + display: flex; + flex-direction: column; + margin-bottom: 2rem; + color: ${colors.white}; + + &:last-of-type { + margin-bottom: 0; + } +` + +const Label = styled.label` + color: ${colors.white}; + margin-bottom: 0.5rem; +` + +interface Props extends Omit<InputProps, 'formContext'> { + label: string +} + +export function LabeledInput({ label, ...inputProps }: Props) { + return ( + <Container> + <Label>{label}</Label> + <Input {...inputProps} /> + </Container> + ) +} diff --git a/src/components/core/Logo.tsx b/src/components/core/Logo.tsx index 3d6f1ecd..f133eeff 100644 --- a/src/components/core/Logo.tsx +++ b/src/components/core/Logo.tsx @@ -1,31 +1,31 @@ -import { colors } from '../../theme' - -interface Props { - marginTop?: string | number - marginBottom?: string | number - marginLeft?: string | number - marginRight?: string | number - scale?: number -} - -export function Logo(props: Props) { - return ( - <svg - width={260 * (props.scale ?? 1)} - height={70 * (props.scale ?? 1)} - viewBox="0 0 260 70" - xmlns="http://www.w3.org/2000/svg" - style={{ ...props }} - > - <rect x={0} y={0} width={260} height={70} fill="transparent" /> - <path - d="M19.2 25.7Q21.2 25.7 23.0 26.3Q24.8 26.9 26.0 28.0L26.0 28.0L23.3 32.9Q21.1 31.5 18.8 31.5L18.8 31.5Q15.6 31.5 13.6 33.8Q11.7 36.0 11.7 39.9L11.7 39.9L11.7 52.9L5.7 52.9L5.7 26.2L11.1 26.2L11.1 30.3Q12.7 28.0 14.7 26.8Q16.7 25.7 19.2 25.7L19.2 25.7ZM40.9 25.7Q47.4 25.7 51.1 29.4Q54.8 33.2 54.8 39.7L54.8 39.7Q54.8 40.4 54.6 41.9L54.6 41.9L33.3 41.9Q33.7 44.8 36.0 46.5Q38.2 48.2 41.7 48.2L41.7 48.2Q44.0 48.2 46.1 47.5Q48.2 46.7 49.4 45.5L49.4 45.5L53.1 49.0Q51.1 51.2 48.0 52.4Q45.0 53.7 41.6 53.7L41.6 53.7Q37.2 53.7 33.9 51.9Q30.7 50.2 28.9 47.0Q27.1 43.8 27.1 39.6L27.1 39.6Q27.1 35.5 28.8 32.3Q30.6 29.2 33.7 27.5Q36.8 25.7 40.9 25.7L40.9 25.7ZM41.1 30.9Q38.0 30.9 36.0 32.6Q34.0 34.2 33.4 37.2L33.4 37.2L48.9 37.2Q48.5 34.3 46.5 32.6Q44.4 30.9 41.1 30.9L41.1 30.9ZM70.3 53.6Q63.5 53.6 58.2 49.6L58.2 49.6L61.0 45.3Q62.8 46.7 65.3 47.4Q67.8 48.2 70.4 48.2L70.4 48.2Q73.0 48.2 74.4 47.4Q75.8 46.7 75.8 45.2L75.8 45.2Q75.8 43.8 74.4 43.0Q73.0 42.3 69.9 42.0L69.9 42.0Q64.7 41.5 61.9 39.3Q59.0 37.2 59.0 33.8L59.0 33.8Q59.0 31.3 60.5 29.5Q61.9 27.6 64.6 26.6Q67.2 25.6 70.6 25.6L70.6 25.6Q76.7 25.6 81.2 28.7L81.2 28.7L78.5 33.0Q75.0 30.7 70.9 30.7L70.9 30.7Q68.0 30.7 66.5 31.5Q65.0 32.3 65.0 33.8L65.0 33.8Q65.0 35.0 66.2 35.8Q67.5 36.5 70.4 36.8L70.4 36.8Q76.4 37.5 79.1 39.5Q81.8 41.5 81.8 45.3L81.8 45.3Q81.8 47.7 80.3 49.6Q78.9 51.5 76.3 52.5Q73.7 53.6 70.3 53.6L70.3 53.6ZM106.5 26.2L112.5 26.2L112.5 52.9L107.1 52.9L107.1 49.5Q103.7 53.5 98.0 53.5L98.0 53.5Q94.6 53.5 92.1 51.9Q89.5 50.4 88.2 47.6Q86.8 44.8 86.8 41.0L86.8 41.0L86.8 26.2L92.8 26.2L92.8 40.6Q92.8 44.1 94.5 46.1Q96.2 48.0 99.1 48.0L99.1 48.0Q102.4 48.0 104.4 45.8Q106.5 43.7 106.5 40.3L106.5 40.3L106.5 26.2Z " - fill="#fff" - /> - <path - d="M151.2 25.7Q156.3 25.7 159.3 28.8Q162.3 31.9 162.3 37.3L162.3 37.3L162.3 52.9L156.2 52.9L156.2 37.8Q156.2 34.6 154.8 32.9Q153.4 31.2 150.7 31.2L150.7 31.2Q147.7 31.2 145.9 33.1Q144.0 35.0 144.0 38.1L144.0 38.1L144.0 52.9L138.0 52.9L138.0 37.8Q138.0 34.6 136.5 32.9Q135.1 31.2 132.4 31.2L132.4 31.2Q129.4 31.2 127.6 33.1Q125.7 35.0 125.7 38.1L125.7 38.1L125.7 52.9L119.7 52.9L119.7 26.2L125.1 26.2L125.1 29.4Q128.0 25.7 133.0 25.7L133.0 25.7Q135.8 25.7 138.1 26.9Q140.4 28.2 141.7 30.4L141.7 30.4Q144.8 25.7 151.2 25.7L151.2 25.7ZM190.5 26.2L195.9 26.2L195.9 52.9L190.5 52.9L190.5 49.4Q188.9 51.3 186.4 52.4Q183.8 53.5 180.7 53.5L180.7 53.5Q176.9 53.5 173.9 51.8Q170.9 50.0 169.2 46.8Q167.5 43.6 167.5 39.6L167.5 39.6Q167.5 35.5 169.2 32.3Q170.9 29.2 173.9 27.4Q176.9 25.7 180.7 25.7L180.7 25.7Q183.8 25.7 186.4 26.8Q188.9 27.9 190.5 29.8L190.5 29.8L190.5 26.2ZM181.7 48.0Q185.3 48.0 187.6 45.7Q189.9 43.3 189.9 39.6L189.9 39.6Q189.9 35.9 187.6 33.5Q185.3 31.2 181.7 31.2L181.7 31.2Q178.1 31.2 175.8 33.5Q173.6 35.9 173.6 39.6L173.6 39.6Q173.6 43.3 175.8 45.7Q178.1 48.0 181.7 48.0L181.7 48.0ZM215.1 39.0L227.9 52.9L220.0 52.9L209.3 41.1L209.3 52.9L203.3 52.9L203.3 15.1L209.3 15.1L209.3 37.5L218.9 26.2L226.3 26.2L215.1 39.0ZM242.1 25.7Q248.6 25.7 252.3 29.4Q256.0 33.2 256.0 39.7L256.0 39.7Q256.0 40.4 255.9 41.9L255.9 41.9L234.5 41.9Q234.9 44.8 237.2 46.5Q239.4 48.2 243.0 48.2L243.0 48.2Q245.2 48.2 247.3 47.5Q249.4 46.7 250.6 45.5L250.6 45.5L254.3 49.0Q252.3 51.2 249.2 52.4Q246.2 53.7 242.8 53.7L242.8 53.7Q238.4 53.7 235.2 51.9Q231.9 50.2 230.1 47.0Q228.3 43.8 228.3 39.6L228.3 39.6Q228.3 35.5 230.0 32.3Q231.8 29.2 234.9 27.5Q238.0 25.7 242.1 25.7L242.1 25.7ZM242.3 30.9Q239.2 30.9 237.2 32.6Q235.2 34.2 234.6 37.2L234.6 37.2L250.1 37.2Q249.8 34.3 247.7 32.6Q245.6 30.9 242.3 30.9L242.3 30.9Z " - fill={colors.primary} - /> - </svg> - ) -} +import { colors } from '../../theme' + +interface Props { + marginTop?: string | number + marginBottom?: string | number + marginLeft?: string | number + marginRight?: string | number + scale?: number +} + +export function Logo(props: Props) { + return ( + <svg + width={260 * (props.scale ?? 1)} + height={70 * (props.scale ?? 1)} + viewBox="0 0 260 70" + xmlns="http://www.w3.org/2000/svg" + style={{ ...props }} + > + <rect x={0} y={0} width={260} height={70} fill="transparent" /> + <path + d="M19.2 25.7Q21.2 25.7 23.0 26.3Q24.8 26.9 26.0 28.0L26.0 28.0L23.3 32.9Q21.1 31.5 18.8 31.5L18.8 31.5Q15.6 31.5 13.6 33.8Q11.7 36.0 11.7 39.9L11.7 39.9L11.7 52.9L5.7 52.9L5.7 26.2L11.1 26.2L11.1 30.3Q12.7 28.0 14.7 26.8Q16.7 25.7 19.2 25.7L19.2 25.7ZM40.9 25.7Q47.4 25.7 51.1 29.4Q54.8 33.2 54.8 39.7L54.8 39.7Q54.8 40.4 54.6 41.9L54.6 41.9L33.3 41.9Q33.7 44.8 36.0 46.5Q38.2 48.2 41.7 48.2L41.7 48.2Q44.0 48.2 46.1 47.5Q48.2 46.7 49.4 45.5L49.4 45.5L53.1 49.0Q51.1 51.2 48.0 52.4Q45.0 53.7 41.6 53.7L41.6 53.7Q37.2 53.7 33.9 51.9Q30.7 50.2 28.9 47.0Q27.1 43.8 27.1 39.6L27.1 39.6Q27.1 35.5 28.8 32.3Q30.6 29.2 33.7 27.5Q36.8 25.7 40.9 25.7L40.9 25.7ZM41.1 30.9Q38.0 30.9 36.0 32.6Q34.0 34.2 33.4 37.2L33.4 37.2L48.9 37.2Q48.5 34.3 46.5 32.6Q44.4 30.9 41.1 30.9L41.1 30.9ZM70.3 53.6Q63.5 53.6 58.2 49.6L58.2 49.6L61.0 45.3Q62.8 46.7 65.3 47.4Q67.8 48.2 70.4 48.2L70.4 48.2Q73.0 48.2 74.4 47.4Q75.8 46.7 75.8 45.2L75.8 45.2Q75.8 43.8 74.4 43.0Q73.0 42.3 69.9 42.0L69.9 42.0Q64.7 41.5 61.9 39.3Q59.0 37.2 59.0 33.8L59.0 33.8Q59.0 31.3 60.5 29.5Q61.9 27.6 64.6 26.6Q67.2 25.6 70.6 25.6L70.6 25.6Q76.7 25.6 81.2 28.7L81.2 28.7L78.5 33.0Q75.0 30.7 70.9 30.7L70.9 30.7Q68.0 30.7 66.5 31.5Q65.0 32.3 65.0 33.8L65.0 33.8Q65.0 35.0 66.2 35.8Q67.5 36.5 70.4 36.8L70.4 36.8Q76.4 37.5 79.1 39.5Q81.8 41.5 81.8 45.3L81.8 45.3Q81.8 47.7 80.3 49.6Q78.9 51.5 76.3 52.5Q73.7 53.6 70.3 53.6L70.3 53.6ZM106.5 26.2L112.5 26.2L112.5 52.9L107.1 52.9L107.1 49.5Q103.7 53.5 98.0 53.5L98.0 53.5Q94.6 53.5 92.1 51.9Q89.5 50.4 88.2 47.6Q86.8 44.8 86.8 41.0L86.8 41.0L86.8 26.2L92.8 26.2L92.8 40.6Q92.8 44.1 94.5 46.1Q96.2 48.0 99.1 48.0L99.1 48.0Q102.4 48.0 104.4 45.8Q106.5 43.7 106.5 40.3L106.5 40.3L106.5 26.2Z " + fill="#fff" + /> + <path + d="M151.2 25.7Q156.3 25.7 159.3 28.8Q162.3 31.9 162.3 37.3L162.3 37.3L162.3 52.9L156.2 52.9L156.2 37.8Q156.2 34.6 154.8 32.9Q153.4 31.2 150.7 31.2L150.7 31.2Q147.7 31.2 145.9 33.1Q144.0 35.0 144.0 38.1L144.0 38.1L144.0 52.9L138.0 52.9L138.0 37.8Q138.0 34.6 136.5 32.9Q135.1 31.2 132.4 31.2L132.4 31.2Q129.4 31.2 127.6 33.1Q125.7 35.0 125.7 38.1L125.7 38.1L125.7 52.9L119.7 52.9L119.7 26.2L125.1 26.2L125.1 29.4Q128.0 25.7 133.0 25.7L133.0 25.7Q135.8 25.7 138.1 26.9Q140.4 28.2 141.7 30.4L141.7 30.4Q144.8 25.7 151.2 25.7L151.2 25.7ZM190.5 26.2L195.9 26.2L195.9 52.9L190.5 52.9L190.5 49.4Q188.9 51.3 186.4 52.4Q183.8 53.5 180.7 53.5L180.7 53.5Q176.9 53.5 173.9 51.8Q170.9 50.0 169.2 46.8Q167.5 43.6 167.5 39.6L167.5 39.6Q167.5 35.5 169.2 32.3Q170.9 29.2 173.9 27.4Q176.9 25.7 180.7 25.7L180.7 25.7Q183.8 25.7 186.4 26.8Q188.9 27.9 190.5 29.8L190.5 29.8L190.5 26.2ZM181.7 48.0Q185.3 48.0 187.6 45.7Q189.9 43.3 189.9 39.6L189.9 39.6Q189.9 35.9 187.6 33.5Q185.3 31.2 181.7 31.2L181.7 31.2Q178.1 31.2 175.8 33.5Q173.6 35.9 173.6 39.6L173.6 39.6Q173.6 43.3 175.8 45.7Q178.1 48.0 181.7 48.0L181.7 48.0ZM215.1 39.0L227.9 52.9L220.0 52.9L209.3 41.1L209.3 52.9L203.3 52.9L203.3 15.1L209.3 15.1L209.3 37.5L218.9 26.2L226.3 26.2L215.1 39.0ZM242.1 25.7Q248.6 25.7 252.3 29.4Q256.0 33.2 256.0 39.7L256.0 39.7Q256.0 40.4 255.9 41.9L255.9 41.9L234.5 41.9Q234.9 44.8 237.2 46.5Q239.4 48.2 243.0 48.2L243.0 48.2Q245.2 48.2 247.3 47.5Q249.4 46.7 250.6 45.5L250.6 45.5L254.3 49.0Q252.3 51.2 249.2 52.4Q246.2 53.7 242.8 53.7L242.8 53.7Q238.4 53.7 235.2 51.9Q231.9 50.2 230.1 47.0Q228.3 43.8 228.3 39.6L228.3 39.6Q228.3 35.5 230.0 32.3Q231.8 29.2 234.9 27.5Q238.0 25.7 242.1 25.7L242.1 25.7ZM242.3 30.9Q239.2 30.9 237.2 32.6Q235.2 34.2 234.6 37.2L234.6 37.2L250.1 37.2Q249.8 34.3 247.7 32.6Q245.6 30.9 242.3 30.9L242.3 30.9Z " + fill={colors.primary} + /> + </svg> + ) +} diff --git a/src/components/generator/Form/index.tsx b/src/components/generator/Form/index.tsx index 669ab240..694fb8e7 100644 --- a/src/components/generator/Form/index.tsx +++ b/src/components/generator/Form/index.tsx @@ -1,85 +1,300 @@ -import { useCallback, useEffect } from 'react' -import { useRouter } from 'next/router' -import { FormProvider, useForm } from 'react-hook-form' -import { useAtom } from 'jotai' -import styled from 'styled-components' - -import { TemplatesSection } from './sections/TemplatesSection' -import { ProfileSection } from './sections/ProfileSection' -import { EducationSection } from './sections/EducationSection' -import { WorkSection } from './sections/WorkSection' -import { SkillsSection } from './sections/SkillsSection' -import { AwardSection } from './sections/AwardsSection' -import { ProjectsSection } from './sections/projectsSection' -import { resumeAtom } from '../../../atoms/resume' -import { FormValues } from '../../../types' - -import latex from '../../../lib/latex' -import getTemplateData from '../../../lib/templates' - -async function generateResume(formData: FormValues): Promise<string> { - const { texDoc, opts } = getTemplateData(formData) - return latex(texDoc, opts) -} - -const StyledForm = styled.form` - grid-area: form; - overflow: auto; -` - -const initialFormValues: FormValues = { - headings: {}, - sections: ['profile', 'education', 'work', 'skills', 'projects', 'awards'], - selectedTemplate: 1 -} - -export function Form() { - const router = useRouter() - const { section: currSection = 'basics' } = router.query - - const [resume, setResume] = useAtom(resumeAtom) - const formContext = useForm<FormValues>({ defaultValues: initialFormValues }) - - // TODO: move this to a custom react hook - useEffect(() => { - const lastSession = localStorage.getItem('jsonResume') - if (lastSession) { - // TODO: validate JSON schema using Zod - const jsonResume = JSON.parse(lastSession) as FormValues - formContext.reset(jsonResume) - } - const subscription = formContext.watch((data) => { - localStorage.setItem('jsonResume', JSON.stringify(data)) - }) - return () => subscription.unsubscribe() - }, [formContext]) - - const handleFormSubmit = useCallback(async () => { - const formValues = formContext.getValues() - setResume({ ...resume, isLoading: true }) - try { - const newResumeUrl = await generateResume(formValues) - setResume({ ...resume, url: newResumeUrl, isLoading: false }) - } catch (error) { - console.error(error) - setResume({ ...resume, isError: true, isLoading: false }) - } - }, [formContext, resume, setResume]) - - return ( - <FormProvider {...formContext}> - <StyledForm - id="resume-form" - onSubmit={formContext.handleSubmit(handleFormSubmit)} - > - {currSection === 'templates' && <TemplatesSection />} - {currSection === 'basics' && <ProfileSection />} - {currSection === 'education' && <EducationSection />} - {currSection === 'work' && <WorkSection />} - {currSection === 'skills' && <SkillsSection />} - {currSection === 'awards' && <AwardSection />} - {currSection === 'projects' && <ProjectsSection />} - </StyledForm> - </FormProvider> - ) -} +import { useCallback, useEffect, useState } from 'react' +import { useRouter } from 'next/router' +import axios from 'axios'; +import { FormProvider, useForm } from 'react-hook-form' +import { useAtom } from 'jotai' +import styled from 'styled-components' + +import { TemplatesSection } from './sections/TemplatesSection' +import { ProfileSection } from './sections/ProfileSection' +import { EducationSection } from './sections/EducationSection' +import { WorkSection } from './sections/WorkSection' +import { SkillsSection } from './sections/SkillsSection' +import { AwardSection } from './sections/AwardsSection' +import { ProjectsSection } from './sections/projectsSection' +import { resumeAtom } from '../../../atoms/resume' +import { FormValues } from '../../../types' + +import latex from '../../../lib/latex' +import getTemplateData from '../../../lib/templates' +import { getToken } from '../../../token/token'; + +async function generateResume(formData: FormValues): Promise<string> { + const { texDoc, opts } = getTemplateData(formData) + return latex(texDoc, opts) +} + +const StyledForm = styled.form` + grid-area: form; + overflow: auto; +` + +const initialFormValues: FormValues = { + headings: {}, + sections: ['profile', 'education', 'work', 'skills', 'projects', 'awards'], + selectedTemplate: 1 +} + +export function Form() { + const router = useRouter() + const { section: currSection = 'basics' } = router.query + + const [resume, setResume] = useAtom(resumeAtom) + const formContext = useForm<FormValues>({ defaultValues: initialFormValues }) + + const TokenSection = getToken(); + const Token = TokenSection && JSON?.parse(TokenSection); + + console.log('id token', TokenSection) + + + // TODO: move this to a custom react hook + useEffect(() => { + const lastSession = localStorage.getItem('jsonResume') + + + if (lastSession) { + // TODO: validate JSON schema using Zod + + const jsonResume = JSON.parse(lastSession) as FormValues + formContext.reset(jsonResume) + + } + const subscription = formContext.watch((data) => { + localStorage.setItem('jsonResume', JSON.stringify(data)) + }) + return () => subscription.unsubscribe() + }, [formContext]) + + + const [cvData, setCvData] = useState(null); + + useEffect(() => { + const TokenSection = getToken(); + const Token = JSON.parse(TokenSection); + + console.log('token email', Token?.user.email) + + + const fetchCVData = async () => { + try { + const response = await axios.get(`http://127.0.0.1:8000/api/cv/${Token.user.email}`); + setCvData(response.data.cv); + } catch (error) { + console.error('Une erreur s\'est produite lors de la récupération du CV', error); + } + }; + + // Add a delay (e.g., 2 seconds) before making the API call again + const delay = 2000; + const timeoutId = setTimeout(() => { + fetchCVData(); + }, delay); + + // Clear the timeout if the component unmounts or the effect runs again + return () => clearTimeout(timeoutId); + + }, []); // Make sure to pass an empty dependency array to run this effect only once + + + + useEffect(() => { + const TokenSection = getToken(); + + if (TokenSection) { + // TODO: validate JSON schema using Zod + + const jsonResume = cvData; + formContext.reset(jsonResume) + + } + const subscription = formContext.watch((data) => { + localStorage.setItem('jsonResume', JSON.stringify(data)) + }) + return () => subscription.unsubscribe() + }, [formContext, cvData]) + + /* console.log('hu', cvData); */ + + const handleFormSubmit = useCallback(async () => { + const formValues = formContext.getValues() + + setResume({ ...resume, isLoading: true }) + + /* try { + if(Token) { + const apiUrl = `http://127.0.0.1:8000/api/cv/${Token.user.email}/update`; + console.log('bf', formValues.basics) + const Data = { + "basics":"{name:'Ms. Stephania O'Connell', email:'sean69@example.com' ,location:'Abidjan, CI', phone:'(225) 0777401407'}", + "headings":"{name: 'bernard', email: 'warren49@example.com', location: 'yakro, ci', phone:'0777401407'}", + "projects": [ "{awards: 'koffi', projects: 'warren49@example.com', skills: 'yakro, ci', works:'0777401407', education:'koffi'}"], + "skills": [ "{awards: 'boris', projects: 'warren49@example.com', skills: 'yakro, ci', works:'0777401407', education:'boris'}"], + "works": [ "{awards: 'kofii', projects: 'warren49@example.com', skills: 'yakro, ci', works:'0777401407', education:'boris'}"], + "awards": [ "{awards: 'boris', projects: 'warren49@example.com', skills: 'yakro, ci', works:'0777401407', education:'boris'}"], + "education": [ "{awards: 'boris', projects: 'warren49@example.com', skills: 'yakro, ci', works:'0777401407', education:'boris'}"] , + "user_id": Token?.user.id + } + + console.log('data data', Data) + + const response = await axios.put(apiUrl, Data, { + headers: { "Content-Type": "multipart/form-data" } + }).then((res) => { + alert("Données modifiée avec succès"); + }).catch((error) => { + alert("Erreur"); + }); + + } else { + const newResumeUrl = await generateResume(formValues) + setResume({ ...resume, url: newResumeUrl, isLoading: false }) + const newFormValues = JSON.stringify(formValues) + + const formData = JSON.parse(newFormValues); + + const Data = { + "basics": { name: formData.basics.name, email: formData.basics.email, location: formData.basics.location.address, phone:formData.basics.phone}, + "headings": {awards: formData.headings.awards, projects: formData.headings.projects, skills: formData.headings.skills, works:formData.headings.work, education:formData.headings.education}, + "projects":[{description: formData.projects[0].description, keywords:formData.projects[0].keywords, name: formData.projects[0].name, url: formData.projects[0].url}], + "skills": [{keywords: formData.skills[0].keywords, name:formData.skills[0].name}], + "works": [ {company: formData.work[0].company, endDate:formData.work[0].endDate, highlights:formData.work[0].highlights, position:formData.work[0].position, startDate: formData.work[0].startDate, summary:formData.work[0].summary}], + "awards": [{awarder: formData.awards[0].awarder, date:formData.awards[0].date, summary: formData.awards[0].summary, title: formData.awards[0].title}], + "education":[{area: formData.education[0].area, endDate:formData.education[0].endDate, institution: formData.education[0].institution, startDate: formData.education[0].startDate, studyType:formData.education[0].studyType}], + "user_id":2 + } + + const apiUrl = "http://127.0.0.1:8000/api/saveCV" + + const response = await axios.post(apiUrl, Data, { + headers: { "Content-Type": "multipart/form-data" } + }).then((res) => { + alert("Données ajoutées avec succès"); + }).catch((error) => { + alert("Erreur"); + }); + } + + } catch (error) { + console.error(error) + setResume({ ...resume, isError: true, isLoading: false }) + } */ + + try { + if (Token) { + const apiUrl = `http://127.0.0.1:8000/api/cv/champlin.trevor@example.com/update`; + console.log('Avant', formValues.basics); + + const Data = { + "basics":"{name:'Ms. Stephania O'Connell', email:'champlin.trevor@example.com' ,location:'Abidjan, CI', phone:'(225) 0777401407'}", + "headings":"{name: 'bernard', email: 'warren49@example.com', location: 'yakro, ci', phone:'0777401407'}", + "projects": [ "{awards: 'koffisfsf', projects: 'warren49@example.com', skills: 'yakro, ci', works:'0777401407', education:'koffi'}"], + "skills": [ "{awards: 'boris', projects: 'warren49@example.com', skills: 'yakro, ci', works:'0777401407', education:'boris'}"], + "works": [ "{awards: 'kofii', projects: 'warren49@example.com', skills: 'yakro, ci', works:'0777401407', education:'boris'}"], + "awards": [ "{awards: 'boris', projects: 'warren49@example.com', skills: 'yakro, ci', works:'0777401407', education:'boris'}"], + "education": [ "{awards: 'boris', projects: 'warren49@example.com', skills: 'yakro, ci', works:'0777401407', education:'boris'}"] + } + + console.log('Données', Data); + + const response = await axios.put(apiUrl, { + basics: { name: "Ms. Stephania O'Connell", email: 'champlin.trevor@example.com', location: 'Abidjan, CI', phone: '(225) 0777401407' }, + headings: { name: 'bernard', email: 'warren49@example.com', location: 'yakro, ci', phone: '0777401407' }, + projects: [{ awards: 'koffisfsf', projects: 'warren49@example.com', skills: 'yakro, ci', works: '0777401407', education: 'koffi' }], + skills: [{ awards: 'boris', projects: 'warren49@example.com', skills: 'yakro, ci', works: '0777401407', education: 'boris' }], + works: [{ awards: 'kofii', projects: 'warren49@example.com', skills: 'yakro, ci', works: '0777401407', education: 'boris' }], + awards: [{ awards: 'boris', projects: 'warren49@example.com', skills: 'yakro, ci', works: '0777401407', education: 'boris' }], + education: [{ awards: 'boris', projects: 'warren49@example.com', skills: 'yakro, ci', works: '0777401407', education: 'boris' }] + }, { + headers: { 'Content-Type': 'application/json' } + }); + + + alert("Données modifiées avec succès"); + } else { + const newResumeUrl = await generateResume(formValues); + setResume({ ...resume, url: newResumeUrl, isLoading: false }); + + const formData = JSON.parse(JSON.stringify(formValues)); + + const Data = { + "basics": { + name: formData.basics.name, + email: formData.basics.email, + location: formData.basics.location.address, + phone: formData.basics.phone + }, + "headings": { + awards: formData.headings.awards, + projects: formData.headings.projects, + skills: formData.headings.skills, + works: formData.headings.work, + education: formData.headings.education + }, + "projects": [{ + description: formData.projects[0].description, + keywords: formData.projects[0].keywords, + name: formData.projects[0].name, + url: formData.projects[0].url + }], + "skills": [{ + keywords: formData.skills[0].keywords, + name: formData.skills[0].name + }], + "works": [{ + company: formData.work[0].company, + endDate: formData.work[0].endDate, + highlights: formData.work[0].highlights, + position: formData.work[0].position, + startDate: formData.work[0].startDate, + summary: formData.work[0].summary + }], + "awards": [{ + awarder: formData.awards[0].awarder, + date: formData.awards[0].date, + summary: formData.awards[0].summary, + title: formData.awards[0].title + }], + "education": [{ + area: formData.education[0].area, + endDate: formData.education[0].endDate, + institution: formData.education[0].institution, + startDate: formData.education[0].startDate, + studyType: formData.education[0].studyType + }] + }; + + const apiUrl = "http://127.0.0.1:8000/api/saveCV"; + + const response = await axios.post(apiUrl, Data, { + headers: { "Content-Type": "multipart/form-data" } + }); + + alert("Données ajoutées avec succès"); + } + } catch (error) { + console.error("Erreur :", error); + alert("Erreur"); + } + + }, + [formContext, resume, setResume]) + + + return ( + <FormProvider {...formContext}> + <StyledForm + id="resume-form" + onSubmit={formContext.handleSubmit(handleFormSubmit)} + > + {currSection === 'templates' && <TemplatesSection />} + {currSection === 'basics' && <ProfileSection />} + {currSection === 'education' && <EducationSection />} + {currSection === 'work' && <WorkSection />} + {currSection === 'skills' && <SkillsSection />} + {currSection === 'awards' && <AwardSection />} + {currSection === 'projects' && <ProjectsSection />} + </StyledForm> + </FormProvider> + ) +} \ No newline at end of file diff --git a/src/components/generator/Form/sections/AwardsSection.tsx b/src/components/generator/Form/sections/AwardsSection.tsx index b5c27be2..026cf330 100644 --- a/src/components/generator/Form/sections/AwardsSection.tsx +++ b/src/components/generator/Form/sections/AwardsSection.tsx @@ -1,67 +1,75 @@ -import { Fragment } from 'react' -import { useFieldArray } from 'react-hook-form' - -import { FormSection } from './FormSection' -import { LabeledInput } from '../../../core/LabeledInput' -import { AddButton } from '../../../core/Button' -import { Divider } from '../../../core/Divider' - -import { Award } from '../../../../types' - -export function AwardSection() { - const { fields, append } = useFieldArray({ name: 'awards' }) - - const handleAdd = () => { - const defaultAward: Award = { - title: '', - date: '', - awarder: '', - summary: '' - } - - append(defaultAward) - } - - return ( - <FormSection title="Honors & Awards"> - {fields.length > 0 && ( - <Fragment> - <LabeledInput - name="headings.awards" - label="Section Heading" - placeholder="Awards" - /> - <Divider /> - </Fragment> - )} - {fields.map((field, index) => ( - <Fragment key={field.id}> - <LabeledInput - name={`awards.${index}.title`} - label="Award Name" - placeholder="Supreme hacker" - /> - <LabeledInput - name={`awards.${index}.date`} - label="Award Date" - placeholder="May 2015" - /> - <LabeledInput - name={`awards.${index}.awarder`} - label="Awarder" - placeholder="HackNY" - /> - <LabeledInput - name={`awards.${index}.summary`} - label="Summary" - placeholder="Recognized for creating the most awesome project at a hackathon." - /> - <Divider /> - </Fragment> - ))} - <AddButton type="button" onClick={handleAdd}> - + Add Award - </AddButton> - </FormSection> - ) -} +import { Fragment, useEffect } from 'react' +import { useFieldArray } from 'react-hook-form' + +import { FormSection } from './FormSection' +import { LabeledInput } from '../../../core/LabeledInput' +import { AddButton } from '../../../core/Button' +import { Divider } from '../../../core/Divider' + +import { Award } from '../../../../types' +import { useDispatch } from 'react-redux' +import { setData } from '../../../../slice/DataSlice' + +export function AwardSection() { + const { fields, append } = useFieldArray({ name: 'awards' }) + + const dispatch = useDispatch() + + useEffect(() => { + dispatch(setData(fields)) + }, [fields]) + + const handleAdd = () => { + const defaultAward: Award = { + title: '', + date: '', + awarder: '', + summary: '' + } + + append(defaultAward) + } + + return ( + <FormSection title="Honors & Awards"> + {fields.length > 0 && ( + <Fragment> + <LabeledInput + name="headings.awards" + label="Section Heading" + placeholder="Awards" + /> + <Divider /> + </Fragment> + )} + {fields.map((field, index) => ( + <Fragment key={field.id}> + <LabeledInput + name={`awards.${index}.title`} + label="Award Name" + placeholder="Supreme hacker" + /> + <LabeledInput + name={`awards.${index}.date`} + label="Award Date" + placeholder="May 2015" + /> + <LabeledInput + name={`awards.${index}.awarder`} + label="Awarder" + placeholder="HackNY" + /> + <LabeledInput + name={`awards.${index}.summary`} + label="Summary" + placeholder="Recognized for creating the most awesome project at a hackathon." + /> + <Divider /> + </Fragment> + ))} + <AddButton type="button" onClick={handleAdd}> + + Add Award + </AddButton> + </FormSection> + ) +} diff --git a/src/components/generator/Form/sections/EducationSection.tsx b/src/components/generator/Form/sections/EducationSection.tsx index 64f9c473..ad288b97 100644 --- a/src/components/generator/Form/sections/EducationSection.tsx +++ b/src/components/generator/Form/sections/EducationSection.tsx @@ -1,73 +1,88 @@ -import { Fragment } from 'react' -import { useFieldArray } from 'react-hook-form' - -import { FormSection } from './FormSection' -import { LabeledInput } from '../../../core/LabeledInput' -import { AddButton } from '../../../core/Button' -import { Divider } from '../../../core/Divider' - -import { Education } from '../../../../types' - -export function EducationSection() { - const { fields, append } = useFieldArray({ name: 'education' }) - - const handleAdd = () => { - const defaultEducation: Education = { - institution: '', - studyType: '', - area: '', - startDate: '', - endDate: '' - } - - append(defaultEducation) - } - - return ( - <FormSection title="Your Educational Background"> - {fields.length > 0 && ( - <Fragment> - <LabeledInput - name="headings.education" - label="Section Heading" - placeholder="Education" - /> - <Divider /> - </Fragment> - )} - {fields.map((field, index) => ( - <Fragment key={field.id}> - <LabeledInput - name={`education.${index}.institution`} - label="School name" - placeholder="Rutgers University" - /> - <LabeledInput - name={`education.${index}.studyType`} - label="Degree" - placeholder="Bachelor's" - /> - <LabeledInput - name={`education.${index}.area`} - label="Major" - placeholder="Computer Science" - /> - <LabeledInput - name={`education.${index}.startDate`} - label="Start Date" - placeholder="Sep 2015" - /> - <LabeledInput - name={`education.${index}.endDate`} - label="End Date" - placeholder="Jun 2019" - /> - <Divider /> - </Fragment> - ))} - <AddButton type="button" onClick={handleAdd}> - + Add School - </AddButton> - </FormSection> - ) -} +import { Fragment, useEffect } from 'react' +import { useFieldArray } from 'react-hook-form' + +import { FormSection } from './FormSection' +import { LabeledInput } from '../../../core/LabeledInput' +import { AddButton } from '../../../core/Button' +import { Divider } from '../../../core/Divider' + +import { Education } from '../../../../types' +import { useDispatch } from 'react-redux' +import { setData } from '../../../../slice/DataSlice' + +export function EducationSection(props: any) { + + const { fields, append } = useFieldArray({ name: 'education' }) + + const dispatch = useDispatch() + + useEffect(() => { + if (fields && fields.length > 0) { + dispatch(setData(fields)); + } + }, [fields]); + + + + + + const handleAdd = () => { + const defaultEducation: Education = { + institution: '', + studyType: '', + area: '', + startDate: '', + endDate: '' + } + + append(defaultEducation) + } + + return ( + <FormSection title="Your Educational Background"> + {fields.length > 0 && ( + <Fragment> + <LabeledInput + name="headings.education" + label="Section Heading" + placeholder="Education" + /> + <Divider /> + </Fragment> + )} + {fields.map((field, index) => ( + <Fragment key={field.id}> + <LabeledInput + name={`education.${index}.institution`} + label="School name" + placeholder="Rutgers University" + /> + <LabeledInput + name={`education.${index}.studyType`} + label="Degree" + placeholder="Bachelor's" + /> + <LabeledInput + name={`education.${index}.area`} + label="Major" + placeholder="Computer Science" + /> + <LabeledInput + name={`education.${index}.startDate`} + label="Start Date" + placeholder="Sep 2015" + /> + <LabeledInput + name={`education.${index}.endDate`} + label="End Date" + placeholder="Jun 2019" + /> + <Divider /> + </Fragment> + ))} + <AddButton type="button" onClick={handleAdd}> + + Add School + </AddButton> + </FormSection> + ) +} diff --git a/src/components/generator/Form/sections/FormSection.tsx b/src/components/generator/Form/sections/FormSection.tsx index eae88e71..86498f3f 100644 --- a/src/components/generator/Form/sections/FormSection.tsx +++ b/src/components/generator/Form/sections/FormSection.tsx @@ -1,29 +1,29 @@ -import { ReactNode } from 'react' -import styled from 'styled-components' - -const Container = styled.fieldset` - width: 100%; - padding: 0 2rem; - padding-bottom: 2rem; -` - -const Title = styled.h2` - margin: 1.5rem 0; - font-size: 1.15rem; - letter-spacing: 2px; - text-transform: uppercase; -` - -interface Props { - title?: string - children: ReactNode -} - -export function FormSection({ title = '', children }: Props) { - return ( - <Container> - <Title>{title} - {children} - - ) -} +import { ReactNode } from 'react' +import styled from 'styled-components' + +const Container = styled.fieldset` + width: 100%; + padding: 0 2rem; + padding-bottom: 2rem; +` + +const Title = styled.h2` + margin: 1.5rem 0; + font-size: 1.15rem; + letter-spacing: 2px; + text-transform: uppercase; +` + +interface Props { + title?: string + children: ReactNode +} + +export function FormSection({ title = '', children }: Props) { + return ( + + {title} + {children} + + ) +} diff --git a/src/components/generator/Form/sections/Highlights.tsx b/src/components/generator/Form/sections/Highlights.tsx index 6011683b..139d8fb6 100644 --- a/src/components/generator/Form/sections/Highlights.tsx +++ b/src/components/generator/Form/sections/Highlights.tsx @@ -1,49 +1,49 @@ -import { Fragment } from 'react' -import { useFieldArray } from 'react-hook-form' -import { MdClose, MdDragIndicator } from 'react-icons/md' -import styled from 'styled-components' - -import { Input } from '../../../core/Input' -import { FormInput } from '../../../core/FormInput' -import { IconButton } from '../../../core/Button' - -const ListContainer = styled.div` - display: grid; - grid-template-columns: auto 1fr auto; - gap: 4px; - margin: 0.5rem 0; -` - -interface HighlightsProps { - label: string - name: `${'work' | 'volunteer' | 'projects'}.${number}.highlights` - placeholder: string -} - -export default function Highlights({ - name, - label, - placeholder -}: HighlightsProps) { - const { fields, append, remove } = useFieldArray({ name }) - - return ( - <> - - - {fields.map((field, i) => ( - - - - - - remove(i)}> - - - - ))} - - - - ) -} +import { Fragment } from 'react' +import { useFieldArray } from 'react-hook-form' +import { MdClose, MdDragIndicator } from 'react-icons/md' +import styled from 'styled-components' + +import { Input } from '../../../core/Input' +import { FormInput } from '../../../core/FormInput' +import { IconButton } from '../../../core/Button' + +const ListContainer = styled.div` + display: grid; + grid-template-columns: auto 1fr auto; + gap: 4px; + margin: 0.5rem 0; +` + +interface HighlightsProps { + label: string + name: `${'work' | 'volunteer' | 'projects'}.${number}.highlights` + placeholder: string +} + +export default function Highlights({ + name, + label, + placeholder +}: HighlightsProps) { + const { fields, append, remove } = useFieldArray({ name }) + + return ( + <> + + + {fields.map((field, i) => ( + + + + + + remove(i)}> + + + + ))} + + + + ) +} diff --git a/src/components/generator/Form/sections/Keywords.tsx b/src/components/generator/Form/sections/Keywords.tsx index cb9c42bc..c51b8cfd 100644 --- a/src/components/generator/Form/sections/Keywords.tsx +++ b/src/components/generator/Form/sections/Keywords.tsx @@ -1,62 +1,62 @@ -import { Fragment } from 'react' -import { useFieldArray, useFormContext } from 'react-hook-form' -import { MdClose } from 'react-icons/md' -import styled from 'styled-components' - -import { IconButton } from '../../../core/Button' -import { FormInput } from '../../../core/FormInput' -import { colors } from '../../../../theme' - -const Pill = styled.div` - display: inline-flex; - border: 1px solid ${colors.borders}; - border-radius: 100px; - padding: 8px 16px; - padding-right: 4px; - gap: 4px; -} -` - -const PillsContainer = styled.div` - display: flex; - gap: 4px; - margin: 8px 0; - align-items: flex-start; - flex-wrap: wrap; -` - -const Label = styled.label` - display: inline-block; - color: ${colors.white}; - margin-bottom: 0.5rem; -` - -interface KeywordProps { - label: string - name: `${'skills' | 'projects'}.${number}.keywords` - placeholder: string -} - -export default function Keywords({ name, label, placeholder }: KeywordProps) { - const { getValues } = useFormContext() - const { fields, append, remove } = useFieldArray({ name }) - - return ( -
- - - - {fields.map((field, i) => ( - - - {getValues(`${name}.${i}`)} - remove(i)}> - - - - - ))} - -
- ) -} +import { Fragment } from 'react' +import { useFieldArray, useFormContext } from 'react-hook-form' +import { MdClose } from 'react-icons/md' +import styled from 'styled-components' + +import { IconButton } from '../../../core/Button' +import { FormInput } from '../../../core/FormInput' +import { colors } from '../../../../theme' + +const Pill = styled.div` + display: inline-flex; + border: 1px solid ${colors.borders}; + border-radius: 100px; + padding: 8px 16px; + padding-right: 4px; + gap: 4px; +} +` + +const PillsContainer = styled.div` + display: flex; + gap: 4px; + margin: 8px 0; + align-items: flex-start; + flex-wrap: wrap; +` + +const Label = styled.label` + display: inline-block; + color: ${colors.white}; + margin-bottom: 0.5rem; +` + +interface KeywordProps { + label: string + name: `${'skills' | 'projects'}.${number}.keywords` + placeholder: string +} + +export default function Keywords({ name, label, placeholder }: KeywordProps) { + const { getValues } = useFormContext() + const { fields, append, remove } = useFieldArray({ name }) + + return ( +
+ + + + {fields.map((field, i) => ( + + + {getValues(`${name}.${i}`)} + remove(i)}> + + + + + ))} + +
+ ) +} diff --git a/src/components/generator/Form/sections/ProfileSection.tsx b/src/components/generator/Form/sections/ProfileSection.tsx index 9c5b9e1f..866f00aa 100644 --- a/src/components/generator/Form/sections/ProfileSection.tsx +++ b/src/components/generator/Form/sections/ProfileSection.tsx @@ -1,36 +1,49 @@ -// import { useFieldArray } from 'react-hook-form' -import { FormSection } from './FormSection' -import { LabeledInput } from '../../../core/LabeledInput' - -export function ProfileSection() { - // const { fields, append } = useFieldArray({ name: 'basics.links' }) - - return ( - - - - - - {/* {fields.map((field, index) => ( - - ))} - */} - - ) -} +import { useEffect } from 'react' +import { useFieldArray } from 'react-hook-form' +import { FormSection } from './FormSection' +import { LabeledInput } from '../../../core/LabeledInput' + +import { useDispatch } from 'react-redux' +import { setData } from '../../../../slice/DataSlice' + +export function ProfileSection(props) { + const { fields, append } = useFieldArray({ name: 'basics.links' }) + + const dispatch = useDispatch() + + useEffect(() => { + dispatch(setData(fields)) + }, [fields]) + + console.log('props', fields) + + //console.log('nom', fields) + return ( + + + + + + {/* {fields.map((field, index) => ( + + ))} + */} + + ) +} diff --git a/src/components/generator/Form/sections/SkillsSection.tsx b/src/components/generator/Form/sections/SkillsSection.tsx index bb9f84f2..916de78a 100644 --- a/src/components/generator/Form/sections/SkillsSection.tsx +++ b/src/components/generator/Form/sections/SkillsSection.tsx @@ -1,56 +1,64 @@ -import { Fragment } from 'react' -import { useFieldArray } from 'react-hook-form' - -import { LabeledInput } from '../../../core/LabeledInput' -import { AddButton } from '../../../core/Button' -import { Divider } from '../../../core/Divider' -import { FormSection } from './FormSection' -import Keywords from './Keywords' - -import { Skill } from '../../../../types' - -export function SkillsSection() { - const { fields, append } = useFieldArray({ name: 'skills' }) - - const handleAdd = () => { - const defaultSkill: Skill = { - name: '', - keywords: [] - } - - append(defaultSkill) - } - - return ( - - {fields.length > 0 && ( - - - - - )} - {fields.map((field, index) => ( - - - - - - ))} - - + Add Skill - - - ) -} +import { Fragment, useEffect } from 'react' +import { useFieldArray } from 'react-hook-form' + +import { LabeledInput } from '../../../core/LabeledInput' +import { AddButton } from '../../../core/Button' +import { Divider } from '../../../core/Divider' +import { FormSection } from './FormSection' +import Keywords from './Keywords' + +import { Skill } from '../../../../types' +import { useDispatch } from 'react-redux' +import { setData } from '../../../../slice/DataSlice' + +export function SkillsSection() { + const { fields, append } = useFieldArray({ name: 'skills' }) + + const dispatch = useDispatch() + + useEffect(() => { + dispatch(setData(fields)) + }, [fields]) + + const handleAdd = () => { + const defaultSkill: Skill = { + name: '', + keywords: [] + } + + append(defaultSkill) + } + + return ( + + {fields.length > 0 && ( + + + + + )} + {fields.map((field, index) => ( + + + + + + ))} + + + Add Skill + + + ) +} diff --git a/src/components/generator/Form/sections/TemplatesSection.tsx b/src/components/generator/Form/sections/TemplatesSection.tsx index b36f6f10..e4792356 100644 --- a/src/components/generator/Form/sections/TemplatesSection.tsx +++ b/src/components/generator/Form/sections/TemplatesSection.tsx @@ -1,32 +1,32 @@ -import { useFormContext, Controller } from 'react-hook-form' - -import { FormSection } from './FormSection' -import { TEMPLATES } from '../../../../lib/templates/constants' - -import { FormValues } from '../../../../types' - -export function TemplatesSection() { - const { control } = useFormContext() - - return ( - - {TEMPLATES.map((templateId) => ( - - ))} - - ) -} +import { useFormContext, Controller } from 'react-hook-form' + +import { FormSection } from './FormSection' +import { TEMPLATES } from '../../../../lib/templates/constants' + +import { FormValues } from '../../../../types' + +export function TemplatesSection() { + const { control } = useFormContext() + + return ( + + {TEMPLATES.map((templateId) => ( + + ))} + + ) +} diff --git a/src/components/generator/Form/sections/WorkSection.tsx b/src/components/generator/Form/sections/WorkSection.tsx index 1e6ce3e8..15f03cf2 100644 --- a/src/components/generator/Form/sections/WorkSection.tsx +++ b/src/components/generator/Form/sections/WorkSection.tsx @@ -1,80 +1,89 @@ -import { Fragment } from 'react' -import { useFieldArray } from 'react-hook-form' - -import { LabeledInput } from '../../../core/LabeledInput' -import { AddButton } from '../../../core/Button' -import { Divider } from '../../../core/Divider' -import { FormSection } from './FormSection' -import Highlights from './Highlights' - -import { Work } from '../../../../types' - -export function WorkSection() { - const { fields, append } = useFieldArray({ name: 'work' }) - - const handleAdd = () => { - const defaultWork: Work = { - company: '', - position: '', - summary: '', - startDate: '', - endDate: '', - highlights: [] - } - - append(defaultWork) - } - - return ( - - {fields.length > 0 && ( - - - - - )} - {fields.map((field, index) => ( - - - - - - - - - - ))} - - + Add Work Experience - - - ) -} +import { Fragment, useEffect } from 'react' +import { useFieldArray } from 'react-hook-form' + +import { LabeledInput } from '../../../core/LabeledInput' +import { AddButton } from '../../../core/Button' +import { Divider } from '../../../core/Divider' +import { FormSection } from './FormSection' +import Highlights from './Highlights' + +import { Work } from '../../../../types' +import { useDispatch } from 'react-redux' +import { setData } from '../../../../slice/DataSlice' + +export function WorkSection(props) { + console.log('props', props) + const { fields, append } = useFieldArray({ name: 'work' }) + + const dispatch = useDispatch() + + useEffect(() => { + dispatch(setData(fields)) + }, [fields]) + + const handleAdd = () => { + const defaultWork: Work = { + company: '', + position: '', + summary: '', + startDate: '', + endDate: '', + highlights: [] + } + + append(defaultWork) + } + + return ( + + {fields.length > 0 && ( + + + + + )} + {fields.map((field, index) => ( + + + + + + + + + + ))} + + + Add Work Experience + + + ) +} diff --git a/src/components/generator/Form/sections/projectsSection.tsx b/src/components/generator/Form/sections/projectsSection.tsx index 808a338c..7baa2612 100644 --- a/src/components/generator/Form/sections/projectsSection.tsx +++ b/src/components/generator/Form/sections/projectsSection.tsx @@ -1,68 +1,76 @@ -import { Fragment } from 'react' -import { useFieldArray } from 'react-hook-form' - -import { LabeledInput } from '../../../core/LabeledInput' -import { AddButton } from '../../../core/Button' -import { Divider } from '../../../core/Divider' -import { FormSection } from './FormSection' -import Keywords from './Keywords' - -import { Project } from '../../../../types' - -export function ProjectsSection() { - const { fields, append } = useFieldArray({ name: 'projects' }) - - const handleAdd = () => { - const defaultProject: Project = { - name: '', - description: '', - url: '', - keywords: [] - } - - append(defaultProject) - } - - return ( - - {fields.length > 0 && ( - - - - - )} - {fields.map((field, index) => ( - - - - - - - - ))} - - + Add Project - - - ) -} +import { Fragment, useEffect } from 'react' +import { useFieldArray } from 'react-hook-form' + +import { LabeledInput } from '../../../core/LabeledInput' +import { AddButton } from '../../../core/Button' +import { Divider } from '../../../core/Divider' +import { FormSection } from './FormSection' +import Keywords from './Keywords' + +import { Project } from '../../../../types' +import { useDispatch } from 'react-redux' +import { setData } from '../../../../slice/DataSlice' + +export function ProjectsSection() { + const { fields, append } = useFieldArray({ name: 'projects' }) + + const dispatch = useDispatch() + + useEffect(() => { + dispatch(setData(fields)) + }, [fields]) + + const handleAdd = () => { + const defaultProject: Project = { + name: '', + description: '', + url: '', + keywords: [] + } + + append(defaultProject) + } + + return ( + + {fields.length > 0 && ( + + + + + )} + {fields.map((field, index) => ( + + + + + + + + ))} + + + Add Project + + + ) +} diff --git a/src/components/generator/Header.tsx b/src/components/generator/Header.tsx index 70f122dc..8de6359d 100644 --- a/src/components/generator/Header.tsx +++ b/src/components/generator/Header.tsx @@ -1,24 +1,24 @@ -import Link from 'next/link' -import styled from 'styled-components' - -import { Logo } from '../core/Logo' -import { colors } from '../../theme' - -const StyledHeader = styled.header` - grid-area: header; - width: 100%; - height: 10vh; - display: flex; - justify-content: center; - align-items: center; - border-bottom: 1px solid ${colors.borders}; -` -export function Header() { - return ( - - - - - - ) -} +import Link from 'next/link' +import styled from 'styled-components' + +import { Logo } from '../core/Logo' +import { colors } from '../../theme' + +const StyledHeader = styled.header` + grid-area: header; + width: 100%; + height: 10vh; + display: flex; + justify-content: center; + align-items: center; + border-bottom: 1px solid ${colors.borders}; +` +export function Header() { + return ( + + + + + + ) +} diff --git a/src/components/generator/Preview.tsx b/src/components/generator/Preview.tsx index 8eec402f..c6799cc2 100644 --- a/src/components/generator/Preview.tsx +++ b/src/components/generator/Preview.tsx @@ -1,67 +1,67 @@ -import { useAtom } from 'jotai' -import { useState, useCallback } from 'react' -import { pdfjs, Document, Page } from 'react-pdf' -import type { PDFDocumentProxy } from 'pdfjs-dist/types/src/display/api' -import styled from 'styled-components' -import { resumeAtom } from '../../atoms/resume' - -const workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js` -pdfjs.GlobalWorkerOptions.workerSrc = workerSrc - -const Output = styled.output` - grid-area: preview; - background: ${(props) => props.theme.lightBlack}; - overflow-y: auto; -` - -const PdfContainer = styled.article` - width: 100%; - height: 100%; -` - -const ResumeDocument = styled(Document)` - width: 100%; -` - -const ResumePage = styled(Page)` - display: flex; - justify-content: center; - align-items: center; - padding: 1.5em 0 10rem 0; - - canvas { - max-width: 95% !important; - height: auto !important; - } -` - -export function Preview() { - const [resume] = useAtom(resumeAtom) - const [, setPageCount] = useState(1) - const [pageNumber] = useState(1) - const [scale] = useState(document.body.clientWidth > 1440 ? 1.75 : 1) - - const handleDocumentLoadSuccess = useCallback((pdf: PDFDocumentProxy) => { - setPageCount(pdf.numPages) - }, []) - - return ( - - - - - - - - ) -} +import { useAtom } from 'jotai' +import { useState, useCallback } from 'react' +import { pdfjs, Document, Page } from 'react-pdf' +import type { PDFDocumentProxy } from 'pdfjs-dist/types/src/display/api' +import styled from 'styled-components' +import { resumeAtom } from '../../atoms/resume' + +const workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js` +pdfjs.GlobalWorkerOptions.workerSrc = workerSrc + +const Output = styled.output` + grid-area: preview; + background: ${(props) => props.theme.lightBlack}; + overflow-y: auto; +` + +const PdfContainer = styled.article` + width: 100%; + height: 100%; +` + +const ResumeDocument = styled(Document)` + width: 100%; +` + +const ResumePage = styled(Page)` + display: flex; + justify-content: center; + align-items: center; + padding: 1.5em 0 10rem 0; + + canvas { + max-width: 95% !important; + height: auto !important; + } +` + +export function Preview() { + const [resume] = useAtom(resumeAtom) + const [, setPageCount] = useState(1) + const [pageNumber] = useState(1) + const [scale] = useState(document.body.clientWidth > 1440 ? 1.75 : 1) + + const handleDocumentLoadSuccess = useCallback((pdf: PDFDocumentProxy) => { + setPageCount(pdf.numPages) + }, []) + + return ( + + + + + + + + ) +} diff --git a/src/components/generator/Sidebar.tsx b/src/components/generator/Sidebar.tsx index bd21bf1d..b17c53c2 100644 --- a/src/components/generator/Sidebar.tsx +++ b/src/components/generator/Sidebar.tsx @@ -1,71 +1,97 @@ -import Link from 'next/link' -import { useRouter } from 'next/router' -import styled from 'styled-components' -import { MdDragIndicator } from 'react-icons/md' - -import { colors } from '../../theme' -import { PrimaryButton, IconButton } from '../core/Button' - -const Aside = styled.aside` - grid-area: sidebar; - border-right: 1px solid ${colors.borders}; - padding: 24px 36px; -` - -const Nav = styled.nav` - display: flex; - flex-direction: column; - align-items: flex-start; - justify-content: center; - gap: 24px; - margin-bottom: 28px; - - button { - cursor: grab; - } -` - -const StyledLink = styled(Link)<{ $active: boolean }>` - text-decoration: none; - font-weight: 300; - color: ${colors.foreground}; - - ${(props) => props.$active && `color: ${colors.primary};`} -` - -export function Sidebar() { - const router = useRouter() - const { section: currSection = 'basics' } = router.query - - const sectionLinks = [ - { label: 'Templates', section: 'templates' }, - { label: 'Profile', section: 'basics' }, - { label: 'Education', section: 'education' }, - { label: 'Work Experience', section: 'work' }, - { label: 'Skills', section: 'skills' }, - { label: 'Projects', section: 'projects' }, - { label: 'Awards', section: 'awards' } - ] - - return ( - - ) -} +import Link from 'next/link' +import { useRouter } from 'next/router' +import styled from 'styled-components' +import axios from 'axios'; +import { MdDragIndicator } from 'react-icons/md' + +import { colors } from '../../theme' +import { PrimaryButton, IconButton } from '../core/Button' +import { useSelector } from 'react-redux'; +import { useState, useEffect } from 'react'; +import { getToken } from '../../token/token'; + +const Aside = styled.aside` + grid-area: sidebar; + border-right: 1px solid ${colors.borders}; + padding: 24px 36px; +` + +const Nav = styled.nav` + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: center; + gap: 24px; + margin-bottom: 28px; + + button { + cursor: grab; + } +` + +const StyledLink = styled(Link)<{ $active: boolean }>` + text-decoration: none; + font-weight: 300; + color: ${colors.foreground}; + + ${(props) => props.$active && `color: ${colors.primary};`} +` + +export function Sidebar() { + const router = useRouter() + const { section: currSection = 'basics' } = router.query + + const sectionLinks = [ + { label: 'Templates', section: 'templates', data: 'template' }, + { label: 'Profile', section: 'basics', data: 'profile' }, + { label: 'Education', section: 'education', data: 'education' }, + { label: 'Work Experience', section: 'work', data: 'work' }, + { label: 'Skills', section: 'skills', data: 'skills' }, + { label: 'Projects', section: 'projects', data: 'projects' }, + { label: 'Awards', section: 'awards', data: 'awards' }, + ] + + const [tokenSection, setTokenSection] = useState(''); + + useEffect(() => { + const fetchToken = async () => { + const token = await getToken(); + setTokenSection(token || ''); + }; + + fetchToken(); + }, []); + + + + + return ( +
+
+ +
+
+ ) +} diff --git a/src/lib/latex.ts b/src/lib/latex.ts index 9a81f085..dceae7f4 100644 --- a/src/lib/latex.ts +++ b/src/lib/latex.ts @@ -1,84 +1,84 @@ -import { PdfTeXEngine, XeTeXEngine, DvipdfmxEngine } from 'swiftlatex' -import { LaTeXOpts } from '../types' - -const pdftex = new PdfTeXEngine() -const xetex = new XeTeXEngine() -const dvipdfmx = new DvipdfmxEngine() -let engineLoaded = false - -export default async function latex(texDoc: string, opts: LaTeXOpts) { - if (!engineLoaded) { - await Promise.all([ - pdftex.loadEngine(), - xetex.loadEngine(), - dvipdfmx.loadEngine() - ]) - engineLoaded = true - - await pdftex.makeMemFSFolder('fonts/') - await xetex.makeMemFSFolder('fonts/') - await dvipdfmx.makeMemFSFolder('fonts/') - } - - const fonts = await resolveAssets(opts.fonts || []) - const inputs = await resolveAssets(opts.inputs || []) - - switch (opts.cmd) { - case 'pdflatex': { - for (const [name, content] of fonts) { - await pdftex.writeMemFSFile(`fonts/${name}`, content) - } - - for (const [name, content] of inputs) { - await pdftex.writeMemFSFile(name, content) - } - - await pdftex.writeMemFSFile('main.tex', texDoc) - await pdftex.setEngineMainFile('main.tex') - const { pdf } = await pdftex.compileLaTeX() - - return URL.createObjectURL(new Blob([pdf], { type: 'application/pdf' })) - } - case 'xelatex': { - for (const engine of [xetex, dvipdfmx]) { - for (const [name, content] of fonts) { - await engine.writeMemFSFile(`fonts/${name}`, content) - } - } - - for (const [name, content] of inputs) { - await xetex.writeMemFSFile(name, content) - } - - await xetex.writeMemFSFile('main.tex', texDoc) - await xetex.setEngineMainFile('main.tex') - const res = await xetex.compileLaTeX() - - await dvipdfmx.writeMemFSFile('main.xdv', res.pdf) - await dvipdfmx.setEngineMainFile('main.xdv') - const { pdf } = await dvipdfmx.compilePDF() - - return URL.createObjectURL(new Blob([pdf], { type: 'application/pdf' })) - } - } -} - -async function resolveAssets(urls: string[]) { - const assets = await Promise.all( - urls.map((url) => - fetch(url) - .then((res) => res.arrayBuffer()) - .then((buffer) => new Uint8Array(buffer)) - ) - ) - const basenames = urls.map(basename) - return zip(basenames, assets) -} - -function basename(url: string) { - return url.split('/').pop() -} - -function zip(a: T[], b: U[]): [T, U][] { - return a.map((k, i) => [k, b[i]]) -} +import { PdfTeXEngine, XeTeXEngine, DvipdfmxEngine } from 'swiftlatex' +import { LaTeXOpts } from '../types' + +const pdftex = new PdfTeXEngine() +const xetex = new XeTeXEngine() +const dvipdfmx = new DvipdfmxEngine() +let engineLoaded = false + +export default async function latex(texDoc: string, opts: LaTeXOpts) { + if (!engineLoaded) { + await Promise.all([ + pdftex.loadEngine(), + xetex.loadEngine(), + dvipdfmx.loadEngine() + ]) + engineLoaded = true + + await pdftex.makeMemFSFolder('fonts/') + await xetex.makeMemFSFolder('fonts/') + await dvipdfmx.makeMemFSFolder('fonts/') + } + + const fonts = await resolveAssets(opts.fonts || []) + const inputs = await resolveAssets(opts.inputs || []) + + switch (opts.cmd) { + case 'pdflatex': { + for (const [name, content] of fonts) { + await pdftex.writeMemFSFile(`fonts/${name}`, content) + } + + for (const [name, content] of inputs) { + await pdftex.writeMemFSFile(name, content) + } + + await pdftex.writeMemFSFile('main.tex', texDoc) + await pdftex.setEngineMainFile('main.tex') + const { pdf } = await pdftex.compileLaTeX() + + return URL.createObjectURL(new Blob([pdf], { type: 'application/pdf' })) + } + case 'xelatex': { + for (const engine of [xetex, dvipdfmx]) { + for (const [name, content] of fonts) { + await engine.writeMemFSFile(`fonts/${name}`, content) + } + } + + for (const [name, content] of inputs) { + await xetex.writeMemFSFile(name, content) + } + + await xetex.writeMemFSFile('main.tex', texDoc) + await xetex.setEngineMainFile('main.tex') + const res = await xetex.compileLaTeX() + + await dvipdfmx.writeMemFSFile('main.xdv', res.pdf) + await dvipdfmx.setEngineMainFile('main.xdv') + const { pdf } = await dvipdfmx.compilePDF() + + return URL.createObjectURL(new Blob([pdf], { type: 'application/pdf' })) + } + } +} + +async function resolveAssets(urls: string[]) { + const assets = await Promise.all( + urls.map((url) => + fetch(url) + .then((res) => res.arrayBuffer()) + .then((buffer) => new Uint8Array(buffer)) + ) + ) + const basenames = urls.map(basename) + return zip(basenames, assets) +} + +function basename(url: string) { + return url.split('/').pop() +} + +function zip(a: T[], b: U[]): [T, U][] { + return a.map((k, i) => [k, b[i]]) +} diff --git a/src/lib/templates/constants.ts b/src/lib/templates/constants.ts index 497fa32e..f599c519 100755 --- a/src/lib/templates/constants.ts +++ b/src/lib/templates/constants.ts @@ -1,25 +1,25 @@ -export const TEMPLATE1 = 1 -export const TEMPLATE2 = 2 -export const TEMPLATE3 = 3 -export const TEMPLATE4 = 4 -export const TEMPLATE5 = 5 -export const TEMPLATE6 = 6 -export const TEMPLATE7 = 7 -export const TEMPLATE8 = 8 -export const TEMPLATE9 = 9 -export const TEMPLATE10 = 10 - -export const TEMPLATES = [ - TEMPLATE1, - TEMPLATE2, - TEMPLATE3, - TEMPLATE4, - TEMPLATE5, - TEMPLATE6, - TEMPLATE7, - TEMPLATE8, - TEMPLATE9 -] - -export const NEWLINE = '\\\\' -export const WHITESPACE = '\\ ' +export const TEMPLATE1 = 1 +export const TEMPLATE2 = 2 +export const TEMPLATE3 = 3 +export const TEMPLATE4 = 4 +export const TEMPLATE5 = 5 +export const TEMPLATE6 = 6 +export const TEMPLATE7 = 7 +export const TEMPLATE8 = 8 +export const TEMPLATE9 = 9 +export const TEMPLATE10 = 10 + +export const TEMPLATES = [ + TEMPLATE1, + TEMPLATE2, + TEMPLATE3, + TEMPLATE4, + TEMPLATE5, + TEMPLATE6, + TEMPLATE7, + TEMPLATE8, + TEMPLATE9 +] + +export const NEWLINE = '\\\\' +export const WHITESPACE = '\\ ' diff --git a/src/lib/templates/index.ts b/src/lib/templates/index.ts index 3c66df1f..98bf3e05 100755 --- a/src/lib/templates/index.ts +++ b/src/lib/templates/index.ts @@ -1,181 +1,181 @@ -import template1 from './template1' -import template2 from './template2' -import template3 from './template3' -import template4 from './template4' -import template5 from './template5' -import template6 from './template6' -import template7 from './template7' -import template8 from './template8' -import template9 from './template9' -import { - TEMPLATE1, - TEMPLATE2, - TEMPLATE3, - TEMPLATE4, - TEMPLATE5, - TEMPLATE6, - TEMPLATE7, - TEMPLATE8, - TEMPLATE9 -} from './constants' -import { FormValues, TemplateData } from '../../types' - -/** - * Generates the LaTeX document based on the selected template - * as well as the necessary options needed for it to create a pdf. - * - * @param data - The sanitized form data from the request body. - * - * @return The generated LaTeX document as well as its additional opts. - */ -export default function getTemplateData(data: FormValues): TemplateData { - switch (data.selectedTemplate) { - case TEMPLATE1: - return { - texDoc: template1(data), - opts: { - cmd: 'pdflatex' - } - } - - case TEMPLATE2: - return { - texDoc: template2(data), - opts: { - cmd: 'xelatex', - inputs: [ - '/templates/template2/awesome-cv.cls', - '/templates/template2/fontawesome.sty' - ], - fonts: [ - '/templates/template2/fonts/FontAwesome.otf', - '/templates/template2/fonts/Roboto-Bold.ttf', - '/templates/template2/fonts/Roboto-BoldItalic.ttf', - '/templates/template2/fonts/Roboto-Italic.ttf', - '/templates/template2/fonts/Roboto-Light.ttf', - '/templates/template2/fonts/Roboto-LightItalic.ttf', - '/templates/template2/fonts/Roboto-Medium.ttf', - '/templates/template2/fonts/Roboto-MediumItalic.ttf', - '/templates/template2/fonts/Roboto-Regular.ttf', - '/templates/template2/fonts/Roboto-Thin.ttf', - '/templates/template2/fonts/Roboto-ThinItalic.ttf', - '/templates/template2/fonts/SourceSansPro-Bold.otf', - '/templates/template2/fonts/SourceSansPro-BoldIt.otf', - '/templates/template2/fonts/SourceSansPro-It.otf', - '/templates/template2/fonts/SourceSansPro-Light.otf', - '/templates/template2/fonts/SourceSansPro-LightIt.otf', - '/templates/template2/fonts/SourceSansPro-Regular.otf', - '/templates/template2/fonts/SourceSansPro-Semibold.otf', - '/templates/template2/fonts/SourceSansPro-SemiboldIt.otf' - ] - } - } - - case TEMPLATE3: - return { - texDoc: template3(data), - opts: { - cmd: 'pdflatex' - } - } - - case TEMPLATE4: - return { - texDoc: template4(data), - opts: { - cmd: 'xelatex', - inputs: ['/templates/template4/deedy-resume-openfont.cls'], - fonts: [ - '/templates/template4/fonts/Raleway-Bold.otf', - '/templates/template4/fonts/Raleway-ExtraBold.otf', - '/templates/template4/fonts/Raleway-ExtraLight.otf', - '/templates/template4/fonts/Raleway-Heavy.otf', - '/templates/template4/fonts/Raleway-Light.otf', - '/templates/template4/fonts/Raleway-Medium.otf', - '/templates/template4/fonts/Raleway-Regular.otf', - '/templates/template4/fonts/Raleway-SemiBold.otf', - '/templates/template4/fonts/Raleway-Thin.otf' - ] - } - } - - case TEMPLATE5: - return { - texDoc: template5(data), - opts: { - cmd: 'xelatex', - inputs: [ - '/templates/template5/helvetica.sty', - '/templates/template5/res.cls' - ] - } - } - - case TEMPLATE6: - return { - texDoc: template6(data), - opts: { - cmd: 'xelatex', - inputs: [ - '/templates/template6/custom-command.tex', - '/templates/template6/minimal-resume-config.tex', - '/templates/template6/minimal-resume.sty' - ], - fonts: [ - '/templates/template6/fonts/CrimsonText-Bold.ttf', - '/templates/template6/fonts/CrimsonText-BoldItalic.ttf', - '/templates/template6/fonts/CrimsonText-Italic.ttf', - '/templates/template6/fonts/CrimsonText-Regular.ttf', - '/templates/template6/fonts/CrimsonText-Roman.ttf', - '/templates/template6/fonts/CrimsonText-SemiBold.ttf', - '/templates/template6/fonts/CrimsonText-SemiBoldItalic.ttf', - '/templates/template6/fonts/Montserrat-Bold.ttf', - '/templates/template6/fonts/Montserrat-Light.otf', - '/templates/template6/fonts/Montserrat-Regular.ttf' - ] - } - } - - case TEMPLATE7: - return { - texDoc: template7(data), - opts: { - cmd: 'pdflatex', - inputs: [ - '/templates/template7/collection.sty', - '/templates/template7/moderncv.cls', - '/templates/template7/moderncvcolorblue.sty', - '/templates/template7/moderncviconsletters.sty', - '/templates/template7/moderncviconsmarvosym.sty', - '/templates/template7/moderncvstyleclassic.sty', - '/templates/template7/tweaklist.sty' - ] - } - } - - case TEMPLATE8: - return { - texDoc: template8(data), - opts: { - cmd: 'xelatex', - inputs: ['/templates/template8/mcdowellcv.cls'] - } - } - - case TEMPLATE9: - return { - texDoc: template9(data), - opts: { - cmd: 'pdflatex' - } - } - - default: - return { - texDoc: template1(data), - opts: { - cmd: 'pdflatex' - } - } - } -} +import template1 from './template1' +import template2 from './template2' +import template3 from './template3' +import template4 from './template4' +import template5 from './template5' +import template6 from './template6' +import template7 from './template7' +import template8 from './template8' +import template9 from './template9' +import { + TEMPLATE1, + TEMPLATE2, + TEMPLATE3, + TEMPLATE4, + TEMPLATE5, + TEMPLATE6, + TEMPLATE7, + TEMPLATE8, + TEMPLATE9 +} from './constants' +import { FormValues, TemplateData } from '../../types' + +/** + * Generates the LaTeX document based on the selected template + * as well as the necessary options needed for it to create a pdf. + * + * @param data - The sanitized form data from the request body. + * + * @return The generated LaTeX document as well as its additional opts. + */ +export default function getTemplateData(data: FormValues): TemplateData { + switch (data.selectedTemplate) { + case TEMPLATE1: + return { + texDoc: template1(data), + opts: { + cmd: 'pdflatex' + } + } + + case TEMPLATE2: + return { + texDoc: template2(data), + opts: { + cmd: 'xelatex', + inputs: [ + '/templates/template2/awesome-cv.cls', + '/templates/template2/fontawesome.sty' + ], + fonts: [ + '/templates/template2/fonts/FontAwesome.otf', + '/templates/template2/fonts/Roboto-Bold.ttf', + '/templates/template2/fonts/Roboto-BoldItalic.ttf', + '/templates/template2/fonts/Roboto-Italic.ttf', + '/templates/template2/fonts/Roboto-Light.ttf', + '/templates/template2/fonts/Roboto-LightItalic.ttf', + '/templates/template2/fonts/Roboto-Medium.ttf', + '/templates/template2/fonts/Roboto-MediumItalic.ttf', + '/templates/template2/fonts/Roboto-Regular.ttf', + '/templates/template2/fonts/Roboto-Thin.ttf', + '/templates/template2/fonts/Roboto-ThinItalic.ttf', + '/templates/template2/fonts/SourceSansPro-Bold.otf', + '/templates/template2/fonts/SourceSansPro-BoldIt.otf', + '/templates/template2/fonts/SourceSansPro-It.otf', + '/templates/template2/fonts/SourceSansPro-Light.otf', + '/templates/template2/fonts/SourceSansPro-LightIt.otf', + '/templates/template2/fonts/SourceSansPro-Regular.otf', + '/templates/template2/fonts/SourceSansPro-Semibold.otf', + '/templates/template2/fonts/SourceSansPro-SemiboldIt.otf' + ] + } + } + + case TEMPLATE3: + return { + texDoc: template3(data), + opts: { + cmd: 'pdflatex' + } + } + + case TEMPLATE4: + return { + texDoc: template4(data), + opts: { + cmd: 'xelatex', + inputs: ['/templates/template4/deedy-resume-openfont.cls'], + fonts: [ + '/templates/template4/fonts/Raleway-Bold.otf', + '/templates/template4/fonts/Raleway-ExtraBold.otf', + '/templates/template4/fonts/Raleway-ExtraLight.otf', + '/templates/template4/fonts/Raleway-Heavy.otf', + '/templates/template4/fonts/Raleway-Light.otf', + '/templates/template4/fonts/Raleway-Medium.otf', + '/templates/template4/fonts/Raleway-Regular.otf', + '/templates/template4/fonts/Raleway-SemiBold.otf', + '/templates/template4/fonts/Raleway-Thin.otf' + ] + } + } + + case TEMPLATE5: + return { + texDoc: template5(data), + opts: { + cmd: 'xelatex', + inputs: [ + '/templates/template5/helvetica.sty', + '/templates/template5/res.cls' + ] + } + } + + case TEMPLATE6: + return { + texDoc: template6(data), + opts: { + cmd: 'xelatex', + inputs: [ + '/templates/template6/custom-command.tex', + '/templates/template6/minimal-resume-config.tex', + '/templates/template6/minimal-resume.sty' + ], + fonts: [ + '/templates/template6/fonts/CrimsonText-Bold.ttf', + '/templates/template6/fonts/CrimsonText-BoldItalic.ttf', + '/templates/template6/fonts/CrimsonText-Italic.ttf', + '/templates/template6/fonts/CrimsonText-Regular.ttf', + '/templates/template6/fonts/CrimsonText-Roman.ttf', + '/templates/template6/fonts/CrimsonText-SemiBold.ttf', + '/templates/template6/fonts/CrimsonText-SemiBoldItalic.ttf', + '/templates/template6/fonts/Montserrat-Bold.ttf', + '/templates/template6/fonts/Montserrat-Light.otf', + '/templates/template6/fonts/Montserrat-Regular.ttf' + ] + } + } + + case TEMPLATE7: + return { + texDoc: template7(data), + opts: { + cmd: 'pdflatex', + inputs: [ + '/templates/template7/collection.sty', + '/templates/template7/moderncv.cls', + '/templates/template7/moderncvcolorblue.sty', + '/templates/template7/moderncviconsletters.sty', + '/templates/template7/moderncviconsmarvosym.sty', + '/templates/template7/moderncvstyleclassic.sty', + '/templates/template7/tweaklist.sty' + ] + } + } + + case TEMPLATE8: + return { + texDoc: template8(data), + opts: { + cmd: 'xelatex', + inputs: ['/templates/template8/mcdowellcv.cls'] + } + } + + case TEMPLATE9: + return { + texDoc: template9(data), + opts: { + cmd: 'pdflatex' + } + } + + default: + return { + texDoc: template1(data), + opts: { + cmd: 'pdflatex' + } + } + } +} diff --git a/src/lib/templates/template1.ts b/src/lib/templates/template1.ts index 0aecb8c0..1487de80 100755 --- a/src/lib/templates/template1.ts +++ b/src/lib/templates/template1.ts @@ -1,372 +1,373 @@ -import { stripIndent, source } from 'common-tags' -import { WHITESPACE } from './constants' -import { FormValues, Generator } from '../../types' - -const generator: Generator = { - profileSection(basics) { - if (!basics) { - return '' - } - - const { name, email, phone, location, website } = basics - const address = location?.address || '' - - let line1 = name ? `{\\Huge \\scshape {${name}}}` : '' - let line2 = [address, email, phone, website] - .filter(Boolean) - .join(' $\\cdot$ ') - - if (line1 && line2) { - line1 += '\\\\' - line2 += '\\\\' - } - - return stripIndent` - %==== Profile ====% - \\vspace*{-10pt} - \\begin{center} - ${line1} - ${line2} - \\end{center} - ` - }, - - educationSection(education, heading) { - if (!education) { - return '' - } - - return source` - %==== Education ====% - \\header{${heading || 'Education'}} - ${education.map((school) => { - const { - institution, - location, - studyType, - area, - score, - startDate, - endDate - } = school - - let line1 = '' - let line2 = '' - - if (institution) { - line1 += `\\textbf{${institution}}` - } - - if (location) { - line1 += `\\hfill ${location}` - } - - if (studyType) { - line2 += studyType - } - - if (area) { - line2 += studyType ? ` ${area}` : `Degree in ${area}` - } - - if (score) { - line2 += ` \\textit{GPA: ${score}}` - } - - if (startDate || endDate) { - const gradLine = `${startDate || ''} - ${endDate || ''}` - line2 += line2 ? ` \\hfill ${gradLine}` : gradLine - } - - if (line1) { - line1 += '\\\\' - } - - if (line2) { - line2 += '\\\\' - } - - return stripIndent` - ${line1} - ${line2.trim()} - \\vspace{2mm} - ` - })} - ` - }, - - workSection(work, heading) { - if (!work) { - return '' - } - - return source` - %==== Experience ====% - \\header{${heading || 'Experience'}} - \\vspace{1mm} - - ${work.map((job) => { - const { name, position, location, startDate, endDate, highlights } = job - - let line1 = '' - let line2 = '' - let highlightLines = '' - - if (name) { - line1 += `\\textbf{${name}}` - } - - if (location) { - line1 += ` \\hfill ${location}` - } - - if (position) { - line2 += `\\textit{${position}}` - } - - if (startDate && endDate) { - line2 += ` \\hfill ${startDate} - ${endDate}` - } else if (startDate) { - line2 += ` \\hfill ${startDate} - Present` - } else if (endDate) { - line2 += ` \\hfill ${endDate}` - } - - if (line1) line1 += '\\\\' - if (line2) line2 += '\\\\' - - if (highlights) { - highlightLines = source` - \\vspace{-1mm} - \\begin{itemize} \\itemsep 1pt - ${highlights.map((highlight) => `\\item ${highlight}`)} - \\end{itemize} - ` - } - - return stripIndent` - ${line1} - ${line2} - ${highlightLines} - ` - })} - ` - }, - - skillsSection(skills, heading) { - if (!skills) { - return '' - } - - return source` - \\header{${heading || 'Skills'}} - \\begin{tabular}{ l l } - ${skills.map((skill) => { - const { name = 'Misc', keywords = [] } = skill - return `${name}: & ${keywords.join(', ')} \\\\` - })} - \\end{tabular} - \\vspace{2mm} - ` - }, - - projectsSection(projects, heading) { - if (!projects) { - return '' - } - - return source` - \\header{${heading || 'Projects'}} - ${projects.map((project) => { - if (Object.keys(project).length === 0) { - return '' - } - - const { name, description, keywords, url } = project - - let line1 = '' - let line2 = description || '' - - if (name) { - line1 += `{\\textbf{${name}}}` - } - - if (keywords) { - line1 += ` {\\sl ${keywords.join(', ')}} ` - } - - if (url) { - line1 += `\\hfill ${url}` - } - - if (line1) { - line1 += '\\\\' - } - - if (line2) { - line2 += '\\\\' - } - - return stripIndent` - ${line1} - ${line2} - \\vspace*{2mm} - ` - })} - ` - }, - - awardsSection(awards, heading) { - if (!awards) { - return '' - } - - return source` - \\header{${heading || 'Awards'}} - ${awards.map((award) => { - const { title, summary, date, awarder } = award - - let line1 = '' - let line2 = summary || '' - - if (title) { - line1 += `\\textbf{${title}}` - } - - if (awarder) { - line1 += ` \\hfill ${awarder}` - } - - if (date) { - line2 += ` \\hfill ${date}` - } - - if (line1) line1 += '\\\\' - if (line2) line2 += '\\\\' - - return stripIndent` - ${line1} - ${line2} - \\vspace*{2mm} - ` - })} - ` - }, - - resumeHeader() { - return stripIndent` - %\\renewcommand{\\encodingdefault}{cg} - %\\renewcommand{\\rmdefault}{lgrcmr} - - \\def\\bull{\\vrule height 0.8ex width .7ex depth -.1ex } - - % DEFINITIONS FOR RESUME %%%%%%%%%%%%%%%%%%%%%%% - - \\newcommand{\\area} [2] { - \\vspace*{-9pt} - \\begin{verse} - \\textbf{#1} #2 - \\end{verse} - } - - \\newcommand{\\lineunder} { - \\vspace*{-8pt} \\\\ - \\hspace*{-18pt} \\hrulefill \\\\ - } - - \\newcommand{\\header} [1] { - {\\hspace*{-18pt}\\vspace*{6pt} \\textsc{#1}} - \\vspace*{-6pt} \\lineunder - } - - \\newcommand{\\employer} [3] { - { \\textbf{#1} (#2)\\\\ \\underline{\\textbf{\\emph{#3}}}\\\\ } - } - - \\newcommand{\\contact} [3] { - \\vspace*{-10pt} - \\begin{center} - {\\Huge \\scshape {#1}}\\\\ - #2 \\\\ #3 - \\end{center} - \\vspace*{-8pt} - } - - \\newenvironment{achievements}{ - \\begin{list} - {$\\bullet$}{\\topsep 0pt \\itemsep -2pt}}{\\vspace*{4pt} - \\end{list} - } - - \\newcommand{\\schoolwithcourses} [4] { - \\textbf{#1} #2 $\\bullet$ #3\\\\ - #4 \\\\ - \\vspace*{5pt} - } - - \\newcommand{\\school} [4] { - \\textbf{#1} #2 $\\bullet$ #3\\\\ - #4 \\\\ - } - % END RESUME DEFINITIONS %%%%%%%%%%%%%%%%%%%%%%% - ` - } -} - -function template1(values: FormValues) { - const { headings } = values - - return stripIndent` - \\documentclass[a4paper]{article} - \\usepackage{fullpage} - \\usepackage{amsmath} - \\usepackage{amssymb} - \\usepackage{textcomp} - \\usepackage[utf8]{inputenc} - \\usepackage[T1]{fontenc} - \\textheight=10in - \\pagestyle{empty} - \\raggedright - \\usepackage[left=0.8in,right=0.8in,bottom=0.8in,top=0.8in]{geometry} - - ${generator.resumeHeader()} - - \\begin{document} - \\vspace*{-40pt} - - ${values.sections - .map((section) => { - switch (section) { - case 'profile': - return generator.profileSection(values.basics) - - case 'education': - return generator.educationSection( - values.education, - headings.education - ) - - case 'work': - return generator.workSection(values.work, headings.work) - - case 'skills': - return generator.skillsSection(values.skills, headings.skills) - - case 'projects': - return generator.projectsSection(values.projects, headings.projects) - - case 'awards': - return generator.awardsSection(values.awards, headings.awards) - - default: - return '' - } - }) - .join('\n\n')} - - ${WHITESPACE} - \\end{document} - ` -} - -export default template1 +import { stripIndent, source } from 'common-tags' +import { WHITESPACE } from './constants' +import { FormValues, Generator } from '../../types' + +const generator: Generator = { + profileSection(basics) { + if (!basics) { + return '' + } + + const { name, email, phone, location, website } = basics + const address = location?.address || '' + + let line1 = name ? `{\\Huge \\scshape {${name}}}` : '' + let line2 = [address, email, phone, website] + .filter(Boolean) + .join(' $\\cdot$ ') + + if (line1 && line2) { + line1 += '\\\\' + line2 += '\\\\' + } + + return stripIndent` + %==== Profile ====% + \\vspace*{-10pt} + \\begin{center} + ${line1} + ${line2} + \\end{center} + ` + }, + + educationSection(education, heading) { + if (!education) { + return '' + } + + return source` + %==== Education ====% + \\header{${heading || 'Education'}} + ${education.map((school) => { + const { + institution, + location, + studyType, + area, + score, + startDate, + endDate + } = school + + let line1 = '' + let line2 = '' + + if (institution) { + line1 += `\\textbf{${institution}}` + } + + if (location) { + line1 += `\\hfill ${location}` + } + + if (studyType) { + line2 += studyType + } + + if (area) { + line2 += studyType ? ` ${area}` : `Degree in ${area}` + } + + if (score) { + line2 += ` \\textit{GPA: ${score}}` + } + + if (startDate || endDate) { + const gradLine = `${startDate || ''} - ${endDate || ''}` + line2 += line2 ? ` \\hfill ${gradLine}` : gradLine + } + + if (line1) { + line1 += '\\\\' + } + + if (line2) { + line2 += '\\\\' + } + + return stripIndent` + ${line1} + ${line2.trim()} + \\vspace{2mm} + ` + })} + ` + }, + + workSection(work, heading) { + if (!work) { + return '' + } + + return source` + %==== Experience ====% + \\header{${heading || 'Experience'}} + \\vspace{1mm} + + ${work.map((job) => { + const { name, position, location, startDate, endDate, highlights } = job + + let line1 = '' + let line2 = '' + let highlightLines = '' + + if (name) { + line1 += `\\textbf{${name}}` + } + + if (location) { + line1 += ` \\hfill ${location}` + } + + if (position) { + line2 += `\\textit{${position}}` + } + + if (startDate && endDate) { + line2 += ` \\hfill ${startDate} - ${endDate}` + } else if (startDate) { + line2 += ` \\hfill ${startDate} - Present` + } else if (endDate) { + line2 += ` \\hfill ${endDate}` + } + + if (line1) line1 += '\\\\' + if (line2) line2 += '\\\\' + + if (highlights) { + highlightLines = source` + \\vspace{-1mm} + \\begin{itemize} \\itemsep 1pt + ${highlights.map((highlight) => `\\item ${highlight}`)} + \\end{itemize} + ` + } + + return stripIndent` + ${line1} + ${line2} + ${highlightLines} + ` + })} + ` + }, + + skillsSection(skills, heading) { + if (!skills) { + return '' + } + + return source` + \\header{${heading || 'Skills'}} + \\begin{tabular}{ l l } + ${skills.map((skill) => { + const { name = 'Misc', keywords = [] } = skill + return `${name}: & ${keywords.join(', ')} \\\\` + })} + \\end{tabular} + \\vspace{2mm} + ` + }, + + projectsSection(projects, heading) { + if (!projects) { + return '' + } + + return source` + \\header{${heading || 'Projects'}} + ${projects.map((project) => { + if (Object.keys(project).length === 0) { + return '' + } + + const { name, description, keywords, url } = project + + let line1 = '' + let line2 = description || '' + + if (name) { + line1 += `{\\textbf{${name}}}` + } + + if (keywords) { + line1 += ` {\\sl ${keywords.join(', ')}} ` + } + + if (url) { + line1 += `\\hfill ${url}` + } + + if (line1) { + line1 += '\\\\' + } + + if (line2) { + line2 += '\\\\' + } + + return stripIndent` + ${line1} + ${line2} + \\vspace*{2mm} + ` + })} + ` + }, + + awardsSection(awards, heading) { + if (!awards) { + return '' + } + + return source` + \\header{${heading || 'Awards'}} + ${awards.map((award) => { + const { title, summary, date, awarder } = award + + let line1 = '' + let line2 = summary || '' + + if (title) { + line1 += `\\textbf{${title}}` + } + + if (awarder) { + line1 += ` \\hfill ${awarder}` + } + + if (date) { + line2 += ` \\hfill ${date}` + } + + if (line1) line1 += '\\\\' + if (line2) line2 += '\\\\' + + return stripIndent` + ${line1} + ${line2} + \\vspace*{2mm} + ` + })} + ` + }, + + resumeHeader() { + return stripIndent` + %\\renewcommand{\\encodingdefault}{cg} + %\\renewcommand{\\rmdefault}{lgrcmr} + + \\def\\bull{\\vrule height 0.8ex width .7ex depth -.1ex } + + % DEFINITIONS FOR RESUME %%%%%%%%%%%%%%%%%%%%%%% + + \\newcommand{\\area} [2] { + \\vspace*{-9pt} + \\begin{verse} + \\textbf{#1} #2 + \\end{verse} + } + + \\newcommand{\\lineunder} { + \\vspace*{-8pt} \\\\ + \\hspace*{-18pt} \\hrulefill \\\\ + } + + \\newcommand{\\header} [1] { + {\\hspace*{-18pt}\\vspace*{6pt} \\textsc{#1}} + \\vspace*{-6pt} \\lineunder + } + + \\newcommand{\\employer} [3] { + { \\textbf{#1} (#2)\\\\ \\underline{\\textbf{\\emph{#3}}}\\\\ } + } + + \\newcommand{\\contact} [3] { + \\vspace*{-10pt} + \\begin{center} + {\\Huge \\scshape {#1}}\\\\ + #2 \\\\ #3 + \\end{center} + \\vspace*{-8pt} + } + + \\newenvironment{achievements}{ + \\begin{list} + {$\\bullet$}{\\topsep 0pt \\itemsep -2pt}}{\\vspace*{4pt} + \\end{list} + } + + \\newcommand{\\schoolwithcourses} [4] { + \\textbf{#1} #2 $\\bullet$ #3\\\\ + #4 \\\\ + \\vspace*{5pt} + } + + \\newcommand{\\school} [4] { + \\textbf{#1} #2 $\\bullet$ #3\\\\ + #4 \\\\ + } + % END RESUME DEFINITIONS %%%%%%%%%%%%%%%%%%%%%%% + ` + } +} + +function template1(values: FormValues) { + const { headings } = values + + return stripIndent` + \\documentclass[a4paper]{article} + \\usepackage{fullpage} + \\usepackage{amsmath} + \\usepackage{amssymb} + \\usepackage{textcomp} + \\usepackage[utf8]{inputenc} + \\usepackage[T1]{fontenc} + \\textheight=10in + \\pagestyle{empty} + \\raggedright + \\usepackage[left=0.8in,right=0.8in,bottom=0.8in,top=0.8in]{geometry} + + ${generator.resumeHeader()} + + \\begin{document} + \\vspace*{-40pt} + + ${values.sections + .map((section) => { + switch (section) { + case 'profile': + return generator.profileSection(values.basics) + + case 'education': + return generator.educationSection( + values.education, + headings.education + ) + + case 'work': + return generator.workSection(values.work, headings.work) + + case 'skills': + return generator.skillsSection(values.skills, headings.skills) + + case 'projects': + return generator.projectsSection(values.projects, headings.projects) + + case 'awards': + return generator.awardsSection(values.awards, headings.awards) + + + default: + return '' + } + }) + .join('\n\n')} + + ${WHITESPACE} + \\end{document} + ` +} + +export default template1 diff --git a/src/lib/templates/template2.ts b/src/lib/templates/template2.ts index 142348a3..b40a662f 100755 --- a/src/lib/templates/template2.ts +++ b/src/lib/templates/template2.ts @@ -1,319 +1,319 @@ -import { stripIndent, source } from 'common-tags' -import { WHITESPACE } from './constants' -import type { FormValues, Generator } from '../../types' - -const generator: Generator = { - profileSection(basics) { - if (!basics) { - return '' - } - - const { name, email, phone, location = {}, website } = basics - - let nameLine = '' - - if (name) { - const names = name.split(' ') - let nameStart = '' - let nameEnd = '' - - if (names.length === 1) { - nameStart = names[0] - } else { - nameStart = names[0] - nameEnd = names.slice(1, names.length).join(' ') - } - - nameLine = `\\headerfirstnamestyle{${nameStart}} \\headerlastnamestyle{${nameEnd}} \\\\` - } - - const emailLine = email ? `{\\faEnvelope\\ ${email}}` : '' - const phoneLine = phone ? `{\\faMobile\\ ${phone}}` : '' - const addressLine = location.address - ? `{\\faMapMarker\\ ${location.address}}` - : '' - const websiteLine = website ? `{\\faLink\\ ${website}}` : '' - const info = [emailLine, phoneLine, addressLine, websiteLine] - .filter(Boolean) - .join(' | ') - - return stripIndent` - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % Profile - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\begin{center} - ${nameLine} - \\vspace{2mm} - ${info} - \\end{center} - ` - }, - - educationSection(education, heading) { - if (!education) { - return '' - } - - return source` - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % Education - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\cvsection{${heading || 'Education'}} - \\begin{cventries} - ${education.map((school) => { - const { - institution, - location, - area, - studyType, - score, - startDate, - endDate - } = school - - let degreeLine - - if (studyType && area) { - degreeLine = `${studyType} in ${area}` - } else if (studyType || area) { - degreeLine = studyType || area - } - - let dateRange - - if (startDate && endDate) { - dateRange = `${startDate} – ${endDate}` - } else if (startDate) { - dateRange = `${startDate} – Present` - } else { - dateRange = endDate - } - - return stripIndent` - \\cventry - {${degreeLine || ''}} - {${institution || ''}} - {${location || ''}} - {${dateRange || ''}} - {${score ? `GPA: ${score}` : ''}} - ` - })} - \\end{cventries} - - \\vspace{-2mm} - ` - }, - - workSection(work, heading) { - if (!work) { - return '' - } - - return source` - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % Experience - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\cvsection{${heading || 'Experience'}} - \\begin{cventries} - ${work.map((job) => { - const { name, position, location, startDate, endDate, highlights } = job - - let dateRange - let dutyLines - - if (startDate && endDate) { - dateRange = `${startDate} – ${endDate}` - } else if (startDate) { - dateRange = `${startDate} – Present` - } else { - dateRange = endDate - } - - if (highlights) { - dutyLines = source` - \\begin{cvitems} - ${highlights.map((duty) => `\\item {${duty}}`)} - \\end{cvitems} - ` - } - - return stripIndent` - \\cventry - {${position || ''}} - {${name || ''}} - {${location || ''}} - {${dateRange || ''}} - {${dutyLines}} - ` - })} - \\end{cventries} - ` - }, - - skillsSection(skills, heading) { - if (!skills) { - return '' - } - - return source` - \\cvsection{${heading || 'Skills'}} - \\begin{cventries} - \\cventry - {} - {\\def\\arraystretch{1.15}{\\begin{tabular}{ l l } - ${skills.map((skill) => { - const { name, keywords = [] } = skill - const nameLine = name ? `${name}: ` : '' - const detailsLine = `{\\skill{ ${keywords.join(', ') || ''}}}` - - return `${nameLine} & ${detailsLine} \\\\` - })} - \\end{tabular}}} - {} - {} - {} - \\end{cventries} - - \\vspace{-7mm} - ` - }, - - projectsSection(projects, heading) { - if (!projects) { - return '' - } - - return source` - \\cvsection{${heading || 'Projects'}} - \\begin{cventries} - ${projects.map((project) => { - const { name, description, keywords = [], url } = project - - return stripIndent` - \\cventry - {${description || ''}} - {${name || ''}} - {${keywords.join(', ') || ''}} - {${url || ''}} - {} - - \\vspace{-5mm} - ` - })} - \\end{cventries} - ` - }, - - awardsSection(awards, heading) { - if (!awards) { - return '' - } - - return source` - \\cvsection{${heading || 'Awards'}} - \\begin{cvhonors} - ${awards.map((award) => { - const { title, summary, date, awarder } = award - - return stripIndent` - \\cvhonor - {${title || ''}} - {${summary || ''}} - {${awarder || ''}} - {${date || ''}} - ` - })} - \\end{cvhonors} - ` - }, - - resumeHeader() { - return stripIndent` - %!TEX TS-program = xelatex - %!TEX encoding = UTF-8 Unicode - % Awesome CV LaTeX Template - % - % This template has been downloaded from: - % https://github.com/posquit0/Awesome-CV - % - % Author: - % Claud D. Park - % http://www.posquit0.com - % - % Template license: - % CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0/) - % - - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % Configuration - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - %%% Themes: Awesome-CV - \\documentclass[]{awesome-cv} - \\usepackage{textcomp} - %%% Override a directory location for fonts(default: 'fonts/') - \\fontdir[fonts/] - - %%% Configure a directory location for sections - \\newcommand*{\\sectiondir}{resume/} - - %%% Override color - % Awesome Colors: awesome-emerald, awesome-skyblue, awesome-red, awesome-pink, awesome-orange - % awesome-nephritis, awesome-concrete, awesome-darknight - %% Color for highlight - % Define your custom color if you don't like awesome colors - \\colorlet{awesome}{awesome-red} - %\\definecolor{awesome}{HTML}{CA63A8} - %% Colors for text - %\\definecolor{darktext}{HTML}{414141} - %\\definecolor{text}{HTML}{414141} - %\\definecolor{graytext}{HTML}{414141} - %\\definecolor{lighttext}{HTML}{414141} - - %%% Override a separator for social informations in header(default: ' | ') - %\\headersocialsep[\\quad\\textbar\\quad] - ` - } -} - -function template2(values: FormValues) { - const { headings = {} } = values - - return stripIndent` - ${generator.resumeHeader()} - \\begin{document} - ${values.sections - .map((section) => { - switch (section) { - case 'profile': - return generator.profileSection(values.basics) - - case 'education': - return generator.educationSection( - values.education, - headings.education - ) - - case 'work': - return generator.workSection(values.work, headings.work) - - case 'skills': - return generator.skillsSection(values.skills, headings.skills) - - case 'projects': - return generator.projectsSection(values.projects, headings.projects) - - case 'awards': - return generator.awardsSection(values.awards, headings.awards) - - default: - return '' - } - }) - .join('\n')} - ${WHITESPACE} - \\end{document} - ` -} - -export default template2 +import { stripIndent, source } from 'common-tags' +import { WHITESPACE } from './constants' +import type { FormValues, Generator } from '../../types' + +const generator: Generator = { + profileSection(basics) { + if (!basics) { + return '' + } + + const { name, email, phone, location = {}, website } = basics + + let nameLine = '' + + if (name) { + const names = name.split(' ') + let nameStart = '' + let nameEnd = '' + + if (names.length === 1) { + nameStart = names[0] + } else { + nameStart = names[0] + nameEnd = names.slice(1, names.length).join(' ') + } + + nameLine = `\\headerfirstnamestyle{${nameStart}} \\headerlastnamestyle{${nameEnd}} \\\\` + } + + const emailLine = email ? `{\\faEnvelope\\ ${email}}` : '' + const phoneLine = phone ? `{\\faMobile\\ ${phone}}` : '' + const addressLine = location.address + ? `{\\faMapMarker\\ ${location.address}}` + : '' + const websiteLine = website ? `{\\faLink\\ ${website}}` : '' + const info = [emailLine, phoneLine, addressLine, websiteLine] + .filter(Boolean) + .join(' | ') + + return stripIndent` + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Profile + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\begin{center} + ${nameLine} + \\vspace{2mm} + ${info} + \\end{center} + ` + }, + + educationSection(education, heading) { + if (!education) { + return '' + } + + return source` + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Education + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\cvsection{${heading || 'Education'}} + \\begin{cventries} + ${education.map((school) => { + const { + institution, + location, + area, + studyType, + score, + startDate, + endDate + } = school + + let degreeLine + + if (studyType && area) { + degreeLine = `${studyType} in ${area}` + } else if (studyType || area) { + degreeLine = studyType || area + } + + let dateRange + + if (startDate && endDate) { + dateRange = `${startDate} – ${endDate}` + } else if (startDate) { + dateRange = `${startDate} – Present` + } else { + dateRange = endDate + } + + return stripIndent` + \\cventry + {${degreeLine || ''}} + {${institution || ''}} + {${location || ''}} + {${dateRange || ''}} + {${score ? `GPA: ${score}` : ''}} + ` + })} + \\end{cventries} + + \\vspace{-2mm} + ` + }, + + workSection(work, heading) { + if (!work) { + return '' + } + + return source` + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Experience + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\cvsection{${heading || 'Experience'}} + \\begin{cventries} + ${work.map((job) => { + const { name, position, location, startDate, endDate, highlights } = job + + let dateRange + let dutyLines + + if (startDate && endDate) { + dateRange = `${startDate} – ${endDate}` + } else if (startDate) { + dateRange = `${startDate} – Present` + } else { + dateRange = endDate + } + + if (highlights) { + dutyLines = source` + \\begin{cvitems} + ${highlights.map((duty) => `\\item {${duty}}`)} + \\end{cvitems} + ` + } + + return stripIndent` + \\cventry + {${position || ''}} + {${name || ''}} + {${location || ''}} + {${dateRange || ''}} + {${dutyLines}} + ` + })} + \\end{cventries} + ` + }, + + skillsSection(skills, heading) { + if (!skills) { + return '' + } + + return source` + \\cvsection{${heading || 'Skills'}} + \\begin{cventries} + \\cventry + {} + {\\def\\arraystretch{1.15}{\\begin{tabular}{ l l } + ${skills.map((skill) => { + const { name, keywords = [] } = skill + const nameLine = name ? `${name}: ` : '' + const detailsLine = `{\\skill{ ${keywords.join(', ') || ''}}}` + + return `${nameLine} & ${detailsLine} \\\\` + })} + \\end{tabular}}} + {} + {} + {} + \\end{cventries} + + \\vspace{-7mm} + ` + }, + + projectsSection(projects, heading) { + if (!projects) { + return '' + } + + return source` + \\cvsection{${heading || 'Projects'}} + \\begin{cventries} + ${projects.map((project) => { + const { name, description, keywords = [], url } = project + + return stripIndent` + \\cventry + {${description || ''}} + {${name || ''}} + {${keywords.join(', ') || ''}} + {${url || ''}} + {} + + \\vspace{-5mm} + ` + })} + \\end{cventries} + ` + }, + + awardsSection(awards, heading) { + if (!awards) { + return '' + } + + return source` + \\cvsection{${heading || 'Awards'}} + \\begin{cvhonors} + ${awards.map((award) => { + const { title, summary, date, awarder } = award + + return stripIndent` + \\cvhonor + {${title || ''}} + {${summary || ''}} + {${awarder || ''}} + {${date || ''}} + ` + })} + \\end{cvhonors} + ` + }, + + resumeHeader() { + return stripIndent` + %!TEX TS-program = xelatex + %!TEX encoding = UTF-8 Unicode + % Awesome CV LaTeX Template + % + % This template has been downloaded from: + % https://github.com/posquit0/Awesome-CV + % + % Author: + % Claud D. Park + % http://www.posquit0.com + % + % Template license: + % CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0/) + % + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Configuration + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%% Themes: Awesome-CV + \\documentclass[]{awesome-cv} + \\usepackage{textcomp} + %%% Override a directory location for fonts(default: 'fonts/') + \\fontdir[fonts/] + + %%% Configure a directory location for sections + \\newcommand*{\\sectiondir}{resume/} + + %%% Override color + % Awesome Colors: awesome-emerald, awesome-skyblue, awesome-red, awesome-pink, awesome-orange + % awesome-nephritis, awesome-concrete, awesome-darknight + %% Color for highlight + % Define your custom color if you don't like awesome colors + \\colorlet{awesome}{awesome-red} + %\\definecolor{awesome}{HTML}{CA63A8} + %% Colors for text + %\\definecolor{darktext}{HTML}{414141} + %\\definecolor{text}{HTML}{414141} + %\\definecolor{graytext}{HTML}{414141} + %\\definecolor{lighttext}{HTML}{414141} + + %%% Override a separator for social informations in header(default: ' | ') + %\\headersocialsep[\\quad\\textbar\\quad] + ` + } +} + +function template2(values: FormValues) { + const { headings = {} } = values + + return stripIndent` + ${generator.resumeHeader()} + \\begin{document} + ${values.sections + .map((section) => { + switch (section) { + case 'profile': + return generator.profileSection(values.basics) + + case 'education': + return generator.educationSection( + values.education, + headings.education + ) + + case 'work': + return generator.workSection(values.work, headings.work) + + case 'skills': + return generator.skillsSection(values.skills, headings.skills) + + case 'projects': + return generator.projectsSection(values.projects, headings.projects) + + case 'awards': + return generator.awardsSection(values.awards, headings.awards) + + default: + return '' + } + }) + .join('\n')} + ${WHITESPACE} + \\end{document} + ` +} + +export default template2 diff --git a/src/lib/templates/template3.ts b/src/lib/templates/template3.ts index 53c2a423..b6233dc1 100755 --- a/src/lib/templates/template3.ts +++ b/src/lib/templates/template3.ts @@ -1,338 +1,338 @@ -import { stripIndent, source } from 'common-tags' -import { WHITESPACE } from './constants' -import type { FormValues, Generator } from '../../types' - -const generator: Generator = { - profileSection(basics) { - if (!basics) { - return '' - } - - const { name, email, phone, location = {}, website } = basics - const info = [email, phone, location.address, website] - .filter(Boolean) - .join(' | ') - - return stripIndent` - \\begin{tabular*}{7in}{l@{\\extracolsep{\\fill}}r} - \\textbf{\\Large ${name}} & \\textit{${info}} - \\end{tabular*} - ` - }, - - educationSection(education, heading) { - if (!education) { - return '' - } - - return source` - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\resheading{${heading || 'Education'}} - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\begin{itemize}[leftmargin=*] - - ${education.map((school) => { - const { - institution = '', - location = '', - studyType = '', - area = '', - score = '', - startDate = '', - endDate = '' - } = school - - let formattedLocation = '' - - if (location) { - formattedLocation = location + '\\\\' - } - - let degreeLine = '' - - if (studyType && area) { - degreeLine = `${studyType} ${area}` - } else if (studyType || area) { - degreeLine = studyType || area - } - - if (score) { - degreeLine += degreeLine ? `, GPA: ${score}` : `GPA: ${score}` - } - - let dateRange = '' - - if (startDate && endDate) { - dateRange = `${startDate} | ${endDate}` - } else if (startDate) { - dateRange = `${startDate} | Present` - } else { - dateRange = endDate - } - - return stripIndent` - \\item[] - \\school - {${institution || ''}} - {${formattedLocation || ''}} - {${degreeLine}} - {${dateRange || ''}} - ` - })} - - \\end{itemize} - ` - }, - - workSection(work, heading) { - if (!work) { - return '' - } - - return source` - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\resheading{${heading || 'Experience'}} - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\begin{itemize}[leftmargin=*] - ${work.map((job) => { - const { name, position, location, startDate, endDate, highlights } = job - - let dateRange - let dutyLines - - if (startDate && endDate) { - dateRange = `${startDate} | ${endDate}` - } else if (startDate) { - dateRange = `${startDate} | Present` - } else { - dateRange = endDate - } - - if (highlights) { - dutyLines = source` - \\begin{itemize} - ${highlights.map((duty) => `\\item ${duty}`)} - \\end{itemize} - ` - } - - return stripIndent` - \\item[] - \\job - {${name || ''}} - {${location || ''}} - {${position || ''}} - {${dateRange || ''}} - ${dutyLines} - ` - })} - \\end{itemize} - ` - }, - - skillsSection(skills, heading) { - if (!skills) { - return '' - } - - return source` - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\resheading{${heading || 'Skills'}} - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\begin{itemize}[leftmargin=*] - \\setlength\\itemsep{0em} - ${skills.map((skill) => { - const { name = '', keywords = [] } = skill - return `\\item[] \\skill{${name}}{${keywords.join(', ')}}` - })} - \\end{itemize} - ` - }, - - projectsSection(projects, heading) { - if (!projects) { - return '' - } - - return source` - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\resheading{${heading || 'Projects'}} - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\begin{itemize}[leftmargin=*] - ${projects.map((project) => { - const { name = '', description = '', keywords = [], url = '' } = project - - const descriptionWithNewline = description - ? `\\\\${description}` - : description - - return stripIndent` - \\item[] - \\project - {${name}} - {${keywords.join(', ')}} - {${url}} - {${descriptionWithNewline}} - ` - })} - \\end{itemize} - ` - }, - - awardsSection(awards, heading) { - if (!awards) { - return '' - } - - return source` - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\resheading{${heading || 'Awards'}} - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\begin{itemize}[leftmargin=*] - ${awards.map((award) => { - const { title = '', summary = '', date = '', awarder = '' } = award - - const summaryWithNewline = summary ? `\\\\${summary}` : summary - - return stripIndent` - \\item[] - \\award - {${title}} - {${date}} - {${awarder}} - {${summaryWithNewline}} - ` - })} - \\end{itemize} - ` - }, - - resumeHeader() { - return stripIndent` - % (c) 2002 Matthew Boedicker (original author) http://mboedick.org - % (c) 2003-2007 David J. Grant http://www.davidgrant.ca - % (c) 2008 Nathaniel Johnston http://www.nathanieljohnston.com - % - % (c) 2012 Scott Clark cam.cornell.edu/~sc932 - % - %This work is licensed under the Creative Commons Attribution-Noncommercial-Share Alike 2.5 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA. - - \\documentclass[11pt]{article} - \\newlength{\\outerbordwidth} - \\pagestyle{empty} - \\raggedbottom - \\raggedright - \\usepackage[svgnames]{xcolor} - \\usepackage{framed} - \\usepackage{tocloft} - \\usepackage{enumitem} - \\usepackage{textcomp} - \\usepackage[utf8]{inputenc} - \\usepackage[T1]{fontenc} - - - %----------------------------------------------------------- - %Edit these values as you see fit - - \\setlength{\\outerbordwidth}{3pt} % Width of border outside of title bars - \\definecolor{shadecolor}{gray}{0.75} % Outer background color of title bars (0 = black, 1 = white) - \\definecolor{shadecolorB}{gray}{0.93} % Inner background color of title bars - - - %----------------------------------------------------------- - %Margin setup - - \\setlength{\\evensidemargin}{-0.25in} - \\setlength{\\headheight}{0in} - \\setlength{\\headsep}{0in} - \\setlength{\\oddsidemargin}{-0.25in} - \\setlength{\\tabcolsep}{0in} - \\setlength{\\textheight}{9.5in} - \\setlength{\\textwidth}{7in} - \\setlength{\\topmargin}{-0.3in} - \\setlength{\\topskip}{0in} - \\setlength{\\voffset}{0.1in} - - - %----------------------------------------------------------- - %Custom commands - \\newcommand{\\resitem}[1]{\\item #1 \\vspace{-4pt}} - \\newcommand{\\resheading}[1]{ - \\parbox{\\textwidth}{\\setlength{\\FrameSep}{\\outerbordwidth} - \\begin{shaded} - \\setlength{\\fboxsep}{0pt}\\framebox[\\textwidth][l]{\\setlength{\\fboxsep}{4pt}\\fcolorbox{shadecolorB}{shadecolorB}{\\textbf{\\sffamily{\\mbox{~}\\makebox[6.762in][l]{\\large #1} \\vphantom{p\\^{E}}}}}} - \\end{shaded} - }\\vspace{-11pt} - } - \\newcommand{\\ressubheading}[4]{ - \\begin{tabular*}{6.5in}{l@{\\cftdotfill{\\cftsecdotsep}\\extracolsep{\\fill}}r} - \\textbf{#1} & #2 \\\\ - \\textit{#3} & \\textit{#4} \\\\ - - \\end{tabular*}\\vspace{-6pt}} - - \\newcommand{\\school}[4]{\\vspace{1.5mm} - \\textbf{#1} \\hfill #2 \\textit{#3} \\hfill \\textit{#4} \\vspace{1.5mm} - } - - \\newcommand{\\job}[4]{ - \\textbf{#1} \\hfill #2 \\hfill \\textit{#3} \\hfill \\textit{#4} - } - - \\newcommand{\\skill}[2]{ - \\textbf{#1} #2 - } - - \\newcommand{\\project}[4]{ \\vspace{1.5mm} - \\textbf{#1} #2 \\hfill \\textit{#3}#4 \\vspace{1.5mm} - } - - \\newcommand{\\award}[4]{ \\vspace{1.5mm} - \\textbf{#1} #2 \\hfill \\textit{#3} #4 \\vspace{1.5mm} - } - %----------------------------------------------------------- - ` - } -} - -function template3(values: FormValues) { - const { headings = {} } = values - - return stripIndent` - ${generator.resumeHeader()} - \\begin{document} - ${values.sections - .map((section) => { - switch (section) { - case 'profile': - return generator.profileSection(values.basics) - - case 'education': - return generator.educationSection( - values.education, - headings.education - ) - - case 'work': - return generator.workSection(values.work, headings.work) - - case 'skills': - return generator.skillsSection(values.skills, headings.skills) - - case 'projects': - return generator.projectsSection(values.projects, headings.projects) - - case 'awards': - return generator.awardsSection(values.awards, headings.awards) - - default: - return '' - } - }) - .join('\n')} - ${WHITESPACE} - \\end{document} - ` -} - -export default template3 +import { stripIndent, source } from 'common-tags' +import { WHITESPACE } from './constants' +import type { FormValues, Generator } from '../../types' + +const generator: Generator = { + profileSection(basics) { + if (!basics) { + return '' + } + + const { name, email, phone, location = {}, website } = basics + const info = [email, phone, location.address, website] + .filter(Boolean) + .join(' | ') + + return stripIndent` + \\begin{tabular*}{7in}{l@{\\extracolsep{\\fill}}r} + \\textbf{\\Large ${name}} & \\textit{${info}} + \\end{tabular*} + ` + }, + + educationSection(education, heading) { + if (!education) { + return '' + } + + return source` + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\resheading{${heading || 'Education'}} + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\begin{itemize}[leftmargin=*] + + ${education.map((school) => { + const { + institution = '', + location = '', + studyType = '', + area = '', + score = '', + startDate = '', + endDate = '' + } = school + + let formattedLocation = '' + + if (location) { + formattedLocation = location + '\\\\' + } + + let degreeLine = '' + + if (studyType && area) { + degreeLine = `${studyType} ${area}` + } else if (studyType || area) { + degreeLine = studyType || area + } + + if (score) { + degreeLine += degreeLine ? `, GPA: ${score}` : `GPA: ${score}` + } + + let dateRange = '' + + if (startDate && endDate) { + dateRange = `${startDate} | ${endDate}` + } else if (startDate) { + dateRange = `${startDate} | Present` + } else { + dateRange = endDate + } + + return stripIndent` + \\item[] + \\school + {${institution || ''}} + {${formattedLocation || ''}} + {${degreeLine}} + {${dateRange || ''}} + ` + })} + + \\end{itemize} + ` + }, + + workSection(work, heading) { + if (!work) { + return '' + } + + return source` + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\resheading{${heading || 'Experience'}} + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\begin{itemize}[leftmargin=*] + ${work.map((job) => { + const { name, position, location, startDate, endDate, highlights } = job + + let dateRange + let dutyLines + + if (startDate && endDate) { + dateRange = `${startDate} | ${endDate}` + } else if (startDate) { + dateRange = `${startDate} | Present` + } else { + dateRange = endDate + } + + if (highlights) { + dutyLines = source` + \\begin{itemize} + ${highlights.map((duty) => `\\item ${duty}`)} + \\end{itemize} + ` + } + + return stripIndent` + \\item[] + \\job + {${name || ''}} + {${location || ''}} + {${position || ''}} + {${dateRange || ''}} + ${dutyLines} + ` + })} + \\end{itemize} + ` + }, + + skillsSection(skills, heading) { + if (!skills) { + return '' + } + + return source` + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\resheading{${heading || 'Skills'}} + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\begin{itemize}[leftmargin=*] + \\setlength\\itemsep{0em} + ${skills.map((skill) => { + const { name = '', keywords = [] } = skill + return `\\item[] \\skill{${name}}{${keywords.join(', ')}}` + })} + \\end{itemize} + ` + }, + + projectsSection(projects, heading) { + if (!projects) { + return '' + } + + return source` + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\resheading{${heading || 'Projects'}} + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\begin{itemize}[leftmargin=*] + ${projects.map((project) => { + const { name = '', description = '', keywords = [], url = '' } = project + + const descriptionWithNewline = description + ? `\\\\${description}` + : description + + return stripIndent` + \\item[] + \\project + {${name}} + {${keywords.join(', ')}} + {${url}} + {${descriptionWithNewline}} + ` + })} + \\end{itemize} + ` + }, + + awardsSection(awards, heading) { + if (!awards) { + return '' + } + + return source` + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\resheading{${heading || 'Awards'}} + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\begin{itemize}[leftmargin=*] + ${awards.map((award) => { + const { title = '', summary = '', date = '', awarder = '' } = award + + const summaryWithNewline = summary ? `\\\\${summary}` : summary + + return stripIndent` + \\item[] + \\award + {${title}} + {${date}} + {${awarder}} + {${summaryWithNewline}} + ` + })} + \\end{itemize} + ` + }, + + resumeHeader() { + return stripIndent` + % (c) 2002 Matthew Boedicker (original author) http://mboedick.org + % (c) 2003-2007 David J. Grant http://www.davidgrant.ca + % (c) 2008 Nathaniel Johnston http://www.nathanieljohnston.com + % + % (c) 2012 Scott Clark cam.cornell.edu/~sc932 + % + %This work is licensed under the Creative Commons Attribution-Noncommercial-Share Alike 2.5 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA. + + \\documentclass[11pt]{article} + \\newlength{\\outerbordwidth} + \\pagestyle{empty} + \\raggedbottom + \\raggedright + \\usepackage[svgnames]{xcolor} + \\usepackage{framed} + \\usepackage{tocloft} + \\usepackage{enumitem} + \\usepackage{textcomp} + \\usepackage[utf8]{inputenc} + \\usepackage[T1]{fontenc} + + + %----------------------------------------------------------- + %Edit these values as you see fit + + \\setlength{\\outerbordwidth}{3pt} % Width of border outside of title bars + \\definecolor{shadecolor}{gray}{0.75} % Outer background color of title bars (0 = black, 1 = white) + \\definecolor{shadecolorB}{gray}{0.93} % Inner background color of title bars + + + %----------------------------------------------------------- + %Margin setup + + \\setlength{\\evensidemargin}{-0.25in} + \\setlength{\\headheight}{0in} + \\setlength{\\headsep}{0in} + \\setlength{\\oddsidemargin}{-0.25in} + \\setlength{\\tabcolsep}{0in} + \\setlength{\\textheight}{9.5in} + \\setlength{\\textwidth}{7in} + \\setlength{\\topmargin}{-0.3in} + \\setlength{\\topskip}{0in} + \\setlength{\\voffset}{0.1in} + + + %----------------------------------------------------------- + %Custom commands + \\newcommand{\\resitem}[1]{\\item #1 \\vspace{-4pt}} + \\newcommand{\\resheading}[1]{ + \\parbox{\\textwidth}{\\setlength{\\FrameSep}{\\outerbordwidth} + \\begin{shaded} + \\setlength{\\fboxsep}{0pt}\\framebox[\\textwidth][l]{\\setlength{\\fboxsep}{4pt}\\fcolorbox{shadecolorB}{shadecolorB}{\\textbf{\\sffamily{\\mbox{~}\\makebox[6.762in][l]{\\large #1} \\vphantom{p\\^{E}}}}}} + \\end{shaded} + }\\vspace{-11pt} + } + \\newcommand{\\ressubheading}[4]{ + \\begin{tabular*}{6.5in}{l@{\\cftdotfill{\\cftsecdotsep}\\extracolsep{\\fill}}r} + \\textbf{#1} & #2 \\\\ + \\textit{#3} & \\textit{#4} \\\\ + + \\end{tabular*}\\vspace{-6pt}} + + \\newcommand{\\school}[4]{\\vspace{1.5mm} + \\textbf{#1} \\hfill #2 \\textit{#3} \\hfill \\textit{#4} \\vspace{1.5mm} + } + + \\newcommand{\\job}[4]{ + \\textbf{#1} \\hfill #2 \\hfill \\textit{#3} \\hfill \\textit{#4} + } + + \\newcommand{\\skill}[2]{ + \\textbf{#1} #2 + } + + \\newcommand{\\project}[4]{ \\vspace{1.5mm} + \\textbf{#1} #2 \\hfill \\textit{#3}#4 \\vspace{1.5mm} + } + + \\newcommand{\\award}[4]{ \\vspace{1.5mm} + \\textbf{#1} #2 \\hfill \\textit{#3} #4 \\vspace{1.5mm} + } + %----------------------------------------------------------- + ` + } +} + +function template3(values: FormValues) { + const { headings = {} } = values + + return stripIndent` + ${generator.resumeHeader()} + \\begin{document} + ${values.sections + .map((section) => { + switch (section) { + case 'profile': + return generator.profileSection(values.basics) + + case 'education': + return generator.educationSection( + values.education, + headings.education + ) + + case 'work': + return generator.workSection(values.work, headings.work) + + case 'skills': + return generator.skillsSection(values.skills, headings.skills) + + case 'projects': + return generator.projectsSection(values.projects, headings.projects) + + case 'awards': + return generator.awardsSection(values.awards, headings.awards) + + default: + return '' + } + }) + .join('\n')} + ${WHITESPACE} + \\end{document} + ` +} + +export default template3 diff --git a/src/lib/templates/template4.ts b/src/lib/templates/template4.ts index eb825357..e945ea5b 100755 --- a/src/lib/templates/template4.ts +++ b/src/lib/templates/template4.ts @@ -1,393 +1,393 @@ -import { stripIndent, source } from 'common-tags' -import { WHITESPACE } from './constants' -import type { FormValues, Generator } from '../../types' - -const generator: Generator = { - profileSection(profile) { - if (!profile) { - return '\\namesection{Your}{Name}{}' - } - - const { name, email, phone, location = {}, website } = profile - - let nameStart = '' - let nameEnd = '' - - if (name) { - const names = name.split(' ') - - if (names.length === 1) { - nameStart = names[0] - nameEnd = '' - } else { - nameStart = names[0] - nameEnd = names.slice(1, names.length).join(' ') - } - } - - const info = [email, phone, location.address, website] - .filter(Boolean) - .join(' | ') - - const sectionHeader = stripIndent` - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % - % Profile - % - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - ` - - if (!name) { - return stripIndent` - ${sectionHeader} - \\centering{ - \\color{headings} - \\fontspec[Path = fonts/raleway/]{Raleway-Medium} - \\fontsize{11pt}{14pt} - \\selectfont ${info} - } - ` - } - - return stripIndent` - ${sectionHeader} - \\namesection{${nameStart}}{${nameEnd}}{${info}} - ` - }, - - educationSection(education, heading) { - if (!education) { - return '' - } - - return source` - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % - % Education - % - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\section{${heading || 'Education'}} - \\raggedright - ${education.map((school) => { - const { - institution, - location, - studyType, - area, - score, - startDate, - endDate - } = school - - let line1 = '' - let line2 = '' - - if (institution) { - line1 += `\\runsubsection{${institution}}` - } - - if (studyType && area) { - line1 += `\\descript{| ${studyType} ${area}}` - } else if (studyType) { - line1 += `\\descript{| ${studyType}}` - } else if (area) { - line1 += `\\descript{| ${area}}` - } - - let dateRange - - if (startDate && endDate) { - dateRange = `${startDate} - ${endDate}` - } else if (startDate) { - dateRange = `${startDate} - Present` - } else { - dateRange = endDate - } - - const locationAndDate = [location, dateRange] - .filter(Boolean) - .join(' | ') - - if (locationAndDate) { - line1 += `\\hfill \\location{${locationAndDate}}` - } - - if (line1) { - line1 += '\\\\' - } - - if (score) { - line2 += `GPA: ${score}\\\\` - } - - return ` - ${line1} - ${line2} - \\sectionsep - ` - })} - ` - }, - - workSection(work, heading) { - if (!work) { - return '' - } - - return source` - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % - % Experience - % - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\section{${heading || 'Experience'}} - ${work.map((job) => { - const { - name, - position, - location, - startDate, - endDate = '', - highlights - } = job - - let line1 = '' - let dateRange = '' - let highlightLines = '' - - if (name) { - line1 += `\\runsubsection{${name}}` - } - - if (position) { - line1 += `\\descript{| ${position}}` - } - - if (startDate && endDate) { - dateRange = `${startDate} – ${endDate}` - } else if (startDate) { - dateRange = `${startDate} – Present` - } else { - dateRange = endDate - } - - if (location && dateRange) { - line1 += `\\hfill \\location{${location} | ${dateRange}}` - } else if (location) { - line1 += `\\hfill \\location{${location}}` - } else if (dateRange) { - line1 += `\\hfill \\location{${dateRange}}` - } - - if (highlights) { - highlightLines = source` - \\begin{tightemize} - ${highlights.map((highlight) => `\\item ${highlight}`)} - \\end{tightemize} - ` - } - - return stripIndent` - ${line1} - ${highlightLines} - \\sectionsep - ` - })} - ` - }, - - skillsSection(skills, heading) { - if (!skills) { - return '' - } - - return source` - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % - % Skills - % - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\section{${heading || 'Skills'}} - \\raggedright - \\begin{tabular}{ l l } - ${skills.map((skill) => { - const { name = '', keywords = [] } = skill - return `\\descript{${name}} & {\\location{${keywords.join(', ')}}} \\\\` - })} - \\end{tabular} - \\sectionsep - ` - }, - - projectsSection(projects, heading) { - if (!projects) { - return '' - } - - return source` - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % - % Projects - % - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\section{${heading || 'Projects'}} - \\raggedright - ${projects.map((project) => { - const { name, description, keywords, url } = project - - let line1 = '' - let line2 = '' - let line3 = '' - - if (name) { - line1 += `\\runsubsection{\\large{${name}}}` - } - - if (keywords) { - line2 += `\\descript{| ${keywords.join(', ')}}` - } - - if (url) { - line2 += `\\hfill \\location{${url}}` - } - - if (line2) { - line2 += '\\\\' - } - - if (description) { - line3 += `${description}\\\\` - } - - return ` - ${line1} - ${line2} - ${line3} - \\sectionsep - ` - })} - ` - }, - - awardsSection(awards, heading) { - if (!awards) { - return '' - } - - return source` - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % - % Awards - % - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \\section{${heading || 'Awards'}} - ${awards.map((award) => { - const { title, summary, date, awarder } = award - const info = [awarder, date].filter(Boolean).join(' | ') - - return stripIndent` - \\runsubsection{\\large{${title || ''}}} \\descript{${info}} \\\\ - ${summary ? `${summary}\\\\` : ''} - \\sectionsep - ` - })} - ` - }, - - resumeHeader() { - return stripIndent` - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % This is a modified ONE COLUMN version of - % the following template: - % - % Deedy - One Page Two Column Resume - % LaTeX Template - % Version 1.1 (30/4/2014) - % - % Original author: - % Debarghya Das (http://debarghyadas.com) - % - % Original repository: - % https://github.com/deedydas/Deedy-Resume - % - % IMPORTANT: THIS TEMPLATE NEEDS TO BE COMPILED WITH XeLaTeX - % - % This template uses several fonts not included with Windows/Linux by - % default. If you get compilation errors saying a font is missing, find the line - % on which the font is used and either change it to a font included with your - % operating system or comment the line out to use the default font. - % - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % - % TODO: - % 1. Integrate biber/bibtex for article citation under publications. - % 2. Figure out a smoother way for the document to flow onto the next page. - % 3. Add styling information for a "Projects/Hacks" section. - % 4. Add location/address information - % 5. Merge OpenFont and MacFonts as a single sty with options. - % - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % - % CHANGELOG: - % v1.1: - % 1. Fixed several compilation bugs with \\renewcommand - % 2. Got Open-source fonts (Windows/Linux support) - % 3. Added Last Updated - % 4. Move Title styling into .sty - % 5. Commented .sty file. - % - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - % - % Known Issues: - % 1. Overflows onto second page if any column's contents are more than the - % vertical limit - % 2. Hacky space on the first bullet point on the second column. - % - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - ` - } -} - -function template4(values: FormValues) { - const { headings = {} } = values - - return stripIndent` - ${generator.resumeHeader()} - \\documentclass[]{deedy-resume-openfont} - - \\begin{document} - ${values.sections - .map((section) => { - switch (section) { - case 'profile': - return generator.profileSection(values.basics) - - case 'education': - return generator.educationSection( - values.education, - headings.education - ) - - case 'work': - return generator.workSection(values.work, headings.work) - - case 'skills': - return generator.skillsSection(values.skills, headings.skills) - - case 'projects': - return generator.projectsSection(values.projects, headings.projects) - - case 'awards': - return generator.awardsSection(values.awards, headings.awards) - - default: - return '' - } - }) - .join('\n')} - ${WHITESPACE} - \\end{document} - ` -} - -export default template4 +import { stripIndent, source } from 'common-tags' +import { WHITESPACE } from './constants' +import type { FormValues, Generator } from '../../types' + +const generator: Generator = { + profileSection(profile) { + if (!profile) { + return '\\namesection{Your}{Name}{}' + } + + const { name, email, phone, location = {}, website } = profile + + let nameStart = '' + let nameEnd = '' + + if (name) { + const names = name.split(' ') + + if (names.length === 1) { + nameStart = names[0] + nameEnd = '' + } else { + nameStart = names[0] + nameEnd = names.slice(1, names.length).join(' ') + } + } + + const info = [email, phone, location.address, website] + .filter(Boolean) + .join(' | ') + + const sectionHeader = stripIndent` + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % Profile + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + ` + + if (!name) { + return stripIndent` + ${sectionHeader} + \\centering{ + \\color{headings} + \\fontspec[Path = fonts/raleway/]{Raleway-Medium} + \\fontsize{11pt}{14pt} + \\selectfont ${info} + } + ` + } + + return stripIndent` + ${sectionHeader} + \\namesection{${nameStart}}{${nameEnd}}{${info}} + ` + }, + + educationSection(education, heading) { + if (!education) { + return '' + } + + return source` + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % Education + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\section{${heading || 'Education'}} + \\raggedright + ${education.map((school) => { + const { + institution, + location, + studyType, + area, + score, + startDate, + endDate + } = school + + let line1 = '' + let line2 = '' + + if (institution) { + line1 += `\\runsubsection{${institution}}` + } + + if (studyType && area) { + line1 += `\\descript{| ${studyType} ${area}}` + } else if (studyType) { + line1 += `\\descript{| ${studyType}}` + } else if (area) { + line1 += `\\descript{| ${area}}` + } + + let dateRange + + if (startDate && endDate) { + dateRange = `${startDate} - ${endDate}` + } else if (startDate) { + dateRange = `${startDate} - Present` + } else { + dateRange = endDate + } + + const locationAndDate = [location, dateRange] + .filter(Boolean) + .join(' | ') + + if (locationAndDate) { + line1 += `\\hfill \\location{${locationAndDate}}` + } + + if (line1) { + line1 += '\\\\' + } + + if (score) { + line2 += `GPA: ${score}\\\\` + } + + return ` + ${line1} + ${line2} + \\sectionsep + ` + })} + ` + }, + + workSection(work, heading) { + if (!work) { + return '' + } + + return source` + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % Experience + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\section{${heading || 'Experience'}} + ${work.map((job) => { + const { + name, + position, + location, + startDate, + endDate = '', + highlights + } = job + + let line1 = '' + let dateRange = '' + let highlightLines = '' + + if (name) { + line1 += `\\runsubsection{${name}}` + } + + if (position) { + line1 += `\\descript{| ${position}}` + } + + if (startDate && endDate) { + dateRange = `${startDate} – ${endDate}` + } else if (startDate) { + dateRange = `${startDate} – Present` + } else { + dateRange = endDate + } + + if (location && dateRange) { + line1 += `\\hfill \\location{${location} | ${dateRange}}` + } else if (location) { + line1 += `\\hfill \\location{${location}}` + } else if (dateRange) { + line1 += `\\hfill \\location{${dateRange}}` + } + + if (highlights) { + highlightLines = source` + \\begin{tightemize} + ${highlights.map((highlight) => `\\item ${highlight}`)} + \\end{tightemize} + ` + } + + return stripIndent` + ${line1} + ${highlightLines} + \\sectionsep + ` + })} + ` + }, + + skillsSection(skills, heading) { + if (!skills) { + return '' + } + + return source` + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % Skills + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\section{${heading || 'Skills'}} + \\raggedright + \\begin{tabular}{ l l } + ${skills.map((skill) => { + const { name = '', keywords = [] } = skill + return `\\descript{${name}} & {\\location{${keywords.join(', ')}}} \\\\` + })} + \\end{tabular} + \\sectionsep + ` + }, + + projectsSection(projects, heading) { + if (!projects) { + return '' + } + + return source` + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % Projects + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\section{${heading || 'Projects'}} + \\raggedright + ${projects.map((project) => { + const { name, description, keywords, url } = project + + let line1 = '' + let line2 = '' + let line3 = '' + + if (name) { + line1 += `\\runsubsection{\\large{${name}}}` + } + + if (keywords) { + line2 += `\\descript{| ${keywords.join(', ')}}` + } + + if (url) { + line2 += `\\hfill \\location{${url}}` + } + + if (line2) { + line2 += '\\\\' + } + + if (description) { + line3 += `${description}\\\\` + } + + return ` + ${line1} + ${line2} + ${line3} + \\sectionsep + ` + })} + ` + }, + + awardsSection(awards, heading) { + if (!awards) { + return '' + } + + return source` + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % Awards + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \\section{${heading || 'Awards'}} + ${awards.map((award) => { + const { title, summary, date, awarder } = award + const info = [awarder, date].filter(Boolean).join(' | ') + + return stripIndent` + \\runsubsection{\\large{${title || ''}}} \\descript{${info}} \\\\ + ${summary ? `${summary}\\\\` : ''} + \\sectionsep + ` + })} + ` + }, + + resumeHeader() { + return stripIndent` + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % This is a modified ONE COLUMN version of + % the following template: + % + % Deedy - One Page Two Column Resume + % LaTeX Template + % Version 1.1 (30/4/2014) + % + % Original author: + % Debarghya Das (http://debarghyadas.com) + % + % Original repository: + % https://github.com/deedydas/Deedy-Resume + % + % IMPORTANT: THIS TEMPLATE NEEDS TO BE COMPILED WITH XeLaTeX + % + % This template uses several fonts not included with Windows/Linux by + % default. If you get compilation errors saying a font is missing, find the line + % on which the font is used and either change it to a font included with your + % operating system or comment the line out to use the default font. + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % TODO: + % 1. Integrate biber/bibtex for article citation under publications. + % 2. Figure out a smoother way for the document to flow onto the next page. + % 3. Add styling information for a "Projects/Hacks" section. + % 4. Add location/address information + % 5. Merge OpenFont and MacFonts as a single sty with options. + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % CHANGELOG: + % v1.1: + % 1. Fixed several compilation bugs with \\renewcommand + % 2. Got Open-source fonts (Windows/Linux support) + % 3. Added Last Updated + % 4. Move Title styling into .sty + % 5. Commented .sty file. + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % Known Issues: + % 1. Overflows onto second page if any column's contents are more than the + % vertical limit + % 2. Hacky space on the first bullet point on the second column. + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + ` + } +} + +function template4(values: FormValues) { + const { headings = {} } = values + + return stripIndent` + ${generator.resumeHeader()} + \\documentclass[]{deedy-resume-openfont} + + \\begin{document} + ${values.sections + .map((section) => { + switch (section) { + case 'profile': + return generator.profileSection(values.basics) + + case 'education': + return generator.educationSection( + values.education, + headings.education + ) + + case 'work': + return generator.workSection(values.work, headings.work) + + case 'skills': + return generator.skillsSection(values.skills, headings.skills) + + case 'projects': + return generator.projectsSection(values.projects, headings.projects) + + case 'awards': + return generator.awardsSection(values.awards, headings.awards) + + default: + return '' + } + }) + .join('\n')} + ${WHITESPACE} + \\end{document} + ` +} + +export default template4 diff --git a/src/lib/templates/template5.ts b/src/lib/templates/template5.ts index 721d00c5..b16ca3e9 100755 --- a/src/lib/templates/template5.ts +++ b/src/lib/templates/template5.ts @@ -1,277 +1,277 @@ -import { stripIndent, source } from 'common-tags' -import { WHITESPACE } from './constants' -import type { FormValues, Generator } from '../../types' - -const generator: Omit = { - profileSection(basics) { - if (!basics) { - return '' - } - - const { name, email, phone, location = {}, website } = basics - const info = [email, phone, location.address, website] - .filter(Boolean) - .join(' | ') - - return stripIndent` - \\name{{\\LARGE ${name || ''}}} - \\address{${info}} - ` - }, - - educationSection(education, heading) { - if (!education) { - return '' - } - - const lastSchoolIndex = education.length - 1 - - return source` - \\section{${heading || 'EDUCATION'}} - ${education.map((school, i) => { - const { - institution, - location, - studyType = '', - area = '', - score, - startDate, - endDate = '' - } = school - - let schoolLine = '' - let degreeLine = '' - - if (institution) { - schoolLine += `\\textbf{${institution}}, ` - } - - if (studyType && area) { - degreeLine = `${studyType} in ${area}` - } else if (studyType || area) { - degreeLine = studyType || area - } - - if (degreeLine) { - schoolLine += `{\\sl ${degreeLine}} ` - } - - if (score) { - schoolLine += `GPA: ${score}` - } - - let dateRange = '' - - if (startDate && endDate) { - dateRange = `${startDate} | ${endDate}` - } else if (startDate) { - dateRange = `${startDate} | Present` - } else { - dateRange = endDate - } - - if (dateRange) { - schoolLine += `\\hfill ${dateRange}` - } - - if (schoolLine) { - schoolLine += '\\\\' - } - - if (location) { - schoolLine += `${location}` - } - - if (i !== lastSchoolIndex) { - schoolLine += '\\\\\\\\' - } - - return schoolLine - })} - ` - }, - - workSection(work, heading) { - if (!work) { - return '' - } - - return source` - \\section{${heading || 'EXPERIENCE'}} - ${work.map((job) => { - const { - name, - position, - location, - startDate, - endDate = '', - highlights - } = job - - let jobLine = '' - let dateRange = '' - - if (name) { - jobLine += `\\textbf{${name}}, ` - } - - if (position) { - jobLine += `{\\sl ${position}}` - } - - if (startDate && endDate) { - dateRange = `${startDate} | ${endDate}` - } else if (startDate) { - dateRange = `${startDate} | Present` - } else { - dateRange = endDate - } - - if (dateRange) { - jobLine += `\\hfill ${dateRange}` - } - - if (jobLine) { - jobLine += '\\\\' - } - - if (location) { - jobLine += `${location}\\\\` - } - - if (highlights) { - jobLine += source` - \\begin{itemize} \\itemsep 3pt - ${highlights.map((highlight) => `\\item ${highlight}`)} - \\end{itemize} - ` - } - - return jobLine - })} - ` - }, - - skillsSection(skills, heading) { - if (!skills) { - return '' - } - - return source` - \\section{${heading || 'SKILLS'}} - \\begin{tabular}{@{}ll} - ${skills.map((skill) => { - const { name, keywords = [] } = skill - return `\\textbf{${name || ''}}: & ${keywords.join(', ') || ''}\\\\` - })} - \\end{tabular} - ` - }, - - projectsSection(projects, heading) { - if (!projects) { - return '' - } - - return source` - \\section{${heading || 'PROJECTS'}} - ${projects.map((project) => { - const { name, description, keywords = [], url } = project - - let projectLine = '' - - if (name) { - projectLine += `\\textbf{${name}}` - } - - if (keywords) { - projectLine += `, {\\sl ${keywords.join(', ')}}` - } - - if (description) { - projectLine += projectLine ? `\\\\ ${description}` : description - } - - if (url) { - projectLine += projectLine ? `\\\\ ${url}` : url - } - - if (projectLine) { - projectLine += '\\\\\\\\' - } - - return projectLine - })} - ` - }, - - awardsSection(awards, heading) { - if (!awards) { - return '' - } - - return source` - \\section{${heading || 'AWARDS'}} - ${awards.map((award) => { - const { title, summary, date, awarder } = award - - return stripIndent` - \\textbf{${title || ''}}, {\\sl ${awarder || ''}} \\hfill ${ - date || '' - } \\\\ - ${summary || ''} \\\\\\\\ - ` - })} - ` - } -} - -function template5(values: FormValues) { - const { headings = {} } = values - - return stripIndent` - \\documentclass[line,margin]{res} - \\usepackage[none]{hyphenat} - \\usepackage{textcomp} - \\usepackage[utf8]{inputenc} - \\usepackage[T1]{fontenc} - \\begin{document} - ${generator.profileSection(values.basics)} - \\begin{resume} - \\vspace{-5mm} - ${values.sections - .map((section) => { - switch (section) { - case 'education': - return generator.educationSection( - values.education, - headings.education - ) - - case 'work': - return generator.workSection(values.work, headings.work) - - case 'skills': - return generator.skillsSection(values.skills, headings.skills) - - case 'projects': - return generator.projectsSection( - values.projects, - headings.projects - ) - - case 'awards': - return generator.awardsSection(values.awards, headings.awards) - - default: - return '' - } - }) - .join('\n')} - ${WHITESPACE} - \\end{resume} - \\end{document} - ` -} - -export default template5 +import { stripIndent, source } from 'common-tags' +import { WHITESPACE } from './constants' +import type { FormValues, Generator } from '../../types' + +const generator: Omit = { + profileSection(basics) { + if (!basics) { + return '' + } + + const { name, email, phone, location = {}, website } = basics + const info = [email, phone, location.address, website] + .filter(Boolean) + .join(' | ') + + return stripIndent` + \\name{{\\LARGE ${name || ''}}} + \\address{${info}} + ` + }, + + educationSection(education, heading) { + if (!education) { + return '' + } + + const lastSchoolIndex = education.length - 1 + + return source` + \\section{${heading || 'EDUCATION'}} + ${education.map((school, i) => { + const { + institution, + location, + studyType = '', + area = '', + score, + startDate, + endDate = '' + } = school + + let schoolLine = '' + let degreeLine = '' + + if (institution) { + schoolLine += `\\textbf{${institution}}, ` + } + + if (studyType && area) { + degreeLine = `${studyType} in ${area}` + } else if (studyType || area) { + degreeLine = studyType || area + } + + if (degreeLine) { + schoolLine += `{\\sl ${degreeLine}} ` + } + + if (score) { + schoolLine += `GPA: ${score}` + } + + let dateRange = '' + + if (startDate && endDate) { + dateRange = `${startDate} | ${endDate}` + } else if (startDate) { + dateRange = `${startDate} | Present` + } else { + dateRange = endDate + } + + if (dateRange) { + schoolLine += `\\hfill ${dateRange}` + } + + if (schoolLine) { + schoolLine += '\\\\' + } + + if (location) { + schoolLine += `${location}` + } + + if (i !== lastSchoolIndex) { + schoolLine += '\\\\\\\\' + } + + return schoolLine + })} + ` + }, + + workSection(work, heading) { + if (!work) { + return '' + } + + return source` + \\section{${heading || 'EXPERIENCE'}} + ${work.map((job) => { + const { + name, + position, + location, + startDate, + endDate = '', + highlights + } = job + + let jobLine = '' + let dateRange = '' + + if (name) { + jobLine += `\\textbf{${name}}, ` + } + + if (position) { + jobLine += `{\\sl ${position}}` + } + + if (startDate && endDate) { + dateRange = `${startDate} | ${endDate}` + } else if (startDate) { + dateRange = `${startDate} | Present` + } else { + dateRange = endDate + } + + if (dateRange) { + jobLine += `\\hfill ${dateRange}` + } + + if (jobLine) { + jobLine += '\\\\' + } + + if (location) { + jobLine += `${location}\\\\` + } + + if (highlights) { + jobLine += source` + \\begin{itemize} \\itemsep 3pt + ${highlights.map((highlight) => `\\item ${highlight}`)} + \\end{itemize} + ` + } + + return jobLine + })} + ` + }, + + skillsSection(skills, heading) { + if (!skills) { + return '' + } + + return source` + \\section{${heading || 'SKILLS'}} + \\begin{tabular}{@{}ll} + ${skills.map((skill) => { + const { name, keywords = [] } = skill + return `\\textbf{${name || ''}}: & ${keywords.join(', ') || ''}\\\\` + })} + \\end{tabular} + ` + }, + + projectsSection(projects, heading) { + if (!projects) { + return '' + } + + return source` + \\section{${heading || 'PROJECTS'}} + ${projects.map((project) => { + const { name, description, keywords = [], url } = project + + let projectLine = '' + + if (name) { + projectLine += `\\textbf{${name}}` + } + + if (keywords) { + projectLine += `, {\\sl ${keywords.join(', ')}}` + } + + if (description) { + projectLine += projectLine ? `\\\\ ${description}` : description + } + + if (url) { + projectLine += projectLine ? `\\\\ ${url}` : url + } + + if (projectLine) { + projectLine += '\\\\\\\\' + } + + return projectLine + })} + ` + }, + + awardsSection(awards, heading) { + if (!awards) { + return '' + } + + return source` + \\section{${heading || 'AWARDS'}} + ${awards.map((award) => { + const { title, summary, date, awarder } = award + + return stripIndent` + \\textbf{${title || ''}}, {\\sl ${awarder || ''}} \\hfill ${ + date || '' + } \\\\ + ${summary || ''} \\\\\\\\ + ` + })} + ` + } +} + +function template5(values: FormValues) { + const { headings = {} } = values + + return stripIndent` + \\documentclass[line,margin]{res} + \\usepackage[none]{hyphenat} + \\usepackage{textcomp} + \\usepackage[utf8]{inputenc} + \\usepackage[T1]{fontenc} + \\begin{document} + ${generator.profileSection(values.basics)} + \\begin{resume} + \\vspace{-5mm} + ${values.sections + .map((section) => { + switch (section) { + case 'education': + return generator.educationSection( + values.education, + headings.education + ) + + case 'work': + return generator.workSection(values.work, headings.work) + + case 'skills': + return generator.skillsSection(values.skills, headings.skills) + + case 'projects': + return generator.projectsSection( + values.projects, + headings.projects + ) + + case 'awards': + return generator.awardsSection(values.awards, headings.awards) + + default: + return '' + } + }) + .join('\n')} + ${WHITESPACE} + \\end{resume} + \\end{document} + ` +} + +export default template5 diff --git a/src/lib/templates/template6.ts b/src/lib/templates/template6.ts index 22c24b28..ec6ef72b 100644 --- a/src/lib/templates/template6.ts +++ b/src/lib/templates/template6.ts @@ -1,268 +1,268 @@ -import { stripIndent, source } from 'common-tags' -import { WHITESPACE } from './constants' -import type { FormValues, Generator } from '../../types' - -const generator: Omit = { - profileSection(basics) { - if (!basics) { - return '' - } - - const { name = '', email, phone, location = {}, website } = basics - const info = [email, phone, location.address, website].filter(Boolean) - - return stripIndent` - \\begin{center} - % Personal - % ----------------------------------------------------- - {\\fontsize{\\sizeone}{\\sizeone}\\fontspec[Path = fonts/,LetterSpace=15]{Montserrat-Regular} ${name.toUpperCase()}} - ${name && info.length > 1 ? '\\\\' : ''} - \\vspace{2mm} - {\\fontsize{1em}{1em}\\fontspec[Path = fonts/]{Montserrat-Light} ${info.join( - ' -- ' - )}} - \\end{center} - ` - }, - - educationSection(education, heading) { - if (!education) { - return '' - } - - return source` - % Chapter: Education - % ------------------ - - \\chap{${heading ? heading.toUpperCase() : 'EDUCATION'}}{ - - ${education.map((school) => { - const { - institution = '', - location = '', - area = '', - studyType = '', - score = '', - startDate = '', - endDate = '' - } = school - - const degreeLine = [studyType, area].filter(Boolean).join(' ') - let dateRange = '' - - if (startDate && endDate) { - dateRange = `${startDate} – ${endDate}` - } else if (startDate) { - dateRange = `${startDate} – Present` - } else { - dateRange = endDate - } - - return stripIndent` - \\school - {${institution}} - {${dateRange}} - {${degreeLine}} - {${location}} - {${ - score - ? `\\begin{newitemize} - \\item ${score ? `GPA: ${score}` : ''} - \\end{newitemize}` - : '' - } - } - ` - })} - } - ` - }, - - workSection(work, heading) { - if (!work) { - return '' - } - - return source` - % Chapter: Work Experience - % ------------------------ - \\chap{${heading ? heading.toUpperCase() : 'EXPERIENCE'}}{ - - ${work.map((job) => { - const { - name = '', - position = '', - location = '', - startDate = '', - endDate = '', - highlights = [] - } = job - - let dateRange = '' - let dutyLines = '' - - if (startDate && endDate) { - dateRange = `${startDate} – ${endDate}` - } else if (startDate) { - dateRange = `${startDate} – Present` - } else { - dateRange = endDate - } - - if (highlights) { - dutyLines = source` - \\begin{newitemize} - ${highlights.map((duty) => `\\item {${duty}}`)} - \\end{newitemize} - ` - } - - return stripIndent` - \\job - {${name}} - {${dateRange}} - {${position}} - {${location}} - {${dutyLines}} - ` - })} - } - ` - }, - - skillsSection(skills, heading) { - if (!skills) { - return '' - } - - return source` - % Chapter: Skills - % ------------------------ - - \\chap{${heading ? heading.toUpperCase() : 'SKILLS'}}{ - \\begin{newitemize} - ${skills.map((skill) => { - const { name = '', keywords = [] } = skill - - let item = '' - - if (name) { - item += `${name}: ` - } - - if (keywords.length > 0) { - item += keywords.join(', ') - } - - return `\\item ${item}` - })} - \\end{newitemize} - } - ` - }, - - projectsSection(projects, heading) { - if (!projects) { - return '' - } - - return source` - % Chapter: Projects - % ------------------------ - - \\chap{${heading ? heading.toUpperCase() : 'PROJECTS'}}{ - - ${projects.map((project) => { - const { - name = '', - description = '', - keywords = [], - url = '' - } = project - - const descriptionWithNewline = description - ? `${description}\\\\` - : description - - return stripIndent` - \\project - {${name}} - {${keywords.join(', ')}} - {${url}} - {${descriptionWithNewline}} - ` - })} - } - ` - }, - - awardsSection(awards, heading) { - if (!awards) { - return '' - } - - return source` - % Chapter: Awards - % ------------------------ - - \\chap{${heading ? heading.toUpperCase() : 'AWARDS'}}{ - - ${awards.map((award) => { - const { title = '', summary = '', awarder = '', date = '' } = award - - return stripIndent` - \\award - {${title}} - {${date}} - {${summary}} - {${awarder}} - ` - })} - } - ` - } -} - -function template6(values: FormValues) { - const { headings = {} } = values - - return stripIndent` - \\documentclass[10pt]{article} - \\usepackage[english]{babel} - \\input{minimal-resume-config} - \\begin{document} - ${values.sections - .map((section) => { - switch (section) { - case 'profile': - return generator.profileSection(values.basics) - - case 'education': - return generator.educationSection( - values.education, - headings.education - ) - - case 'work': - return generator.workSection(values.work, headings.work) - - case 'skills': - return generator.skillsSection(values.skills, headings.skills) - - case 'projects': - return generator.projectsSection(values.projects, headings.projects) - - case 'awards': - return generator.awardsSection(values.awards, headings.awards) - - default: - return '' - } - }) - .join('\n')} - ${WHITESPACE} - \\end{document} - ` -} - -export default template6 +import { stripIndent, source } from 'common-tags' +import { WHITESPACE } from './constants' +import type { FormValues, Generator } from '../../types' + +const generator: Omit = { + profileSection(basics) { + if (!basics) { + return '' + } + + const { name = '', email, phone, location = {}, website } = basics + const info = [email, phone, location.address, website].filter(Boolean) + + return stripIndent` + \\begin{center} + % Personal + % ----------------------------------------------------- + {\\fontsize{\\sizeone}{\\sizeone}\\fontspec[Path = fonts/,LetterSpace=15]{Montserrat-Regular} ${name.toUpperCase()}} + ${name && info.length > 1 ? '\\\\' : ''} + \\vspace{2mm} + {\\fontsize{1em}{1em}\\fontspec[Path = fonts/]{Montserrat-Light} ${info.join( + ' -- ' + )}} + \\end{center} + ` + }, + + educationSection(education, heading) { + if (!education) { + return '' + } + + return source` + % Chapter: Education + % ------------------ + + \\chap{${heading ? heading.toUpperCase() : 'EDUCATION'}}{ + + ${education.map((school) => { + const { + institution = '', + location = '', + area = '', + studyType = '', + score = '', + startDate = '', + endDate = '' + } = school + + const degreeLine = [studyType, area].filter(Boolean).join(' ') + let dateRange = '' + + if (startDate && endDate) { + dateRange = `${startDate} – ${endDate}` + } else if (startDate) { + dateRange = `${startDate} – Present` + } else { + dateRange = endDate + } + + return stripIndent` + \\school + {${institution}} + {${dateRange}} + {${degreeLine}} + {${location}} + {${ + score + ? `\\begin{newitemize} + \\item ${score ? `GPA: ${score}` : ''} + \\end{newitemize}` + : '' + } + } + ` + })} + } + ` + }, + + workSection(work, heading) { + if (!work) { + return '' + } + + return source` + % Chapter: Work Experience + % ------------------------ + \\chap{${heading ? heading.toUpperCase() : 'EXPERIENCE'}}{ + + ${work.map((job) => { + const { + name = '', + position = '', + location = '', + startDate = '', + endDate = '', + highlights = [] + } = job + + let dateRange = '' + let dutyLines = '' + + if (startDate && endDate) { + dateRange = `${startDate} – ${endDate}` + } else if (startDate) { + dateRange = `${startDate} – Present` + } else { + dateRange = endDate + } + + if (highlights) { + dutyLines = source` + \\begin{newitemize} + ${highlights.map((duty) => `\\item {${duty}}`)} + \\end{newitemize} + ` + } + + return stripIndent` + \\job + {${name}} + {${dateRange}} + {${position}} + {${location}} + {${dutyLines}} + ` + })} + } + ` + }, + + skillsSection(skills, heading) { + if (!skills) { + return '' + } + + return source` + % Chapter: Skills + % ------------------------ + + \\chap{${heading ? heading.toUpperCase() : 'SKILLS'}}{ + \\begin{newitemize} + ${skills.map((skill) => { + const { name = '', keywords = [] } = skill + + let item = '' + + if (name) { + item += `${name}: ` + } + + if (keywords.length > 0) { + item += keywords.join(', ') + } + + return `\\item ${item}` + })} + \\end{newitemize} + } + ` + }, + + projectsSection(projects, heading) { + if (!projects) { + return '' + } + + return source` + % Chapter: Projects + % ------------------------ + + \\chap{${heading ? heading.toUpperCase() : 'PROJECTS'}}{ + + ${projects.map((project) => { + const { + name = '', + description = '', + keywords = [], + url = '' + } = project + + const descriptionWithNewline = description + ? `${description}\\\\` + : description + + return stripIndent` + \\project + {${name}} + {${keywords.join(', ')}} + {${url}} + {${descriptionWithNewline}} + ` + })} + } + ` + }, + + awardsSection(awards, heading) { + if (!awards) { + return '' + } + + return source` + % Chapter: Awards + % ------------------------ + + \\chap{${heading ? heading.toUpperCase() : 'AWARDS'}}{ + + ${awards.map((award) => { + const { title = '', summary = '', awarder = '', date = '' } = award + + return stripIndent` + \\award + {${title}} + {${date}} + {${summary}} + {${awarder}} + ` + })} + } + ` + } +} + +function template6(values: FormValues) { + const { headings = {} } = values + + return stripIndent` + \\documentclass[10pt]{article} + \\usepackage[english]{babel} + \\input{minimal-resume-config} + \\begin{document} + ${values.sections + .map((section) => { + switch (section) { + case 'profile': + return generator.profileSection(values.basics) + + case 'education': + return generator.educationSection( + values.education, + headings.education + ) + + case 'work': + return generator.workSection(values.work, headings.work) + + case 'skills': + return generator.skillsSection(values.skills, headings.skills) + + case 'projects': + return generator.projectsSection(values.projects, headings.projects) + + case 'awards': + return generator.awardsSection(values.awards, headings.awards) + + default: + return '' + } + }) + .join('\n')} + ${WHITESPACE} + \\end{document} + ` +} + +export default template6 diff --git a/src/lib/templates/template7.ts b/src/lib/templates/template7.ts index d38409a1..98442a55 100755 --- a/src/lib/templates/template7.ts +++ b/src/lib/templates/template7.ts @@ -1,268 +1,268 @@ -import { stripIndent, source } from 'common-tags' -import { WHITESPACE } from './constants' -import type { FormValues, Generator } from '../../types' - -const generator: Generator = { - profileSection(basics = {}) { - const { name, email, phone, location = {}, website } = basics - - return stripIndent` - % Profile - \\name{${name || ''}}{} - \\address{${location.address || ''}} - ${phone ? `\\phone[mobile]{${phone}}` : ''} - ${email ? `\\email{${email || ''}}` : ''} - ${website ? `\\homepage{${website || ''}}` : ''} - ` - }, - - educationSection(education, heading) { - if (!education) { - return '' - } - - return source` - \\section{${heading || 'Education'}} - ${education.map((school) => { - const { - institution, - studyType = '', - area = '', - score, - location, - startDate, - endDate = '' - } = school - - let degreeLine = '' - - if (studyType && area) { - degreeLine = `${studyType} in ${area}` - } else if (studyType || area) { - degreeLine = studyType || area - } - - let dateRange = '' - - if (startDate && endDate) { - dateRange = `${startDate} | ${endDate}` - } else if (startDate) { - dateRange = `${startDate} | Present` - } else { - dateRange = endDate - } - - return stripIndent` - \\cventry - {${dateRange || ''}} - {${degreeLine}} - {${institution || ''}} - {${score ? `GPA: ${score}` : ''}} - {\\textit{${location || ''}}} - {} - ` - })} - ` - }, - - workSection(work, heading) { - if (!work) { - return '' - } - - return source` - \\section{${heading || 'Experience'}} - ${work.map((job) => { - const { - name, - position, - location, - startDate, - endDate = '', - highlights - } = job - - let dateRange = '' - let highlightLines = '' - - if (startDate && endDate) { - dateRange = `${startDate} -- ${endDate}` - } else if (startDate) { - dateRange = `${startDate} -- Present` - } else { - dateRange = endDate - } - - if (highlights) { - highlightLines = source` - \\begin{itemize}% - ${highlights.map((highlight) => `\\item ${highlight}`)} - \\end{itemize} - ` - } - - return stripIndent` - \\cventry - {${dateRange || ''}} - {${position || ''}} - {${name || ''}} - {${location || ''}} - {} - {${highlightLines}} - ` - })} - ` - }, - - skillsSection(skills, heading) { - if (!skills) { - return '' - } - - return source` - \\section{${heading || 'Skills'}} - ${skills.map((skill) => { - const { name, keywords = [] } = skill - return `\\cvitem{${name || ''}}{${keywords.join(', ')}}` - })} - ` - }, - - projectsSection(projects, heading) { - if (!projects) { - return '' - } - - return source` - \\section{${heading || 'Projects'}} - ${projects.map((project) => { - const { name, description, keywords = [], url } = project - - let detailsLine = '' - - if (description) { - detailsLine += `${description}\\\\` - } - - if (url) { - detailsLine += url - } - - return stripIndent` - \\cventry - {} - {${name || ''}} - {} - {\\textit{${keywords.join(', ')}}} - {} - {${detailsLine}} - \\vspace{1mm} - ` - })} - ` - }, - - awardsSection(awards, heading) { - if (!awards) { - return '' - } - - return source` - \\section{${heading || 'Awards'}} - ${awards.map((award) => { - const { title, summary, date, awarder } = award - - let detailsLine = '' - - if (summary) { - detailsLine += `${summary}\\\\` - } - - if (awarder) { - detailsLine += awarder - } - - return stripIndent` - \\cventry - {} - {${title || ''}} - {} - {\\textit{${date || ''}}} - {} - {${detailsLine}} - \\vspace{1mm} - ` - })} - ` - }, - - resumeHeader() { - return stripIndent` - %% start of file 'template.tex'. - %% Copyright 2006-2013 Xavier Danaux (xdanaux@gmail.com). - % - % This work may be distributed and/or modified under the - % conditions of the LaTeX Project Public License version 1.3c, - % available at http://www.latex-project.org/lppl/. - - - \\documentclass[letterpaper]{moderncv} % possible options include font size ('10pt', '11pt' and '12pt'), paper size ('a4paper', 'letterpaper', 'a5paper', 'legalpaper', 'executivepaper' and 'landscape') and font family ('sans' and 'roman') - \\usepackage{textcomp} - % moderncv themes - \\moderncvstyle{classic} % style options are 'casual' (default), 'classic', 'oldstyle' and 'banking' - \\moderncvcolor{blue} % color options 'blue' (default), 'orange', 'green', 'red', 'purple', 'grey' and 'black' - %\\renewcommand{\\familydefault}{\\sfdefault} % to set the default font; use '\\sfdefault' for the default sans serif font, '\\rmdefault' for the default roman one, or any tex font name - %\\nopagenumbers{} % uncomment to suppress automatic page numbering for CVs longer than one page - - % character encoding - \\usepackage[utf8]{inputenc} % if you are not using xelatex ou lualatex, replace by the encoding you are using - %\\usepackage{CJKutf8} % if you need to use CJK to typeset your resume in Chinese, Japanese or Korean - - % adjust the page margins - \\usepackage[scale=0.75]{geometry} - %\\setlength{\\hintscolumnwidth}{3cm} % if you want to change the width of the column with the dates - %\\setlength{\\makecvtitlenamewidth}{10cm} % for the 'classic' style, if you want to force the width allocated to your name and avoid line breaks. be careful though, the length is normally calculated to avoid any overlap with your personal info; use this at your own typographical risks... - ` - } -} - -function template7(values: FormValues) { - const { headings = {} } = values - - return stripIndent` - ${generator.resumeHeader()} - ${generator.profileSection(values.basics)} - \\begin{document} - ${values.basics ? '\\makecvtitle' : ''} - ${values.sections - .map((section) => { - switch (section) { - case 'education': - return generator.educationSection( - values.education, - headings.education - ) - - case 'work': - return generator.workSection(values.work, headings.work) - - case 'skills': - return generator.skillsSection(values.skills, headings.skills) - - case 'projects': - return generator.projectsSection(values.projects, headings.projects) - - case 'awards': - return generator.awardsSection(values.awards, headings.awards) - - default: - return '' - } - }) - .join('\n')} - ${WHITESPACE} - \\end{document} - ` -} - -export default template7 +import { stripIndent, source } from 'common-tags' +import { WHITESPACE } from './constants' +import type { FormValues, Generator } from '../../types' + +const generator: Generator = { + profileSection(basics = {}) { + const { name, email, phone, location = {}, website } = basics + + return stripIndent` + % Profile + \\name{${name || ''}}{} + \\address{${location.address || ''}} + ${phone ? `\\phone[mobile]{${phone}}` : ''} + ${email ? `\\email{${email || ''}}` : ''} + ${website ? `\\homepage{${website || ''}}` : ''} + ` + }, + + educationSection(education, heading) { + if (!education) { + return '' + } + + return source` + \\section{${heading || 'Education'}} + ${education.map((school) => { + const { + institution, + studyType = '', + area = '', + score, + location, + startDate, + endDate = '' + } = school + + let degreeLine = '' + + if (studyType && area) { + degreeLine = `${studyType} in ${area}` + } else if (studyType || area) { + degreeLine = studyType || area + } + + let dateRange = '' + + if (startDate && endDate) { + dateRange = `${startDate} | ${endDate}` + } else if (startDate) { + dateRange = `${startDate} | Present` + } else { + dateRange = endDate + } + + return stripIndent` + \\cventry + {${dateRange || ''}} + {${degreeLine}} + {${institution || ''}} + {${score ? `GPA: ${score}` : ''}} + {\\textit{${location || ''}}} + {} + ` + })} + ` + }, + + workSection(work, heading) { + if (!work) { + return '' + } + + return source` + \\section{${heading || 'Experience'}} + ${work.map((job) => { + const { + name, + position, + location, + startDate, + endDate = '', + highlights + } = job + + let dateRange = '' + let highlightLines = '' + + if (startDate && endDate) { + dateRange = `${startDate} -- ${endDate}` + } else if (startDate) { + dateRange = `${startDate} -- Present` + } else { + dateRange = endDate + } + + if (highlights) { + highlightLines = source` + \\begin{itemize}% + ${highlights.map((highlight) => `\\item ${highlight}`)} + \\end{itemize} + ` + } + + return stripIndent` + \\cventry + {${dateRange || ''}} + {${position || ''}} + {${name || ''}} + {${location || ''}} + {} + {${highlightLines}} + ` + })} + ` + }, + + skillsSection(skills, heading) { + if (!skills) { + return '' + } + + return source` + \\section{${heading || 'Skills'}} + ${skills.map((skill) => { + const { name, keywords = [] } = skill + return `\\cvitem{${name || ''}}{${keywords.join(', ')}}` + })} + ` + }, + + projectsSection(projects, heading) { + if (!projects) { + return '' + } + + return source` + \\section{${heading || 'Projects'}} + ${projects.map((project) => { + const { name, description, keywords = [], url } = project + + let detailsLine = '' + + if (description) { + detailsLine += `${description}\\\\` + } + + if (url) { + detailsLine += url + } + + return stripIndent` + \\cventry + {} + {${name || ''}} + {} + {\\textit{${keywords.join(', ')}}} + {} + {${detailsLine}} + \\vspace{1mm} + ` + })} + ` + }, + + awardsSection(awards, heading) { + if (!awards) { + return '' + } + + return source` + \\section{${heading || 'Awards'}} + ${awards.map((award) => { + const { title, summary, date, awarder } = award + + let detailsLine = '' + + if (summary) { + detailsLine += `${summary}\\\\` + } + + if (awarder) { + detailsLine += awarder + } + + return stripIndent` + \\cventry + {} + {${title || ''}} + {} + {\\textit{${date || ''}}} + {} + {${detailsLine}} + \\vspace{1mm} + ` + })} + ` + }, + + resumeHeader() { + return stripIndent` + %% start of file 'template.tex'. + %% Copyright 2006-2013 Xavier Danaux (xdanaux@gmail.com). + % + % This work may be distributed and/or modified under the + % conditions of the LaTeX Project Public License version 1.3c, + % available at http://www.latex-project.org/lppl/. + + + \\documentclass[letterpaper]{moderncv} % possible options include font size ('10pt', '11pt' and '12pt'), paper size ('a4paper', 'letterpaper', 'a5paper', 'legalpaper', 'executivepaper' and 'landscape') and font family ('sans' and 'roman') + \\usepackage{textcomp} + % moderncv themes + \\moderncvstyle{classic} % style options are 'casual' (default), 'classic', 'oldstyle' and 'banking' + \\moderncvcolor{blue} % color options 'blue' (default), 'orange', 'green', 'red', 'purple', 'grey' and 'black' + %\\renewcommand{\\familydefault}{\\sfdefault} % to set the default font; use '\\sfdefault' for the default sans serif font, '\\rmdefault' for the default roman one, or any tex font name + %\\nopagenumbers{} % uncomment to suppress automatic page numbering for CVs longer than one page + + % character encoding + \\usepackage[utf8]{inputenc} % if you are not using xelatex ou lualatex, replace by the encoding you are using + %\\usepackage{CJKutf8} % if you need to use CJK to typeset your resume in Chinese, Japanese or Korean + + % adjust the page margins + \\usepackage[scale=0.75]{geometry} + %\\setlength{\\hintscolumnwidth}{3cm} % if you want to change the width of the column with the dates + %\\setlength{\\makecvtitlenamewidth}{10cm} % for the 'classic' style, if you want to force the width allocated to your name and avoid line breaks. be careful though, the length is normally calculated to avoid any overlap with your personal info; use this at your own typographical risks... + ` + } +} + +function template7(values: FormValues) { + const { headings = {} } = values + + return stripIndent` + ${generator.resumeHeader()} + ${generator.profileSection(values.basics)} + \\begin{document} + ${values.basics ? '\\makecvtitle' : ''} + ${values.sections + .map((section) => { + switch (section) { + case 'education': + return generator.educationSection( + values.education, + headings.education + ) + + case 'work': + return generator.workSection(values.work, headings.work) + + case 'skills': + return generator.skillsSection(values.skills, headings.skills) + + case 'projects': + return generator.projectsSection(values.projects, headings.projects) + + case 'awards': + return generator.awardsSection(values.awards, headings.awards) + + default: + return '' + } + }) + .join('\n')} + ${WHITESPACE} + \\end{document} + ` +} + +export default template7 diff --git a/src/lib/templates/template8.ts b/src/lib/templates/template8.ts index 69c931a4..a551c432 100755 --- a/src/lib/templates/template8.ts +++ b/src/lib/templates/template8.ts @@ -1,313 +1,313 @@ -import { stripIndent, source } from 'common-tags' -import { WHITESPACE } from './constants' -import type { FormValues, Generator } from '../../types' - -const generator: Generator = { - profileSection(basics) { - if (!basics) { - return '' - } - - const { name, email, phone = '', location = {}, website } = basics - - let addressLine = '' - let contactsLine = '' - - if (location.address && phone) { - addressLine = `\\address{${location.address} \\linebreak ${phone}}` - } else if (location.address || phone) { - addressLine = `\\address{${location.address || phone}}` - } - - if (email && website) { - contactsLine = `\\contacts{${email} \\linebreak ${website}}` - } else if (email || website) { - contactsLine = `\\contacts{${email || website}}` - } - - return ` - % Set applicant's personal data for header - \\name{${name || ''}} - ${addressLine} - ${contactsLine} - ` - }, - - educationSection(education, heading) { - if (!education) { - return '' - } - - return source` - \\begin{cvsection}{${heading || 'Education'}} - ${education.map((school) => { - const { - institution, - studyType = '', - area = '', - score, - location, - startDate, - endDate = '' - } = school - - let degreeLine = '' - - if (studyType && area) { - degreeLine = `${studyType} in ${area}.` - } else if (studyType || area) { - degreeLine = (studyType || area) + '.' - } - - let dateRange = '' - - if (startDate && endDate) { - dateRange = `${startDate} | ${endDate}` - } else if (startDate) { - dateRange = `${startDate} | Present` - } else { - dateRange = endDate - } - - if (score) { - degreeLine += ` GPA: ${score}` - } - - return stripIndent` - \\begin{cvsubsection}{${location || ''}}{${institution || ''}}{${ - dateRange || '' - }} - \\begin{itemize} - \\item ${degreeLine} - \\end{itemize} - \\end{cvsubsection} - ` - })} - \\end{cvsection} - ` - }, - - workSection(work, heading) { - if (!work) { - return '' - } - - return source` - \\begin{cvsection}{${heading || 'Experience'}} - ${work.map((job) => { - const { - name, - position, - location, - startDate, - endDate = '', - highlights - } = job - - let dateRange = '' - let highlightLines = '' - - if (startDate && endDate) { - dateRange = `${startDate} -- ${endDate}` - } else if (startDate) { - dateRange = `${startDate} -- Present` - } else { - dateRange = endDate - } - - if (highlights) { - highlightLines = source` - \\begin{itemize}% - ${highlights.map((highlight) => `\\item ${highlight}`)} - \\end{itemize} - ` - } - - return stripIndent` - \\begin{cvsubsection}{${position || ''}}{${name || ''}}{${ - dateRange || '' - }} - ${location || ''} - ${highlightLines || ''} - \\end{cvsubsection} - ` - })} - \\end{cvsection} - ` - }, - - skillsSection(skills, heading) { - if (!skills) { - return '' - } - - return source` - \\begin{cvsection}{${heading || 'Skills'}} - \\begin{cvsubsection}{}{}{} - \\begin{itemize} - ${skills.map((skill) => { - const { name, keywords = [] } = skill - return `\\item ${name ? `${name}: ` : ''} ${keywords.join(', ') || ''}` - })} - \\end{itemize} - \\end{cvsubsection} - \\end{cvsection} - ` - }, - - projectsSection(projects, heading) { - if (!projects) { - return '' - } - - return source` - \\begin{cvsection}{${heading || 'Projects'}} - \\begin{cvsubsection}{}{}{} - \\begin{itemize} - \\setlength\\itemsep{3pt} - ${projects.map((project) => { - const { name, description, keywords = [], url } = project - - let line = '' - - if (name) { - line += `\\textbf{${name}} ` - } - - if (url) { - line += `(${url}) ` - } - - if (description) { - line += ` ${description}` - } - - if (keywords) { - line += ` ${keywords.join(', ')}` - } - - return `\\item ${line}` - })} - \\end{itemize} - \\end{cvsubsection} - \\end{cvsection} - ` - }, - - awardsSection(awards, heading) { - if (!awards) { - return '' - } - - return source` - \\begin{cvsection}{${heading || 'Awards'}} - \\begin{cvsubsection}{}{}{} - \\begin{itemize} - \\setlength\\itemsep{3pt} - ${awards.map((award) => { - const { title, summary, date, awarder } = award - - let line = '' - - if (title) { - line += `\\textbf{${title}} ` - } - - if (awarder) { - line += `(${awarder}) ` - } - - if (summary) { - line += ` ${summary}` - } - - if (date) { - line += ` ${date}` - } - - return `\\item ${line}` - })} - \\end{itemize} - \\end{cvsubsection} - \\end{cvsection} - ` - }, - - resumeHeader() { - return stripIndent` - %% The MIT License (MIT) - %% - %% Copyright (c) 2015 Daniil Belyakov - %% - %% 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. - ` - } -} - -function template8(values: FormValues) { - const { headings = {} } = values - - return stripIndent` - ${generator.resumeHeader()} - % The font could be set to Windows-specific Calibri by using the 'calibri' option - \\documentclass[]{mcdowellcv} - - % For mathematical symbols - \\usepackage{amsmath} - - ${generator.profileSection(values.basics)} - - \\begin{document} - % Print the header - \\makeheader - ${values.sections - .map((section) => { - switch (section) { - case 'education': - return generator.educationSection( - values.education, - headings.education - ) - - case 'work': - return generator.workSection(values.work, headings.work) - - case 'skills': - return generator.skillsSection(values.skills, headings.skills) - - case 'projects': - return generator.projectsSection( - values.projects, - headings.projects - ) - - case 'awards': - return generator.awardsSection(values.awards, headings.awards) - - default: - return '' - } - }) - .join('\n')} - ${WHITESPACE} - \\end{document} - ` -} - -export default template8 +import { stripIndent, source } from 'common-tags' +import { WHITESPACE } from './constants' +import type { FormValues, Generator } from '../../types' + +const generator: Generator = { + profileSection(basics) { + if (!basics) { + return '' + } + + const { name, email, phone = '', location = {}, website } = basics + + let addressLine = '' + let contactsLine = '' + + if (location.address && phone) { + addressLine = `\\address{${location.address} \\linebreak ${phone}}` + } else if (location.address || phone) { + addressLine = `\\address{${location.address || phone}}` + } + + if (email && website) { + contactsLine = `\\contacts{${email} \\linebreak ${website}}` + } else if (email || website) { + contactsLine = `\\contacts{${email || website}}` + } + + return ` + % Set applicant's personal data for header + \\name{${name || ''}} + ${addressLine} + ${contactsLine} + ` + }, + + educationSection(education, heading) { + if (!education) { + return '' + } + + return source` + \\begin{cvsection}{${heading || 'Education'}} + ${education.map((school) => { + const { + institution, + studyType = '', + area = '', + score, + location, + startDate, + endDate = '' + } = school + + let degreeLine = '' + + if (studyType && area) { + degreeLine = `${studyType} in ${area}.` + } else if (studyType || area) { + degreeLine = (studyType || area) + '.' + } + + let dateRange = '' + + if (startDate && endDate) { + dateRange = `${startDate} | ${endDate}` + } else if (startDate) { + dateRange = `${startDate} | Present` + } else { + dateRange = endDate + } + + if (score) { + degreeLine += ` GPA: ${score}` + } + + return stripIndent` + \\begin{cvsubsection}{${location || ''}}{${institution || ''}}{${ + dateRange || '' + }} + \\begin{itemize} + \\item ${degreeLine} + \\end{itemize} + \\end{cvsubsection} + ` + })} + \\end{cvsection} + ` + }, + + workSection(work, heading) { + if (!work) { + return '' + } + + return source` + \\begin{cvsection}{${heading || 'Experience'}} + ${work.map((job) => { + const { + name, + position, + location, + startDate, + endDate = '', + highlights + } = job + + let dateRange = '' + let highlightLines = '' + + if (startDate && endDate) { + dateRange = `${startDate} -- ${endDate}` + } else if (startDate) { + dateRange = `${startDate} -- Present` + } else { + dateRange = endDate + } + + if (highlights) { + highlightLines = source` + \\begin{itemize}% + ${highlights.map((highlight) => `\\item ${highlight}`)} + \\end{itemize} + ` + } + + return stripIndent` + \\begin{cvsubsection}{${position || ''}}{${name || ''}}{${ + dateRange || '' + }} + ${location || ''} + ${highlightLines || ''} + \\end{cvsubsection} + ` + })} + \\end{cvsection} + ` + }, + + skillsSection(skills, heading) { + if (!skills) { + return '' + } + + return source` + \\begin{cvsection}{${heading || 'Skills'}} + \\begin{cvsubsection}{}{}{} + \\begin{itemize} + ${skills.map((skill) => { + const { name, keywords = [] } = skill + return `\\item ${name ? `${name}: ` : ''} ${keywords.join(', ') || ''}` + })} + \\end{itemize} + \\end{cvsubsection} + \\end{cvsection} + ` + }, + + projectsSection(projects, heading) { + if (!projects) { + return '' + } + + return source` + \\begin{cvsection}{${heading || 'Projects'}} + \\begin{cvsubsection}{}{}{} + \\begin{itemize} + \\setlength\\itemsep{3pt} + ${projects.map((project) => { + const { name, description, keywords = [], url } = project + + let line = '' + + if (name) { + line += `\\textbf{${name}} ` + } + + if (url) { + line += `(${url}) ` + } + + if (description) { + line += ` ${description}` + } + + if (keywords) { + line += ` ${keywords.join(', ')}` + } + + return `\\item ${line}` + })} + \\end{itemize} + \\end{cvsubsection} + \\end{cvsection} + ` + }, + + awardsSection(awards, heading) { + if (!awards) { + return '' + } + + return source` + \\begin{cvsection}{${heading || 'Awards'}} + \\begin{cvsubsection}{}{}{} + \\begin{itemize} + \\setlength\\itemsep{3pt} + ${awards.map((award) => { + const { title, summary, date, awarder } = award + + let line = '' + + if (title) { + line += `\\textbf{${title}} ` + } + + if (awarder) { + line += `(${awarder}) ` + } + + if (summary) { + line += ` ${summary}` + } + + if (date) { + line += ` ${date}` + } + + return `\\item ${line}` + })} + \\end{itemize} + \\end{cvsubsection} + \\end{cvsection} + ` + }, + + resumeHeader() { + return stripIndent` + %% The MIT License (MIT) + %% + %% Copyright (c) 2015 Daniil Belyakov + %% + %% 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. + ` + } +} + +function template8(values: FormValues) { + const { headings = {} } = values + + return stripIndent` + ${generator.resumeHeader()} + % The font could be set to Windows-specific Calibri by using the 'calibri' option + \\documentclass[]{mcdowellcv} + + % For mathematical symbols + \\usepackage{amsmath} + + ${generator.profileSection(values.basics)} + + \\begin{document} + % Print the header + \\makeheader + ${values.sections + .map((section) => { + switch (section) { + case 'education': + return generator.educationSection( + values.education, + headings.education + ) + + case 'work': + return generator.workSection(values.work, headings.work) + + case 'skills': + return generator.skillsSection(values.skills, headings.skills) + + case 'projects': + return generator.projectsSection( + values.projects, + headings.projects + ) + + case 'awards': + return generator.awardsSection(values.awards, headings.awards) + + default: + return '' + } + }) + .join('\n')} + ${WHITESPACE} + \\end{document} + ` +} + +export default template8 diff --git a/src/lib/templates/template9.ts b/src/lib/templates/template9.ts index 3dc46677..802842ea 100755 --- a/src/lib/templates/template9.ts +++ b/src/lib/templates/template9.ts @@ -1,346 +1,346 @@ -import { stripIndent, source } from 'common-tags' -import { WHITESPACE } from './constants' -import type { FormValues, Generator } from '../../types' - -const generator: Generator = { - profileSection(basics) { - if (!basics) { - return '' - } - - const { name, email, phone, location = {}, website } = basics - const info = [email, phone, location.address, website] - .filter(Boolean) - .join(' | ') - - return stripIndent` - \\MyName{${name || ''}} - \\bigskip - {\\small \\hfill ${info || ''}} - ` - }, - - educationSection(education, heading) { - if (!education) { - return '' - } - - const lastSchoolIndex = education.length - 1 - - return source` - %%% Education - %%% ------------------------------------------------------------ - \\NewPart{${heading || 'Education'}}{} - ${education.map((school, i) => { - const { - institution = '', - studyType, - area = '', - score = '', - location = '', - startDate = '', - endDate = '' - } = school - - let degreeLine = '' - let nameLine = '' - - if (studyType && area) { - degreeLine = `${studyType} ${area}` - } else if (studyType || area) { - degreeLine = studyType || area - } - - let dateRange = '' - - if (startDate && endDate) { - dateRange = `${startDate} - ${endDate}` - } else if (startDate) { - dateRange = `${startDate} - Present` - } else { - dateRange = endDate - } - - if (institution && location) { - nameLine += `${institution}, ${location}` - } else if (institution || location) { - nameLine = institution || location - } - - if (score) { - nameLine += ` ${score}` - } - - return stripIndent` - \\EducationEntry - {${degreeLine}} - {${dateRange || ''}} - {${nameLine}} - ${i < lastSchoolIndex ? '\\sepspace' : ''} - ` - })} - ` - }, - - workSection(work, heading) { - if (!work) { - return '' - } - - const lastJobIndex = work.length - 1 - - return source` - %%% Work experience - %%% ------------------------------------------------------------ - - \\NewPart{${heading || 'Experience'}}{} - - ${work.map((job, i) => { - const { - name, - position, - location, - startDate, - endDate = '', - highlights - } = job - - const nameLine = [name, location].filter(Boolean).join(', ') - let dateRange = '' - let dutyLines = '' - - if (startDate && endDate) { - dateRange = `${startDate} - ${endDate}` - } else if (startDate) { - dateRange = `${startDate} - Present` - } else { - dateRange = endDate - } - - if (highlights) { - dutyLines = source` - \\begin{itemize} \\itemsep -1pt - ${highlights.map((duty) => `\\item ${duty}`)} - \\end{itemize} - ` - } - - return stripIndent` - \\WorkEntry - {${position || ''}} - {${dateRange || ''}} - {${nameLine}} - {${dutyLines}} - ${i < lastJobIndex ? '\\sepspace' : ''} - ` - })} - ` - }, - - skillsSection(skills, heading) { - if (!skills) { - return '' - } - - return source` - %%% Skills - %%% ------------------------------------------------------------ - \\NewPart{${heading || 'Skills'}}{} - ${skills.map((skill) => { - const { name, keywords = [] } = skill - return `\\SkillsEntry{${name || ''}}{${keywords.join(', ')}}` - })} - ` - }, - - projectsSection(projects, heading) { - if (!projects) { - return '' - } - - const lastProjectIndex = projects.length - 1 - - return source` - %%% Projects - %%% ------------------------------------------------------------ - \\NewPart{${heading || 'Projects'}}{} - - ${projects.map((project, i) => { - const { name, description, keywords = [], url } = project - - return stripIndent` - \\ProjectEntry{${name || ''}}{${url || ''}} - {${keywords.join(', ')}} - {${description || ''}} - ${i < lastProjectIndex ? '\\sepspace' : ''} - ` - })} - ` - }, - - awardsSection(awards, heading) { - if (!awards) { - return '' - } - - const lastAwardIndex = awards.length - 1 - - return source` - %%% Awards - %%% ------------------------------------------------------------ - \\NewPart{${heading || 'Awards'}}{} - - ${awards.map((award, i) => { - const { title, summary, date, awarder } = award - - return stripIndent` - \\AwardEntry{${title || ''}}{${awarder || ''}} - {${date || ''}} - {${summary || ''}} - ${i < lastAwardIndex ? '\\sepspace' : ''} - ` - })} - ` - }, - - resumeHeader() { - return stripIndent` - \\usepackage[english]{babel} - \\usepackage[utf8]{inputenc} - \\usepackage[T1]{fontenc} - \\usepackage{lmodern} - \\usepackage[protrusion=true,expansion=true]{microtype} - \\usepackage[svgnames]{xcolor} % Colours by their 'svgnames' - \\usepackage[margin=0.75in]{geometry} - \\textheight=700px - \\usepackage{url} - \\usepackage{lmodern} % Allow arbitrary font sizes - \\usepackage{textcomp} - - %% Define a new 'modern' style for the url package that will use a smaller font. - \\makeatletter - \\def\\url@modernstyle{ - \\@ifundefined{selectfont}{\\def\\UrlFont{\\sf}}{\\def\\UrlFont{}}} - \\makeatother - \\urlstyle{modern} %% And use the newly defined style. - - \\frenchspacing % Better looking spacings after periods - \\pagestyle{empty} % No pagenumbers/headers/footers - - \\renewcommand{\\familydefault}{\\sfdefault} - - %%% Custom sectioning (sectsty package) - %%% ------------------------------------------------------------ - \\usepackage{sectsty} - - \\sectionfont{ % Change font of \\section command - \\usefont{OT1}{phv}{b}{n}% % bch-b-n: CharterBT-Bold font - \\sectionrule{0pt}{0pt}{-5pt}{3pt}} - - %%% Macros - %%% ------------------------------------------------------------ - \\newlength{\\spacebox} - \\settowidth{\\spacebox}{8888888888} % Box to align text - \\newcommand{\\sepspace}{\\vspace*{1em}} % Vertical space macro - - \\newcommand{\\MyName}[1]{ % Name - \\Huge \\usefont{OT1}{phv}{b}{n} \\hfill #1 - \\par \\normalsize \\normalfont} - - \\newcommand{\\MySlogan}[1]{ % Slogan (optional) - \\large \\usefont{OT1}{phv}{m}{n}\\hfill \\textit{#1} - \\par \\normalsize \\normalfont} - - \\newcommand{\\NewPart}[1]{\\section*{\\uppercase{#1}}} - - \\newcommand{\\PersonalEntry}[2]{ - \\noindent\\hangindent=2em\\hangafter=0 % Indentation - \\parbox{\\spacebox}{ % Box to align text - \\textit{#1}} % Entry name (birth, address, etc.) - \\hspace{1.5em} #2 \\par} % Entry value - - \\newcommand{\\SkillsEntry}[2]{ % Same as \\PersonalEntry - \\noindent\\hangindent=2em\\hangafter=0 % Indentation - \\parbox{\\spacebox}{ % Box to align text - \\textit{#1}} % Entry name (birth, address, etc.) - \\hspace{1.5em} #2 \\par} % Entry value - - \\newcommand{\\AwardsEntry}[2]{ % Same as \\PersonalEntry - \\noindent\\hangindent=2em\\hangafter=0 % Indentation - \\parbox{\\spacebox}{ % Box to align text - \\textit{#1}} % Entry name (birth, address, etc.) - \\hspace{1.5em} #2 \\par} % Entry value - - \\newcommand{\\EducationEntry}[4]{ - \\noindent \\textbf{#1} \\hfill % Study - \\colorbox{Black}{ - \\parbox{8.5em}{ - \\hfill\\color{White}#2}} \\par % Duration - \\noindent \\textit{#3} \\par % School - \\noindent\\hangindent=2em\\hangafter=0 \\small #4 % Description - \\normalsize \\par} - - \\newcommand{\\WorkEntry}[4]{ % Same as \\EducationEntry - \\noindent \\textbf{#1} \\hfill % Jobname - \\colorbox{Black}{% - \\parbox{9em}{% - \\hfill\\color{White}#2}} \\par % Duration - \\noindent \\textit{#3} \\par % Company - \\noindent\\hangindent=2em\\hangafter=0 \\small #4 % Description - \\normalsize \\par} - - \\newcommand{\\ProjectEntry}[4]{ % Similar to \\EducationEntry - \\noindent \\textbf{#1} \\noindent \\textit{#3} \\hfill {#2} \\par - \\noindent \\small #4 % Description - \\normalsize \\par} - - \\newcommand{\\AwardEntry}[4]{ % Similar to \\EducationEntry - \\noindent \\textbf{#1} \\noindent \\textit{#3} \\hfill {#2} \\par - \\noindent \\small #4 % Description - \\normalsize \\par} - ` - } -} - -function template9(values: FormValues) { - const { headings = {} } = values - - return stripIndent` - \\documentclass[fontsize=11pt]{article} - ${generator.resumeHeader()} - \\begin{document} - ${values.sections - .map((section) => { - switch (section) { - case 'profile': - return generator.profileSection(values.basics) - - case 'education': - return generator.educationSection( - values.education, - headings.education - ) - - case 'work': - return generator.workSection(values.work, headings.work) - - case 'skills': - return generator.skillsSection(values.skills, headings.skills) - - case 'projects': - return generator.projectsSection(values.projects, headings.projects) - - case 'awards': - return generator.awardsSection(values.awards, headings.awards) - - default: - return '' - } - }) - .join('\n')} - ${WHITESPACE} - \\end{document} - ` -} - -export default template9 +import { stripIndent, source } from 'common-tags' +import { WHITESPACE } from './constants' +import type { FormValues, Generator } from '../../types' + +const generator: Generator = { + profileSection(basics) { + if (!basics) { + return '' + } + + const { name, email, phone, location = {}, website } = basics + const info = [email, phone, location.address, website] + .filter(Boolean) + .join(' | ') + + return stripIndent` + \\MyName{${name || ''}} + \\bigskip + {\\small \\hfill ${info || ''}} + ` + }, + + educationSection(education, heading) { + if (!education) { + return '' + } + + const lastSchoolIndex = education.length - 1 + + return source` + %%% Education + %%% ------------------------------------------------------------ + \\NewPart{${heading || 'Education'}}{} + ${education.map((school, i) => { + const { + institution = '', + studyType, + area = '', + score = '', + location = '', + startDate = '', + endDate = '' + } = school + + let degreeLine = '' + let nameLine = '' + + if (studyType && area) { + degreeLine = `${studyType} ${area}` + } else if (studyType || area) { + degreeLine = studyType || area + } + + let dateRange = '' + + if (startDate && endDate) { + dateRange = `${startDate} - ${endDate}` + } else if (startDate) { + dateRange = `${startDate} - Present` + } else { + dateRange = endDate + } + + if (institution && location) { + nameLine += `${institution}, ${location}` + } else if (institution || location) { + nameLine = institution || location + } + + if (score) { + nameLine += ` ${score}` + } + + return stripIndent` + \\EducationEntry + {${degreeLine}} + {${dateRange || ''}} + {${nameLine}} + ${i < lastSchoolIndex ? '\\sepspace' : ''} + ` + })} + ` + }, + + workSection(work, heading) { + if (!work) { + return '' + } + + const lastJobIndex = work.length - 1 + + return source` + %%% Work experience + %%% ------------------------------------------------------------ + + \\NewPart{${heading || 'Experience'}}{} + + ${work.map((job, i) => { + const { + name, + position, + location, + startDate, + endDate = '', + highlights + } = job + + const nameLine = [name, location].filter(Boolean).join(', ') + let dateRange = '' + let dutyLines = '' + + if (startDate && endDate) { + dateRange = `${startDate} - ${endDate}` + } else if (startDate) { + dateRange = `${startDate} - Present` + } else { + dateRange = endDate + } + + if (highlights) { + dutyLines = source` + \\begin{itemize} \\itemsep -1pt + ${highlights.map((duty) => `\\item ${duty}`)} + \\end{itemize} + ` + } + + return stripIndent` + \\WorkEntry + {${position || ''}} + {${dateRange || ''}} + {${nameLine}} + {${dutyLines}} + ${i < lastJobIndex ? '\\sepspace' : ''} + ` + })} + ` + }, + + skillsSection(skills, heading) { + if (!skills) { + return '' + } + + return source` + %%% Skills + %%% ------------------------------------------------------------ + \\NewPart{${heading || 'Skills'}}{} + ${skills.map((skill) => { + const { name, keywords = [] } = skill + return `\\SkillsEntry{${name || ''}}{${keywords.join(', ')}}` + })} + ` + }, + + projectsSection(projects, heading) { + if (!projects) { + return '' + } + + const lastProjectIndex = projects.length - 1 + + return source` + %%% Projects + %%% ------------------------------------------------------------ + \\NewPart{${heading || 'Projects'}}{} + + ${projects.map((project, i) => { + const { name, description, keywords = [], url } = project + + return stripIndent` + \\ProjectEntry{${name || ''}}{${url || ''}} + {${keywords.join(', ')}} + {${description || ''}} + ${i < lastProjectIndex ? '\\sepspace' : ''} + ` + })} + ` + }, + + awardsSection(awards, heading) { + if (!awards) { + return '' + } + + const lastAwardIndex = awards.length - 1 + + return source` + %%% Awards + %%% ------------------------------------------------------------ + \\NewPart{${heading || 'Awards'}}{} + + ${awards.map((award, i) => { + const { title, summary, date, awarder } = award + + return stripIndent` + \\AwardEntry{${title || ''}}{${awarder || ''}} + {${date || ''}} + {${summary || ''}} + ${i < lastAwardIndex ? '\\sepspace' : ''} + ` + })} + ` + }, + + resumeHeader() { + return stripIndent` + \\usepackage[english]{babel} + \\usepackage[utf8]{inputenc} + \\usepackage[T1]{fontenc} + \\usepackage{lmodern} + \\usepackage[protrusion=true,expansion=true]{microtype} + \\usepackage[svgnames]{xcolor} % Colours by their 'svgnames' + \\usepackage[margin=0.75in]{geometry} + \\textheight=700px + \\usepackage{url} + \\usepackage{lmodern} % Allow arbitrary font sizes + \\usepackage{textcomp} + + %% Define a new 'modern' style for the url package that will use a smaller font. + \\makeatletter + \\def\\url@modernstyle{ + \\@ifundefined{selectfont}{\\def\\UrlFont{\\sf}}{\\def\\UrlFont{}}} + \\makeatother + \\urlstyle{modern} %% And use the newly defined style. + + \\frenchspacing % Better looking spacings after periods + \\pagestyle{empty} % No pagenumbers/headers/footers + + \\renewcommand{\\familydefault}{\\sfdefault} + + %%% Custom sectioning (sectsty package) + %%% ------------------------------------------------------------ + \\usepackage{sectsty} + + \\sectionfont{ % Change font of \\section command + \\usefont{OT1}{phv}{b}{n}% % bch-b-n: CharterBT-Bold font + \\sectionrule{0pt}{0pt}{-5pt}{3pt}} + + %%% Macros + %%% ------------------------------------------------------------ + \\newlength{\\spacebox} + \\settowidth{\\spacebox}{8888888888} % Box to align text + \\newcommand{\\sepspace}{\\vspace*{1em}} % Vertical space macro + + \\newcommand{\\MyName}[1]{ % Name + \\Huge \\usefont{OT1}{phv}{b}{n} \\hfill #1 + \\par \\normalsize \\normalfont} + + \\newcommand{\\MySlogan}[1]{ % Slogan (optional) + \\large \\usefont{OT1}{phv}{m}{n}\\hfill \\textit{#1} + \\par \\normalsize \\normalfont} + + \\newcommand{\\NewPart}[1]{\\section*{\\uppercase{#1}}} + + \\newcommand{\\PersonalEntry}[2]{ + \\noindent\\hangindent=2em\\hangafter=0 % Indentation + \\parbox{\\spacebox}{ % Box to align text + \\textit{#1}} % Entry name (birth, address, etc.) + \\hspace{1.5em} #2 \\par} % Entry value + + \\newcommand{\\SkillsEntry}[2]{ % Same as \\PersonalEntry + \\noindent\\hangindent=2em\\hangafter=0 % Indentation + \\parbox{\\spacebox}{ % Box to align text + \\textit{#1}} % Entry name (birth, address, etc.) + \\hspace{1.5em} #2 \\par} % Entry value + + \\newcommand{\\AwardsEntry}[2]{ % Same as \\PersonalEntry + \\noindent\\hangindent=2em\\hangafter=0 % Indentation + \\parbox{\\spacebox}{ % Box to align text + \\textit{#1}} % Entry name (birth, address, etc.) + \\hspace{1.5em} #2 \\par} % Entry value + + \\newcommand{\\EducationEntry}[4]{ + \\noindent \\textbf{#1} \\hfill % Study + \\colorbox{Black}{ + \\parbox{8.5em}{ + \\hfill\\color{White}#2}} \\par % Duration + \\noindent \\textit{#3} \\par % School + \\noindent\\hangindent=2em\\hangafter=0 \\small #4 % Description + \\normalsize \\par} + + \\newcommand{\\WorkEntry}[4]{ % Same as \\EducationEntry + \\noindent \\textbf{#1} \\hfill % Jobname + \\colorbox{Black}{% + \\parbox{9em}{% + \\hfill\\color{White}#2}} \\par % Duration + \\noindent \\textit{#3} \\par % Company + \\noindent\\hangindent=2em\\hangafter=0 \\small #4 % Description + \\normalsize \\par} + + \\newcommand{\\ProjectEntry}[4]{ % Similar to \\EducationEntry + \\noindent \\textbf{#1} \\noindent \\textit{#3} \\hfill {#2} \\par + \\noindent \\small #4 % Description + \\normalsize \\par} + + \\newcommand{\\AwardEntry}[4]{ % Similar to \\EducationEntry + \\noindent \\textbf{#1} \\noindent \\textit{#3} \\hfill {#2} \\par + \\noindent \\small #4 % Description + \\normalsize \\par} + ` + } +} + +function template9(values: FormValues) { + const { headings = {} } = values + + return stripIndent` + \\documentclass[fontsize=11pt]{article} + ${generator.resumeHeader()} + \\begin{document} + ${values.sections + .map((section) => { + switch (section) { + case 'profile': + return generator.profileSection(values.basics) + + case 'education': + return generator.educationSection( + values.education, + headings.education + ) + + case 'work': + return generator.workSection(values.work, headings.work) + + case 'skills': + return generator.skillsSection(values.skills, headings.skills) + + case 'projects': + return generator.projectsSection(values.projects, headings.projects) + + case 'awards': + return generator.awardsSection(values.awards, headings.awards) + + default: + return '' + } + }) + .join('\n')} + ${WHITESPACE} + \\end{document} + ` +} + +export default template9 diff --git a/src/pages/MakePage.module.css b/src/pages/MakePage.module.css new file mode 100644 index 00000000..bfee35ae --- /dev/null +++ b/src/pages/MakePage.module.css @@ -0,0 +1,38 @@ +/* Dans votre fichier MakePage.module.css */ + +.container { + max-width: 800px; + margin: 0 auto; + padding: 20px; + border: 1px solid #ddd; + border-radius: 8px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); +} + +.section { + margin-bottom: 20px; + padding: 10px; + border: 1px solid #eee; + border-radius: 4px; + background-color: #f9f9f9; + color: black; +} + +.section p { + margin: 0; + padding: 5px 0; +} + +.submitButton { + background-color: #4caf50; /* Green background color */ + color: white; /* White text color */ + padding: 10px 15px; /* Padding */ + border: none; /* No border */ + border-radius: 4px; /* Rounded corners */ + cursor: pointer; /* Pointer cursor */ + } + + /* Add a hover effect */ + .submitButton:hover { + background-color: #45a049; + } diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 57e4c538..b5e8517b 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,17 +1,21 @@ -import type { AppProps } from 'next/app' -import Head from 'next/head' -import { GlobalStyle } from '../components/core/GlobalStyle' - -function App({ Component, pageProps }: AppProps) { - return ( - <> - - Resumake - - - - - ) -} - -export default App +import type { AppProps } from 'next/app' +import Head from 'next/head' +import { GlobalStyle } from '../components/core/GlobalStyle' +import { Provider } from 'react-redux' +import { store } from '../store/store' + +import 'bootstrap/dist/css/bootstrap.min.css'; + +function App({ Component, pageProps }: AppProps) { + return ( + + + Resumake + + + + + ) +} + +export default App diff --git a/src/pages/api/generate-source.ts b/src/pages/api/generate-source.ts index c9c89f71..80d8b2a8 100644 --- a/src/pages/api/generate-source.ts +++ b/src/pages/api/generate-source.ts @@ -1,69 +1,69 @@ -import type { NextApiRequest, NextApiResponse } from 'next' -import Archiver from 'archiver' -import { stripIndent } from 'common-tags' -import getTemplateData from '../../lib/templates' -import { FormValues } from '../../types' - -export default async function handler( - req: NextApiRequest, - res: NextApiResponse -) { - if (req.method !== 'POST') { - res.status(405) - return - } - - const sourceCode = await generateSourceCode(req.body as FormValues) - sourceCode - .pipe(res) - .setHeader('content-type', 'application/zip') - .setHeader('content-disposition', 'attachment; filename="resume.zip"') -} - -/** - * Generates resume source files from the request body, - * and then saves it to a zip which is then sent to the client. - * - * @param formData The request body received from the client. - * - * @return The generated zip. - */ -function generateSourceCode(formData: FormValues) { - const { texDoc, opts } = getTemplateData(formData) - const prettyDoc = /*prettify(texDoc)*/ texDoc - const zip = Archiver('zip') - const readme = makeReadme(formData.selectedTemplate, opts.cmd) - - zip.append(prettyDoc, { name: 'resume.tex' }) - zip.append(readme, { name: 'README.md' }) - - if (opts.inputs) { - zip.directory(opts.inputs, '../') - } - - zip.finalize() - - return zip -} - -/** - * Generates a README to include in the output zip. - * It details how to use the generated LaTeX source code. - * - * @param template The specified resume template. - * @param cmd The LaTeX command that is used to generate the PDF. - * - * @return The generated README text. - */ -function makeReadme(template: number, cmd: string): string { - return stripIndent` - # Resumake Template ${template} - > LaTeX code generated at [resumake.io](https://resumake.io) - ## Usage - To generate a PDF from this LaTeX code, navigate to this folder in a terminal and run: - ${cmd} resume.tex - ## Requirements - You will need to have \`${cmd}\` installed on your machine. - Alternatively, you can use a site like [ShareLaTeX](https://sharelatex.com) to build and edit your LaTeX instead. - ` -} +import type { NextApiRequest, NextApiResponse } from 'next' +import Archiver from 'archiver' +import { stripIndent } from 'common-tags' +import getTemplateData from '../../lib/templates' +import { FormValues } from '../../types' + +export default async function handler( + req: NextApiRequest, + res: NextApiResponse +) { + if (req.method !== 'POST') { + res.status(405) + return + } + + const sourceCode = await generateSourceCode(req.body as FormValues) + sourceCode + .pipe(res) + .setHeader('content-type', 'application/zip') + .setHeader('content-disposition', 'attachment; filename="resume.zip"') +} + +/** + * Generates resume source files from the request body, + * and then saves it to a zip which is then sent to the client. + * + * @param formData The request body received from the client. + * + * @return The generated zip. + */ +function generateSourceCode(formData: FormValues) { + const { texDoc, opts } = getTemplateData(formData) + const prettyDoc = /*prettify(texDoc)*/ texDoc + const zip = Archiver('zip') + const readme = makeReadme(formData.selectedTemplate, opts.cmd) + + zip.append(prettyDoc, { name: 'resume.tex' }) + zip.append(readme, { name: 'README.md' }) + + if (opts.inputs) { + zip.directory(opts.inputs, '../') + } + + zip.finalize() + + return zip +} + +/** + * Generates a README to include in the output zip. + * It details how to use the generated LaTeX source code. + * + * @param template The specified resume template. + * @param cmd The LaTeX command that is used to generate the PDF. + * + * @return The generated README text. + */ +function makeReadme(template: number, cmd: string): string { + return stripIndent` + # Resumake Template ${template} + > LaTeX code generated at [resumake.io](https://resumake.io) + ## Usage + To generate a PDF from this LaTeX code, navigate to this folder in a terminal and run: + ${cmd} resume.tex + ## Requirements + You will need to have \`${cmd}\` installed on your machine. + Alternatively, you can use a site like [ShareLaTeX](https://sharelatex.com) to build and edit your LaTeX instead. + ` +} diff --git a/src/pages/connexion.tsx b/src/pages/connexion.tsx new file mode 100644 index 00000000..c6091213 --- /dev/null +++ b/src/pages/connexion.tsx @@ -0,0 +1,104 @@ +import React, { useState } from 'react'; +import axios from 'axios'; +import { saveToken } from '../token/token'; +import { useRouter } from 'next/router'; + +const LoginForm = () => { + const [email, setEmail] = useState(''); + const [password, setPassword] = useState(''); + const router = useRouter() + + const handleLogin = async () => { + try { + // Assuming your Laravel API is running at http://127.0.0.1:8000 + const apiUrl = 'http://127.0.0.1:8000/api/login'; + + const response = await axios.post(apiUrl, { + email: email, + password: password, + }); + + const newResponse = JSON.stringify(response.data); + saveToken(newResponse); + + // Handle the response from the server + //console.log('reponse', newReesponse); // You might want to do something more meaningful here + + router.push('/'); + + } catch (error) { + // Handle errors + console.error('Login failed:'); + + + } + }; + + + return ( +
+

Connexion

+
+ + setEmail(e.target.value)} + style={styles.input} + /> + + + setPassword(e.target.value)} + style={styles.input} + /> + +
+
+ ); +}; + +const styles = { + container: { + width: '300px', + margin: 'auto', + marginTop: '50px', + padding: '20px', + border: '1px solid #ccc', + borderRadius: '8px', + boxShadow: '0 0 10px rgba(0, 0, 0, 0.1)', + }, + heading: { + textAlign: 'center', + color: '#333', + }, + form: { + display: 'flex', + flexDirection: 'column', + marginTop: '20px', + }, + label: { + marginBottom: '5px', + color: '#555', + }, + input: { + padding: '8px', + marginBottom: '15px', + borderRadius: '4px', + border: '1px solid #ccc', + }, + button: { + backgroundColor: '#007BFF', + color: '#fff', + padding: '10px', + border: 'none', + borderRadius: '4px', + cursor: 'pointer', + }, +}; + +export default LoginForm; diff --git a/src/pages/generator.tsx b/src/pages/generator.tsx index 9b85127c..4950fa34 100644 --- a/src/pages/generator.tsx +++ b/src/pages/generator.tsx @@ -1,32 +1,32 @@ -import dynamic from 'next/dynamic' -import styled from 'styled-components' - -import { Form } from '../components/generator/Form' -import { Header } from '../components/generator/Header' -import { Sidebar } from '../components/generator/Sidebar' - -const Preview = dynamic( - async () => (await import('../components/generator/Preview')).Preview, - { ssr: false } -) - -const Main = styled.main` - display: grid; - grid-template-columns: 0.3fr 0.7fr 1fr; - grid-template-rows: auto 1fr; - grid-template-areas: - 'header header header' - 'sidebar form preview'; - height: 100vh; -` - -export default function GeneratorPage() { - return ( -
-
- -
- -
- ) -} +import dynamic from 'next/dynamic' +import styled from 'styled-components' + +import { Form } from '../components/generator/Form' +import { Header } from '../components/generator/Header' +import { Sidebar } from '../components/generator/Sidebar' + +const Preview = dynamic( + async () => (await import('../components/generator/Preview')).Preview, + { ssr: false } +) + +const Main = styled.main` + display: grid; + grid-template-columns: 0.3fr 0.7fr 1fr; + grid-template-rows: auto 1fr; + grid-template-areas: + 'header header header' + 'sidebar form preview'; + height: 100vh; +` + +export default function GeneratorPage(props: any) { + return ( +
+
+ + + +
+ ) +} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 61180b46..85bfab57 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,114 +1,128 @@ -import { useState, useEffect } from 'react' -import Link from 'next/link' -import { useRouter } from 'next/router' -import styled from 'styled-components' -import { lighten, darken } from 'polished' - -import { Logo } from '../components/core/Logo' -import { PrimaryButton, Button } from '../components/core/Button' -import { colors } from '../theme' - -const Wrapper = styled.div` - height: 100vh; - display: grid; - grid-template-rows: 1fr 75px; -` - -const Main = styled.main` - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; -` - -const Footer = styled.footer` - background: ${darken(0.02, colors.background)}; - border-top: 1px solid ${colors.borders}; - padding: 0 50px; - - display: flex; - justify-content: space-between; - align-items: center; - gap: 2em; - font-size: 0.8em; - color: ${lighten(0.3, colors.background)}; - - @media screen and (max-width: 850px) { - padding: 0 15px; - } - - a { - text-decoration: none; - color: ${lighten(0.3, colors.background)}; - &:hover { - text-decoration: underline; - } - } -` - -const Copyright = styled.span` - flex: 1; -` - -const HiddenInput = styled.input` - display: none; -` - -export default function Home() { - const router = useRouter() - const [hasSession, setHasSession] = useState(false) - - useEffect(() => { - if (typeof window !== 'undefined') { - setHasSession(!!localStorage.getItem('jsonResume')) - } - }, []) - - const startNewSession = () => { - window.localStorage.clear() - router.push('/generator') - } - - const handleFileUpload = async (e: React.ChangeEvent) => { - const reader = new FileReader() - reader.addEventListener('load', (e) => { - // TODO: validate JSON schema using Zod - const jsonResume = JSON.parse(e.target?.result as string) - localStorage.setItem('jsonResume', JSON.stringify(jsonResume)) - router.push('/generator') - }) - - if (e.target.files) { - reader.readAsText(e.target.files[0]) - } - } - - return ( - -
- - Make New Resume - {hasSession && ( - - - - )} - - -
- -
- ) -} +import { useState, useEffect } from 'react' +import Link from 'next/link' +import { useRouter } from 'next/router' +import styled from 'styled-components' +import { lighten, darken } from 'polished' + +import { Logo } from '../components/core/Logo' +import { PrimaryButton, Button } from '../components/core/Button' +import { colors } from '../theme' +import {getToken} from '../token/token' + +const Wrapper = styled.div` + height: 100vh; + display: grid; + grid-template-rows: 1fr 75px; +` + +const Main = styled.main` + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +` + +const Footer = styled.footer` + background: ${darken(0.02, colors.background)}; + border-top: 1px solid ${colors.borders}; + padding: 0 50px; + + display: flex; + justify-content: space-between; + align-items: center; + gap: 2em; + font-size: 0.8em; + color: ${lighten(0.3, colors.background)}; + + @media screen and (max-width: 850px) { + padding: 0 15px; + } + + a { + text-decoration: none; + color: ${lighten(0.3, colors.background)}; + &:hover { + text-decoration: underline; + } + } +` + +const Copyright = styled.span` + flex: 1; +` + +const HiddenInput = styled.input` + display: none; +` + +export default function Home() { + const router = useRouter() + const [hasSession, setHasSession] = useState(false) + const tokenSection = getToken()? getToken():'' + useEffect(() => { + if (typeof window !== 'undefined') { + setHasSession(!!localStorage.getItem('jsonResume')) + } + }, []) + + const startNewSession = () => { + window.localStorage.clear() + router.push('/generator') + } + + const startToken = () => { + if(!tokenSection) { + router.push('/connexion') + } + } + + const handleFileUpload = async (e: React.ChangeEvent) => { + const reader = new FileReader() + reader.addEventListener('load', (e) => { + // TODO: validate JSON schema using Zod + const jsonResume = JSON.parse(e.target?.result as string) + localStorage.setItem('jsonResume', JSON.stringify(jsonResume)) + router.push('/generator') + }) + + if (e.target.files) { + reader.readAsText(e.target.files[0]) + } + } + + return ( + +
+ + Make New Resume + {hasSession && ( + + + + + )} + {tokenSection && ( + + + + )} + + + +
+ +
+ ) +} diff --git a/src/slice/DataSlice.ts b/src/slice/DataSlice.ts new file mode 100644 index 00000000..e793ebff --- /dev/null +++ b/src/slice/DataSlice.ts @@ -0,0 +1,19 @@ +import { createSlice, PayloadAction } from "@reduxjs/toolkit"; + +const dataSlice = createSlice({ + name: 'data', + initialState: [], + reducers: { + setData: (state, action: PayloadAction) => { + return [...state, action.payload]; + } + } +}); + +export const { setData } = dataSlice.actions; + +const rootReducer = { + isData: dataSlice.reducer +}; + +export default rootReducer; diff --git a/src/slice/index.ts b/src/slice/index.ts new file mode 100644 index 00000000..8d86e6a4 --- /dev/null +++ b/src/slice/index.ts @@ -0,0 +1,8 @@ +import { combineReducers } from "@reduxjs/toolkit"; +import DataSlice from './DataSlice' + +const rootReduceur = combineReducers({ + isData: DataSlice.isData +}) + +export default rootReduceur \ No newline at end of file diff --git a/src/store/store.ts b/src/store/store.ts new file mode 100644 index 00000000..c1d0a358 --- /dev/null +++ b/src/store/store.ts @@ -0,0 +1,6 @@ +import { configureStore } from '@reduxjs/toolkit' +import rootReduceur from '../slice' + +export const store = configureStore({ + reducer: rootReduceur, +}) \ No newline at end of file diff --git a/src/theme/colors.ts b/src/theme/colors.ts index 5102e3a9..64d911ac 100644 --- a/src/theme/colors.ts +++ b/src/theme/colors.ts @@ -1,18 +1,18 @@ -export const black = '#0F0F0F' -export const lightGray = '#121217' -export const gray = '#161619' -export const white = '#ffffff' -export const green = '#22d7a6' - -export const primary = green -export const accent = green -export const foreground = white -export const background = '#14171d' -export const borders = '#202530' -export const placeholders = borders -export const card = lightGray -export const input = '#202530' -export const placeholder = '#c0c5ce' -export const header = lightGray -export const sidebar = lightGray -export const footer = lightGray +export const black = '#0F0F0F' +export const lightGray = '#121217' +export const gray = '#161619' +export const white = '#ffffff' +export const green = '#22d7a6' + +export const primary = green +export const accent = green +export const foreground = white +export const background = '#14171d' +export const borders = '#202530' +export const placeholders = borders +export const card = lightGray +export const input = '#202530' +export const placeholder = '#c0c5ce' +export const header = lightGray +export const sidebar = lightGray +export const footer = lightGray diff --git a/src/theme/index.ts b/src/theme/index.ts index 6d763cce..40a67d63 100644 --- a/src/theme/index.ts +++ b/src/theme/index.ts @@ -1,2 +1,2 @@ -export * as colors from './colors' -export * as sizes from './sizes' +export * as colors from './colors' +export * as sizes from './sizes' diff --git a/src/theme/sizes.ts b/src/theme/sizes.ts index d296ffd2..e8accca3 100644 --- a/src/theme/sizes.ts +++ b/src/theme/sizes.ts @@ -1,32 +1,32 @@ -export const sidebar = { - width: '5rem', - height: '100vh' -} - -export const header = { - width: `calc(100vw - ${sidebar.width})`, - height: '3.75rem' -} - -export const footer = { - width: '100vw', - height: '2.5rem' -} - -export const formSection = { - width: '30%', - height: '100vh' -} - -export const previewSection = { - width: '50%', - height: '100vh' -} - -export const templatesSection = { - width: '20%' -} - -export const card = { - width: '85%' -} +export const sidebar = { + width: '5rem', + height: '100vh' +} + +export const header = { + width: `calc(100vw - ${sidebar.width})`, + height: '3.75rem' +} + +export const footer = { + width: '100vw', + height: '2.5rem' +} + +export const formSection = { + width: '30%', + height: '100vh' +} + +export const previewSection = { + width: '50%', + height: '100vh' +} + +export const templatesSection = { + width: '20%' +} + +export const card = { + width: '85%' +} diff --git a/src/token/token.tsx b/src/token/token.tsx new file mode 100644 index 00000000..c70e5b8f --- /dev/null +++ b/src/token/token.tsx @@ -0,0 +1,18 @@ +const TOKEN = 'USER_TOKEN' + +export const deleteToken = ()=>{ + localStorage.removeItem(TOKEN) +} + + +export const getToken = () => { + //console.log('okkkkkk', localStorage.getItem(TOKEN)) + if (typeof localStorage !== 'undefined') { + return localStorage?.getItem(TOKEN) + } + return ''; + }; + +export const saveToken= (token:string)=>{ + return localStorage.setItem(TOKEN,token) +} diff --git a/src/types.ts b/src/types.ts index cbad7c71..683b3bcf 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,140 +1,140 @@ -export type Location = { - address?: string - postalCode?: string - city?: string - countryCode?: string - region?: string -} - -export type Profile = { - url?: string -} - -export type Basics = { - name?: string - email?: string - phone?: string - location?: Location - profiles?: Profile[] // TODO: revisit how profiles gets rendered - - // non-standard attribute - website?: string -} - -export type Work = { - name?: string - // non-standard attribute - company?: string - - position?: string - startDate?: string - endDate?: string - summary?: string - highlights: string[] - - // non-standard attribute - location?: string -} - -export type Volunteer = { - organization?: string - position?: string - startDate?: string - endDate?: string - summary?: string - highlights?: string[] -} - -export type Education = { - institution?: string - area?: string - studyType?: string - startDate?: string - endDate?: string - score?: string - - // non-standard attribute - location?: string -} - -export type Award = { - title?: string - date?: string - awarder?: string - summary?: string -} - -export type Publication = { - name?: string - publisher?: string - releaseDate?: string - url?: string - summary?: string -} - -export type Skill = { - name?: string - level?: string - keywords?: string[] -} - -export type Project = { - name?: string - description?: string - highlights?: string[] - keywords?: string[] - url?: string - startDate?: string - endDate?: string -} - -// Based on the [JSON Resume](http://jsonresume.org/) standard with extensions -// added as needed -export type Resume = { - basics?: Basics - work?: Work[] - volunteer?: Volunteer[] - education?: Education[] - awards?: Award[] - publications?: Publication[] - skills?: Skill[] - projects?: Project[] -} - -export type FormValues = Resume & { - headings: { [K in keyof Resume]?: string } - sections: ( - | 'profile' - | 'education' - | 'work' - | 'skills' - | 'projects' - | 'awards' - )[] - selectedTemplate: number -} - -export interface FormState { - isGenerating: boolean -} - -export type Generator = { - resumeHeader: () => string - profileSection: (basics?: Basics) => string - educationSection: (education?: Array, heading?: string) => string - workSection: (work?: Array, heading?: string) => string - skillsSection: (skills?: Array, heading?: string) => string - projectsSection: (projects?: Array, heading?: string) => string - awardsSection: (awards?: Array, heading?: string) => string -} - -export type LaTeXOpts = { - cmd: 'pdflatex' | 'xelatex' - inputs?: string[] - fonts?: string[] -} - -export type TemplateData = { - texDoc: string - opts: LaTeXOpts -} +export type Location = { + address?: string + postalCode?: string + city?: string + countryCode?: string + region?: string +} + +export type Profile = { + url?: string +} + +export type Basics = { + name?: string + email?: string + phone?: string + location?: Location + profiles?: Profile[] // TODO: revisit how profiles gets rendered + + // non-standard attribute + website?: string +} + +export type Work = { + name?: string + // non-standard attribute + company?: string + + position?: string + startDate?: string + endDate?: string + summary?: string + highlights: string[] + + // non-standard attribute + location?: string +} + +export type Volunteer = { + organization?: string + position?: string + startDate?: string + endDate?: string + summary?: string + highlights?: string[] +} + +export type Education = { + institution?: string + area?: string + studyType?: string + startDate?: string + endDate?: string + score?: string + + // non-standard attribute + location?: string +} + +export type Award = { + title?: string + date?: string + awarder?: string + summary?: string +} + +export type Publication = { + name?: string + publisher?: string + releaseDate?: string + url?: string + summary?: string +} + +export type Skill = { + name?: string + level?: string + keywords?: string[] +} + +export type Project = { + name?: string + description?: string + highlights?: string[] + keywords?: string[] + url?: string + startDate?: string + endDate?: string +} + +// Based on the [JSON Resume](http://jsonresume.org/) standard with extensions +// added as needed +export type Resume = { + basics?: Basics + work?: Work[] + volunteer?: Volunteer[] + education?: Education[] + awards?: Award[] + publications?: Publication[] + skills?: Skill[] + projects?: Project[] +} + +export type FormValues = Resume & { + headings: { [K in keyof Resume]?: string } + sections: ( + | 'profile' + | 'education' + | 'work' + | 'skills' + | 'projects' + | 'awards' + )[] + selectedTemplate: number +} + +export interface FormState { + isGenerating: boolean +} + +export type Generator = { + resumeHeader: () => string + profileSection: (basics?: Basics) => string + educationSection: (education?: Array, heading?: string) => string + workSection: (work?: Array, heading?: string) => string + skillsSection: (skills?: Array, heading?: string) => string + projectsSection: (projects?: Array, heading?: string) => string + awardsSection: (awards?: Array, heading?: string) => string +} + +export type LaTeXOpts = { + cmd: 'pdflatex' | 'xelatex' + inputs?: string[] + fonts?: string[] +} + +export type TemplateData = { + texDoc: string + opts: LaTeXOpts +} diff --git a/tsconfig.json b/tsconfig.json index 99710e85..7f8d52a5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,20 +1,20 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], - "exclude": ["node_modules"] -} +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +}